{"ast":null,"code":"var _jsxFileName = \"/Users/davidl/Nextcloud/Uni/Swinburne/ICT30016 - ICT Project/Assignment 3/incident-response-game/src/App.jsx\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Shield, Skull, RefreshCw, HelpCircle, Info, Sparkles } from \"lucide-react\";\n\n/**\n * Cybersecurity Incident Response – Card Game (Web App Prototype)\n * Tailwind CSS v4: ensure src/index.css contains only: @import \"tailwindcss\";\n */\n\n// --- MITRE ATT&CK references ---\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst MITRE = {\n phishing: {\n name: \"Phishing\",\n tactic: \"Initial Access\",\n id: \"T1566\"\n },\n malware: {\n name: \"Malware\",\n tactic: \"Execution\",\n id: \"T1204\"\n },\n privEsc: {\n name: \"Privilege Escalation\",\n tactic: \"Privilege Escalation\",\n id: \"TA0004\"\n },\n lateral: {\n name: \"Lateral Movement\",\n tactic: \"Lateral Movement\",\n id: \"TA0008\"\n },\n exfil: {\n name: \"Data Exfiltration\",\n tactic: \"Exfiltration\",\n id: \"TA0010\"\n }\n};\n\n// --- Attack deck ---\nconst ATTACK_DECK = [{\n id: \"A1\",\n title: \"Phishing Email\",\n description: \"A convincing email attempts to trick a user into entering credentials.\",\n mitreTag: \"phishing\",\n difficulty: 1,\n counterTags: [\"report\", \"mfa\", \"blockSender\", \"awareness\"]\n}, {\n id: \"A2\",\n title: \"Malware Dropper\",\n description: \"A user executes a downloaded attachment that launches a dropper.\",\n mitreTag: \"malware\",\n difficulty: 2,\n counterTags: [\"edr\", \"isolateHost\", \"patch\"]\n}, {\n id: \"A3\",\n title: \"Privilege Escalation\",\n description: \"Attacker abuses a vulnerable service to gain admin rights.\",\n mitreTag: \"privEsc\",\n difficulty: 2,\n counterTags: [\"patch\", \"leastPrivilege\", \"audit\"]\n}, {\n id: \"A4\",\n title: \"Lateral Movement\",\n description: \"Compromised account used to pivot through the network.\",\n mitreTag: \"lateral\",\n difficulty: 3,\n counterTags: [\"networkSeg\", \"isolateHost\", \"resetCreds\", \"monitor\"]\n}, {\n id: \"A5\",\n title: \"Data Exfiltration\",\n description: \"Sensitive data is staged and sent out of the organisation.\",\n mitreTag: \"exfil\",\n difficulty: 3,\n counterTags: [\"dlp\", \"isolateHost\", \"blockEgress\", \"monitor\"]\n}];\n\n// --- Defence pool ---\nconst DEFENCE_POOL = [{\n id: \"D1\",\n title: \"Report to IT\",\n cost: 2,\n tags: [\"report\", \"awareness\"],\n description: \"Escalate suspicious activity to IT/security.\"\n}, {\n id: \"D2\",\n title: \"Enable MFA\",\n cost: 3,\n tags: [\"mfa\"],\n description: \"Require multi-factor authentication for access.\"\n}, {\n id: \"D3\",\n title: \"Patch Systems\",\n cost: 4,\n tags: [\"patch\"],\n description: \"Apply vendor patches to remediate vulnerabilities.\"\n}, {\n id: \"D4\",\n title: \"Endpoint Detection & Response\",\n cost: 5,\n tags: [\"edr\", \"monitor\"],\n description: \"Detect, contain, and remediate malicious processes.\"\n}, {\n id: \"D5\",\n title: \"Isolate Host\",\n cost: 6,\n tags: [\"isolateHost\"],\n description: \"Remove a device from the network to stop spread.\"\n}, {\n id: \"D6\",\n title: \"Network Segmentation\",\n cost: 5,\n tags: [\"networkSeg\"],\n description: \"Restrict lateral movement with segmented zones.\"\n}, {\n id: \"D7\",\n title: \"Reset Credentials\",\n cost: 3,\n tags: [\"resetCreds\"],\n description: \"Force password reset and revoke sessions.\"\n}, {\n id: \"D8\",\n title: \"DLP Policy\",\n cost: 5,\n tags: [\"dlp\"],\n description: \"Detect and prevent exfiltration of sensitive data.\"\n}, {\n id: \"D9\",\n title: \"Block Egress Rule\",\n cost: 4,\n tags: [\"blockEgress\"],\n description: \"Block suspicious outbound connections at firewall.\"\n}, {\n id: \"D10\",\n title: \"Block Sender/Domain\",\n cost: 2,\n tags: [\"blockSender\"],\n description: \"Block malicious sender to prevent recurrences.\"\n}, {\n id: \"D11\",\n title: \"Audit & Logging\",\n cost: 2,\n tags: [\"audit\", \"monitor\"],\n description: \"Increase logging and review to detect anomalies.\"\n}, {\n id: \"D12\",\n title: \"Reimage & Network Scan\",\n cost: 6,\n tags: [\"isolateHost\", \"monitor\"],\n description: \"Rebuild host and scan for indicators of compromise.\"\n}, {\n id: \"D13\",\n title: \"Least Privilege\",\n cost: 3,\n tags: [\"leastPrivilege\"],\n description: \"Reduce account/device permissions to minimum.\"\n}];\n\n// --- Helpers ---\nfunction pickN(arr, n) {\n const copy = [...arr];\n const out = [];\n while (out.length < n && copy.length) {\n const idx = Math.floor(Math.random() * copy.length);\n out.push(copy.splice(idx, 1)[0]);\n }\n return out;\n}\nfunction defenceEffect(attack, defence) {\n const overlap = defence.tags.some(t => attack.counterTags.includes(t));\n if (overlap) return {\n result: \"mitigate\",\n score: 2\n };\n if (defence.tags.includes(\"monitor\") || defence.tags.includes(\"audit\")) {\n return {\n result: \"reduce\",\n score: 1\n };\n }\n return {\n result: \"fail\",\n score: 0\n };\n}\nfunction mitreBadge(tagKey) {\n const tag = MITRE[tagKey];\n if (!tag) return null;\n return /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-xs px-2 py-1 rounded-full bg-slate-100 border font-medium\",\n children: [tag.name, \" \\u2022 \", tag.tactic, \" (\", tag.id, \")\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 104,\n columnNumber: 5\n }, this);\n}\nfunction Card({\n title,\n children,\n icon,\n accent = \"\",\n onClick,\n disabled\n}) {\n return /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: onClick,\n disabled: disabled,\n className: `group relative text-left w-full ${onClick ? \"hover:-translate-y-0.5 active:translate-y-0\" : \"\"} transition disabled:opacity-50`,\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: `rounded-2xl shadow p-4 border ${accent} bg-white`,\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center gap-2 mb-2\",\n children: [icon, /*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"font-semibold text-slate-800\",\n children: title\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 120,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 118,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-sm text-slate-600\",\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 122,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 117,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 112,\n columnNumber: 5\n }, this);\n}\n\n// --- Main App ---\n_c = Card;\nexport default function App() {\n _s();\n const [round, setRound] = useState(1);\n const [ap, setAp] = useState(10);\n const [score, setScore] = useState(0);\n const [attacksLeft, setAttacksLeft] = useState(5);\n const [currentAttack, setCurrentAttack] = useState(null);\n const [hand, setHand] = useState([]);\n const [log, setLog] = useState([]);\n const [showHelp, setShowHelp] = useState(false);\n const drawAttack = () => ATTACK_DECK[Math.floor(Math.random() * ATTACK_DECK.length)];\n function drawHandForAttack(attack, size = 5) {\n for (let i = 0; i < 25; i++) {\n const h = pickN(DEFENCE_POOL, size);\n const viable = h.some(d => d.tags.some(t => attack.counterTags.includes(t)));\n if (viable) return h;\n }\n const forced = pickN(DEFENCE_POOL, size - 1);\n const must = DEFENCE_POOL.find(d => d.tags.some(t => attack.counterTags.includes(t)));\n return [must, ...forced].slice(0, size);\n }\n useEffect(() => {\n if (!currentAttack) {\n const atk = drawAttack();\n setCurrentAttack(atk);\n setHand(drawHandForAttack(atk));\n }\n }, [currentAttack]);\n function playDefence(card) {\n if (card.cost > ap) return;\n setAp(v => v - card.cost);\n const outcome = defenceEffect(currentAttack, card);\n setScore(s => s + outcome.score);\n setLog(l => [{\n ts: Date.now(),\n text: `${card.title} (${card.cost} AP) → ${outcome.result.toUpperCase()} (+${outcome.score})`\n }, ...l]);\n const nextAttacks = attacksLeft - (outcome.result === \"mitigate\" ? 1 : 0);\n setAttacksLeft(nextAttacks);\n if (nextAttacks <= 0 || ap - card.cost <= 0) {\n return;\n }\n const atk = drawAttack();\n setCurrentAttack(atk);\n setHand(drawHandForAttack(atk));\n }\n function newRound() {\n setRound(r => r + 1);\n setAp(10);\n setAttacksLeft(5);\n setCurrentAttack(null);\n setHand([]);\n setLog([]);\n }\n const roundEnded = attacksLeft <= 0 || ap <= 0;\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"min-h-screen bg-slate-50 p-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"max-w-6xl mx-auto space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"header\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center gap-3\",\n children: [/*#__PURE__*/_jsxDEV(Shield, {\n className: \"w-6 h-6\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 199,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"h1\", {\n className: \"text-2xl font-bold\",\n children: \"Incident Response \\u2013 Card Game\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 200,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 198,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center gap-2\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setShowHelp(true),\n className: \"inline-flex items-center gap-1 text-sm px-3 py-2 rounded-xl bg-white border shadow-sm hover:bg-slate-50\",\n children: [/*#__PURE__*/_jsxDEV(HelpCircle, {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 204,\n columnNumber: 15\n }, this), \" How to Play\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 203,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: newRound,\n className: \"inline-flex items-center gap-1 text-sm px-3 py-2 rounded-xl bg-white border shadow-sm hover:bg-slate-50\",\n children: [/*#__PURE__*/_jsxDEV(RefreshCw, {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 207,\n columnNumber: 15\n }, this), \" New Round\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 206,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 202,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 197,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"section\", {\n className: \"grid grid-cols-1 md:grid-cols-3 gap-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"md:col-span-2 space-y-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-3 gap-3\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"rounded-2xl bg-white border p-4 shadow-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs text-slate-500\",\n children: \"Round\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 217,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-2xl font-semibold\",\n children: round\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 218,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 216,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"rounded-2xl bg-white border p-4 shadow-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs text-slate-500\",\n children: \"Action Points\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 221,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-2xl font-semibold\",\n children: ap\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 222,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 220,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"rounded-2xl bg-white border p-4 shadow-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs text-slate-500\",\n children: \"Score\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 225,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-2xl font-semibold\",\n children: score\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 226,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 224,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 215,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"rounded-2xl bg-white border p-5 shadow-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between mb-3\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center gap-2\",\n children: [/*#__PURE__*/_jsxDEV(Skull, {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 234,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"font-semibold\",\n children: \"Current Attack\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 235,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 233,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-xs text-slate-500\",\n children: [\"Attacks remaining this round: \", attacksLeft]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 237,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 232,\n columnNumber: 15\n }, this), currentAttack && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex flex-wrap items-center gap-2\",\n children: [mitreBadge(currentAttack.mitreTag), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-xs px-2 py-1 rounded-full bg-amber-100 text-amber-800\",\n children: [\"Difficulty \", currentAttack.difficulty]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 244,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 242,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-lg font-semibold\",\n children: currentAttack.title\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 246,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-slate-600\",\n children: currentAttack.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 247,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 241,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 231,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center gap-2\",\n children: [/*#__PURE__*/_jsxDEV(Shield, {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 255,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"font-semibold\",\n children: \"Your Defence Hand\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 256,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 254,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3\",\n children: hand.map(card => /*#__PURE__*/_jsxDEV(Card, {\n title: `${card.title} • ${card.cost} AP`,\n icon: /*#__PURE__*/_jsxDEV(Shield, {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 263,\n columnNumber: 27\n }, this),\n onClick: !roundEnded ? () => playDefence(card) : undefined,\n disabled: roundEnded || card.cost > ap,\n accent: card.cost > ap ? \"border-slate-200\" : \"border-slate-200 hover:border-emerald-300\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs mb-2\",\n children: card.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 268,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex flex-wrap gap-1\",\n children: card.tags.map(t => /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-[10px] px-2 py-0.5 rounded-full bg-slate-100 border\",\n children: t\n }, t, false, {\n fileName: _jsxFileName,\n lineNumber: 271,\n columnNumber: 25\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 269,\n columnNumber: 21\n }, this)]\n }, card.id, true, {\n fileName: _jsxFileName,\n lineNumber: 260,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 258,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 253,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 213,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-3\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"rounded-2xl bg-white border p-4 shadow-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center gap-2 mb-2\",\n children: [/*#__PURE__*/_jsxDEV(Info, {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 286,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"font-semibold\",\n children: \"Event Log\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 287,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 285,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2 max-h-80 overflow-auto pr-2\",\n children: [log.length === 0 && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm text-slate-500\",\n children: \"No actions yet. Play a defence card to respond.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 290,\n columnNumber: 38\n }, this), log.map(e => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-sm text-slate-700\",\n children: [new Date(e.ts).toLocaleTimeString(), \" \\u2014 \", e.text]\n }, e.ts, true, {\n fileName: _jsxFileName,\n lineNumber: 292,\n columnNumber: 19\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 289,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 284,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"rounded-2xl bg-gradient-to-br from-emerald-50 to-slate-50 border p-4 shadow-sm text-center\",\n children: roundEnded ? /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"inline-flex items-center gap-2 text-emerald-700\",\n children: [/*#__PURE__*/_jsxDEV(Sparkles, {\n className: \"w-4 h-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 304,\n columnNumber: 21\n }, this), \" \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: \"Round Complete\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 304,\n columnNumber: 54\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 303,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-sm text-slate-600\",\n children: [\"Score this round: \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: score\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 307,\n columnNumber: 39\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 306,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: newRound,\n className: \"mt-2 inline-flex items-center gap-1 text-sm px-3 py-2 rounded-xl bg-emerald-600 text-white hover:bg-emerald-700\",\n children: \"Start Next Round\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 309,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 302,\n columnNumber: 17\n }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-sm text-slate-600\",\n children: \"Mitigate attacks efficiently and conserve AP for tougher threats.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 317,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 300,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 283,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 212,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"footer\", {\n className: \"text-xs text-slate-500 pt-4\",\n children: /*#__PURE__*/_jsxDEV(\"p\", {\n children: \"MITRE ATT&CK tags are indicative and simplified for learning. This prototype focuses on accessibility across skill levels and resource-based decision making.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 324,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 323,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 196,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(AnimatePresence, {\n children: showHelp && /*#__PURE__*/_jsxDEV(motion.div, {\n initial: {\n opacity: 0\n },\n animate: {\n opacity: 1\n },\n exit: {\n opacity: 0\n },\n className: \"fixed inset-0 bg-black/30 backdrop-blur-sm flex items-center justify-center p-4 z-50\",\n children: /*#__PURE__*/_jsxDEV(motion.div, {\n initial: {\n scale: 0.95,\n opacity: 0\n },\n animate: {\n scale: 1,\n opacity: 1\n },\n exit: {\n scale: 0.95,\n opacity: 0\n },\n className: \"max-w-xl w-full bg-white rounded-2xl shadow-2xl border p-6 space-y-3\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center gap-2\",\n children: [/*#__PURE__*/_jsxDEV(HelpCircle, {\n className: \"w-5 h-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 348,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"font-semibold\",\n children: \"How to Play\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 349,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 347,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setShowHelp(false),\n className: \"text-slate-500 hover:text-slate-700\",\n children: \"Close\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 351,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 346,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"ol\", {\n className: \"list-decimal pl-5 text-sm space-y-2 text-slate-700\",\n children: [/*#__PURE__*/_jsxDEV(\"li\", {\n children: [\"The computer plays an \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: \"Attack\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 356,\n columnNumber: 43\n }, this), \". Review its MITRE tag and description.\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 356,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: [\"You have \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: \"10 Action Points\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 357,\n columnNumber: 30\n }, this), \" (AP) to spend each round. Each defence costs AP.\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 357,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: [\"Play a \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: \"Defence\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 359,\n columnNumber: 26\n }, this), \". If its tags match the attack\\u2019s counters, you \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: \"mitigate\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 359,\n columnNumber: 87\n }, this), \" it (+2 points). Generic controls may \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: \"reduce\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 359,\n columnNumber: 140\n }, this), \" impact (+1). Otherwise it \", /*#__PURE__*/_jsxDEV(\"b\", {\n children: \"fails\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 359,\n columnNumber: 180\n }, this), \" (0).\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 358,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"Mitigated attacks advance the round. When AP hits 0 or you clear all attacks, the round ends. Start a new round anytime.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 361,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"Learn strategically: conserve AP for harder threats and combine monitoring with containment.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 364,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 355,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs text-slate-500\",\n children: \"Designed for classrooms/workshops; quick rounds target 15\\u201320 minutes with discussion.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 368,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 340,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 334,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 332,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 195,\n columnNumber: 5\n }, this);\n}\n_s(App, \"9/DowfyYaAy9fzb8ESi04nHjjD0=\");\n_c2 = App;\nvar _c, _c2;\n$RefreshReg$(_c, \"Card\");\n$RefreshReg$(_c2, \"App\");","map":{"version":3,"names":["React","useState","useEffect","motion","AnimatePresence","Shield","Skull","RefreshCw","HelpCircle","Info","Sparkles","jsxDEV","_jsxDEV","MITRE","phishing","name","tactic","id","malware","privEsc","lateral","exfil","ATTACK_DECK","title","description","mitreTag","difficulty","counterTags","DEFENCE_POOL","cost","tags","pickN","arr","n","copy","out","length","idx","Math","floor","random","push","splice","defenceEffect","attack","defence","overlap","some","t","includes","result","score","mitreBadge","tagKey","tag","className","children","fileName","_jsxFileName","lineNumber","columnNumber","Card","icon","accent","onClick","disabled","_c","App","_s","round","setRound","ap","setAp","setScore","attacksLeft","setAttacksLeft","currentAttack","setCurrentAttack","hand","setHand","log","setLog","showHelp","setShowHelp","drawAttack","drawHandForAttack","size","i","h","viable","d","forced","must","find","slice","atk","playDefence","card","v","outcome","s","l","ts","Date","now","text","toUpperCase","nextAttacks","newRound","r","roundEnded","map","undefined","e","toLocaleTimeString","div","initial","opacity","animate","exit","scale","_c2","$RefreshReg$"],"sources":["/Users/davidl/Nextcloud/Uni/Swinburne/ICT30016 - ICT Project/Assignment 3/incident-response-game/src/App.jsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Shield, Skull, RefreshCw, HelpCircle, Info, Sparkles } from \"lucide-react\";\n\n/**\n * Cybersecurity Incident Response – Card Game (Web App Prototype)\n * Tailwind CSS v4: ensure src/index.css contains only: @import \"tailwindcss\";\n */\n\n// --- MITRE ATT&CK references ---\nconst MITRE = {\n phishing: { name: \"Phishing\", tactic: \"Initial Access\", id: \"T1566\" },\n malware: { name: \"Malware\", tactic: \"Execution\", id: \"T1204\" },\n privEsc: { name: \"Privilege Escalation\", tactic: \"Privilege Escalation\", id: \"TA0004\" },\n lateral: { name: \"Lateral Movement\", tactic: \"Lateral Movement\", id: \"TA0008\" },\n exfil: { name: \"Data Exfiltration\", tactic: \"Exfiltration\", id: \"TA0010\" },\n};\n\n// --- Attack deck ---\nconst ATTACK_DECK = [\n {\n id: \"A1\",\n title: \"Phishing Email\",\n description: \"A convincing email attempts to trick a user into entering credentials.\",\n mitreTag: \"phishing\",\n difficulty: 1,\n counterTags: [\"report\", \"mfa\", \"blockSender\", \"awareness\"],\n },\n {\n id: \"A2\",\n title: \"Malware Dropper\",\n description: \"A user executes a downloaded attachment that launches a dropper.\",\n mitreTag: \"malware\",\n difficulty: 2,\n counterTags: [\"edr\", \"isolateHost\", \"patch\"],\n },\n {\n id: \"A3\",\n title: \"Privilege Escalation\",\n description: \"Attacker abuses a vulnerable service to gain admin rights.\",\n mitreTag: \"privEsc\",\n difficulty: 2,\n counterTags: [\"patch\", \"leastPrivilege\", \"audit\"],\n },\n {\n id: \"A4\",\n title: \"Lateral Movement\",\n description: \"Compromised account used to pivot through the network.\",\n mitreTag: \"lateral\",\n difficulty: 3,\n counterTags: [\"networkSeg\", \"isolateHost\", \"resetCreds\", \"monitor\"],\n },\n {\n id: \"A5\",\n title: \"Data Exfiltration\",\n description: \"Sensitive data is staged and sent out of the organisation.\",\n mitreTag: \"exfil\",\n difficulty: 3,\n counterTags: [\"dlp\", \"isolateHost\", \"blockEgress\", \"monitor\"],\n },\n];\n\n// --- Defence pool ---\nconst DEFENCE_POOL = [\n { id: \"D1\", title: \"Report to IT\", cost: 2, tags: [\"report\", \"awareness\"], description: \"Escalate suspicious activity to IT/security.\" },\n { id: \"D2\", title: \"Enable MFA\", cost: 3, tags: [\"mfa\"], description: \"Require multi-factor authentication for access.\" },\n { id: \"D3\", title: \"Patch Systems\", cost: 4, tags: [\"patch\"], description: \"Apply vendor patches to remediate vulnerabilities.\" },\n { id: \"D4\", title: \"Endpoint Detection & Response\", cost: 5, tags: [\"edr\", \"monitor\"], description: \"Detect, contain, and remediate malicious processes.\" },\n { id: \"D5\", title: \"Isolate Host\", cost: 6, tags: [\"isolateHost\"], description: \"Remove a device from the network to stop spread.\" },\n { id: \"D6\", title: \"Network Segmentation\", cost: 5, tags: [\"networkSeg\"], description: \"Restrict lateral movement with segmented zones.\" },\n { id: \"D7\", title: \"Reset Credentials\", cost: 3, tags: [\"resetCreds\"], description: \"Force password reset and revoke sessions.\" },\n { id: \"D8\", title: \"DLP Policy\", cost: 5, tags: [\"dlp\"], description: \"Detect and prevent exfiltration of sensitive data.\" },\n { id: \"D9\", title: \"Block Egress Rule\", cost: 4, tags: [\"blockEgress\"], description: \"Block suspicious outbound connections at firewall.\" },\n { id: \"D10\", title: \"Block Sender/Domain\", cost: 2, tags: [\"blockSender\"], description: \"Block malicious sender to prevent recurrences.\" },\n { id: \"D11\", title: \"Audit & Logging\", cost: 2, tags: [\"audit\", \"monitor\"], description: \"Increase logging and review to detect anomalies.\" },\n { id: \"D12\", title: \"Reimage & Network Scan\", cost: 6, tags: [\"isolateHost\", \"monitor\"], description: \"Rebuild host and scan for indicators of compromise.\" },\n { id: \"D13\", title: \"Least Privilege\", cost: 3, tags: [\"leastPrivilege\"], description: \"Reduce account/device permissions to minimum.\" },\n];\n\n// --- Helpers ---\nfunction pickN(arr, n) {\n const copy = [...arr];\n const out = [];\n while (out.length < n && copy.length) {\n const idx = Math.floor(Math.random() * copy.length);\n out.push(copy.splice(idx, 1)[0]);\n }\n return out;\n}\n\nfunction defenceEffect(attack, defence) {\n const overlap = defence.tags.some((t) => attack.counterTags.includes(t));\n if (overlap) return { result: \"mitigate\", score: 2 };\n if (defence.tags.includes(\"monitor\") || defence.tags.includes(\"audit\")) {\n return { result: \"reduce\", score: 1 };\n }\n return { result: \"fail\", score: 0 };\n}\n\nfunction mitreBadge(tagKey) {\n const tag = MITRE[tagKey];\n if (!tag) return null;\n return (\n \n {tag.name} • {tag.tactic} ({tag.id})\n \n );\n}\n\nfunction Card({ title, children, icon, accent = \"\", onClick, disabled }) {\n return (\n \n
\n
\n {icon}\n

{title}

\n
\n
{children}
\n
\n \n );\n}\n\n// --- Main App ---\nexport default function App() {\n const [round, setRound] = useState(1);\n const [ap, setAp] = useState(10);\n const [score, setScore] = useState(0);\n const [attacksLeft, setAttacksLeft] = useState(5);\n const [currentAttack, setCurrentAttack] = useState(null);\n const [hand, setHand] = useState([]);\n const [log, setLog] = useState([]);\n const [showHelp, setShowHelp] = useState(false);\n\n const drawAttack = () => ATTACK_DECK[Math.floor(Math.random() * ATTACK_DECK.length)];\n\n function drawHandForAttack(attack, size = 5) {\n for (let i = 0; i < 25; i++) {\n const h = pickN(DEFENCE_POOL, size);\n const viable = h.some((d) => d.tags.some((t) => attack.counterTags.includes(t)));\n if (viable) return h;\n }\n const forced = pickN(DEFENCE_POOL, size - 1);\n const must = DEFENCE_POOL.find((d) => d.tags.some((t) => attack.counterTags.includes(t)));\n return [must, ...forced].slice(0, size);\n }\n\n useEffect(() => {\n if (!currentAttack) {\n const atk = drawAttack();\n setCurrentAttack(atk);\n setHand(drawHandForAttack(atk));\n }\n }, [currentAttack]);\n\n function playDefence(card) {\n if (card.cost > ap) return;\n setAp((v) => v - card.cost);\n\n const outcome = defenceEffect(currentAttack, card);\n setScore((s) => s + outcome.score);\n setLog((l) => [\n { ts: Date.now(), text: `${card.title} (${card.cost} AP) → ${outcome.result.toUpperCase()} (+${outcome.score})` },\n ...l,\n ]);\n\n const nextAttacks = attacksLeft - (outcome.result === \"mitigate\" ? 1 : 0);\n setAttacksLeft(nextAttacks);\n\n if (nextAttacks <= 0 || ap - card.cost <= 0) {\n return;\n }\n\n const atk = drawAttack();\n setCurrentAttack(atk);\n setHand(drawHandForAttack(atk));\n }\n\n function newRound() {\n setRound((r) => r + 1);\n setAp(10);\n setAttacksLeft(5);\n setCurrentAttack(null);\n setHand([]);\n setLog([]);\n }\n\n const roundEnded = attacksLeft <= 0 || ap <= 0;\n\n return (\n
\n
\n
\n
\n \n

Incident Response – Card Game

\n
\n
\n \n \n
\n
\n\n
\n
\n {/* Status */}\n
\n
\n
Round
\n
{round}
\n
\n
\n
Action Points
\n
{ap}
\n
\n
\n
Score
\n
{score}
\n
\n
\n\n {/* Current Attack */}\n
\n
\n
\n \n

Current Attack

\n
\n Attacks remaining this round: {attacksLeft}\n
\n\n {currentAttack && (\n
\n
\n {mitreBadge(currentAttack.mitreTag)}\n Difficulty {currentAttack.difficulty}\n
\n

{currentAttack.title}

\n

{currentAttack.description}

\n
\n )}\n
\n\n {/* Defence Hand */}\n
\n
\n \n

Your Defence Hand

\n
\n
\n {hand.map((card) => (\n }\n onClick={!roundEnded ? () => playDefence(card) : undefined}\n disabled={roundEnded || card.cost > ap}\n accent={card.cost > ap ? \"border-slate-200\" : \"border-slate-200 hover:border-emerald-300\"}\n >\n
{card.description}
\n
\n {card.tags.map((t) => (\n \n {t}\n \n ))}\n
\n \n ))}\n
\n
\n
\n\n {/* Event Log */}\n
\n
\n
\n \n

Event Log

\n
\n
\n {log.length === 0 &&

No actions yet. Play a defence card to respond.

}\n {log.map((e) => (\n
\n {new Date(e.ts).toLocaleTimeString()} — {e.text}\n
\n ))}\n
\n
\n\n {/* Round Summary */}\n
\n {roundEnded ? (\n
\n
\n Round Complete\n
\n
\n Score this round: {score}\n
\n \n Start Next Round\n \n
\n ) : (\n
Mitigate attacks efficiently and conserve AP for tougher threats.
\n )}\n
\n
\n
\n\n
\n

\n MITRE ATT&CK tags are indicative and simplified for learning. This prototype focuses on accessibility across skill levels and\n resource-based decision making.\n

\n
\n
\n\n {/* Help Modal */}\n \n {showHelp && (\n \n \n
\n
\n \n

How to Play

\n
\n \n
\n
    \n
  1. The computer plays an Attack. Review its MITRE tag and description.
  2. \n
  3. You have 10 Action Points (AP) to spend each round. Each defence costs AP.
  4. \n
  5. \n Play a Defence. If its tags match the attack’s counters, you mitigate it (+2 points). Generic controls may reduce impact (+1). Otherwise it fails (0).\n
  6. \n
  7. \n Mitigated attacks advance the round. When AP hits 0 or you clear all attacks, the round ends. Start a new round anytime.\n
  8. \n
  9. \n Learn strategically: conserve AP for harder threats and combine monitoring with containment.\n
  10. \n
\n
Designed for classrooms/workshops; quick rounds target 15–20 minutes with discussion.
\n \n \n )}\n
\n
\n );\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}