{"id":61104,"date":"2026-05-01T12:17:53","date_gmt":"2026-05-01T16:17:53","guid":{"rendered":"https:\/\/www.assur360.ca\/assur360-simulators-free-tools-for-your-financial-decisions\/quebec-tax-savings-plan-comparator-2026-rrsp-tfsa-fhsa-resp-vrsp\/"},"modified":"2026-05-01T14:13:20","modified_gmt":"2026-05-01T18:13:20","slug":"quebec-tax-savings-plan-comparator-2026-rrsp-tfsa-fhsa-resp-vrsp","status":"publish","type":"page","link":"https:\/\/www.assur360.ca\/en\/assur360-simulators-free-tools-for-your-financial-decisions\/quebec-tax-savings-plan-comparator-2026-rrsp-tfsa-fhsa-resp-vrsp\/","title":{"rendered":"Quebec Tax Savings Plan Comparator 2026 \u2014 RRSP, TFSA, FHSA, RESP, VRSP"},"content":{"rendered":"\n\n<style>\n#ez-toc-container{display:none!important}.entry-title,.page-title,.ast-page-title,.ast-archive-title{display:none!important}\n.regimes-wrap{font-family:'DM Sans','Inter',sans-serif;max-width:1200px;margin:0 auto;padding:0 16px}\n.regimes-hero{background:linear-gradient(135deg,#0d1f2d,#1a3a4a);color:#fff;padding:48px 32px;border-radius:16px;margin:24px 0;position:relative;overflow:hidden}\n.regimes-hero::before{content:'';position:absolute;top:-100px;right:-100px;width:300px;height:300px;background:radial-gradient(circle,rgba(16,196,199,.18),transparent 70%);border-radius:50%}\n.regimes-hero h1{font-family:'Sora','DM Sans',sans-serif;font-size:36px;line-height:1.15;margin:0 0 14px;font-weight:700;position:relative;color:#fff !important}\n.regimes-hero p{font-size:17px;line-height:1.55;color:#cbd5e1;margin:0 0 18px;max-width:780px;position:relative}\n.regimes-hero .badges{display:flex;flex-wrap:wrap;gap:8px;position:relative}\n.regimes-hero .badge{background:rgba(16,196,199,.18);color:#7dd3d4;padding:6px 12px;border-radius:20px;font-size:12.5px;font-weight:600;border:1px solid rgba(16,196,199,.3)}\n.regimes-warn{background:#fff8e1;border:2px solid #fbbf24;border-radius:10px;padding:16px 20px;margin:0 0 28px;color:#78350f;font-size:14.5px;line-height:1.55}\n\n.regimes-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin:0 0 32px}\n.regimes-stat{background:#f8fafc;border-radius:12px;padding:18px 16px;text-align:center;border:1px solid #e2e8f0}\n.regimes-stat .v{font-family:'Sora',sans-serif;font-size:24px;font-weight:700;color:#10c4c7;line-height:1}\n.regimes-stat .l{font-size:12.5px;color:#64748b;margin-top:6px;font-weight:500}\n\n\/* Presets situations de vie *\/\n.regimes-presets{margin:0 0 28px}\n.regimes-presets h3{font-family:'Sora',sans-serif;font-size:15px;color:#0d1f2d;margin:0 0 12px;font-weight:600;text-transform:uppercase;letter-spacing:.4px}\n.regimes-presets-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}\n.regimes-preset{background:#fff;border:1.5px solid #e2e8f0;border-radius:10px;padding:14px 16px;cursor:pointer;text-align:left;transition:all .15s;font-family:inherit}\n.regimes-preset:hover{border-color:#10c4c7;background:#ecfeff;transform:translateY(-1px)}\n.regimes-preset strong{display:block;font-size:14px;color:#0d1f2d;margin-bottom:4px;font-weight:700}\n.regimes-preset span{font-size:12.5px;color:#64748b;line-height:1.4}\n\n.regimes-calc{background:#fff;border:2px solid #e2e8f0;border-radius:16px;padding:28px;margin:0 0 32px;box-shadow:0 4px 20px rgba(13,31,45,.04)}\n.regimes-calc h2{font-family:'Sora',sans-serif;font-size:22px;color:#0d1f2d;margin:0 0 22px;font-weight:700;display:flex;align-items:center;gap:10px}\n.regimes-calc h2::before{content:'';width:4px;height:22px;background:#10c4c7;border-radius:2px}\n.regimes-calc h3.sub{font-family:'Sora',sans-serif;font-size:15px;color:#475569;margin:24px 0 12px;font-weight:600;text-transform:uppercase;letter-spacing:.4px;padding-top:18px;border-top:1px solid #f1f5f9}\n.regimes-calc h3.sub:first-of-type{margin-top:0;padding-top:0;border-top:none}\n.regimes-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}\n.regimes-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}\n.regimes-field{display:flex;flex-direction:column;gap:6px}\n.regimes-field label{font-size:13.5px;color:#334155;font-weight:600}\n.regimes-field .hint{font-size:12px;color:#64748b;font-weight:400}\n.regimes-field input[type=number],.regimes-field select,.regimes-field input[type=text]{padding:11px 14px;border:1.5px solid #cbd5e1;border-radius:8px;font-size:15px;font-family:inherit;background:#fff;color:#0d1f2d;transition:border .15s}\n.regimes-field input[type=number]:focus,.regimes-field select:focus,.regimes-field input[type=text]:focus{outline:none;border-color:#10c4c7;box-shadow:0 0 0 3px rgba(16,196,199,.15)}\n\n.regimes-radios{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}\n.regimes-radios button{padding:9px 14px;border:1.5px solid #cbd5e1;background:#fff;border-radius:8px;font-size:13px;font-weight:600;color:#475569;cursor:pointer;transition:all .15s;font-family:inherit}\n.regimes-radios button:hover{border-color:#10c4c7;color:#10c4c7}\n.regimes-radios button.active{background:#10c4c7;border-color:#10c4c7;color:#fff}\n\n.regimes-result{background:linear-gradient(135deg,#0d1f2d,#1e3a52);color:#fff;border-radius:16px;padding:32px;margin:0 0 32px}\n.regimes-result h3{font-family:'Sora',sans-serif;font-size:14px;color:#94a3b8;margin:0 0 8px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}\n.regimes-recommend{background:rgba(16,196,199,.12);border:1.5px solid rgba(16,196,199,.4);border-radius:12px;padding:22px 24px;margin-bottom:24px}\n.regimes-recommend .reco-title{font-family:'Sora',sans-serif;font-size:13px;color:#7dd3d4;margin:0 0 6px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}\n.regimes-recommend .reco-name{font-family:'Sora',sans-serif;font-size:26px;font-weight:700;color:#fff;margin:0 0 12px;line-height:1.15}\n.regimes-recommend .reco-why{font-size:14.5px;color:#cbd5e1;line-height:1.6;margin:0}\n.regimes-recommend .nuance{margin-top:14px;padding:14px;background:rgba(255,255,255,.06);border-radius:8px;font-size:13.5px;color:#cbd5e1;line-height:1.55}\n.regimes-recommend .nuance strong{color:#7dd3d4;display:block;margin-bottom:4px;font-size:12.5px;text-transform:uppercase;letter-spacing:.4px}\n\n.regimes-charts{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:24px}\n.regimes-chart-box{background:#fff;border-radius:12px;padding:18px}\n.regimes-chart-box h4{font-family:'Sora',sans-serif;font-size:14px;color:#0d1f2d;margin:0 0 12px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}\n.regimes-chart-box canvas{max-width:100%;height:300px!important}\n.regimes-chart-full{grid-column:1\/-1}\n\n.regimes-table-wrap{overflow-x:auto;background:#fff;border-radius:12px;margin-bottom:18px}\n.regimes-table{width:100%;border-collapse:collapse;font-size:13.5px;color:#0d1f2d}\n.regimes-table th{background:#0d1f2d;color:#fff;padding:12px 14px;text-align:left;font-weight:600;font-size:12.5px;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}\n.regimes-table th:first-child{border-radius:8px 0 0 0}\n.regimes-table th:last-child{border-radius:0 8px 0 0}\n.regimes-table td{padding:11px 14px;border-bottom:1px solid #f1f5f9}\n.regimes-table tbody tr:nth-child(even){background:#f8fafc}\n.regimes-table .reg-name{font-weight:700;color:#0d1f2d}\n.regimes-table .reg-best{background:#ecfeff!important}\n.regimes-table .reg-best .reg-name{color:#0e7490}\n.regimes-table .num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}\n\n.regimes-decaiss{background:#fff;border-radius:12px;padding:22px;margin-bottom:18px}\n.regimes-decaiss h4{font-family:'Sora',sans-serif;font-size:15px;color:#0d1f2d;margin:0 0 16px;font-weight:700}\n.regimes-decaiss-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:14px}\n.regimes-decaiss-card{background:#f8fafc;border-radius:10px;padding:16px;text-align:center;border-left:4px solid #10c4c7}\n.regimes-decaiss-card .v{font-family:'Sora',sans-serif;font-size:22px;font-weight:700;color:#0d1f2d;line-height:1.05}\n.regimes-decaiss-card .l{font-size:12px;color:#64748b;margin-top:6px;font-weight:500;text-transform:uppercase;letter-spacing:.3px}\n.regimes-decaiss .order{font-size:13.5px;color:#475569;line-height:1.5;background:#f0fdfa;padding:12px 14px;border-radius:8px}\n.regimes-decaiss .order strong{color:#0e7490}\n\n.regimes-hypotheses{background:#fefce8;border:1.5px solid #fde047;border-radius:12px;padding:18px 22px;margin-bottom:18px}\n.regimes-hypotheses h4{font-family:'Sora',sans-serif;font-size:13px;color:#854d0e;margin:0 0 10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px}\n.regimes-hypotheses ul{margin:0;padding-left:18px;font-size:13.5px;color:#713f12;line-height:1.65}\n.regimes-hypotheses li{margin-bottom:3px}\n.regimes-hypotheses strong{color:#451a03}\n\n@media(max-width:760px){\n.regimes-hero h1{font-size:26px}\n.regimes-hero{padding:32px 22px}\n.regimes-stats,.regimes-presets-grid{grid-template-columns:repeat(2,1fr)}\n.regimes-grid,.regimes-grid-3,.regimes-charts,.regimes-decaiss-grid{grid-template-columns:1fr}\n.regimes-calc{padding:18px}\n}\n\n\/* Sections *\/\n.regimes-section{padding:36px 0 8px}\n.regimes-section h2{font-family:'Sora',sans-serif;font-size:26px;color:#0d1f2d;margin:0 0 8px;font-weight:700;line-height:1.2}\n.regimes-section .lead{font-size:16px;color:#475569;margin:0 0 22px;max-width:820px;line-height:1.55}\n.regimes-cards3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin:8px 0 12px}\n.regimes-cards2{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin:8px 0 12px}\n.regimes-card{background:#f8fafc;border-radius:12px;padding:22px;border-top:4px solid #10c4c7}\n.regimes-card h3{font-family:'Sora',sans-serif;font-size:18px;color:#0d1f2d;margin:0 0 10px;font-weight:700}\n.regimes-card p{font-size:14.5px;color:#475569;line-height:1.6;margin:0 0 8px}\n.regimes-card ul{margin:8px 0 0 18px;padding:0;font-size:14px;color:#475569;line-height:1.65}\n\n.regimes-tip{background:linear-gradient(135deg,#0d1f2d,#1e3a52);color:#fff;border-radius:14px;padding:24px 26px;margin:18px 0;border:2px solid #10c4c7}\n.regimes-tip strong{color:#7dd3d4}\n\n.regimes-eeat{background:#f0fdfa;border-radius:14px;padding:28px;margin:24px 0;display:grid;grid-template-columns:repeat(3,1fr);gap:16px}\n.regimes-eeat .item{display:flex;gap:12px;align-items:flex-start}\n.regimes-eeat .check{flex-shrink:0;width:28px;height:28px;border-radius:50%;background:#10c4c7;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px}\n.regimes-eeat .item p{margin:0;font-size:14px;color:#0f766e;line-height:1.5}\n.regimes-eeat .item strong{display:block;color:#0d1f2d;margin-bottom:2px}\n\n.regimes-faq{margin:18px 0}\n.regimes-faq details{border:1.5px solid #e2e8f0;border-radius:10px;margin-bottom:10px;overflow:hidden}\n.regimes-faq summary{padding:16px 20px;background:#f8fafc;cursor:pointer;font-weight:600;color:#0d1f2d;font-size:15px;list-style:none;display:flex;align-items:center;justify-content:space-between}\n.regimes-faq summary::-webkit-details-marker{display:none}\n.regimes-faq summary::after{content:'+';font-size:22px;color:#10c4c7;font-weight:300;transition:transform .15s}\n.regimes-faq details[open] summary::after{content:'\u2212'}\n.regimes-faq details[open] summary{background:#ecfeff;color:#0e7490}\n.regimes-faq .faq-body{padding:16px 22px;color:#475569;font-size:14.5px;line-height:1.6;background:#fff}\n\n.regimes-cross{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin:12px 0 8px}\n.regimes-cross a{display:block;padding:18px 20px;background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;text-decoration:none;color:#0d1f2d;transition:all .15s}\n.regimes-cross a:hover{border-color:#10c4c7;transform:translateY(-2px);box-shadow:0 6px 18px rgba(16,196,199,.15)}\n.regimes-cross strong{display:block;font-family:'Sora',sans-serif;font-size:15px;color:#0d1f2d;margin-bottom:4px}\n.regimes-cross span{font-size:13px;color:#64748b}\n\n.regimes-cta-final{background:linear-gradient(135deg,#0d1f2d,#1a3a4a);color:#fff;border-radius:16px;padding:40px 32px;text-align:center;margin:32px 0}\n.regimes-cta-final h2{font-family:'Sora',sans-serif;font-size:26px;margin:0 0 12px;color:#fff}\n.regimes-cta-final p{font-size:16px;color:#cbd5e1;margin:0 0 20px;max-width:620px;margin-left:auto;margin-right:auto}\n.regimes-cta-final .btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}\n.regimes-cta-final .btn-primary{background:#10c4c7;color:#fff;padding:14px 28px;border-radius:10px;text-decoration:none;font-weight:700;font-size:15px;transition:all .15s}\n.regimes-cta-final .btn-primary:hover{background:#0eaeb1;transform:translateY(-1px)}\n.regimes-cta-final .btn-outline{background:transparent;color:#fff;padding:14px 28px;border:2px solid #fff;border-radius:10px;text-decoration:none;font-weight:700;font-size:15px}\n.regimes-cta-final .btn-outline:hover{background:#fff;color:#0d1f2d}\n\n.regimes-tax-table{width:100%;border-collapse:collapse;background:#fff;border-radius:12px;overflow:hidden;margin:14px 0;font-size:14px}\n.regimes-tax-table th{background:#0d1f2d;color:#fff;padding:13px 16px;text-align:left;font-weight:600}\n.regimes-tax-table td{padding:11px 16px;border-bottom:1px solid #f1f5f9;color:#0d1f2d}\n.regimes-tax-table tr:nth-child(even){background:#f8fafc}\n\n.regimes-mc-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px}\n.regimes-mc-stat{background:#fff;border-radius:10px;padding:14px 16px;text-align:center}\n.regimes-mc-stat .v{font-family:'Sora',sans-serif;font-size:20px;font-weight:700;line-height:1.05}\n.regimes-mc-stat.pess .v{color:#dc2626}\n.regimes-mc-stat.med .v{color:#10c4c7}\n.regimes-mc-stat.opt .v{color:#16a34a}\n.regimes-mc-stat .l{font-size:11.5px;color:#64748b;margin-top:4px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}\n\n\/* Bulles info p\u00e9dagogiques *\/\n.rg-info{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#10c4c7;color:#fff;font-size:11px;font-weight:700;margin-left:6px;cursor:help;position:relative;font-family:'DM Sans',sans-serif;line-height:1;vertical-align:middle;flex-shrink:0;transition:all .15s}\n.rg-info:hover{background:#0eaeb1;transform:scale(1.1)}\n.rg-info::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:#0d1f2d;color:#fff;padding:10px 14px;border-radius:8px;font-size:12.5px;font-weight:400;line-height:1.5;width:280px;text-align:left;box-shadow:0 8px 24px rgba(13,31,45,.25);opacity:0;visibility:hidden;transition:all .2s;pointer-events:none;z-index:1000;letter-spacing:0;text-transform:none}\n.rg-info::before{content:'';position:absolute;bottom:calc(100% + 2px);left:50%;transform:translateX(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #0d1f2d;opacity:0;visibility:hidden;transition:all .2s;z-index:1001}\n.rg-info:hover::after,.rg-info:hover::before,.rg-info:focus::after,.rg-info:focus::before,.rg-info.rg-active::after,.rg-info.rg-active::before{opacity:1;visibility:visible}\n.rg-info::after strong{color:#7dd3d4;font-weight:700}\n\/* Tooltips sur fond sombre (r\u00e9sultat box) *\/\n.regimes-result .rg-info{background:#7dd3d4;color:#0d1f2d}\n.regimes-result .rg-info:hover{background:#10c4c7;color:#fff}\n.regimes-result .rg-info::after{background:#fff;color:#0d1f2d;border:1px solid #cbd5e1}\n.regimes-result .rg-info::before{border-top-color:#fff}\n@media(max-width:760px){\n.rg-info::after{width:240px;font-size:12px}\n}\n\n.reg-legend{display:flex;flex-wrap:wrap;gap:10px 14px;margin:0 0 14px;padding:10px 12px;background:#f8fafc;border-radius:8px;font-size:12.5px;color:#334155;font-weight:600}\n.reg-legend .grp{display:flex;gap:10px 14px;flex-wrap:wrap;align-items:center}\n.reg-legend .grp+.grp{padding-left:14px;border-left:1px solid #e2e8f0}\n.reg-legend .leg-item{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}\n.reg-legend .leg-chip{display:inline-block;width:14px;height:14px;border-radius:3px;flex-shrink:0}\n.reg-legend .leg-label{font-size:11px;color:#64748b;font-weight:700;text-transform:uppercase;letter-spacing:.4px;margin-right:4px}\n@media(max-width:760px){.reg-legend{font-size:11.5px}.reg-legend .grp+.grp{padding-left:0;border-left:none;padding-top:8px;border-top:1px solid #e2e8f0;width:100%}}\n<\/style>\n\n\n<div class=\"regimes-wrap\">\n\n<div class=\"regimes-hero\">\n<h1><span class=\"ez-toc-section\" id=\"Quebec-Tax-Savings-Plan-Comparator-2026\"><\/span>Quebec Tax Savings Plan Comparator 2026<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Serious decision-making tool: <strong>3 return scenarios<\/strong>, <strong>management fees<\/strong>, <strong>disbursement phase<\/strong>, <strong>risk profile<\/strong> and <strong>500 Monte Carlo simulations<\/strong>. Doesn&#8217;t give a single magic number, but a realistic range to help you decide. <\/p>\n<div class=\"badges\">\n<span class=\"badge\">\n RRSP<span class=\"badge\">TFSA<\/span>\n<span class=\"badge\">FHSA<\/span>\n<span class=\"badge\">RESP<\/span>\n<span class=\"badge\">VRSP<\/span>\n<span class=\"badge\">Not registered<\/span><\/span>\n<\/div>\n<\/div>\n\n<div class=\"regimes-warn\">\n<strong>\u26a0\ufe0f Educational estimation tool.<\/strong>  The calculations use the 2026 (Quebec) tax parameters and transparently published assumptions below. They are not a substitute for the advice of a financial planner (F. Pl.) or an investment advisor registered with the AMF. \n<\/div>\n\n<div class=\"regimes-stats\">\n<div class=\"regimes-stat\"><div class=\"v\">6<\/div><div class=\"l\">Comparative diets<\/div><\/div>\n<div class=\"regimes-stat\"><div class=\"v\">500<\/div><div class=\"l\">Simulations Monte Carlo<\/div><\/div>\n<div class=\"regimes-stat\"><div class=\"v\">2026<\/div><div class=\"l\">Up-to-date tax settings<\/div><\/div>\n<div class=\"regimes-stat\"><div class=\"v\">100 %<\/div><div class=\"l\">Free &#038; confidential<\/div><\/div>\n<\/div>\n\n<div class=\"regimes-presets\">\n<h3>\ud83c\udfaf Start with a situation close to yours<\/h3>\n<div class=\"regimes-presets-grid\">\n<button class=\"regimes-preset\" data-preset=\"acheteur\"><strong>Buyer 1st property<\/strong><span>Employee 32 years old, down payment in 5 years<\/span><\/button>\n<button class=\"regimes-preset\" data-preset=\"retraite-classique\"><strong>Retirement at 65<\/strong><span>Employee 40 years old, horizon 25 years<\/span><\/button>\n<button class=\"regimes-preset\" data-preset=\"autonome\"><strong>Self-employed No<\/strong><span>employer QPP, priority RRSP<\/span><\/button>\n<button class=\"regimes-preset\" data-preset=\"anticipee\"><strong>Early retirement age 55<\/strong><span>Short horizon, flexible TFSA<\/span><\/button>\n<button class=\"regimes-preset\" data-preset=\"parent\"><strong>Parent Young Child<\/strong><span>Priority RESP, Grants<\/span><\/button>\n<button class=\"regimes-preset\" data-preset=\"haut-revenu\"><strong>High Income (MMT 47%)<\/strong><span>Maximize RRSP + TFSA<\/span><\/button>\n<\/div>\n<\/div>\n\n<div class=\"regimes-calc\">\n<h2><span class=\"ez-toc-section\" id=\"Your-settings\"><\/span>Your settings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<h3 class=\"sub\">\ud83d\udccb Financial Profile<\/h3>\n<div class=\"regimes-grid-3\">\n\n<div class=\"regimes-field\">\n<label for=\"reg-revenu\">Annual taxable income <span class=\"rg-info\" data-tip=\"Votre revenu brut moins les d\u00e9ductions admises (REER, cotisations syndicales, etc.). D\u00e9termine votre taux marginal d'imposition (TMM) actuel. Pour un T4 simple, c'est la case 14.\" tabindex=\"0\">i<\/span><\/label>\n<input type=\"number\" id=\"reg-revenu\" value=\"75000\" min=\"0\" step=\"1000\"\/>\n<\/div>\n\n<div class=\"regimes-field\">\n<label for=\"reg-revenu-retraite\">Estimated Retirement Income <span class=\"rg-info\" data-tip=\"Tous vos autres revenus \u00e0 la retraite : RRQ + Pension S\u00e9curit\u00e9 Vieillesse + pension d'employeur + revenus de placements non REER. Sert \u00e0 estimer votre TMM au moment du retrait. Moyenne qu\u00e9b\u00e9coise : 25 000\u201340 000 $\/an.\" tabindex=\"0\">i<\/span> <span class=\"hint\">(other than simulated RRSPs)<\/span><\/label>\n<input type=\"number\" id=\"reg-revenu-retraite\" value=\"35000\" min=\"0\" step=\"1000\"\/>\n<\/div>\n\n<div class=\"regimes-field\">\n<label for=\"reg-cotisation\">Savings by year <span class=\"rg-info\" data-tip=\"Combien vous pouvez \u00e9pargner chaque ann\u00e9e. Le simulateur applique automatiquement les plafonds : REER 32 490 $, CELI 7 000 $, CELIAPP 8 000 $, REEE 2 500 $ pour subventions pleines.\" tabindex=\"0\">i<\/span><\/label>\n<input type=\"number\" id=\"reg-cotisation\" value=\"6000\" min=\"0\" step=\"500\"\/>\n<\/div>\n\n<div class=\"regimes-field\">\n<label for=\"reg-horizon\">Accumulation horizon (years) <span class=\"rg-info\" data-tip=\"Combien d'ann\u00e9es vous \u00e9pargnerez avant de commencer \u00e0 retirer. Pour la retraite : \u00e2ge cible \u2212 \u00e2ge actuel. Pour 1\u02b3\u1d49 propri\u00e9t\u00e9 : 3-7 ans. Pour \u00e9tudes enfant : 18 \u2212 \u00e2ge actuel.\" tabindex=\"0\">i<\/span><\/label>\n<input type=\"number\" id=\"reg-horizon\" value=\"25\" min=\"1\" max=\"60\" step=\"1\"\/>\n<\/div>\n\n<div class=\"regimes-field\">\n<label for=\"reg-decaissement\">Duration disbursement (years) <span class=\"rg-info\" data-tip=\"Combien d'ann\u00e9es vous retirerez votre \u00e9pargne apr\u00e8s l'accumulation. Pour la retraite : esp\u00e9rance de vie \u2212 \u00e2ge retraite (typiquement 25-30 ans). Mettre 0 si pas de phase de d\u00e9caissement (ex: \u00e9pargne pour propri\u00e9t\u00e9).\" tabindex=\"0\">i<\/span><\/label>\n<input type=\"number\" id=\"reg-decaissement\" value=\"25\" min=\"0\" max=\"50\" step=\"1\"\/>\n<\/div>\n\n<div class=\"regimes-field\">\n<label>Marital status <span class=\"rg-info\" data-tip=\"Impact principal sur le CELIAPP : en couple, chacun ouvre son CELIAPP = 16 000 $\/an cumul\u00e9s (80 000 $ vie). Aussi pertinent pour le REER de conjoint (fractionnement de revenu \u00e0 la retraite).\" tabindex=\"0\">i<\/span><\/label>\n<div class=\"regimes-radios\" data-group=\"conjoint\">\n<button type=\"button\" data-val=\"seul\" class=\"active\">Alone<\/button>\n<button type=\"button\" data-val=\"couple\">As a couple<\/button>\n<\/div>\n<\/div>\n\n<\/div>\n\n<h3 class=\"sub\">\ud83d\udcc8 Risk Profile &#038; Return<\/h3>\n<div class=\"regimes-grid-3\">\n\n<div class=\"regimes-field\">\n<label>Investor profile <span class=\"rg-info\" data-tip=\"D\u00e9termine le rendement attendu et la volatilit\u00e9. PRUDENT : 60% obligations, ~4% rendement, faible variation. \u00c9QUILIBR\u00c9 : 60% actions, ~5,5%, mod\u00e9r\u00e9. AGRESSIF : 80% actions, ~7,5%, forte variation. Plus l'horizon est long, plus on peut \u00eatre agressif.\" tabindex=\"0\">i<\/span><\/label>\n<div class=\"regimes-radios\" data-group=\"risque\">\n<button type=\"button\" data-val=\"prudent\">Cautious<\/button>\n<button type=\"button\" data-val=\"equilibre\" class=\"active\">Balanced<\/button>\n<button type=\"button\" data-val=\"agressif\">Aggressive<\/button>\n<\/div>\n<\/div>\n\n<div class=\"regimes-field\">\n<label for=\"reg-frais\">Management fees (%) <span class=\"rg-info\" data-tip=\"Le RFG (Ratio des Frais de Gestion) est ce que votre fonds pr\u00e9l\u00e8ve chaque ann\u00e9e. Rep\u00e8res : FNB indiciel 0,1-0,3% \/ fonds indiciel banque 0,5-1% \/ fonds mutuel typique 1,5-2,5%. Sur 30 ans, 1% de frais en plus = ~25% de capital final en moins.\" tabindex=\"0\">i<\/span> <span class=\"hint\">MER fund + advisory<\/span><\/label>\n<input type=\"number\" id=\"reg-frais\" value=\"1.2\" min=\"0\" max=\"3\" step=\"0.05\"\/>\n<\/div>\n\n<div class=\"regimes-field\">\n<label for=\"reg-inflation\">Expected inflation (%) <span class=\"rg-info\" data-tip=\"L'inflation \u00e9rode le pouvoir d'achat de votre argent. Cible Banque du Canada : 2%. Moyenne historique 30 ans : 2,1%. \u00c0 utiliser pour convertir vos $ futurs en $ d'aujourd'hui (option d'affichage \u00e0 droite).\" tabindex=\"0\">i<\/span><\/label>\n<input type=\"number\" id=\"reg-inflation\" value=\"2.1\" min=\"0\" max=\"6\" step=\"0.1\"\/>\n<\/div>\n\n<div class=\"regimes-field\">\n<label>Investment Income Type <span class=\"rg-info\" data-tip=\"Affecte SEULEMENT le compte non enregistr\u00e9. INT\u00c9R\u00caTS (CPG, obligations) : 100% imposables. DIVIDENDES : cr\u00e9dit d'imp\u00f4t, ~72% du TMM. GAIN EN CAPITAL : 50% imposable seulement. Dans REER\/CELI\/etc. tout est \u00e0 l'abri, peu importe le type.\" tabindex=\"0\">i<\/span> <span class=\"hint\">(Non-Registered Impacted)<\/span><\/label>\n<div class=\"regimes-radios\" data-group=\"type\">\n<button type=\"button\" data-val=\"interet\">Interests<\/button>\n<button type=\"button\" data-val=\"dividendes\">Dividends<\/button>\n<button type=\"button\" data-val=\"capital\">Capital<\/button>\n gain<button type=\"button\" data-val=\"mixte\" class=\"active\">Mixed<\/button>\n<\/div>\n<\/div>\n\n<div class=\"regimes-field\">\n<label>Display of the amounts <span class=\"rg-info\" data-tip=\"NOMINAL : montants tels qu'appara\u00eetront sur votre relev\u00e9 futur (ex: 1 M$ dans 25 ans). R\u00c9EL : ces m\u00eames montants convertis en pouvoir d'achat d'aujourd'hui (ex: 1 M$ dans 25 ans = ~600 000 $ d'aujourd'hui \u00e0 2,1% inflation). Pour planifier la retraite, regardez le R\u00c9EL.\" tabindex=\"0\">i<\/span><\/label>\n<div class=\"regimes-radios\" data-group=\"affichage\">\n<button type=\"button\" data-val=\"nominal\" class=\"active\">Nominal ($ future)<\/button>\n<button type=\"button\" data-val=\"reel\">Real ($today)<\/button>\n<\/div>\n<\/div>\n\n<\/div>\n\n<h3 class=\"sub\">\ud83c\udfaf Objective &#038; strategy <span class=\"rg-info\" data-tip=\"Votre objectif principal d\u00e9termine le r\u00e9gime recommand\u00e9. La strat\u00e9gie combin\u00e9e permet de tester REER seul vs CELI seul vs combinaisons r\u00e9alistes (50\/50, REER puis CELI, optim auto).\" tabindex=\"0\">i<\/span><\/h3>\n<div class=\"regimes-grid-3\">\n\n<div class=\"regimes-field\">\n<label>Main objective<\/label>\n<div class=\"regimes-radios\" data-group=\"objectif\">\n<button type=\"button\" data-val=\"retraite\" class=\"active\">Retirement<\/button>\n<button type=\"button\" data-val=\"propriete\">1st property<\/button>\n<button type=\"button\" data-val=\"etudes\">Children&#8217;s<\/button>\n studies<button type=\"button\" data-val=\"flexible\">Flexible savings<\/button>\n<\/div>\n<\/div>\n\n<div class=\"regimes-field\">\n<label>Combined strategy to test <span class=\"rg-info\" data-tip=\"COMPARER : chaque r\u00e9gime seul (par d\u00e9faut). 50\/50 : moiti\u00e9 REER, moiti\u00e9 CELI. REER MAX \u2192 CELI : maximiser REER d'abord puis surplus en CELI. OPTIM AUTO : l'algorithme choisit selon votre TMM. La plupart des plans financiers r\u00e9els combinent plusieurs r\u00e9gimes.\" tabindex=\"0\">i<\/span><\/label>\n<div class=\"regimes-radios\" data-group=\"strategie\">\n<button type=\"button\" data-val=\"comparer\" class=\"active\">Compare each plan<\/button>\n<button type=\"button\" data-val=\"50_50\">50% RRSP \/ 50% TFSA<\/button>\n<button type=\"button\" data-val=\"reer_puis_celi\">RRSP max \u2192 TFSA<\/button>\n<button type=\"button\" data-val=\"auto\">Auto Optim (according to TMM)<\/button>\n<\/div>\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<div class=\"regimes-result\" id=\"reg-result-box\">\n\n<div class=\"regimes-recommend\" id=\"reg-reco\">\n<div class=\"reco-title\">Priority recommendation <span class=\"rg-info\" data-tip=\"Le r\u00e9gime le mieux adapt\u00e9 \u00e0 votre situation principale. Mais ce n'est pas obligatoire de tout y mettre : la plupart des plans financiers r\u00e9els combinent 2-3 r\u00e9gimes. Voir la section Strat\u00e9gies combin\u00e9es plus bas.\" tabindex=\"0\">i<\/span><\/div>\n<div class=\"reco-name\" id=\"reg-reco-name\">\u2014<\/div>\n<p class=\"reco-why\" id=\"reg-reco-why\">Fill in your settings to get a recommendation.<\/p>\n<div class=\"nuance\" id=\"reg-reco-nuance\" style=\"display:none\">\n<strong>Borderline cases to consider<\/strong>\n<span id=\"reg-reco-nuance-text\"><\/span>\n<\/div>\n<\/div>\n\n<div class=\"regimes-mc-stats\" id=\"reg-mc-stats\" style=\"display:none\">\n<div class=\"regimes-mc-stat pess\"><div class=\"v\" id=\"reg-mc-p10\">\u2014<\/div><div class=\"l\">Pessimistic (P10) <span class=\"rg-info\" data-tip=\"Sur 500 simulations Monte Carlo, P10 = la valeur en-dessous de laquelle se situent les 10% pires r\u00e9sultats. Autrement dit : 90% des sc\u00e9narios donnent au moins ce montant. Une r\u00e9f\u00e9rence prudente pour planifier.\" tabindex=\"0\">i<\/span><\/div><\/div>\n<div class=\"regimes-mc-stat med\"><div class=\"v\" id=\"reg-mc-p50\">\u2014<\/div><div class=\"l\">Median (P50) <span class=\"rg-info\" data-tip=\"La valeur centrale de la distribution : 50% des simulations sont en-dessous, 50% au-dessus. Plus repr\u00e9sentative que la moyenne car insensible aux extr\u00eames. C'est le sc\u00e9nario le plus probable.\" tabindex=\"0\">i<\/span><\/div><\/div>\n<div class=\"regimes-mc-stat opt\"><div class=\"v\" id=\"reg-mc-p90\">\u2014<\/div><div class=\"l\">Optimistic (P90) <span class=\"rg-info\" data-tip=\"Sur 500 simulations, P90 = la valeur au-dessus de laquelle se situent les 10% meilleurs r\u00e9sultats. March\u00e9s tr\u00e8s favorables. \u00c0 ne PAS utiliser pour planifier \u2014 sert juste \u00e0 conna\u00eetre le potentiel haut.\" tabindex=\"0\">i<\/span><\/div><\/div>\n<\/div>\n\n<div class=\"regimes-charts\">\n<div class=\"regimes-chart-box\">\n<h4>Final net value by plan \u2014 3 scenarios<\/h4>\n<div class=\"reg-legend\">\n  <div class=\"grp\"><span class=\"leg-label\">Diets<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#10c4c7\"><\/span>RRSP<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#0e7490\"><\/span>TFSA<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#7c3aed\"><\/span>FHSA<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#f59e0b\"><\/span>RESP<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#0891b2\"><\/span>VRSP<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#94a3b8\"><\/span>Not registered<\/span>\n  <\/div>\n  <div class=\"grp\"><span class=\"leg-label\">Scenarios<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#fca5a5\"><\/span>Pessimistic<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#10c4c7\"><\/span>Realist<\/span>\n    <span class=\"leg-item\"><span class=\"leg-chip\" style=\"background:#86efac\"><\/span>Optimist<\/span>\n  <\/div>\n<\/div>\n\n<canvas id=\"reg-chart-bar\"><\/canvas>\n<\/div>\n<div class=\"regimes-chart-box\">\n<h4>Growth over time (realistic)<\/h4>\n<canvas id=\"reg-chart-line\"><\/canvas>\n<\/div>\n<div class=\"regimes-chart-box regimes-chart-full\">\n<h4>Monte Carlo Distribution \u2014 Winning Regime<\/h4>\n<canvas id=\"reg-chart-mc\"><\/canvas>\n<\/div>\n<\/div>\n\n<div class=\"regimes-table-wrap\">\n<table class=\"regimes-table\" id=\"reg-table\">\n<thead>\n<tr>\n<th>Diet<\/th>\n<th class=\"num\">Total Contribution<\/th>\n<th class=\"num\">Credit\/subv.<\/th>\n<th class=\"num\">Accrued Fees<\/th>\n<th class=\"num\">Pessimistic<\/th>\n<th class=\"num\">Realistic<\/th>\n<th class=\"num\">Optimistic<\/th>\n<\/tr>\n<\/thead>\n<tbody><\/tbody>\n<\/table>\n<\/div>\n\n<div class=\"regimes-decaiss\" id=\"reg-decaiss-box\">\n<h4>\ud83d\udce4 Disbursement phase (winning plan + other assets)<\/h4>\n<div class=\"regimes-decaiss-grid\">\n<div class=\"regimes-decaiss-card\"><div class=\"v\" id=\"reg-dec-annuel\">\u2014<\/div><div class=\"l\">Annual withdrawal <span class=\"rg-info\" data-tip=\"Calcul\u00e9 par annuit\u00e9 actuarielle : combien vous pouvez retirer chaque ann\u00e9e pour vider exactement votre capital sur la dur\u00e9e choisie, en supposant rendement r\u00e9el net (rendement \u2212 frais \u2212 inflation). Plus prudent que la r\u00e8gle des 4%.\" tabindex=\"0\">possible i<\/span><\/div><\/div>\n<div class=\"regimes-decaiss-card\"><div class=\"v\" id=\"reg-dec-mensuel\">\u2014<\/div><div class=\"l\">Either per month (before tax) <span class=\"rg-info\" data-tip=\"Retrait annuel \u00f7 12. Pour le REER\/RVER, l'imp\u00f4t sera pr\u00e9lev\u00e9 \u00e0 votre TMM retraite. Pour CELI\/CELIAPP\/REEE, aucun imp\u00f4t. Pour le compte non enregistr\u00e9, imp\u00f4t sur les gains seulement.\" tabindex=\"0\">i<\/span><\/div><\/div>\n<div class=\"regimes-decaiss-card\"><div class=\"v\" id=\"reg-dec-duree\">\u2014<\/div><div class=\"l\">Duration held (95% success) <span class=\"rg-info\" data-tip=\"Combien d'ann\u00e9es votre \u00e9pargne tient si vous retirez le montant ci-contre, dans 95% des sc\u00e9narios Monte Carlo. C'est la dur\u00e9e que vous choisissez en haut, valid\u00e9e par les simulations.\" tabindex=\"0\">i<\/span><\/div><\/div>\n<\/div>\n<div class=\"order\"><strong>Recommended Smart Order:<\/strong><span id=\"reg-dec-ordre\">\u2014<\/span><\/div>\n<\/div>\n\n<div class=\"regimes-hypotheses\">\n<h4>\ud83d\udd0d Assumptions used (full transparency)<\/h4>\n<ul id=\"reg-hypotheses\">\n<li>Fill in your parameters to see the assumptions applied.<\/li>\n<\/ul>\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.0\/dist\/chart.umd.min.js\"><\/script>\n<script>\n(function(){\n'use strict';\n\n\/\/ ============================================================\n\/\/ PARAM\u00c8TRES FISCAUX 2026 \u2014 Qu\u00e9bec + f\u00e9d\u00e9ral\n\/\/ ============================================================\nconst TMM_QC = [\n  {cap: 18571,  taux: 0.00},\n  {cap: 53359,  taux: 0.2753},\n  {cap: 57375,  taux: 0.3253},\n  {cap: 106717, taux: 0.3712},\n  {cap: 114750, taux: 0.4112},\n  {cap: 165430, taux: 0.4571},\n  {cap: 235675, taux: 0.4746},\n  {cap: Infinity, taux: 0.5331}\n];\n\nconst PLAFONDS = {\n  reer:    32490, rver: 32490,\n  celi:    7000,\n  celiapp: 8000, celiappVie: 40000,\n  reee:    50000,\n  scee:    500, iqee: 250,\n  sceeVie: 7200, iqeeVie: 3600,\n  reei:    200000\n};\n\n\/\/ Profils risque : rendement attendu nominal + \u00e9cart-type (volatilit\u00e9)\nconst PROFILS = {\n  prudent:   {rdmt: 0.040, vol: 0.04, label: 'Prudent (60% revenu fixe \/ 40% actions)'},\n  equilibre: {rdmt: 0.055, vol: 0.08, label: '\u00c9quilibr\u00e9 (40% revenu fixe \/ 60% actions)'},\n  agressif:  {rdmt: 0.075, vol: 0.14, label: 'Agressif (20% revenu fixe \/ 80% actions)'}\n};\n\n\/\/ 6 presets situations de vie\nconst PRESETS = {\n  acheteur:           {revenu:65000, revenuR:30000, cotis:7000, horizon:5,  decaiss:0,  conjoint:'seul',     risque:'equilibre', frais:1.2, type:'mixte', objectif:'propriete', strategie:'comparer'},\n  'retraite-classique':{revenu:75000, revenuR:35000, cotis:6000, horizon:25, decaiss:25, conjoint:'couple',   risque:'equilibre', frais:1.2, type:'mixte', objectif:'retraite',  strategie:'comparer'},\n  autonome:           {revenu:90000, revenuR:25000, cotis:12000,horizon:25, decaiss:25, conjoint:'seul',     risque:'equilibre', frais:1.0, type:'mixte', objectif:'retraite',  strategie:'reer_puis_celi'},\n  anticipee:          {revenu:110000,revenuR:40000, cotis:18000,horizon:10, decaiss:30, conjoint:'couple',   risque:'equilibre', frais:1.0, type:'mixte', objectif:'retraite',  strategie:'auto'},\n  parent:             {revenu:70000, revenuR:30000, cotis:2500, horizon:18, decaiss:0,  conjoint:'couple',   risque:'equilibre', frais:1.5, type:'mixte', objectif:'etudes',    strategie:'comparer'},\n  'haut-revenu':      {revenu:160000,revenuR:60000, cotis:25000,horizon:20, decaiss:25, conjoint:'couple',   risque:'agressif',  frais:0.8, type:'mixte', objectif:'retraite',  strategie:'reer_puis_celi'}\n};\n\n\/\/ ============================================================\n\/\/ HELPERS\n\/\/ ============================================================\nfunction tmmFromRevenu(rev){\n  for (const t of TMM_QC) if (rev < t.cap) return t.taux;\n  return 0.5331;\n}\n\nfunction tauxImposPlacement(type, tmm){\n  switch(type){\n    case 'interet':    return tmm;\n    case 'dividendes': return tmm * 0.72;\n    case 'capital':    return tmm * 0.50;\n    case 'mixte':      return tmm * (1 + 0.72 + 0.50) \/ 3;\n    default: return tmm;\n  }\n}\n\n\/\/ Bo\u00eete-M\u00fcller pour distribution normale (Monte Carlo)\nfunction gaussRand(){\n  let u = 0, v = 0;\n  while(u === 0) u = Math.random();\n  while(v === 0) v = Math.random();\n  return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);\n}\n\n\/\/ Croissance compos\u00e9e avec d\u00e9p\u00f4t annuel et frais d\u00e9duits chaque ann\u00e9e\nfunction valeurFutureAvecFrais(depot, taux, annees, frais){\n  let v = 0;\n  const tauxNet = taux - frais;\n  for (let i = 0; i < annees; i++){\n    v = (v + depot) * (1 + tauxNet);\n  }\n  return v;\n}\n\n\/\/ Trajectoire ann\u00e9e par ann\u00e9e (avec frais d\u00e9duits)\nfunction trajectoire(depot, taux, annees, frais){\n  let v = 0;\n  const arr = [0];\n  const tauxNet = taux - frais;\n  for (let i = 0; i < annees; i++){\n    v = (v + depot) * (1 + tauxNet);\n    arr.push(v);\n  }\n  return arr;\n}\n\n\/\/ Trajectoire compte non enregistr\u00e9 (revenu placement impos\u00e9 chaque ann\u00e9e)\nfunction trajectoireNonReg(depot, taux, annees, frais, tauxImpot){\n  let v = 0;\n  const arr = [0];\n  for (let i = 0; i < annees; i++){\n    v += depot;\n    const rendementBrut = v * (taux - frais);\n    const impot = Math.max(0, rendementBrut * tauxImpot);\n    v += rendementBrut - impot;\n    arr.push(v);\n  }\n  return arr;\n}\n\n\/\/ Monte Carlo : retourne {p10, p50, p90} pour un r\u00e9gime\nfunction monteCarlo(depot, rdmtMoy, vol, annees, frais, tauxImpotPlacement, isNonReg){\n  const SIMS = 500;\n  const results = new Array(SIMS);\n  for (let s = 0; s < SIMS; s++){\n    let v = 0;\n    for (let i = 0; i < annees; i++){\n      const rdmt = rdmtMoy + vol * gaussRand();\n      const tauxNet = rdmt - frais;\n      v += depot;\n      if (isNonReg){\n        const rendBrut = v * tauxNet;\n        const impot = Math.max(0, rendBrut * tauxImpotPlacement);\n        v += rendBrut - impot;\n      } else {\n        v *= (1 + tauxNet);\n      }\n    }\n    results[s] = v;\n  }\n  results.sort((a,b)=>a-b);\n  return {\n    p10: results[Math.floor(SIMS * 0.10)],\n    p50: results[Math.floor(SIMS * 0.50)],\n    p90: results[Math.floor(SIMS * 0.90)]\n  };\n}\n\n\/\/ Calcul retrait annuel soutenable (m\u00e9thode 4% adapt\u00e9e \u00e0 dur\u00e9e)\nfunction retraitSoutenable(capital, annees, rdmtNet){\n  if (annees <= 0) return 0;\n  \/\/ Annuit\u00e9 : PMT = PV \u00d7 r \/ (1 \u2212 (1+r)^\u2212n)\n  if (rdmtNet < 0.001) return capital \/ annees;\n  return capital * rdmtNet \/ (1 - Math.pow(1 + rdmtNet, -annees));\n}\n\n\/\/ ============================================================\n\/\/ CALCUL PRINCIPAL\n\/\/ ============================================================\nlet chartBar = null, chartLine = null, chartMc = null;\n\nfunction calculer(){\n  const inp = lireInputs();\n  const profil = PROFILS[inp.risque];\n  const tmm = tmmFromRevenu(inp.revenu);\n  const tmmRetrait = tmmFromRevenu(inp.revenuRetraite);\n  const tauxImpotPlacement = tauxImposPlacement(inp.type, tmm);\n  const fraisDec = inp.frais \/ 100;\n  const inflation = inp.inflation \/ 100;\n\n  \/\/ Cotisations cap\u00e9es par plafonds\n  const cotMax = {\n    reer:    Math.min(inp.cotis, PLAFONDS.reer, inp.revenu * 0.18),\n    rver:    Math.min(inp.cotis, PLAFONDS.rver, inp.revenu * 0.18),\n    celi:    Math.min(inp.cotis, PLAFONDS.celi),\n    celiapp: Math.min(inp.cotis, PLAFONDS.celiapp),\n    reee:    Math.min(inp.cotis, 2500),\n    nonreg:  inp.cotis\n  };\n\n  \/\/ Trois sc\u00e9narios : pessimiste = rdmt - vol, r\u00e9aliste = rdmt, optimiste = rdmt + vol\n  const scenarios = {\n    pess: profil.rdmt - profil.vol * 0.7,\n    real: profil.rdmt,\n    opt:  profil.rdmt + profil.vol * 0.7\n  };\n\n  const calcRegime = (key, rdmt) => {\n    const cot = cotMax[key] || 0;\n    const ans = inp.horizon;\n\n    if (key === 'reer' || key === 'rver'){\n      const total = cot * ans;\n      const credit = total * tmm;\n      const brut = valeurFutureAvecFrais(cot, rdmt, ans, fraisDec);\n      const impotRetrait = brut * tmmRetrait;\n      return {cot:total, sub:credit, brut, impot:impotRetrait, net: brut - impotRetrait + credit};\n    }\n    if (key === 'celi'){\n      const total = cot * ans;\n      const brut = valeurFutureAvecFrais(cot, rdmt, ans, fraisDec);\n      return {cot:total, sub:0, brut, impot:0, net: brut};\n    }\n    if (key === 'celiapp'){\n      const ansMax = Math.min(ans, 5);\n      const total = Math.min(cot * ansMax, PLAFONDS.celiappVie);\n      const credit = total * tmm;\n      let v = 0;\n      for (let i = 0; i < ans; i++){\n        if (i < ansMax) v += cot;\n        v *= (1 + rdmt - fraisDec);\n      }\n      return {cot:total, sub:credit, brut:v, impot:0, net: v + credit};\n    }\n    if (key === 'reee'){\n      const total = cot * ans;\n      const subvAn = Math.min(cot * 0.30, PLAFONDS.scee + PLAFONDS.iqee);\n      const subvTot = Math.min(subvAn * ans, PLAFONDS.sceeVie + PLAFONDS.iqeeVie);\n      let v = 0, sc = 0;\n      for (let i = 0; i < ans; i++){\n        v += cot;\n        const sub = sc < (PLAFONDS.sceeVie + PLAFONDS.iqeeVie) ? Math.min(subvAn, (PLAFONDS.sceeVie + PLAFONDS.iqeeVie) - sc) : 0;\n        v += sub; sc += sub;\n        v *= (1 + rdmt - fraisDec);\n      }\n      const revenus = v - total - subvTot;\n      const impot = Math.max(0, (revenus + subvTot) * 0.15);\n      return {cot:total, sub:subvTot, brut:v, impot, net: v - impot};\n    }\n    if (key === 'nonreg'){\n      const total = cot * ans;\n      const traj = trajectoireNonReg(cot, rdmt, ans, fraisDec, tauxImpotPlacement);\n      const v = traj[traj.length - 1];\n      return {cot:total, sub:0, brut:v, impot:0, net: v};\n    }\n  };\n\n  const regs = ['reer','celi','celiapp','reee','rver','nonreg'].map(key => {\n    const result = {\n      key,\n      name: nomRegime(key),\n      color: couleurRegime(key),\n      pess: calcRegime(key, scenarios.pess),\n      real: calcRegime(key, scenarios.real),\n      opt:  calcRegime(key, scenarios.opt)\n    };\n    \/\/ Frais cumul\u00e9s approximatifs\n    const fraisAn = inp.cotis * fraisDec * inp.horizon * 0.5; \/\/ approximation moyenne\n    result.frais = fraisAn;\n    return result;\n  });\n\n  \/\/ Recommandation\n  const reco = recommander(regs, inp, tmm);\n\n  \/\/ Monte Carlo sur le r\u00e9gime gagnant\n  const winnerKey = reco.reg.key;\n  const winnerCot = cotMax[winnerKey] || inp.cotis;\n  const isNonReg = winnerKey === 'nonreg';\n  const mc = monteCarlo(winnerCot, profil.rdmt, profil.vol, inp.horizon, fraisDec, tauxImpotPlacement, isNonReg);\n\n  \/\/ Phase d\u00e9caissement (sur m\u00e9diane Monte Carlo du r\u00e9gime gagnant)\n  const decaiss = inp.decaissement > 0 ? {\n    annuel: retraitSoutenable(mc.p50, inp.decaissement, scenarios.real - fraisDec - inflation),\n    duree: inp.decaissement,\n    ordre: ordreRetrait(reco.reg.key, tmm, tmmRetrait)\n  } : null;\n\n  rendreUI(regs, reco, mc, decaiss, inp, profil, tmm, tmmRetrait, fraisDec, inflation);\n}\n\nfunction lireInputs(){\n  return {\n    revenu:        +document.getElementById('reg-revenu').value || 0,\n    revenuRetraite:+document.getElementById('reg-revenu-retraite').value || 0,\n    cotis:         +document.getElementById('reg-cotisation').value || 0,\n    horizon:       +document.getElementById('reg-horizon').value || 0,\n    decaissement:  +document.getElementById('reg-decaissement').value || 0,\n    frais:         +document.getElementById('reg-frais').value || 0,\n    inflation:     +document.getElementById('reg-inflation').value || 0,\n    risque:        activeVal('risque'),\n    type:          activeVal('type'),\n    objectif:      activeVal('objectif'),\n    conjoint:      activeVal('conjoint'),\n    strategie:     activeVal('strategie'),\n    affichage:     activeVal('affichage')\n  };\n}\n\nfunction nomRegime(k){\n  return {reer:'REER', celi:'CELI', celiapp:'CELIAPP', reee:'REEE', rver:'RVER', nonreg:'Non enregistr\u00e9'}[k];\n}\nfunction couleurRegime(k){\n  return {reer:'#10c4c7', celi:'#0e7490', celiapp:'#7c3aed', reee:'#f59e0b', rver:'#0891b2', nonreg:'#94a3b8'}[k];\n}\n\n\/\/ ============================================================\n\/\/ RECOMMANDATION (nuanc\u00e9e, \u00e9ducative)\n\/\/ ============================================================\nfunction recommander(regs, inp, tmm){\n  const get = (k) => regs.find(r => r.key === k);\n  let reg = null, why = '', nuance = '';\n\n  if (inp.objectif === 'propriete'){\n    reg = get('celiapp');\n    const bonus = inp.conjoint === 'couple' ? ' En couple, chacun ouvre son CELIAPP : 16 000 $\/an, jusqu'\u00e0 80 000 $ vie combin\u00e9s.' : '';\n    why = `Avec un objectif de 1\u02b3\u1d49 propri\u00e9t\u00e9, le CELIAPP est imbattable : d\u00e9duction d'imp\u00f4t imm\u00e9diate (~${(tmm*100).toFixed(1)} % de retour) ET retraits non imposables.${bonus}`;\n    nuance = `<strong>CELIAPP avantageux si vous achetez dans 15 ans. <\/strong><strong>Sinon : transfert REER sans imposition, mais vous perdez l'avantage retrait libre. <\/strong><strong>Si propri\u00e9t\u00e9 pas certaine : CELI seul reste plus flexible.`;\n  } else if (inp.objectif === 'etudes'){\n    reg = get('reee');\n    why = `Le REEE g\u00e9n\u00e8re 30 % de subventions automatiques (SCEE 20 % f\u00e9d\u00e9rale + IQEE 10 % Qu\u00e9bec) sur les premiers 2 500 $\/an. Aucun autre v\u00e9hicule n'offre un rendement garanti aussi \u00e9lev\u00e9.`;\n    nuance = `<\/strong><strong>REEE avantageux si l'enfant fera des \u00e9tudes postsecondaires. <\/strong><strong>Si \u00e9tudes incertaines : 20 % d'imp\u00f4t sur les revenus + r\u00e9cup\u00e9ration des subventions. CELI parental peut \u00eatre un plan B plus souple.`;\n  } else if (inp.objectif === 'flexible'){\n    reg = get('celi');\n    why = `Le CELI permet retraits libres en tout temps sans aucun imp\u00f4t, et les droits inutilis\u00e9s se reportent. R\u00e9gime le plus polyvalent pour \u00e9pargne accessible.`;\n    nuance = `<\/strong><strong>CELI avantageux si vous voulez de la souplesse. <\/strong><strong>Mais : les retraits-recotisations dans la m\u00eame ann\u00e9e peuvent g\u00e9n\u00e9rer une p\u00e9nalit\u00e9 de 1 %\/mois \u2014 un pi\u00e8ge fr\u00e9quent.`;\n  } else {\n    \/\/ Retraite : d\u00e9cision REER vs CELI selon TMM actuel vs retraite\n    const tmmR = tmmFromRevenu(inp.revenuRetraite);\n    if (tmm >= 0.37 && tmmR <= tmm - 0.05){\n      reg = get('reer');\n      why = `Votre TMM actuel (${(tmm*100).toFixed(1)} %) est \u00e9lev\u00e9, et votre TMM estim\u00e9 \u00e0 la retraite (${(tmmR*100).toFixed(1)} %) sera plus bas. Le REER capture la diff\u00e9rence : d\u00e9duction maximale aujourd'hui, imp\u00f4t plus faible plus tard. Combinez avec CELI pour souplesse.`;\n      nuance = `<\/strong><strong>REER avantageux si votre TMM retraite reste plus bas. <\/strong><strong>Si TMM retraite remonte (fractionnement, gros REER) : CELI prend le relais. <\/strong><strong>Toujours r\u00e9investir le cr\u00e9dit d'imp\u00f4t REER pour capter le plein avantage.`;\n    } else if (tmm <= 0.28){\n      reg = get('celi');\n      why = `Votre TMM actuel (${(tmm*100).toFixed(1)} %) est mod\u00e9r\u00e9 : la d\u00e9duction REER vaut peu, et vous risquez de payer plus d'imp\u00f4t \u00e0 la sortie. Le CELI \u00e9vite tout imp\u00f4t \u00e0 la sortie et vous garde flexible.`;\n      nuance = `<\/strong><strong>CELI avantageux si votre TMM est \u2264 28 %. <\/strong><strong>Conservez vos droits REER pour les utiliser plus tard quand votre revenu (et TMM) auront mont\u00e9. <\/strong><strong>Si bonus\/promotion : basculez sur REER.`;\n    } else {\n      reg = get('reer');\n      why = `\u00c0 votre TMM (${(tmm*100).toFixed(1)} %), REER et CELI sont comp\u00e9titifs. Le REER prend le dessus si votre TMM retraite (${(tmmR*100).toFixed(1)} %) reste plus bas. Une strat\u00e9gie 50\/50 ou \u00ab REER \u2192 CELI \u00bb est souvent optimale.`;\n      nuance = `<\/strong><strong>Cas mixte : testez la strat\u00e9gie 50\/50 ou \u00ab REER max \u2192 CELI \u00bb dans les options ci-dessus. <\/strong><strong>R\u00e9viser tous les 5 ans selon \u00e9volution carri\u00e8re, famille, dettes, projets.`;\n    }\n  }\n  return {reg, why, nuance};\n}\n\n\/\/ Ordre intelligent de retrait \u00e0 la retraite\nfunction ordreRetrait(winnerKey, tmm, tmmR){\n  if (tmmR <= tmm - 0.10){\n    return 'Retirer le <\/strong><strong>REER en premier (jusqu'\u00e0 remplir la tranche TMM 27 %), puis le <\/strong><strong>CELI ensuite (libre d'imp\u00f4t). Conserve l'avantage CELI le plus longtemps.';\n  }\n  if (winnerKey === 'celi'){\n    return 'Retirer le <\/strong><strong>non enregistr\u00e9 en premier (gain capital faible-imp\u00f4t), puis <\/strong><strong>REER en lissant pour rester dans tranche basse, et <\/strong><strong>CELI en dernier (croissance abri-imp\u00f4t prolong\u00e9e).';\n  }\n  return 'Strat\u00e9gie \u00ab bracket filling \u00bb : retirer assez de REER chaque ann\u00e9e pour <\/strong><strong>remplir votre tranche d'imposition la plus basse (\u2264 53 359 $), puis compl\u00e9ter avec <\/strong><strong>CELI sans imp\u00f4t. Optimise imp\u00f4t total sur le d\u00e9caissement.';\n}\n\n\/\/ ============================================================\n\/\/ RENDU UI\n\/\/ ============================================================\nfunction rendreUI(regs, reco, mc, decaiss, inp, profil, tmm, tmmR, fraisDec, inflation){\n  \/\/ Recommandation\n  document.getElementById('reg-reco-name').textContent = reco.reg.name;\n  document.getElementById('reg-reco-why').innerHTML = reco.why;\n  if (reco.nuance){\n    document.getElementById('reg-reco-nuance').style.display = 'block';\n    document.getElementById('reg-reco-nuance-text').innerHTML = reco.nuance;\n  }\n\n  \/\/ Conversion nominal \u2192 r\u00e9el si demand\u00e9\n  const ajust = (n) => inp.affichage === 'reel' ? n \/ Math.pow(1 + inflation, inp.horizon) : n;\n\n  \/\/ Monte Carlo stats\n  document.getElementById('reg-mc-stats').style.display = 'grid';\n  document.getElementById('reg-mc-p10').textContent = fmt(ajust(mc.p10));\n  document.getElementById('reg-mc-p50').textContent = fmt(ajust(mc.p50));\n  document.getElementById('reg-mc-p90').textContent = fmt(ajust(mc.p90));\n\n  \/\/ Bar chart : 3 sc\u00e9narios par r\u00e9gime\n  if (chartBar) chartBar.destroy();\n  const sortedReal = [...regs].sort((a,b) => b.real.net - a.real.net);\n  chartBar = new Chart(document.getElementById('reg-chart-bar'), {\n    type:'bar',\n    data:{\n      labels: sortedReal.map(r => r.name),\n      datasets:[\n        {label:'Pessimiste', data: sortedReal.map(r => Math.round(ajust(r.pess.net))), backgroundColor:'#fca5a5', borderRadius:4},\n        {label:'R\u00e9aliste',   data: sortedReal.map(r => Math.round(ajust(r.real.net))), backgroundColor: sortedReal.map(r => r.color), borderRadius:4},\n        {label:'Optimiste',  data: sortedReal.map(r => Math.round(ajust(r.opt.net))),  backgroundColor:'#86efac', borderRadius:4}\n      ]\n    },\n    options:{\n      responsive:true, maintainAspectRatio:false,\n      plugins:{\n        legend:{position:'bottom', labels:{color:'#fff', font:{size:11}, boxWidth:12}},\n        tooltip:{callbacks:{label: c => c.dataset.label + ': $ ' + c.parsed.y.toLocaleString('fr-CA')}}\n      },\n      scales:{\n        y:{ticks:{callback: v => '$' + (v\/1000).toFixed(0) + 'k', color:'#94a3b8'}, grid:{color:'#1e3a52'}},\n        x:{grid:{display:false}, ticks:{color:'#fff', font:{size:11, weight:'600'}}}\n      }\n    }\n  });\n\n  \/\/ Line chart : trajectoire r\u00e9aliste avec frais\n  const labels = Array.from({length: inp.horizon + 1}, (_,i) => 'An ' + i);\n  const tauxImpotPlacement = tauxImposPlacement(inp.type, tmm);\n  const datasets = regs.filter(r => r.key !== 'rver').map(r => {\n    let traj;\n    if (r.key === 'nonreg'){\n      traj = trajectoireNonReg(inp.cotis, profil.rdmt, inp.horizon, fraisDec, tauxImpotPlacement);\n    } else if (r.key === 'celiapp'){\n      const ansMax = Math.min(inp.horizon, 5);\n      let v = 0; const arr = [0];\n      for (let i = 0; i < inp.horizon; i++){\n        if (i < ansMax) v += Math.min(inp.cotis, PLAFONDS.celiapp);\n        v *= (1 + profil.rdmt - fraisDec);\n        arr.push(v);\n      }\n      traj = arr;\n    } else if (r.key === 'reee'){\n      const cot = Math.min(inp.cotis, 2500);\n      let v = 0, sc = 0; const arr = [0];\n      for (let i = 0; i < inp.horizon; i++){\n        v += cot;\n        const sub = sc < (PLAFONDS.sceeVie + PLAFONDS.iqeeVie) ? Math.min(cot * 0.30, (PLAFONDS.sceeVie + PLAFONDS.iqeeVie) - sc) : 0;\n        v += sub; sc += sub;\n        v *= (1 + profil.rdmt - fraisDec);\n        arr.push(v);\n      }\n      traj = arr;\n    } else {\n      const cot = (r.key === 'reer') ? Math.min(inp.cotis, PLAFONDS.reer, inp.revenu * 0.18) : Math.min(inp.cotis, PLAFONDS.celi);\n      traj = trajectoire(cot, profil.rdmt, inp.horizon, fraisDec);\n    }\n    return {\n      label: r.name,\n      data: traj.map(v => Math.round(ajust(v))),\n      borderColor: r.color,\n      backgroundColor: r.color + '20',\n      fill:false, tension:.3, pointRadius:0, borderWidth:2.5\n    };\n  });\n  if (chartLine) chartLine.destroy();\n  chartLine = new Chart(document.getElementById('reg-chart-line'), {\n    type:'line', data:{labels, datasets},\n    options:{\n      responsive:true, maintainAspectRatio:false,\n      plugins:{legend:{position:'bottom', labels:{color:'#fff', font:{size:11}, boxWidth:14}}, tooltip:{callbacks:{label: c => c.dataset.label + ': $ ' + c.parsed.y.toLocaleString('fr-CA')}}},\n      scales:{\n        y:{ticks:{callback: v => '$' + (v\/1000).toFixed(0) + 'k', color:'#94a3b8'}, grid:{color:'#1e3a52'}},\n        x:{grid:{display:false}, ticks:{color:'#94a3b8', maxTicksLimit:8}}\n      }\n    }\n  });\n\n  \/\/ Monte Carlo histogram (sur le r\u00e9gime gagnant)\n  const buckets = monteCarloHist(reco.reg, inp, profil, fraisDec, tauxImpotPlacement);\n  if (chartMc) chartMc.destroy();\n  chartMc = new Chart(document.getElementById('reg-chart-mc'), {\n    type:'bar',\n    data:{\n      labels: buckets.map(b => '$' + (b.min\/1000).toFixed(0) + 'k\u2013' + (b.max\/1000).toFixed(0) + 'k'),\n      datasets:[{\n        data: buckets.map(b => b.count),\n        backgroundColor: buckets.map(b => b.median ? '#10c4c7' : '#475569'),\n        borderRadius:3\n      }]\n    },\n    options:{\n      responsive:true, maintainAspectRatio:false,\n      plugins:{legend:{display:false}, tooltip:{callbacks:{label: c => c.parsed.y + ' simulations sur 500'}}},\n      scales:{\n        y:{ticks:{color:'#94a3b8', stepSize:20}, grid:{color:'#1e3a52'}, title:{display:true, text:'Nb simulations', color:'#94a3b8', font:{size:11}}},\n        x:{grid:{display:false}, ticks:{color:'#94a3b8', font:{size:10}, maxRotation:45, minRotation:45}}\n      }\n    }\n  });\n\n  \/\/ Tableau\n  const fraisCum = (inp.cotis * inp.horizon) * fraisDec * (inp.horizon \/ 2);\n  const tbody = document.querySelector('#reg-table tbody');\n  tbody.innerHTML = sortedReal.map((r,i) => `\n    <tr class=\"${i===0 ? 'reg-best' : ''}\">\n      <td class=\"reg-name\">${r.name}${i===0 ? ' \ud83c\udfc6' : ''}\n      <\/td><td class=\"num\">${fmt(ajust(r.real.cot))}\n      <\/td><td class=\"num\">${r.real.sub > 0 ? fmt(ajust(r.real.sub)) : '\u2014'}\n      <\/td><td class=\"num\" style=\"color:#dc2626\">\u2212${fmt(fraisCum)}\n      <\/td><td class=\"num\" style=\"color:#ef4444\">${fmt(ajust(r.pess.net))}\n      <\/td><td class=\"num\"><strong>${fmt(ajust(r.real.net))}\n      <td class=\"num\" style=\"color:#16a34a\">${fmt(ajust(r.opt.net))}\n    `).join('');\n\n  \/\/ Phase d\u00e9caissement\n  if (decaiss && inp.decaissement > 0){\n    document.getElementById('reg-decaiss-box').style.display = 'block';\n    document.getElementById('reg-dec-annuel').textContent = fmt(decaiss.annuel);\n    document.getElementById('reg-dec-mensuel').textContent = fmt(decaiss.annuel \/ 12);\n    document.getElementById('reg-dec-duree').textContent = decaiss.duree + ' ans';\n    document.getElementById('reg-dec-ordre').innerHTML = decaiss.ordre;\n  } else {\n    document.getElementById('reg-decaiss-box').style.display = 'none';\n  }\n\n  \/\/ Hypoth\u00e8ses transparentes\n  const hyp = document.getElementById('reg-hypotheses');\n  hyp.innerHTML = `\n    <li><strong>Profil ${inp.risque} : ${profil.label} \u2192 rendement nominal moyen <\/strong><strong>${(profil.rdmt*100).toFixed(1)} %, volatilit\u00e9 \u00b1${(profil.vol*100).toFixed(1)} %\n    <li><strong>Frais de gestion : ${(fraisDec*100).toFixed(2)} % par ann\u00e9e, d\u00e9duits chaque ann\u00e9e du rendement (impact compos\u00e9 sur l'horizon)\n    <li><strong>Inflation : ${(inflation*100).toFixed(1)} % par ann\u00e9e \u2014 affichage actuel : <\/strong><strong>${inp.affichage === 'reel' ? '$ d'aujourd'hui (corrig\u00e9s inflation)' : '$ futurs (nominaux)'}\n    <li><strong>TMM actuel : ${(tmm*100).toFixed(2)} % (revenu ${fmt(inp.revenu)}) \u2014 <\/strong><strong>TMM retrait : ${(tmmR*100).toFixed(2)} % (revenu retraite ${fmt(inp.revenuRetraite)})\n    <li><strong>Plafonds 2026 appliqu\u00e9s : REER ${(inp.revenu*0.18).toFixed(0) > PLAFONDS.reer ? PLAFONDS.reer : (inp.revenu*0.18).toFixed(0)} $ \/ CELI 7 000 $ \/ CELIAPP 8 000 $\/an \/ REEE 2 500 $\/an pour subventions pleines\n    <li><strong>Subventions REEE : SCEE 20 % + IQEE 10 % = 30 % sur premiers 2 500 $\/an (max 750 $\/an, 10 800 $ vie)\n    <li><strong>Monte Carlo : 500 simulations, distribution normale autour du rendement attendu, percentiles 10\/50\/90\n    <li><strong>D\u00e9caissement : annuit\u00e9 actuarielle (rendement r\u00e9el net = rendement \u2212 frais \u2212 inflation)\n    <li><strong>Sortie REER\/RVER : imp\u00f4t complet au TMM retraite \u2014 <\/strong><strong>CELI\/CELIAPP\/REEE : sortie libre d'imp\u00f4t (pour cotisant)\n  `;\n}\n\n\/\/ Monte Carlo histogram (10 buckets)\nfunction monteCarloHist(reg, inp, profil, fraisDec, tauxImpotPlacement){\n  const SIMS = 500;\n  const cot = inp.cotis;\n  const isNonReg = reg.key === 'nonreg';\n  const results = [];\n  for (let s = 0; s < SIMS; s++){\n    let v = 0;\n    for (let i = 0; i < inp.horizon; i++){\n      const rdmt = profil.rdmt + profil.vol * gaussRand();\n      v += cot;\n      if (isNonReg){\n        const rendBrut = v * (rdmt - fraisDec);\n        v += rendBrut - Math.max(0, rendBrut * tauxImpotPlacement);\n      } else {\n        v *= (1 + rdmt - fraisDec);\n      }\n    }\n    results.push(v);\n  }\n  results.sort((a,b)=>a-b);\n  const min = results[0], max = results[results.length-1];\n  const median = results[Math.floor(SIMS*0.5)];\n  const N = 12;\n  const step = (max - min) \/ N;\n  const buckets = [];\n  for (let i = 0; i < N; i++){\n    const lo = min + i*step;\n    const hi = min + (i+1)*step;\n    const count = results.filter(v => v >= lo && (i === N-1 ? v <= hi : v < hi)).length;\n    buckets.push({min:lo, max:hi, count, median: median >= lo && median < hi});\n  }\n  return buckets;\n}\n\nfunction fmt(n){\n  if (Math.abs(n) >= 1e6) return '$ ' + (n\/1e6).toFixed(2) + ' M';\n  return '$ ' + Math.round(n).toLocaleString('fr-CA');\n}\nfunction activeVal(group){\n  const btn = document.querySelector(`.regimes-radios[data-group=\"${group}\"] button.active`);\n  return btn ? btn.dataset.val : null;\n}\n\n\/\/ ============================================================\n\/\/ PRESETS\n\/\/ ============================================================\nfunction appliquerPreset(key){\n  const p = PRESETS[key]; if (!p) return;\n  document.getElementById('reg-revenu').value = p.revenu;\n  document.getElementById('reg-revenu-retraite').value = p.revenuR;\n  document.getElementById('reg-cotisation').value = p.cotis;\n  document.getElementById('reg-horizon').value = p.horizon;\n  document.getElementById('reg-decaissement').value = p.decaiss;\n  document.getElementById('reg-frais').value = p.frais;\n  ['conjoint','risque','type','objectif','strategie'].forEach(g => {\n    const wantVal = p[g];\n    document.querySelectorAll(`.regimes-radios[data-group=\"${g}\"] button`).forEach(b => {\n      b.classList.toggle('active', b.dataset.val === wantVal);\n    });\n  });\n  calculer();\n}\n\n\/\/ ============================================================\n\/\/ BIND EVENTS\n\/\/ ============================================================\ndocument.querySelectorAll('.regimes-radios').forEach(g => {\n  g.addEventListener('click', e => {\n    if (e.target.tagName !== 'BUTTON') return;\n    g.querySelectorAll('button').forEach(b => b.classList.remove('active'));\n    e.target.classList.add('active');\n    calculer();\n  });\n});\n['reg-revenu','reg-revenu-retraite','reg-cotisation','reg-horizon','reg-decaissement','reg-frais','reg-inflation'].forEach(id => {\n  document.getElementById(id).addEventListener('input', calculer);\n});\ndocument.querySelectorAll('.regimes-preset').forEach(b => {\n  b.addEventListener('click', () => appliquerPreset(b.dataset.preset));\n});\n\n\/\/ Premier calcul\ncalculer();\n})();\n<\/strong><\/li><\/strong><\/li><\/strong><\/li><\/strong><\/li><\/strong><\/li><\/strong><\/li><\/strong><\/li><\/strong><\/li><\/strong><\/li><\/td><\/strong><\/td><\/tr><\/strong><\/script>\n<!-- rg-info-tap-handler -->\n\n<script>\n(function(){\n  \/\/ Tap mobile = toggle tooltip (pas de hover sur mobile)\n  document.addEventListener('click', e => {\n    const tip = e.target.closest('.rg-info');\n    if (tip){\n      e.preventDefault();\n      document.querySelectorAll('.rg-info.rg-active').forEach(el => { if(el !== tip) el.classList.remove('rg-active'); });\n      tip.classList.toggle('rg-active');\n    } else {\n      document.querySelectorAll('.rg-info.rg-active').forEach(el => el.classList.remove('rg-active'));\n    }\n  });\n})();\n<\/script>\n\n\n\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"Why-the-chosen-diet-changes-everything\"><\/span>Why the chosen diet changes everything<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"lead\">Investments earn three types of income: <strong>interest, dividends and capital gains<\/strong>. In Quebec, this income is not taxed in the same way. But within a registered plan (RRSP, TFSA, FSASA, RESP, VRSP), <strong>this distinction disappears<\/strong> : everything grows tax-free.  <\/p>\n\n<table class=\"regimes-tax-table\">\n<thead><tr><th>Type of income<\/th><th>Taxable inclusion<\/th><th>Effective MMR rate 50%<\/th><\/tr><\/thead>\n<tbody>\n<tr><td><strong>Interest<\/strong> (GICs, bonds, savings accounts)<\/td><td>100%<\/td><td>\u2248 50%<\/td><\/tr>\n<tr><td><strong>Eligible dividends<\/strong> (large Canadian corporations)<\/td><td>~ 138% gross, with tax credit<\/td><td>\u2248 36%<\/td><\/tr>\n<tr><td><strong>Non-eligible dividends<\/strong> (SMEs)<\/td><td>~ 115% gross, reduced credit<\/td><td>\u2248 47%<\/td><\/tr>\n<tr><td><strong>Capital gain<\/strong> (shares, resold funds)<\/td><td>50%<\/td><td>\u2248 25%<\/td><\/tr>\n<\/tbody>\n<\/table>\n\n<p style=\"margin-top:14px;color:#475569;font-size:14.5px\">Within an RRSP, TFSA, FHSA, RESP, VRSP or RDSP, <strong>the type of income is no longer of tax importance<\/strong>. This is the major advantage of these vehicles. <\/p>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"The-silent-impact-of-management-fees\"><\/span>The silent impact of management fees<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"lead\">Over 30 years, a management fee of 2% vs. 0.5% can cost you <strong>more than $100,000<\/strong> on a $200,000 portfolio. This is the most expensive blind spot in financial planning. <\/p>\n\n<table class=\"regimes-tax-table\">\n<thead><tr><th>Annual Fee<\/th><th>Typical Product Type<\/th><th>Final Capital $200K \u00d7 30 Years @ 6% Gross<\/th><th>Total Cost of Fees<\/th><\/tr><\/thead>\n<tbody>\n<tr><td><strong>0.25%<\/strong><\/td><td>Index ETF (XAW, VEQT, ZGRO)<\/td><td>$1,026,000<\/td><td>$50,000<\/td><\/tr>\n<tr><td><strong>0.75%<\/strong><\/td><td>Bank Index Fund (Tangerine)<\/td><td>$934,000<\/td><td>$142,000<\/td><\/tr>\n<tr><td><strong>1.50%<\/strong><\/td><td>Mutual Fund (median MER)<\/td><td>$807,000<\/td><td>$269,000<\/td><\/tr>\n<tr><td><strong>2.25%<\/strong><\/td><td>Back-end sales charge fund<\/td><td>$695,000<\/td><td>$381,000<\/td><\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin-top:12px;color:#475569;font-size:14.5px\">The fees add up: the fund&#8217;s MER (0.1% to 2.5%) + advisor fees (0% to 1.5%) + transaction fees. Always ask for the <strong>total MER<\/strong> and <strong>consulting fee<\/strong> before signing. The simulator above includes a fresh field \u2014 test the actual impact on your case.  <\/p>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"Risk-what-the-%E2%80%9Caverage%E2%80%9D-numbers-hide\"><\/span>Risk: what the &#8220;average&#8221; numbers hide<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"lead\">An average return of 6% does not mean 6% every year. The markets are -20% one year, +30% the next. This volatility changes everything, especially when you cash out.  <\/p>\n\n<div class=\"regimes-cards3\">\n<div class=\"regimes-card\">\n<h3>Cautious profile<\/h3>\n<p><strong>60% bonds \/ 40% equities<\/strong><\/p>\n<ul>\n<li>Expected return: <strong>~ 4%<\/strong><\/li>\n<li>Volatility (standard deviation): \u00b1 4%<\/li>\n<li>Worst year ever: ~ \u221210%<\/li>\n<li>Suitable: short horizon (< 7 years), strong risk aversion<\/li>\n<\/ul>\n<\/div>\n<div class=\"regimes-card\">\n<h3>Balanced profile<\/h3>\n<p><strong>40% bonds \/ 60% equities<\/strong><\/p>\n<ul>\n<li>Expected return: <strong>~5.5%<\/strong><\/li>\n<li>Volatility: \u00b1 8%<\/li>\n<li>Worst year ever: ~ \u221220%<\/li>\n<li>Suitable: 7-15 year horizon, moderate tolerance<\/li>\n<\/ul>\n<\/div>\n<div class=\"regimes-card\">\n<h3>Aggressive profile<\/h3>\n<p><strong>20% bonds \/ 80% equities<\/strong><\/p>\n<ul>\n<li>Expected return: <strong>~7.5%<\/strong><\/li>\n<li>Volatility: \u00b1 14%<\/li>\n<li>Worst year ever: ~ \u221235%<\/li>\n<li>Suitable: 15+ year horizon, high tolerance<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n<div class=\"regimes-tip\">\n<strong>\ud83d\udca1 Why 500 simulations?<\/strong> Our Monte Carlo does not give a single figure, but a <strong>distribution<\/strong>. The P10 (worst 10%), P50 (median), and P90 (best 10%) give you a realistic range. If the gap between P10 and P90 is huge, your profile is too risky for your horizon \u2014 adjust.  \n<\/div>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"Disbursement-phase-the-great-forgotten-one\"><\/span>Disbursement phase: the great forgotten one<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"lead\">Accumulating $1 million is useless if you deplete it in 12 years. The <strong>withdrawal sequence<\/strong> and <strong>smart order<\/strong> between your accounts can double the length of your savings. <\/p>\n\n<table class=\"regimes-tax-table\">\n<thead><tr><th>Strategy<\/th><th>Advantage<\/th><th>When to use<\/th> it<\/tr><\/thead>\n<tbody>\n<tr><td><strong>RRSP first, TFSA second<\/strong><\/td><td>Avoid high MMR on large RRSP later<\/td><td>retirement MMT < current MMR, no employer pension<\/td><\/tr>\n<tr><td><strong>Bracket filling<\/strong><\/td><td>Fills the bottom 27% each year with a Standard RRSP<\/td><td>recommended by financial planners<\/td><\/tr>\n<tr><td><strong>TFSA first<\/strong><\/td><td>RRSP custody for inheritance, tax deferral<\/td><td>If large estate expected (RRSP 100% taxable at death)<\/td><\/tr>\n<tr><td><strong>Non-registered first<\/strong><\/td><td>Realizes low-taxed capital gains early<\/td><td>If large non-registered account + taxed RRSP\/TFSA<\/td><\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin-top:12px;color:#475569;font-size:14.5px\"><strong>The simulator above<\/strong> calculates the sustainable annual withdrawal based on an actuarial annuity (net return after inflation \u00d7 fees), and recommends the smart order based on your current MMR vs. retirement.<\/p>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"The-6-diets-in-detail\"><\/span>The 6 diets in detail<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"lead\">Each plan has a goal. Understanding how they work prevents you from using the wrong vehicle. <\/p>\n\n<div class=\"regimes-cards2\">\n\n<div class=\"regimes-card\">\n<h3>RRSP \u2014 Retirement<\/h3>\n<p>The <strong>Registered Retirement Savings Plan<\/strong> allows you to invest while saving on taxes, most often in anticipation of retirement.<\/p>\n<ul>\n<li>Contribute <strong>reduces your tax<\/strong> immediately (to your MMR)<\/li>\n<li>Investment <strong>grows tax-free<\/strong><\/li>\n<li>You pay tax on the amounts <strong>withdrawn<\/strong> (at the MMR of the moment)<\/li>\n<li>2026 Cap: <strong>18% of Revenue, max $32,490<\/strong><\/li>\n<li>Contribution deadline: <strong>March 1, 2027<\/strong> for the year 2026<\/li>\n<\/ul>\n<\/div>\n\n<div class=\"regimes-card\">\n<h3>TFSA \u2014 Full flexibility<\/h3>\n<p>The <strong>Tax-Free Savings Account<\/strong> grows your investments <strong>tax-free at the end<\/strong>.<\/p>\n<ul>\n<li>Contributing does <strong>NOT<\/strong> reduce your taxes<\/li>\n<li>Investment grows tax-free<\/li>\n<li><strong>No tax<\/strong> on withdrawals<\/li>\n<li>2026 limit: <strong>$7,000\/year<\/strong>, entitlements accruing for 18 years<\/li>\n<li>Maximum life for 2026 (born in 1991 or earlier): <strong>$102,000<\/strong><\/li>\n<\/ul>\n<\/div>\n\n<div class=\"regimes-card\">\n<h3>FHSA \u2014 1st property<\/h3>\n<p>The <strong>Tax-Free First Home Savings Account<\/strong> combines RRSP + TFSA benefits.<\/p>\n<ul>\n<li><strong>Tax-deductible<\/strong> contributions (such as RRSPs)<\/li>\n<li>Tax-deferred growth<\/li>\n<li><strong>Tax-free withdrawals<\/strong> for a 1st home (such as a TFSA)<\/li>\n<li>Cap: <strong>$8,000\/year, $40,000 lifetime<\/strong><\/li>\n<li>As a couple: each spouse can contribute \u2192 <strong>$16,000\/year, $80,000 for life<\/strong><\/li>\n<li>Must be used within <strong>15 years<\/strong> of opening<\/li>\n<\/ul>\n<\/div>\n\n<div class=\"regimes-card\">\n<h3>RESP \u2014 Child&#8217;s Education<\/h3>\n<p>The <strong>Registered Education Savings Plan<\/strong> attracts up to <strong>30% government grants<\/strong> (CESG + QESI).<\/p>\n<ul>\n<li>Contributing does not reduce your taxes<\/li>\n<li><strong>Federal CESG 20%<\/strong> on the first $2,500\/year (max $500\/year, $7,200 lifetime)<\/li>\n<li><strong>QESI Quebec 10%<\/strong> on the first $2,500\/year (max $250\/year, $3,600 lifetime)<\/li>\n<li>Tax-deferred growth<\/li>\n<li>Withdrawals: <strong>Your contributions<\/strong> come out tax-free; <strong>the student<\/strong> pays income tax + subsidies (at his MMT, often ~15%)<\/li>\n<li>Life limit: <strong>$50,000 per child<\/strong><\/li>\n<\/ul>\n<\/div>\n\n<div class=\"regimes-card\">\n<h3>VRSP \u2014 Employer Plan<\/h3>\n<p>The <strong>Voluntary Retirement Savings Plan<\/strong> is a retirement vehicle offered by certain employers in Quebec, based on payroll deductions.<\/p>\n<ul>\n<li>Payroll <strong>deductions reduce taxes<\/strong> at source<\/li>\n<li>Tax-deferred growth (such as RRSPs)<\/li>\n<li>Taxed withdrawals (such as RRSPs)<\/li>\n<li><strong>Voluntary<\/strong> participation, you can opt out<\/li>\n<li>Management fees are often <strong>lower<\/strong> than an individual RRSP (employer-negotiated benefit)<\/li>\n<\/ul>\n<\/div>\n\n<div class=\"regimes-card\">\n<h3>RDSP \u2014 Safety of a person with a disability<\/h3>\n<p>The <strong>Registered Disability Savings Plan provides long-term<\/strong> financial security for a person who is eligible for the Disability Credit.<\/p>\n<ul>\n<li>Contributing does not reduce your taxes<\/li>\n<li>The government is adding the <strong>CDSG<\/strong> (grant) up to $3,500\/year and the <strong>CDSG<\/strong> (bond) up to $1,000\/year for low incomes<\/li>\n<li>Tax-deferred growth<\/li>\n<li>Your contributions come out tax-free; the person pays income tax + subsidies<\/li>\n<li>Life ceiling: <strong>$200,000<\/strong><\/li>\n<li>Grants available up to <strong>age 49<\/strong> of the beneficiary<\/li>\n<\/ul>\n<\/div>\n\n<\/div>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"Combined-strategies-tested-in-the-simulator\"><\/span>Combined strategies (tested in the simulator)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p class=\"lead\">No diet alone is optimal for the majority. Real strategies combine several diets depending on the profile. <\/p>\n\n<table class=\"regimes-tax-table\">\n<thead><tr><th>Logical Strategy<\/th><th><\/th><th>Ideal Profile<\/th><\/tr><\/thead>\n<tbody>\n<tr><td><strong>50% RRSP \/ 50% TFSA<\/strong><\/td><td>Balance immediate deduction + long-term flexibility<\/td><td>Employee 30-50 years old, MMR 30-37%, retirement horizon<\/td><\/tr>\n<tr><td><strong>RRSP max \u2192 TFSA<\/strong><\/td><td>Maximizes RRSP First Deduction (limits), High Income TFSA Surplus<\/td><td>, MMR\u2265 37%, Savings Capacity \u2265 $12,000\/year<\/td><\/tr>\n<tr><td><strong>FHSA \u2192 RRSP<\/strong><\/td><td>FHSA $8,000\/year for 5 years ($40,000), then RRSP then<\/td><td>1st Home Buyer 25-35 years<\/td><\/tr>\n<tr><td><strong>RESP 2500 + RRSP + TFSA<\/strong><\/td><td>RESP for subv 30%, RRSP for deduction, TFSA for the rest Parent,<\/td><td>young child + savings capacity\u2265 $8,000\/year<\/td><\/tr>\n<tr><td><strong>Auto Optim (according to MMR)<\/strong><\/td><td>The algorithm chooses the best ratio according to your current MMR vs retirement<\/td><td>All profiles, to be validated with a F.Pl. <\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"2026-Limits-and-Fees-%E2%80%94-Summary\"><\/span>2026 Limits and Fees \u2014 Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<table class=\"regimes-tax-table\">\n<thead><tr><th>Plan<\/th><th>Maximum annual contribution<\/th><th>Lifetime limit<\/th><th>Deadline<\/th><\/tr><\/thead>\n<tbody>\n<tr><td><strong>RRSP<\/strong><\/td><td>18% of income, max $32,490None<\/td><td> <\/td><td>March 1, 2027<\/td><\/tr>\n<tr><td><strong>TFSA<\/strong><\/td><td>$7,000Cumulative<\/td> <td>for 18 years ($102,000 for those born in 1991)<\/td><td>December 31, 2026<\/td><\/tr>\n<tr><td><strong>FHSA $<\/strong><\/td><td>8,000<\/td>$<td>40,000December<\/td> <td>31, 2026<\/td><\/tr>\n<tr><td><strong>RESP<\/strong><\/td><td>None, but Full CESG on $2,500<\/td>$<td>50,000\/child<\/td><td>December 31, 2026<\/td><\/tr>\n<tr><td><strong>CESG + QESI<\/strong><\/td><td>$500 + $250\/year<\/td><td>$7,200 + $3,600December<\/td> <td>31, 2026<\/td><\/tr>\n<tr><td><strong>RDSP<\/strong><\/td><td>None<\/td><td>$200,000December<\/td> <td>31, 2026<\/td><\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"Frequently-Asked-Questions\"><\/span>Frequently Asked Questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"regimes-faq\">\n\n<details><summary>Is it better to contribute to an RRSP or TFSA in 2026?<\/summary>\n<div class=\"faq-body\"><strong>An advantageous RRSP if<\/strong> your current MMR \u2265 30% AND you plan to exit at a lower MMR. <strong>TFSA is advantageous if<\/strong> your MMR is \u2264 28% OR your retirement MMR may be higher (large RRSP, employer pension, inheritance). In both cases, <strong>combining<\/strong> the two is almost always optimal \u2014 test the &#8220;50\/50&#8221; or &#8220;RRSP max \u2192 TFSA&#8221; strategy in the simulator. <\/div><\/details>\n\n<details><summary>Why do my calculations show 3 different results?<\/summary>\n<div class=\"faq-body\">Because the markets do not give a constant return. The <strong>3 scenarios<\/strong> (pessimistic, realistic, optimistic) reflect the real volatility of your risk profile. The <strong>pessimistic<\/strong> scenario = expected return \u2212 0.7 \u00d7 standard deviation; <strong>optimistic<\/strong> = yield + 0.7 \u00d7 standard deviation. The <strong>Monte Carlo simulation (500 iterations)<\/strong> also gives the complete distribution of possible results. If the gap between P10 and P90 is too wide for your tolerance, adjust your risk profile.    <\/div><\/details>\n\n<details><summary>How do management fees impact my bottom line?<\/summary>\n<div class=\"faq-body\">A lot. Over 30 years with $200,000 of capital, going from <strong>2% to 0.5% in fees<\/strong> can save <strong>more than $200,000<\/strong>. Fees are deducted from the return each year, so the compounding effect is massive. The &#8220;Management Fees&#8221; field in the simulator incorporates your actual MER \u2014 test 0.25% (index ETFs), 0.75% (bank index funds) and 2% (typical mutual funds).   <\/div><\/details>\n\n<details><summary>What is the difference between nominal and real return?<\/summary>\n<div class=\"faq-body\">The <strong>nominal return<\/strong> is the gross return posted (e.g. 6%). The <strong>real return<\/strong> is the return after inflation (e.g. 6% \u2212 2.1% inflation = 3.9%). The simulator allows you to switch the display between <strong>&#8220;future $&#8221;<\/strong> (nominal, like your bank statement in 25 years) and <strong>&#8220;today&#8217;s $&#8221;<\/strong> (real, what you&#8217;ll actually be able to buy). To plan for retirement, <strong>look at today&#8217;s $<\/strong>s.   <\/div><\/details>\n\n<details><summary>What happens if I exceed the contribution limits?<\/summary>\n<div class=\"faq-body\"><strong>Penalty of 1% per month<\/strong> on the excess (TFSA, FHSA, RRSP over $2,000 in line of credit). That&#8217;s 12% per year. For the TFSA, the CRA has a poor tolerance for withdrawals and recontributions in the same year \u2014 a common pitfall. Check your entitlements on <strong>My CRA Account<\/strong> before each major assessment.   <\/div><\/details>\n\n<details><summary>How does the spousal RRSP work?<\/summary>\n<div class=\"faq-body\">The higher-income spouse contributes to the RRSP on behalf of the lower-income spouse. The <strong>tax deduction<\/strong> goes to the contributor (high MMR), but the <strong>withdrawal<\/strong> will be taxed on the beneficiary (low MMR). Classic retirement income splitting strategy. The amounts must remain in the spousal RRSP for <strong>a full 3 years<\/strong> before withdrawal, otherwise they are allocated to the contributor.   <\/div><\/details>\n\n<details><summary>What is the optimal order to withdraw in retirement?<\/summary>\n<div class=\"faq-body\">Standard case: <strong>bracket filling<\/strong> \u2014 each year, withdraw from the RRSP until you fill the 27% MMR bracket (up to $53,359 of income in 2026), then top up with the tax-free TFSA. If the MMR is very low (< current MMR \u221210%),   <strong>empty the RRSP faster<\/strong>. If large inheritance is expected, <strong>empty non-registered + TFSA first<\/strong> to defer the tax on the RRSP at death. A F. Pl. can refine the sequence.    <\/div>\n\n<details><summary>Is the FHSA really better for buying my first home?<\/summary>\n<div class=\"faq-body\">Yes \u2014 it&#8217;s the only plan that combines <strong>tax-deductible contributions<\/strong> (like RRSPs) AND <strong>tax-free withdrawals<\/strong> for the purchase (like TFSAs). As a couple, each spouse can contribute up to $8,000\/year ($16,000 combined). The FHSA must be used within 15 years of opening, otherwise the balance is transferred to your RRSP (tax-free).  <\/div><\/details>\n\n<details><summary>How much does the RESP earn in grants?<\/summary>\n<div class=\"faq-body\">On the first <strong>$2,500\/year contributed<\/strong> : <strong>30%<\/strong> automatic = 20% federal CESG ($500\/year, $7,200 life) + QESI Quebec 10% ($250\/year, $3,600 life). Possible total per child: <strong>$10,800<\/strong> in grants. For low-income families, the CEB adds up to $2,000 more.  <\/div><\/details>\n\n<details><summary>Who can help me validate my strategy?<\/summary>\n<div class=\"faq-body\">In Quebec, investment advice is regulated by the <strong>AMF (Autorit\u00e9 des march\u00e9s financiers).<\/strong> Talk to a <strong>registered financial planner (F. Pl.), investment advisor or mutual fund representative<\/strong> . Check the <a href=\"https:\/\/lautorite.qc.ca\/grand-public\/registres\" target=\"_blank\" rel=\"nofollow\">AMF register<\/a>. Beware of unsupervised advice: a poor choice of strategy can cost tens of thousands of dollars over 30 years.   <\/div><\/details>\n\n<\/details><\/div>\n<\/div>\n\n<div class=\"regimes-eeat\">\n<div class=\"item\"><div class=\"check\">\u2713<\/div><p><strong>2026 Settings Verified<\/strong>Up-to-date RRSP, TFSA, FHSA, RESP and combined Quebec + federal MMT brackets.<\/p><\/div>\n<div class=\"item\"><div class=\"check\">\u2713<\/div><p><strong>Transparent methodology<\/strong>Assumptions displayed (yield, fees, inflation, MMR) \u2014 no black boxes.<\/p><\/div>\n<div class=\"item\"><div class=\"check\">\u2713<\/div><p><strong>Neutral tool<\/strong>No hidden commissions, no collection of personal data, open calculation code in the page.<\/p><\/div>\n<\/div>\n\n<div class=\"regimes-section\">\n<h2><span class=\"ez-toc-section\" id=\"Other-Assur360-simulators\"><\/span>Other Assur360 simulators<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"regimes-cross\">\n<a href=\"https:\/\/www.assur360.ca\/en\/assur360-simulators-free-tools-for-your-financial-decisions\/quebec-emergency-fund-calculator-2026-how-much-to-save-to-protect-yourself\/\"><strong>Emergency Fund Calculator<\/strong><span>How Much to Save to Protect Yourself from the Unexpected<\/span><\/a>\n<a href=\"\/simulation\/courbes-cqff\/\"><strong>CQFF Curves \u2014 TEMI 2025<\/strong><span>View Your Marginal Effective Tax<\/span><\/a>\n<a href=\"https:\/\/www.assur360.ca\/en\/assur360-simulators-free-tools-for-your-financial-decisions\/disability-insurance-needs-calculator-2026-optimal-waiting-period-assur360\/\"><strong>Rate Disability Insurance<\/strong><span>Calculator Optimal Waiting Period for Your Emergency<\/span><\/a>\n<a href=\"https:\/\/www.assur360.ca\/en\/assur360-simulators-free-tools-for-your-financial-decisions\/mortgage-insurance-calculator-bank-vs-personal-life-insurance\/\"><strong>Fund Mortgage Insurance: Bank vs. Personal<\/strong><span>Life Compare the two coverages and save<\/span><\/a>\n<\/div>\n<\/div>\n\n<div class=\"regimes-cta-final\">\n<h2><span class=\"ez-toc-section\" id=\"Need-a-human-opinion-to-validate-your-strategy\"><\/span>Need a human opinion to validate your strategy?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A financial planner or investment advisor registered with the AMF can analyze your entire situation (income, debts, plans, taxation, estate) and build an optimized plan.  <strong>First consultation, often free.<\/strong><\/p>\n<div class=\"btns\">\n<a class=\"btn-primary\" href=\"\/soumission\/\">Get a free<\/a>\n quote<a class=\"btn-outline\" href=\"tel:18663574451\">\ud83d\udcde 1-866-357-4451<\/a>\n<\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@graph\": [{\"@type\": \"InsuranceAgency\", \"@id\": \"https:\/\/www.assur360.ca\/#agency\", \"name\": \"Assur360\", \"url\": \"https:\/\/www.assur360.ca\/\", \"telephone\": \"1-866-357-4451\", \"areaServed\": {\"@type\": \"AdministrativeArea\", \"name\": \"Qu\u00e9bec\"}}, {\"@type\": \"WebApplication\", \"name\": \"Comparateur r\u00e9gimes d'\u00e9pargne fiscaux Qu\u00e9bec 2026\", \"url\": \"https:\/\/www.assur360.ca\/simulation\/comparer-regimes-epargne-fiscaux\/\", \"applicationCategory\": \"FinanceApplication\", \"operatingSystem\": \"Web\", \"browserRequirements\": \"JavaScript activ\u00e9\", \"offers\": {\"@type\": \"Offer\", \"price\": \"0\", \"priceCurrency\": \"CAD\"}, \"description\": \"Outil de d\u00e9cision : comparez REER, CELI, CELIAPP, REEE, RVER avec 3 sc\u00e9narios, frais r\u00e9els, phase d\u00e9caissement, profil de risque et 500 simulations Monte Carlo.\"}, {\"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Vaut-il mieux cotiser au REER ou au CELI en 2026 ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"REER avantageux si TMM actuel \u2265 30 % et sortie \u00e0 TMM plus bas. CELI avantageux si TMM \u2264 28 % ou TMM retraite risque d'\u00eatre plus haut. Combiner les deux est presque toujours optimal.\"}}, {\"@type\": \"Question\", \"name\": \"Pourquoi 3 sc\u00e9narios diff\u00e9rents ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Les march\u00e9s ne donnent pas un rendement constant. Les 3 sc\u00e9narios refl\u00e8tent la volatilit\u00e9 r\u00e9elle du profil de risque : pessimiste = rendement \u2212 0,7 \u00d7 \u00e9cart-type, optimiste = rendement + 0,7 \u00d7 \u00e9cart-type. La simulation Monte Carlo 500 it\u00e9rations donne la distribution compl\u00e8te.\"}}, {\"@type\": \"Question\", \"name\": \"Comment les frais de gestion impactent mon r\u00e9sultat ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"\u00c9norm\u00e9ment. Sur 30 ans avec 200 000 $, passer de 2 % \u00e0 0,5 % peut faire gagner plus de 200 000 $. Les frais sont d\u00e9duits chaque ann\u00e9e du rendement, donc l'effet compos\u00e9 est massif.\"}}, {\"@type\": \"Question\", \"name\": \"Diff\u00e9rence entre rendement nominal et r\u00e9el ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Nominal = rendement brut affich\u00e9. R\u00e9el = apr\u00e8s inflation. Pour planifier la retraite, regardez les $ d'aujourd'hui (r\u00e9els), pas les $ futurs (nominaux).\"}}, {\"@type\": \"Question\", \"name\": \"Que se passe-t-il si je d\u00e9passe les plafonds ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"P\u00e9nalit\u00e9 1 %\/mois sur l'exc\u00e9dent (CELI, CELIAPP, REER au-del\u00e0 de 2 000 $ marge). Soit 12 %\/an. V\u00e9rifiez vos droits sur Mon dossier ARC avant cotisation importante.\"}}, {\"@type\": \"Question\", \"name\": \"Quel est l'ordre optimal pour d\u00e9caisser ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Standard : bracket filling \u2014 retirer du REER pour remplir la tranche TMM 27 % chaque ann\u00e9e, puis CELI sans imp\u00f4t. Si TMM retraite tr\u00e8s bas, vider REER plus vite. Si h\u00e9ritage pr\u00e9vu, repousser REER au d\u00e9c\u00e8s.\"}}, {\"@type\": \"Question\", \"name\": \"Le CELIAPP est-il meilleur pour 1\u02b3\u1d49 propri\u00e9t\u00e9 ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Oui, seul r\u00e9gime combinant cotisation d\u00e9ductible (REER) et retraits non imposables (CELI). En couple : 16 000 $\/an combin\u00e9s, 80 000 $ vie. \u00c0 utiliser dans 15 ans, sinon transfert REER sans imposition.\"}}, {\"@type\": \"Question\", \"name\": \"Combien rapporte le REEE en subventions ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"30 % automatique sur 2 500 $\/an cotis\u00e9s : SCEE f\u00e9d\u00e9rale 20 % (500 $\/an, 7 200 $ vie) + IQEE Qu\u00e9bec 10 % (250 $\/an, 3 600 $ vie). Total possible : 10 800 $ par enfant.\"}}, {\"@type\": \"Question\", \"name\": \"Qui peut valider ma strat\u00e9gie ?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Planificateur financier (Pl. Fin.), conseiller en placement ou repr\u00e9sentant en \u00e9pargne collective inscrit \u00e0 l'AMF. V\u00e9rifiez l'inscription sur le registre AMF.\"}}]}, {\"@type\": \"HowTo\", \"name\": \"Comment choisir le bon r\u00e9gime d'\u00e9pargne fiscal en 5 \u00e9tapes\", \"step\": [{\"@type\": \"HowToStep\", \"position\": 1, \"name\": \"Choisir une situation pr\u00e9set\", \"text\": \"Cliquez le pr\u00e9set correspondant \u00e0 votre profil : acheteur 1\u02b3\u1d49 propri\u00e9t\u00e9, retraite 65 ans, travailleur autonome, retraite anticip\u00e9e, parent ou haut revenu.\"}, {\"@type\": \"HowToStep\", \"position\": 2, \"name\": \"Ajuster vos param\u00e8tres r\u00e9els\", \"text\": \"Modifiez revenu actuel, revenu retraite estim\u00e9, capacit\u00e9 d'\u00e9pargne, horizon, profil de risque, frais de gestion et inflation.\"}, {\"@type\": \"HowToStep\", \"position\": 3, \"name\": \"Lire les 3 sc\u00e9narios\", \"text\": \"Le graphique affiche pessimiste, r\u00e9aliste et optimiste. Si l'\u00e9cart est trop large pour votre tol\u00e9rance, ajustez votre profil de risque.\"}, {\"@type\": \"HowToStep\", \"position\": 4, \"name\": \"Tester une strat\u00e9gie combin\u00e9e\", \"text\": \"Comparer chaque r\u00e9gime, 50\/50, REER \u2192 CELI, ou optim auto. Choisissez celle qui correspond \u00e0 votre situation.\"}, {\"@type\": \"HowToStep\", \"position\": 5, \"name\": \"Valider avec un Pl. Fin. AMF\", \"text\": \"Le simulateur est un outil de d\u00e9cision, pas un conseil. Validez avec un professionnel inscrit \u00e0 l'AMF avant d'agir.\"}]}, {\"@type\": \"BreadcrumbList\", \"itemListElement\": [{\"@type\": \"ListItem\", \"position\": 1, \"name\": \"Accueil\", \"item\": \"https:\/\/www.assur360.ca\/\"}, {\"@type\": \"ListItem\", \"position\": 2, \"name\": \"Simulateurs\", \"item\": \"https:\/\/www.assur360.ca\/simulation\/\"}, {\"@type\": \"ListItem\", \"position\": 3, \"name\": \"Comparateur r\u00e9gimes d'\u00e9pargne fiscaux\", \"item\": \"https:\/\/www.assur360.ca\/simulation\/comparer-regimes-epargne-fiscaux\/\"}]}]}<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Decision tool: compare RRSP, TFSA, FSASA, RESP and VRSP with 3 scenarios, actual fees, withdrawal phase and risk profile. Monte Carlo 500 simulations. <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":58627,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Quebec Tax Savings Plan Comparator 2026 \u2014 RRSP, TFSA, FHSA, RESP, VRSP","_seopress_titles_desc":"Decision tool: compare RRSP, TFSA, FSASA, RESP and VRSP with 3 scenarios, actual fees, withdrawal phase and risk profile. Monte Carlo 500 simulations. ","_seopress_robots_index":"","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-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":"","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-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":"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":""},"mobile":{"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":""}},"yasr_overall_rating":0,"yasr_post_is_review":"","yasr_auto_insert_disabled":"","yasr_review_type":"","yasr_pro_reviews_in_comment_enabled":0,"footnotes":""},"class_list":["post-61104","page","type-page","status-publish","hentry"],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":0,"sum_votes":0},"_links":{"self":[{"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/pages\/61104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/comments?post=61104"}],"version-history":[{"count":7,"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/pages\/61104\/revisions"}],"predecessor-version":[{"id":61209,"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/pages\/61104\/revisions\/61209"}],"up":[{"embeddable":true,"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/pages\/58627"}],"wp:attachment":[{"href":"https:\/\/www.assur360.ca\/en\/wp-json\/wp\/v2\/media?parent=61104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}