{"id":3685,"date":"2026-08-22T18:51:26","date_gmt":"2026-08-22T18:51:26","guid":{"rendered":"https:\/\/maroczain.com\/?p=3685"},"modified":"2026-08-22T18:53:41","modified_gmt":"2026-08-22T18:53:41","slug":"3685","status":"publish","type":"post","link":"https:\/\/maroczain.com\/en\/2026\/08\/22\/3685\/","title":{"rendered":""},"content":{"rendered":"\n<style>\n.mzcs-wrap{max-width:1250px;margin:0 auto;padding:30px 16px;font-family:Inter,Segoe UI,Arial,sans-serif}\n.mzcs-shell{background:linear-gradient(135deg,#07111f,#0b2135 58%,#0d2930);color:#eef6ff;border:1px solid #20384f;border-radius:26px;padding:28px}\n.mzcs-title{font-size:clamp(30px,5vw,50px);margin:0;color:#fff}\n.mzcs-sub{color:#9fb3c8;line-height:1.6;max-width:850px}\n.mzcs-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:22px}\n.mzcs-field{background:#0d1b2a;border:1px solid #20384f;border-radius:16px;padding:14px}\n.mzcs-field label{display:block;font-size:13px;color:#9fb3c8;margin-bottom:7px}\n.mzcs-field input,.mzcs-field select{width:100%;padding:11px;border-radius:10px;border:1px solid #29445f;background:#0d1d2d;color:#fff}\n.mzcs-actions{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0}\n.mzcs-btn{padding:12px 16px;border-radius:12px;border:1px solid #31516f;background:#11283d;color:#fff;cursor:pointer;font-weight:700}\n.mzcs-primary{background:linear-gradient(135deg,#e9c84a,#c69a17);color:#07111f;border:none}\n.mzcs-results{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:18px}\n.mzcs-kpi{background:#0d1b2a;border:1px solid #20384f;border-radius:16px;padding:16px}\n.mzcs-kpi span{display:block;color:#9fb3c8;font-size:12px}\n.mzcs-kpi b{display:block;font-size:24px;color:#e9c84a;margin-top:5px}\n.mzcs-breakdown{margin-top:20px;background:#0d1b2a;border:1px solid #20384f;border-radius:16px;overflow:hidden}\n.mzcs-row{display:grid;grid-template-columns:1fr auto;gap:12px;padding:12px 16px;border-bottom:1px solid #20384f}\n.mzcs-row:last-child{border-bottom:none}\n.mzcs-note{margin-top:16px;color:#9fb3c8;font-size:12px;line-height:1.5}\n.mzcs-good{color:#70e3a2!important}.mzcs-bad{color:#ff8585!important}\n@media(max-width:900px){.mzcs-grid{grid-template-columns:1fr 1fr}.mzcs-results{grid-template-columns:1fr 1fr}}\n@media(max-width:620px){.mzcs-grid,.mzcs-results{grid-template-columns:1fr}.mzcs-shell{padding:18px}}\n<\/style>\n\n<div class=\"mzcs-wrap\">\n<section class=\"mzcs-shell\">\n  <h2 class=\"mzcs-title\">Simulateur de Vol Charter<\/h2>\n  <p class=\"mzcs-sub\">Estimez la rentabilit\u00e9 d\u2019un vol charter \u00e0 partir des co\u00fbts d\u2019affr\u00e8tement, des frais d\u2019escale, du remplissage et du prix moyen de vente.<\/p>\n\n  <div class=\"mzcs-grid\">\n    <div class=\"mzcs-field\"><label>Type d'appareil<\/label>\n      <select id=\"mzcs-aircraft\">\n        <option value=\"174\">Airbus A320 \u2014 174 si\u00e8ges<\/option>\n        <option value=\"186\">Airbus A320 \u2014 186 si\u00e8ges<\/option>\n        <option value=\"189\">Boeing 737-800 \u2014 189 si\u00e8ges<\/option>\n        <option value=\"230\">Airbus A321 \u2014 230 si\u00e8ges<\/option>\n        <option value=\"300\">Airbus A330 \u2014 300 si\u00e8ges<\/option>\n        <option value=\"360\">Boeing 787 \/ gros-porteur \u2014 360 si\u00e8ges<\/option>\n      <\/select>\n    <\/div>\n    <div class=\"mzcs-field\"><label>Nombre de si\u00e8ges<\/label><input id=\"mzcs-seats\" type=\"number\" value=\"174\" min=\"1\"><\/div>\n    <div class=\"mzcs-field\"><label>Nombre de rotations \/ vols<\/label><input id=\"mzcs-flights\" type=\"number\" value=\"1\" min=\"1\"><\/div>\n\n    <div class=\"mzcs-field\"><label>Co\u00fbt affr\u00e8tement \/ vol (MAD)<\/label><input id=\"mzcs-acmi\" type=\"number\" value=\"280000\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Taxes & redevances a\u00e9roport (MAD)<\/label><input id=\"mzcs-airport\" type=\"number\" value=\"45000\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Handling \/ assistance (MAD)<\/label><input id=\"mzcs-handling\" type=\"number\" value=\"18000\" min=\"0\"><\/div>\n\n    <div class=\"mzcs-field\"><label>Catering (MAD \/ passager)<\/label><input id=\"mzcs-catering\" type=\"number\" value=\"70\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Assurance \/ divers (MAD \/ vol)<\/label><input id=\"mzcs-other\" type=\"number\" value=\"12000\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Commission distribution (%)<\/label><input id=\"mzcs-commission\" type=\"number\" value=\"5\" min=\"0\" max=\"100\" step=\"0.1\"><\/div>\n\n    <div class=\"mzcs-field\"><label>Taux de remplissage (%)<\/label><input id=\"mzcs-load\" type=\"number\" value=\"85\" min=\"0\" max=\"100\" step=\"1\"><\/div>\n    <div class=\"mzcs-field\"><label>Prix moyen de vente \/ passager (MAD)<\/label><input id=\"mzcs-fare\" type=\"number\" value=\"2800\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Bagages \/ extras \/ pax (MAD)<\/label><input id=\"mzcs-extra\" type=\"number\" value=\"0\" min=\"0\"><\/div>\n  <\/div>\n\n  <div class=\"mzcs-actions\">\n    <button class=\"mzcs-btn mzcs-primary\" onclick=\"mzcsCalc()\">Calculer<\/button>\n    <button class=\"mzcs-btn\" onclick=\"mzcsReset()\">R\u00e9initialiser<\/button>\n  <\/div>\n\n  <div class=\"mzcs-results\">\n    <div class=\"mzcs-kpi\"><span>Passagers estim\u00e9s<\/span><b id=\"mzcs-pax\">0<\/b><\/div>\n    <div class=\"mzcs-kpi\"><span>Co\u00fbt total<\/span><b id=\"mzcs-cost\">0 MAD<\/b><\/div>\n    <div class=\"mzcs-kpi\"><span>Seuil de rentabilit\u00e9 \/ pax<\/span><b id=\"mzcs-bep\">0 MAD<\/b><\/div>\n    <div class=\"mzcs-kpi\"><span>Marge estim\u00e9e<\/span><b id=\"mzcs-profit\">0 MAD<\/b><\/div>\n  <\/div>\n\n  <div class=\"mzcs-breakdown\">\n    <div class=\"mzcs-row\"><span>Chiffre d'affaires brut<\/span><strong id=\"mzcs-revenue\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Commission distribution<\/span><strong id=\"mzcs-commcost\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Co\u00fbt catering<\/span><strong id=\"mzcs-catcost\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Co\u00fbt fixe total<\/span><strong id=\"mzcs-fixed\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Co\u00fbt par si\u00e8ge offert<\/span><strong id=\"mzcs-seatcost\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Marge par passager<\/span><strong id=\"mzcs-marginpax\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Taux de remplissage de rentabilit\u00e9<\/span><strong id=\"mzcs-breakload\">0 %<\/strong><\/div>\n  <\/div>\n\n  <div class=\"mzcs-note\">\n    Simulation indicative \u00e0 usage commercial et p\u00e9dagogique. Les co\u00fbts r\u00e9els d\u2019un charter d\u00e9pendent notamment du contrat ACMI\/charter, du carburant, du routing, des cr\u00e9neaux, des taxes, des redevances, de l\u2019assistance, des \u00e9quipages et des conditions du transporteur.\n  <\/div>\n<\/section>\n<\/div>\n\n<script>\n(function(){\n  const $=id=>document.getElementById(id);\n  const fmt=n=>new Intl.NumberFormat('fr-FR',{maximumFractionDigits:0}).format(isFinite(n)?n:0)+' MAD';\n\n  function syncSeats(){ $(\"mzcs-seats\").value=$(\"mzcs-aircraft\").value; }\n  $(\"mzcs-aircraft\").addEventListener(\"change\",syncSeats);\n\n  window.mzcsCalc=function(){\n    const seats=+$(\"mzcs-seats\").value||0;\n    const flights=+$(\"mzcs-flights\").value||1;\n    const acmi=+$(\"mzcs-acmi\").value||0;\n    const airport=+$(\"mzcs-airport\").value||0;\n    const handling=+$(\"mzcs-handling\").value||0;\n    const catering=+$(\"mzcs-catering\").value||0;\n    const other=+$(\"mzcs-other\").value||0;\n    const commission=(+$(\"mzcs-commission\").value||0)\/100;\n    const load=(+$(\"mzcs-load\").value||0)\/100;\n    const fare=+$(\"mzcs-fare\").value||0;\n    const extra=+$(\"mzcs-extra\").value||0;\n\n    const capacity=seats*flights;\n    const pax=Math.round(capacity*load);\n    const grossRevenue=pax*(fare+extra);\n    const commCost=grossRevenue*commission;\n    const catCost=pax*catering;\n    const fixed=(acmi+airport+handling+other)*flights;\n    const totalCost=fixed+catCost+commCost;\n    const profit=grossRevenue-totalCost;\n    const costPerSeat=capacity?totalCost\/capacity:0;\n    const bepPax=pax?totalCost\/pax:0;\n    const marginPax=pax?profit\/pax:0;\n\n    const netUnit=(fare+extra)*(1-commission)-catering;\n    const bepNeeded=netUnit>0?fixed\/netUnit:0;\n    const breakLoad=capacity?Math.min(999,(bepNeeded\/capacity)*100):0;\n\n    $(\"mzcs-pax\").textContent=new Intl.NumberFormat('fr-FR').format(pax);\n    $(\"mzcs-cost\").textContent=fmt(totalCost);\n    $(\"mzcs-bep\").textContent=fmt(bepPax);\n    $(\"mzcs-profit\").textContent=fmt(profit);\n    $(\"mzcs-profit\").className=profit>=0?\"mzcs-good\":\"mzcs-bad\";\n    $(\"mzcs-revenue\").textContent=fmt(grossRevenue);\n    $(\"mzcs-commcost\").textContent=fmt(commCost);\n    $(\"mzcs-catcost\").textContent=fmt(catCost);\n    $(\"mzcs-fixed\").textContent=fmt(fixed);\n    $(\"mzcs-seatcost\").textContent=fmt(costPerSeat);\n    $(\"mzcs-marginpax\").textContent=fmt(marginPax);\n    $(\"mzcs-breakload\").textContent=(isFinite(breakLoad)?breakLoad:0).toFixed(1)+\" %\";\n  };\n\n  window.mzcsReset=function(){\n    $(\"mzcs-aircraft\").value=\"174\";$(\"mzcs-seats\").value=\"174\";$(\"mzcs-flights\").value=\"1\";\n    $(\"mzcs-acmi\").value=\"280000\";$(\"mzcs-airport\").value=\"45000\";$(\"mzcs-handling\").value=\"18000\";\n    $(\"mzcs-catering\").value=\"70\";$(\"mzcs-other\").value=\"12000\";$(\"mzcs-commission\").value=\"5\";\n    $(\"mzcs-load\").value=\"85\";$(\"mzcs-fare\").value=\"2800\";$(\"mzcs-extra\").value=\"0\"; mzcsCalc();\n  };\n  mzcsCalc();\n})();\n<\/script>\n\n\n\n\n<style>\n.mzcs-wrap{max-width:1250px;margin:0 auto;padding:30px 16px;font-family:Inter,Segoe UI,Arial,sans-serif}\n.mzcs-shell{background:linear-gradient(135deg,#07111f,#0b2135 58%,#0d2930);color:#eef6ff;border:1px solid #20384f;border-radius:26px;padding:28px}\n.mzcs-title{font-size:clamp(30px,5vw,50px);margin:0;color:#fff}\n.mzcs-sub{color:#9fb3c8;line-height:1.6;max-width:850px}\n.mzcs-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:22px}\n.mzcs-field{background:#0d1b2a;border:1px solid #20384f;border-radius:16px;padding:14px}\n.mzcs-field label{display:block;font-size:13px;color:#9fb3c8;margin-bottom:7px}\n.mzcs-field input,.mzcs-field select{width:100%;padding:11px;border-radius:10px;border:1px solid #29445f;background:#0d1d2d;color:#fff}\n.mzcs-actions{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0}\n.mzcs-btn{padding:12px 16px;border-radius:12px;border:1px solid #31516f;background:#11283d;color:#fff;cursor:pointer;font-weight:700}\n.mzcs-primary{background:linear-gradient(135deg,#e9c84a,#c69a17);color:#07111f;border:none}\n.mzcs-results{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:18px}\n.mzcs-kpi{background:#0d1b2a;border:1px solid #20384f;border-radius:16px;padding:16px}\n.mzcs-kpi span{display:block;color:#9fb3c8;font-size:12px}\n.mzcs-kpi b{display:block;font-size:24px;color:#e9c84a;margin-top:5px}\n.mzcs-breakdown{margin-top:20px;background:#0d1b2a;border:1px solid #20384f;border-radius:16px;overflow:hidden}\n.mzcs-row{display:grid;grid-template-columns:1fr auto;gap:12px;padding:12px 16px;border-bottom:1px solid #20384f}\n.mzcs-row:last-child{border-bottom:none}\n.mzcs-note{margin-top:16px;color:#9fb3c8;font-size:12px;line-height:1.5}\n.mzcs-good{color:#70e3a2!important}.mzcs-bad{color:#ff8585!important}\n@media(max-width:900px){.mzcs-grid{grid-template-columns:1fr 1fr}.mzcs-results{grid-template-columns:1fr 1fr}}\n@media(max-width:620px){.mzcs-grid,.mzcs-results{grid-template-columns:1fr}.mzcs-shell{padding:18px}}\n<\/style>\n\n<div class=\"mzcs-wrap\">\n<section class=\"mzcs-shell\">\n  <h2 class=\"mzcs-title\">Simulateur de Vol Charter<\/h2>\n  <p class=\"mzcs-sub\">Estimez la rentabilit\u00e9 d\u2019un vol charter \u00e0 partir des co\u00fbts d\u2019affr\u00e8tement, des frais d\u2019escale, du remplissage et du prix moyen de vente.<\/p>\n\n  <div class=\"mzcs-grid\">\n    <div class=\"mzcs-field\"><label>Type d'appareil<\/label>\n      <select id=\"mzcs-aircraft\">\n        <option value=\"174\">Airbus A320 \u2014 174 si\u00e8ges<\/option>\n        <option value=\"186\">Airbus A320 \u2014 186 si\u00e8ges<\/option>\n        <option value=\"189\">Boeing 737-800 \u2014 189 si\u00e8ges<\/option>\n        <option value=\"230\">Airbus A321 \u2014 230 si\u00e8ges<\/option>\n        <option value=\"300\">Airbus A330 \u2014 300 si\u00e8ges<\/option>\n        <option value=\"360\">Boeing 787 \/ gros-porteur \u2014 360 si\u00e8ges<\/option>\n      <\/select>\n    <\/div>\n    <div class=\"mzcs-field\"><label>Nombre de si\u00e8ges<\/label><input id=\"mzcs-seats\" type=\"number\" value=\"174\" min=\"1\"><\/div>\n    <div class=\"mzcs-field\"><label>Nombre de rotations \/ vols<\/label><input id=\"mzcs-flights\" type=\"number\" value=\"1\" min=\"1\"><\/div>\n\n    <div class=\"mzcs-field\"><label>Co\u00fbt affr\u00e8tement \/ vol (MAD)<\/label><input id=\"mzcs-acmi\" type=\"number\" value=\"280000\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Taxes & redevances a\u00e9roport (MAD)<\/label><input id=\"mzcs-airport\" type=\"number\" value=\"45000\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Handling \/ assistance (MAD)<\/label><input id=\"mzcs-handling\" type=\"number\" value=\"18000\" min=\"0\"><\/div>\n\n    <div class=\"mzcs-field\"><label>Catering (MAD \/ passager)<\/label><input id=\"mzcs-catering\" type=\"number\" value=\"70\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Assurance \/ divers (MAD \/ vol)<\/label><input id=\"mzcs-other\" type=\"number\" value=\"12000\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Commission distribution (%)<\/label><input id=\"mzcs-commission\" type=\"number\" value=\"5\" min=\"0\" max=\"100\" step=\"0.1\"><\/div>\n\n    <div class=\"mzcs-field\"><label>Taux de remplissage (%)<\/label><input id=\"mzcs-load\" type=\"number\" value=\"85\" min=\"0\" max=\"100\" step=\"1\"><\/div>\n    <div class=\"mzcs-field\"><label>Prix moyen de vente \/ passager (MAD)<\/label><input id=\"mzcs-fare\" type=\"number\" value=\"2800\" min=\"0\"><\/div>\n    <div class=\"mzcs-field\"><label>Bagages \/ extras \/ pax (MAD)<\/label><input id=\"mzcs-extra\" type=\"number\" value=\"0\" min=\"0\"><\/div>\n  <\/div>\n\n  <div class=\"mzcs-actions\">\n    <button class=\"mzcs-btn mzcs-primary\" onclick=\"mzcsCalc()\">Calculer<\/button>\n    <button class=\"mzcs-btn\" onclick=\"mzcsReset()\">R\u00e9initialiser<\/button>\n  <\/div>\n\n  <div class=\"mzcs-results\">\n    <div class=\"mzcs-kpi\"><span>Passagers estim\u00e9s<\/span><b id=\"mzcs-pax\">0<\/b><\/div>\n    <div class=\"mzcs-kpi\"><span>Co\u00fbt total<\/span><b id=\"mzcs-cost\">0 MAD<\/b><\/div>\n    <div class=\"mzcs-kpi\"><span>Seuil de rentabilit\u00e9 \/ pax<\/span><b id=\"mzcs-bep\">0 MAD<\/b><\/div>\n    <div class=\"mzcs-kpi\"><span>Marge estim\u00e9e<\/span><b id=\"mzcs-profit\">0 MAD<\/b><\/div>\n  <\/div>\n\n  <div class=\"mzcs-breakdown\">\n    <div class=\"mzcs-row\"><span>Chiffre d'affaires brut<\/span><strong id=\"mzcs-revenue\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Commission distribution<\/span><strong id=\"mzcs-commcost\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Co\u00fbt catering<\/span><strong id=\"mzcs-catcost\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Co\u00fbt fixe total<\/span><strong id=\"mzcs-fixed\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Co\u00fbt par si\u00e8ge offert<\/span><strong id=\"mzcs-seatcost\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Marge par passager<\/span><strong id=\"mzcs-marginpax\">0 MAD<\/strong><\/div>\n    <div class=\"mzcs-row\"><span>Taux de remplissage de rentabilit\u00e9<\/span><strong id=\"mzcs-breakload\">0 %<\/strong><\/div>\n  <\/div>\n\n  <div class=\"mzcs-note\">\n    Simulation indicative \u00e0 usage commercial et p\u00e9dagogique. Les co\u00fbts r\u00e9els d\u2019un charter d\u00e9pendent notamment du contrat ACMI\/charter, du carburant, du routing, des cr\u00e9neaux, des taxes, des redevances, de l\u2019assistance, des \u00e9quipages et des conditions du transporteur.\n  <\/div>\n<\/section>\n<\/div>\n\n<script>\n(function(){\n  const $=id=>document.getElementById(id);\n  const fmt=n=>new Intl.NumberFormat('fr-FR',{maximumFractionDigits:0}).format(isFinite(n)?n:0)+' MAD';\n\n  function syncSeats(){ $(\"mzcs-seats\").value=$(\"mzcs-aircraft\").value; }\n  $(\"mzcs-aircraft\").addEventListener(\"change\",syncSeats);\n\n  window.mzcsCalc=function(){\n    const seats=+$(\"mzcs-seats\").value||0;\n    const flights=+$(\"mzcs-flights\").value||1;\n    const acmi=+$(\"mzcs-acmi\").value||0;\n    const airport=+$(\"mzcs-airport\").value||0;\n    const handling=+$(\"mzcs-handling\").value||0;\n    const catering=+$(\"mzcs-catering\").value||0;\n    const other=+$(\"mzcs-other\").value||0;\n    const commission=(+$(\"mzcs-commission\").value||0)\/100;\n    const load=(+$(\"mzcs-load\").value||0)\/100;\n    const fare=+$(\"mzcs-fare\").value||0;\n    const extra=+$(\"mzcs-extra\").value||0;\n\n    const capacity=seats*flights;\n    const pax=Math.round(capacity*load);\n    const grossRevenue=pax*(fare+extra);\n    const commCost=grossRevenue*commission;\n    const catCost=pax*catering;\n    const fixed=(acmi+airport+handling+other)*flights;\n    const totalCost=fixed+catCost+commCost;\n    const profit=grossRevenue-totalCost;\n    const costPerSeat=capacity?totalCost\/capacity:0;\n    const bepPax=pax?totalCost\/pax:0;\n    const marginPax=pax?profit\/pax:0;\n\n    const netUnit=(fare+extra)*(1-commission)-catering;\n    const bepNeeded=netUnit>0?fixed\/netUnit:0;\n    const breakLoad=capacity?Math.min(999,(bepNeeded\/capacity)*100):0;\n\n    $(\"mzcs-pax\").textContent=new Intl.NumberFormat('fr-FR').format(pax);\n    $(\"mzcs-cost\").textContent=fmt(totalCost);\n    $(\"mzcs-bep\").textContent=fmt(bepPax);\n    $(\"mzcs-profit\").textContent=fmt(profit);\n    $(\"mzcs-profit\").className=profit>=0?\"mzcs-good\":\"mzcs-bad\";\n    $(\"mzcs-revenue\").textContent=fmt(grossRevenue);\n    $(\"mzcs-commcost\").textContent=fmt(commCost);\n    $(\"mzcs-catcost\").textContent=fmt(catCost);\n    $(\"mzcs-fixed\").textContent=fmt(fixed);\n    $(\"mzcs-seatcost\").textContent=fmt(costPerSeat);\n    $(\"mzcs-marginpax\").textContent=fmt(marginPax);\n    $(\"mzcs-breakload\").textContent=(isFinite(breakLoad)?breakLoad:0).toFixed(1)+\" %\";\n  };\n\n  window.mzcsReset=function(){\n    $(\"mzcs-aircraft\").value=\"174\";$(\"mzcs-seats\").value=\"174\";$(\"mzcs-flights\").value=\"1\";\n    $(\"mzcs-acmi\").value=\"280000\";$(\"mzcs-airport\").value=\"45000\";$(\"mzcs-handling\").value=\"18000\";\n    $(\"mzcs-catering\").value=\"70\";$(\"mzcs-other\").value=\"12000\";$(\"mzcs-commission\").value=\"5\";\n    $(\"mzcs-load\").value=\"85\";$(\"mzcs-fare\").value=\"2800\";$(\"mzcs-extra\").value=\"0\"; mzcsCalc();\n  };\n  mzcsCalc();\n})();\n<\/script>\n\n\n\n\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Charter Engine \u2014 Maroc Zain<\/title>\n<style>\n:root{\n  --bg:#06101b;--panel:#0d1b2a;--panel2:#11283d;--text:#eef6ff;--muted:#9fb3c8;\n  --gold:#e9c84a;--cyan:#29c6d1;--line:#20384f;--good:#70e3a2;--bad:#ff8585;--warn:#ffd166;\n}\n*{box-sizing:border-box}\nbody{margin:0;font-family:Inter,Segoe UI,Arial,sans-serif;background:linear-gradient(135deg,#06101b,#0a1f33 58%,#0d2930);color:var(--text)}\n.wrap{max-width:1480px;margin:auto;padding:24px}\n.hero{background:linear-gradient(135deg,rgba(41,198,209,.13),rgba(233,200,74,.08));border:1px solid var(--line);border-radius:26px;padding:30px}\nh1{margin:0;font-size:clamp(34px,5vw,58px)}\n.sub{color:var(--muted);max-width:950px;line-height:1.6;margin-top:8px}\n.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}\n.tab{padding:10px 14px;border-radius:999px;border:1px solid #31516f;background:#10283d;color:white;cursor:pointer}\n.tab.active{background:var(--gold);color:#07111f;border-color:transparent}\n.section{margin-top:18px;background:rgba(8,20,34,.94);border:1px solid var(--line);border-radius:22px;padding:20px}\n.section h2{margin:0 0 14px;font-size:22px}\n.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}\n.field{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px}\n.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}\ninput,select,button{width:100%;padding:11px;border-radius:10px;border:1px solid #29445f;background:#0d1d2d;color:white}\nbutton{cursor:pointer;font-weight:700}\n.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}\n.actions button{width:auto}\n.primary{background:linear-gradient(135deg,var(--gold),#c69a17);color:#07111f;border:none}\n.secondary{background:#11283d}\n.kpis{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;margin-top:18px}\n.kpi{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px}\n.kpi span{display:block;color:var(--muted);font-size:12px}\n.kpi b{display:block;margin-top:5px;font-size:22px;color:var(--gold)}\n.good{color:var(--good)!important}.bad{color:var(--bad)!important}.warn{color:var(--warn)!important}\n.table{margin-top:16px;border:1px solid var(--line);border-radius:16px;overflow:hidden}\n.row{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:10px;padding:11px 14px;border-bottom:1px solid var(--line)}\n.row:last-child{border-bottom:none}\n.row.head{background:#10283d;font-weight:800}\n.decision{margin-top:18px;padding:18px;border-radius:18px;text-align:center;font-size:28px;font-weight:900;border:1px solid var(--line)}\n.decision.go{background:rgba(112,227,162,.1);color:var(--good)}\n.decision.nogo{background:rgba(255,133,133,.1);color:var(--bad)}\n.decision.watch{background:rgba(255,209,102,.1);color:var(--warn)}\n.scenario-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}\n.scenario{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px}\n.note{color:var(--muted);font-size:12px;line-height:1.5;margin-top:14px}\n@media(max-width:1100px){.grid{grid-template-columns:1fr 1fr}.kpis{grid-template-columns:1fr 1fr 1fr}}\n@media(max-width:700px){.grid,.scenario-grid{grid-template-columns:1fr}.kpis{grid-template-columns:1fr 1fr}.wrap{padding:12px}.hero,.section{padding:16px}}\n<\/style>\n<\/head>\n<body>\n<div class=\"wrap\">\n  <section class=\"hero\">\n    <h1>Charter Engine<\/h1>\n    <p class=\"sub\">Moteur d&rsquo;aide \u00e0 la d\u00e9cision pour vols charter : co\u00fbts, tarification, remplissage, marge, seuil de rentabilit\u00e9 et sc\u00e9narios commerciaux.<\/p>\n    <div class=\"tabs\">\n      <button class=\"tab active\">\u00c9conomie<\/button>\n      <button class=\"tab\">Sc\u00e9narios<\/button>\n      <button class=\"tab\">D\u00e9cision<\/button>\n    <\/div>\n  <\/section>\n\n  <section class=\"section\">\n    <h2>1. Param\u00e8tres du vol<\/h2>\n    <div class=\"grid\">\n      <div class=\"field\"><label>Origine<\/label><input id=\"origin\" value=\"Casablanca\"><\/div>\n      <div class=\"field\"><label>Destination<\/label><input id=\"destination\" value=\"Paris\"><\/div>\n      <div class=\"field\"><label>Type de rotation<\/label>\n        <select id=\"triptype\">\n          <option value=\"1\">Aller simple<\/option>\n          <option value=\"2\" selected>Aller-retour<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"field\"><label>Nombre de rotations<\/label><input id=\"rotations\" type=\"number\" value=\"1\" min=\"1\"><\/div>\n\n      <div class=\"field\"><label>Appareil<\/label>\n        <select id=\"aircraft\">\n          <option value=\"174\">A320 \u2014 174 si\u00e8ges<\/option>\n          <option value=\"186\">A320 \u2014 186 si\u00e8ges<\/option>\n          <option value=\"189\">B737-800 \u2014 189 si\u00e8ges<\/option>\n          <option value=\"230\">A321 \u2014 230 si\u00e8ges<\/option>\n          <option value=\"300\">A330 \u2014 300 si\u00e8ges<\/option>\n          <option value=\"360\">B787 \u2014 360 si\u00e8ges<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"field\"><label>Si\u00e8ges commercialisables<\/label><input id=\"seats\" type=\"number\" value=\"174\"><\/div>\n      <div class=\"field\"><label>Bloc si\u00e8ges r\u00e9serv\u00e9s \/ gratuits<\/label><input id=\"blocked\" type=\"number\" value=\"4\"><\/div>\n      <div class=\"field\"><label>Taux de remplissage pr\u00e9vu (%)<\/label><input id=\"load\" type=\"number\" value=\"85\"><\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"section\">\n    <h2>2. Co\u00fbts op\u00e9rationnels<\/h2>\n    <div class=\"grid\">\n      <div class=\"field\"><label>Affr\u00e8tement \/ secteur (MAD)<\/label><input id=\"charter\" type=\"number\" value=\"280000\"><\/div>\n      <div class=\"field\"><label>Taxes a\u00e9roport \/ secteur<\/label><input id=\"airport\" type=\"number\" value=\"45000\"><\/div>\n      <div class=\"field\"><label>Handling \/ secteur<\/label><input id=\"handling\" type=\"number\" value=\"18000\"><\/div>\n      <div class=\"field\"><label>Assurance \/ divers \/ secteur<\/label><input id=\"other\" type=\"number\" value=\"12000\"><\/div>\n\n      <div class=\"field\"><label>Catering \/ passager<\/label><input id=\"catering\" type=\"number\" value=\"70\"><\/div>\n      <div class=\"field\"><label>Taxes variables \/ passager<\/label><input id=\"paxTax\" type=\"number\" value=\"120\"><\/div>\n      <div class=\"field\"><label>Commission distribution (%)<\/label><input id=\"commission\" type=\"number\" value=\"5\"><\/div>\n      <div class=\"field\"><label>Frais commercialisation fixes (MAD)<\/label><input id=\"marketing\" type=\"number\" value=\"25000\"><\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"section\">\n    <h2>3. Tarification commerciale<\/h2>\n    <div class=\"grid\">\n      <div class=\"field\"><label>Prix moyen aller simple \/ pax<\/label><input id=\"fare\" type=\"number\" value=\"2800\"><\/div>\n      <div class=\"field\"><label>Extras \/ bagages \/ pax<\/label><input id=\"extras\" type=\"number\" value=\"150\"><\/div>\n      <div class=\"field\"><label>Part si\u00e8ges vendus via agences (%)<\/label><input id=\"agencyShare\" type=\"number\" value=\"70\"><\/div>\n      <div class=\"field\"><label>Objectif marge minimale (%)<\/label><input id=\"targetMargin\" type=\"number\" value=\"10\"><\/div>\n    <\/div>\n\n    <div class=\"actions\">\n      <button class=\"primary\" onclick=\"calc()\">Calculer le charter<\/button>\n      <button class=\"secondary\" onclick=\"saveScenario()\">M\u00e9moriser sc\u00e9nario<\/button>\n      <button class=\"secondary\" onclick=\"exportScenario()\">Exporter CSV<\/button>\n      <button class=\"secondary\" onclick=\"resetAll()\">R\u00e9initialiser<\/button>\n    <\/div>\n  <\/section>\n\n  <section class=\"section\">\n    <h2>4. R\u00e9sultats<\/h2>\n    <div class=\"kpis\">\n      <div class=\"kpi\"><span>Capacit\u00e9 vendable<\/span><b id=\"capacity\">0<\/b><\/div>\n      <div class=\"kpi\"><span>Passagers pr\u00e9vus<\/span><b id=\"pax\">0<\/b><\/div>\n      <div class=\"kpi\"><span>CA brut<\/span><b id=\"revenue\">0 MAD<\/b><\/div>\n      <div class=\"kpi\"><span>Co\u00fbt total<\/span><b id=\"cost\">0 MAD<\/b><\/div>\n      <div class=\"kpi\"><span>Marge<\/span><b id=\"profit\">0 MAD<\/b><\/div>\n      <div class=\"kpi\"><span>Marge %<\/span><b id=\"margin\">0 %<\/b><\/div>\n    <\/div>\n\n    <div class=\"table\">\n      <div class=\"row head\"><div>Indicateur<\/div><div>Valeur<\/div><div>Lecture<\/div><\/div>\n      <div class=\"row\"><div>Co\u00fbt par si\u00e8ge offert<\/div><div id=\"seatCost\">0 MAD<\/div><div>Capacit\u00e9 totale<\/div><\/div>\n      <div class=\"row\"><div>Co\u00fbt moyen par passager<\/div><div id=\"paxCost\">0 MAD<\/div><div>Au remplissage pr\u00e9vu<\/div><\/div>\n      <div class=\"row\"><div>Prix minimum rentable<\/div><div id=\"minFare\">0 MAD<\/div><div>Seuil prix<\/div><\/div>\n      <div class=\"row\"><div>Remplissage break-even<\/div><div id=\"breakLoad\">0 %<\/div><div>Seuil remplissage<\/div><\/div>\n      <div class=\"row\"><div>Passagers break-even<\/div><div id=\"breakPax\">0<\/div><div>Seuil volume<\/div><\/div>\n    <\/div>\n\n    <div id=\"decision\" class=\"decision watch\">\u00c0 \u00c9VALUER<\/div>\n  <\/section>\n\n  <section class=\"section\">\n    <h2>5. Comparaison de sc\u00e9narios<\/h2>\n    <div id=\"scenarios\" class=\"scenario-grid\">\n      <div class=\"scenario\">Aucun sc\u00e9nario m\u00e9moris\u00e9.<\/div>\n    <\/div>\n  <\/section>\n\n  <div class=\"note\">\n    Outil de simulation commerciale et p\u00e9dagogique. Il ne remplace pas un devis compagnie, une \u00e9tude op\u00e9rationnelle, un contrat charter\/ACMI ni la validation r\u00e9glementaire du vol.\n  <\/div>\n<\/div>\n\n<script>\nconst $=id=>document.getElementById(id);\nconst fmt=n=>new Intl.NumberFormat('fr-FR',{maximumFractionDigits:0}).format(isFinite(n)?n:0)+' MAD';\nlet scenarios=[];\n\n$(\"aircraft\").addEventListener(\"change\",()=>{$(\"seats\").value=$(\"aircraft\").value;calc();});\n[\"triptype\",\"rotations\",\"seats\",\"blocked\",\"load\",\"charter\",\"airport\",\"handling\",\"other\",\"catering\",\"paxTax\",\"commission\",\"marketing\",\"fare\",\"extras\",\"agencyShare\",\"targetMargin\"].forEach(id=>{\n  $(id).addEventListener(\"input\",calc);\n  $(id).addEventListener(\"change\",calc);\n});\n\nfunction values(){\n  return {\n    origin:$(\"origin\").value,\n    destination:$(\"destination\").value,\n    sectors:(+$(\"triptype\").value||1)*(+$(\"rotations\").value||1),\n    rotations:+$(\"rotations\").value||1,\n    seats:+$(\"seats\").value||0,\n    blocked:+$(\"blocked\").value||0,\n    load:(+$(\"load\").value||0)\/100,\n    charter:+$(\"charter\").value||0,\n    airport:+$(\"airport\").value||0,\n    handling:+$(\"handling\").value||0,\n    other:+$(\"other\").value||0,\n    catering:+$(\"catering\").value||0,\n    paxTax:+$(\"paxTax\").value||0,\n    commission:(+$(\"commission\").value||0)\/100,\n    marketing:+$(\"marketing\").value||0,\n    fare:+$(\"fare\").value||0,\n    extras:+$(\"extras\").value||0,\n    target:(+$(\"targetMargin\").value||0)\/100\n  }\n}\n\nfunction calc(){\n  const v=values();\n  const sellablePerSector=Math.max(0,v.seats-v.blocked);\n  const capacity=sellablePerSector*v.sectors;\n  const pax=Math.round(capacity*v.load);\n  const gross=pax*(v.fare+v.extras);\n\n  const fixed=(v.charter+v.airport+v.handling+v.other)*v.sectors+v.marketing;\n  const variable=pax*(v.catering+v.paxTax);\n  const commission=gross*v.commission;\n  const total=fixed+variable+commission;\n  const profit=gross-total;\n  const margin=gross?profit\/gross:0;\n\n  const seatCost=capacity?total\/capacity:0;\n  const paxCost=pax?total\/pax:0;\n  const netUnit=(v.fare+v.extras)*(1-v.commission)-(v.catering+v.paxTax);\n  const breakPax=netUnit>0?Math.ceil(fixed\/netUnit):0;\n  const breakLoad=capacity?breakPax\/capacity:0;\n\n  const denom=(1-v.commission);\n  const minFare=pax && denom>0 ? ((fixed\/pax)+(v.catering+v.paxTax))\/denom - v.extras : 0;\n\n  $(\"capacity\").textContent=new Intl.NumberFormat('fr-FR').format(capacity);\n  $(\"pax\").textContent=new Intl.NumberFormat('fr-FR').format(pax);\n  $(\"revenue\").textContent=fmt(gross);\n  $(\"cost\").textContent=fmt(total);\n  $(\"profit\").textContent=fmt(profit);\n  $(\"margin\").textContent=(margin*100).toFixed(1)+\" %\";\n  $(\"seatCost\").textContent=fmt(seatCost);\n  $(\"paxCost\").textContent=fmt(paxCost);\n  $(\"minFare\").textContent=fmt(minFare);\n  $(\"breakLoad\").textContent=(breakLoad*100).toFixed(1)+\" %\";\n  $(\"breakPax\").textContent=new Intl.NumberFormat('fr-FR').format(breakPax);\n\n  $(\"profit\").className=profit>=0?\"good\":\"bad\";\n  $(\"margin\").className=margin>=v.target?\"good\":margin>=0?\"warn\":\"bad\";\n\n  const d=$(\"decision\");\n  if(profit>0 && margin>=v.target && breakLoad<0.85){\n    d.textContent=\"GO \u2014 CHARTER RENTABLE\";\n    d.className=\"decision go\";\n  } else if(profit>=0 && breakLoad<=1){\n    d.textContent=\"\u00c0 OPTIMISER \u2014 RENTABLE MAIS FRAGILE\";\n    d.className=\"decision watch\";\n  } else {\n    d.textContent=\"NO GO \u2014 SC\u00c9NARIO NON RENTABLE\";\n    d.className=\"decision nogo\";\n  }\n\n  return {v,capacity,pax,gross,total,profit,margin,seatCost,paxCost,minFare,breakLoad,breakPax};\n}\n\nfunction saveScenario(){\n  const r=calc();\n  scenarios.push({\n    route:r.v.origin+\" \u2192 \"+r.v.destination,\n    pax:r.pax,\n    load:(r.v.load*100).toFixed(0)+\"%\",\n    fare:r.v.fare,\n    profit:r.profit,\n    margin:(r.margin*100).toFixed(1)+\"%\"\n  });\n  renderScenarios();\n}\n\nfunction renderScenarios(){\n  $(\"scenarios\").innerHTML=scenarios.map((s,i)=>`\n    <div class=\"scenario\">\n      <strong>Sc\u00e9nario ${i+1}<\/strong>\n      <div class=\"note\">${s.route}<\/div>\n      <div>Passagers : <b>${s.pax}<\/b><\/div>\n      <div>Remplissage : <b>${s.load}<\/b><\/div>\n      <div>Prix moyen : <b>${fmt(s.fare)}<\/b><\/div>\n      <div>Marge : <b class=\"${s.profit>=0?'good':'bad'}\">${fmt(s.profit)}<\/b><\/div>\n      <div>Marge % : <b>${s.margin}<\/b><\/div>\n    <\/div>\n  `).join(\"\") || '<div class=\"scenario\">Aucun sc\u00e9nario m\u00e9moris\u00e9.<\/div>';\n}\n\nfunction exportScenario(){\n  const r=calc();\n  const rows=[\n    [\"Origine\",r.v.origin],\n    [\"Destination\",r.v.destination],\n    [\"Secteurs\",r.v.sectors],\n    [\"Capacit\u00e9\",r.capacity],\n    [\"Passagers\",r.pax],\n    [\"CA brut\",r.gross],\n    [\"Co\u00fbt total\",r.total],\n    [\"Marge\",r.profit],\n    [\"Marge %\",(r.margin*100).toFixed(1)],\n    [\"Break-even pax\",r.breakPax],\n    [\"Break-even load %\",(r.breakLoad*100).toFixed(1)]\n  ];\n  const csv=rows.map(r=>r.map(v=>`\"${String(v).replace(\/\"\/g,'\"\"')}\"`).join(\",\")).join(\"\\n\");\n  const blob=new Blob([\"\\ufeff\"+csv],{type:\"text\/csv;charset=utf-8\"});\n  const a=document.createElement(\"a\");\n  a.href=URL.createObjectURL(blob);\n  a.download=\"charter-engine-scenario.csv\";\n  a.click();\n  URL.revokeObjectURL(a.href);\n}\n\nfunction resetAll(){\n  $(\"origin\").value=\"Casablanca\";$(\"destination\").value=\"Paris\";$(\"triptype\").value=\"2\";$(\"rotations\").value=\"1\";\n  $(\"aircraft\").value=\"174\";$(\"seats\").value=\"174\";$(\"blocked\").value=\"4\";$(\"load\").value=\"85\";\n  $(\"charter\").value=\"280000\";$(\"airport\").value=\"45000\";$(\"handling\").value=\"18000\";$(\"other\").value=\"12000\";\n  $(\"catering\").value=\"70\";$(\"paxTax\").value=\"120\";$(\"commission\").value=\"5\";$(\"marketing\").value=\"25000\";\n  $(\"fare\").value=\"2800\";$(\"extras\").value=\"150\";$(\"agencyShare\").value=\"70\";$(\"targetMargin\").value=\"10\";\n  scenarios=[];renderScenarios();calc();\n}\n\ncalc();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Charter Engine \u2014 Maroc Zain Charter Engine Moteur d&rsquo;aide \u00e0 la d\u00e9cision pour vols charter : co\u00fbts, tarification, remplissage, marge, seuil de rentabilit\u00e9 et sc\u00e9narios commerciaux. \u00c9conomie Sc\u00e9narios D\u00e9cision 1. Param\u00e8tres du vol Origine Destination Type de rotation Aller simpleAller-retour Nombre de rotations Appareil A320 \u2014 174 si\u00e8gesA320 \u2014 186 si\u00e8gesB737-800 \u2014 189 si\u00e8gesA321 \u2014 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-3685","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/3685","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/comments?post=3685"}],"version-history":[{"count":3,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/3685\/revisions"}],"predecessor-version":[{"id":3688,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/3685\/revisions\/3688"}],"wp:attachment":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/media?parent=3685"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/categories?post=3685"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/tags?post=3685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}