{"id":2996,"date":"2026-08-21T16:27:22","date_gmt":"2026-08-21T16:27:22","guid":{"rendered":"https:\/\/maroczain.com\/?p=2996"},"modified":"2026-08-21T16:27:22","modified_gmt":"2026-08-21T16:27:22","slug":"2996","status":"publish","type":"post","link":"https:\/\/maroczain.com\/en\/2026\/08\/21\/2996\/","title":{"rendered":""},"content":{"rendered":"\n<!-- ==========================================================\n MAROC ZAIN ACADEMY\n SERIOUS GAME \u2014 JOURN\u00c9E COMPL\u00c8TE CHEF D'ESCALE\n========================================================== -->\n\n<section id=\"mza-serious-game\" class=\"sg-section\">\n\n  <div class=\"container\">\n\n    <div class=\"section-title\">\n      <div class=\"label\">16 \u2022 Serious Game<\/div>\n      <h2>Une journ\u00e9e compl\u00e8te de Chef d&rsquo;escale<\/h2>\n      <p>\n        De 05:30 \u00e0 23:30, g\u00e9rez les vols, les \u00e9quipes,\n        les passagers et les incidents comme dans une v\u00e9ritable escale.\n      <\/p>\n    <\/div>\n\n    <!-- INTRO -->\n\n    <div id=\"sgIntro\" class=\"sg-intro\">\n\n      <div class=\"sg-hero\">\n\n        <div>\n          <span class=\"exam-tag\">MAROC ZAIN ACADEMY<\/span>\n\n          <h3>Airport Duty Manager Challenge<\/h3>\n\n          <p>\n            Une simulation longue dur\u00e9e o\u00f9 chaque d\u00e9cision influence\n            les op\u00e9rations suivantes.\n          <\/p>\n        <\/div>\n\n        <div class=\"sg-plane\">\u2708<\/div>\n\n      <\/div>\n\n      <div class=\"sg-rules\">\n\n        <div>\n          <strong>18 h<\/strong>\n          <span>de journ\u00e9e virtuelle<\/span>\n        <\/div>\n\n        <div>\n          <strong>24<\/strong>\n          <span>vols suivis<\/span>\n        <\/div>\n\n        <div>\n          <strong>20+<\/strong>\n          <span>incidents possibles<\/span>\n        <\/div>\n\n        <div>\n          <strong>6<\/strong>\n          <span>comp\u00e9tences \u00e9valu\u00e9es<\/span>\n        <\/div>\n\n      <\/div>\n\n      <div class=\"sg-start-box\">\n\n        <input\n          id=\"sgCandidate\"\n          type=\"text\"\n          placeholder=\"Nom du stagiaire\"\n        >\n\n        <select id=\"sgDifficulty\">\n          <option value=\"normal\">Niveau Normal<\/option>\n          <option value=\"expert\">Niveau Expert<\/option>\n          <option value=\"crisis\">Niveau Crise<\/option>\n        <\/select>\n\n        <button\n          class=\"btn btn-gold\"\n          onclick=\"startSeriousGame()\"\n        >\n          D\u00e9marrer la journ\u00e9e\n        <\/button>\n\n      <\/div>\n\n    <\/div>\n\n\n    <!-- INTERFACE -->\n\n    <div id=\"sgInterface\" class=\"sg-interface hidden\">\n\n      <!-- HEADER -->\n\n      <div class=\"sg-topbar\">\n\n        <div>\n          <small>HEURE OP\u00c9RATIONNELLE<\/small>\n          <strong id=\"sgClock\">05:30<\/strong>\n        <\/div>\n\n        <div>\n          <small>P\u00c9RIODE<\/small>\n          <strong id=\"sgPeriod\">Prise de service<\/strong>\n        <\/div>\n\n        <div>\n          <small>VOL ACTIF<\/small>\n          <strong id=\"sgActiveFlights\">0<\/strong>\n        <\/div>\n\n        <div>\n          <small>ALERTES<\/small>\n          <strong id=\"sgAlertsCount\">0<\/strong>\n        <\/div>\n\n      <\/div>\n\n\n      <!-- KPI -->\n\n      <div class=\"sg-kpis\">\n\n        <div class=\"sg-kpi\">\n          <span>\ud83d\udee1\ufe0f<\/span>\n          <small>S\u00e9curit\u00e9<\/small>\n          <strong id=\"sgSafety\">100<\/strong>\n        <\/div>\n\n        <div class=\"sg-kpi\">\n          <span>\u23f1\ufe0f<\/span>\n          <small>Ponctualit\u00e9<\/small>\n          <strong id=\"sgPunctuality\">100<\/strong>\n        <\/div>\n\n        <div class=\"sg-kpi\">\n          <span>\ud83e\udd1d<\/span>\n          <small>Coordination<\/small>\n          <strong id=\"sgCoordination\">100<\/strong>\n        <\/div>\n\n        <div class=\"sg-kpi\">\n          <span>\ud83d\ude42<\/span>\n          <small>Client<\/small>\n          <strong id=\"sgCustomer\">100<\/strong>\n        <\/div>\n\n        <div class=\"sg-kpi\">\n          <span>\ud83c\udfaf<\/span>\n          <small>Leadership<\/small>\n          <strong id=\"sgLeadership\">100<\/strong>\n        <\/div>\n\n        <div class=\"sg-kpi\">\n          <span>\u26a1<\/span>\n          <small>\u00c9nergie<\/small>\n          <strong id=\"sgEnergy\">100<\/strong>\n        <\/div>\n\n      <\/div>\n\n\n      <!-- LAYOUT PRINCIPAL -->\n\n      <div class=\"sg-main-grid\">\n\n        <!-- TABLEAU DES VOLS -->\n\n        <div class=\"sg-panel sg-flights-panel\">\n\n          <div class=\"sg-panel-header\">\n            <h3>Tableau des mouvements<\/h3>\n\n            <div class=\"sg-filter-box\">\n              <button onclick=\"sgFilter('ALL')\" class=\"sg-filter active\">Tous<\/button>\n              <button onclick=\"sgFilter('ARR')\" class=\"sg-filter\">ARR<\/button>\n              <button onclick=\"sgFilter('DEP')\" class=\"sg-filter\">DEP<\/button>\n              <button onclick=\"sgFilter('DELAY')\" class=\"sg-filter\">Retards<\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"sg-flight-table-wrap\">\n\n            <table class=\"sg-flight-table\">\n\n              <thead>\n                <tr>\n                  <th>Type<\/th>\n                  <th>Vol<\/th>\n                  <th>Route<\/th>\n                  <th>Heure<\/th>\n                  <th>Statut<\/th>\n                  <th>Porte<\/th>\n                  <th>Stand<\/th>\n                  <th>Retard<\/th>\n                <\/tr>\n              <\/thead>\n\n              <tbody id=\"sgFlightRows\"><\/tbody>\n\n            <\/table>\n\n          <\/div>\n\n        <\/div>\n\n\n        <!-- ALERTES -->\n\n        <div class=\"sg-panel\">\n\n          <div class=\"sg-panel-header\">\n            <h3>Centre d&rsquo;alertes<\/h3>\n            <span class=\"status red\">LIVE<\/span>\n          <\/div>\n\n          <div id=\"sgAlertList\" class=\"sg-alert-list\"><\/div>\n\n        <\/div>\n\n      <\/div>\n\n\n      <!-- INCIDENT ACTIF -->\n\n      <div class=\"sg-event-card\">\n\n        <div class=\"sg-event-header\">\n\n          <div>\n            <span id=\"sgEventCategory\" class=\"scenario-category\">\n              \u00c9V\u00c9NEMENT\n            <\/span>\n\n            <h3 id=\"sgEventTitle\">\n              D\u00e9but de service\n            <\/h3>\n          <\/div>\n\n          <span id=\"sgEventPriority\" class=\"priority-badge\">\n            NORMAL\n          <\/span>\n\n        <\/div>\n\n        <p id=\"sgEventDescription\">\n          Consultez le programme des vols et pr\u00e9parez votre prise de service.\n        <\/p>\n\n        <div id=\"sgEventActions\" class=\"sg-actions\"><\/div>\n\n        <div id=\"sgEventFeedback\" class=\"exam-feedback\"><\/div>\n\n      <\/div>\n\n\n      <!-- JOURNAL -->\n\n      <div class=\"sg-main-grid\">\n\n        <div class=\"sg-panel\">\n\n          <div class=\"sg-panel-header\">\n            <h3>Journal op\u00e9rationnel<\/h3>\n            <button class=\"mini-btn\" onclick=\"sgClearLog()\">Effacer<\/button>\n          <\/div>\n\n          <div id=\"sgLog\" class=\"sg-log\"><\/div>\n\n        <\/div>\n\n\n        <div class=\"sg-panel\">\n\n          <div class=\"sg-panel-header\">\n            <h3>\u00c9tat de la journ\u00e9e<\/h3>\n          <\/div>\n\n          <div class=\"sg-day-status\">\n\n            <div>\n              <span>Vols termin\u00e9s<\/span>\n              <strong id=\"sgCompletedFlights\">0<\/strong>\n            <\/div>\n\n            <div>\n              <span>Vols retard\u00e9s<\/span>\n              <strong id=\"sgDelayedFlights\">0<\/strong>\n            <\/div>\n\n            <div>\n              <span>Incidents trait\u00e9s<\/span>\n              <strong id=\"sgResolved\">0<\/strong>\n            <\/div>\n\n            <div>\n              <span>D\u00e9cisions incorrectes<\/span>\n              <strong id=\"sgWrong\">0<\/strong>\n            <\/div>\n\n          <\/div>\n\n        <\/div>\n\n      <\/div>\n\n\n      <!-- COMMANDES -->\n\n      <div class=\"sg-controls\">\n\n        <button class=\"btn btn-gold\" onclick=\"advanceGameTime()\">\n          \u23e9 Avancer de 30 minutes\n        <\/button>\n\n        <button class=\"sg-secondary\" onclick=\"triggerManualIncident()\">\n          \u26a0 G\u00e9n\u00e9rer un incident\n        <\/button>\n\n        <button class=\"sg-secondary\" onclick=\"finishSeriousGame()\">\n          Terminer la journ\u00e9e\n        <\/button>\n\n      <\/div>\n\n    <\/div>\n\n\n    <!-- RESULTATS -->\n\n    <div id=\"sgResults\" class=\"sg-results hidden\">\n\n      <div class=\"result-banner\">\n\n        <div>\n          <span class=\"exam-tag\">BILAN DE JOURN\u00c9E<\/span>\n\n          <h2 id=\"sgResultLevel\">\n            \u2014\n          <\/h2>\n\n          <p id=\"sgResultMessage\">\n          <\/p>\n        <\/div>\n\n        <div class=\"result-circle\">\n          <strong id=\"sgFinalScore\">0<\/strong>\n          <span>\/100<\/span>\n        <\/div>\n\n      <\/div>\n\n\n      <div class=\"result-grid\">\n\n        <div class=\"result-skill\">\n          <span>\ud83d\udee1\ufe0f<\/span>\n          <small>S\u00e9curit\u00e9<\/small>\n          <strong id=\"sgResultSafety\">0%<\/strong>\n        <\/div>\n\n        <div class=\"result-skill\">\n          <span>\u23f1\ufe0f<\/span>\n          <small>Ponctualit\u00e9<\/small>\n          <strong id=\"sgResultPunctuality\">0%<\/strong>\n        <\/div>\n\n        <div class=\"result-skill\">\n          <span>\ud83e\udd1d<\/span>\n          <small>Coordination<\/small>\n          <strong id=\"sgResultCoordination\">0%<\/strong>\n        <\/div>\n\n        <div class=\"result-skill\">\n          <span>\ud83d\ude42<\/span>\n          <small>Client<\/small>\n          <strong id=\"sgResultCustomer\">0%<\/strong>\n        <\/div>\n\n      <\/div>\n\n\n      <div class=\"professional-debrief\">\n\n        <h3>Rapport op\u00e9rationnel<\/h3>\n\n        <div id=\"sgDebrief\"><\/div>\n\n      <\/div>\n\n\n      <div class=\"result-actions\">\n\n        <button class=\"btn btn-gold\" onclick=\"restartSeriousGame()\">\n          \u21bb Rejouer la journ\u00e9e\n        <\/button>\n\n      <\/div>\n\n    <\/div>\n\n  <\/div>\n\n<\/section>\n\n\n<style>\n\n\/* =====================================================\n SERIOUS GAME DESIGN\n===================================================== *\/\n\n.sg-section{\n  padding:100px 0;\n  background:#eef4fa;\n}\n\n.sg-intro{\n  background:white;\n  border-radius:30px;\n  overflow:hidden;\n  box-shadow:0 25px 60px rgba(0,0,0,.10);\n}\n\n.sg-hero{\n  background:\n    linear-gradient(120deg,#04111f,#0a416e);\n  color:white;\n  min-height:270px;\n  padding:45px;\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:25px;\n}\n\n.sg-hero h3{\n  font-size:42px;\n  margin:15px 0;\n}\n\n.sg-hero p{\n  color:#c0d1df;\n  max-width:640px;\n}\n\n.sg-plane{\n  font-size:130px;\n  color:rgba(255,255,255,.08);\n}\n\n.sg-rules{\n  display:grid;\n  grid-template-columns:repeat(4,1fr);\n}\n\n.sg-rules > div{\n  padding:25px;\n  text-align:center;\n  border-right:1px solid #e2e9ef;\n}\n\n.sg-rules strong{\n  display:block;\n  color:#071b33;\n  font-size:30px;\n}\n\n.sg-rules span{\n  color:#718096;\n  font-size:12px;\n}\n\n.sg-start-box{\n  padding:30px;\n  border-top:1px solid #e2e9ef;\n  display:grid;\n  grid-template-columns:1fr 1fr auto;\n  gap:15px;\n}\n\n.sg-start-box input,\n.sg-start-box select{\n  border:1px solid #d8e2eb;\n  border-radius:13px;\n  padding:14px;\n}\n\n.sg-interface{\n  display:grid;\n  gap:20px;\n}\n\n.sg-topbar{\n  background:#06192c;\n  color:white;\n  border-radius:20px;\n  padding:20px;\n  display:grid;\n  grid-template-columns:repeat(4,1fr);\n  gap:15px;\n}\n\n.sg-topbar small{\n  display:block;\n  color:#8fa6b9;\n  font-size:10px;\n}\n\n.sg-topbar strong{\n  display:block;\n  margin-top:5px;\n  color:#e9c84a;\n  font-size:24px;\n}\n\n.sg-kpis{\n  display:grid;\n  grid-template-columns:repeat(6,1fr);\n  gap:12px;\n}\n\n.sg-kpi{\n  background:white;\n  border-radius:16px;\n  padding:16px;\n  border:1px solid #dde6ee;\n}\n\n.sg-kpi span{\n  font-size:23px;\n}\n\n.sg-kpi small{\n  display:block;\n  color:#718096;\n  margin-top:8px;\n}\n\n.sg-kpi strong{\n  display:block;\n  color:#071b33;\n  font-size:22px;\n}\n\n.sg-main-grid{\n  display:grid;\n  grid-template-columns:1.7fr .8fr;\n  gap:20px;\n}\n\n.sg-panel{\n  background:white;\n  border-radius:20px;\n  padding:20px;\n  border:1px solid #dfe8ef;\n}\n\n.sg-panel-header{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:15px;\n  margin-bottom:15px;\n}\n\n.sg-panel-header h3{\n  color:#071b33;\n}\n\n.sg-filter-box{\n  display:flex;\n  gap:6px;\n  flex-wrap:wrap;\n}\n\n.sg-filter{\n  border:1px solid #d9e3ec;\n  padding:7px 10px;\n  border-radius:8px;\n  background:white;\n  cursor:pointer;\n  font-size:11px;\n}\n\n.sg-filter.active{\n  background:#071b33;\n  color:white;\n}\n\n.sg-flight-table-wrap{\n  overflow:auto;\n}\n\n.sg-flight-table{\n  width:100%;\n  min-width:780px;\n  border-collapse:collapse;\n}\n\n.sg-flight-table th{\n  background:#071b33;\n  color:white;\n  padding:12px;\n  font-size:11px;\n}\n\n.sg-flight-table td{\n  border-bottom:1px solid #e4ebf2;\n  padding:12px;\n  font-size:12px;\n}\n\n.sg-alert-list{\n  max-height:400px;\n  overflow:auto;\n  display:grid;\n  gap:10px;\n}\n\n.sg-alert{\n  padding:13px;\n  border-radius:12px;\n  background:#fff2e2;\n  border-left:4px solid #f59e0b;\n}\n\n.sg-alert.critical{\n  background:#fff0f0;\n  border-left-color:#ef4444;\n}\n\n.sg-alert strong{\n  display:block;\n  color:#071b33;\n}\n\n.sg-alert small{\n  color:#718096;\n}\n\n.sg-event-card{\n  background:white;\n  border-radius:24px;\n  padding:30px;\n  border:1px solid #dce6ee;\n  box-shadow:0 10px 30px rgba(0,0,0,.05);\n}\n\n.sg-event-header{\n  display:flex;\n  justify-content:space-between;\n  gap:20px;\n  flex-wrap:wrap;\n  margin-bottom:20px;\n}\n\n.sg-event-header h3{\n  color:#071b33;\n  font-size:30px;\n}\n\n.sg-actions{\n  display:grid;\n  gap:10px;\n  margin-top:20px;\n}\n\n.sg-action-btn{\n  text-align:left;\n  border:1px solid #d9e3ec;\n  background:white;\n  padding:15px;\n  border-radius:12px;\n  cursor:pointer;\n}\n\n.sg-action-btn:hover{\n  border-color:#0d6efd;\n  background:#f3f8ff;\n}\n\n.sg-log{\n  max-height:280px;\n  overflow:auto;\n}\n\n.sg-log-item{\n  padding:10px 0;\n  border-bottom:1px solid #e6edf3;\n  font-size:12px;\n}\n\n.sg-log-time{\n  color:#0d6efd;\n  font-weight:900;\n  margin-right:7px;\n}\n\n.sg-day-status{\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:12px;\n}\n\n.sg-day-status div{\n  background:#f4f8fb;\n  border-radius:12px;\n  padding:15px;\n}\n\n.sg-day-status span{\n  display:block;\n  color:#718096;\n  font-size:11px;\n}\n\n.sg-day-status strong{\n  color:#071b33;\n  font-size:24px;\n}\n\n.sg-controls{\n  display:flex;\n  gap:10px;\n  flex-wrap:wrap;\n}\n\n.sg-secondary{\n  border:1px solid #cad6e0;\n  background:white;\n  padding:13px 17px;\n  border-radius:12px;\n  font-weight:800;\n  cursor:pointer;\n}\n\n.sg-results{\n  display:grid;\n  gap:20px;\n}\n\n@media(max-width:1000px){\n\n  .sg-kpis{\n    grid-template-columns:repeat(3,1fr);\n  }\n\n  .sg-main-grid{\n    grid-template-columns:1fr;\n  }\n\n}\n\n@media(max-width:700px){\n\n  .sg-rules,\n  .sg-topbar,\n  .sg-kpis,\n  .sg-start-box{\n    grid-template-columns:1fr;\n  }\n\n}\n\n<\/style>\n\n\n<script>\n\n\/* =====================================================\n FLIGHTS\n===================================================== *\/\n\nconst sgFlights = [\n\n{type:\"DEP\",flight:\"MZA101\",route:\"Casablanca \u2192 Paris\",time:\"06:10\",gate:\"A02\",stand:\"12\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA115\",route:\"Casablanca \u2192 Madrid\",time:\"06:30\",gate:\"A04\",stand:\"08\",status:\"SCHEDULED\",delay:0},\n{type:\"ARR\",flight:\"MZA208\",route:\"Marrakech \u2192 Casablanca\",time:\"07:00\",gate:\"\u2014\",stand:\"06\",status:\"SCHEDULED\",delay:0},\n{type:\"ARR\",flight:\"MZA301\",route:\"Bruxelles \u2192 Casablanca\",time:\"07:25\",gate:\"\u2014\",stand:\"14\",status:\"SCHEDULED\",delay:0},\n\n{type:\"DEP\",flight:\"MZA330\",route:\"Casablanca \u2192 Marseille\",time:\"08:15\",gate:\"B02\",stand:\"09\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA405\",route:\"Casablanca \u2192 Dakar\",time:\"08:50\",gate:\"B04\",stand:\"15\",status:\"SCHEDULED\",delay:0},\n{type:\"ARR\",flight:\"MZA410\",route:\"Lisbonne \u2192 Casablanca\",time:\"09:15\",gate:\"\u2014\",stand:\"07\",status:\"SCHEDULED\",delay:0},\n\n{type:\"DEP\",flight:\"MZA512\",route:\"Casablanca \u2192 Rome\",time:\"10:20\",gate:\"A06\",stand:\"11\",status:\"SCHEDULED\",delay:0},\n{type:\"ARR\",flight:\"MZA530\",route:\"Paris \u2192 Casablanca\",time:\"11:05\",gate:\"\u2014\",stand:\"18\",status:\"SCHEDULED\",delay:0},\n\n{type:\"DEP\",flight:\"MZA610\",route:\"Casablanca \u2192 Tunis\",time:\"12:00\",gate:\"B05\",stand:\"10\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA624\",route:\"Casablanca \u2192 Istanbul\",time:\"12:40\",gate:\"A08\",stand:\"16\",status:\"SCHEDULED\",delay:0},\n\n{type:\"ARR\",flight:\"MZA640\",route:\"Madrid \u2192 Casablanca\",time:\"13:20\",gate:\"\u2014\",stand:\"05\",status:\"SCHEDULED\",delay:0},\n{type:\"ARR\",flight:\"MZA700\",route:\"Jeddah \u2192 Casablanca\",time:\"14:15\",gate:\"\u2014\",stand:\"20\",status:\"SCHEDULED\",delay:0},\n\n{type:\"DEP\",flight:\"MZA730\",route:\"Casablanca \u2192 Paris\",time:\"15:00\",gate:\"A02\",stand:\"12\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA755\",route:\"Casablanca \u2192 Lyon\",time:\"15:45\",gate:\"A05\",stand:\"09\",status:\"SCHEDULED\",delay:0},\n\n{type:\"ARR\",flight:\"MZA802\",route:\"Rome \u2192 Casablanca\",time:\"16:30\",gate:\"\u2014\",stand:\"14\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA820\",route:\"Casablanca \u2192 Montr\u00e9al\",time:\"17:20\",gate:\"B08\",stand:\"21\",status:\"SCHEDULED\",delay:0},\n\n{type:\"ARR\",flight:\"MZA845\",route:\"Dakar \u2192 Casablanca\",time:\"18:10\",gate:\"\u2014\",stand:\"18\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA870\",route:\"Casablanca \u2192 Bruxelles\",time:\"19:00\",gate:\"A07\",stand:\"11\",status:\"SCHEDULED\",delay:0},\n\n{type:\"ARR\",flight:\"MZA902\",route:\"Paris \u2192 Casablanca\",time:\"19:40\",gate:\"\u2014\",stand:\"15\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA915\",route:\"Casablanca \u2192 Istanbul\",time:\"20:30\",gate:\"B04\",stand:\"17\",status:\"SCHEDULED\",delay:0},\n\n{type:\"ARR\",flight:\"MZA930\",route:\"Montr\u00e9al \u2192 Casablanca\",time:\"21:10\",gate:\"\u2014\",stand:\"20\",status:\"SCHEDULED\",delay:0},\n{type:\"DEP\",flight:\"MZA955\",route:\"Casablanca \u2192 Jeddah\",time:\"22:00\",gate:\"B06\",stand:\"19\",status:\"SCHEDULED\",delay:0},\n{type:\"ARR\",flight:\"MZA980\",route:\"Madrid \u2192 Casablanca\",time:\"22:50\",gate:\"\u2014\",stand:\"08\",status:\"SCHEDULED\",delay:0}\n\n];\n\n\n\/* =====================================================\n INCIDENTS\n===================================================== *\/\n\nconst sgEvents = [\n\n{\ncategory:\"PR\u00c9PARATION\",\ntitle:\"Ressources incompl\u00e8tes\",\npriority:\"\u00c9LEV\u00c9E\",\ndescription:\"Deux agents bagages ne sont pas encore pr\u00e9sents pour la premi\u00e8re vague de d\u00e9parts.\",\nactions:[\n\"Attendre le d\u00e9but du chargement.\",\n\"R\u00e9organiser imm\u00e9diatement les ressources et informer le superviseur.\",\n\"R\u00e9duire le nombre de bagages accept\u00e9s.\"\n],\ncorrect:1,\nskill:\"coordination\",\npenalty:8\n},\n\n{\ncategory:\"BAGAGES\",\ntitle:\"Chargement retard\u00e9\",\npriority:\"\u00c9LEV\u00c9E\",\ndescription:\"Le chargement d'un vol long-courrier accuse 20 minutes de retard.\",\nactions:[\n\"Identifier la cause et renforcer l'\u00e9quipe si possible.\",\n\"Fermer le vol.\",\n\"Ne rien modifier.\"\n],\ncorrect:0,\nskill:\"punctuality\",\npenalty:8\n},\n\n{\ncategory:\"M\u00c9DICAL\",\ntitle:\"Passager malade\",\npriority:\"CRITIQUE\",\ndescription:\"Un passager pr\u00e9sente un malaise s\u00e9rieux en porte.\",\nactions:[\n\"Prioriser l'assistance m\u00e9dicale.\",\n\"Le faire embarquer rapidement.\",\n\"Attendre l'avis de la famille uniquement.\"\n],\ncorrect:0,\nskill:\"safety\",\npenalty:18\n},\n\n{\ncategory:\"PARKING\",\ntitle:\"Stand indisponible\",\npriority:\"CRITIQUE\",\ndescription:\"Le parking pr\u00e9vu pour une arriv\u00e9e devient indisponible 15 minutes avant l'atterrissage.\",\nactions:[\n\"Attendre l'arriv\u00e9e.\",\n\"Coordonner imm\u00e9diatement un stand alternatif.\",\n\"Laisser le cockpit r\u00e9soudre seul la situation.\"\n],\ncorrect:1,\nskill:\"coordination\",\npenalty:12\n},\n\n{\ncategory:\"CATERING\",\ntitle:\"Prestataire en retard\",\npriority:\"MOYENNE\",\ndescription:\"Le catering annonce 25 minutes de retard.\",\nactions:[\n\"Arr\u00eater toutes les op\u00e9rations.\",\n\"Poursuivre les t\u00e2ches parall\u00e8les et coordonner le prestataire.\",\n\"Annuler le service sans validation.\"\n],\ncorrect:1,\nskill:\"punctuality\",\npenalty:6\n},\n\n{\ncategory:\"CORRESPONDANCES\",\ntitle:\"17 correspondances critiques\",\npriority:\"\u00c9LEV\u00c9E\",\ndescription:\"Un vol arrive en retard avec 17 passagers en connexion courte.\",\nactions:[\n\"Identifier les connexions et pr\u00e9parer leur prise en charge.\",\n\"Attendre la demande des passagers.\",\n\"D\u00e9clarer toutes les connexions perdues.\"\n],\ncorrect:0,\nskill:\"customer\",\npenalty:8\n},\n\n{\ncategory:\"S\u00dbRET\u00c9\",\ntitle:\"Anomalie bagage\",\npriority:\"CRITIQUE\",\ndescription:\"Une anomalie de concordance passager-bagage est signal\u00e9e.\",\nactions:[\n\"Appliquer les proc\u00e9dures de s\u00fbret\u00e9.\",\n\"Ignorer pour \u00e9viter le retard.\",\n\"Demander au passager voisin.\"\n],\ncorrect:0,\nskill:\"safety\",\npenalty:20\n},\n\n{\ncategory:\"TECHNIQUE\",\ntitle:\"Anomalie avion\",\npriority:\"CRITIQUE\",\ndescription:\"Une anomalie technique est signal\u00e9e avant le d\u00e9part.\",\nactions:[\n\"Acc\u00e9l\u00e9rer l'embarquement.\",\n\"Coordonner avec les services techniques habilit\u00e9s.\",\n\"D\u00e9cider seul que l'avion peut partir.\"\n],\ncorrect:1,\nskill:\"safety\",\npenalty:20\n},\n\n{\ncategory:\"M\u00c9T\u00c9O\",\ntitle:\"D\u00e9gradation m\u00e9t\u00e9o\",\npriority:\"\u00c9LEV\u00c9E\",\ndescription:\"Un \u00e9pisode m\u00e9t\u00e9orologique risque de perturber les prochains mouvements.\",\nactions:[\n\"Anticiper les impacts et pr\u00e9parer les ressources.\",\n\"Attendre le premier retard.\",\n\"Annuler tous les vols.\"\n],\ncorrect:0,\nskill:\"leadership\",\npenalty:10\n},\n\n{\ncategory:\"PORTE\",\ntitle:\"Gate change\",\npriority:\"\u00c9LEV\u00c9E\",\ndescription:\"Une porte devient indisponible peu avant l'embarquement.\",\nactions:[\n\"Changer de porte et coordonner l'information.\",\n\"Ne rien communiquer.\",\n\"Maintenir la porte indisponible.\"\n],\ncorrect:0,\nskill:\"customer\",\npenalty:7\n},\n\n{\ncategory:\"\u00c9QUIPAGE\",\ntitle:\"\u00c9quipage incomplet\",\npriority:\"\u00c9LEV\u00c9E\",\ndescription:\"Un membre d'\u00e9quipage n'est toujours pas pr\u00e9sent \u00e0 D-35.\",\nactions:[\n\"Activer imm\u00e9diatement la coordination appropri\u00e9e.\",\n\"Attendre D-5.\",\n\"Commencer \u00e0 fermer le vol.\"\n],\ncorrect:0,\nskill:\"coordination\",\npenalty:9\n},\n\n{\ncategory:\"LEADERSHIP\",\ntitle:\"Triple incident\",\npriority:\"CRITIQUE\",\ndescription:\"Un incident m\u00e9dical, un retard bagages et un changement de porte surviennent simultan\u00e9ment.\",\nactions:[\n\"Traiter les trois soi-m\u00eame.\",\n\"Prioriser le m\u00e9dical et d\u00e9l\u00e9guer les autres actions.\",\n\"Traiter d'abord le retard bagages.\"\n],\ncorrect:1,\nskill:\"leadership\",\npenalty:15\n}\n\n];\n\n\n\/* =====================================================\n VARIABLES\n===================================================== *\/\n\nlet sgMinutes = 330;\nlet sgEndMinutes = 1410;\nlet sgCurrentFilter = \"ALL\";\nlet sgResolvedCount = 0;\nlet sgWrongCount = 0;\nlet sgUsedEvents = [];\nlet sgCurrentEvent = null;\n\nlet sgScores = {\n safety:100,\n punctuality:100,\n coordination:100,\n customer:100,\n leadership:100,\n energy:100\n};\n\n\n\/* =====================================================\n START\n===================================================== *\/\n\nfunction startSeriousGame(){\n\n const name =\n   document.getElementById(\"sgCandidate\")\n   .value.trim();\n\n if(!name){\n   alert(\"Veuillez saisir le nom du stagiaire.\");\n   return;\n }\n\n sgMinutes = 330;\n sgResolvedCount = 0;\n sgWrongCount = 0;\n sgUsedEvents = [];\n\n sgScores = {\n   safety:100,\n   punctuality:100,\n   coordination:100,\n   customer:100,\n   leadership:100,\n   energy:100\n };\n\n sgFlights.forEach(f=>{\n   f.status = \"SCHEDULED\";\n   f.delay = 0;\n });\n\n document.getElementById(\"sgIntro\")\n .classList.add(\"hidden\");\n\n document.getElementById(\"sgResults\")\n .classList.add(\"hidden\");\n\n document.getElementById(\"sgInterface\")\n .classList.remove(\"hidden\");\n\n updateSeriousGame();\n\n sgLog(\"Prise de service enregistr\u00e9e.\");\n\n setNewSeriousEvent();\n\n}\n\n\n\/* =====================================================\n CLOCK\n===================================================== *\/\n\nfunction sgMinutesToTime(total){\n\n const h =\n   Math.floor(total\/60);\n\n const m =\n   total % 60;\n\n return String(h).padStart(2,\"0\") +\n   \":\" +\n   String(m).padStart(2,\"0\");\n\n}\n\n\n\/* =====================================================\n ADVANCE TIME\n===================================================== *\/\n\nfunction advanceGameTime(){\n\n sgMinutes += 30;\n\n sgScores.energy -= 1;\n\n updateFlightStatuses();\n\n if(Math.random() < .45){\n   triggerManualIncident();\n }\n\n if(sgMinutes >= sgEndMinutes){\n   finishSeriousGame();\n   return;\n }\n\n updateSeriousGame();\n\n}\n\n\n\/* =====================================================\n PERIOD\n===================================================== *\/\n\nfunction getPeriod(){\n\n if(sgMinutes < 420) return \"Premi\u00e8re vague\";\n if(sgMinutes < 600) return \"Matin\u00e9e\";\n if(sgMinutes < 780) return \"Milieu de journ\u00e9e\";\n if(sgMinutes < 960) return \"Apr\u00e8s-midi\";\n if(sgMinutes < 1140) return \"Pointe du soir\";\n if(sgMinutes < 1320) return \"Soir\u00e9e\";\n\n return \"Fin d'exploitation\";\n\n}\n\n\n\/* =====================================================\n FLIGHT STATUS\n===================================================== *\/\n\nfunction updateFlightStatuses(){\n\n sgFlights.forEach(f=>{\n\n   const parts =\n     f.time.split(\":\");\n\n   const flightMinutes =\n     parseInt(parts[0])*60 +\n     parseInt(parts[1]);\n\n   if(sgMinutes >= flightMinutes + 30){\n\n     f.status = \"COMPLETED\";\n\n   }\n\n   else if(\n     sgMinutes >= flightMinutes - 45 &&\n     sgMinutes <= flightMinutes + 30\n   ){\n\n     if(f.delay > 0){\n       f.status = \"DELAYED\";\n     }else{\n       f.status =\n         f.type === \"DEP\" ? \"BOARDING\" : \"EXPECTED\";\n     }\n\n   }\n\n });\n\n}\n\n\n\/* =====================================================\n RENDER FLIGHTS\n===================================================== *\/\n\nfunction renderSgFlights(){\n\n const tbody =\n   document.getElementById(\"sgFlightRows\");\n\n tbody.innerHTML = \"\";\n\n let list =\n   sgFlights.filter(f=>{\n\n     if(sgCurrentFilter === \"ARR\"){\n       return f.type === \"ARR\";\n     }\n\n     if(sgCurrentFilter === \"DEP\"){\n       return f.type === \"DEP\";\n     }\n\n     if(sgCurrentFilter === \"DELAY\"){\n       return f.delay > 0;\n     }\n\n     return true;\n\n   });\n\n\n list.forEach(f=>{\n\n   const tr =\n     document.createElement(\"tr\");\n\n   tr.innerHTML = `\n\n   <td>\n     <strong>\n       ${f.type === \"ARR\" ? \"\ud83d\udeec ARR\" : \"\ud83d\udeeb DEP\"}\n     <\/strong>\n   <\/td>\n\n   <td>\n     <strong>${f.flight}<\/strong>\n   <\/td>\n\n   <td>${f.route}<\/td>\n\n   <td>${f.time}<\/td>\n\n   <td>${f.status}<\/td>\n\n   <td>${f.gate}<\/td>\n\n   <td>${f.stand}<\/td>\n\n   <td>\n     ${f.delay > 0 ? \"+\" + f.delay + \" min\" : \"\u2014\"}\n   <\/td>\n\n   `;\n\n   tbody.appendChild(tr);\n\n });\n\n}\n\n\n\/* =====================================================\n FILTER\n===================================================== *\/\n\nfunction sgFilter(type){\n\n sgCurrentFilter = type;\n\n document.querySelectorAll(\".sg-filter\")\n .forEach(b=>b.classList.remove(\"active\"));\n\n if(event && event.target){\n   event.target.classList.add(\"active\");\n }\n\n renderSgFlights();\n\n}\n\n\n\/* =====================================================\n ACTIVE FLIGHTS\n===================================================== *\/\n\nfunction getActiveFlights(){\n\n return sgFlights.filter(f=>{\n\n   const [h,m] =\n     f.time.split(\":\").map(Number);\n\n   const fm =\n     h*60+m;\n\n   return\n     sgMinutes >= fm-45 &&\n     sgMinutes <= fm+30;\n\n }).length;\n\n}\n\n\n\/* =====================================================\n INCIDENT\n===================================================== *\/\n\nfunction setNewSeriousEvent(){\n\n let available =\n   sgEvents.filter(\n     (e,index)=>!sgUsedEvents.includes(index)\n   );\n\n if(available.length === 0){\n   sgUsedEvents = [];\n   available = sgEvents;\n }\n\n const eventData =\n   available[\n     Math.floor(Math.random()*available.length)\n   ];\n\n const index =\n   sgEvents.indexOf(eventData);\n\n sgUsedEvents.push(index);\n\n sgCurrentEvent = eventData;\n\n renderCurrentEvent();\n\n}\n\n\nfunction triggerManualIncident(){\n\n setNewSeriousEvent();\n\n sgAddAlert(\n   sgCurrentEvent.title,\n   sgCurrentEvent.description,\n   sgCurrentEvent.priority === \"CRITIQUE\"\n );\n\n sgLog(\n   \"Nouvel incident : \" +\n   sgCurrentEvent.title\n );\n\n updateSeriousGame();\n\n}\n\n\n\/* =====================================================\n EVENT RENDER\n===================================================== *\/\n\nfunction renderCurrentEvent(){\n\n if(!sgCurrentEvent) return;\n\n document.getElementById(\"sgEventCategory\")\n .innerText =\n   sgCurrentEvent.category;\n\n document.getElementById(\"sgEventTitle\")\n .innerText =\n   sgCurrentEvent.title;\n\n document.getElementById(\"sgEventPriority\")\n .innerText =\n   sgCurrentEvent.priority;\n\n document.getElementById(\"sgEventDescription\")\n .innerText =\n   sgCurrentEvent.description;\n\n\n const container =\n   document.getElementById(\"sgEventActions\");\n\n container.innerHTML = \"\";\n\n\n sgCurrentEvent.actions\n .forEach((action,index)=>{\n\n   const button =\n     document.createElement(\"button\");\n\n   button.className =\n     \"sg-action-btn\";\n\n   button.innerHTML =\n     `<strong>${String.fromCharCode(65+index)}.<\/strong>\n     ${action}`;\n\n   button.onclick =\n     ()=>resolveSeriousEvent(index,button);\n\n   container.appendChild(button);\n\n });\n\n\n document.getElementById(\"sgEventFeedback\")\n .innerHTML = \"\";\n\n}\n\n\n\/* =====================================================\n RESOLVE EVENT\n===================================================== *\/\n\nfunction resolveSeriousEvent(choice,button){\n\n if(!sgCurrentEvent) return;\n\n const buttons =\n   document.querySelectorAll(\".sg-action-btn\");\n\n buttons.forEach(b=>b.disabled=true);\n\n\n if(choice === sgCurrentEvent.correct){\n\n   sgResolvedCount++;\n\n   button.style.background = \"#eafaf1\";\n   button.style.borderColor = \"#59d197\";\n\n   document.getElementById(\"sgEventFeedback\")\n   .innerHTML = `\n\n   <div class=\"feedback-good\">\n     \u2705 Bonne d\u00e9cision op\u00e9rationnelle.\n   <\/div>\n\n   `;\n\n   sgScores.leadership =\n     Math.min(100,sgScores.leadership+1);\n\n   sgLog(\n     \"Incident trait\u00e9 correctement : \" +\n     sgCurrentEvent.title\n   );\n\n }\n\n else{\n\n   sgWrongCount++;\n\n   button.style.background = \"#fff0f0\";\n   button.style.borderColor = \"#ee9898\";\n\n   document.getElementById(\"sgEventFeedback\")\n   .innerHTML = `\n\n   <div class=\"feedback-bad\">\n     \u274c D\u00e9cision incorrecte.\n   <\/div>\n\n   `;\n\n   applySeriousPenalty(\n     sgCurrentEvent.skill,\n     sgCurrentEvent.penalty\n   );\n\n   affectRandomFlight();\n\n   sgLog(\n     \"D\u00e9cision incorrecte : \" +\n     sgCurrentEvent.title\n   );\n\n }\n\n setTimeout(()=>{\n   setNewSeriousEvent();\n },600);\n\n updateSeriousGame();\n\n}\n\n\n\/* =====================================================\n PENALTIES\n===================================================== *\/\n\nfunction applySeriousPenalty(skill,amount){\n\n if(sgScores[skill] !== undefined){\n\n   sgScores[skill] -= amount;\n\n   if(sgScores[skill] < 0){\n     sgScores[skill] = 0;\n   }\n\n }\n\n sgScores.energy -= 2;\n\n}\n\n\n\/* =====================================================\n FLIGHT CONSEQUENCE\n===================================================== *\/\n\nfunction affectRandomFlight(){\n\n const active =\n   sgFlights.filter(f=>f.status !== \"COMPLETED\");\n\n if(active.length === 0) return;\n\n const target =\n   active[\n     Math.floor(Math.random()*active.length)\n   ];\n\n target.delay +=\n   5 + Math.floor(Math.random()*16);\n\n target.status = \"DELAYED\";\n\n sgScores.punctuality -= 3;\n\n}\n\n\n\/* =====================================================\n ALERTS\n===================================================== *\/\n\nfunction sgAddAlert(title,text,critical){\n\n const list =\n   document.getElementById(\"sgAlertList\");\n\n const div =\n   document.createElement(\"div\");\n\n div.className =\n   \"sg-alert\" +\n   (critical ? \" critical\" : \"\");\n\n div.innerHTML = `\n\n <strong>${title}<\/strong>\n <small>${text}<\/small>\n\n `;\n\n list.prepend(div);\n\n}\n\n\n\/* =====================================================\n LOG\n===================================================== *\/\n\nfunction sgLog(message){\n\n const log =\n   document.getElementById(\"sgLog\");\n\n const div =\n   document.createElement(\"div\");\n\n div.className =\n   \"sg-log-item\";\n\n div.innerHTML = `\n\n <span class=\"sg-log-time\">\n ${sgMinutesToTime(sgMinutes)}\n <\/span>\n\n ${message}\n\n `;\n\n log.prepend(div);\n\n}\n\n\nfunction sgClearLog(){\n\n document.getElementById(\"sgLog\")\n .innerHTML = \"\";\n\n}\n\n\n\/* =====================================================\n UPDATE\n===================================================== *\/\n\nfunction updateSeriousGame(){\n\n updateFlightStatuses();\n\n renderSgFlights();\n\n document.getElementById(\"sgClock\")\n .innerText =\n   sgMinutesToTime(sgMinutes);\n\n document.getElementById(\"sgPeriod\")\n .innerText =\n   getPeriod();\n\n document.getElementById(\"sgActiveFlights\")\n .innerText =\n   getActiveFlights();\n\n document.getElementById(\"sgSafety\")\n .innerText =\n   Math.max(0,sgScores.safety);\n\n document.getElementById(\"sgPunctuality\")\n .innerText =\n   Math.max(0,sgScores.punctuality);\n\n document.getElementById(\"sgCoordination\")\n .innerText =\n   Math.max(0,sgScores.coordination);\n\n document.getElementById(\"sgCustomer\")\n .innerText =\n   Math.max(0,sgScores.customer);\n\n document.getElementById(\"sgLeadership\")\n .innerText =\n   Math.max(0,sgScores.leadership);\n\n document.getElementById(\"sgEnergy\")\n .innerText =\n   Math.max(0,sgScores.energy);\n\n\n const completed =\n   sgFlights.filter(\n     f=>f.status === \"COMPLETED\"\n   ).length;\n\n const delayed =\n   sgFlights.filter(\n     f=>f.delay > 0\n   ).length;\n\n document.getElementById(\"sgCompletedFlights\")\n .innerText = completed;\n\n document.getElementById(\"sgDelayedFlights\")\n .innerText = delayed;\n\n document.getElementById(\"sgResolved\")\n .innerText = sgResolvedCount;\n\n document.getElementById(\"sgWrong\")\n .innerText = sgWrongCount;\n\n document.getElementById(\"sgAlertsCount\")\n .innerText =\n   document.querySelectorAll(\".sg-alert\").length;\n\n}\n\n\n\/* =====================================================\n END GAME\n===================================================== *\/\n\nfunction finishSeriousGame(){\n\n document.getElementById(\"sgInterface\")\n .classList.add(\"hidden\");\n\n document.getElementById(\"sgResults\")\n .classList.remove(\"hidden\");\n\n\n const final =\n   Math.round(\n     (\n       sgScores.safety +\n       sgScores.punctuality +\n       sgScores.coordination +\n       sgScores.customer +\n       sgScores.leadership +\n       sgScores.energy\n     ) \/ 6\n   );\n\n\n let level;\n let message;\n\n\n if(final >= 90){\n\n   level =\n     \"CHEF D'ESCALE \u2014 NIVEAU EXCELLENCE\";\n\n   message =\n     \"Excellente ma\u00eetrise d'une journ\u00e9e op\u00e9rationnelle complexe.\";\n\n }\n\n else if(final >= 80){\n\n   level =\n     \"CHEF D'ESCALE \u2014 EXPERT\";\n\n   message =\n     \"Tr\u00e8s bonne capacit\u00e9 de coordination et d'anticipation.\";\n\n }\n\n else if(final >= 70){\n\n   level =\n     \"SUPERVISEUR CONFIRM\u00c9\";\n\n   message =\n     \"Bon niveau g\u00e9n\u00e9ral avec quelques axes d'am\u00e9lioration.\";\n\n }\n\n else if(final >= 55){\n\n   level =\n     \"NIVEAU OP\u00c9RATIONNEL\";\n\n   message =\n     \"Les fondamentaux sont acquis mais les situations complexes doivent \u00eatre renforc\u00e9es.\";\n\n }\n\n else{\n\n   level =\n     \"FORMATION COMPL\u00c9MENTAIRE RECOMMAND\u00c9E\";\n\n   message =\n     \"Le stagiaire doit retravailler la priorisation et la coordination.\";\n\n }\n\n\n document.getElementById(\"sgFinalScore\")\n .innerText = final;\n\n document.getElementById(\"sgResultLevel\")\n .innerText = level;\n\n document.getElementById(\"sgResultMessage\")\n .innerText = message;\n\n\n document.getElementById(\"sgResultSafety\")\n .innerText =\n   Math.max(0,sgScores.safety) + \"%\";\n\n document.getElementById(\"sgResultPunctuality\")\n .innerText =\n   Math.max(0,sgScores.punctuality) + \"%\";\n\n document.getElementById(\"sgResultCoordination\")\n .innerText =\n   Math.max(0,sgScores.coordination) + \"%\";\n\n document.getElementById(\"sgResultCustomer\")\n .innerText =\n   Math.max(0,sgScores.customer) + \"%\";\n\n\n const delayed =\n   sgFlights.filter(\n     f=>f.delay > 0\n   ).length;\n\n\n document.getElementById(\"sgDebrief\")\n .innerHTML = `\n\n <p>\n <strong>Incidents correctement trait\u00e9s :<\/strong>\n ${sgResolvedCount}\n <\/p>\n\n <p>\n <strong>D\u00e9cisions incorrectes :<\/strong>\n ${sgWrongCount}\n <\/p>\n\n <p>\n <strong>Vols ayant subi un retard :<\/strong>\n ${delayed} \/ ${sgFlights.length}\n <\/p>\n\n <p>\n <strong>\u00c9nergie op\u00e9rationnelle restante :<\/strong>\n ${Math.max(0,sgScores.energy)}%\n <\/p>\n\n <p>\n <strong>Score final :<\/strong>\n ${final}\/100\n <\/p>\n\n `;\n\n\n document.getElementById(\"sgResults\")\n .scrollIntoView({\n   behavior:\"smooth\"\n });\n\n}\n\n\n\/* =====================================================\n RESTART\n===================================================== *\/\n\nfunction restartSeriousGame(){\n\n document.getElementById(\"sgResults\")\n .classList.add(\"hidden\");\n\n document.getElementById(\"sgIntro\")\n .classList.remove(\"hidden\");\n\n document.getElementById(\"sgAlertList\")\n .innerHTML = \"\";\n\n document.getElementById(\"sgLog\")\n .innerHTML = \"\";\n\n document.getElementById(\"mza-serious-game\")\n .scrollIntoView({\n   behavior:\"smooth\"\n });\n\n}\n\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>16 \u2022 Serious Game Une journ\u00e9e compl\u00e8te de Chef d&rsquo;escale De 05:30 \u00e0 23:30, g\u00e9rez les vols, les \u00e9quipes, les passagers et les incidents comme dans une v\u00e9ritable escale. MAROC ZAIN ACADEMY Airport Duty Manager Challenge Une simulation longue dur\u00e9e o\u00f9 chaque d\u00e9cision influence les op\u00e9rations suivantes. \u2708 18 h de journ\u00e9e virtuelle 24 vols [&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-2996","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\/2996","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=2996"}],"version-history":[{"count":1,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/2996\/revisions"}],"predecessor-version":[{"id":2997,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/2996\/revisions\/2997"}],"wp:attachment":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/media?parent=2996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/categories?post=2996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/tags?post=2996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}