{"id":3018,"date":"2026-08-21T16:37:03","date_gmt":"2026-08-21T16:37:03","guid":{"rendered":"https:\/\/maroczain.com\/?page_id=3018"},"modified":"2026-08-21T17:46:51","modified_gmt":"2026-08-21T17:46:51","slug":"chef-de-cabine-master-engine","status":"publish","type":"page","link":"https:\/\/maroczain.com\/en\/chef-de-cabine-master-engine\/","title":{"rendered":"Chef de Cabine Master Engine"},"content":{"rendered":"\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\n<title>Chef de Cabine Master Engine | Maroc Zain Academy<\/title>\n\n<style>\n:root{\n  --navy:#061f38;\n  --blue:#0c6db5;\n  --gold:#d7b34f;\n  --green:#16845c;\n  --red:#c23b36;\n  --orange:#e58a28;\n  --light:#f5f8fc;\n  --white:#fff;\n  --grey:#667085;\n  --purple:#6f42c1;\n}\n\n*{\n  box-sizing:border-box;\n}\n\nbody{\n  margin:0;\n  font-family:Arial,Helvetica,sans-serif;\n  background:var(--light);\n  color:#172033;\n}\n\nheader{\n  background:\n  linear-gradient(135deg,var(--navy),var(--blue));\n  color:white;\n  padding:80px 25px;\n}\n\n.wrap{\n  max-width:1280px;\n  margin:auto;\n}\n\n.hero-grid{\n  display:grid;\n  grid-template-columns:1.2fr .8fr;\n  gap:30px;\n  align-items:center;\n}\n\n.badge{\n  display:inline-block;\n  background:var(--gold);\n  color:#172033;\n  padding:8px 16px;\n  border-radius:30px;\n  font-weight:bold;\n}\n\nh1{\n  font-size:58px;\n  margin:15px 0;\n  line-height:1.05;\n}\n\n.hero-card{\n  background:rgba(255,255,255,.11);\n  padding:28px;\n  border-radius:20px;\n  border:1px solid rgba(255,255,255,.18);\n}\n\nsection{\n  padding:60px 20px;\n}\n\n.section-title{\n  text-align:center;\n  max-width:900px;\n  margin:0 auto 35px;\n}\n\n.section-title span{\n  color:var(--blue);\n  font-weight:bold;\n  text-transform:uppercase;\n  letter-spacing:1.5px;\n  font-size:13px;\n}\n\n.section-title h2{\n  color:var(--navy);\n  font-size:38px;\n  margin:8px 0;\n}\n\n.grid{\n  display:grid;\n  grid-template-columns:repeat(auto-fit,minmax(220px,1fr));\n  gap:18px;\n}\n\n.stat{\n  background:white;\n  padding:22px;\n  border-radius:16px;\n  text-align:center;\n  box-shadow:0 10px 30px rgba(0,0,0,.08);\n}\n\n.stat strong{\n  display:block;\n  font-size:34px;\n  color:var(--blue);\n}\n\n.toolbar{\n  display:flex;\n  gap:10px;\n  flex-wrap:wrap;\n  background:white;\n  padding:18px;\n  border-radius:15px;\n  box-shadow:0 8px 25px rgba(0,0,0,.06);\n  margin-bottom:25px;\n}\n\n.toolbar select,\n.toolbar input{\n  min-width:160px;\n  flex:1;\n  padding:12px;\n  border:1px solid #ccd4dd;\n  border-radius:8px;\n}\n\n.btn{\n  border:0;\n  padding:12px 18px;\n  border-radius:9px;\n  cursor:pointer;\n  font-weight:bold;\n}\n\n.btn-blue{\n  background:var(--blue);\n  color:white;\n}\n\n.btn-gold{\n  background:var(--gold);\n  color:#172033;\n}\n\n.btn-red{\n  background:var(--red);\n  color:white;\n}\n\n.btn-purple{\n  background:var(--purple);\n  color:white;\n}\n\n.card{\n  background:white;\n  border-radius:17px;\n  padding:25px;\n  margin-bottom:18px;\n  box-shadow:0 10px 30px rgba(0,0,0,.07);\n  border-left:6px solid var(--blue);\n}\n\n.card.critical{\n  border-left-color:var(--red);\n}\n\n.card.warning{\n  border-left-color:var(--orange);\n}\n\n.card h3{\n  color:var(--navy);\n}\n\n.tag{\n  display:inline-block;\n  padding:5px 10px;\n  border-radius:20px;\n  background:#eaf3fc;\n  color:var(--blue);\n  font-size:12px;\n  font-weight:bold;\n  margin:2px;\n}\n\n.tag.red{\n  background:#fdeaea;\n  color:var(--red);\n}\n\n.tag.gold{\n  background:#fff7df;\n  color:#8f6b00;\n}\n\n.tag.green{\n  background:#e7f7ef;\n  color:var(--green);\n}\n\n.answer{\n  display:block;\n  width:100%;\n  margin:8px 0;\n  padding:14px;\n  text-align:left;\n  border:1px solid #d5dee7;\n  border-radius:9px;\n  background:white;\n  cursor:pointer;\n}\n\n.answer:hover{\n  background:#eef6fd;\n}\n\n.answer.good{\n  background:#e7f7ef;\n  border-color:var(--green);\n}\n\n.answer.bad{\n  background:#fff0ef;\n  border-color:var(--red);\n}\n\n.explanation{\n  margin-top:15px;\n  padding:16px;\n  border-radius:10px;\n  background:#fff8e5;\n  border-left:5px solid var(--gold);\n}\n\n.progress{\n  width:100%;\n  height:18px;\n  background:#e1e7ed;\n  border-radius:20px;\n  overflow:hidden;\n  margin:15px 0;\n}\n\n.progress-bar{\n  width:0%;\n  height:100%;\n  background:\n  linear-gradient(90deg,var(--blue),var(--gold));\n}\n\n.tabs{\n  display:flex;\n  gap:10px;\n  flex-wrap:wrap;\n  margin-bottom:25px;\n}\n\n.tab{\n  border:0;\n  padding:13px 18px;\n  border-radius:9px;\n  cursor:pointer;\n  font-weight:bold;\n  background:#dfe7ef;\n}\n\n.tab.active{\n  background:var(--navy);\n  color:white;\n}\n\n.hidden{\n  display:none;\n}\n\n.exam-box{\n  background:var(--navy);\n  color:white;\n  padding:28px;\n  border-radius:18px;\n}\n\n.exam-box h2{\n  color:white;\n}\n\n.timer{\n  font-size:34px;\n  font-weight:bold;\n  color:var(--gold);\n}\n\nfooter{\n  background:#021426;\n  color:white;\n  padding:40px 20px;\n  text-align:center;\n}\n\n@media(max-width:800px){\n  .hero-grid{\n    grid-template-columns:1fr;\n  }\n\n  h1{\n    font-size:40px;\n  }\n}\n<\/style>\n<\/head>\n\n<body>\n\n<header>\n\n<div class=\"wrap hero-grid\">\n\n<div>\n\n<span class=\"badge\">\nMAROC ZAIN ACADEMY \u2022 CHEF DE CABINE\n<\/span>\n\n<h1>\nMaster Cabin Crew Engine\n<\/h1>\n\n<h2>\n1 000 sc\u00e9narios ma\u00eetres + 1 000 000 QCM\n<\/h2>\n\n<p>\nLeadership cabine, s\u00e9curit\u00e9, s\u00fbret\u00e9, CRM, m\u00e9dical,\n\u00e9vacuation, turbulence, feu, passagers difficiles,\ngestion \u00e9quipage et commandement.\n<\/p>\n\n<\/div>\n\n\n<div class=\"hero-card\">\n\n<h3>Progression globale<\/h3>\n\n<div class=\"progress\">\n<div id=\"globalProgress\" class=\"progress-bar\"><\/div>\n<\/div>\n\n<p>\nScore :\n<strong id=\"scoreTop\">0<\/strong>\n<\/p>\n\n<p>\nGrade :\n<strong id=\"gradeTop\">\nAgent de Cabine Junior\n<\/strong>\n<\/p>\n\n<p>\nQuestions trait\u00e9es :\n<strong id=\"answeredTop\">0<\/strong>\n<\/p>\n\n<\/div>\n\n<\/div>\n\n<\/header>\n\n\n<section>\n\n<div class=\"wrap\">\n\n<div class=\"section-title\">\n\n<span>\nCockpit p\u00e9dagogique\n<\/span>\n\n<h2>\nVotre tableau de progression\n<\/h2>\n\n<\/div>\n\n\n<div class=\"grid\">\n\n<div class=\"stat\">\n<strong>1 000<\/strong>\nSc\u00e9narios ma\u00eetres\n<\/div>\n\n<div class=\"stat\">\n<strong>1 000 000<\/strong>\nQCM potentiels\n<\/div>\n\n<div class=\"stat\">\n<strong id=\"score\">0<\/strong>\nPoints\n<\/div>\n\n<div class=\"stat\">\n<strong id=\"correct\">0<\/strong>\nBonnes r\u00e9ponses\n<\/div>\n\n<div class=\"stat\">\n<strong id=\"answered\">0<\/strong>\nQuestions trait\u00e9es\n<\/div>\n\n<div class=\"stat\">\n<strong id=\"accuracy\">0%<\/strong>\nR\u00e9ussite\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/section>\n\n\n<section>\n\n<div class=\"wrap\">\n\n<div class=\"tabs\">\n\n<button\nclass=\"tab active\"\nonclick=\"showTab('scenarios',this)\">\n1 000 sc\u00e9narios\n<\/button>\n\n<button\nclass=\"tab\"\nonclick=\"showTab('qcm',this)\">\n1 000 000 QCM\n<\/button>\n\n<button\nclass=\"tab\"\nonclick=\"showTab('exam',this)\">\nExamen Chef de Cabine\n<\/button>\n\n<\/div>\n\n\n<!-- ======================================================\nSC\u00c9NARIOS\n====================================================== -->\n\n<div id=\"tabScenarios\">\n\n<div class=\"toolbar\">\n\n<select id=\"scenarioCategory\"\nonchange=\"renderScenarios()\">\n\n<option value=\"all\">Toutes cat\u00e9gories<\/option>\n<option value=\"leadership\">Leadership<\/option>\n<option value=\"crm\">CRM<\/option>\n<option value=\"safety\">S\u00e9curit\u00e9<\/option>\n<option value=\"security\">S\u00fbret\u00e9<\/option>\n<option value=\"medical\">M\u00e9dical<\/option>\n<option value=\"fire\">Feu \/ fum\u00e9e<\/option>\n<option value=\"evacuation\">\u00c9vacuation<\/option>\n<option value=\"turbulence\">Turbulence<\/option>\n<option value=\"passenger\">Passagers difficiles<\/option>\n<option value=\"crew\">Gestion \u00e9quipage<\/option>\n<option value=\"cockpit\">Coordination cockpit<\/option>\n<option value=\"service\">Service<\/option>\n<option value=\"crisis\">Gestion de crise<\/option>\n\n<\/select>\n\n\n<select\nid=\"scenarioSeverity\"\nonchange=\"renderScenarios()\">\n\n<option value=\"all\">Toutes gravit\u00e9s<\/option>\n<option value=\"1\">Faible<\/option>\n<option value=\"2\">Mod\u00e9r\u00e9e<\/option>\n<option value=\"3\">\u00c9lev\u00e9e<\/option>\n<option value=\"4\">Critique<\/option>\n\n<\/select>\n\n\n<input\nid=\"scenarioSearch\"\nplaceholder=\"Rechercher un sc\u00e9nario...\"\noninput=\"renderScenarios()\">\n\n<\/div>\n\n\n<div id=\"scenarioList\"><\/div>\n\n<\/div>\n\n\n<!-- ======================================================\nQCM\n====================================================== -->\n\n<div id=\"tabQcm\" class=\"hidden\">\n\n<div class=\"toolbar\">\n\n<select\nid=\"qcmCategory\"\nonchange=\"resetQcmPage()\">\n\n<option value=\"all\">Toutes mati\u00e8res<\/option>\n<option value=\"leadership\">Leadership<\/option>\n<option value=\"crm\">CRM<\/option>\n<option value=\"safety\">S\u00e9curit\u00e9<\/option>\n<option value=\"security\">S\u00fbret\u00e9<\/option>\n<option value=\"medical\">M\u00e9dical<\/option>\n<option value=\"fire\">Feu \/ fum\u00e9e<\/option>\n<option value=\"evacuation\">\u00c9vacuation<\/option>\n<option value=\"turbulence\">Turbulence<\/option>\n<option value=\"passenger\">Passagers<\/option>\n<option value=\"crew\">\u00c9quipage<\/option>\n<option value=\"cockpit\">Cockpit<\/option>\n<option value=\"service\">Service<\/option>\n<option value=\"crisis\">Crise<\/option>\n\n<\/select>\n\n\n<select\nid=\"qcmLevel\"\nonchange=\"resetQcmPage()\">\n\n<option value=\"all\">Tous niveaux<\/option>\n<option value=\"D\u00e9butant\">D\u00e9butant<\/option>\n<option value=\"Op\u00e9rationnel\">Op\u00e9rationnel<\/option>\n<option value=\"Confirm\u00e9\">Confirm\u00e9<\/option>\n<option value=\"Expert\">Expert<\/option>\n<option value=\"Commandement\">Commandement<\/option>\n\n<\/select>\n\n\n<select\nid=\"qcmPageSize\"\nonchange=\"changeQcmPageSize()\">\n\n<option value=\"10\">10 questions<\/option>\n<option value=\"20\" selected>20 questions<\/option>\n<option value=\"50\">50 questions<\/option>\n<option value=\"100\">100 questions<\/option>\n\n<\/select>\n\n\n<input\nid=\"jumpQcm\"\ntype=\"number\"\nmin=\"1\"\nmax=\"1000000\"\nplaceholder=\"Aller au QCM n\u00b0\">\n\n\n<button\nclass=\"btn btn-blue\"\nonclick=\"jumpQcm()\">\nAller\n<\/button>\n\n\n<button\nclass=\"btn btn-gold\"\nonclick=\"randomQcmPage()\">\nAl\u00e9atoire\n<\/button>\n\n<\/div>\n\n\n<div id=\"qcmList\"><\/div>\n\n\n<div style=\"text-align:center;margin:25px 0\">\n\n<button\nclass=\"btn btn-blue\"\nonclick=\"previousQcmPage()\">\n\u2190 Pr\u00e9c\u00e9dent\n<\/button>\n\n<strong\nid=\"qcmPageInfo\"\nstyle=\"margin:0 18px\">\n<\/strong>\n\n<button\nclass=\"btn btn-blue\"\nonclick=\"nextQcmPage()\">\nSuivant \u2192\n<\/button>\n\n<\/div>\n\n<\/div>\n\n\n<!-- ======================================================\nEXAMEN\n====================================================== -->\n\n<div id=\"tabExam\" class=\"hidden\">\n\n<div class=\"exam-box\">\n\n<h2>\nExamen Chef de Cabine\n<\/h2>\n\n<p>\n50 questions \u2022 difficult\u00e9 progressive \u2022 score final\n<\/p>\n\n<p>\nTemps indicatif :\n<span class=\"timer\" id=\"examTimer\">\n45:00\n<\/span>\n<\/p>\n\n<button\nclass=\"btn btn-gold\"\nonclick=\"startExam()\">\nD\u00e9marrer l&rsquo;examen\n<\/button>\n\n<button\nclass=\"btn btn-red\"\nonclick=\"stopExam()\">\nTerminer\n<\/button>\n\n<\/div>\n\n\n<div id=\"examList\"><\/div>\n\n\n<div\nid=\"examResult\"\nclass=\"card hidden\">\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/section>\n\n\n<footer>\n\n<h2>\nMAROC ZAIN ACADEMY\n<\/h2>\n\n<p>\nChef de Cabine \u2022 Leadership \u2022 CRM \u2022 S\u00e9curit\u00e9 \u2022 Commandement\n<\/p>\n\n<\/footer>\n\n\n<script>\n\n\/* ======================================================\nCONFIG\n====================================================== *\/\n\nconst TOTAL_QCM = 1000000;\n\nlet qcmCurrentPage = 1;\nlet qcmPageSize = 20;\n\n\n\/* ======================================================\nCAT\u00c9GORIES\n====================================================== *\/\n\nconst categories = [\n\n{id:\"leadership\",name:\"Leadership cabine\"},\n{id:\"crm\",name:\"CRM\"},\n{id:\"safety\",name:\"S\u00e9curit\u00e9 cabine\"},\n{id:\"security\",name:\"S\u00fbret\u00e9\"},\n{id:\"medical\",name:\"Urgences m\u00e9dicales\"},\n{id:\"fire\",name:\"Feu \/ fum\u00e9e\"},\n{id:\"evacuation\",name:\"\u00c9vacuation\"},\n{id:\"turbulence\",name:\"Turbulence\"},\n{id:\"passenger\",name:\"Passagers difficiles\"},\n{id:\"crew\",name:\"Gestion \u00e9quipage\"},\n{id:\"cockpit\",name:\"Coordination cockpit\"},\n{id:\"service\",name:\"Service \u00e0 bord\"},\n{id:\"crisis\",name:\"Gestion de crise\"}\n\n];\n\n\nconst phases = [\n\n\"embarquement\",\n\"portes ferm\u00e9es\",\n\"roulage\",\n\"d\u00e9collage\",\n\"mont\u00e9e\",\n\"croisi\u00e8re\",\n\"descente\",\n\"approche\",\n\"atterrissage\",\n\"d\u00e9barquement\"\n\n];\n\n\nconst aircraftZones = [\n\n\"galley avant\",\n\"galley arri\u00e8re\",\n\"cabine avant\",\n\"cabine centrale\",\n\"cabine arri\u00e8re\",\n\"toilettes\",\n\"issue avant gauche\",\n\"issue avant droite\",\n\"issue arri\u00e8re gauche\",\n\"issue arri\u00e8re droite\"\n\n];\n\n\nconst passengerProfiles = [\n\n\"passager calme\",\n\"passager anxieux\",\n\"passager agressif\",\n\"passager \u00e2g\u00e9\",\n\"famille avec enfants\",\n\"passager PMR\",\n\"passager VIP\",\n\"passager UMNR\",\n\"groupe sportif\",\n\"passager en correspondance\",\n\"passager malade\",\n\"passager refusant les consignes\"\n\n];\n\n\nconst crewProfiles = [\n\n\"PNC junior\",\n\"PNC exp\u00e9riment\u00e9\",\n\"nouveau membre d'\u00e9quipage\",\n\"membre fatigu\u00e9\",\n\"membre stress\u00e9\",\n\"membre tr\u00e8s autonome\",\n\"membre h\u00e9sitant\",\n\"membre en conflit avec un coll\u00e8gue\"\n\n];\n\n\nconst levels = [\n\n\"D\u00e9butant\",\n\"Op\u00e9rationnel\",\n\"Confirm\u00e9\",\n\"Expert\",\n\"Commandement\"\n\n];\n\n\n\/* ======================================================\n1000 SC\u00c9NARIOS MA\u00ceTRES\n====================================================== *\/\n\nconst scenarioSeeds = [\n\n{\ncat:\"leadership\",\ntitle:\"Membre d'\u00e9quipage h\u00e9sitant\",\nbase:\"Un membre d'\u00e9quipage h\u00e9site \u00e0 appliquer une d\u00e9cision dans une situation \u00e9volutive.\",\naction:\"Clarifier les faits, reformuler l'objectif et attribuer clairement les r\u00f4les.\"\n},\n\n{\ncat:\"crm\",\ntitle:\"Information non partag\u00e9e\",\nbase:\"Un membre d'\u00e9quipage poss\u00e8de une information importante mais ne la transmet pas imm\u00e9diatement.\",\naction:\"Encourager le partage d'information et r\u00e9tablir une conscience commune de la situation.\"\n},\n\n{\ncat:\"safety\",\ntitle:\"Non-respect consigne s\u00e9curit\u00e9\",\nbase:\"Un passager refuse une consigne de s\u00e9curit\u00e9.\",\naction:\"Expliquer clairement, maintenir la consigne et appliquer l'escalade n\u00e9cessaire.\"\n},\n\n{\ncat:\"security\",\ntitle:\"Comportement suspect\",\nbase:\"Un comportement inhabituel attire l'attention de l'\u00e9quipage.\",\naction:\"\u00c9valuer sans confrontation inutile, informer selon proc\u00e9dure et conserver une tra\u00e7abilit\u00e9 pr\u00e9cise.\"\n},\n\n{\ncat:\"medical\",\ntitle:\"Malaise passager\",\nbase:\"Un passager pr\u00e9sente des signes de malaise.\",\naction:\"\u00c9valuer la situation selon la formation et coordonner les ressources disponibles.\"\n},\n\n{\ncat:\"fire\",\ntitle:\"Odeur de br\u00fbl\u00e9\",\nbase:\"Une odeur de br\u00fbl\u00e9 est d\u00e9tect\u00e9e dans une zone cabine.\",\naction:\"Identifier rapidement la source, appliquer les proc\u00e9dures feu\/fum\u00e9e et coordonner l'information.\"\n},\n\n{\ncat:\"evacuation\",\ntitle:\"\u00c9vacuation potentielle\",\nbase:\"Une situation apr\u00e8s atterrissage pourrait n\u00e9cessiter une \u00e9vacuation.\",\naction:\"Pr\u00e9parer mentalement les actions, v\u00e9rifier les conditions et suivre les proc\u00e9dures applicables.\"\n},\n\n{\ncat:\"turbulence\",\ntitle:\"Turbulence soudaine\",\nbase:\"Une turbulence importante survient pendant le service.\",\naction:\"Prioriser imm\u00e9diatement la s\u00e9curit\u00e9 des passagers et de l'\u00e9quipage.\"\n},\n\n{\ncat:\"passenger\",\ntitle:\"Passager agressif\",\nbase:\"Un passager devient verbalement agressif.\",\naction:\"Utiliser la d\u00e9sescalade, rappeler les limites et renforcer la coordination de l'\u00e9quipage.\"\n},\n\n{\ncat:\"crew\",\ntitle:\"Conflit entre PNC\",\nbase:\"Deux membres d'\u00e9quipage sont en d\u00e9saccord pendant une phase de travail intense.\",\naction:\"S\u00e9parer le conflit du besoin op\u00e9rationnel, clarifier les r\u00f4les et restaurer la coop\u00e9ration.\"\n},\n\n{\ncat:\"cockpit\",\ntitle:\"Information urgente cockpit\",\nbase:\"Le cockpit demande un point rapide sur une situation cabine.\",\naction:\"Fournir une synth\u00e8se factuelle, courte et utile \u00e0 la d\u00e9cision.\"\n},\n\n{\ncat:\"service\",\ntitle:\"Service perturb\u00e9\",\nbase:\"Le service est interrompu par une situation op\u00e9rationnelle impr\u00e9vue.\",\naction:\"Suspendre ou adapter le service selon les priorit\u00e9s de s\u00e9curit\u00e9.\"\n},\n\n{\ncat:\"crisis\",\ntitle:\"Plusieurs incidents simultan\u00e9s\",\nbase:\"Plusieurs \u00e9v\u00e9nements surviennent presque en m\u00eame temps.\",\naction:\"Prioriser, d\u00e9l\u00e9guer et maintenir une vue d'ensemble.\"\n}\n\n];\n\n\nconst scenarios = [];\n\n\nfor(let i=0;i<1000;i++){\n\n  const seed =\n  scenarioSeeds[\n    i % scenarioSeeds.length\n  ];\n\n\n  const phase =\n  phases[\n    i % phases.length\n  ];\n\n\n  const zone =\n  aircraftZones[\n    (i*3) %\n    aircraftZones.length\n  ];\n\n\n  const passenger =\n  passengerProfiles[\n    (i*5) %\n    passengerProfiles.length\n  ];\n\n\n  const crew =\n  crewProfiles[\n    (i*7) %\n    crewProfiles.length\n  ];\n\n\n  const severity =\n  (i % 4) + 1;\n\n\n  scenarios.push({\n\n    id:i+1,\n\n    category:seed.cat,\n\n    title:seed.title,\n\n    severity:severity,\n\n    phase:phase,\n\n    zone:zone,\n\n    context:\n    seed.base+\n    \" Phase : \"+phase+\n    \". Zone : \"+zone+\n    \". Profil passager : \"+passenger+\n    \". Profil \u00e9quipage : \"+crew+\".\",\n\n    action:seed.action\n\n  });\n\n}\n\n\n\/* ======================================================\nTEMPLATES QCM\n====================================================== *\/\n\nconst qcmTemplates = [\n\n{\nq:\"Quelle est la priorit\u00e9 imm\u00e9diate du Chef de Cabine ?\",\nanswers:[\n\"Maintenir le service\",\n\"\u00c9valuer la situation et identifier le risque principal\",\n\"Attendre la r\u00e9action des passagers\",\n\"Confier toute la d\u00e9cision au PNC le plus proche\"\n],\ncorrect:1,\nexplain:\"Le chef de cabine doit d'abord identifier le risque prioritaire et construire une compr\u00e9hension fiable de la situation.\"\n},\n\n{\nq:\"Quelle attitude de leadership est la plus efficace ?\",\nanswers:[\n\"Tout faire personnellement\",\n\"Distribuer les r\u00f4les clairement et contr\u00f4ler l'ex\u00e9cution\",\n\"\u00c9viter toute d\u00e9l\u00e9gation\",\n\"Laisser chaque membre d\u00e9cider seul\"\n],\ncorrect:1,\nexplain:\"Un leadership efficace repose sur la clart\u00e9, la d\u00e9l\u00e9gation adapt\u00e9e et le suivi.\"\n},\n\n{\nq:\"Quelle communication privil\u00e9gier ?\",\nanswers:[\n\"Longue et d\u00e9taill\u00e9e\",\n\"Claire, courte et factuelle\",\n\"Ambigu\u00eb pour rester flexible\",\n\"Uniquement non verbale\"\n],\ncorrect:1,\nexplain:\"Une communication concise r\u00e9duit les erreurs et am\u00e9liore la coordination.\"\n},\n\n{\nq:\"Quel r\u00e9flexe CRM est le plus important ?\",\nanswers:[\n\"Conserver l'information pour soi\",\n\"Partager les informations pertinentes\",\n\"\u00c9viter de contredire un sup\u00e9rieur\",\n\"Reporter toute remarque apr\u00e8s le vol\"\n],\ncorrect:1,\nexplain:\"Le CRM repose sur le partage d'information, la conscience de la situation et la coop\u00e9ration.\"\n},\n\n{\nq:\"Que faire si la situation \u00e9volue ?\",\nanswers:[\n\"Conserver le plan initial\",\n\"R\u00e9\u00e9valuer et adapter les actions\",\n\"Arr\u00eater toute d\u00e9cision\",\n\"Attendre la fin du vol\"\n],\ncorrect:1,\nexplain:\"La situation doit \u00eatre r\u00e9\u00e9valu\u00e9e en continu lorsque les conditions changent.\"\n},\n\n{\nq:\"Quelle erreur est la plus dangereuse ?\",\nanswers:[\n\"Confirmer les informations\",\n\"Donner des consignes contradictoires\",\n\"D\u00e9l\u00e9guer\",\n\"Informer le cockpit\"\n],\ncorrect:1,\nexplain:\"Des consignes contradictoires peuvent d\u00e9grader rapidement la coordination.\"\n},\n\n{\nq:\"Un membre d'\u00e9quipage signale une anomalie. Que faire ?\",\nanswers:[\n\"L'ignorer\",\n\"\u00c9couter, v\u00e9rifier et int\u00e9grer l'information\",\n\"Le r\u00e9primander\",\n\"Attendre la fin du service\"\n],\ncorrect:1,\nexplain:\"Tout signal pertinent doit \u00eatre \u00e9valu\u00e9 et int\u00e9gr\u00e9 dans la conscience de la situation.\"\n},\n\n{\nq:\"Quelle est la meilleure approche face \u00e0 un passager difficile ?\",\nanswers:[\n\"R\u00e9pondre sur le m\u00eame ton\",\n\"\u00c9couter, poser des limites claires et d\u00e9sescalader\",\n\"Promettre ce qu'il demande\",\n\"Ignorer syst\u00e9matiquement\"\n],\ncorrect:1,\nexplain:\"La d\u00e9sescalade combine \u00e9coute, fermet\u00e9 et respect des proc\u00e9dures.\"\n},\n\n{\nq:\"Lors d'une situation critique, comment g\u00e9rer la charge de travail ?\",\nanswers:[\n\"Tout centraliser\",\n\"Prioriser, d\u00e9l\u00e9guer et suivre\",\n\"Reporter toutes les t\u00e2ches\",\n\"R\u00e9duire les communications\"\n],\ncorrect:1,\nexplain:\"La gestion de charge de travail est une comp\u00e9tence centrale du Chef de Cabine.\"\n},\n\n{\nq:\"Quel type de compte rendu est utile au cockpit ?\",\nanswers:[\n\"Tr\u00e8s long\",\n\"Factuel et orient\u00e9 d\u00e9cision\",\n\"Bas\u00e9 sur des suppositions\",\n\"Uniquement \u00e9motionnel\"\n],\ncorrect:1,\nexplain:\"Le cockpit a besoin d'informations exploitables rapidement.\"\n},\n\n{\nq:\"Quelle hi\u00e9rarchie des priorit\u00e9s est la plus appropri\u00e9e ?\",\nanswers:[\n\"Service puis s\u00e9curit\u00e9\",\n\"S\u00e9curit\u00e9 puis besoins op\u00e9rationnels puis service\",\n\"Confort uniquement\",\n\"Priorit\u00e9 au passager VIP\"\n],\ncorrect:1,\nexplain:\"La s\u00e9curit\u00e9 doit rester la priorit\u00e9 principale.\"\n},\n\n{\nq:\"En cas de conflit \u00e9quipage, que doit faire le Chef de Cabine ?\",\nanswers:[\n\"Laisser le conflit se poursuivre\",\n\"Clarifier les faits et recentrer sur l'objectif op\u00e9rationnel\",\n\"Choisir syst\u00e9matiquement le plus ancien\",\n\"Reporter toutes les d\u00e9cisions\"\n],\ncorrect:1,\nexplain:\"Le chef de cabine doit pr\u00e9server la coop\u00e9ration et maintenir la priorit\u00e9 op\u00e9rationnelle.\"\n},\n\n{\nq:\"Lors d'un incident m\u00e9dical, quel est son r\u00f4le principal ?\",\nanswers:[\n\"Poser un diagnostic d\u00e9finitif\",\n\"Coordonner les ressources et appliquer les proc\u00e9dures\",\n\"Administrer tout m\u00e9dicament disponible\",\n\"Laisser uniquement le passager g\u00e9rer\"\n],\ncorrect:1,\nexplain:\"Le chef de cabine coordonne la r\u00e9ponse selon la formation et les proc\u00e9dures.\"\n},\n\n{\nq:\"Face \u00e0 une odeur de fum\u00e9e, que faut-il faire ?\",\nanswers:[\n\"L'ignorer\",\n\"Rechercher rapidement la source selon proc\u00e9dure\",\n\"Attendre la fin du service\",\n\"Ouvrir tous les compartiments sans \u00e9valuation\"\n],\ncorrect:1,\nexplain:\"Les signes de feu ou fum\u00e9e n\u00e9cessitent une r\u00e9ponse structur\u00e9e et imm\u00e9diate.\"\n},\n\n{\nq:\"Pourquoi le briefing \u00e9quipage est-il essentiel ?\",\nanswers:[\n\"Pour r\u00e9partir uniquement le service\",\n\"Pour cr\u00e9er une compr\u00e9hension commune des r\u00f4les et risques\",\n\"Pour v\u00e9rifier uniquement les uniformes\",\n\"Il n'est pas essentiel\"\n],\ncorrect:1,\nexplain:\"Le briefing permet de pr\u00e9parer la coordination et l'anticipation.\"\n}\n\n];\n\n\n\/* ======================================================\nPSEUDO RANDOM\n====================================================== *\/\n\nfunction pseudoRandom(seed){\n\n  let x =\n  Math.sin(seed * 9283.173) *\n  43758.5453;\n\n  return x - Math.floor(x);\n\n}\n\n\n\/* ======================================================\nG\u00c9N\u00c9RATEUR QCM\n====================================================== *\/\n\nfunction getQcm(id){\n\n  const scenario =\n  scenarios[\n    Math.floor(\n      pseudoRandom(id*2.17) *\n      scenarios.length\n    )\n  ];\n\n\n  const template =\n  qcmTemplates[\n    Math.floor(\n      pseudoRandom(id*7.61) *\n      qcmTemplates.length\n    )\n  ];\n\n\n  const level =\n  levels[\n    Math.min(\n      4,\n      Math.floor(\n        (id-1) \/\n        200000\n      )\n    )\n  ];\n\n\n  return{\n\n    id:id,\n\n    category:\n    scenario.category,\n\n    level:level,\n\n    scenario:\n    scenario,\n\n    question:\n    template.q,\n\n    answers:[\n      ...template.answers\n    ],\n\n    correct:\n    template.correct,\n\n    explanation:\n    template.explain+\n    \" Conduite recommand\u00e9e : \"+\n    scenario.action\n\n  };\n\n}\n\n\n\/* ======================================================\nSTATE\n====================================================== *\/\n\nlet state =\nJSON.parse(\n  localStorage.getItem(\n    \"MZA_CDC_MASTER\"\n  )\n) || {\n\n  score:0,\n  correct:0,\n  answered:0,\n  history:{}\n\n};\n\n\nfunction saveState(){\n\n  localStorage.setItem(\n    \"MZA_CDC_MASTER\",\n    JSON.stringify(state)\n  );\n\n  updateStats();\n\n}\n\n\nfunction updateStats(){\n\n  document.getElementById(\"score\")\n  .textContent=\n  state.score.toLocaleString(\"fr-FR\");\n\n\n  document.getElementById(\"scoreTop\")\n  .textContent=\n  state.score.toLocaleString(\"fr-FR\");\n\n\n  document.getElementById(\"correct\")\n  .textContent=\n  state.correct.toLocaleString(\"fr-FR\");\n\n\n  document.getElementById(\"answered\")\n  .textContent=\n  state.answered.toLocaleString(\"fr-FR\");\n\n\n  document.getElementById(\"answeredTop\")\n  .textContent=\n  state.answered.toLocaleString(\"fr-FR\");\n\n\n  const accuracy =\n  state.answered\n  ?\n  Math.round(\n    state.correct \/\n    state.answered *\n    100\n  )\n  :\n  0;\n\n\n  document.getElementById(\"accuracy\")\n  .textContent=\n  accuracy+\"%\";\n\n\n  const progress =\n  Math.min(\n    100,\n    state.answered \/\n    TOTAL_QCM *\n    100\n  );\n\n\n  document.getElementById(\n    \"globalProgress\"\n  ).style.width=\n  progress+\"%\";\n\n\n  let grade =\n  \"Agent de Cabine Junior\";\n\n\n  if(state.score>=5000)\n    grade=\"PNC Op\u00e9rationnel\";\n\n  if(state.score>=15000)\n    grade=\"PNC Confirm\u00e9\";\n\n  if(state.score>=30000)\n    grade=\"Chef de Cabine\";\n\n  if(state.score>=50000)\n    grade=\"Chef de Cabine Senior\";\n\n  if(state.score>=100000)\n    grade=\"Expert Commandement Cabine\";\n\n\n  document.getElementById(\n    \"gradeTop\"\n  ).textContent=\n  grade;\n\n}\n\n\n\/* ======================================================\nSCENARIOS\n====================================================== *\/\n\nfunction renderScenarios(){\n\n  const category =\n  document.getElementById(\n    \"scenarioCategory\"\n  ).value;\n\n\n  const severity =\n  document.getElementById(\n    \"scenarioSeverity\"\n  ).value;\n\n\n  const search =\n  document.getElementById(\n    \"scenarioSearch\"\n  ).value.toLowerCase();\n\n\n  const list =\n  document.getElementById(\n    \"scenarioList\"\n  );\n\n\n  list.innerHTML=\"\";\n\n\n  scenarios\n  .filter(s=>\n\n    (\n      category===\"all\"\n      ||\n      s.category===category\n    )\n\n    &&\n\n    (\n      severity===\"all\"\n      ||\n      s.severity==severity\n    )\n\n    &&\n\n    (\n      s.title\n      .toLowerCase()\n      .includes(search)\n\n      ||\n\n      s.context\n      .toLowerCase()\n      .includes(search)\n    )\n\n  )\n  .slice(0,100)\n  .forEach(s=>{\n\n    const div =\n    document.createElement(\"div\");\n\n\n    div.className =\n    \"card \" +\n    (\n      s.severity===4\n      ?\n      \"critical\"\n      :\n      s.severity===3\n      ?\n      \"warning\"\n      :\n      \"\"\n    );\n\n\n    div.innerHTML=`\n\n    <span class=\"tag\">\n    Sc\u00e9nario ${s.id}\n    <\/span>\n\n    <span class=\"tag\">\n    ${s.category}\n    <\/span>\n\n    <span class=\"tag gold\">\n    ${s.phase}\n    <\/span>\n\n    <span class=\"tag ${\n      s.severity===4\n      ?\n      \"red\"\n      :\n      \"green\"\n    }\">\n\n    Gravit\u00e9 ${s.severity}\n\n    <\/span>\n\n    <h3>\n    ${s.title}\n    <\/h3>\n\n    <p>\n    ${s.context}\n    <\/p>\n\n    <details>\n\n    <summary>\n    <strong>\n    Voir la conduite recommand\u00e9e\n    <\/strong>\n    <\/summary>\n\n    <div class=\"explanation\">\n\n    ${s.action}\n\n    <\/div>\n\n    <\/details>\n\n    `;\n\n\n    list.appendChild(div);\n\n  });\n\n}\n\n\n\/* ======================================================\nQCM RENDER\n====================================================== *\/\n\nfunction renderQcm(){\n\n  const list =\n  document.getElementById(\n    \"qcmList\"\n  );\n\n\n  list.innerHTML=\"\";\n\n\n  const category =\n  document.getElementById(\n    \"qcmCategory\"\n  ).value;\n\n\n  const level =\n  document.getElementById(\n    \"qcmLevel\"\n  ).value;\n\n\n  let start =\n  (qcmCurrentPage-1) *\n  qcmPageSize + 1;\n\n\n  let id=start;\n\n  let rendered=0;\n\n  let guard=0;\n\n\n  while(\n    rendered<qcmPageSize\n    &#038;&#038;\n    id<=TOTAL_QCM\n    &#038;&#038;\n    guard<20000\n  ){\n\n    guard++;\n\n    const q=\n    getQcm(id);\n\n\n    const catOK =\n    category===\"all\"\n    ||\n    q.category===category;\n\n\n    const levelOK =\n    level===\"all\"\n    ||\n    q.level===level;\n\n\n    if(catOK &#038;&#038; levelOK){\n\n      renderQcmCard(q);\n\n      rendered++;\n\n    }\n\n\n    id++;\n\n  }\n\n\n  const totalPages =\n  Math.ceil(\n    TOTAL_QCM \/\n    qcmPageSize\n  );\n\n\n  document.getElementById(\n    \"qcmPageInfo\"\n  ).textContent=\n  \"Page \"+\n  qcmCurrentPage.toLocaleString(\"fr-FR\")+\n  \" \/ \"+\n  totalPages.toLocaleString(\"fr-FR\");\n\n}\n\n\n\/* ======================================================\nQCM CARD\n====================================================== *\/\n\nfunction renderQcmCard(q){\n\n  const list =\n  document.getElementById(\n    \"qcmList\"\n  );\n\n\n  const div =\n  document.createElement(\"div\");\n\n\n  div.className=\"card\";\n\n\n  let answersHTML=\"\";\n\n\n  q.answers.forEach(\n    (answer,index)=>{\n\n      answersHTML+=`\n\n      <button\n      class=\"answer\"\n      onclick=\"\n        answerQcm(\n          ${q.id},\n          ${index},\n          this\n        )\n      \">\n\n      ${String.fromCharCode(65+index)}\n      \u2014 ${answer}\n\n      <\/button>\n\n      `;\n\n    }\n  );\n\n\n  div.innerHTML=`\n\n  <span class=\"tag\">\n  QCM ${q.id.toLocaleString(\"fr-FR\")}\n  <\/span>\n\n  <span class=\"tag\">\n  ${q.category}\n  <\/span>\n\n  <span class=\"tag gold\">\n  ${q.level}\n  <\/span>\n\n  <h3>\n  ${q.scenario.title}\n  <\/h3>\n\n  <p>\n  ${q.scenario.context}\n  <\/p>\n\n  <p>\n  <strong>\n  ${q.question}\n  <\/strong>\n  <\/p>\n\n  ${answersHTML}\n\n  <div id=\"qcmExplain-${q.id}\">\n  <\/div>\n\n  `;\n\n\n  list.appendChild(div);\n\n}\n\n\n\/* ======================================================\nQCM ANSWER\n====================================================== *\/\n\nfunction answerQcm(\n  id,\n  answer,\n  button\n){\n\n  const q=\n  getQcm(id);\n\n\n  const parent=\n  button.parentElement;\n\n\n  const buttons=\n  parent.querySelectorAll(\n    \".answer\"\n  );\n\n\n  buttons.forEach(\n    b=>b.disabled=true\n  );\n\n\n  const first=\n  !state.history[id];\n\n\n  if(answer===q.correct){\n\n    button.classList.add(\n      \"good\"\n    );\n\n\n    if(first){\n\n      state.score+=100;\n      state.correct++;\n\n    }\n\n  }\n\n  else{\n\n    button.classList.add(\n      \"bad\"\n    );\n\n\n    buttons[\n      q.correct\n    ].classList.add(\n      \"good\"\n    );\n\n\n    if(first){\n\n      state.score+=10;\n\n    }\n\n  }\n\n\n  if(first){\n\n    state.answered++;\n\n    state.history[id]=\n    answer===q.correct;\n\n  }\n\n\n  document.getElementById(\n    \"qcmExplain-\"+id\n  ).innerHTML=`\n\n  <div class=\"explanation\">\n\n  <strong>\n  D\u00e9briefing Chef de Cabine\n  <\/strong>\n\n  <br><br>\n\n  ${q.explanation}\n\n  <\/div>\n\n  `;\n\n\n  saveState();\n\n}\n\n\n\/* ======================================================\nNAV QCM\n====================================================== *\/\n\nfunction nextQcmPage(){\n\n  const totalPages =\n  Math.ceil(\n    TOTAL_QCM \/\n    qcmPageSize\n  );\n\n\n  if(qcmCurrentPage<totalPages){\n\n    qcmCurrentPage++;\n\n    renderQcm();\n\n  }\n\n}\n\n\nfunction previousQcmPage(){\n\n  if(qcmCurrentPage>1){\n\n    qcmCurrentPage--;\n\n    renderQcm();\n\n  }\n\n}\n\n\nfunction changeQcmPageSize(){\n\n  qcmPageSize=\n  parseInt(\n    document.getElementById(\n      \"qcmPageSize\"\n    ).value\n  );\n\n\n  qcmCurrentPage=1;\n\n  renderQcm();\n\n}\n\n\nfunction resetQcmPage(){\n\n  qcmCurrentPage=1;\n\n  renderQcm();\n\n}\n\n\nfunction jumpQcm(){\n\n  const id=\n  parseInt(\n    document.getElementById(\n      \"jumpQcm\"\n    ).value\n  );\n\n\n  if(\n    !id\n    ||\n    id<1\n    ||\n    id>TOTAL_QCM\n  ){\n\n    alert(\n      \"Entrez un num\u00e9ro entre 1 et 1 000 000.\"\n    );\n\n    return;\n\n  }\n\n\n  qcmCurrentPage=\n  Math.floor(\n    (id-1) \/\n    qcmPageSize\n  )+1;\n\n\n  renderQcm();\n\n}\n\n\nfunction randomQcmPage(){\n\n  const totalPages=\n  Math.ceil(\n    TOTAL_QCM \/\n    qcmPageSize\n  );\n\n\n  qcmCurrentPage=\n  Math.floor(\n    Math.random() *\n    totalPages\n  )+1;\n\n\n  renderQcm();\n\n}\n\n\n\/* ======================================================\nTABS\n====================================================== *\/\n\nfunction showTab(\n  tab,\n  button\n){\n\n  document.querySelectorAll(\n    \".tab\"\n  )\n  .forEach(\n    b=>b.classList.remove(\n      \"active\"\n    )\n  );\n\n\n  button.classList.add(\n    \"active\"\n  );\n\n\n  document.getElementById(\n    \"tabScenarios\"\n  ).classList.add(\n    \"hidden\"\n  );\n\n\n  document.getElementById(\n    \"tabQcm\"\n  ).classList.add(\n    \"hidden\"\n  );\n\n\n  document.getElementById(\n    \"tabExam\"\n  ).classList.add(\n    \"hidden\"\n  );\n\n\n  if(tab===\"scenarios\"){\n\n    document.getElementById(\n      \"tabScenarios\"\n    ).classList.remove(\n      \"hidden\"\n    );\n\n  }\n\n\n  if(tab===\"qcm\"){\n\n    document.getElementById(\n      \"tabQcm\"\n    ).classList.remove(\n      \"hidden\"\n    );\n\n  }\n\n\n  if(tab===\"exam\"){\n\n    document.getElementById(\n      \"tabExam\"\n    ).classList.remove(\n      \"hidden\"\n    );\n\n  }\n\n}\n\n\n\/* ======================================================\nEXAM\n====================================================== *\/\n\nlet examQuestions=[];\nlet examScore=0;\nlet examAnswered=0;\nlet examSeconds=2700;\nlet examInterval=null;\n\n\nfunction startExam(){\n\n  examQuestions=[];\n\n  examScore=0;\n\n  examAnswered=0;\n\n  examSeconds=2700;\n\n\n  for(let i=0;i<50;i++){\n\n    let id=\n    Math.floor(\n      Math.random() *\n      TOTAL_QCM\n    )+1;\n\n\n    examQuestions.push(\n      getQcm(id)\n    );\n\n  }\n\n\n  renderExam();\n\n\n  if(examInterval){\n\n    clearInterval(\n      examInterval\n    );\n\n  }\n\n\n  examInterval=\n  setInterval(()=>{\n\n    examSeconds--;\n\n    updateExamTimer();\n\n\n    if(examSeconds<=0){\n\n      stopExam();\n\n    }\n\n  },1000);\n\n}\n\n\nfunction renderExam(){\n\n  const list=\n  document.getElementById(\n    \"examList\"\n  );\n\n\n  list.innerHTML=\"\";\n\n\n  examQuestions\n  .forEach(\n    (q,index)=>{\n\n      const div=\n      document.createElement(\n        \"div\"\n      );\n\n\n      div.className=\"card\";\n\n\n      let html=\"\";\n\n\n      q.answers\n      .forEach(\n        (answer,aIndex)=>{\n\n          html+=`\n\n          <button\n          class=\"answer\"\n          onclick=\"\n          answerExam(\n          ${index},\n          ${aIndex},\n          this\n          )\">\n\n          ${String.fromCharCode(\n            65+aIndex\n          )}\n          \u2014 ${answer}\n\n          <\/button>\n\n          `;\n\n        }\n      );\n\n\n      div.innerHTML=`\n\n      <span class=\"tag\">\n      Examen ${index+1}\/50\n      <\/span>\n\n      <span class=\"tag\">\n      ${q.category}\n      <\/span>\n\n      <h3>\n      ${q.scenario.title}\n      <\/h3>\n\n      <p>\n      ${q.question}\n      <\/p>\n\n      ${html}\n\n      `;\n\n\n      list.appendChild(div);\n\n    }\n  );\n\n}\n\n\nfunction answerExam(\n  index,\n  answer,\n  button\n){\n\n  const q=\n  examQuestions[index];\n\n\n  const parent=\n  button.parentElement;\n\n\n  const buttons=\n  parent.querySelectorAll(\n    \".answer\"\n  );\n\n\n  buttons.forEach(\n    b=>b.disabled=true\n  );\n\n\n  examAnswered++;\n\n\n  if(answer===q.correct){\n\n    button.classList.add(\n      \"good\"\n    );\n\n    examScore++;\n\n  }\n\n  else{\n\n    button.classList.add(\n      \"bad\"\n    );\n\n\n    buttons[\n      q.correct\n    ].classList.add(\n      \"good\"\n    );\n\n  }\n\n\n  if(examAnswered===50){\n\n    stopExam();\n\n  }\n\n}\n\n\nfunction updateExamTimer(){\n\n  const min=\n  Math.floor(\n    examSeconds\/60\n  );\n\n\n  const sec=\n  examSeconds%60;\n\n\n  document.getElementById(\n    \"examTimer\"\n  ).textContent=\n  String(min).padStart(2,\"0\")\n  +\":\"\n  +String(sec).padStart(2,\"0\");\n\n}\n\n\nfunction stopExam(){\n\n  if(examInterval){\n\n    clearInterval(\n      examInterval\n    );\n\n    examInterval=null;\n\n  }\n\n\n  const percent=\n  examAnswered\n  ?\n  Math.round(\n    examScore \/\n    examAnswered *\n    100\n  )\n  :\n  0;\n\n\n  let result=\n  \"Non valid\u00e9\";\n\n\n  if(percent>=70)\n    result=\"Valid\u00e9\";\n\n  if(percent>=85)\n    result=\"Tr\u00e8s bien\";\n\n  if(percent>=95)\n    result=\"Excellence\";\n\n\n  const box=\n  document.getElementById(\n    \"examResult\"\n  );\n\n\n  box.classList.remove(\n    \"hidden\"\n  );\n\n\n  box.innerHTML=`\n\n  <h2>\n  R\u00e9sultat examen\n  <\/h2>\n\n  <p>\n  Questions trait\u00e9es :\n  <strong>\n  ${examAnswered}\n  <\/strong>\n  <\/p>\n\n  <p>\n  Bonnes r\u00e9ponses :\n  <strong>\n  ${examScore}\n  <\/strong>\n  <\/p>\n\n  <p>\n  Score :\n  <strong>\n  ${percent}%\n  <\/strong>\n  <\/p>\n\n  <p>\n  Niveau :\n  <strong>\n  ${result}\n  <\/strong>\n  <\/p>\n\n  `;\n\n}\n\n\n\/* ======================================================\nINIT\n====================================================== *\/\n\nrenderScenarios();\n\nrenderQcm();\n\nupdateStats();\n\n<\/script>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Chef de Cabine Master Engine | Maroc Zain Academy MAROC ZAIN ACADEMY \u2022 CHEF DE CABINE Master Cabin Crew Engine 1 000 sc\u00e9narios ma\u00eetres + 1 000 000 QCM Leadership cabine, s\u00e9curit\u00e9, s\u00fbret\u00e9, CRM, m\u00e9dical, \u00e9vacuation, turbulence, feu, passagers difficiles, gestion \u00e9quipage et commandement. Progression globale Score : 0 Grade : Agent de Cabine Junior [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3018","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/3018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/types\/page"}],"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=3018"}],"version-history":[{"count":2,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/3018\/revisions"}],"predecessor-version":[{"id":3117,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/3018\/revisions\/3117"}],"wp:attachment":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/media?parent=3018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}