ER DU KLAR HVIS CYBERANGREBET INDTRÆFFER?

Prøv vores simulation og test om din virksomhed er klar

En interaktiv simulation hvor du skal tage stilling til et cyberangreb, og jeres næste step.

`; el.classList.add('show'); if(S.feedbackKeySkip)document.removeEventListener('keydown',S.feedbackKeySkip); S.feedbackKeySkip=(e)=>{if(e.key===' '||e.key==='Enter')skipFeedback();}; document.addEventListener('keydown',S.feedbackKeySkip); } function skipFeedback(){ if(S.feedbackKeySkip){document.removeEventListener('keydown',S.feedbackKeySkip);S.feedbackKeySkip=null;} if(S.feedbackTimeout){clearTimeout(S.feedbackTimeout);S.feedbackTimeout=null;} if(S.feedbackNext){const nxt=S.feedbackNext;S.feedbackNext=null;go(nxt);} } function typewrite(el,txt,speed,done){ el.textContent='';let i=0;let iv; const finish=()=>{clearInterval(iv);el.textContent=txt;el.removeEventListener('click',clickSkip);document.removeEventListener('keydown',keySkip);if(done)done();}; const clickSkip=()=>finish(); const keySkip=(e)=>{if(e.key===' '||e.key==='Enter')finish();}; el.addEventListener('click',clickSkip);document.addEventListener('keydown',keySkip); iv=setInterval(()=>{ if(i{ S.timer--; if(bar)bar.style.width=((S.timer/secs)*100)+'%'; if(S.timer0)sndTick();} if(S.timers.id===id);} function go(id){ stopTimer();cancelAnimationFrame(S.raf); S.scene=id;const sc=scene(id);if(!sc)return; switch(sc.type){ case'intro': renderIntro();break; case'scenario': renderScenario(sc);break; case'gameover': renderGameOver(sc);break; case'end': renderEnd();break; } } // ── INTRO ──────────────────────────────────────────────────── function renderIntro(){ document.getElementById('screen').innerHTML=`
⚠ Sikkerhedsalarm
Du er under angreb

Klokken er 07:43. Du er it-ansvarlig i virksomheden.
Databaseserverne opfører sig underligt. Store mængder data overføres eksternt.

Du har 30 sekunder per beslutning. Ét forkert valg kan koste alt.

