{"id":1286,"date":"2026-03-18T09:01:47","date_gmt":"2026-03-18T09:01:47","guid":{"rendered":"https:\/\/cortexorigin.com\/?p=1286"},"modified":"2026-03-18T09:09:06","modified_gmt":"2026-03-18T09:09:06","slug":"xxxx","status":"publish","type":"post","link":"https:\/\/cortexorigin.com\/index.php\/2026\/03\/18\/xxxx\/","title":{"rendered":"xxxx"},"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>CORTEX ORIGIN\u2122 \u2014 Solar Defense v3.1 + CMS MORPHIC SHIELD\u2122<\/title>\n<style>\n*{box-sizing:border-box;margin:0;padding:0}\n:root{\n  --bg:#08090f;--bg2:#0d1020;--bg3:#111525;\n  --cyan:#00e5ff;--cyan2:#00bcd4;\n  --green:#00ff88;--green2:#10b981;\n  --orange:#D97706;--gold:#f59e0b;\n  --purple:#7c3aed;--purple2:#c8a0ff;\n  --red:#ef4444;--red2:#dc2626;\n  --tcb:#818cf8;--tcb2:#4f46e5;\n  --gray:#4a5568;--gray2:#6b7280;--gray3:#9ca3af;\n  --mono:'JetBrains Mono',monospace;\n}\nbody{background:#08090f!important;font-family:var(--mono);color:#e2e8f0;-webkit-font-smoothing:antialiased;overflow-x:hidden}\n@keyframes blink{0%,100%{opacity:1}50%{opacity:.15}}\n@keyframes fadein{from{opacity:0;transform:translateX(-4px)}to{opacity:1}}\n@keyframes pulse-ring{0%{transform:scale(1);opacity:.6}100%{transform:scale(2.2);opacity:0}}\n \n\/* \u2550\u2550\u2550 SOLAR PANEL \u2550\u2550\u2550 *\/\n#panel-solar{background:#08090f!important;padding:.8rem .8rem .4rem}\n.sol-hdr{max-width:1100px;margin:0 auto .5rem;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.4rem}\n.sol-hdr-title{font-size:.56rem;letter-spacing:.2em;color:#6b7280;text-transform:uppercase}\n.sol-hdr-sub{font-size:.42rem;color:#4a5568;margin-top:1px}\n.dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}\n.sol-modes{display:flex;gap:.35rem;flex-wrap:wrap;justify-content:center;margin-bottom:.5rem}\n.mbtn{font-family:var(--mono);font-size:.42rem;padding:.22rem .5rem;border-radius:3px;cursor:pointer;letter-spacing:.04em;border:1px solid;background:transparent;transition:all .2s}\n.mbtn-n{border-color:#D97706;color:#D97706}.mbtn-n.active{background:#D97706;color:#000;box-shadow:0 0 8px rgba(217,119,6,.5)}\n.mbtn-z{border-color:var(--red);color:var(--red)}.mbtn-z.active{background:var(--red);color:#fff;box-shadow:0 0 8px rgba(239,68,68,.5)}\n.mbtn-e{border-color:var(--green2);color:var(--green2)}.mbtn-e.active{background:var(--green2);color:#000;box-shadow:0 0 8px rgba(16,185,129,.5)}\n.mbtn-h{border-color:var(--tcb);color:var(--tcb)}.mbtn-h.active{background:var(--tcb);color:#000;box-shadow:0 0 8px rgba(129,140,248,.5)}\n.mbtn-c{border-color:var(--gray);color:var(--gray2)}.mbtn-c.active{border-color:#aaa;color:#ccc}\n.sol-met{display:flex;gap:.9rem;flex-wrap:wrap;justify-content:center;margin-bottom:.4rem}\n.met{text-align:center;min-width:52px}\n.met-v{font-size:1.1rem;font-style:italic;font-weight:700;line-height:1;transition:color .35s}\n.met-l{font-size:.36rem;letter-spacing:.1em;color:var(--gray);margin-top:2px;text-transform:uppercase}\n#solar{width:100%;max-width:500px;height:auto;display:block;margin:0 auto}\n.atk-card{max-width:1100px;margin:.4rem auto 0;background:#04111c!important;border:.5px solid rgba(255,255,255,.07);border-radius:4px;padding:.45rem .7rem;display:flex;gap:.5rem;align-items:center;min-height:36px;transition:border-color .3s}\n.atk-icon{font-size:1.1rem;flex-shrink:0}\n.atk-name{font-size:.64rem;font-weight:700;transition:color .3s}\n.atk-sub{font-size:.4rem;color:var(--gray2);line-height:1.4;margin-top:1px}\n.atk-right{margin-left:auto;text-align:right;flex-shrink:0}\n.atk-lat{font-size:.88rem;font-style:italic;font-weight:700;transition:color .3s}\n.atk-lay{font-size:.38rem;color:var(--gray2);margin-top:1px}\n.sol-log{max-width:1100px;margin:.4rem auto 0;background:#030810!important;border:.5px solid rgba(255,255,255,.05);border-radius:4px;padding:.45rem .7rem;height:75px;overflow-y:auto}\n.sol-log::-webkit-scrollbar{width:2px}.sol-log::-webkit-scrollbar-thumb{background:rgba(255,255,255,.08)}\n.ll{font-size:.44rem;line-height:1.9;display:flex;gap:.35rem}\n.lt{color:var(--gray);min-width:52px}.lok{color:var(--green2);min-width:48px}.lwn{color:#B45309;min-width:48px}.lcr{color:var(--red);min-width:48px}\n.lm{color:var(--gray2)}.lip{color:var(--tcb);font-weight:700}\n.ll-new{animation:fadein .2s ease}\n \n\/* \u2550\u2550\u2550 DIVIDER \u2550\u2550\u2550 *\/\n.divider{width:100%;padding:.4rem 1rem;background:#0a0d1a!important;border-top:1px solid rgba(0,229,255,.12);border-bottom:1px solid rgba(0,229,255,.12);border-top:1px solid rgba(0,229,255,.12);border-bottom:1px solid rgba(0,229,255,.12);display:flex;align-items:center;justify-content:center;gap:.8rem}\n.divider span{font-size:.46rem;letter-spacing:.28em;color:rgba(0,229,255,.35);text-transform:uppercase}\n.div-line{flex:1;height:1px;background:linear-gradient(90deg,transparent,rgba(0,229,255,.18),transparent)}\n \n\/* \u2550\u2550\u2550 CMS CONTROLS BAR \u2550\u2550\u2550 *\/\n#cms-controls{background:#060810!important;border-bottom:1px solid rgba(0,229,255,.08);padding:.5rem .8rem;display:flex;align-items:center;gap:.8rem;flex-wrap:wrap}\n.ctrl-group{display:flex;align-items:center;gap:.3rem;flex-wrap:wrap}\n.ctrl-label{font-size:.36rem;letter-spacing:.14em;color:rgba(0,229,255,.35);text-transform:uppercase;white-space:nowrap;padding-right:.3rem;border-right:1px solid rgba(0,229,255,.1)}\n.cms-btn{display:flex;align-items:center;gap:.2rem;padding:.2rem .45rem;border-radius:3px;cursor:pointer;font-size:.4rem;letter-spacing:.03em;border:1px solid rgba(0,229,255,.2);color:var(--gray3);background:transparent;transition:all .18s;font-family:var(--mono);white-space:nowrap}\n.cms-btn:hover{color:var(--cyan);border-color:rgba(0,229,255,.4);background:rgba(0,229,255,.05)}\n.cms-btn.active{color:var(--cyan);border-color:rgba(0,229,255,.5);background:rgba(0,229,255,.09)}\n.cbtn-dot{width:5px;height:5px;border-radius:50%;border:1.5px solid currentColor;flex-shrink:0}\n.cms-btn.active .cbtn-dot{background:var(--cyan)}\n.cms-atk-btn{display:flex;align-items:center;gap:.2rem;padding:.2rem .45rem;border-radius:3px;cursor:pointer;font-size:.4rem;letter-spacing:.03em;color:#ef4444;border:1px solid rgba(239,68,68,.28);background:rgba(239,68,68,.04);transition:all .16s;font-family:var(--mono);white-space:nowrap}\n.cms-atk-btn:hover{background:rgba(239,68,68,.12);border-color:rgba(239,68,68,.6)}\n.cms-atk-btn.firing{background:rgba(239,68,68,.22);border-color:var(--red);color:#fff;box-shadow:0 0 10px rgba(239,68,68,.4)}\n.cms-full-sim{display:flex;align-items:center;gap:.2rem;padding:.2rem .5rem;border-radius:3px;cursor:pointer;font-size:.4rem;font-weight:700;letter-spacing:.03em;color:#ffc107;border:1px solid rgba(255,193,7,.4);background:rgba(255,193,7,.05);transition:all .18s;font-family:var(--mono);white-space:nowrap}\n.cms-full-sim:hover{background:rgba(255,193,7,.15)}\n.cms-full-sim.firing{background:#ffc107;color:#000}\n.ctrl-sep{width:1px;height:20px;background:rgba(0,229,255,.08);flex-shrink:0}\n.ctrl-slider{display:flex;align-items:center;gap:.4rem;white-space:nowrap}\n.ctrl-slider-label{font-size:.4rem;color:var(--gray2)}\n.ctrl-slider-val{font-size:.42rem;color:var(--cyan);font-weight:700;min-width:22px}\ninput[type=range]{width:60px;height:3px;-webkit-appearance:none;background:rgba(0,229,255,.15);border-radius:2px;outline:none}\ninput[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:9px;height:9px;border-radius:50%;background:var(--cyan);cursor:pointer}\n.cms-sys-btn{padding:.2rem .4rem;border-radius:3px;font-size:.4rem;letter-spacing:.04em;font-family:var(--mono);cursor:pointer;border:1px solid rgba(0,229,255,.28);color:var(--cyan);background:rgba(0,229,255,.04);transition:all .16s;white-space:nowrap}\n.cms-sys-btn:hover{background:rgba(0,229,255,.1)}\n \n\/* \u2550\u2550\u2550 LAYER BAR \u2550\u2550\u2550 *\/\n#layer-bar{background:#060810!important;border-bottom:1px solid rgba(0,229,255,.06);padding:.3rem .6rem;display:flex;gap:.3rem;flex-wrap:nowrap;align-items:stretch;overflow-x:auto}\n.lcard{background:#04111c!important;border:1px solid rgba(0,51,64,.8);padding:3px 5px;cursor:pointer;display:flex;gap:3px;min-width:0;flex:1;transition:border-color .2s}\n.lcard:hover{border-color:rgba(0,229,255,.5)}\n.lbadge{min-width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:8px;font-weight:bold;color:#fff;border-radius:2px;font-family:var(--mono)}\n.lname{color:#00e5ff;font-size:7.5px;letter-spacing:0;font-weight:bold;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.ldesc{display:none}\n.lstat{color:#10b981;font-size:6.5px;margin-top:1px;font-weight:bold}\n \n\/* \u2550\u2550\u2550 CMS TOPOLOGY \u2550\u2550\u2550 *\/\n#cms-topo-wrap{width:100%;background:#07090f!important;position:relative;overflow:hidden}\n#cms-topo{width:100%;display:block}\n \n\/* Overlays on topology *\/\n.ov-tl{position:absolute;top:8px;left:8px;background:rgba(0,0,0,.85);border:1px solid rgba(0,51,64,.8);padding:5px 9px}\n.ov-tr{position:absolute;top:8px;right:8px;background:rgba(0,0,0,.85);border:1px solid #26a69a;padding:5px 10px;text-align:center}\n.ov-bl{position:absolute;bottom:8px;left:8px;background:rgba(0,0,0,.85);border:1px solid rgba(0,51,64,.8);padding:5px 9px;font-size:9px}\n.ov-br{position:absolute;bottom:8px;right:8px;background:rgba(0,0,0,.85);border:1px solid rgba(0,51,64,.8);padding:5px 9px;font-size:9px;cursor:pointer}\n.ovr{display:flex;justify-content:space-between;gap:18px;margin:2px 0;font-size:9px}\n.ovl{opacity:.5;font-family:var(--mono)}.ovc{color:#00e5ff;font-weight:bold;font-family:var(--mono)}\n.cembar-wrap{width:160px}\n.cembar-track{height:3px;background:#0a2030;margin-top:3px}\n.cembar-fill{height:100%;background:linear-gradient(90deg,#00e5ff,#ffc107);transition:width .8s}\n \n\/* \u2550\u2550\u2550 TRAFFIC + AGENT + ROT ROW \u2550\u2550\u2550 *\/\n.row2{display:grid;grid-template-columns:1fr 1fr 1fr;border-top:1px solid rgba(0,229,255,.08);height:150px;background:#06080f!important}\n.rpanel{border-right:1px solid rgba(0,229,255,.06);overflow:hidden;display:flex;flex-direction:column;background:#06080f!important}\n.rpanel:last-child{border-right:none}\n.ph{background:#04111c!important;border-bottom:1px solid rgba(0,229,255,.06);padding:4px 10px;display:flex;justify-content:space-between}\n.pt{font-size:9px;letter-spacing:2px;color:rgba(0,229,255,.5);font-family:var(--mono)}\n#trafficSvg{width:100%;flex:1}\n.agrid{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;padding:5px}\n.abox{background:#030d14!important;border:1px solid #0a2030;padding:3px;text-align:center;transition:all .3s}\n.abox.v{border-color:#ffc107}.abox.d{border-color:#10b981}\n.al{color:#00e5ff;font-size:8px;opacity:.7;font-family:var(--mono)}.at{color:#555;font-size:7px;font-family:var(--mono)}\n.aa{color:#ffc107;font-size:9px;font-weight:bold;margin:2px 0;font-family:var(--mono)}.ac{color:#10b981;font-size:7px;font-family:var(--mono)}\n.l10dec{font-size:9px;border-top:1px solid #0a2030;margin-top:2px;padding:3px 5px;font-family:var(--mono)}\n#rotHistory{font-size:9px;overflow-y:auto;height:115px;padding:4px 8px}\n.rentry{border-bottom:1px solid rgba(0,229,255,.04);padding:2px 0;display:grid;grid-template-columns:50px 1fr 55px;gap:3px;font-family:var(--mono)}\n \n\/* \u2550\u2550\u2550 CMS STATS BOTTOM \u2550\u2550\u2550 *\/\n#cms-stats{background:#060810!important;border-top:1px solid rgba(0,229,255,.1);display:grid;grid-template-columns:1fr 1fr 2fr 2fr;gap:0}\n.stats-col{padding:.7rem 1rem;border-right:1px solid rgba(0,229,255,.06);background:#060810!important}\n.stats-col:last-child{border-right:none}\n.stats-title{font-size:.4rem;letter-spacing:.2em;color:rgba(0,229,255,.38);text-transform:uppercase;margin-bottom:.5rem;padding-bottom:.25rem;border-bottom:1px solid rgba(0,229,255,.06);font-family:var(--mono)}\n.cms-kv{display:flex;justify-content:space-between;align-items:center;margin-bottom:.28rem}\n.cms-kv-key{font-size:.42rem;color:var(--gray2);font-family:var(--mono)}\n.cms-kv-val{font-size:.44rem;font-weight:700;font-family:var(--mono)}\n.ok{color:var(--green2)}.warn{color:#f59e0b}.crit{color:var(--red);animation:blink .8s ease-in-out infinite}\n.bar-row{margin-bottom:.35rem}\n.bar-label{display:flex;justify-content:space-between;margin-bottom:.18rem;font-size:.4rem;color:var(--gray2);font-family:var(--mono)}\n.bar-bg{height:3px;background:rgba(0,229,255,.08)!important;border-radius:2px;overflow:hidden}\n.bar-fg{height:100%;border-radius:2px;transition:width .7s ease}\n.cbmc-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:2px}\n.cbmc-badge{font-size:.36rem;padding:2px 3px;border-radius:2px;text-align:center;letter-spacing:.03em;font-weight:700;transition:all .25s;cursor:default;font-family:var(--mono)}\n.cbmc-badge.pass{background:rgba(16,185,129,.1);color:#10b981;border:.5px solid rgba(16,185,129,.25)}\n.cbmc-badge.active{background:rgba(0,229,255,.18);color:var(--cyan);border:.5px solid var(--cyan);box-shadow:0 0 4px rgba(0,229,255,.35)}\n.cms-log-box{background:#030810!important;border-radius:3px;padding:.45rem .5rem;height:160px;overflow-y:auto;margin-top:.25rem}\n.cms-log-box::-webkit-scrollbar{width:2px}.cms-log-box::-webkit-scrollbar-thumb{background:rgba(0,229,255,.12)}\n.cll{font-size:.4rem;line-height:2;display:flex;gap:.35rem;flex-wrap:wrap}\n.clt{color:rgba(0,229,255,.3);min-width:50px;font-family:var(--mono)}\n.clok{color:var(--green2);min-width:46px;font-family:var(--mono)}.clwn{color:#f59e0b;min-width:46px;font-family:var(--mono)}.clcr{color:var(--red);min-width:46px;font-family:var(--mono)}\n.clm{color:rgba(148,163,184,.55);font-family:var(--mono)}.clip{color:var(--cyan);font-weight:700;font-family:var(--mono)}\n \n@media(max-width:800px){\n  #cms-stats{grid-template-columns:1fr 1fr}\n  .cbmc-grid{grid-template-columns:repeat(4,1fr)}\n  .row2{grid-template-columns:1fr}\n}\n \n\/* \u2500\u2500 OVERLAY ROW OVERRIDES \u2500\u2500 *\/\n#cms-overlay-row .ov-tl,\n#cms-overlay-row .ov-tr,\n#cms-overlay-row .ov-bl,\n#cms-overlay-row .ov-br {\n  position:relative !important;\n  top:auto !important; left:auto !important;\n  bottom:auto !important; right:auto !important;\n  background:#06080f !important;\n  border-color:rgba(0,229,255,.12) !important;\n  padding:8px 12px !important;\n  flex:1 !important;\n  min-width:170px !important;\n  font-size:9px !important;\n}\n#cms-overlay-row .ov-tr {\n  flex:0 0 auto !important;\n  border-color:#26a69a !important;\n  text-align:center !important;\n  min-width:100px !important;\n}\n#cms-overlay-row .cembar-wrap { width:180px !important; }\n \n<\/style>\n<\/head>\n<body style=\"background:#08090f!important\">\n<div id=\"dark-wrapper\" style=\"background:#08090f;min-height:100vh\">\n \n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<!-- PANEL 1 : SOLAR DEFENSE v3.1          -->\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<div id=\"panel-solar\">\n  <div class=\"sol-hdr\">\n    <div>\n      <div class=\"sol-hdr-title\">CORTEX ORIGIN\u2122 \u2014 Architecture solaire \u00b7 v3.1<\/div>\n      <div class=\"sol-hdr-sub\">Les attaques ne p\u00e9n\u00e8trent jamais la TCB \u2014 stopp\u00e9es en orbite \u00b7 14 modules \u00b7 AVA-VAN.5 evidence-grade EAL7<\/div>\n    <\/div>\n    <div style=\"display:flex;align-items:center;gap:6px;font-size:.48rem;letter-spacing:.1em\">\n      <span class=\"dot\" id=\"sim-dot\" style=\"background:#10b981;animation:blink 1.2s ease-in-out infinite\"><\/span>\n      <span id=\"sim-label\" style=\"color:#10b981\">ACTIF<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"sol-modes\">\n    <button class=\"mbtn mbtn-n active\" id=\"btn-norm\"   onclick=\"setMode('normal')\">\u26a1 STD<\/button>\n    <button class=\"mbtn mbtn-z\"        id=\"btn-zd\"     onclick=\"setMode('zeroday')\">\ud83d\udc80 0-DAY<\/button>\n    <button class=\"mbtn mbtn-e\"        id=\"btn-exante\" onclick=\"setMode('exante')\">\u2131 EX ANTE<\/button>\n    <button class=\"mbtn mbtn-h\"        id=\"btn-hybrid\" onclick=\"setMode('hybrid')\">\ud83e\udd16 IA+HUM<\/button>\n    <button class=\"mbtn mbtn-c active\" id=\"btn-auto\"   onclick=\"toggleAuto()\" style=\"margin-left:.3rem\">\u23f5 Auto<\/button>\n    <button class=\"mbtn mbtn-c\"        onclick=\"simReset()\">\u21ba<\/button>\n  <\/div>\n  <div class=\"sol-met\">\n    <div class=\"met\"><div class=\"met-v\" id=\"m-blocked\" style=\"color:#10b981\">0<\/div><div class=\"met-l\">Bloqu\u00e9es<\/div><\/div>\n    <div class=\"met\"><div class=\"met-v\" id=\"m-mode\" style=\"color:#D97706\">STD<\/div><div class=\"met-l\">Mode<\/div><\/div>\n    <div class=\"met\"><div class=\"met-v\" id=\"m-lat\" style=\"color:var(--tcb)\">\u2014<\/div><div class=\"met-l\">Latence<\/div><\/div>\n    <div class=\"met\"><div class=\"met-v\" id=\"m-layer\" style=\"color:var(--gray2)\">\u2014<\/div><div class=\"met-l\">Couche<\/div><\/div>\n    <div class=\"met\"><div class=\"met-v\" style=\"color:var(--red)\">~940<\/div><div class=\"met-l\">CWE couverts<\/div><\/div>\n    <div class=\"met\"><div class=\"met-v\" style=\"color:var(--purple2)\">14<\/div><div class=\"met-l\">Modules<\/div><\/div>\n  <\/div>\n  <svg id=\"solar\" viewBox=\"0 0 500 500\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n  <rect width=\"500\" height=\"500\" fill=\"#08090f\" rx=\"5\"\/>\n  <defs>\n    <filter id=\"gs\"><feGaussianBlur stdDeviation=\"6\" result=\"b\"\/><feMerge><feMergeNode in=\"b\"\/><feMergeNode in=\"SourceGraphic\"\/><\/feMerge><\/filter>\n    <filter id=\"gm\"><feGaussianBlur stdDeviation=\"2\" result=\"b\"\/><feMerge><feMergeNode in=\"b\"\/><feMergeNode in=\"SourceGraphic\"\/><\/feMerge><\/filter>\n    <radialGradient id=\"tcb-g\" cx=\"50%\" cy=\"50%\" r=\"50%\"><stop offset=\"0%\" stop-color=\"#a5b4fc\"\/><stop offset=\"50%\" stop-color=\"#4f46e5\"\/><stop offset=\"100%\" stop-color=\"#1e1b4b\"\/><\/radialGradient>\n    <radialGradient id=\"halo\" cx=\"50%\" cy=\"50%\" r=\"50%\"><stop offset=\"0%\" stop-color=\"#4f46e5\" stop-opacity=\".1\"\/><stop offset=\"100%\" stop-color=\"#4f46e5\" stop-opacity=\"0\"\/><\/radialGradient>\n  <\/defs>\n  <circle cx=\"250\" cy=\"250\" r=\"220\" fill=\"none\" stroke=\"rgba(153,60,29,.15)\" stroke-width=\".6\" stroke-dasharray=\"3,8\"\/>\n  <circle cx=\"250\" cy=\"250\" r=\"157\" fill=\"none\" stroke=\"rgba(217,119,6,.22)\" stroke-width=\".6\" stroke-dasharray=\"2,5\"\/>\n  <circle cx=\"250\" cy=\"250\" r=\"100\" fill=\"none\" stroke=\"rgba(15,110,86,.16)\" stroke-width=\".6\" stroke-dasharray=\"2,6\"\/>\n  <circle cx=\"250\" cy=\"250\" r=\"52\"  fill=\"rgba(79,70,229,.04)\" stroke=\"rgba(83,74,183,.22)\" stroke-width=\".6\"\/>\n  <rect id=\"bg-exante\" x=\"2\" y=\"120\" width=\"68\" height=\"260\" rx=\"3\" fill=\"#065F46\" opacity=\"0\" style=\"transition:opacity .3s\"\/>\n  <path id=\"arc-exante\" d=\"M 68 122 A 170 170 0 0 0 68 378\" fill=\"none\" stroke=\"#065F46\" stroke-width=\"3\" opacity=\".5\" stroke-linecap=\"round\" style=\"transition:all .3s\"\/>\n  <text transform=\"translate(52,250) rotate(-90)\" text-anchor=\"middle\" font-size=\"5.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#065F46\" font-weight=\"bold\" letter-spacing=\"2\" opacity=\".85\">EX ANTE \u00b7 \u2131 HOL \u00b7 0 CVE<\/text>\n  <rect id=\"bg-m24\" x=\"430\" y=\"120\" width=\"68\" height=\"260\" rx=\"3\" fill=\"#534AB7\" opacity=\"0\" style=\"transition:opacity .3s\"\/>\n  <path id=\"arc-m24\" d=\"M 432 122 A 170 170 0 0 1 432 378\" fill=\"none\" stroke=\"#4338ca\" stroke-width=\"3\" opacity=\".5\" stroke-linecap=\"round\" style=\"transition:all .3s\"\/>\n  <text id=\"txt-m24\" transform=\"translate(448,250) rotate(90)\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#3C3489\" font-weight=\"bold\" letter-spacing=\"1.6\" opacity=\".88\" style=\"transition:all .3s\">M24 OFFLINE\u2122 \u00b7 CBMC 13\/13 \u00b7 halt_path 3,02 ns<\/text>\n  <circle id=\"wall-ring\" cx=\"250\" cy=\"250\" r=\"157\" fill=\"none\" stroke=\"#D97706\" stroke-width=\"2.5\" opacity=\".22\"\/>\n  <g><animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 250 250\" to=\"360 250 250\" dur=\"30s\" repeatCount=\"indefinite\"\/>\n    <circle cx=\"250\" cy=\"93\" r=\"3.5\" fill=\"#D97706\" opacity=\".48\"\/><circle cx=\"362\" cy=\"139\" r=\"2.5\" fill=\"#D97706\" opacity=\".35\"\/>\n    <circle cx=\"407\" cy=\"250\" r=\"3.5\" fill=\"#D97706\" opacity=\".48\"\/><circle cx=\"362\" cy=\"361\" r=\"2.5\" fill=\"#D97706\" opacity=\".35\"\/>\n    <circle cx=\"250\" cy=\"407\" r=\"3.5\" fill=\"#D97706\" opacity=\".48\"\/><circle cx=\"138\" cy=\"361\" r=\"2.5\" fill=\"#D97706\" opacity=\".35\"\/>\n    <circle cx=\"93\"  cy=\"250\" r=\"3.5\" fill=\"#D97706\" opacity=\".48\"\/><circle cx=\"138\" cy=\"139\" r=\"2.5\" fill=\"#D97706\" opacity=\".35\"\/>\n  <\/g>\n  <text x=\"250\" y=\"87\" text-anchor=\"middle\" font-size=\"5.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#92400E\" font-weight=\"bold\" letter-spacing=\"1.5\" opacity=\".82\">WALL-DOME\u2122<\/text>\n  <text x=\"250\" y=\"95\" text-anchor=\"middle\" font-size=\"4\" font-family=\"'JetBrains Mono',monospace\" fill=\"#B45309\" opacity=\".7\">100\/100 \u00b7 15\/15 CWE \u00b7 TNR 100%<\/text>\n  <circle cx=\"250\" cy=\"250\" r=\"72\" fill=\"url(#halo)\"\/>\n  <circle cx=\"250\" cy=\"250\" r=\"48\" fill=\"url(#tcb-g)\" filter=\"url(#gs)\"\/>\n  <circle cx=\"250\" cy=\"250\" r=\"48\" fill=\"none\" stroke=\"rgba(165,180,252,.22)\" stroke-width=\"1\"\/>\n  <circle cx=\"250\" cy=\"250\" r=\"48\" fill=\"none\" stroke=\"#818cf8\" stroke-width=\".8\" opacity=\".18\"><animate attributeName=\"r\" from=\"48\" to=\"68\" dur=\"2s\" repeatCount=\"indefinite\"\/><animate attributeName=\"opacity\" from=\".14\" to=\"0\" dur=\"2s\" repeatCount=\"indefinite\"\/><\/circle>\n  <text x=\"250\" y=\"244\" text-anchor=\"middle\" font-size=\"9\" font-family=\"'JetBrains Mono',monospace\" fill=\"#1e1b4b\" font-weight=\"bold\">TCB<\/text>\n  <text x=\"250\" y=\"255\" text-anchor=\"middle\" font-size=\"6.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#4338ca\">seL4 EAL7<\/text>\n  <text x=\"250\" y=\"264\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"rgba(67,56,202,.65)\">PRISM \u00b7 OMEGA<\/text>\n  <text x=\"250\" y=\"272\" text-anchor=\"middle\" font-size=\"4\" font-family=\"'JetBrains Mono',monospace\" fill=\"rgba(67,56,202,.45)\">421 ns \u00b7 T1..T8<\/text>\n  <circle id=\"tf1\" cx=\"250\" cy=\"250\" r=\"48\" fill=\"none\" stroke=\"#818cf8\" stroke-width=\"3.5\" opacity=\"0\" style=\"transition:opacity .08s\"\/>\n  <circle id=\"tf2\" cx=\"250\" cy=\"250\" r=\"58\" fill=\"none\" stroke=\"#4f46e5\" stroke-width=\"2\" opacity=\"0\" style=\"transition:opacity .14s\"\/>\n  <g id=\"mod-walld\"><circle cx=\"250\" cy=\"150\" r=\"19\" fill=\"rgba(15,110,86,.14)\" stroke=\"#0F6E56\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"250\" y=\"147\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#085041\" font-weight=\"bold\">WALL<\/text><text x=\"250\" y=\"155\" text-anchor=\"middle\" font-size=\"4\" font-family=\"'JetBrains Mono',monospace\" fill=\"#0F6E56\">DOME<\/text><\/g>\n  <g id=\"mod-aegis\"><circle cx=\"321\" cy=\"179\" r=\"19\" fill=\"rgba(15,110,86,.14)\" stroke=\"#0F6E56\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"321\" y=\"176\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#085041\" font-weight=\"bold\">AEGIS<\/text><text x=\"321\" y=\"184\" text-anchor=\"middle\" font-size=\"4\" font-family=\"'JetBrains Mono',monospace\" fill=\"#0F6E56\">94\/100<\/text><\/g>\n  <g id=\"mod-cms\"><circle cx=\"345\" cy=\"214\" r=\"17\" fill=\"rgba(124,58,237,.14)\" stroke=\"#5B2D8E\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"345\" y=\"211\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#c8a0ff\" font-weight=\"bold\">CMS\u2122<\/text><text x=\"345\" y=\"219\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7c3aed\">MTD<\/text><\/g>\n  <g id=\"mod-m09\"><circle cx=\"350\" cy=\"250\" r=\"19\" fill=\"rgba(15,110,86,.14)\" stroke=\"#0F6E56\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"350\" y=\"247\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#085041\" font-weight=\"bold\">M09<\/text><text x=\"350\" y=\"255\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#0F6E56\">100\/100<\/text><\/g>\n  <g id=\"mod-sent\"><circle cx=\"321\" cy=\"321\" r=\"19\" fill=\"rgba(15,110,86,.14)\" stroke=\"#0F6E56\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"321\" y=\"318\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#085041\" font-weight=\"bold\">SENT.<\/text><text x=\"321\" y=\"326\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#0F6E56\">100\/100<\/text><\/g>\n  <g id=\"mod-atlas\"><circle cx=\"250\" cy=\"350\" r=\"19\" fill=\"rgba(15,110,86,.14)\" stroke=\"#0F6E56\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"250\" y=\"347\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#085041\" font-weight=\"bold\">ATLAS\u2122<\/text><text x=\"250\" y=\"355\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#22c55e\">97\/100<\/text><\/g>\n  <g id=\"mod-m11\"><circle cx=\"179\" cy=\"321\" r=\"19\" fill=\"rgba(15,110,86,.14)\" stroke=\"#0F6E56\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"179\" y=\"318\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#085041\" font-weight=\"bold\">M11<\/text><text x=\"179\" y=\"326\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#0F6E56\">100\/100<\/text><\/g>\n  <g id=\"mod-prism\"><circle cx=\"150\" cy=\"250\" r=\"19\" fill=\"rgba(79,70,229,.14)\" stroke=\"#818cf8\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"150\" y=\"247\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#3C3489\" font-weight=\"bold\">PRISM<\/text><text x=\"150\" y=\"255\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#534AB7\">100\/100<\/text><\/g>\n  <g id=\"mod-m00\"><circle cx=\"179\" cy=\"179\" r=\"19\" fill=\"rgba(79,70,229,.14)\" stroke=\"#818cf8\" stroke-width=\"1.8\" filter=\"url(#gm)\"\/><text x=\"179\" y=\"176\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#3C3489\" font-weight=\"bold\">M00<\/text><text x=\"179\" y=\"184\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#534AB7\">RoT<\/text><\/g>\n  <g id=\"cwe-INJECT\"><circle cx=\"250\" cy=\"30\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"250\" y=\"27\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">INJECT.<\/text><text x=\"250\" y=\"34\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">89\u00b778<\/text><\/g>\n  <g id=\"cwe-MEM\"><circle cx=\"341\" cy=\"49\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"341\" y=\"46\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">MEM<\/text><text x=\"341\" y=\"53\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">119\u00b7787<\/text><\/g>\n  <g id=\"cwe-AUTH\"><circle cx=\"414\" cy=\"101\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"414\" y=\"98\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">AUTH.<\/text><text x=\"414\" y=\"105\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">287\u00b7522<\/text><\/g>\n  <g id=\"cwe-ACCES\"><circle cx=\"462\" cy=\"174\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"462\" y=\"171\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">ACC\u00c8S<\/text><text x=\"462\" y=\"178\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">269<\/text><\/g>\n  <g id=\"cwe-CRYPTO\"><circle cx=\"470\" cy=\"263\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"470\" y=\"260\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">CRYPTO<\/text><text x=\"470\" y=\"267\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">327<\/text><\/g>\n  <g id=\"cwe-CONFIG\"><circle cx=\"441\" cy=\"361\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"441\" y=\"358\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">CONFIG<\/text><text x=\"441\" y=\"365\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">16<\/text><\/g>\n  <g id=\"cwe-CONC\"><circle cx=\"380\" cy=\"432\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"380\" y=\"429\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">RACE<\/text><text x=\"380\" y=\"436\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">362<\/text><\/g>\n  <g id=\"cwe-DOS\"><circle cx=\"296\" cy=\"468\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"296\" y=\"465\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">DoS<\/text><text x=\"296\" y=\"472\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">400<\/text><\/g>\n  <g id=\"cwe-DESER\"><circle cx=\"204\" cy=\"468\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"204\" y=\"465\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">D\u00c9S\u00c9R.<\/text><text x=\"204\" y=\"472\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">502<\/text><\/g>\n  <g id=\"cwe-SC\"><circle cx=\"120\" cy=\"432\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"120\" y=\"429\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">SUPPLY<\/text><text x=\"120\" y=\"436\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">1104<\/text><\/g>\n  <g id=\"cwe-INFO\"><circle cx=\"59\" cy=\"361\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"59\" y=\"358\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">INFO<\/text><text x=\"59\" y=\"365\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">918<\/text><\/g>\n  <g id=\"cwe-SIDE\"><circle cx=\"30\" cy=\"263\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"30\" y=\"260\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">SIDE<\/text><text x=\"30\" y=\"267\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">208<\/text><\/g>\n  <g id=\"cwe-LOG\"><circle cx=\"38\" cy=\"174\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"38\" y=\"171\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">LOGIC<\/text><text x=\"38\" y=\"178\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">840<\/text><\/g>\n  <g id=\"cwe-AI\"><circle cx=\"86\" cy=\"101\" r=\"16\" fill=\"rgba(239,68,68,.07)\" stroke=\"#ef4444\" stroke-width=\"1.4\"\/><text x=\"86\" y=\"98\" text-anchor=\"middle\" font-size=\"4.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B2800\" font-weight=\"bold\">IA\u00b7ADV.<\/text><text x=\"86\" y=\"105\" text-anchor=\"middle\" font-size=\"3.2\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">20<\/text><\/g>\n  <g id=\"cwe-ZD\"><circle cx=\"159\" cy=\"49\" r=\"17\" fill=\"rgba(220,38,38,.1)\" stroke=\"#dc2626\" stroke-width=\"1.8\"\/><circle cx=\"159\" cy=\"49\" r=\"17\" fill=\"none\" stroke=\"#dc2626\" stroke-width=\"1\" opacity=\".3\"><animate attributeName=\"r\" from=\"17\" to=\"28\" dur=\"0.9s\" repeatCount=\"indefinite\"\/><animate attributeName=\"opacity\" from=\".3\" to=\"0\" dur=\"0.9s\" repeatCount=\"indefinite\"\/><\/circle><text x=\"159\" y=\"46\" text-anchor=\"middle\" font-size=\"5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#7B0000\" font-weight=\"bold\">0-DAY<\/text><text x=\"159\" y=\"53\" text-anchor=\"middle\" font-size=\"3.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"#993C1D\">CVE:???<\/text><\/g>\n  <g id=\"anim-g\"><\/g>\n  <\/svg>\n  <div class=\"atk-card\" id=\"atk-card\">\n    <span class=\"atk-icon\" id=\"atk-icon\">\u23f3<\/span>\n    <div><div class=\"atk-name\" id=\"atk-name\" style=\"color:var(--gray2)\">En attente\u2026<\/div><div class=\"atk-sub\" id=\"atk-sub\">Simulation automatique active<\/div><\/div>\n    <div class=\"atk-right\"><div class=\"atk-lat\" id=\"atk-lat\" style=\"color:var(--gray2)\">\u2014<\/div><div class=\"atk-lay\" id=\"atk-lay\">\u2014<\/div><\/div>\n  <\/div>\n  <div class=\"sol-log\" id=\"sol-log\">\n    <div class=\"ll\"><span class=\"lt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">TCB seL4 EAL7 inviolable \u2014 <span class=\"lip\">T1..T8<\/span> \u2014 421 ns<\/span><\/div>\n    <div class=\"ll\"><span class=\"lt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">WALL-DOME\u2122 r=220 \u2014 <span class=\"lip\">15\/15 CWE<\/span> \u2014 TNR 100%<\/span><\/div>\n    <div class=\"ll\"><span class=\"lt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">CMS MORPHIC SHIELD\u2122 MTD actif \u2014 <span class=\"lip\">CBMC 60\/60<\/span> \u00b7 2,97 ns<\/span><\/div>\n  <\/div>\n<\/div>\n \n<!-- DIVIDER -->\n<div class=\"divider\">\n  <div class=\"div-line\"><\/div>\n  <span>\u27c1 CMS CORTEX MORPHIC SHIELD\u2122 \u00b7 EVAL-016 v5.2 \u00b7 Moving Target Defence \u00b7 Fisher-Yates \u00b7 CBMC 60\/60 \u00b7 ~125 Mds+<\/span>\n  <div class=\"div-line\"><\/div>\n<\/div>\n \n<!-- \u2550\u2550 CMS CONTROLS BAR \u2550\u2550 -->\n<div id=\"cms-controls\">\n  <div class=\"ctrl-group\">\n    <span class=\"ctrl-label\">\/\/ MORPHING<\/span>\n    <button class=\"cms-btn active\" id=\"cms-auto-morph\" onclick=\"this.classList.toggle('active')\"><span class=\"cbtn-dot\"><\/span>AUTO-MORPHING<\/button>\n    <button class=\"cms-btn active\" id=\"cms-rotation-ip\" onclick=\"this.classList.toggle('active')\"><span class=\"cbtn-dot\"><\/span>ROTATION IP (RFC 6598)<\/button>\n    <button class=\"cms-btn\" onclick=\"this.classList.toggle('active')\"><span class=\"cbtn-dot\"><\/span>REMAP PORTS<\/button>\n    <button class=\"cms-btn\" onclick=\"this.classList.toggle('active')\"><span class=\"cbtn-dot\"><\/span>TOPO SHUFFLE<\/button>\n    <button class=\"cms-btn\" onclick=\"triggerFullMorph()\"><span class=\"cbtn-dot\"><\/span>FULL SURFACE MORPH<\/button>\n  <\/div>\n  <div class=\"ctrl-sep\"><\/div>\n  <div class=\"ctrl-group\">\n    <span class=\"ctrl-label\">\/\/ ATTAQUES<\/span>\n    <button class=\"cms-atk-btn\" id=\"ba-scan\"  onclick=\"cmsAttack('portscan',this)\">\u26a1 PORT SCAN<\/button>\n    <button class=\"cms-atk-btn\" id=\"ba-brute\" onclick=\"cmsAttack('brute',this)\">\u26a1 BRUTEFORCE<\/button>\n    <button class=\"cms-atk-btn\" id=\"ba-recon\" onclick=\"cmsAttack('recon',this)\">\u26a1 RECONNAISSANCE<\/button>\n    <button class=\"cms-atk-btn\" id=\"ba-ddos\"  onclick=\"cmsAttack('ddos',this)\">\u26a1 DDoS FLOOD<\/button>\n    <button class=\"cms-atk-btn\" id=\"ba-apt\"   onclick=\"cmsAttack('apt',this)\">\u26a1 APT INFILTRATION<\/button>\n    <button class=\"cms-atk-btn\" id=\"ba-zero\"  onclick=\"cmsAttack('zero',this)\">\u26a1 ZERO-DAY<\/button>\n    <button class=\"cms-full-sim\" id=\"ba-full\" onclick=\"fullSim()\">\u26a1 SIMULATION AI+HUMAIN<\/button>\n  <\/div>\n  <div class=\"ctrl-sep\"><\/div>\n  <div class=\"ctrl-group\">\n    <span class=\"ctrl-label\">\/\/ PARAMS<\/span>\n    <div class=\"ctrl-slider\"><span class=\"ctrl-slider-label\">Morph rate<\/span><input type=\"range\" min=\"1\" max=\"20\" value=\"2\" oninput=\"morphRateVal.textContent=this.value+'s';morphInterval=parseInt(this.value)*1000\"><span class=\"ctrl-slider-val\" id=\"morphRateVal\">2s<\/span><\/div>\n    <div class=\"ctrl-slider\"><span class=\"ctrl-slider-label\">Nodes<\/span><input type=\"range\" min=\"5\" max=\"40\" value=\"16\" oninput=\"nodesVal.textContent=this.value;rebuildNodes(parseInt(this.value))\"><span class=\"ctrl-slider-val\" id=\"nodesVal\">16<\/span><\/div>\n    <div class=\"ctrl-slider\"><span class=\"ctrl-slider-label\">Threat<\/span><input type=\"range\" min=\"1\" max=\"4\" value=\"4\" oninput=\"updateThreat(this.value)\"><span class=\"ctrl-slider-val\" id=\"threatVal\" style=\"color:var(--red)\">CRIT<\/span><\/div>\n  <\/div>\n  <div class=\"ctrl-sep\"><\/div>\n  <div class=\"ctrl-group\">\n    <button class=\"cms-sys-btn\" onclick=\"startCmsSim()\">\u25b6 START<\/button>\n    <button class=\"cms-sys-btn\" id=\"cms-pause-btn\" onclick=\"pauseCmsSim()\">\u23f8 PAUSE<\/button>\n    <button class=\"cms-sys-btn\" onclick=\"resetCmsSim()\">\u21ba RESET<\/button>\n  <\/div>\n<\/div>\n \n<!-- \u2550\u2550 LAYER BAR L4\u2192L10 \u2550\u2550 -->\n<div id=\"layer-bar\">\n  <span class=\"ctrl-label\" style=\"padding-top:5px\">\/\/ COUCHES<\/span>\n  <div class=\"lcard\" onclick=\"clickLayer('l4',this)\"><div class=\"lbadge\" style=\"background:#1565c0\">L4<\/div><div><div class=\"lname\">Byzantine Consensus<\/div><div class=\"ldesc\">PBFT N=4 \u00b7 anti-replay \u00b7 HKDF<\/div><div class=\"lstat\">EAL6+ \u00b7 99%<\/div><\/div><\/div>\n  <div class=\"lcard\" onclick=\"clickLayer('l5',this)\"><div class=\"lbadge\" style=\"background:#1b5e20\">L5<\/div><div><div class=\"lname\">HON Adaptatif<\/div><div class=\"ldesc\">DomainDRBG \u00b7 HKDF poison \u00b7 audit chain<\/div><div class=\"lstat\">EAL6+ \u00b7 99%<\/div><\/div><\/div>\n  <div class=\"lcard\" onclick=\"clickLayer('l6',this)\"><div class=\"lbadge\" style=\"background:#6a1b9a\">L6<\/div><div><div class=\"lname\">Memory Guard<\/div><div class=\"ldesc\">Canaris head\/mid\/tail \u00b7 fail-closed<\/div><div class=\"lstat\">EAL5+ \u00b7 97%<\/div><\/div><\/div>\n  <div class=\"lcard\" onclick=\"clickLayer('l7',this)\"><div class=\"lbadge\" style=\"background:#0d47a1\">L7<\/div><div><div class=\"lname\">ZK Topology v8<\/div><div class=\"ldesc\">HKDF 96B \u00b7 chain_state 16B \u00b7 commitment<\/div><div class=\"lstat\" id=\"l7stat\">morph 1.000<\/div><\/div><\/div>\n  <div class=\"lcard\" onclick=\"clickLayer('l8',this)\"><div class=\"lbadge\" style=\"background:#e65100\">L8<\/div><div><div class=\"lname\">Adversarial ML<\/div><div class=\"ldesc\">noise 0.55 \u00b7 degradation 0.967 \u00b7 F-L8-01<\/div><div class=\"lstat\">EAL5+ \u00b7 95%<\/div><\/div><\/div>\n  <div class=\"lcard\" onclick=\"clickLayer('l9',this)\"><div class=\"lbadge\" style=\"background:#006064\">L9<\/div><div><div class=\"lname\">Temporal Morphism v4<\/div><div class=\"ldesc\">HMAC-DRBG \u00d7 3 \u00b7 jitter [500\u00b5s,8ms]<\/div><div class=\"lstat\" id=\"l9stat\">pred 0.194<\/div><\/div><\/div>\n  <div class=\"lcard\" style=\"border-color:rgba(255,193,7,.25)\" onclick=\"clickLayer('l10',this)\"><div class=\"lbadge\" style=\"background:#f57f17\">L10<\/div><div><div class=\"lname\">Orchestrateur Cognitif v5<\/div><div class=\"ldesc\">argmax DRBG \u00b7 4 mod\u00e8les \u00b7 bypass 0\/300<\/div><div class=\"lstat\" style=\"color:#ffc107\">EAL7 cand \u00b7 100%<\/div><\/div><\/div>\n<\/div>\n \n<!-- \u2550\u2550 CMS TOPOLOGY \u2550\u2550 -->\n<div id=\"cms-topo-wrap\">\n  <svg id=\"cms-topo\" viewBox=\"0 0 1200 520\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" preserveAspectRatio=\"xMidYMid meet\" style=\"width:100%;display:block\">\n  <defs>\n    <filter id=\"cglow\"><feGaussianBlur stdDeviation=\"5\" result=\"b\"\/><feMerge><feMergeNode in=\"b\"\/><feMergeNode in=\"SourceGraphic\"\/><\/feMerge><\/filter>\n    <filter id=\"cglow-sm\"><feGaussianBlur stdDeviation=\"2.5\" result=\"b\"\/><feMerge><feMergeNode in=\"b\"\/><feMergeNode in=\"SourceGraphic\"\/><\/feMerge><\/filter>\n    <radialGradient id=\"core-g\" cx=\"50%\" cy=\"50%\" r=\"50%\"><stop offset=\"0%\" stop-color=\"#ff9500\"\/><stop offset=\"60%\" stop-color=\"#d97706\"\/><stop offset=\"100%\" stop-color=\"#7c2d12\"\/><\/radialGradient>\n  <\/defs>\n  <line x1=\"0\" y1=\"260\" x2=\"1200\" y2=\"260\" stroke=\"rgba(0,229,255,.03)\" stroke-width=\"1\"\/>\n  <line x1=\"600\" y1=\"0\" x2=\"600\" y2=\"520\" stroke=\"rgba(0,229,255,.03)\" stroke-width=\"1\"\/>\n  <g id=\"cms-links\"><\/g>\n  <g id=\"cms-nodes\"><\/g>\n  <g id=\"cms-ips\"><\/g>\n  <g id=\"cms-effects\"><\/g>\n  <g id=\"cms-labels\"><\/g>\n  <g id=\"cms-tips\"><\/g>\n  <g id=\"cms-attacks\"><\/g>\n  <!-- CORE -->\n  <circle cx=\"600\" cy=\"260\" r=\"36\" fill=\"url(#core-g)\" filter=\"url(#cglow)\" opacity=\".92\"\/>\n  <circle cx=\"600\" cy=\"260\" r=\"36\" fill=\"none\" stroke=\"#ff9500\" stroke-width=\"1.5\" opacity=\".55\"><animate attributeName=\"r\" from=\"36\" to=\"54\" dur=\"1.4s\" repeatCount=\"indefinite\"\/><animate attributeName=\"opacity\" from=\".45\" to=\"0\" dur=\"1.4s\" repeatCount=\"indefinite\"\/><\/circle>\n  <text x=\"600\" y=\"255\" text-anchor=\"middle\" font-size=\"10\" font-family=\"'JetBrains Mono',monospace\" fill=\"#fff\" font-weight=\"bold\">CORE<\/text>\n  <text x=\"600\" y=\"268\" text-anchor=\"middle\" font-size=\"6.5\" font-family=\"'JetBrains Mono',monospace\" fill=\"rgba(255,200,100,.85)\">CHON \u00b7 TCB<\/text>\n  <\/svg>\n  <!-- Overlays -->\n    <div class=\"cembar-wrap\">\n      <div style=\"display:flex;justify-content:space-between;font-size:9px\"><span id=\"cem-v\" style=\"color:#ffc107;font-weight:bold;font-family:var(--mono)\">66\/57<\/span><span style=\"color:#10b981;font-size:8px;font-family:var(--mono)\">marge +35<\/span><\/div>\n      <div class=\"cembar-track\"><div class=\"cembar-fill\" id=\"cem-bar\" style=\"width:66%\"><\/div><\/div>\n      <div style=\"display:flex;justify-content:space-between;font-size:7px;color:#333;margin-top:1px;font-family:var(--mono)\"><span>0<\/span><span style=\"color:#10b981\">31\u2713<\/span><span>57<\/span><span>79<\/span><\/div>\n    <\/div>\n  <\/div>\n    <div id=\"eal-lv\" style=\"color:#ffc107;font-size:15px;font-weight:bold;letter-spacing:2px;font-family:var(--mono)\">EAL6+<\/div>\n    <div id=\"eal-sc\" style=\"color:#10b981;font-size:9px;font-family:var(--mono)\">57\/57 CEM<\/div>\n  <\/div>\n    <div class=\"ovr\"><span class=\"ovl\">MTTD LIVE<\/span><span class=\"ovc\" id=\"ov-mttd\">\u2014 ns<\/span><\/div>\n    <div class=\"ovr\"><span class=\"ovl\">ROTATIONS<\/span><span class=\"ovc\" id=\"ov-rots\">0<\/span><\/div>\n    <div class=\"ovr\"><span class=\"ovl\">MORPH DANS<\/span><span class=\"ovc\" id=\"ov-cd\">\u2014s<\/span><\/div>\n    <div class=\"ovr\"><span class=\"ovl\">COMMIT L7<\/span><span class=\"ovc\" id=\"ov-hash\" style=\"font-size:8px\">\u2014<\/span><\/div>\n  <\/div>\n    <div style=\"color:#ff9800;font-size:9px;font-family:var(--mono)\">\u2b24 CORE \u2014 Noyau TCB (PRISM\/OMEGA)<\/div>\n    <div style=\"color:#26a69a;font-size:9px;font-family:var(--mono)\">\u2b24 GW \u2014 Gateway consensus PBFT<\/div>\n    <div style=\"color:#00e5ff;font-size:9px;font-family:var(--mono)\">\u2b24 EP \u2014 Endpoint IP\/port rotatifs<\/div>\n    <div style=\"color:#ff6d00;font-size:9px;font-family:var(--mono)\">\u2b24 oHON \u2014 Honeypot actif L5<\/div>\n  <\/div>\n \n  <div class=\"ov-bl\" style=\"position:relative;flex:1;min-width:180px\">\n    <div class=\"ovr\"><span class=\"ovl\">HOT PATH<\/span><span class=\"ovc\">2,97 ns<\/span><\/div>\n  <div class=\"ov-br\" onclick=\"cycleLegend()\" style=\"position:relative;flex:1;min-width:180px\">\n    <div style=\"color:#00e5ff;opacity:.5;font-size:8px;letter-spacing:1px;margin-bottom:2px;font-family:var(--mono)\">\/\/ L\u00c9GENDE (cliquer)<\/div>\n  <div class=\"ov-tr\" id=\"eal-badge\" style=\"position:relative;flex:0 0 auto\">\n    <div style=\"color:#26a69a;font-size:8px;letter-spacing:2px;font-family:var(--mono)\">NIVEAU<\/div>\n<\/div>\n \n \n<!-- \u2550\u2550 TRAFFIC + AGENT VOTE + ROTATION HISTORY \u2550\u2550 -->\n<div class=\"row2\">\n  <div class=\"rpanel\">\n    <div class=\"ph\"><span class=\"pt\">\/\/ TRAFIC PAQUETS\/S<\/span><span style=\"color:#00e5ff;font-size:9px;font-family:var(--mono)\" id=\"pps-v\">0 p\/s<\/span><\/div>\n    <svg id=\"trafficSvg\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><polyline id=\"traf-line\" fill=\"none\" stroke=\"#00e5ff\" stroke-width=\"1.5\"\/><polygon id=\"traf-fill\" fill=\"#00e5ff\" fill-opacity=\"0.06\" stroke=\"none\"\/><\/svg>\n  <\/div>\n  <div class=\"rpanel\">\n    <div class=\"ph\"><span class=\"pt\">\/\/ L10 MULTI-AGENT VOTE<\/span><span style=\"color:#ffc107;font-size:9px;font-family:var(--mono)\">DIV 1.000<\/span><\/div>\n    <div class=\"agrid\">\n      <div class=\"abox\" id=\"ag-a\"><div class=\"al\">ENGINE A<\/div><div class=\"at\">seuil:20<\/div><div class=\"aa\" id=\"aa-act\">\u2014<\/div><div class=\"ac\" id=\"aa-conf\">\u2014<\/div><\/div>\n      <div class=\"abox\" id=\"ag-b\"><div class=\"al\">ENGINE B<\/div><div class=\"at\">seuil:30<\/div><div class=\"aa\" id=\"ab-act\">\u2014<\/div><div class=\"ac\" id=\"ab-conf\">\u2014<\/div><\/div>\n      <div class=\"abox\" id=\"ag-c\"><div class=\"al\">ENGINE C<\/div><div class=\"at\">seuil:45<\/div><div class=\"aa\" id=\"ac-act\">\u2014<\/div><div class=\"ac\" id=\"ac-conf\">\u2014<\/div><\/div>\n    <\/div>\n    <div class=\"l10dec\"><span style=\"color:#00e5ff;opacity:.5\">DECISION<\/span><span id=\"l10-dec\" style=\"color:#ffc107;font-weight:bold;margin-left:8px\">NONE<\/span><span id=\"l10-ent\" style=\"color:#10b981;margin-left:10px\">H=\u2014<\/span><\/div>\n  <\/div>\n  <div class=\"rpanel\">\n    <div class=\"ph\"><span class=\"pt\">\/\/ HISTORIQUE ROTATIONS<\/span><span style=\"color:#ffc107;font-size:9px;font-family:var(--mono)\" id=\"rot-cnt\">0<\/span><\/div>\n    <div id=\"rotHistory\"><\/div>\n  <\/div>\n<\/div>\n \n<!-- \u2550\u2550 CMS STATS BOTTOM \u2550\u2550 -->\n<div id=\"cms-stats\">\n  <div class=\"stats-col\">\n    <div class=\"stats-title\">\/\/ STATS EXPOSITION<\/div>\n    <div class=\"cms-kv\"><span class=\"cms-kv-key\">TAUX SUCC\u00c8S ATT.<\/span><span class=\"cms-kv-val ok\" id=\"stat-succ\">0%<\/span><\/div>\n    <div class=\"cms-kv\"><span class=\"cms-kv-key\">THREAT LEVEL<\/span><span class=\"cms-kv-val crit\" id=\"stat-threat\">CRITICAL<\/span><\/div>\n    <div class=\"cms-kv\"><span class=\"cms-kv-key\">STRAT\u00c9GIE MTD<\/span><span class=\"cms-kv-val warn\" id=\"stat-strat\">LOCKDOWN<\/span><\/div>\n    <div class=\"cms-kv\"><span class=\"cms-kv-key\">UPTIME<\/span><span class=\"cms-kv-val\" id=\"stat-uptime\" style=\"color:var(--cyan)\">00:00:00<\/span><\/div>\n    <div class=\"cms-kv\"><span class=\"cms-kv-key\">ROTATIONS<\/span><span class=\"cms-kv-val\" id=\"stat-rot\" style=\"color:var(--purple2)\">0<\/span><\/div>\n    <div class=\"cms-kv\"><span class=\"cms-kv-key\">HOT PATH<\/span><span class=\"cms-kv-val\" style=\"color:var(--purple2)\">2,97 ns<\/span><\/div>\n    <div class=\"cms-kv\"><span class=\"cms-kv-key\">FUZZING<\/span><span class=\"cms-kv-val ok\">~125 Mds+ \u00b7 0 crash<\/span><\/div>\n  <\/div>\n  <div class=\"stats-col\">\n    <div class=\"stats-title\">\/\/ SCORE EXPOSITION<\/div>\n    <div class=\"bar-row\"><div class=\"bar-label\"><span>PORT SCAN<\/span><span id=\"bar-ps-v\" style=\"color:var(--red)\">85%<\/span><\/div><div class=\"bar-bg\"><div class=\"bar-fg\" id=\"bar-ps\" style=\"width:85%;background:var(--red)\"><\/div><\/div><\/div>\n    <div class=\"bar-row\"><div class=\"bar-label\"><span>BRUTEFORCE<\/span><span id=\"bar-bf-v\" style=\"color:#f59e0b\">38%<\/span><\/div><div class=\"bar-bg\"><div class=\"bar-fg\" id=\"bar-bf\" style=\"width:38%;background:#f59e0b\"><\/div><\/div><\/div>\n    <div class=\"bar-row\"><div class=\"bar-label\"><span>RECON<\/span><span id=\"bar-rc-v\" style=\"color:var(--green2)\">57%<\/span><\/div><div class=\"bar-bg\"><div class=\"bar-fg\" id=\"bar-rc\" style=\"width:57%;background:var(--green2)\"><\/div><\/div><\/div>\n    <div class=\"bar-row\"><div class=\"bar-label\"><span>DDoS<\/span><span id=\"bar-dd-v\" style=\"color:var(--red)\">88%<\/span><\/div><div class=\"bar-bg\"><div class=\"bar-fg\" id=\"bar-dd\" style=\"width:88%;background:var(--red)\"><\/div><\/div><\/div>\n    <div class=\"bar-row\"><div class=\"bar-label\"><span>APT<\/span><span id=\"bar-apt-v\" style=\"color:#9c27b0\">0%<\/span><\/div><div class=\"bar-bg\"><div class=\"bar-fg\" id=\"bar-apt\" style=\"width:0%;background:#9c27b0\"><\/div><\/div><\/div>\n    <div class=\"bar-row\"><div class=\"bar-label\"><span>ZERO-DAY<\/span><span id=\"bar-zd-v\" style=\"color:var(--red)\">0%<\/span><\/div><div class=\"bar-bg\"><div class=\"bar-fg\" id=\"bar-zd\" style=\"width:0%;background:var(--red)\"><\/div><\/div><\/div>\n    <div style=\"margin-top:.5rem;padding-top:.4rem;border-top:1px solid rgba(0,229,255,.06)\">\n      <div class=\"cms-kv\"><span class=\"cms-kv-key\">CEM BRUT<\/span><span class=\"cms-kv-val warn\" id=\"cms-cem-val\">66\/57 (+9)<\/span><\/div>\n      <div class=\"cms-kv\"><span class=\"cms-kv-key\">AVA_VAN.5<\/span><span class=\"cms-kv-val ok\">+35 pts marge<\/span><\/div>\n      <div class=\"cms-kv\"><span class=\"cms-kv-key\">VUL-009\u2192012<\/span><span class=\"cms-kv-val ok\">NON EXPLOIT<\/span><\/div>\n    <\/div>\n  <\/div>\n  <div class=\"stats-col\">\n    <div class=\"stats-title\">\/\/ PREUVES CBMC \u2014 P01-P60 \u00b7 60\/60 PASS<\/div>\n    <div class=\"cbmc-grid\" id=\"cbmc-grid\"><\/div>\n  <\/div>\n  <div class=\"stats-col\" style=\"display:flex;flex-direction:column\">\n    <div class=\"stats-title\">\/\/ LOG HMAC CHAIN<\/div>\n    <div class=\"cms-log-box\" id=\"cms-log\">\n      <div class=\"cll\"><span class=\"clt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"clok\">[ OK ]<\/span><span class=\"clm\">CMS MORPHIC SHIELD\u2122 initialis\u00e9 \u2014 EVAL-016 v5.2<\/span><\/div>\n      <div class=\"cll\"><span class=\"clt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"clok\">[ OK ]<\/span><span class=\"clm\">Fisher-Yates MTD \u2014 rotation <span class=\"clip\">IP\/PORT<\/span> \u00b7 RFC 6598<\/span><\/div>\n      <div class=\"cll\"><span class=\"clt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"clok\">[ OK ]<\/span><span class=\"clm\">CBMC <span class=\"clip\">60\/60 PASS<\/span> \u00b7 P01\u2013P60 \u00b7 0 failed<\/span><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n \n<script>\n\/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\/\/ SOLAR DEFENSE ENGINE (unchanged from original)\n\/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nconst NS='http:\/\/www.w3.org\/2000\/svg';\nconst CX=250,CY=250,R_CWE=220,R_WALL=157,R_L1B=100;\nconst CWE_IDS=['INJECT','MEM','AUTH','ACCES','CRYPTO','CONFIG','CONC','DOS','DESER','SC','INFO','SIDE','LOG','AI','ZD'];\nconst CWE_POS={};\nCWE_IDS.forEach((id,i)=>{const a=(-90+i*24)*Math.PI\/180;CWE_POS[id]=[CX+R_CWE*Math.cos(a),CY+R_CWE*Math.sin(a)];});\nfunction onRing(cx,cy,r){const dx=CX-cx,dy=CY-cy,d=Math.hypot(dx,dy);return[cx+dx*(1-r\/d),cy+dy*(1-r\/d)];}\nconst NORMAL=[\n  {cwe:'INJECT',icon:'\ud83d\udee1',name:'MTD \u2014 Reconnaissance r\u00e9seau',sub:'CMS MORPHIC SHIELD\u2122 \u00b7 Fisher-Yates \u00b7 2,97 ns',blocked:'CMS\u2122',mods:['cms'],lat:'2,97 ns',layer:'L1b+ MTD',color:'#7c3aed',stopAt:'WALL',isMTD:true,steps:[{d:0,t:'warn',m:'CMS MORPHIC\u2122',l:'Scan r\u00e9seau \u00b7 Fisher-Yates \u00b7 rotation IP\/port <30s'},{d:220,t:'warn',m:'CMS MORPHIC\u2122',l:'Honeypots TCP actifs \u00b7 topologie fant\u00f4me'},{d:440,t:'ok',m:'CMS MORPHIC\u2122',l:'Reconnaissance impossible \u00b7 2,97 ns \u00b7 EVAL-016'}]},\n  {cwe:'INJECT',icon:'\ud83d\udc89',name:'Injection SQL\/OS',sub:'CWE-089 \u00b7 WALL-DOME r=220',blocked:'WALL-DOME\u2122',mods:['walld'],lat:'~2,1 \u00b5s',layer:'L1b',color:'#f97316',stopAt:'WALL',steps:[{d:0,t:'warn',m:'WALL-DOME\u2122',l:'CWE-089 SQL \u2014 payload analys\u00e9'},{d:380,t:'warn',m:'AEGIS\u2122',l:'Pattern injection \u2014 WP goals actifs'},{d:750,t:'ok',m:'WALL-DOME\u2122',l:'Bloqu\u00e9 r=220 \u00b7 2,1 \u00b5s'}]},\n  {cwe:'DOS',icon:'\ud83c\udf0a',name:'DoS flood adaptatif',sub:'CWE-400 \u00b7 M09-CB L1b',blocked:'M09 CB',mods:['m09'],lat:'~2,1 \u00b5s',layer:'L1b',color:'#06b6d4',stopAt:'L1B',steps:[{d:0,t:'warn',m:'M09-CB',l:'CWE-400 saturation \u2014 circuit ouvert'},{d:380,t:'warn',m:'AEGIS\u2122',l:'Playbook d\u00e9fensif \u2014 isolation'},{d:750,t:'ok',m:'M09-CB',l:'DoS neutralis\u00e9 \u00b7 r=140 \u00b7 100\/100'}]},\n  {cwe:'AUTH',icon:'\ud83d\udd11',name:'Brute-force SSH',sub:'CWE-307 \u00b7 SENTINEL',blocked:'SENTINEL',mods:['sent','m09'],lat:'~2,1 \u00b5s',layer:'L1b',color:'#f59e0b',stopAt:'L1B',steps:[{d:0,t:'warn',m:'SENTINEL',l:'CWE-307 \u2014 8 tentatives\/3s'},{d:380,t:'warn',m:'M09-CB',l:'Rate limiting \u00b7 9,0 ns'},{d:750,t:'ok',m:'SENTINEL',l:'IP bannie \u00b7 alerte PRISM'}]},\n  {cwe:'SC',icon:'\ud83d\udd17',name:'Supply Chain',sub:'CWE-1104 \u00b7 ATLAS\u2122',blocked:'ATLAS\u2122',mods:['atlas'],lat:'~2,1 \u00b5s',layer:'L1b',color:'#84cc16',stopAt:'L1B',steps:[{d:0,t:'warn',m:'ATLAS\u2122',l:'CWE-1104 \u2014 composant non-v\u00e9rifi\u00e9'},{d:380,t:'warn',m:'OMEGA',l:'PolicyForge \u2014 propagation bloqu\u00e9e'},{d:750,t:'ok',m:'ATLAS\u2122',l:'Supply chain bloqu\u00e9e \u00b7 97\/100'}]},\n];\nconst ZERODAY=[\n  {cwe:'ZD',icon:'\ud83d\udc80',name:'Zero-Day kernel (CVE inconnu)',sub:'0-DAY \u2014 L1b \u00b7 421 ns',blocked:'seL4 EAL7',mods:['m00'],lat:'421 ns',layer:'TCB\u2192L1b',color:'#dc2626',stopAt:'L1B',steps:[{d:0,t:'warn',m:'seL4 EAL7',l:'Zero-Day \u2014 T1\/T2 actif \u00b7 0 CVE'},{d:330,t:'warn',m:'M00 RoT',l:'Capability integrity \u2014 escalade impossible'},{d:660,t:'ok',m:'seL4 EAL7',l:'Arr\u00eat\u00e9 L1b \u00b7 HOL \u00b7 421 ns'}]},\n  {cwe:'MEM',icon:'\ud83d\udcbe',name:'Buffer Overflow 0-day',sub:'CWE-119 \u2014 T1\/T6',blocked:'seL4 EAL7',mods:['m00'],lat:'421 ns',layer:'TCB\u2192L1b',color:'#b91c1c',stopAt:'L1B',steps:[{d:0,t:'warn',m:'seL4 EAL7',l:'CWE-119 variant 0-day \u2014 T1\/T6'},{d:330,t:'warn',m:'M00 RoT',l:'Capability \u00b7 HOL T1\/T6'},{d:660,t:'ok',m:'seL4 EAL7',l:'Classe m\u00e9moire couverte \u00b7 421 ns'}]},\n  {cwe:'CONC',icon:'\ud83d\udd04',name:'Race Condition 0-day',sub:'CWE-362 \u00b7 T3 IPC',blocked:'seL4 T3',mods:['prism'],lat:'421 ns',layer:'TCB\u2192L1b',color:'#7c3aed',stopAt:'L1B',steps:[{d:0,t:'warn',m:'seL4 EAL7',l:'Race 0-day \u2014 T3 IPC atomique'},{d:330,t:'warn',m:'PRISM',l:'FSM \u2014 \u00e9tat ill\u00e9gitime'},{d:660,t:'ok',m:'seL4 EAL7',l:'Race impossible \u00b7 T3 \u00b7 421 ns'}]},\n];\nconst EXANTE=[\n  {cwe:'SIDE',icon:'\u23f1',name:'Side-Channel (ex ante)',sub:'CWE-208 \u00b7 preuve HOL',blocked:'seL4 EAL7',mods:['prism','m00'],lat:'421 ns',layer:'TCB',color:'#0891b2',stopAt:'EXANTE',steps:[{d:0,t:'warn',m:'seL4 EAL7',l:'CWE-208 \u2014 classe timing \u00b7 T3 remonte'},{d:300,t:'warn',m:'M00 RoT',l:'Uniformit\u00e9 temporelle \u00b7 0 fuite'},{d:600,t:'ok',m:'seL4 EAL7',l:'Side-channel impossible \u00b7 HOL \u00b7 421 ns'}]},\n  {cwe:'INFO',icon:'\ud83d\udce1',name:'Non-interference (ex ante)',sub:'CWE-918 \u00b7 T8 HOL',blocked:'seL4 T8',mods:['prism'],lat:'421 ns',layer:'TCB',color:'#7c3aed',stopAt:'EXANTE',steps:[{d:0,t:'warn',m:'PRISM',l:'CWE-918 \u2014 T8 non-interference'},{d:300,t:'warn',m:'seL4 EAL7',l:'Isolation domaines \u2014 \u00e9tanche'},{d:600,t:'ok',m:'PRISM',l:'0 octet sorti \u00b7 T8 \u00b7 421 ns'}]},\n  {cwe:'ACCES',icon:'\u2b06',name:'Escalade privil\u00e8ge (ex ante)',sub:'CWE-269 \u00b7 T2',blocked:'seL4 T2',mods:['m00'],lat:'421 ns',layer:'TCB',color:'#059669',stopAt:'EXANTE',steps:[{d:0,t:'warn',m:'seL4 EAL7',l:'Escalade \u2014 T2 capability HOL'},{d:300,t:'warn',m:'M00 RoT',l:'Escalade impossible par construction'},{d:600,t:'ok',m:'seL4 EAL7',l:'Bloqu\u00e9e ex ante \u00b7 T2 \u00b7 421 ns'}]},\n];\nconst HYBRID=[\n  {cwe:['INJECT','DOS','MEM','AUTH'],icon:'\ud83e\udd16',name:'APT IA \u2014 4 vecteurs',sub:'<12 ms \u00b7 mutation payload \u00b7 bloqu\u00e9s orbite',blocked:'WALL-DOME+L1b',mods:['walld','aegis','m09','m00'],lat:'421 ns',layer:'TCB+L1b',color:'#f97316',stopAt:'WALL',steps:[{d:0,t:'warn',m:'seL4 EAL7',l:'APT IA \u2014 4 vecteurs \u00b7 <12 ms'},{d:240,t:'warn',m:'WALL-DOME\u2122',l:'Vecteurs 1+2 intercept\u00e9s r=220'},{d:460,t:'warn',m:'M09-CB',l:'Vecteurs 3+4 stopp\u00e9s r=140'},{d:680,t:'ok',m:'TCB',l:'4\/4 bloqu\u00e9s \u00b7 TCB inviol\u00e9e \u00b7 421 ns'}]},\n  {cwe:['ZD','SC','AI'],icon:'\u26a1',name:'LLM Supply chain + 0-day',sub:'<18 ms \u00b7 exploit combin\u00e9',blocked:'M00+ATLAS\u2122',mods:['m00','atlas','walld','cms'],lat:'~2,5 ns',layer:'TCB\u2192L1b',color:'#7c3aed',stopAt:'L1B',steps:[{d:0,t:'warn',m:'ATLAS\u2122',l:'LLM exploit \u00b7 supply+0-day \u00b7 <18 ms'},{d:260,t:'warn',m:'M00 RoT',l:'Boot attestation \u2014 non-certifi\u00e9 bloqu\u00e9'},{d:500,t:'warn',m:'seL4 EAL7',l:'Zero-day \u2014 T1\/T2 ex ante'},{d:720,t:'ok',m:'TCB',l:'Exploit LLM stopp\u00e9 \u00b7 TCB inviol\u00e9e'}]},\n  {cwe:['DOS','CONC','CRYPTO','CONFIG'],icon:'\ud83c\udf0a',name:'DDoS adaptatif IA \u2014 1,2M req\/s',sub:'<5 ms switch \u00b7 botnet IA',blocked:'M09+WALL-DOME',mods:['m09','aegis','walld'],lat:'~2,1 \u00b5s',layer:'L1b',color:'#0891b2',stopAt:'WALL',steps:[{d:0,t:'warn',m:'M09-CB',l:'DDoS 1,2M req\/s \u00b7 circuit ouvert'},{d:240,t:'warn',m:'AEGIS\u2122',l:'D\u00e9fense \u2014 596\/640 WP goals'},{d:460,t:'warn',m:'WALL-DOME\u2122',l:'Flood stopp\u00e9 r=220'},{d:680,t:'ok',m:'M09-CB',l:'DDoS neutralis\u00e9 \u00b7 TCB inviol\u00e9e'}]},\n];\nfunction svgEl(tag,attrs,html=''){const e=document.createElementNS(NS,tag);Object.entries(attrs).forEach(([k,v])=>e.setAttribute(k,v));if(html)e.innerHTML=html;return e;}\nfunction clearAnim(){document.getElementById('anim-g').innerHTML='';}\nfunction tsNow(){const n=new Date();return`${String(n.getHours()).padStart(2,'0')}:${String(n.getMinutes()).padStart(2,'0')}.${String(n.getMilliseconds()).padStart(3,'0')}`;}\nfunction solLog(t,m,msg){\n  const cls=t==='ok'?'lok':t==='warn'?'lwn':'lcr';const lbl=t==='ok'?'[ OK ]':t==='warn'?'[ WARN ]':'[ CRIT ]';\n  const d=document.createElement('div');d.className='ll ll-new';\n  d.innerHTML=`<span class=\"lt\">${tsNow()}<\/span><span class=\"${cls}\">${lbl}<\/span><span class=\"lm\"><span class=\"lip\">${m}<\/span> \u2014 ${msg}<\/span>`;\n  const el=document.getElementById('sol-log');el.appendChild(d);\n  while(el.children.length>40)el.removeChild(el.firstChild);el.scrollTop=el.scrollHeight;\n}\nfunction flashMod(id,color){const g=document.getElementById('mod-'+id);if(!g)return;const c=g.querySelector('circle');if(!c)return;c.style.cssText=`fill:${color}1e;stroke:${color};stroke-width:3;filter:drop-shadow(0 0 7px ${color})`;setTimeout(()=>c.style.cssText='',550);}\nfunction flashTCB(color){const f1=document.getElementById('tf1'),f2=document.getElementById('tf2');if(f1){f1.setAttribute('stroke',color);f1.style.opacity='1';setTimeout(()=>f1.style.opacity='0',80);}if(f2){f2.setAttribute('stroke',color);f2.style.opacity='1';setTimeout(()=>f2.style.opacity='0',160);}}\nfunction flashWall(color){const w=document.getElementById('wall-ring');if(!w)return;w.setAttribute('stroke',color);w.style.cssText=`opacity:.8;stroke-width:4.5;filter:drop-shadow(0 0 10px ${color})`;setTimeout(()=>{w.setAttribute('stroke','#D97706');w.style.cssText='opacity:.22;stroke-width:2.5';},280);}\nfunction activateExAnte(){const arc=document.getElementById('arc-exante'),bg=document.getElementById('bg-exante');if(arc){arc.style.opacity='1';arc.style.strokeWidth='5.5';arc.style.filter='drop-shadow(0 0 7px #10b981)';}if(bg)bg.style.opacity='.09';setTimeout(()=>{if(arc){arc.style.opacity='.5';arc.style.strokeWidth='3';arc.style.filter='';}if(bg)bg.style.opacity='0';},900);}\nfunction activateM24(){const arc=document.getElementById('arc-m24'),txt=document.getElementById('txt-m24'),bg=document.getElementById('bg-m24');if(arc){arc.style.opacity='1';arc.style.strokeWidth='5.5';arc.style.filter='drop-shadow(0 0 7px #818cf8)';}if(txt){txt.style.opacity='1';txt.setAttribute('fill','#1e1b4b');}if(bg)bg.style.opacity='.08';setTimeout(()=>{if(arc){arc.style.opacity='.5';arc.style.strokeWidth='3';arc.style.filter='';}if(txt){txt.style.opacity='.88';txt.setAttribute('fill','#3C3489');}if(bg)bg.style.opacity='0';},900);}\nfunction pulseCWE(id,color){const g=document.getElementById('cwe-'+id);if(!g)return;const c=g.querySelector('circle:first-child');if(!c)return;c.style.cssText=`stroke:${color};stroke-width:2.5;fill:${color}1a;filter:drop-shadow(0 0 7px ${color})`;setTimeout(()=>c.style.cssText='',650);}\nfunction shoot(x1,y1,x2,y2,color,dur,uid){\n  const g=document.getElementById('anim-g');const dist=Math.hypot(x2-x1,y2-y1);const pid=`pt-${uid}`;\n  g.appendChild(svgEl('line',{x1,y1,x2,y2,stroke:color,'stroke-width':'1.6','stroke-dasharray':'7 4',opacity:'.55'},`<animate attributeName=\"stroke-dashoffset\" from=\"${dist}\" to=\"0\" dur=\"${dur}ms\" repeatCount=\"indefinite\"\/>`));\n  const ph=svgEl('path',{id:pid,d:`M${x1},${y1} L${x2},${y2}`,fill:'none',stroke:'none'});g.appendChild(ph);\n  g.appendChild(svgEl('circle',{r:'5',fill:color,opacity:'.88'},`<animateMotion dur=\"${dur}ms\" repeatCount=\"indefinite\" calcMode=\"linear\"><mpath href=\"#${pid}\"\/><\/animateMotion>`));\n  [0,300,600].forEach((b,i)=>g.appendChild(svgEl('circle',{cx:x1,cy:y1,r:'8',fill:'none',stroke:color,'stroke-width':String(2-i*.5),opacity:String(.55-i*.16)},`<animate attributeName=\"r\" from=\"8\" to=\"${20+i*5}\" dur=\"1s\" begin=\"${b}ms\" repeatCount=\"indefinite\"\/><animate attributeName=\"opacity\" from=\"${.55-i*.16}\" to=\"0\" dur=\"1s\" begin=\"${b}ms\" repeatCount=\"indefinite\"\/>`)));\n}\nfunction impactAt(x,y,color,label){\n  const g=document.getElementById('anim-g');\n  [0,200,400].forEach(d=>g.appendChild(svgEl('circle',{cx:x,cy:y,r:'6',fill:'none',stroke:color,'stroke-width':'2.2',opacity:'.8'},`<animate attributeName=\"r\" from=\"6\" to=\"26\" dur=\"0.42s\" begin=\"${d}ms\" repeatCount=\"1\"\/><animate attributeName=\"opacity\" from=\".8\" to=\"0\" dur=\"0.42s\" begin=\"${d}ms\" repeatCount=\"1\"\/>`)));\n  const t=svgEl('text',{x,y:String(Number(y)+8),fill:color,'font-size':'20','text-anchor':'middle','font-weight':'bold',opacity:'1'});t.textContent='\u2298';t.style.cssText='transition:opacity .45s';setTimeout(()=>t.style.opacity='0',650);g.appendChild(t);\n  if(label){const tl=svgEl('text',{x,y:String(Number(y)-10),fill:color,'font-size':'5','text-anchor':'middle','font-family':'monospace','letter-spacing':'1',opacity:'.75'});tl.textContent=label;tl.style.cssText='transition:opacity .45s';setTimeout(()=>tl.style.opacity='0',650);g.appendChild(tl);}\n}\nfunction exAnteWaves(tx,ty,color){\n  const g=document.getElementById('anim-g');\n  [0,180,360].forEach(d=>g.appendChild(svgEl('circle',{cx:'250',cy:'250',r:'48',fill:'none',stroke:'#10b981','stroke-width':'1.8',opacity:'.65'},`<animate attributeName=\"r\" from=\"48\" to=\"212\" dur=\"0.5s\" begin=\"${d}ms\" repeatCount=\"1\"\/><animate attributeName=\"opacity\" from=\".65\" to=\"0\" dur=\"0.5s\" begin=\"${d}ms\" repeatCount=\"1\"\/>`)));\n  const t=svgEl('text',{x:'250',y:'253',fill:'#10b981','font-size':'8','text-anchor':'middle','font-weight':'bold',opacity:'0'});t.textContent='\u2131 EX ANTE';t.style.cssText='transition:opacity .18s';g.appendChild(t);\n  setTimeout(()=>t.style.opacity='1',140);setTimeout(()=>{t.style.transition='opacity .35s';t.style.opacity='0';},500);\n  flashTCB(color);setTimeout(()=>impactAt((CX+tx)\/2,(CY+ty)\/2,color,'EX ANTE'),340);\n}\nfunction runAtk(atk){\n  clearAnim();const cwes=Array.isArray(atk.cwe)?atk.cwe:[atk.cwe];const c=atk.color;\n  const isHybrid=cwes.length>1,isExAnte=atk.stopAt==='EXANTE';\n  document.getElementById('atk-icon').textContent=atk.icon;\n  const nm=document.getElementById('atk-name');nm.textContent=atk.name;nm.style.color=c;\n  document.getElementById('atk-sub').textContent=atk.sub;\n  const latEl=document.getElementById('atk-lat');latEl.textContent=atk.lat;latEl.style.color=atk.layer.includes('TCB')?'#818cf8':'#10b981';\n  document.getElementById('atk-lay').textContent=atk.blocked+' \u00b7 '+atk.layer;\n  document.getElementById('atk-card').style.borderColor=c+'44';\n  document.getElementById('m-lat').textContent=atk.lat;document.getElementById('m-lat').style.color=atk.layer.includes('TCB')?'#818cf8':'#10b981';\n  document.getElementById('m-layer').textContent=atk.layer;\n  cwes.forEach(id=>pulseCWE(id,c));\n  if(atk.isMTD||atk.mods.includes('cms'))cmsReact('mtd',c);\n  if(atk.name.includes('DDoS')||atk.name.includes('flood'))cmsReact('ddos',c);\n  if(isExAnte){\n    cwes.forEach((cid,i)=>{const[cx,cy]=CWE_POS[cid]||[250,30];const mx=(CX+cx)\/2,my=(CY+cy)\/2;setTimeout(()=>shoot(cx,cy,mx,my,c,220,`ex-${cid}-${i}`),i*50);});\n    setTimeout(()=>{activateExAnte();const[cx,cy]=CWE_POS[cwes[0]]||[250,30];exAnteWaves(cx,cy,c);atk.mods.forEach((mid,j)=>setTimeout(()=>flashMod(mid,c),j*80));},260);\n  }else if(isHybrid){\n    if(atk.stopAt==='L1B')setTimeout(()=>{activateExAnte();activateM24();},80);else setTimeout(()=>activateM24(),80);\n    cwes.forEach((cid,i)=>{const[cx,cy]=CWE_POS[cid]||[250,30];const[wx,wy]=onRing(cx,cy,R_WALL);setTimeout(()=>shoot(cx,cy,wx,wy,c,280,`hy-${cid}-${i}`),i*80);});\n    setTimeout(()=>{flashWall(c);atk.mods.forEach((mid,j)=>setTimeout(()=>flashMod(mid,c),j*80));flashTCB(c);},480);\n  }else{\n    const[cx,cy]=CWE_POS[cwes[0]]||[250,30];const stopR=atk.stopAt==='WALL'?R_WALL:R_L1B;const[ix,iy]=onRing(cx,cy,stopR);\n    shoot(cx,cy,ix,iy,c,280,'p1');\n    if(atk.stopAt==='L1B'){activateM24();setTimeout(()=>{const w=document.getElementById('wall-ring');if(w){w.setAttribute('stroke',c);w.style.opacity='.38';setTimeout(()=>{w.setAttribute('stroke','#D97706');w.style.opacity='.22';},300);}},240);}\n    atk.mods.forEach((mid,j)=>setTimeout(()=>flashMod(mid,c),340+j*80));\n    if(atk.stopAt==='L1B')setTimeout(()=>activateExAnte(),160);\n    setTimeout(()=>flashTCB(c),370);if(atk.stopAt==='WALL')setTimeout(()=>flashWall(c),360);\n  }\n  atk.steps.forEach(s=>setTimeout(()=>solLog(s.t,s.m,s.l),s.d));\n  const impD=isExAnte?380:isHybrid?380:280;\n  setTimeout(()=>{\n    if(isExAnte)return;\n    if(isHybrid){clearAnim();cwes.slice(0,3).forEach((cid,i)=>{const[cx,cy]=CWE_POS[cid]||[250,30];const[wx,wy]=onRing(cx,cy,R_WALL);setTimeout(()=>impactAt(wx,wy,c,''),i*80);});}\n    else{clearAnim();const[cx,cy]=CWE_POS[Array.isArray(atk.cwe)?atk.cwe[0]:atk.cwe]||[250,30];const stopR=atk.stopAt==='WALL'?R_WALL:R_L1B;const[ix,iy]=onRing(cx,cy,stopR);impactAt(ix,iy,c,atk.stopAt==='L1B'&&atk.layer.includes('TCB')?'0-DAY':'BLOQU\u00c9');if(atk.stopAt==='WALL')flashWall(c);}\n    blocked++;document.getElementById('m-blocked').textContent=blocked;document.getElementById('m-blocked').style.color=c;setTimeout(()=>document.getElementById('m-blocked').style.color='#10b981',280);\n  },impD);\n  setTimeout(()=>{clearAnim();document.getElementById('atk-card').style.borderColor='rgba(255,255,255,.07)';},1100);\n}\nconst MODES={normal:NORMAL,zeroday:ZERODAY,exante:EXANTE,hybrid:HYBRID};\nconst MODE_LABELS={normal:'STD',zeroday:'0-DAY',exante:'\u2131 EX ANTE',hybrid:'IA+HUM'};\nconst MODE_COLORS={normal:'#D97706',zeroday:'#ef4444',exante:'#10b981',hybrid:'#818cf8'};\nconst BTN_MAP={normal:'norm',zeroday:'zd',exante:'exante',hybrid:'hybrid'};\nlet mode='normal',autoOn=true,simTimer=null,blocked=0,simIdx=0;\nfunction next(){if(!autoOn)return;const arr=MODES[mode];runAtk(arr[simIdx%arr.length]);simIdx++;simTimer=setTimeout(next,mode==='hybrid'?1600:1400);}\nfunction setMode(m){if(simTimer)clearTimeout(simTimer);mode=m;simIdx=0;Object.keys(BTN_MAP).forEach(k=>document.getElementById('btn-'+BTN_MAP[k]).classList.remove('active'));document.getElementById('btn-'+BTN_MAP[m]).classList.add('active');document.getElementById('m-mode').textContent=MODE_LABELS[m];document.getElementById('m-mode').style.color=MODE_COLORS[m];runAtk(MODES[m][0]);simIdx=1;autoOn=true;document.getElementById('btn-auto').classList.add('active');simTimer=setTimeout(next,mode==='hybrid'?1600:1400);}\nfunction toggleAuto(){const btn=document.getElementById('btn-auto'),dot=document.getElementById('sim-dot'),lbl=document.getElementById('sim-label');if(autoOn){autoOn=false;if(simTimer)clearTimeout(simTimer);btn.classList.remove('active');dot.style.background='#374151';dot.style.animation='none';lbl.textContent='PAUSE';lbl.style.color='#6b7280';}else{autoOn=true;btn.classList.add('active');dot.style.background='#10b981';dot.style.animation='blink 1.2s ease-in-out infinite';lbl.textContent='ACTIF';lbl.style.color='#10b981';next();}}\nfunction simReset(){if(simTimer)clearTimeout(simTimer);autoOn=false;simIdx=0;blocked=0;clearAnim();mode='normal';Object.keys(BTN_MAP).forEach(k=>document.getElementById('btn-'+BTN_MAP[k]).classList.remove('active'));document.getElementById('btn-norm').classList.add('active');document.getElementById('m-blocked').textContent='0';document.getElementById('m-mode').textContent='STD';document.getElementById('m-mode').style.color='#D97706';document.getElementById('m-lat').textContent='\u2014';document.getElementById('m-layer').textContent='\u2014';document.getElementById('atk-icon').textContent='\u23f3';document.getElementById('atk-name').textContent='R\u00e9initialis\u00e9';document.getElementById('atk-name').style.color='#6b7280';document.getElementById('sol-log').innerHTML='<div class=\"ll\"><span class=\"lt\">--:--.---<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">R\u00e9initialis\u00e9 \u2014 TCB inviol\u00e9e<\/span><\/div>';autoOn=true;document.getElementById('btn-auto').classList.add('active');document.getElementById('sim-dot').style.cssText='background:#10b981;animation:blink 1.2s ease-in-out infinite';document.getElementById('sim-label').textContent='ACTIF';document.getElementById('sim-label').style.color='#10b981';setTimeout(next,500);}\nsetTimeout(next,600);\n \n\/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\/\/ CMS TOPOLOGY ENGINE \u2014 SVG BROWNIAN MOTION\n\/\/ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nconst TCX=600,TCY=260;\nfunction randIP(){return`100.${Math.floor(Math.random()*64)}.${Math.floor(Math.random()*256)}.${Math.floor(Math.random()*256)}`;}\nfunction randPort(){return 1024+Math.floor(Math.random()*63511);}\nconst NT={\n  CORE:{r:34,stroke:'#00e5ff',fill:'rgba(0,229,255,.12)',label:'CORE',sub:'CHON',color:'#00e5ff'},\n  GW:  {r:22,stroke:'#00e5ff',fill:'rgba(0,180,230,.1)',label:'GW',color:'#00e5ff'},\n  HON: {r:16,stroke:'#ff9500',fill:'rgba(255,149,0,.12)',label:'oHON',color:'#ff9500'},\n  EP:  {r:13,stroke:'rgba(0,229,255,.75)',fill:'rgba(0,140,180,.07)',label:'EP',color:'rgba(0,229,255,.75)'},\n};\nlet nodes=[],morphInterval=2000,cmsTimer=null,cmsUptime=0,cmsUptimeTimer=null,rotations=0,cmsPaused=false,animFrame=null;\nlet cemScore=66,pktsPerSec=0,lastMorphT=Date.now();\n \nfunction buildNodes(epCount){\n  epCount=epCount||parseInt(document.getElementById('nodesVal').textContent)||12;\n  nodes=[];\n  nodes.push({type:'CORE',id:'core',x:TCX,y:TCY,vx:0,vy:0,ip:randIP(),port:randPort(),links:[]});\n  [215,335,85].forEach((a,i)=>{const rad=a*Math.PI\/180,r=130+Math.random()*30;nodes.push({type:'GW',id:`gw${i}`,x:TCX+r*Math.cos(rad),y:TCY+r*Math.sin(rad)*0.85,vx:(Math.random()-.5)*.3,vy:(Math.random()-.5)*.3,ip:randIP(),port:randPort(),links:['core']});});\n  \/\/ 6 HON honeypots\n  for(let i=0;i<6;i++){const angle=(i*60+30+Math.random()*30)*Math.PI\/180,r=90+Math.random()*60;nodes.push({type:'HON',id:`hon${i}`,x:TCX+r*Math.cos(angle),y:TCY+r*Math.sin(angle)*0.85,vx:(Math.random()-.5)*.4,vy:(Math.random()-.5)*.4,ip:randIP(),port:randPort(),links:[`gw${i%3}`]});}\n  for(let i=0;i<epCount;i++){const a=(i\/epCount)*2*Math.PI-Math.PI\/2+(Math.random()-.5)*.4,r=210+Math.random()*60;nodes.push({type:'EP',id:`ep${i}`,x:TCX+r*Math.cos(a),y:TCY+r*Math.sin(a)*0.82,vx:(Math.random()-.5)*.5,vy:(Math.random()-.5)*.5,ip:randIP(),port:randPort(),links:[`gw${i%3}`]});}\n}\nconst BOUNDS={x0:60,x1:1140,y0:20,y1:500};\nfunction physicsStep(){\n  nodes.forEach(n=>{\n    if(n.type==='CORE')return;\n    const ks=n.type==='HON'?0.22:n.type==='GW'?0.14:0.28;\n    n.vx+=(Math.random()-.5)*ks; n.vy+=(Math.random()-.5)*ks;\n    const damp=n.type==='GW'?0.90:0.88; n.vx*=damp; n.vy*=damp;\n    const maxV=n.type==='EP'?2.0:1.4,speed=Math.hypot(n.vx,n.vy);\n    if(speed>maxV){n.vx=n.vx\/speed*maxV;n.vy=n.vy\/speed*maxV;}\n    n.x+=n.vx; n.y+=n.vy;\n    const nt=NT[n.type];\n    if(n.x<BOUNDS.x0+nt.r){n.x=BOUNDS.x0+nt.r;n.vx=Math.abs(n.vx)*.6;}\n    if(n.x>BOUNDS.x1-nt.r){n.x=BOUNDS.x1-nt.r;n.vx=-Math.abs(n.vx)*.6;}\n    if(n.y<BOUNDS.y0+nt.r){n.y=BOUNDS.y0+nt.r;n.vy=Math.abs(n.vy)*.6;}\n    if(n.y>BOUNDS.y1-nt.r){n.y=BOUNDS.y1-nt.r;n.vy=-Math.abs(n.vy)*.6;}\n    const home=getHome(n),dx=home.x-n.x,dy=home.y-n.y,dist=Math.hypot(dx,dy);\n    if(dist>(n.type==='EP'?180:100)){n.vx+=dx*.0008;n.vy+=dy*.0008;}\n  });\n  const core=nodes.find(n=>n.id==='core');\n  if(core){core.vx+=(Math.random()-.5)*.07;core.vy+=(Math.random()-.5)*.07;core.vx*=.96;core.vy*=.96;const sc=Math.hypot(core.vx,core.vy);if(sc>.55){core.vx=core.vx\/sc*.55;core.vy=core.vy\/sc*.55;}core.x+=core.vx;core.y+=core.vy;core.x=Math.max(TCX-60,Math.min(TCX+60,core.x));core.y=Math.max(TCY-50,Math.min(TCY+50,core.y));}\n}\nfunction getHome(n){\n  if(n.type==='GW'){const i=parseInt(n.id.replace('gw',''));const a=[215,335,85][i]*Math.PI\/180;return{x:TCX+130*Math.cos(a),y:TCY+110*Math.sin(a)};}\n  if(n.type==='HON'){const i=parseInt(n.id.replace('hon',''));const a=i*60*Math.PI\/180;return{x:TCX+110*Math.cos(a),y:TCY+90*Math.sin(a)};}\n  if(n.type==='EP'){const i=parseInt(n.id.replace('ep',''));const total=nodes.filter(x=>x.type==='EP').length;const a=(i\/total)*2*Math.PI-Math.PI\/2;return{x:TCX+220*Math.cos(a),y:TCY+180*Math.sin(a)};}\n  return{x:TCX,y:TCY};\n}\nfunction renderTopo(){\n  const linksG=document.getElementById('cms-links'),nodesG=document.getElementById('cms-nodes'),ipsG=document.getElementById('cms-ips');\n  linksG.innerHTML='';nodesG.innerHTML='';ipsG.innerHTML='';\n  const core=nodes.find(n=>n.id==='core');\n  nodes.forEach(n=>{\n    (n.links||[]).forEach(lid=>{\n      const target=lid==='core'?core:nodes.find(m=>m.id===lid);if(!target)return;\n      const line=document.createElementNS(NS,'line');\n      line.setAttribute('x1',n.x);line.setAttribute('y1',n.y);line.setAttribute('x2',target.x);line.setAttribute('y2',target.y);\n      const isHON=n.type==='HON';\n      line.setAttribute('stroke',isHON?'rgba(255,149,0,.2)':n.type==='GW'?'rgba(0,229,255,.2)':'rgba(0,180,200,.1)');\n      line.setAttribute('stroke-width',n.type==='GW'?'1.2':'0.7');\n      line.setAttribute('stroke-dasharray',n.type==='GW'?'5,8':isHON?'3,6':'3,8');\n      linksG.appendChild(line);\n      if(n.type==='GW'){const mx=(n.x+target.x)\/2,my=(n.y+target.y)\/2;const t=document.createElementNS(NS,'text');t.setAttribute('x',mx);t.setAttribute('y',my-3);t.setAttribute('text-anchor','middle');t.setAttribute('font-size','5');t.setAttribute('font-family',\"'JetBrains Mono',monospace\");t.setAttribute('fill','rgba(0,229,255,.28)');t.textContent=n.ip;ipsG.appendChild(t);}\n    });\n  });\n  ['EP','HON','GW','CORE'].forEach(type=>{\n    nodes.filter(n=>n.type===type).forEach(n=>{\n      const nt=NT[n.type],g=document.createElementNS(NS,'g');\n      const glow=document.createElementNS(NS,'circle');\n      glow.setAttribute('cx',n.x);glow.setAttribute('cy',n.y);glow.setAttribute('r',nt.r+5);glow.setAttribute('fill','none');glow.setAttribute('stroke',nt.stroke);glow.setAttribute('stroke-width','1');glow.setAttribute('opacity',n.type==='CORE'?'.35':n.type==='GW'?'.25':n.type==='HON'?'.3':'.18');g.appendChild(glow);\n      const circle=document.createElementNS(NS,'circle');circle.setAttribute('cx',n.x);circle.setAttribute('cy',n.y);circle.setAttribute('r',nt.r);circle.setAttribute('fill',nt.fill);circle.setAttribute('stroke',nt.stroke);circle.setAttribute('stroke-width',n.type==='CORE'?'2':n.type==='GW'?'1.8':'1.2');if(n.type!=='EP')circle.setAttribute('filter','url(#cglow-sm)');g.appendChild(circle);\n      const dot=document.createElementNS(NS,'circle');dot.setAttribute('cx',n.x);dot.setAttribute('cy',n.y);dot.setAttribute('r',n.type==='CORE'?10:n.type==='GW'?7:n.type==='HON'?6:5);dot.setAttribute('fill',n.type==='HON'?'#ff9500':n.type==='CORE'?'#00e5ff':'#00c8e0');dot.setAttribute('opacity',n.type==='EP'?'.7':'1');if(n.type==='CORE'||n.type==='GW')dot.setAttribute('filter','url(#cglow-sm)');g.appendChild(dot);\n      const label=document.createElementNS(NS,'text');label.setAttribute('x',n.x);label.setAttribute('y',n.y-nt.r-3);label.setAttribute('text-anchor','middle');label.setAttribute('font-size',n.type==='CORE'?'9':n.type==='GW'?'7.5':n.type==='HON'?'6.5':'6');label.setAttribute('font-family',\"'JetBrains Mono',monospace\");label.setAttribute('fill',nt.color);label.setAttribute('font-weight','bold');label.setAttribute('opacity',n.type==='EP'?'.7':'1');label.textContent=nt.label;g.appendChild(label);\n      const epIdx=n.type==='EP'?parseInt(n.id.replace('ep','')):-1;\n      if(n.type!=='EP'||epIdx%3===0){const ipT=document.createElementNS(NS,'text');ipT.setAttribute('x',n.x);ipT.setAttribute('y',n.y+nt.r+10);ipT.setAttribute('text-anchor','middle');ipT.setAttribute('font-size',n.type==='EP'?'4.5':'5.5');ipT.setAttribute('font-family',\"'JetBrains Mono',monospace\");ipT.setAttribute('fill',n.type==='HON'?'rgba(255,149,0,.55)':n.type==='CORE'?'rgba(0,229,255,.45)':'rgba(0,200,230,.4)');ipT.textContent=n.ip;g.appendChild(ipT);}\n      nodesG.appendChild(g);\n    });\n  });\n}\nfunction animLoop(){if(!cmsPaused){physicsStep();renderTopo();}animFrame=requestAnimationFrame(animLoop);}\nfunction rebuildNodes(count){buildNodes(count);}\n \n\/\/ \u2550\u2550 CMS SVG ANIMATION HELPERS \u2550\u2550\nfunction cspawnPkt(sx,sy,tx,ty,color,cb){\n  const g=document.getElementById('cms-effects');\n  const c=document.createElementNS(NS,'circle');c.setAttribute('r','4');c.setAttribute('fill',color);c.setAttribute('cx',sx);c.setAttribute('cy',sy);c.setAttribute('opacity','1');g.appendChild(c);\n  pktsPerSec++;\n  let prog=0;const speed=0.025+Math.random()*.02;\n  const tick=()=>{prog=Math.min(1,prog+speed);c.setAttribute('cx',sx+(tx-sx)*prog);c.setAttribute('cy',sy+(ty-sy)*prog);c.setAttribute('opacity',String(1-prog));if(prog>=1){c.remove();if(cb)cb();}else requestAnimationFrame(tick);};\n  requestAnimationFrame(tick);\n}\nfunction carcFlash(x,y,color,maxR){\n  const g=document.getElementById('cms-effects');\n  const c=document.createElementNS(NS,'circle');c.setAttribute('cx',x);c.setAttribute('cy',y);c.setAttribute('r','10');c.setAttribute('fill','none');c.setAttribute('stroke',color);c.setAttribute('stroke-width','1.5');c.setAttribute('opacity','.7');g.appendChild(c);\n  let r=10;const mR=maxR||100;\n  const t=()=>{r+=3;const op=Math.max(0,(mR-r)\/mR*.7);c.setAttribute('r',r);c.setAttribute('opacity',op);if(r<mR)requestAnimationFrame(t);else c.remove();};\n  requestAnimationFrame(t);\n}\nfunction cfloatLabel(x,y,text,color){\n  const g=document.getElementById('cms-labels');\n  const t=document.createElementNS(NS,'text');t.setAttribute('x',x);t.setAttribute('y',y);t.setAttribute('text-anchor','middle');t.setAttribute('fill',color);t.setAttribute('font-size','11');t.setAttribute('font-family',\"'JetBrains Mono',monospace\");t.setAttribute('font-weight','bold');t.setAttribute('opacity','.9');t.textContent=text;g.appendChild(t);\n  let vy=-0.8,op=1,cy=y;\n  const tick=()=>{cy+=vy;op=Math.max(0,op-.018);t.setAttribute('y',cy);t.setAttribute('opacity',op);if(op>0)requestAnimationFrame(tick);else t.remove();};\n  requestAnimationFrame(tick);\n}\nfunction edgePt(){\n  const W=1200,H=520,s=Math.floor(Math.random()*4);\n  if(s===0)return{x:Math.random()*W,y:0};if(s===1)return{x:W,y:Math.random()*H};\n  if(s===2)return{x:Math.random()*W,y:H};return{x:0,y:Math.random()*H};\n}\nfunction getCore(){return nodes.find(n=>n.id==='core')||{x:TCX,y:TCY};}\nfunction getGWs(){return nodes.filter(n=>n.type==='GW');}\nfunction getHONs(){return nodes.filter(n=>n.type==='HON');}\nfunction getEPs(){return nodes.filter(n=>n.type==='EP');}\nfunction ri(a,b){return Math.floor(Math.random()*(b-a+1))+a;}\nfunction rf(a,b){return Math.random()*(b-a)+a;}\n \n\/\/ Node tooltips on canvas\nconst NDESCS={CORE:'Noyau TCB \u2014 PRISM\/OMEGA\/M00 seulement',GW:'Gateway \u2014 consensus PBFT L4 \u2014 routage s\u00e9curis\u00e9',EP:'Endpoint morphique \u2014 IP+port rotatifs L7 \u2014 cible leurre',HON:'Honeypot actif \u2014 capture + empoisonne L5 \u2014 leurre adaptatif'};\nfunction showTips(types){\n  const g=document.getElementById('cms-tips');g.innerHTML='';\n  nodes.filter(n=>types.includes(n.type)).forEach(n=>{\n    const T=NT[n.type];\n    const bg=document.createElementNS(NS,'rect');const desc=NDESCS[n.type]||'';\n    const lines=[n.type+' \u2014 '+desc.split('\u2014')[0].trim(),desc.split('\u2014').slice(1).join('\u2014').trim()];\n    bg.setAttribute('x',n.x+14);bg.setAttribute('y',n.y-40);bg.setAttribute('width','155');bg.setAttribute('height','30');bg.setAttribute('fill','#000');bg.setAttribute('stroke',T.color);bg.setAttribute('stroke-width','1');bg.setAttribute('rx','2');bg.setAttribute('opacity','.92');g.appendChild(bg);\n    const ln=document.createElementNS(NS,'line');ln.setAttribute('x1',n.x);ln.setAttribute('y1',n.y);ln.setAttribute('x2',n.x+14);ln.setAttribute('y2',n.y-25);ln.setAttribute('stroke',T.color+'88');ln.setAttribute('stroke-width','.5');g.appendChild(ln);\n    const t1=document.createElementNS(NS,'text');t1.setAttribute('x',n.x+20);t1.setAttribute('y',n.y-26);t1.setAttribute('fill',T.color);t1.setAttribute('font-size','10');t1.setAttribute('font-family',\"'JetBrains Mono',monospace\");t1.setAttribute('font-weight','bold');t1.textContent=lines[0].slice(0,22);g.appendChild(t1);\n    const t2=document.createElementNS(NS,'text');t2.setAttribute('x',n.x+20);t2.setAttribute('y',n.y-14);t2.setAttribute('fill','#888');t2.setAttribute('font-size','8');t2.setAttribute('font-family',\"'JetBrains Mono',monospace\");t2.textContent=lines[1].slice(0,26);g.appendChild(t2);\n  });\n  setTimeout(()=>g.innerHTML='',3500);\n}\nlet legendIdx=0;\nconst LEG_TYPES=[['CORE'],['GW'],['EP'],['HON'],['CORE','GW','EP','HON']];\nfunction cycleLegend(){showTips(LEG_TYPES[legendIdx%LEG_TYPES.length]);legendIdx++;}\n \n\/\/ \u2550\u2550 LAYER ANIMATIONS L4\u2192L10 \u2550\u2550\nconst LCOLS={l4:'#1565c0',l5:'#1b5e20',l6:'#6a1b9a',l7:'#0d47a1',l8:'#e65100',l9:'#006064',l10:'#f57f17'};\nconst LNODES={l4:['CORE','GW'],l5:['HON','EP'],l6:['CORE','GW','EP'],l7:['GW','EP'],l8:['EP','CORE'],l9:['EP','GW'],l10:['CORE','GW','HON']};\n \nfunction animL4(){\n  const core=getCore(),gws=getGWs();\n  const p=edgePt();\n  cspawnPkt(p.x,p.y,core.x,core.y,'#f44336',()=>{\n    cfloatLabel(core.x,core.y-32,'INJECT ATTEMPT','#f44336');\n    let done=0;\n    gws.forEach((gw,i)=>setTimeout(()=>{\n      cspawnPkt(core.x,core.y,gw.x,gw.y,'#00e5ff',()=>{\n        cfloatLabel(gw.x,gw.y-22,'PREPARE','#00e5ff');\n        carcFlash(gw.x,gw.y,'#00e5ff',40);\n        cspawnPkt(gw.x,gw.y,core.x,core.y,'#10b981',()=>{done++;if(done>=gws.length){cfloatLabel(core.x,core.y-48,'\u2713 COMMIT N=4','#10b981');carcFlash(core.x,core.y,'#10b981',70);}});\n      });\n    },i*220));\n  });\n  cmsLog('ok','L4 PBFT','preprepare \u2192 prepare \u2192 commit OK (3\/4)');\n}\nfunction animL5(){\n  const hons=getHONs(),core=getCore();\n  hons.forEach((h,i)=>setTimeout(()=>{\n    carcFlash(h.x,h.y,'#ff6d00',35);cfloatLabel(h.x,h.y-24,'oHON ACTIVE','#ff6d00');\n    const p=edgePt();\n    cspawnPkt(p.x,p.y,core.x,core.y,'#ef4444',()=>{\n      cfloatLabel(core.x,core.y-24,'REDIRECT \u2192 HON','#ff9800');\n      cspawnPkt(core.x,core.y,h.x,h.y,'#ff9800',()=>{\n        cfloatLabel(h.x,h.y-36,'PROBE CAPTURED','#ff9800');carcFlash(h.x,h.y,'#10b981',30);\n        setTimeout(()=>{cspawnPkt(h.x,h.y,p.x,p.y,'#10b981');cfloatLabel(h.x,h.y-50,'POISON INJECT','#10b981');},350);\n      });\n    });\n  },i*300));\n  cmsLog('detect','L5 HON','attaquant ext\u00e9rieur \u2192 redirection honeypot \u00b7 HKDF poison');\n}\nfunction animL6(){\n  const core=getCore();const x=core.x+140;\n  [[-58,'HEAD CANARY','#ce93d8'],[-18,'ZONE LIBRE','#10b981'],[+15,'MID CANARY','#ce93d8'],[+48,'ZONE LIBRE','#10b981'],[+80,'TAIL CANARY','#ce93d8']].forEach(([dy,lbl,col],i)=>{setTimeout(()=>{cfloatLabel(x,core.y+dy,lbl,col);carcFlash(x,core.y+dy,col,20);},i*180);});\n  setTimeout(()=>{cfloatLabel(x,core.y-95,'\u2713 check_all OK','#10b981');carcFlash(x,core.y,'#10b981',70);cmsLog('ok','L6 MemGuard','head+mid+tail canaris intacts \u00b7 0 corruption');},1200);\n}\nfunction animL7(){\n  const core=getCore(),gws=getGWs();\n  getEPs().forEach((n,i)=>setTimeout(()=>{n.ip=randIP();n.port=randPort();if(i%7===0)cfloatLabel(n.x,n.y-20,'\u21ba ROTATED','#00e5ff');},i*25));\n  gws.forEach((gw,i)=>setTimeout(()=>{gw.ip=randIP();carcFlash(gw.x,gw.y,'#00bcd4',45);cfloatLabel(gw.x,gw.y-30,'chain_state \u21ba','#00bcd4');},i*280+150));\n  setTimeout(()=>{cfloatLabel(core.x,core.y-58,'COMMITMENT OK','#10b981');carcFlash(core.x,core.y,'#00e5ff',80);cmsLog('morph','L7 v8','HKDF 96B \u00b7 morph_rate=1.000 \u00b7 H1=0.000 BLOQU\u00c9');doMorph();},1500);\n}\nfunction animL8(){\n  const core=getCore(),gws=getGWs();\n  for(let i=0;i<8;i++){const p=edgePt(),t=i%3===0?core:(gws[i%gws.length]||core);setTimeout(()=>cspawnPkt(p.x,p.y,t.x,t.y,'#ef4444',()=>{cfloatLabel(t.x+rf(-25,25),t.y-24,'PERTURBED','#ff9800');carcFlash(t.x,t.y,'#ff9800',28);}),i*160);}\n  setTimeout(()=>{cfloatLabel(core.x,core.y-55,'noise=0.55','#ff9800');cfloatLabel(core.x,core.y-70,'delta=0.967','#10b981');cmsLog('ok','L8 ML','fingerprint bloqu\u00e9 \u00b7 degradation_delta=0.967 > 0.30');},1700);\n}\nfunction animL9(){\n  const core=getCore(),gws=getGWs();const p=edgePt();\n  cspawnPkt(p.x,p.y,core.x,core.y,'#ff9800');cfloatLabel((p.x+core.x)\/2,(p.y+core.y)\/2,'TIMING PROBE','#ff9800');\n  [{t:300,type:'BURST',col:'#00e5ff',dst:gws[0]||core},{t:550,type:'JITTER',col:'#26c6da',dst:gws[1]||core},{t:750,type:'SILENCE',col:'#546e7a',dst:null},{t:1000,type:'BURST',col:'#00e5ff',dst:gws[2%gws.length]||core},{t:1200,type:'DECOY',col:'#ab47bc',dst:{x:p.x,y:p.y}}].forEach(({t,type,col,dst})=>{setTimeout(()=>{if(dst)cspawnPkt(core.x,core.y,dst.x,dst.y,col);cfloatLabel(core.x+rf(-55,55),core.y-42+Math.random()*12,type,col);},t);});\n  setTimeout(()=>{cmsLog('morph','L9 HMAC-DRBG','jitter='+ri(500,8000)+'\u00b5s \u00b7 3 flux ind\u00e9p \u00b7 pred=0.194 < 0.25');},1600);\n}\nfunction animL10(){\n  const core=getCore(),gws=getGWs();\n  const cols=['#42a5f5','#66bb6a','#ffa726'];\n  gws.forEach((gw,i)=>{\n    carcFlash(gw.x,gw.y,cols[i]||'#42a5f5',32);cfloatLabel(gw.x,gw.y-30,'AGENT '+'ABC'[i],cols[i]||'#42a5f5');\n    setTimeout(()=>{const act=['ROTATE_TOPO','VARY_L9','ACTIVATE_L5','VARY_L8'][ri(0,3)];cfloatLabel(gw.x,gw.y-46,act,cols[i]||'#42a5f5');cspawnPkt(gw.x,gw.y,core.x,core.y,cols[i]||'#42a5f5');},i*380+280);\n  });\n  setTimeout(()=>{const act=['ROTATE_TOPO','VARY_L9','ACTIVATE_L5','VARY_L8'][ri(0,3)];carcFlash(core.x,core.y,'#ffc107',85);cfloatLabel(core.x,core.y-62,'DECISION: '+act,'#ffc107');cmsLog('ok','L10 argmax','HMAC-DRBG \u00b7 INV1\/2\/3\/4 PASS \u00b7 bypass=0\/300');cmsLog('ok','L10','entropy=1.92b \u00b7 dominant=0.54 \u00b7 model_resist=0.3769');},1500);\n}\nconst LANIMS={l4:animL4,l5:animL5,l6:animL6,l7:animL7,l8:animL8,l9:animL9,l10:animL10};\nfunction clickLayer(id,el){\n  el.style.borderColor=LCOLS[id]||'#00e5ff';setTimeout(()=>el.style.borderColor='',2000);\n  showTips(LNODES[id]||['CORE']);\n  if(LANIMS[id])LANIMS[id]();\n}\n \n\/\/ \u2550\u2550 ALL DEFENSES TRIGGER \u2550\u2550\nfunction allDefenses(type){\n  document.querySelectorAll('.lcard').forEach((c,i)=>setTimeout(()=>{c.style.borderColor=LCOLS['l'+(4+i)]||'#00e5ff';setTimeout(()=>c.style.borderColor='',1200);},i*100));\n  [animL4,animL5,animL6,animL7,animL8,animL9,animL10].forEach((fn,i)=>setTimeout(fn,i*300));\n  const t0=performance.now();\n  setTimeout(()=>{const ms=performance.now()-t0;const display=ms<0.1?(ms*1e6).toFixed(0)+'ns':ms<1?(ms*1000).toFixed(1)+'\u00b5s':ms.toFixed(2)+'ms';document.getElementById('ov-mttd').textContent=display;},200+Math.random()*300);\n  cemScore=Math.min(89,cemScore+2);updateCEM();\n}\n \n\/\/ \u2550\u2550 MORPH &#038; CEM \u2550\u2550\nfunction doMorph(){\n  getEPs().forEach(n=>{n.ip=randIP();n.port=randPort();});\n  nodes.forEach(n=>{if(n.type!=='CORE'){n.vx+=(Math.random()-.5)*2.8;n.vy+=(Math.random()-.5)*2.8;}});\n  rotations++;\n  document.getElementById('stat-rot').textContent=rotations;\n  document.getElementById('ov-rots').textContent=rotations;\n  lastMorphT=Date.now();\n  \/\/ L7 hash\n  const h='0123456789abcdef';let hash='';for(let i=0;i<16;i++)hash+=h[ri(0,15)];\n  document.getElementById('ov-hash').textContent=hash.slice(0,8)+'\u2026';\n  \/\/ Add to rotation history\n  const ep=getEPs()[0];if(ep)addRotEntry(ep.ip,ep.port);\n  cemScore=Math.min(89,cemScore+1);updateCEM();\n  cmsLog('ok','MORPH','Fisher-Yates IP rotate \u2192 '+(getEPs()[0]||{ip:'\u2014'}).ip+':'+randPort());\n}\nfunction updateCEM(){\n  document.getElementById('cem-v').textContent=cemScore+'\/57';\n  document.getElementById('cem-bar').style.width=Math.min(100,(cemScore\/89)*100)+'%';\n  document.getElementById('cms-cem-val').textContent=cemScore+'\/57 (+9)';\n  const eal=document.getElementById('eal-lv'),sc=document.getElementById('eal-sc');\n  if(cemScore>=79){eal.textContent='EAL7';eal.style.color='#10b981';}\n  else if(cemScore>=66){eal.textContent='EAL6+';eal.style.color='#ffc107';}\n  else{eal.textContent='EAL6';eal.style.color='#26a69a';}\n  sc.textContent=cemScore+'\/57 CEM';\n}\nfunction addRotEntry(ip,port){\n  const h=document.getElementById('rotHistory');\n  const d=document.createElement('div');d.className='rentry';\n  d.innerHTML=`<span style=\"color:rgba(0,229,255,.4)\">${tsNow()}<\/span><span style=\"color:#00e5ff\">${ip}<\/span><span style=\"color:#ffc107\">:${port}<\/span>`;\n  h.insertBefore(d,h.firstChild);while(h.children.length>20)h.removeChild(h.lastChild);\n  document.getElementById('rot-cnt').textContent=rotations;\n}\n \n\/\/ \u2550\u2550 TRAFFIC GRAPH \u2550\u2550\nlet trafData=new Array(50).fill(0);\nfunction updateTrafficGraph(v){\n  trafData.push(v);if(trafData.length>50)trafData.shift();\n  const svg=document.getElementById('trafficSvg');if(!svg)return;\n  const W=svg.clientWidth||400,H=svg.clientHeight||120;\n  const max=Math.max(...trafData,1);\n  const pts=trafData.map((d,i)=>`${(i\/49)*W},${H-(d\/max)*H*.85}`).join(' ');\n  const fill=trafData.map((d,i)=>`${(i\/49)*W},${H-(d\/max)*H*.85}`).join(' ')+` ${W},${H} 0,${H}`;\n  document.getElementById('traf-line').setAttribute('points',pts);\n  document.getElementById('traf-fill').setAttribute('points',fill);\n}\nlet lastPpsT=Date.now();\n \n\/\/ \u2550\u2550 AGENT VOTE \u2550\u2550\nconst ACTS=['ROTATE_TOPO','VARY_L9_JIT','ACTIVATE_L5','VARY_L8_NOI','INC_DECEP','NONE'];\nfunction updateAgents(){\n  if(!cmsTimer)return;\n  const ha=false;const ids=['a','b','c'];\n  const picks=ids.map(id=>{const act=ACTS[ri(0,ACTS.length-1)];const conf=ri(10,35);document.getElementById('ag-'+id).className='abox';document.getElementById('a'+id+'-act').textContent=act.replace('_',' ');document.getElementById('a'+id+'-conf').textContent='conf:'+conf+'%';return{act,conf,id};});\n  const best=picks.reduce((a,b)=>a.conf>b.conf?a:b);document.getElementById('l10-dec').textContent=best.act.replace('_',' ');document.getElementById('l10-ent').textContent='H='+(1.2+Math.random()*.8).toFixed(2)+'b';const w=document.getElementById('ag-'+best.id);if(w){w.className='abox d';setTimeout(()=>w.className='abox',700);}\n}\n \n\/\/ \u2550\u2550 CMS LOG \u2550\u2550\nfunction cmsLog(t,m,msg){\n  const cls=t==='ok'?'clok':t==='warn'?'clwn':'clcr';const lbl=t==='ok'?'[ OK ]':t==='warn'?'[ WARN ]':'[ CRIT ]';\n  const d=document.createElement('div');d.className='cll ll-new';\n  d.innerHTML=`<span class=\"clt\">${tsNow()}<\/span><span class=\"${cls}\">${lbl}<\/span><span class=\"clm\"><span class=\"clip\">${m}<\/span> \u2014 ${msg}<\/span>`;\n  d.style.borderLeft='2px solid #00e5ff';setTimeout(()=>{d.style.borderLeft='';},400);\n  const el=document.getElementById('cms-log');el.appendChild(d);while(el.children.length>80)el.removeChild(el.firstChild);el.scrollTop=el.scrollHeight;\n}\n \n\/\/ \u2550\u2550 ATTACK HANDLING \u2550\u2550\nfunction morphIPs(full){\n  const ips=nodes.map(n=>n.ip);for(let i=ips.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[ips[i],ips[j]]=[ips[j],ips[i]];}\n  nodes.forEach((n,i)=>{n.ip=full?randIP():ips[i];n.port=randPort();if(n.type!=='CORE'){n.vx+=(Math.random()-.5)*2.8;n.vy+=(Math.random()-.5)*2.8;}});\n  doMorph();updateExposureBars(true);\n}\nfunction updateExposureBars(m){if(m)setBars(Math.max(2,parseInt(document.getElementById('bar-ps-v').textContent)-ri(16,28)),Math.max(1,parseInt(document.getElementById('bar-bf-v').textContent)-ri(7,14)),Math.max(1,parseInt(document.getElementById('bar-rc-v').textContent)-ri(12,20)),Math.max(2,parseInt(document.getElementById('bar-dd-v').textContent)-ri(16,28)));}\nfunction setBars(ps,bf,rc,dd){[['ps',ps],['bf',bf],['rc',rc],['dd',dd]].forEach(([k,v])=>{v=Math.max(0,Math.min(100,v));document.getElementById(`bar-${k}`).style.width=v+'%';const vEl=document.getElementById(`bar-${k}-v`);vEl.textContent=v+'%';vEl.style.color=v>60?'var(--red)':v>30?'#f59e0b':'var(--green2)';document.getElementById(`bar-${k}`).style.background=v>60?'var(--red)':v>30?'#f59e0b':'var(--green2)';});}\nfunction cmsReact(type,color){\n  const hons=getHONs();\n  if(type==='mtd'||type==='recon'){setTimeout(()=>{morphIPs(false);cmsLog('warn','DETECT','Reconnaissance \u2192 Fisher-Yates \u00b7 surface fant\u00f4me');},80);}\n  else if(type==='ddos'){setBars(88,38,57,96);cmsLog('crit','DETECT','DDoS FLOOD \u2192 '+Math.floor(1.2e6+Math.random()*3e5)+' req\/s');\n    hons.forEach(h=>{const p=edgePt();cspawnPkt(p.x,p.y,h.x,h.y,'#ef4444',()=>{cfloatLabel(h.x,h.y-22,'CAPTURED','#ff9800');cspawnPkt(h.x,h.y,p.x,p.y,'#10b981');});});\n    setTimeout(()=>{morphIPs(false);cmsLog('ok','ISOLATE','Surface morph\u00e9e \u00b7 flux bloqu\u00e9');},180);setTimeout(()=>setBars(8,18,14,10),650);}\n}\nfunction cmsAttack(type,btn){\n  const labels={portscan:'PORT SCAN',brute:'BRUTEFORCE',recon:'RECONNAISSANCE',ddos:'DDoS FLOOD',apt:'APT INFILTRATION',zero:'ZERO-DAY'};\n  cmsLog('crit','ATTAQUE',labels[type]+' \u00b7 MTD r\u00e9actif \u00b7 toutes couches activ\u00e9es');\n  btn.classList.add('firing');setTimeout(()=>btn.classList.remove('firing'),700);\n  \/\/ Spawn attack packets toward HON\n  const hons=getHONs();\n  for(let j=0;j<4;j++)setTimeout(()=>{const p=edgePt(),h=hons.length?hons[ri(0,hons.length-1)]:getCore();cspawnPkt(p.x,p.y,h.x,h.y,'#ef4444',()=>{cfloatLabel(h.x,h.y-22,'TRAPPED','#ff9800');cspawnPkt(h.x,h.y,p.x,p.y,'#10b981');});},j*200);\n  if(type==='portscan')setBars(94,38,57,88);else if(type==='brute')setBars(85,88,57,88);else if(type==='recon')setBars(85,38,94,88);else if(type==='ddos')setBars(85,38,57,96);\n  \/\/ APT specific\n  if(type==='apt'){const gws=getGWs();if(gws.length>1){cspawnPkt(gws[0].x,gws[0].y,gws[1].x,gws[1].y,'#9c27b0',()=>{cfloatLabel(gws[1].x,gws[1].y-28,'LATERAL MOVE','#ef4444');carcFlash(gws[1].x,gws[1].y,'#9c27b0',35);setTimeout(()=>{cfloatLabel(gws[1].x,gws[1].y-44,'QUARANTINED','#ef4444');carcFlash(gws[1].x,gws[1].y,'#10b981',50);},600);});}document.getElementById('bar-apt').style.width='60%';document.getElementById('bar-apt-v').textContent='60%';}\n  if(type==='zero'){const core=getCore();carcFlash(core.x,core.y,'#ef4444',80);cfloatLabel(core.x,core.y-70,'ZERO-DAY STOPP\u00c9','#10b981');document.getElementById('bar-zd').style.width='70%';document.getElementById('bar-zd-v').textContent='70%';}\n  allDefenses(type);\n  setTimeout(()=>{morphIPs(type==='portscan');cmsLog('ok','NEUTRALIS\u00c9','Surface morph\u00e9e \u00b7 '+randIP()+':'+randPort()+' \u00b7 bypass=0');if(type==='recon')cmsReact('recon','#7c3aed');else if(type==='ddos')cmsReact('ddos','#0891b2');},280);\n  setTimeout(()=>{if(type==='apt'){document.getElementById('bar-apt').style.width='5%';document.getElementById('bar-apt-v').textContent='5%';}if(type==='zero'){document.getElementById('bar-zd').style.width='5%';document.getElementById('bar-zd-v').textContent='5%';}},3000);\n}\n \n\/\/ \u2550\u2550 FULL SIMULATION \u2550\u2550\nlet fullRunning=false;\nfunction fullSim(){\n  if(fullRunning)return;fullRunning=true;\n  const btn=document.getElementById('ba-full');btn.classList.add('firing');btn.textContent='\u26a1 EN COURS\u2026';\n  cmsLog('crit','SIM','\u2550\u2550\u2550 SIMULATION AI+HUMAIN D\u00c9MARR\u00c9E \u2550\u2550\u2550');\n  cmsLog('warn','SIM','S\u00e9quence: SCAN\u2192RECON\u2192BRUTE\u2192APT\u2192DDoS\u2192ZERO-DAY');\n  \/\/ Flash CBMC rapidly\n  let ci=0;const cbInt=setInterval(()=>{for(let i=0;i<3;i++){const b=document.getElementById('cbmc-'+(((ci+i)%40)+1));if(b){b.classList.add('active');setTimeout(()=>b.classList.remove('active'),350);}}ci=(ci+3)%40;},180);\n  const seq=[{t:'portscan',d:0},{t:'recon',d:2000},{t:'brute',d:3800},{t:'apt',d:5500},{t:'ddos',d:7000},{t:'zero',d:9000},{t:'portscan',d:11000},{t:'brute',d:12500}];\n  seq.forEach((a,i)=>setTimeout(()=>{\n    cmsLog('detect','\u25b6 Phase '+(i+1),a.t.toUpperCase());\n    const hons=getHONs();\n    for(let j=0;j<4;j++)setTimeout(()=>{const p=edgePt(),h=hons.length?hons[ri(0,hons.length-1)]:getCore();cspawnPkt(p.x,p.y,h.x,h.y,'#ef4444',()=>{cfloatLabel(h.x,h.y-22,'TRAPPED','#ff9800');cspawnPkt(h.x,h.y,p.x,p.y,'#10b981');});},j*180);\n    allDefenses(a.t);\n    \/\/ Update agents during sim\n    document.querySelectorAll('.abox').forEach(b=>b.classList.add('v'));setTimeout(()=>document.querySelectorAll('.abox').forEach(b=>b.classList.remove('v')),800);\n  },a.d));\n  setTimeout(()=>{\n    clearInterval(cbInt);fullRunning=false;btn.classList.remove('firing');btn.textContent='\u26a1 SIMULATION AI+HUMAIN';\n    cmsLog('ok','SIM','\u2550\u2550\u2550 SIMULATION TERMIN\u00c9E \u2550\u2550\u2550');cmsLog('ok','SIM','8\/8 attaques neutralis\u00e9es \u00b7 bypass=0\/300');cmsLog('ok','SIM','CEM BRUT 66\/57 (+9) \u00b7 VUL-009-012 NON EXPLOIT');\n    carcFlash(getCore().x,getCore().y,'#10b981',130);cfloatLabel(getCore().x,getCore().y-95,'SYST\u00c8ME INVAINCU','#10b981');\n    cemScore=79;updateCEM();\n  },14500);\n}\nfunction triggerFullMorph(){morphIPs(true);nodes.forEach(n=>{if(n.type!=='CORE'){n.vx+=(Math.random()-.5)*5.5;n.vy+=(Math.random()-.5)*5.5;}});cmsLog('warn','FULL MORPH','Surface compl\u00e8te \u00b7 toutes IPs r\u00e9g\u00e9n\u00e9r\u00e9es \u00b7 burst cin\u00e9tique');}\nfunction updateThreat(v){const labels={1:'LOW',2:'MEDIUM',3:'HIGH',4:'CRITICAL'};const colors={1:'#10b981',2:'#f59e0b',3:'#f97316',4:'#ef4444'};const el=document.getElementById('threatVal');el.textContent=labels[v];el.style.color=colors[v];const s=document.getElementById('stat-threat');if(s){s.textContent=labels[v];s.className='cms-kv-val '+( parseInt(v)>2?'crit':'warn');}}\n \n\/\/ \u2550\u2550 SIM LIFECYCLE \u2550\u2550\nfunction startCmsSim(){\n  if(cmsTimer)clearInterval(cmsTimer);buildNodes();cmsPaused=false;\n  document.getElementById('cms-pause-btn').textContent='\u23f8 PAUSE';\n  if(animFrame)cancelAnimationFrame(animFrame);animLoop();\n  cmsLog('ok','INIT','CMS MORPHIC SHIELD\u2122 v8.0 \u2014 brownian MTD actif \u00b7 6 oHON \u00b7 CBMC 60\/60');\n  cmsTimer=setInterval(()=>{if(!cmsPaused){morphIPs(false);updateAgents();}},morphInterval);\n  if(cmsUptimeTimer)clearInterval(cmsUptimeTimer);cmsUptime=0;\n  cmsUptimeTimer=setInterval(()=>{cmsUptime++;const h=String(Math.floor(cmsUptime\/3600)).padStart(2,'0'),m=String(Math.floor((cmsUptime%3600)\/60)).padStart(2,'0'),s=String(cmsUptime%60).padStart(2,'0');document.getElementById('stat-uptime').textContent=`${h}:${m}:${s}`;\n    \/\/ Countdown\n    const cd=Math.max(0,morphInterval\/1000-(Date.now()-lastMorphT)\/1000);document.getElementById('ov-cd').textContent=cd.toFixed(0)+'s';\n    \/\/ PPS\n    const now2=Date.now();if(now2-lastPpsT>=1000){document.getElementById('pps-v').textContent=pktsPerSec+' p\/s';updateTrafficGraph(pktsPerSec);pktsPerSec=0;lastPpsT=now2;}\n    \/\/ L7\/L9 stats\n    document.getElementById('l7stat').textContent='morph '+(0.995+Math.random()*.005).toFixed(3);\n    document.getElementById('l9stat').textContent='pred '+(0.17+Math.random()*.06).toFixed(3);\n  },1000);\n}\nfunction resetCmsSim(){if(cmsTimer)clearInterval(cmsTimer);if(cmsUptimeTimer)clearInterval(cmsUptimeTimer);cmsUptime=0;rotations=0;cemScore=66;document.getElementById('stat-uptime').textContent='00:00:00';document.getElementById('stat-rot').textContent='0';document.getElementById('ov-rots').textContent='0';setBars(85,38,57,88);document.getElementById('cms-log').innerHTML='<div class=\"cll\"><span class=\"clt\">--:--.---<\/span><span class=\"clok\">[ OK ]<\/span><span class=\"clm\">CMS r\u00e9initialis\u00e9<\/span><\/div>';document.getElementById('rotHistory').innerHTML='';buildNodes();updateCEM();}\nfunction pauseCmsSim(){cmsPaused=!cmsPaused;document.getElementById('cms-pause-btn').textContent=cmsPaused?'\u25b6 RESUME':'\u23f8 PAUSE';cmsLog('ok',cmsPaused?'PAUSE':'RESUME',cmsPaused?'Simulation suspendue':'Reprise');}\n \n\/\/ \u2550\u2550 CBMC GRID \u2550\u2550\nfunction buildCBMC(){\n  const grid=document.getElementById('cbmc-grid');grid.innerHTML='';\n  const labels=['P01 SHA256','P02 HMAC','P03 FSM','P04 FAIL-CL','P05 RING+','P06 RING-','P07 RFC6598','P08 PORT','P09 LRU','P10 SEG','P11 CHAIN','P12 LEDGER','P13 ROUTES','P14 FIREWALL','P15 NAT','P16 SESSION','P17 ENCRYPT','P18 SCORE','P19 ISO','P20 SCHED','P21 PRIO','P22 SDQ','P23 RISK','P24 CONSIST','P25 MORPH','P26 FISHER','P27 MICROFLX','P28 ZEROTRUST','P29 DECOY','P30 QUARANT','P31 BLOCKED','P32 RECORDS','P33 EXMA','P34 GOV','P35 FORENSIC','P36 LOGSEQ','P37 ROTATE','P38 COLLECT','P39 HEALTH','P40 PACKET'];\n  labels.forEach((l,i)=>{const b=document.createElement('div');b.className='cbmc-badge pass';b.id=`cbmc-${i+1}`;b.textContent=l;b.title=l+' \u2014 PASS';grid.appendChild(b);});\n}\nfunction animateCBMC(){const badges=document.querySelectorAll('.cbmc-badge');if(!badges.length)return;const idx=Math.floor(Math.random()*badges.length);badges[idx].classList.add('active');setTimeout(()=>badges[idx].classList.remove('active'),380);}\n \n\/\/ \u2550\u2550 BOOT \u2550\u2550\nbuildCBMC();buildNodes();\nsetTimeout(()=>startCmsSim(),200);\nsetInterval(animateCBMC,160);\n<\/script>\n \n \n<!-- \u2550\u2550 OVERLAYS CMS \u2014 EN BAS \u2550\u2550 -->\n<div id=\"cms-overlay-row\" style=\"background:#06080f;border-top:1px solid rgba(0,229,255,.12);display:flex;flex-wrap:wrap;gap:0;font-family:'JetBrains Mono',monospace\">\n \n  <!-- SCORE CEM BRUT -->\n  <div style=\"background:#06080f;border:1px solid rgba(0,51,64,.8);border-top:none;border-left:none;padding:8px 14px;flex:1;min-width:180px\">\n    <div style=\"color:#00e5ff;font-size:9px;opacity:.5;letter-spacing:1px;margin-bottom:4px\">SCORE CEM BRUT<\/div>\n    <div style=\"display:flex;justify-content:space-between;font-size:9px;margin-bottom:3px\">\n      <span id=\"cem-v2\" style=\"color:#ffc107;font-weight:bold\">66\/57<\/span>\n      <span style=\"color:#10b981;font-size:8px\">marge +35<\/span>\n    <\/div>\n    <div style=\"height:3px;background:#0a2030;border-radius:2px\">\n      <div id=\"cem-bar2\" style=\"height:100%;width:66%;background:linear-gradient(90deg,#00e5ff,#ffc107);border-radius:2px;transition:width .8s\"><\/div>\n    <\/div>\n    <div style=\"display:flex;justify-content:space-between;font-size:7px;color:#333;margin-top:2px\">\n      <span>0<\/span><span style=\"color:#10b981\">31\u2713<\/span><span>57<\/span><span>79<\/span>\n    <\/div>\n  <\/div>\n \n  <!-- HOT PATH \/ MTTD \/ ROTATIONS -->\n  <div style=\"background:#06080f;border:1px solid rgba(0,51,64,.8);border-top:none;border-left:none;padding:8px 14px;flex:1;min-width:180px\">\n    <div style=\"color:rgba(0,229,255,.4);font-size:8px;letter-spacing:1px;margin-bottom:4px\">M\u00c9TRIQUES RUNTIME<\/div>\n    <div style=\"display:flex;justify-content:space-between;margin:2px 0;font-size:9px\"><span style=\"opacity:.5\">HOT PATH<\/span><span style=\"color:#00e5ff;font-weight:bold\">2,97 ns<\/span><\/div>\n    <div style=\"display:flex;justify-content:space-between;margin:2px 0;font-size:9px\"><span style=\"opacity:.5\">MTTD LIVE<\/span><span id=\"ov-mttd2\" style=\"color:#00e5ff;font-weight:bold\">\u2014 ns<\/span><\/div>\n    <div style=\"display:flex;justify-content:space-between;margin:2px 0;font-size:9px\"><span style=\"opacity:.5\">ROTATIONS<\/span><span id=\"ov-rots2\" style=\"color:#00e5ff;font-weight:bold\">0<\/span><\/div>\n    <div style=\"display:flex;justify-content:space-between;margin:2px 0;font-size:9px\"><span style=\"opacity:.5\">MORPH DANS<\/span><span id=\"ov-cd2\" style=\"color:#00e5ff;font-weight:bold\">\u2014s<\/span><\/div>\n    <div style=\"display:flex;justify-content:space-between;margin:2px 0;font-size:9px\"><span style=\"opacity:.5\">COMMIT L7<\/span><span id=\"ov-hash2\" style=\"color:#00e5ff;font-weight:bold;font-size:8px\">\u2014<\/span><\/div>\n  <\/div>\n \n  <!-- L\u00c9GENDE -->\n  <div style=\"background:#06080f;border:1px solid rgba(0,51,64,.8);border-top:none;border-left:none;padding:8px 14px;flex:1;min-width:180px;cursor:pointer\" onclick=\"cycleLegend()\">\n    <div style=\"color:#00e5ff;opacity:.5;font-size:8px;letter-spacing:1px;margin-bottom:4px\">\/\/ L\u00c9GENDE (cliquer)<\/div>\n    <div style=\"color:#ff9800;font-size:9px;margin:1px 0\">\u2b24 CORE \u2014 Noyau TCB (PRISM\/OMEGA)<\/div>\n    <div style=\"color:#26a69a;font-size:9px;margin:1px 0\">\u2b24 GW \u2014 Gateway consensus PBFT<\/div>\n    <div style=\"color:#00e5ff;font-size:9px;margin:1px 0\">\u2b24 EP \u2014 Endpoint IP\/port rotatifs<\/div>\n    <div style=\"color:#ff6d00;font-size:9px;margin:1px 0\">\u2b24 oHON \u2014 Honeypot actif L5<\/div>\n  <\/div>\n \n  <!-- NIVEAU EAL -->\n  <div id=\"eal-badge2\" style=\"background:#06080f;border:1px solid #26a69a;border-top:none;border-right:none;padding:8px 18px;text-align:center;flex:0 0 auto;min-width:100px\">\n    <div style=\"color:#26a69a;font-size:8px;letter-spacing:2px;margin-bottom:4px\">NIVEAU<\/div>\n    <div id=\"eal-lv2\" style=\"color:#ffc107;font-size:22px;font-weight:bold;letter-spacing:2px;line-height:1\">EAL6+<\/div>\n    <div id=\"eal-sc2\" style=\"color:#10b981;font-size:9px;margin-top:4px\">57\/57 CEM<\/div>\n  <\/div>\n \n<\/div>\n \n<script>\n\/\/ Sync bottom overlays with top ones\nsetInterval(()=>{\n  const v=document.getElementById('cem-v');if(v&&document.getElementById('cem-v2'))document.getElementById('cem-v2').textContent=v.textContent;\n  const b=document.getElementById('cem-bar');if(b&&document.getElementById('cem-bar2'))document.getElementById('cem-bar2').style.width=b.style.width;\n  const r=document.getElementById('ov-rots');if(r&&document.getElementById('ov-rots2'))document.getElementById('ov-rots2').textContent=r.textContent;\n  const m=document.getElementById('ov-mttd');if(m&&document.getElementById('ov-mttd2'))document.getElementById('ov-mttd2').textContent=m.textContent;\n  const cd=document.getElementById('ov-cd');if(cd&&document.getElementById('ov-cd2'))document.getElementById('ov-cd2').textContent=cd.textContent;\n  const h=document.getElementById('ov-hash');if(h&&document.getElementById('ov-hash2'))document.getElementById('ov-hash2').textContent=h.textContent;\n  const el=document.getElementById('eal-lv');if(el&&document.getElementById('eal-lv2')){document.getElementById('eal-lv2').textContent=el.textContent;document.getElementById('eal-lv2').style.color=el.style.color;}\n  const es=document.getElementById('eal-sc');if(es&&document.getElementById('eal-sc2'))document.getElementById('eal-sc2').textContent=es.textContent;\n},500);\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>CORTEX ORIGIN\u2122 \u2014 Solar Defense v3.1 + CMS MORPHIC SHIELD\u2122 CORTEX ORIGIN\u2122 \u2014 Architecture solaire \u00b7 v3.1 Les attaques ne p\u00e9n\u00e8trent jamais la TCB \u2014 stopp\u00e9es en orbite \u00b7 14 modules \u00b7 AVA-VAN.5 evidence-grade EAL7 ACTIF \u26a1 STD \ud83d\udc80 0-DAY \u2131 EX ANTE \ud83e\udd16 IA+HUM \u23f5 Auto \u21ba 0 Bloqu\u00e9es STD Mode \u2014 Latence \u2014 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1286","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/posts\/1286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/comments?post=1286"}],"version-history":[{"count":2,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/posts\/1286\/revisions"}],"predecessor-version":[{"id":1288,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/posts\/1286\/revisions\/1288"}],"wp:attachment":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/media?parent=1286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/categories?post=1286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/tags?post=1286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}