{"id":1121,"date":"2026-10-18T19:55:20","date_gmt":"2026-10-18T17:55:20","guid":{"rendered":"https:\/\/www.hashdezo.fr\/index.php\/alm-runner\/"},"modified":"2026-10-23T10:52:44","modified_gmt":"2026-10-23T08:52:44","slug":"alm-runner","status":"publish","type":"page","link":"https:\/\/www.hashdezo.fr\/index.php\/alm-runner\/","title":{"rendered":"ALM Runner"},"content":{"rendered":"\n<div class=\"hz-alm-runner\" style=\"width:100%;max-width:1280px;margin:0 auto;padding:8px 0 40px\"><iframe id=\"hz-runner-frame\" title=\"ALM Runner, jeu d\u00e9monstrateur SAP Cloud ALM\" scrolling=\"no\" style=\"display:block;width:100%;height:900px;border:0;background:#FAF9F6\"><\/iframe><\/div>\n<script type=\"text\/plain\" id=\"hz-runner-src\">\n<!doctype html><html lang=\"fr\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>ALM Runner<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Mono:wght@400;500;600&#038;family=Schibsted+Grotesk:wght@400;500;600;700;800&#038;display=swap\">\n<style>\n\/* Layout : colonne unique centr\u00e9e. Page cr\u00e8me HASHdezO, plateau de jeu encre, accent or. Un seul look assum\u00e9 (charte du site). *\/\n:root{\n  --ink:#141412; --panel:#1C1C1A; --tube:#2E2E2A;\n  --cream:#FAF9F6; --paper:#EDEBE5; --line:#E2E0DA;\n  --gold:#E7B84A; --gold-pale:#F6EBCB;\n  --grey:#6B6A64; --grey-dk:#3A3A36;\n  --f-display:'Schibsted Grotesk', 'Helvetica Neue', Arial, sans-serif;\n  --f-mono:'IBM Plex Mono', ui-monospace, 'SFMono-Regular', Menlo, monospace;\n}\nhtml,body{background:var(--cream);color:var(--ink)}\nbody{font-family:var(--f-display);-webkit-font-smoothing:antialiased;\n  padding-left:max(16px, env(safe-area-inset-left, 0px));\n  padding-right:max(16px, env(safe-area-inset-right, 0px));\n  padding-block:20px 32px}\n*{box-sizing:border-box}\n.wrap{max-width:1280px;margin:0 auto;display:grid;grid-template-columns:auto 320px;justify-content:center;gap:32px;align-items:start}\n.keys div{flex-wrap:wrap}\n.side{display:flex;flex-direction:column;gap:24px;min-width:0}\n.keys{display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--ink);padding-top:12px}\n.keys div{display:flex;align-items:center;gap:10px;font-size:14px}\n.keys kbd{font:600 12px var(--f-mono);border:1px solid var(--ink);border-bottom-width:2px;border-radius:5px;padding:3px 7px;background:#fff;min-width:26px;text-align:center}\n.keys h3{margin:0 0 4px}\nheader{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:14px}\n.brand{font-weight:800;font-size:22px;letter-spacing:-.03em}\n.brand span{background:linear-gradient(transparent 62%, var(--gold) 62%)}\n.mono{font-family:var(--f-mono);font-size:12px;color:var(--grey);letter-spacing:.02em}\n\n.card{background:var(--ink);color:var(--cream);border-radius:8px;padding:14px;display:flex;flex-direction:column;gap:10px}\n.hud{display:grid;grid-template-columns:auto 1fr auto;gap:6px 14px;align-items:end}\n.hud .lab{font-family:var(--f-mono);font-size:11px;color:#9C9A92;text-transform:uppercase;letter-spacing:.08em}\n.score{font-size:32px;font-weight:800;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums}\n.phase{min-width:0}\n.phase b{display:block;font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.bar{height:6px;background:var(--grey-dk);border-radius:999px;overflow:hidden;margin-top:6px}\n.bar i{display:block;height:100%;width:0;background:var(--gold);transition:width .2s}\n.prog{font-family:var(--f-mono);font-size:11px;color:#C9C6BC;margin-top:5px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.lives{display:flex;gap:4px;justify-content:flex-end}\n.lives i{width:16px;height:16px;border-radius:4px;background:var(--gold);color:var(--ink);font:700 11px\/16px var(--f-mono);text-align:center;font-style:normal}\n.lives i.off{background:var(--grey-dk);color:#55534D}\n\n.stage{position:relative;display:flex;justify-content:center;touch-action:none;user-select:none;-webkit-user-select:none}\ncanvas{display:block;max-width:100%;border-radius:4px}\n.toast{position:absolute;left:50%;top:8px;transform:translateX(-50%);max-width:92%;background:var(--gold);color:var(--ink);font:600 13px\/1.3 var(--f-display);padding:8px 14px;border-radius:999px;text-align:center;pointer-events:none;box-shadow:0 6px 20px rgba(0,0,0,.35);transition:opacity .2s}\n.toast small{display:block;font:500 11px\/1.3 var(--f-mono)}\n.ov{position:absolute;inset:0;background:rgba(20,20,18,.9);border-radius:4px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:14px;padding:clamp(20px,5%,48px);overflow:auto;text-align:left}\n.ov .eyebrow{font-family:var(--f-mono);font-size:12px;color:var(--gold);letter-spacing:.04em}\n.ov h1{margin:0;font-size:clamp(34px,9vw,52px);font-weight:800;letter-spacing:-.04em;line-height:.95}\n.ov h1 em{font-style:normal;color:var(--gold)}\n.ov h2{margin:0;font-size:clamp(26px,6.5vw,38px);font-weight:800;letter-spacing:-.03em;line-height:1.02;text-wrap:balance}\n.ov p{margin:0;font-size:16px;line-height:1.5;color:#D8D5CC;max-width:46ch}\n.ov p.punch{color:var(--cream);font-weight:600;font-size:16px}\n.rules{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;font-size:14px;line-height:1.4;color:#D8D5CC}\n.rules li{padding-left:16px;position:relative}\n.rules li:before{content:'';position:absolute;left:0;top:7px;width:7px;height:7px;background:var(--gold);border-radius:2px}\n.rules b{color:var(--cream)}\n.btn{font:600 16px\/1.2 var(--f-display);padding:13px 24px;border-radius:999px;border:1px solid var(--gold);background:var(--gold);color:var(--ink);cursor:pointer}\n.btn:hover{background:var(--gold-pale)}\n.btn.ghost{background:transparent;color:var(--cream);border-color:#55534D}\n.btn.ghost:hover{background:var(--grey-dk)}\n.btn:focus-visible,.dpad button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--gold);outline-offset:3px}\n.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}\n.hint{font-family:var(--f-mono);font-size:11px;color:#9C9A92}\n.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;width:100%;border-top:1px solid #3A3A36;padding-top:10px}\n.stats b{display:block;font-size:22px;font-weight:800;font-variant-numeric:tabular-nums}\n.stats span{font-family:var(--f-mono);font-size:10px;color:#9C9A92;text-transform:uppercase;letter-spacing:.06em}\n.res{width:100%;display:flex;flex-direction:column}\n.res div{display:grid;grid-template-columns:14px minmax(0,1fr) auto;gap:8px;align-items:center;padding:5px 0;border-bottom:1px solid #2E2E2A;font-size:13px}\n.res small{display:block;font-family:var(--f-mono);font-size:10px;color:#9C9A92}\n.res b{font-variant-numeric:tabular-nums}\n.tri{width:14px;height:13px;clip-path:polygon(50% 0,100% 100%,0 100%);display:block}\n.board{width:100%;font-family:var(--f-mono);font-size:12px;color:#C9C6BC}\n.board ol{margin:4px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:2px}\n.board li{display:grid;grid-template-columns:22px 1fr auto;gap:8px;font-variant-numeric:tabular-nums}\n.board li.me{color:var(--gold)}\ninput#initials{font:600 16px var(--f-mono);width:92px;padding:10px 12px;border-radius:6px;border:1px solid #55534D;background:var(--panel);color:var(--cream);text-transform:uppercase;letter-spacing:.15em}\n.cta{width:100%;border-top:1px solid #3A3A36;padding-top:12px;display:flex;flex-direction:column;gap:8px}\n.cta a{color:var(--gold);font-weight:600;text-decoration:none;border-bottom:2px solid var(--gold);align-self:flex-start;padding-bottom:2px}\n.cta .mono{color:#C9C6BC;user-select:text;-webkit-user-select:text}\n\n\n.legend h3{margin:0 0 10px;font-size:17px;font-weight:700;letter-spacing:-.01em}\n.chips{display:grid;grid-template-columns:minmax(0,1fr);gap:0;border-top:1px solid var(--ink)}\n.chips>div{display:grid;grid-template-columns:16px minmax(0,1fr);gap:10px;padding:11px 0;border-bottom:1px solid var(--line);align-items:start}\n.chips .tri{width:16px;height:15px;margin-top:2px}\n.chips b{display:block;font-size:14px;font-weight:600;line-height:1.3}\n.chips span{font-family:var(--f-mono);font-size:11px;color:var(--grey);line-height:1.4}\n.chips .pw{border-radius:50%;width:15px;height:15px;background:var(--gold);box-shadow:0 0 0 3px var(--gold-pale)}\nfooter{display:flex;justify-content:space-between;gap:8px 16px;flex-wrap:wrap}\nfooter a{color:var(--ink);font-weight:600;font-size:14px;text-decoration:none;border-bottom:2px solid var(--gold)}\n@media (max-width:900px){.wrap{grid-template-columns:minmax(0,1fr)}}\n.legend h3,.keys h3{font-size:17px;font-weight:700;letter-spacing:-.01em}\n@media (prefers-reduced-motion:reduce){.bar i,.toast{transition:none}}\n<\/style>\n<style>html,body{margin:0}[hidden]{display:none!important}img{max-width:100%}<\/style><\/head><body>\n\n<div class=\"wrap\">\n\n  <section class=\"card\" aria-label=\"Jeu ALM Runner\">\n    <div class=\"hud\">\n      <div><div class=\"lab\">Score<\/div><div class=\"score\" id=\"score\">0<\/div><\/div>\n      <div class=\"phase\"><div class=\"lab\" id=\"phaseLab\">Phase 1 \/ 5<\/div><b id=\"phaseName\">Prepare<\/b><div class=\"bar\"><i id=\"bar\"><\/i><\/div><div class=\"prog\" id=\"prog\">0 \/ 0 t\u00e2ches de cadrage<\/div><\/div>\n      <div><div class=\"lab\" style=\"text-align:right\">Vies<\/div><div class=\"lives\" id=\"lives\"><\/div><\/div>\n    <\/div>\n    <div class=\"stage\" id=\"stage\">\n      <canvas id=\"board\" aria-label=\"Plateau de jeu\"><\/canvas>\n      <div class=\"toast\" id=\"toast\" hidden><\/div>\n      <div class=\"ov\" id=\"ov\"><\/div>\n    <\/div>\n  <\/section>\n\n  <aside class=\"side\">\n  <section class=\"keys\">\n    <h3>Commandes<\/h3>\n    <div><kbd>\u2191<\/kbd><kbd>\u2193<\/kbd><kbd>\u2190<\/kbd><kbd>\u2192<\/kbd><span>ou<\/span><kbd>Z<\/kbd><kbd>Q<\/kbd><kbd>S<\/kbd><kbd>D<\/kbd><span>se d\u00e9placer<\/span><\/div>\n    <div><kbd>P<\/kbd><span>ou<\/span><kbd>\u00c9chap<\/kbd><span>pause<\/span><\/div>\n  <\/section>\n\n  <section class=\"legend\">\n    <h3>Les incidents qui r\u00f4dent, et l\u2019app Cloud ALM qui les traite<\/h3>\n    <div class=\"chips\" id=\"chips\"><\/div>\n  <\/section>\n\n  <footer>\n    <span class=\"mono\">Jeu de d\u00e9monstration \u00b7 client et donn\u00e9es fictifs<\/span>\n    <a href=\"https:\/\/www.hashdezo.fr\/index.php\/contact\/\" target=\"_blank\" rel=\"noopener\">Diagnostic Cloud ALM gratuit<\/a>\n  <\/footer>\n  <\/aside>\n<\/div>\n\n<script>\n(function(){\n'use strict';\nvar MAP=[\n\"###################\",\n\"#........#........#\",\n\"#o##.###.#.###.##o#\",\n\"#.................#\",\n\"#.##.#.#####.#.##.#\",\n\"#....#...#...#....#\",\n\"####.### # ###.####\",\n\"####.#       #.####\",\n\"####.# ##-## #.####\",\n\"    .  #GGG#  .    \",\n\"####.# ##### #.####\",\n\"####.#       #.####\",\n\"####.# ##### #.####\",\n\"#........#........#\",\n\"#.##.###.#.###.##.#\",\n\"#o.#.....P.....#.o#\",\n\"##.#.#.#####.#.#.##\",\n\"#....#...#...#....#\",\n\"#.######.#.######.#\",\n\"#.................#\",\n\"###################\"];\nvar COLS=19, ROWS=21, TUN=9;\nvar START={x:9,y:15}, EXIT={x:9,y:7}, JOULE={x:9,y:11};\n\nvar PHASES=[\n {name:'Prepare', item:'t\u00e2ches de cadrage', text:'Cloud ALM structure ton projet d\u00e8s le d\u00e9part : phases SAP Activate, t\u00e2ches, responsables et \u00e9ch\u00e9ances au m\u00eame endroit.', dot:'chaque point est une t\u00e2che de cadrage'},\n {name:'Explore', item:'exigences', text:'Les exigences issues des ateliers Fit-to-Standard sont centralis\u00e9es et rattach\u00e9es aux processus m\u00e9tier.', dot:'chaque point est une exigence valid\u00e9e'},\n {name:'Realize', item:'cas de test', text:'La gestion des tests pr\u00e9pare, ex\u00e9cute et trace les tests, manuels ou automatis\u00e9s. Tu sais ce qui est couvert.', dot:'chaque point est un cas de test r\u00e9ussi'},\n {name:'Deploy', item:'transports', text:'Change & Deployment : chaque fonctionnalit\u00e9 suit son chemin DEV, QAS, PRD, avec tra\u00e7abilit\u00e9 de bout en bout.', dot:'chaque point est un transport import\u00e9'},\n {name:'Run', item:'contr\u00f4les de sant\u00e9', text:'En production, le monitoring prend le relais : processus m\u00e9tier, int\u00e9grations, jobs et exp\u00e9rience utilisateur.', dot:'chaque point est un contr\u00f4le de sant\u00e9 au vert'}\n];\nvar GDEF=[\n {name:'Job planifi\u00e9 en \u00e9chec', app:'Job & Automation Monitoring', color:'#D9483B', glyph:'J'},\n {name:'Interface en erreur', app:'Integration & Exception Monitoring', color:'#7B61FF', glyph:'I'},\n {name:'Temps de r\u00e9ponse d\u00e9grad\u00e9', app:'Real User Monitoring', color:'#E8892B', glyph:'P'},\n {name:'Processus m\u00e9tier bloqu\u00e9', app:'Business Process Monitoring', color:'#1FA38C', glyph:'B'}\n];\nvar DIRS=[{x:0,y:-1},{x:-1,y:0},{x:0,y:1},{x:1,y:0}];\nvar KEYMAP={ArrowUp:'up',ArrowDown:'down',ArrowLeft:'left',ArrowRight:'right',z:'up',w:'up',s:'down',q:'left',a:'left',d:'right'};\nvar DV={up:{x:0,y:-1},down:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0}};\n\nvar $=function(id){return document.getElementById(id)};\nvar cv=$('board'), ctx=cv.getContext('2d'), ov=$('ov'), toastEl=$('toast');\nvar reduce=matchMedia('(prefers-reduced-motion: reduce)').matches;\nvar ts=20, dpr=1, wallLayer=null;\n\n\/* ---------- storage (best effort) ---------- *\/\nfunction loadTop(){try{var v=JSON.parse(localStorage.getItem('almrunner.top')||'[]');return Array.isArray(v)?v:[]}catch(e){return []}}\nfunction saveTop(t){try{localStorage.setItem('almrunner.top',JSON.stringify(t))}catch(e){}}\n\n\/* ---------- map helpers ---------- *\/\nfunction cell(x,y){if(y<0||y>=ROWS||x<0||x>=COLS)return '#';return MAP[y][x]}\nfunction isWall(x,y){var c=cell(x,y);return c==='#'||c==='-'||c==='G'}\nfunction walkable(x,y){if(y===TUN&&(x<0||x>=COLS))return true;return !isWall(x,y)}\nfunction wrapX(x){return x<0?COLS-1:(x>=COLS?0:x)}\n\n\/* ---------- sizing & static walls ---------- *\/\nfunction viewH(){try{return window.parent.innerHeight||window.innerHeight}catch(e){return window.innerHeight}}\nfunction resize(){\n  var bw=document.documentElement.clientWidth, w=bw-32-28;\n  if(bw>900)w-=320+32;\n  var t=Math.floor(Math.min(w\/COLS,(viewH()-140)\/ROWS));\n  ts=Math.max(16,Math.min(44,t));\n  dpr=Math.min(2,window.devicePixelRatio||1);\n  cv.width=COLS*ts*dpr; cv.height=ROWS*ts*dpr;\n  cv.style.width=COLS*ts+'px'; cv.style.height=ROWS*ts+'px';\n  buildWalls();\n}\nfunction isEdgeWall(x,y){\n  if(cell(x,y)!=='#')return false;\n  for(var dy=-1;dy<=1;dy++)for(var dx=-1;dx<=1;dx++){\n    var nx=x+dx, ny=y+dy;\n    if(ny<0||ny>=ROWS||nx<0||nx>=COLS)continue;\n    var c=MAP[ny][nx]; if(c!=='#')return true;\n  }\n  return false;\n}\nfunction buildWalls(){\n  wallLayer=document.createElement('canvas');\n  wallLayer.width=cv.width; wallLayer.height=cv.height;\n  var g=wallLayer.getContext('2d'); g.scale(dpr,dpr);\n  g.fillStyle='#1C1C1A'; g.fillRect(0,0,COLS*ts,ROWS*ts);\n  var segs=[];\n  for(var y=0;y<ROWS;y++)for(var x=0;x<COLS;x++){\n    if(!isEdgeWall(x,y))continue;\n    segs.push([x,y,x,y]);\n    if(isEdgeWall(x+1,y))segs.push([x,y,x+1,y]);\n    if(isEdgeWall(x,y+1))segs.push([x,y,x,y+1]);\n  }\n  function stroke(width,color){\n    g.lineCap='round'; g.lineJoin='round'; g.lineWidth=width; g.strokeStyle=color;\n    g.beginPath();\n    segs.forEach(function(s){g.moveTo((s[0]+.5)*ts,(s[1]+.5)*ts);g.lineTo((s[2]+.5)*ts+.01,(s[3]+.5)*ts)});\n    g.stroke();\n  }\n  stroke(ts*.56,'#2E2E2A');\n  stroke(Math.max(1.5,ts*.09),'rgba(231,184,74,.55)');\n  \/* gate of the incident house *\/\n  g.strokeStyle='rgba(231,184,74,.9)'; g.lineWidth=Math.max(2,ts*.12); g.setLineDash([ts*.18,ts*.12]);\n  g.beginPath(); g.moveTo(8.6*ts,8.5*ts); g.lineTo(10.4*ts,8.5*ts); g.stroke(); g.setLineDash([]);\n  g.fillStyle='rgba(231,184,74,.08)'; g.fillRect(8*ts,9*ts,3*ts,ts);\n  g.fillStyle='#6B6A64'; g.font='500 '+Math.max(8,Math.round(ts*.36))+'px \"IBM Plex Mono\", monospace'; g.textAlign='center';\n  g.fillText('PRD',9.5*ts,10.62*ts+ts*.0);\n}\n\n\/* ---------- game state ---------- *\/\nvar S={state:'start',score:0,lives:3,phase:0,lt:0,pellets:null,left:0,total:0,\n  player:null,ghosts:[],chain:0,joule:null,jouleDone:false,slowUntil:0,freeze:0,\n  stats:{items:0,resolved:[0,0,0,0],hit:[0,0,0,0]},inv:0,saved:false};\n\nfunction newPellets(){\n  S.pellets=[]; S.left=0;\n  for(var y=0;y<ROWS;y++){var r=[];for(var x=0;x<COLS;x++){var c=MAP[y][x];var v=c==='.'?1:(c==='o'?2:0);if(v)S.left++;r.push(v)}S.pellets.push(r)}\n  S.total=S.left;\n}\nfunction resetActors(){\n  S.player={tx:START.x,ty:START.y,dx:0,dy:0,p:0,want:{x:-1,y:0},anim:0};\n  S.ghosts=GDEF.map(function(d,i){return {i:i,def:d,tx:EXIT.x,ty:EXIT.y,dx:0,dy:0,p:0,state:'house',releaseAt:.6+i*2.2,fright:0,wander:.1+i*.05}});\n  S.lt=0; S.inv=1.2; S.chain=0;\n}\nfunction startGame(){\n  S.score=0; S.lives=3; S.phase=0; S.stats={items:0,resolved:[0,0,0,0],hit:[0,0,0,0]}; S.saved=false;\n  showIntro(null);\n}\nfunction setupPhase(){newPellets();resetActors();S.joule=null;S.jouleDone=false;S.slowUntil=0;hud()}\n\n\/* ---------- movement ---------- *\/\nfunction pos(e){return {x:e.tx+e.dx*e.p,y:e.ty+e.dy*e.p}}\nfunction reverse(e){if(e.dx||e.dy){if(e.p>0){e.tx=wrapX(e.tx+e.dx);e.ty+=e.dy;e.p=1-e.p}e.dx=-e.dx;e.dy=-e.dy}}\nfunction advance(e,dist,decide,onTile){\n  var guard=0;\n  while(dist>0&&guard++<12){\n    if(!e.dx&#038;&#038;!e.dy){decide(e);if(!e.dx&#038;&#038;!e.dy)return}\n    var rem=1-e.p;\n    if(dist<rem){e.p+=dist;return}\n    dist-=rem; e.tx=wrapX(e.tx+e.dx); e.ty+=e.dy; e.p=0;\n    if(onTile)onTile(e);\n    decide(e);\n  }\n}\nfunction decideP(e){\n  var w=e.want;\n  if(w&#038;&#038;walkable(e.tx+w.x,e.ty+w.y)){e.dx=w.x;e.dy=w.y}\n  else if(!walkable(e.tx+e.dx,e.ty+e.dy)){e.dx=0;e.dy=0}\n}\nfunction eatAt(e){\n  var v=S.pellets[e.ty]&#038;&#038;S.pellets[e.ty][e.tx];\n  if(!v)return;\n  S.pellets[e.ty][e.tx]=0; S.left--;\n  if(v===1){S.score+=10;S.stats.items++}\n  else{S.score+=50;power()}\n  if(!S.jouleDone&#038;&#038;S.left<=Math.floor(S.total\/2)){S.jouleDone=true;S.joule={until:S.lt+9}}\n  hud();\n  if(S.left<=0)phaseClear();\n}\nfunction targetFor(g){\n  var pl=S.player, px=pl.tx, py=pl.ty;\n  if(g.i===1)return {x:px+pl.dx*4,y:py+pl.dy*4};\n  if(g.i===2){var d=Math.abs(g.tx-px)+Math.abs(g.ty-py);return d>7?{x:px,y:py}:{x:1,y:19}}\n  if(g.i===3){var g0=S.ghosts[0];return {x:2*(px+pl.dx*2)-g0.tx,y:2*(py+pl.dy*2)-g0.ty}}\n  return {x:px,y:py};\n}\nfunction decideG(g){\n  var opts=[];\n  for(var k=0;k<4;k++){var d=DIRS[k];\n    if((g.dx||g.dy)&#038;&#038;d.x===-g.dx&#038;&#038;d.y===-g.dy)continue;\n    if(walkable(g.tx+d.x,g.ty+d.y))opts.push(d)}\n  if(!opts.length){g.dx=-g.dx;g.dy=-g.dy;return}\n  var pick;\n  if(g.fright>0||Math.random()<g.wander){pick=opts[Math.random()*opts.length|0]}\n  else{var t=targetFor(g),best=1e9;\n    opts.forEach(function(d){var nx=g.tx+d.x-t.x,ny=g.ty+d.y-t.y,s=nx*nx+ny*ny;if(s<best){best=s;pick=d}})}\n  g.dx=pick.x; g.dy=pick.y;\n}\n\n\/* ---------- events ---------- *\/\nfunction power(){\n  var dur=Math.max(3.2,7.5-S.phase*.9);\n  S.chain=0;\n  S.ghosts.forEach(function(g){if(g.state==='out'){g.fright=dur;reverse(g)}});\n  toast('Monitoring Cloud ALM activ\u00e9','Les incidents sont visibles : \u00e0 toi de les r\u00e9soudre');\n}\nfunction resolveGhost(g){\n  S.chain++; var pts=200*Math.pow(2,S.chain-1); S.score+=pts;\n  S.stats.resolved[g.i]++;\n  toast(g.def.name+' r\u00e9solu  +'+pts, 'via '+g.def.app);\n  g.state='house'; g.fright=0; g.releaseAt=S.lt+4; g.tx=EXIT.x; g.ty=EXIT.y; g.dx=g.dy=0; g.p=0;\n  hud();\n}\nfunction hitBy(g){\n  S.stats.hit[g.i]++;\n  S.lives--; hud();\n  toast('Incident en production : '+g.def.name, S.lives>0?'Tu perds une vie. Sans monitoring, tu le d\u00e9couvres trop tard.':'Plus de vies');\n  S.state='dying'; S.freeze=1.4; S.dyingBy=g;\n}\nfunction phaseClear(){\n  var bonus=500*(S.phase+1); S.score+=bonus; hud();\n  S.state='between';\n  var done=PHASES[S.phase];\n  S.phase++;\n  if(S.phase>=PHASES.length){setTimeout(function(){showEnd(true)},500)}\n  else setTimeout(function(){showIntro({name:done.name,bonus:bonus})},500);\n}\n\n\/* ---------- loop ---------- *\/\nvar last=0;\nfunction frame(t){\n  var dt=Math.min(.05,(t-last)\/1000||0); last=t;\n  if(S.state==='play')update(dt);\n  else if(S.state==='dying'){S.freeze-=dt;if(S.freeze<=0){if(S.lives>0){resetActors();S.state='play'}else showEnd(false)}}\n  draw(t\/1000);\n  requestAnimationFrame(frame);\n}\nfunction update(dt){\n  S.lt+=dt; if(S.inv>0)S.inv-=dt;\n  var pl=S.player, ph=S.phase;\n  var w=pl.want;\n  if(w&&(pl.dx||pl.dy)&&w.x===-pl.dx&&w.y===-pl.dy)reverse(pl);\n  var pSpeed=6+ph*.2;\n  advance(pl,pSpeed*dt,decideP,eatAt);\n  if(S.state!=='play')return;\n  pl.anim+=dt*((pl.dx||pl.dy)?1:0);\n  var slow=S.lt<S.slowUntil?.55:1;\n  S.ghosts.forEach(function(g){\n    if(g.state==='house'){if(S.lt>=g.releaseAt){g.state='out';g.tx=EXIT.x;g.ty=EXIT.y;g.p=0;g.dx=Math.random()<.5?-1:1;g.dy=0}return}\n    if(g.fright>0)g.fright-=dt;\n    var sp=g.fright>0?3.2:Math.min(6.4,4.5+ph*.4);\n    if(g.ty===TUN&&(g.tx<4||g.tx>14))sp*=.6;\n    advance(g,sp*slow*dt,decideG,null);\n  });\n  if(S.joule){\n    if(S.lt>S.joule.until)S.joule=null;\n    else if(pl.tx===JOULE.x&&pl.ty===JOULE.y){S.joule=null;S.score+=300;S.slowUntil=S.lt+5;hud();\n      toast('Joule entre en jeu  +300','L\u2019assistant IA t\u2019aide \u00e0 prioriser : incidents ralentis 5 s')}\n  }\n  var pp=pos(pl);\n  for(var k=0;k<S.ghosts.length;k++){var g=S.ghosts[k];if(g.state!=='out')continue;\n    var gp=pos(g), dx=gp.x-pp.x, dy=gp.y-pp.y;\n    if(Math.abs(dx)>COLS\/2)dx=COLS-Math.abs(dx);\n    if(dx*dx+dy*dy<.42){\n      if(g.fright>0)resolveGhost(g);\n      else if(S.inv<=0){hitBy(g);return}\n    }}\n}\n\n\/* ---------- drawing ---------- *\/\nfunction rr(c,x,y,w,h,r){c.beginPath();c.moveTo(x+r,y);c.arcTo(x+w,y,x+w,y+h,r);c.arcTo(x+w,y+h,x,y+h,r);c.arcTo(x,y+h,x,y,r);c.arcTo(x,y,x+w,y,r);c.closePath()}\nfunction draw(time){\n  ctx.setTransform(dpr,0,0,dpr,0,0);\n  if(wallLayer)ctx.drawImage(wallLayer,0,0,COLS*ts,ROWS*ts);\n  if(!S.pellets)newPellets();\n  var pulse=reduce?0:Math.sin(time*5)*.5+.5;\n  for(var y=0;y<ROWS;y++)for(var x=0;x<COLS;x++){\n    var v=S.pellets[y][x]; if(!v)continue;\n    var cx=(x+.5)*ts, cy=(y+.5)*ts;\n    if(v===1){ctx.fillStyle='#EDEBE5';ctx.beginPath();ctx.arc(cx,cy,Math.max(1.6,ts*.09),0,7);ctx.fill()}\n    else{\n      ctx.strokeStyle='rgba(231,184,74,'+(.25+.35*pulse)+')';ctx.lineWidth=2;ctx.beginPath();ctx.arc(cx,cy,ts*(.36+.08*pulse),0,7);ctx.stroke();\n      ctx.fillStyle='#E7B84A';ctx.beginPath();ctx.arc(cx,cy,ts*.26,0,7);ctx.fill();\n      ctx.fillStyle='#141412';ctx.font='700 '+Math.max(6,Math.round(ts*.2))+'px \"IBM Plex Mono\", monospace';ctx.textAlign='center';ctx.textBaseline='middle';\n      ctx.fillText('ALM',cx,cy+.5);\n    }\n  }\n  if(S.joule&#038;&#038;S.state==='play'){drawJoule((JOULE.x+.5)*ts,(JOULE.y+.5)*ts,time)}\n  S.ghosts.forEach(function(g,i){\n    var p, sc=1;\n    if(g.state==='house'){p={x:7.9+i*.73,y:9};sc=.72}else p=pos(g);\n    var bob=reduce?0:Math.sin(time*6+i)*ts*.04;\n    drawGhost(g,(p.x+.5)*ts,(p.y+.5)*ts+bob,sc,time);\n  });\n  if(S.player){\n    var vis=!(S.inv>0&&S.state==='play'&&Math.floor(time*10)%2===0);\n    if(S.state==='dying')vis=Math.floor(time*8)%2===0;\n    if(vis){var pp=pos(S.player);drawPlayer((pp.x+.5)*ts,(pp.y+.5)*ts,S.player,time)}\n  }\n}\nfunction drawPlayer(x,y,pl,time){\n  var s=ts*.8, ang=0;\n  if(pl.dx>0)ang=.12;else if(pl.dx<0)ang=-.12;\n  var squash=reduce?0:Math.sin(pl.anim*18)*.05;\n  ctx.save();ctx.translate(x,y);ctx.rotate(ang);ctx.scale(1+squash,1-squash);\n  ctx.shadowColor='rgba(231,184,74,.55)';ctx.shadowBlur=ts*.5;\n  ctx.fillStyle='#E7B84A';rr(ctx,-s\/2,-s\/2,s,s,s*.24);ctx.fill();ctx.shadowBlur=0;\n  ctx.strokeStyle='#141412';ctx.lineWidth=Math.max(1.6,s*.1);ctx.lineCap='round';\n  var a=s*.2,b=s*.3;\n  ctx.beginPath();\n  ctx.moveTo(-a*.55,-b);ctx.lineTo(-a*.95,b);ctx.moveTo(a*.95,-b);ctx.lineTo(a*.55,b);\n  ctx.moveTo(-b,-a*.55);ctx.lineTo(b,-a*.55);ctx.moveTo(-b,a*.55);ctx.lineTo(b,a*.55);\n  ctx.stroke();ctx.restore();\n}\nfunction drawGhost(g,x,y,sc,time){\n  var s=ts*.9*sc, fr=g.fright>0, blink=fr&&g.fright<1.8&#038;&#038;Math.floor(time*8)%2===0;\n  ctx.save();ctx.translate(x,y);\n  ctx.beginPath();ctx.moveTo(0,-s*.46);ctx.lineTo(s*.5,s*.4);ctx.lineTo(-s*.5,s*.4);ctx.closePath();\n  ctx.lineJoin='round';ctx.lineWidth=s*.16;\n  var fill=fr?(blink?g.def.color:'#FAF9F6'):g.def.color;\n  ctx.fillStyle=fill;ctx.strokeStyle=fr?'#E7B84A':fill;\n  if(!fr){ctx.shadowColor=g.def.color;ctx.shadowBlur=ts*.35}\n  ctx.stroke();ctx.fill();ctx.shadowBlur=0;\n  ctx.fillStyle=fr&#038;&#038;!blink?'#141412':'#FAF9F6';\n  ctx.font='700 '+Math.max(7,Math.round(s*.38))+'px \"IBM Plex Mono\", monospace';ctx.textAlign='center';ctx.textBaseline='middle';\n  ctx.fillText(fr&#038;&#038;!blink?'\u2713':g.def.glyph,0,s*.1);\n  ctx.restore();\n}\nfunction drawJoule(x,y,time){\n  var r=ts*.36*(1+(reduce?0:Math.sin(time*7)*.08));\n  ctx.save();ctx.translate(x,y);ctx.rotate(reduce?0:time*.8);\n  ctx.fillStyle='#FAF9F6';ctx.shadowColor='#F6EBCB';ctx.shadowBlur=ts*.6;\n  ctx.beginPath();\n  for(var i=0;i<8;i++){var a=i*Math.PI\/4, rad=i%2?r*.38:r;ctx.lineTo(Math.cos(a)*rad,Math.sin(a)*rad)}\n  ctx.closePath();ctx.fill();ctx.restore();\n}\n\n\/* ---------- HUD, toast, overlays ---------- *\/\nfunction hud(){\n  $('score').textContent=S.score.toLocaleString('fr-FR');\n  var ph=PHASES[Math.min(S.phase,PHASES.length-1)];\n  $('phaseLab').textContent='Phase '+(Math.min(S.phase,PHASES.length-1)+1)+' \/ '+PHASES.length;\n  $('phaseName').textContent=ph.name;\n  var done=S.total-S.left;\n  $('bar').style.width=(S.total?done\/S.total*100:0)+'%';\n  $('prog').textContent=done+' \/ '+S.total+' '+ph.item;\n  var h='';for(var i=0;i<3;i++)h+='<i class=\"'+(i<S.lives?'':'off')+'\">#<\/i>';\n  $('lives').innerHTML=h;\n}\nvar toastT=0;\nfunction toast(a,b){toastEl.innerHTML=esc(a)+(b?'<small>'+esc(b)+'<\/small>':'');toastEl.hidden=false;clearTimeout(toastT);toastT=setTimeout(function(){toastEl.hidden=true},2400)}\nfunction esc(s){return String(s).replace(\/[&<>\"]\/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c]})}\nfunction showOv(html){ov.innerHTML=html;ov.hidden=false;var b=ov.querySelector('[data-focus]');if(b)setTimeout(function(){b.focus({preventScroll:true})},30)}\nfunction hideOv(){ov.hidden=true}\n\nfunction topHtml(highlight){\n  var t=loadTop(); if(!t.length)return '';\n  return '<div class=\"board\"><span class=\"hint\">Meilleurs scores sur cet appareil<\/span><ol>'+t.map(function(r,i){return '<li class=\"'+(i===highlight?'me':'')+'\"><span>'+(i+1)+'.<\/span><span>'+esc(r.n)+'<\/span><span>'+Number(r.s).toLocaleString('fr-FR')+'<\/span><\/li>'}).join('')+'<\/ol><\/div>';\n}\nfunction noKeyboard(){try{return !matchMedia('(any-pointer: fine)').matches}catch(e){return false}}\nfunction showStart(){\n  S.state='start'; setupPhase();\n  if(noKeyboard()){\n    showOv('<span class=\"eyebrow\">D\u00e9monstrateur SAP Cloud ALM<\/span><h1>ALM <em>Runner<\/em><\/h1>'+\n     '<p>Ce jeu se joue sur ordinateur, au clavier. Ouvre cette page sur un PC pour lancer ton projet.<\/p>'+\n     '<div class=\"cta\"><a href=\"https:\/\/www.hashdezo.fr\/index.php\/contact\/\" target=\"_blank\" rel=\"noopener\">R\u00e9server un diagnostic Cloud ALM \u00b7 30 min, gratuit<\/a><\/div>');\n    return;\n  }\n  showOv('<span class=\"eyebrow\">D\u00e9monstrateur SAP Cloud ALM<\/span>'+\n   '<h1>ALM <em>Runner<\/em><\/h1>'+\n   '<p>Emm\u00e8ne ton projet SAP jusqu\u2019en production. Des incidents r\u00f4dent dans le paysage. Cloud ALM les rend visibles.<\/p>'+\n   '<ul class=\"rules\"><li><b>Collecte<\/b> les livrables de chaque phase du projet.<\/li><li><b>\u00c9vite<\/b> les incidents tant qu\u2019ils sont invisibles.<\/li><li><b>Attrape<\/b> une pastille ALM : le monitoring s\u2019active et tu r\u00e9sous les incidents.<\/li><\/ul>'+\n   '<div class=\"row\"><button class=\"btn\" id=\"bPlay\" data-focus>Lancer le projet<\/button><span class=\"hint\">Fl\u00e8ches ou ZQSD \u00b7 P pour la pause<\/span><\/div>'+\n   topHtml(-1));\n  $('bPlay').onclick=function(){try{if(window.frameElement)window.frameElement.scrollIntoView({behavior:'smooth',block:'start'})}catch(e){}startGame()};\n}\nfunction showIntro(prev){\n  S.state='intro'; setupPhase();\n  var ph=PHASES[S.phase];\n  var eb=prev?'Phase '+prev.name+' boucl\u00e9e \u00b7 +'+prev.bonus.toLocaleString('fr-FR'):'Implementation';\n  if(S.phase===PHASES.length-1)eb=(prev?eb+' \u00b7 ':'')+'Operations';\n  showOv('<span class=\"eyebrow\">'+esc(eb)+'<\/span>'+\n   '<span class=\"hint\">Phase '+(S.phase+1)+' \/ '+PHASES.length+'<\/span>'+\n   '<h2>'+esc(ph.name)+'<\/h2>'+\n   '<p>'+esc(ph.text)+'<\/p>'+\n   '<p class=\"hint\">Sur ce plateau, '+esc(ph.dot)+'.<\/p>'+\n   '<button class=\"btn\" id=\"bGo\" data-focus>C\u2019est parti<\/button>');\n  $('bGo').onclick=function(){hideOv();S.state='play'};\n}\nfunction showEnd(win){\n  S.state='over';\n  var res=S.stats.resolved.reduce(function(a,b){return a+b},0);\n  var phaseReached=win?PHASES.length:S.phase+1;\n  var rows=GDEF.map(function(d,i){return '<div><i class=\"tri\" style=\"background:'+d.color+'\"><\/i><span>'+esc(d.name)+'<small>'+esc(d.app)+'<\/small><\/span><b>'+S.stats.resolved[i]+'<\/b><\/div>'}).join('');\n  showOv('<span class=\"eyebrow\">'+(win?'Go-live r\u00e9ussi \u00b7 projet livr\u00e9':'Go-live compromis \u00b7 phase '+esc(PHASES[Math.min(S.phase,4)].name))+'<\/span>'+\n   '<h2>'+S.score.toLocaleString('fr-FR')+' points<\/h2>'+\n   '<div class=\"stats\"><div><b>'+phaseReached+'\/5<\/b><span>Phases<\/span><\/div><div><b>'+S.stats.items+'<\/b><span>Livrables<\/span><\/div><div><b>'+res+'<\/b><span>Incidents r\u00e9solus<\/span><\/div><\/div>'+\n   '<div class=\"res\">'+rows+'<\/div>'+\n   '<p class=\"punch\">Sans monitoring, les incidents te chassent. Avec Cloud ALM, c\u2019est toi qui chasses.<\/p>'+\n   '<div class=\"row\" id=\"saveRow\"><label class=\"hint\" for=\"initials\">Tes initiales<\/label><input id=\"initials\" maxlength=\"3\" autocomplete=\"off\" placeholder=\"ABC\"><button class=\"btn ghost\" id=\"bSave\">Enregistrer<\/button><\/div>'+\n   '<div id=\"topWrap\">'+topHtml(-1)+'<\/div>'+\n   '<div class=\"cta\"><a href=\"https:\/\/www.hashdezo.fr\/index.php\/contact\/\" target=\"_blank\" rel=\"noopener\">R\u00e9server un diagnostic Cloud ALM \u00b7 30 min, gratuit<\/a>'+\n   '<span class=\"mono\">sebastien@hashdezo.fr \u00b7 +33 6 22 61 65 16<\/span><\/div>'+\n   '<button class=\"btn\" id=\"bAgain\" data-focus>Rejouer<\/button>');\n  $('bAgain').onclick=function(){showStart()};\n  $('bSave').onclick=function(){\n    var n=($('initials').value||'???').toUpperCase().replace(\/[^A-Z0-9]\/g,'').slice(0,3)||'???';\n    var t=loadTop(); var entry={n:n,s:S.score}; t.push(entry); t.sort(function(a,b){return b.s-a.s}); t=t.slice(0,5); saveTop(t);\n    $('saveRow').hidden=true; $('topWrap').innerHTML=topHtml(t.indexOf(entry));\n  };\n}\nfunction pause(){if(S.state!=='play')return;S.state='paused';\n  showOv('<span class=\"eyebrow\">Pause<\/span><h2>Le projet attend<\/h2><button class=\"btn\" id=\"bRes\" data-focus>Reprendre<\/button>');\n  $('bRes').onclick=function(){hideOv();S.state='play'}}\n\n\/* ---------- input ---------- *\/\nfunction setDir(name){if(S.player&&DV[name])S.player.want=DV[name]}\ndocument.addEventListener('keydown',function(e){\n  if(e.target&&e.target.tagName==='INPUT')return;\n  var k=KEYMAP[e.key]||KEYMAP[e.key&&e.key.toLowerCase()];\n  if(k&&(S.state==='play'||S.state==='dying')){setDir(k);e.preventDefault();return}\n  if((e.key==='p'||e.key==='P'||e.key==='Escape')&&S.state==='play'){pause();e.preventDefault()}\n});\ndocument.addEventListener('visibilitychange',function(){if(document.hidden)pause()});\nwindow.addEventListener('blur',pause);\nwindow.addEventListener('resize',resize);\n\n\/* ---------- legend ---------- *\/\n$('chips').innerHTML=GDEF.map(function(d){return '<div><i class=\"tri\" style=\"background:'+d.color+'\"><\/i><div><b>'+esc(d.name)+'<\/b><span>'+esc(d.app)+'<\/span><\/div><\/div>'}).join('')+\n  '<div><i class=\"pw\"><\/i><div><b>Pastille ALM<\/b><span>Active le monitoring : les incidents deviennent visibles et se r\u00e9solvent<\/span><\/div><\/div>'+\n  '<div><i class=\"pw\" style=\"background:#FAF9F6;box-shadow:0 0 0 1px #141412\"><\/i><div><b>\u00c9toile Joule<\/b><span>L\u2019assistant IA ralentit les incidents pendant 5 s<\/span><\/div><\/div>';\n\nresize(); hud(); showStart();\nif(document.fonts&&document.fonts.ready)document.fonts.ready.then(function(){resize()});\nrequestAnimationFrame(frame);\n})();\n<\\\/script>\n\n<\/body><\/html>\n<\/script>\n<script>(function(){var t=document.getElementById('hz-runner-src'),f=document.getElementById('hz-runner-frame');if(!t||!f)return;f.srcdoc=t.textContent.replace(\/&#0?38;\/g,'&').replace(\/<\\\\\\\/script>\/g,'<\/'+'script>');function fit(){try{var d=f.contentDocument;if(d&&d.body){f.style.height=Math.max(600,d.documentElement.scrollHeight)+'px'}}catch(e){}}f.addEventListener('load',function(){fit();try{new ResizeObserver(fit).observe(f.contentDocument.body)}catch(e){setInterval(fit,1000)}});window.addEventListener('resize',function(){setTimeout(fit,150)});})();<\/script>\n\n\n\n<link rel='stylesheet' href='https:\/\/fonts.googleapis.com\/css2?family=Schibsted+Grotesk:wght@400;500;600;700&#038;family=IBM+Plex+Mono:wght@400;500&#038;display=swap'><div class='hzr' style='--hx:clamp(24px,4.5vw,64px);max-width:1440px;margin:48px auto 0;background:#FAF9F6;font-family:\"Schibsted Grotesk\",sans-serif;color:#141412'><footer class='hz-ft'><div><img src='https:\/\/www.hashdezo.fr\/wp-content\/uploads\/2020\/03\/Logo.jpg' alt='HASHdezO'><span class='t'>Conseil, r\u00e9alisation et formation SAP Cloud.<\/span><a href='https:\/\/support.sap.com\/en\/alm\/partners\/partner-powered-calm.html' target='_blank' rel='noopener' style='display:block;align-self:flex-start;margin-top:14px'><img src='https:\/\/www.hashdezo.fr\/wp-content\/uploads\/2026\/10\/powered-by-sap-cloud-alm.png' alt='Partner powered by SAP Cloud ALM' width='110' height='51' style='width:110px;height:auto;mix-blend-mode:normal;display:block'><\/a><\/div><div><span class='hz-m'>#HashALM<\/span><a href='\/index.php\/confluencealm\/'>Les 5 offres Cloud ALM<\/a><a href='\/index.php\/alm-city\/'>ALM City<\/a><a href='\/index.php\/alm-runner\/'>ALM Runner<\/a><\/div><div><span class='hz-m'>Expertises<\/span><a href='\/index.php\/sap-rise-with-sap\/'>Cloud ERP &amp; RISE<\/a><a href='\/index.php\/offres\/'>SAP BTP<\/a><a href='\/index.php\/sapbw4hana\/'>Data &amp; Analytics<\/a><\/div><div><span class='hz-m'>Cabinet<\/span><a href='\/index.php\/nous\/'>\u00c0 propos<\/a><a href='\/index.php\/bibliotheque-cloud-alm\/'>Biblioth\u00e8que<\/a><a href='\/index.php\/paroles-d-experts\/'>Paroles d'experts<\/a><a href='\/index.php\/contact\/'>Contact<\/a><\/div><div><span class='hz-m'>Contact<\/span><a href='mailto:contact@hashdezo.fr'>contact@hashdezo.fr<\/a><a href='tel:+33622616516'>+33 6 22 61 65 16<\/a><span>229 rue Saint-Honor\u00e9, 75001 Paris<\/span><\/div><\/footer><div class='hz-fb'><span class='hz-m'>Certifi\u00e9 RISE with SAP \u00b7 SAP Cloud ALM \u00b7 Architecte SAP BTP \u00b7 SAP Integration Suite<\/span><span>\u00a9 2026 HASHdezO \u00b7 <a href='\/index.php\/mentions-legales\/' style='color:inherit'>Mentions l\u00e9gales<\/a><\/span><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Conseil, r\u00e9alisation et formation SAP Cloud. #HashALMLes 5 offres Cloud ALMALM CityALM Runner ExpertisesCloud ERP &amp; RISESAP BTPData &amp; Analytics Cabinet\u00c0 proposBiblioth\u00e8queParoles d&rsquo;expertsContact Contactcontact@hashdezo.fr+33 6 22 61 65 16229 rue Saint-Honor\u00e9, 75001 Paris Certifi\u00e9 RISE with SAP \u00b7 SAP Cloud ALM \u00b7 Architecte SAP BTP \u00b7 SAP Integration Suite\u00a9 2026 HASHdezO \u00b7 Mentions l\u00e9gales<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"neve_meta_sidebar":"full-width","neve_meta_container":"full-width","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"on","neve_meta_disable_title":"on","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"class_list":["post-1121","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/pages\/1121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1121"}],"version-history":[{"count":7,"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/pages\/1121\/revisions"}],"predecessor-version":[{"id":1140,"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/pages\/1121\/revisions\/1140"}],"wp:attachment":[{"href":"https:\/\/www.hashdezo.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}