⌛ 6 scenarier 💥 Game over ved kritiske fejl 📊 Score til sidst
`; } function playSceneGlitch(el,done){ sndAlarm(); const gc=['\u2588','\u2593','\u2592','\u2591','?','!','#','@','$','%']; const glitchSeed='ALARM - AKTIVT DATABRUD'; el.textContent=glitchSeed;el.style.color='#FF5E00';el.style.fontWeight='800'; let n=0; const iv=setInterval(()=>{ if(!el.isConnected){clearInterval(iv);return;} if(n++>10){clearInterval(iv);el.textContent='';el.style.color='';el.style.fontWeight='';if(done)done();return;} el.textContent=[...glitchSeed].map(c=>Math.random()<.4 function startgame scenario renderscenario var cw="CHAR_W,ch=CHAR_H;" document.getelementbyid class="hdr">
Scene ${sc.prog}
\u26A1 ${S.score} point
`; startAnim('art',sc.art); const nEl=document.getElementById('narr'); const startTypewriter=()=>{ typewrite(nEl,sc.narrative,22,()=>{ const qEl=document.getElementById('qtext');if(!qEl)return; qEl.style.opacity='1'; typewrite(qEl,sc.question,28,()=>{ showChoices(sc); startTimer(sc.timer||30,()=>timerExpired(sc)); }); }); }; if(sc.id==='scene_1'){playSceneGlitch(nEl,startTypewriter);} else{startTypewriter();} } function showChoices(sc){ const el=document.getElementById('choices');if(!el)return; el.innerHTML=sc.choices.map((c,i)=>``).join(''); setTimeout(()=>el.classList.add('show'),50); } function pick(idx){ const sc=scene(S.scene);if(!sc)return; stopTimer(); document.querySelectorAll('.choice').forEach(b=>b.disabled=true); const c=sc.choices[idx]; S.score+=c.points||0; if(c.kind!=='good')S.mistakes++; const slEl=document.getElementById('score-live'); if(slEl)slEl.textContent='\u26A1 '+S.score+' point'; if(c.kind==='gameover'){flash('red');shake();sndBad();setTimeout(()=>go(c.next),900);return;} if(c.kind==='good'){flash('green');sndGood();} else if(c.kind==='ok'||c.kind==='bad'){sndOk();} if(c.tip)showInlineFeedback(c.tip,c.kind==='good'?'good':c.kind==='bad'?'bad':'ok'); S.feedbackNext=c.next; } function timerExpired(sc){ const safe=sc.choices.filter(c=>c.kind!=='gameover').sort((a,b)=>(a.points||0)-(b.points||0)); if(!safe.length)return; const worst=safe[0]; S.score+=Math.floor((worst.points||0)/2);S.mistakes++; const slEl=document.getElementById('score-live'); if(slEl)slEl.textContent='\u26A1 '+S.score+' point'; flash('red');shake();sndBad(); showInlineFeedback('Du reagerede ikke i tide. Systemet valgte automatisk: "'+worst.text+'". Halvdelen af pointene for dette svar er fratrukket.','bad','\u231B Tid udl\u00F8bet!'); S.feedbackNext=worst.next; } // ── GAME OVER ──────────────────────────────────────────────── function renderGameOver(sc){ var cw=CHAR_W,ch=CHAR_H; var artKey=sc.art||'disaster'; document.getElementById('screen').innerHTML=`
💀 ${sc.title}
${sc.text}
Hvad burde du have gjort?${sc.lesson}
`; drawFrame(document.getElementById('art-go'),artKey,0); flash('red');shake();sndBad(); } function restart(){S.score=0;S.mistakes=0;go('intro');} // ── END ────────────────────────────────────────────────────── function renderEnd(){ const max=120,score=S.score,mistakes=S.mistakes||0; let text; if(score>=100){text='Imponerende. Du reagerede hurtigt, metodisk og korrekt i n\u00E6sten alle situationer. Virksomheden stod st\u00E6rkt.';} else if(score>=70){text='Solidt h\u00E5ndteret med enkelte huller. De fleste virksomheder ville klare sig, men der er plads til forbedring.';} else if(score>=40){text='Du undgik katastrofen, men begik fejl undervejs med potentielt store konsekvenser. Din beredskabsplan tr\u00E6nger til et eftersyn.';} else{text='Angrebet fik lov til at eskalere un\u00F8digt. Det er tid til at tage it-sikkerhed alvorligt - inden det sker i virkeligheden.';} const mistakeNote=mistakes===0?' Ingen fejl!':mistakes===1?' 1 fejl undervejs.':' '+mistakes+' fejl undervejs.'; document.getElementById('screen').innerHTML=`
Simulation afsluttet
Er din virksomhed forberedt?
${text}${mistakeNote}
F\u00E5 en gratis gennemgang af jeres beredskab
Vores eksperter gennemg\u00E5r jeres it-sikkerhedsberedskab og giver konkrete anbefalinger.
0 / ${max}
`; drawGauge(document.getElementById('gauge'),score,max); let displayed=0; const step=Math.max(1,Math.ceil(score/40)); const civ=setInterval(()=>{ displayed=Math.min(displayed+step,score); const el=document.getElementById('score-num'); if(el)el.innerHTML=displayed+` / ${max}`; if(displayed>=score)clearInterval(civ); },30); sndGood(); } function drawGauge(canvas,score,max){ const ctx=canvas.getContext('2d'),cx=100,cy=105,r=80; const target=Math.PI+(score/max)*Math.PI; const gr=ctx.createLinearGradient(20,cy,180,cy); gr.addColorStop(0,'#FF5E00');gr.addColorStop(1,'#4CAF50'); let current=Math.PI; const inc=(target-Math.PI)/45; function step(){ ctx.clearRect(0,0,canvas.width,canvas.height); ctx.beginPath();ctx.arc(cx,cy,r,Math.PI,2*Math.PI); ctx.strokeStyle='#E0E0E0';ctx.lineWidth=14;ctx.lineCap='round';ctx.stroke(); if(current>Math.PI){ ctx.beginPath();ctx.arc(cx,cy,r,Math.PI,current); ctx.strokeStyle=gr;ctx.lineWidth=14;ctx.lineCap='round';ctx.stroke(); } if(current
0

+

Users

0

+

Kunder

3863 anmeldelser

Uden en beredskabsplan kan et angreb koste millioner

Download vores beredskabsplan