{"id":5342,"date":"2026-08-27T12:38:44","date_gmt":"2026-08-27T12:38:44","guid":{"rendered":"https:\/\/maroczain.com\/?page_id=5342"},"modified":"2026-08-27T12:48:06","modified_gmt":"2026-08-27T12:48:06","slug":"5342-2","status":"publish","type":"page","link":"https:\/\/maroczain.com\/en\/5342-2\/","title":{"rendered":"Un moteur unique pour \u00e9valuer le savoir, le jugement et la d\u00e9cision"},"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\">\n<title>Maroc Zain Academy \u2014 Exam Engine V12 Expert<\/title>\n<style>\n:root{\n  --mza:#0e4167;--mza2:#082d49;--gold:#e9c84a;--ink:#17324d;--muted:#6b7b8c;\n  --bg:#f5f8fb;--card:#fff;--ok:#1d7a46;--danger:#b93737;--line:#dfe7ee;\n}\n*{box-sizing:border-box}\nbody{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--ink)}\nheader{background:linear-gradient(135deg,var(--mza2),var(--mza));color:#fff;padding:22px 28px;position:sticky;top:0;z-index:20;box-shadow:0 8px 25px #06243c22}\n.wrap{max-width:1240px;margin:auto}\n.brand{display:flex;justify-content:space-between;gap:20px;align-items:center;flex-wrap:wrap}\n.brand h1{font-size:22px;margin:0}\n.brand p{margin:4px 0 0;color:#d8e8f4}\n.badge{background:var(--gold);color:#17324d;font-weight:800;padding:8px 12px;border-radius:999px}\n.hero{margin:24px auto;display:grid;grid-template-columns:1.25fr .75fr;gap:20px}\n.hero-card,.visual,.panel,.question{background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:0 8px 30px #17324d0f}\n.hero-card{padding:28px}\n.hero-card h2{font-size:34px;line-height:1.05;margin:0 0 12px}\n.hero-card p{color:var(--muted);font-size:16px}\n.visual{overflow:hidden;min-height:280px;position:relative;background:linear-gradient(160deg,#eaf3fa,#fff)}\n.visual svg{width:100%;height:100%;display:block}\n.tabs{display:flex;gap:10px;flex-wrap:wrap;margin:20px 0}\n.tabbtn{border:1px solid var(--line);background:#fff;color:var(--ink);padding:11px 16px;border-radius:12px;font-weight:700;cursor:pointer}\n.tabbtn.active{background:var(--mza);color:white;border-color:var(--mza)}\n.panel{padding:22px;margin-bottom:22px}\n.panel.hidden{display:none}\n.controls{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}\nlabel{font-size:13px;font-weight:700}\nselect,input,textarea{width:100%;margin-top:6px;padding:11px;border:1px solid #cfdbe5;border-radius:10px;font:inherit;background:#fff}\ntextarea{min-height:130px;resize:vertical}\nbutton.primary{background:var(--mza);color:#fff;border:none;padding:12px 16px;border-radius:10px;font-weight:800;cursor:pointer}\nbutton.secondary{background:#fff;color:var(--mza);border:1px solid var(--mza);padding:12px 16px;border-radius:10px;font-weight:800;cursor:pointer}\n.exam-head{display:flex;justify-content:space-between;gap:12px;align-items:center;flex-wrap:wrap;margin:16px 0}\n.timer{font-size:20px;font-weight:900;background:#eef5fa;padding:10px 14px;border-radius:12px}\n.progress{height:10px;background:#e5edf3;border-radius:999px;overflow:hidden}\n.progress>span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--mza),var(--gold))}\n.question{padding:18px;margin:14px 0}\n.question h3{margin-top:0}\n.meta{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}\n.chip{background:#eef5fa;padding:6px 9px;border-radius:999px;font-size:12px;font-weight:800}\n.opts label{display:block;padding:9px;border:1px solid var(--line);border-radius:10px;margin:8px 0;cursor:pointer;font-weight:500}\n.opts input{width:auto;margin-right:8px}\n.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin-top:18px}\n.notice{padding:12px 14px;border-radius:12px;background:#fff8d8;border:1px solid #ead77c}\n.ok{background:#e8f7ef;border-color:#b9dfc9}\n.danger{background:#fdeaea;border-color:#f1bcbc}\n.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.stat{padding:18px;border:1px solid var(--line);border-radius:14px;background:#fbfdff}\n.stat b{display:block;font-size:28px;color:var(--mza)}\ntable{width:100%;border-collapse:collapse}\nth,td{padding:10px;border-bottom:1px solid var(--line);text-align:left;font-size:14px}\nfooter{padding:30px;text-align:center;color:var(--muted)}\n@media(max-width:900px){.hero{grid-template-columns:1fr}.controls{grid-template-columns:1fr 1fr}.grid2{grid-template-columns:1fr}}\n@media(max-width:600px){.controls{grid-template-columns:1fr}.hero-card h2{font-size:28px}}\n<\/style>\n<\/head>\n<body>\n<header>\n  <div class=\"wrap brand\">\n    <div>\n      <h1>MAROC ZAIN ACADEMY \u2014 EXAM ENGINE V12 EXPERT<\/h1>\n      <p>QCM \u2022 Examens \u00e9crits \u2022 \u00c9tudes de cas \u2022 Oral \u2022 Jury \u2022 Pilotage<\/p>\n    <\/div>\n    <div class=\"badge\">Mode professionnel<\/div>\n  <\/div>\n<\/header>\n\n<main class=\"wrap\">\n  <section class=\"hero\">\n    <div class=\"hero-card\">\n      <h2>Un moteur unique pour \u00e9valuer le savoir, le jugement et la d\u00e9cision.<\/h2>\n      <p>Le candidat travaille dans un espace s\u00e9curis\u00e9 sans corrig\u00e9. Les \u00e9l\u00e9ments attendus, bar\u00e8mes et grilles de comp\u00e9tences restent dans l\u2019espace Jury \/ Administration.<\/p>\n      <div class=\"notice\"><b>Principe cl\u00e9 :<\/b> aucune bonne r\u00e9ponse ni explication n\u2019est affich\u00e9e dans l\u2019interface candidat.<\/div>\n    <\/div>\n    <div class=\"visual\" aria-label=\"Illustration parlante du moteur d'examen\">\n      <svg viewBox=\"0 0 640 360\" role=\"img\" aria-label=\"Candidat face \u00e0 un tableau d'examen avec jury s\u00e9par\u00e9\">\n        <defs>\n          <linearGradient id=\"g\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\"><stop stop-color=\"#0e4167\"\/><stop offset=\"1\" stop-color=\"#082d49\"\/><\/linearGradient>\n        <\/defs>\n        <rect width=\"640\" height=\"360\" fill=\"#edf5fa\"\/>\n        <rect x=\"40\" y=\"45\" rx=\"18\" width=\"360\" height=\"220\" fill=\"url(#g)\"\/>\n        <rect x=\"65\" y=\"70\" rx=\"10\" width=\"310\" height=\"150\" fill=\"#fff\"\/>\n        <rect x=\"85\" y=\"92\" width=\"185\" height=\"14\" rx=\"7\" fill=\"#d6e4ee\"\/>\n        <rect x=\"85\" y=\"122\" width=\"255\" height=\"10\" rx=\"5\" fill=\"#e4edf4\"\/>\n        <rect x=\"85\" y=\"145\" width=\"230\" height=\"10\" rx=\"5\" fill=\"#e4edf4\"\/>\n        <rect x=\"85\" y=\"175\" width=\"120\" height=\"24\" rx=\"12\" fill=\"#e9c84a\"\/>\n        <circle cx=\"210\" cy=\"305\" r=\"28\" fill=\"#e8b58b\"\/>\n        <path d=\"M160 350c8-35 30-50 50-50s44 15 52 50\" fill=\"#0e4167\"\/>\n        <rect x=\"455\" y=\"65\" width=\"140\" height=\"210\" rx=\"18\" fill=\"#fff\" stroke=\"#cfdae4\"\/>\n        <circle cx=\"525\" cy=\"115\" r=\"26\" fill=\"#e8b58b\"\/>\n        <path d=\"M480 185c8-36 30-50 45-50s38 14 46 50\" fill=\"#17324d\"\/>\n        <rect x=\"480\" y=\"205\" width=\"90\" height=\"9\" rx=\"4\" fill=\"#dfe7ee\"\/>\n        <rect x=\"480\" y=\"225\" width=\"70\" height=\"9\" rx=\"4\" fill=\"#dfe7ee\"\/>\n        <text x=\"92\" y=\"255\" font-family=\"Arial\" font-size=\"18\" fill=\"#fff\">ESPACE CANDIDAT<\/text>\n        <text x=\"487\" y=\"255\" font-family=\"Arial\" font-size=\"16\" fill=\"#0e4167\">JURY<\/text>\n      <\/svg>\n    <\/div>\n  <\/section>\n\n  <div class=\"tabs\">\n    <button class=\"tabbtn active\" data-tab=\"candidate\">Candidat<\/button>\n    <button class=\"tabbtn\" data-tab=\"jury\">Jury<\/button>\n    <button class=\"tabbtn\" data-tab=\"admin\">Administration<\/button>\n  <\/div>\n\n  <section id=\"candidate\" class=\"panel\">\n    <h2>Espace candidat<\/h2>\n    <div class=\"controls\">\n      <div><label>M\u00e9tier<select id=\"job\">\n        <option>Agent d&rsquo;escale<\/option><option>Chef d&rsquo;escale<\/option><option>Superviseur vol<\/option>\n        <option>Chef de cabine<\/option><option>OCC \/ Dispatch<\/option><option>Cargo<\/option>\n        <option>Commercial<\/option><option>Repr\u00e9sentant r\u00e9gional<\/option><option>Directeur des ventes<\/option>\n        <option>Directeur a\u00e9roport<\/option><option>Revenue Management<\/option><option>Direction g\u00e9n\u00e9rale<\/option>\n      <\/select><\/label><\/div>\n      <div><label>Niveau<select id=\"level\">\n        <option>N1 \u2014 Fondamentaux<\/option><option>N2 \u2014 Application<\/option><option>N3 \u2014 Analyse<\/option>\n        <option>N4 \u2014 Cas complexes<\/option><option>N5 \u2014 Management<\/option><option>N6 \u2014 Jury Expert<\/option>\n      <\/select><\/label><\/div>\n      <div><label>Type d&rsquo;\u00e9preuve<select id=\"etype\">\n        <option value=\"mixed\">Mixte<\/option><option value=\"qcm\">QCM<\/option><option value=\"written\">\u00c9crit professionnel<\/option>\n        <option value=\"case\">\u00c9tude de cas<\/option><option value=\"oral\">Oral<\/option>\n      <\/select><\/label><\/div>\n      <div><label>Dur\u00e9e<select id=\"duration\">\n        <option value=\"30\">30 min<\/option><option value=\"60\" selected>60 min<\/option><option value=\"90\">90 min<\/option>\n        <option value=\"120\">2 h<\/option><option value=\"180\">3 h<\/option><option value=\"240\">4 h<\/option>\n      <\/select><\/label><\/div>\n    <\/div>\n\n    <div class=\"toolbar\">\n      <button class=\"primary\" onclick=\"startExam()\">G\u00e9n\u00e9rer et commencer l&rsquo;\u00e9preuve<\/button>\n      <button class=\"secondary\" onclick=\"saveDraft()\">Sauvegarder le brouillon<\/button>\n    <\/div>\n\n    <div id=\"examArea\" style=\"display:none\">\n      <div class=\"exam-head\">\n        <div><b id=\"examTitle\">\u00c9preuve<\/b><div id=\"examMeta\" style=\"color:var(--muted)\"><\/div><\/div>\n        <div class=\"timer\" id=\"timer\">60:00<\/div>\n      <\/div>\n      <div class=\"progress\"><span id=\"bar\"><\/span><\/div>\n      <div id=\"questions\"><\/div>\n      <div class=\"toolbar\">\n        <button class=\"secondary\" onclick=\"saveDraft()\">Sauvegarder<\/button>\n        <button class=\"primary\" onclick=\"submitExam()\">Remettre d\u00e9finitivement<\/button>\n      <\/div>\n      <div id=\"candidateMsg\" style=\"margin-top:12px\"><\/div>\n    <\/div>\n  <\/section>\n\n  <section id=\"jury\" class=\"panel hidden\">\n    <h2>Espace Jury \/ Correcteur<\/h2>\n    <div class=\"notice danger\"><b>Acc\u00e8s prot\u00e9g\u00e9 \u00e0 pr\u00e9voir en production.<\/b> Cette d\u00e9monstration montre la structure mais ne r\u00e9v\u00e8le rien dans l\u2019espace candidat.<\/div>\n    <div class=\"grid2\" style=\"margin-top:16px\">\n      <div class=\"stat\"><b>100 pts<\/b>Bar\u00e8me total configurable<\/div>\n      <div class=\"stat\"><b>6 axes<\/b>Exactitude \u2022 Priorisation \u2022 Proc\u00e9dure \u2022 Communication \u2022 Risque \u2022 D\u00e9cision<\/div>\n    <\/div>\n    <h3>Grille de correction type<\/h3>\n    <table>\n      <thead><tr><th>Crit\u00e8re<\/th><th>Poids<\/th><th>Observation<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td>Compr\u00e9hension de la situation<\/td><td>20%<\/td><td>Identifier faits, contraintes et enjeux.<\/td><\/tr>\n        <tr><td>Priorisation op\u00e9rationnelle<\/td><td>20%<\/td><td>Ordre logique et gestion des urgences.<\/td><\/tr>\n        <tr><td>Respect des proc\u00e9dures<\/td><td>20%<\/td><td>Coh\u00e9rence, tra\u00e7abilit\u00e9, conformit\u00e9.<\/td><\/tr>\n        <tr><td>Qualit\u00e9 de la d\u00e9cision<\/td><td>20%<\/td><td>D\u00e9cision argument\u00e9e et r\u00e9aliste.<\/td><\/tr>\n        <tr><td>Communication professionnelle<\/td><td>10%<\/td><td>Clart\u00e9, ton, destinataires, synth\u00e8se.<\/td><\/tr>\n        <tr><td>Gestion du risque<\/td><td>10%<\/td><td>Anticipation des cons\u00e9quences.<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n    <h3>Zone de correction<\/h3>\n    <label>Appr\u00e9ciation du jury<textarea placeholder=\"Appr\u00e9ciation, points forts, \u00e9carts observ\u00e9s, recommandations...\"><\/textarea><\/label>\n    <div class=\"controls\" style=\"margin-top:12px\">\n      <div><label>Note \/100<input type=\"number\" min=\"0\" max=\"100\" value=\"70\"><\/label><\/div>\n      <div><label>D\u00e9cision<select><option>Admis<\/option><option>Ajourn\u00e9<\/option><option>\u00c0 revoir<\/option><option>Jury compl\u00e9mentaire<\/option><\/select><\/label><\/div>\n    <\/div>\n  <\/section>\n\n  <section id=\"admin\" class=\"panel hidden\">\n    <h2>Administration &#038; Pilotage<\/h2>\n    <div class=\"grid2\">\n      <div class=\"stat\"><b id=\"bankCount\">18<\/b>Sujets param\u00e9triques de d\u00e9monstration<\/div>\n      <div class=\"stat\"><b>\u221e<\/b>Variantes possibles par combinaison m\u00e9tier\/niveau\/type<\/div>\n      <div class=\"stat\"><b>Auto<\/b>Sauvegarde locale du brouillon<\/div>\n      <div class=\"stat\"><b>Strict<\/b>Corrig\u00e9s isol\u00e9s du candidat<\/div>\n    <\/div>\n    <h3>Fonctions pr\u00e9vues pour la version WordPress<\/h3>\n    <p>Comptes utilisateurs, authentification, r\u00f4les, historique des tentatives, export PDF, banque de sujets en base de donn\u00e9es, import CSV\/JSON, g\u00e9n\u00e9ration de variantes, notation manuelle ou assist\u00e9e, statistiques, certificats, audit, anti-triche, verrouillage navigateur et journal des actions.<\/p>\n  <\/section>\n<\/main>\n\n<footer>Maroc Zain Academy \u2014 Exam Engine V12 Expert<\/footer>\n\n<script>\nconst bank = [\n{t:\"written\",q:\"R\u00e9digez une note op\u00e9rationnelle de 250 \u00e0 400 mots exposant votre plan d'action face \u00e0 un retard important avec correspondances menac\u00e9es.\",tag:\"\u00c9crit professionnel\"},\n{t:\"written\",q:\"R\u00e9digez un rapport d'incident structur\u00e9 : faits, impacts, d\u00e9cisions prises, actions correctives et suivi.\",tag:\"Rapport\"},\n{t:\"written\",q:\"Expliquez comment vous hi\u00e9rarchisez trois urgences simultan\u00e9es : passager prioritaire, bagage non charg\u00e9 et contrainte de d\u00e9part.\",tag:\"Priorisation\"},\n{t:\"case\",q:\"Cas complexe : un vol subit une contrainte technique, 22 correspondances courtes, 14 bagages en anomalie et un groupe VIP. Produisez diagnostic, priorit\u00e9s, d\u00e9cisions et plan de communication.\",tag:\"\u00c9tude de cas\"},\n{t:\"case\",q:\"Un dossier comporte des informations contradictoires entre exploitation, commercial et escale. Identifiez ce qui doit \u00eatre v\u00e9rifi\u00e9 avant d\u00e9cision et proposez une s\u00e9quence d'actions.\",tag:\"D\u00e9cision\"},\n{t:\"case\",q:\"Vous disposez de 25 minutes avant la fermeture d'une phase op\u00e9rationnelle. Construisez un plan en 5 d\u00e9cisions maximum et justifiez chaque choix.\",tag:\"Temps contraint\"},\n{t:\"qcm\",q:\"Face \u00e0 une information op\u00e9rationnelle non confirm\u00e9e, quelle attitude est la plus professionnelle ?\",opts:[\"D\u00e9cider imm\u00e9diatement sans v\u00e9rifier\",\"V\u00e9rifier la source et \u00e9valuer l'impact\",\"Attendre sans informer personne\",\"Transmettre la rumeur \u00e0 tous\"],tag:\"QCM\"},\n{t:\"qcm\",q:\"Lors d'un incident multi-acteurs, quel principe doit guider la communication ?\",opts:[\"Multiplier les messages ind\u00e9pendants\",\"Centraliser les faits valid\u00e9s et d\u00e9finir les destinataires\",\"\u00c9viter toute trace \u00e9crite\",\"Communiquer uniquement apr\u00e8s la fin de l'incident\"],tag:\"QCM\"},\n{t:\"qcm\",q:\"Dans une situation \u00e0 forte contrainte temps, la premi\u00e8re \u00e9tape consiste \u00e0 :\",opts:[\"Traiter le sujet le plus visible\",\"Identifier les risques critiques et les \u00e9ch\u00e9ances\",\"Appeler tous les services sans ordre\",\"Reporter la d\u00e9cision\"],tag:\"QCM\"},\n{t:\"oral\",q:\"Pr\u00e9parez une r\u00e9ponse orale de 3 minutes : comment annoncer une d\u00e9cision difficile \u00e0 un client tout en prot\u00e9geant la relation commerciale ?\",tag:\"Oral\"},\n{t:\"oral\",q:\"Simulation jury : d\u00e9fendez une d\u00e9cision op\u00e9rationnelle contest\u00e9e par deux services internes.\",tag:\"Oral\"},\n{t:\"written\",q:\"R\u00e9digez un courriel professionnel destin\u00e9 \u00e0 une direction, r\u00e9sumant l'incident en moins de 180 mots avec trois d\u00e9cisions demand\u00e9es.\",tag:\"Communication\"},\n{t:\"written\",q:\"Produisez une synth\u00e8se ex\u00e9cutive d'une page \u00e0 partir d'un incident complexe : contexte, risque, option A, option B, recommandation.\",tag:\"Synth\u00e8se\"},\n{t:\"case\",q:\"Un \u00e9v\u00e9nement cr\u00e9e simultan\u00e9ment un risque s\u00e9curit\u00e9, une insatisfaction client et un impact financier. Classez ces enjeux et argumentez votre arbitrage.\",tag:\"Arbitrage\"},\n{t:\"case\",q:\"Le plan initial devient impossible \u00e0 ex\u00e9cuter \u00e0 mi-parcours. D\u00e9crivez comment vous r\u00e9\u00e9valuez la situation et documentez la nouvelle d\u00e9cision.\",tag:\"Adaptation\"},\n{t:\"written\",q:\"D\u00e9crivez une proc\u00e9dure de retour d'exp\u00e9rience apr\u00e8s incident : donn\u00e9es \u00e0 collecter, acteurs \u00e0 consulter, enseignements et actions.\",tag:\"REX\"},\n{t:\"qcm\",q:\"Une d\u00e9cision de qualit\u00e9 doit principalement \u00eatre :\",opts:[\"Rapide uniquement\",\"Document\u00e9e, proportionn\u00e9e et tra\u00e7able\",\"Toujours valid\u00e9e par le plus grand nombre\",\"Identique dans toutes les situations\"],tag:\"QCM\"},\n{t:\"oral\",q:\"Pr\u00e9sentez au jury un briefing de 2 minutes avant prise de d\u00e9cision dans une situation critique.\",tag:\"Briefing\"}\n];\n\nlet remaining=3600, tick=null, activeQuestions=[];\n\nfunction switchTab(id){\n document.querySelectorAll(\".panel\").forEach(p=>p.classList.add(\"hidden\"));\n document.getElementById(id).classList.remove(\"hidden\");\n document.querySelectorAll(\".tabbtn\").forEach(b=>b.classList.toggle(\"active\",b.dataset.tab===id));\n}\ndocument.querySelectorAll(\".tabbtn\").forEach(b=>b.onclick=()=>switchTab(b.dataset.tab));\n\nfunction sample(arr,n){return [...arr].sort(()=>Math.random()-0.5).slice(0,n)}\nfunction startExam(){\n const type=document.getElementById(\"etype\").value;\n const level=document.getElementById(\"level\").value;\n const job=document.getElementById(\"job\").value;\n const mins=parseInt(document.getElementById(\"duration\").value,10);\n let pool = type===\"mixed\" ? bank : bank.filter(x=>x.t===type);\n if(pool.length<6) pool=bank;\n activeQuestions=sample(pool,Math.min(8,pool.length));\n remaining=mins*60;\n document.getElementById(\"examArea\").style.display=\"block\";\n document.getElementById(\"examTitle\").textContent=job+\" \u2014 \"+level;\n document.getElementById(\"examMeta\").textContent=activeQuestions.length+\" questions \u2022 \"+mins+\" minutes \u2022 \"+(type===\"mixed\"?\"\u00c9preuve mixte\":type);\n renderQuestions();\n updateTimer();\n clearInterval(tick); tick=setInterval(()=>{remaining--; updateTimer(); if(remaining<=0){clearInterval(tick); submitExam(true)}},1000);\n window.scrollTo({top:document.getElementById(\"examArea\").offsetTop-90,behavior:\"smooth\"});\n}\nfunction renderQuestions(){\n const box=document.getElementById(\"questions\"); box.innerHTML=\"\";\n activeQuestions.forEach((x,i)=>{\n  const d=document.createElement(\"div\"); d.className=\"question\";\n  let body=\"\";\n  if(x.opts){\n   body='<div class=\"opts\">'+x.opts.map((o,j)=>`<label><input type=\"radio\" name=\"q${i}\" value=\"${j}\"> ${o}<\/label>`).join(\"\")+'<\/div>';\n  } else {\n   body=`<textarea data-q=\"${i}\" placeholder=\"Votre r\u00e9ponse...\"><\/textarea><div style=\"font-size:12px;color:#6b7b8c;margin-top:6px\">R\u00e9ponse enregistrable en brouillon. Aucun corrig\u00e9 n'est affich\u00e9.<\/div>`;\n  }\n  d.innerHTML=`<div class=\"meta\"><span class=\"chip\">${x.tag}<\/span><span class=\"chip\">Question ${i+1}\/${activeQuestions.length}<\/span><\/div><h3>${x.q}<\/h3>${body}`;\n  box.appendChild(d);\n });\n box.querySelectorAll(\"textarea,input\").forEach(el=>el.addEventListener(\"input\",updateProgress));\n updateProgress();\n}\nfunction updateProgress(){\n const total=activeQuestions.length; let done=0;\n activeQuestions.forEach((x,i)=>{\n  if(x.opts){ if(document.querySelector(`input[name=\"q${i}\"]:checked`)) done++; }\n  else { const t=document.querySelector(`textarea[data-q=\"${i}\"]`); if(t&&t.value.trim().length>10) done++; }\n });\n document.getElementById(\"bar\").style.width=(total?done\/total*100:0)+\"%\";\n}\nfunction updateTimer(){\n const m=Math.max(0,Math.floor(remaining\/60)), s=Math.max(0,remaining%60);\n document.getElementById(\"timer\").textContent=String(m).padStart(2,\"0\")+\":\"+String(s).padStart(2,\"0\");\n}\nfunction collect(){\n return activeQuestions.map((x,i)=>{\n  if(x.opts){const r=document.querySelector(`input[name=\"q${i}\"]:checked`);return r?r.value:\"\";}\n  const t=document.querySelector(`textarea[data-q=\"${i}\"]`);return t?t.value:\"\";\n });\n}\nfunction saveDraft(){\n localStorage.setItem(\"mza_v12_draft\",JSON.stringify({time:new Date().toISOString(),answers:collect()}));\n document.getElementById(\"candidateMsg\").innerHTML='<div class=\"notice ok\"><b>Brouillon sauvegard\u00e9.<\/b> Les r\u00e9ponses restent sur cet appareil.<\/div>';\n}\nfunction submitExam(auto=false){\n clearInterval(tick);\n const ans=collect();\n localStorage.setItem(\"mza_v12_submission\",JSON.stringify({time:new Date().toISOString(),answers:ans}));\n document.querySelectorAll(\"#questions textarea,#questions input\").forEach(el=>el.disabled=true);\n document.getElementById(\"candidateMsg\").innerHTML='<div class=\"notice ok\"><b>\u00c9preuve remise'+(auto?' automatiquement \u00e0 la fin du temps':'')+'.<\/b> Aucun corrig\u00e9 ni bonne r\u00e9ponse n\u2019est affich\u00e9 dans l\u2019espace candidat.<\/div>';\n}\ndocument.getElementById(\"bankCount\").textContent=bank.length;\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Maroc Zain Academy \u2014 Exam Engine V12 Expert MAROC ZAIN ACADEMY \u2014 EXAM ENGINE V12 EXPERT QCM \u2022 Examens \u00e9crits \u2022 \u00c9tudes de cas \u2022 Oral \u2022 Jury \u2022 Pilotage Mode professionnel Un moteur unique pour \u00e9valuer le savoir, le jugement et la d\u00e9cision. Le candidat travaille dans un espace s\u00e9curis\u00e9 sans corrig\u00e9. Les \u00e9l\u00e9ments [&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-5342","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/5342","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=5342"}],"version-history":[{"count":2,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/5342\/revisions"}],"predecessor-version":[{"id":5351,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/5342\/revisions\/5351"}],"wp:attachment":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/media?parent=5342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}