{"id":1338,"date":"2026-03-19T11:19:12","date_gmt":"2026-03-19T11:19:12","guid":{"rendered":"https:\/\/cortexorigin.com\/?page_id=1338"},"modified":"2026-03-28T04:21:25","modified_gmt":"2026-03-28T04:21:25","slug":"console-morphique-defensive","status":"publish","type":"page","link":"https:\/\/cortexorigin.com\/index.php\/console-morphique-defensive\/","title":{"rendered":"Console Morphique D\u00e9fensive"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400;1,500&family=JetBrains+Mono:wght@400;500;600&display=swap');\n.cxd-wrap{position:relative;width:100%;height:600px;background:#0C1829;overflow:hidden;font-family:'JetBrains Mono',monospace;color:#e2e8f0;-webkit-font-smoothing:antialiased;}\n.cxd-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0;}\n.cxd-inner{position:relative;z-index:2;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;}\n.cxd-eyebrow{font-family:'JetBrains Mono',monospace;font-size:.6rem;letter-spacing:.42em;color:rgba(201,169,110,.6);text-transform:uppercase;margin-bottom:2rem;display:flex;align-items:center;justify-content:center;gap:.5rem;}\n.cxd-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;animation:cxd-pulse 1.4s ease-in-out infinite;flex-shrink:0;}\n.cxd-logo{font-family:'EB Garamond',Georgia,serif;font-size:clamp(2rem,4.5vw,3.8rem);font-weight:400;color:#fff;letter-spacing:-.02em;line-height:1;margin-bottom:.4rem;}\n.cxd-logo em{font-style:italic;color:#C9A96E;}\n.cxd-tag{font-family:'JetBrains Mono',monospace;font-size:.68rem;letter-spacing:.22em;color:rgba(0,229,255,.55);text-transform:uppercase;margin-bottom:2.5rem;}\n.cxd-divider{width:140px;height:1px;background:linear-gradient(90deg,transparent,#C9A96E,transparent);margin:0 auto 2rem;}\n.cxd-s1{font-family:'EB Garamond',Georgia,serif;font-size:clamp(1.3rem,2.8vw,1.9rem);font-weight:400;font-style:italic;color:#B8D4F0;line-height:1.45;margin-bottom:.6rem;}\n.cxd-s1 strong{font-style:normal;font-weight:600;color:#fff;}\n.cxd-s2{font-family:'EB Garamond',Georgia,serif;font-size:clamp(.9rem,1.8vw,1.2rem);font-style:italic;color:rgba(184,212,240,.5);line-height:1.65;margin-bottom:1.8rem;}\n.cxd-notice{max-width:520px;border:1px solid rgba(201,169,110,.18);background:rgba(201,169,110,.04);padding:1.4rem 1.8rem;margin-bottom:2rem;}\n.cxd-ntag{font-family:'JetBrains Mono',monospace;font-size:.52rem;letter-spacing:.25em;color:rgba(201,169,110,.55);text-transform:uppercase;margin-bottom:.7rem;display:block;}\n.cxd-np{font-family:'EB Garamond',Georgia,serif;font-size:.95rem;font-style:italic;color:rgba(184,212,240,.65);line-height:1.7;}\n.cxd-np strong{font-style:normal;color:#C9A96E;font-weight:600;}\n.cxd-stats{display:flex;flex-wrap:wrap;justify-content:center;gap:0;border:1px solid rgba(0,229,255,.1);max-width:620px;}\n.cxd-stat{flex:1;min-width:100px;padding:.6rem 1rem;text-align:center;border-right:1px solid rgba(0,229,255,.08);}\n.cxd-stat:last-child{border-right:none;}\n.cxd-sv{font-family:'JetBrains Mono',monospace;font-size:.82rem;font-weight:600;color:#C9A96E;display:block;line-height:1;}\n.cxd-sl{font-family:'JetBrains Mono',monospace;font-size:.42rem;letter-spacing:.14em;color:rgba(140,155,175,.5);text-transform:uppercase;margin-top:3px;display:block;}\n.cxd-footer{position:absolute;bottom:.9rem;left:0;right:0;text-align:center;font-family:'JetBrains Mono',monospace;font-size:.46rem;letter-spacing:.16em;color:rgba(140,155,175,.3);text-transform:uppercase;}\n@keyframes cxd-pulse{0%,100%{opacity:.4;transform:scale(1)}50%{opacity:1;transform:scale(1.3)}}\n<\/style>\n \n<div class=\"cxd-wrap\">\n  <canvas class=\"cxd-canvas\" id=\"cxd-cv\"><\/canvas>\n  <div class=\"cxd-inner\">\n    <div class=\"cxd-eyebrow\">\n      <span class=\"cxd-dot\"><\/span>\n      Syst\u00e8me en ex\u00e9cution \u00b7 CFVL-EVAL-016 v5.2 \u00b7 France Deeptech\n    <\/div>\n    <div class=\"cxd-logo\">Cortex <em>ORIGIN<\/em>\u2122<\/div>\n    <div class=\"cxd-tag\">D\u00e9monstrateur op\u00e9rationnel de cyberd\u00e9fense morphique<\/div>\n    <div class=\"cxd-divider\"><\/div>\n    <div class=\"cxd-s1\">\n      Cette interface n&rsquo;est pas une simulation.<br>\n      <strong>Elle refl\u00e8te le comportement r\u00e9el du syst\u00e8me.<\/strong>\n    <\/div>\n    <div class=\"cxd-s2\">\n      Chaque couche, interaction et blocage observ\u00e9 correspond<br>\n      aux m\u00e9canismes effectivement impl\u00e9ment\u00e9s dans le code.\n    <\/div>\n    <div class=\"cxd-notice\">\n      <span class=\"cxd-ntag\">\u27c1 Note op\u00e9rationnelle<\/span>\n      <p class=\"cxd-np\">\n        Les vecteurs simul\u00e9s reproduisent des attaques r\u00e9elles \u2014 CWE-089, CWE-119, CWE-400,\n        CVE inconnus, APT adaptatifs. Les blocages correspondent aux preuves formelles\n        <strong>Isabelle\/HOL, CBMC et fuzzing<\/strong> ex\u00e9cut\u00e9es sur le code source.\n        Surface morphique L4\u2192L10 active en temps r\u00e9el.\n      <\/p>\n    <\/div>\n    <div class=\"cxd-stats\">\n      <div class=\"cxd-stat\"><span class=\"cxd-sv\">14<\/span><span class=\"cxd-sl\">Modules actifs<\/span><\/div>\n      <div class=\"cxd-stat\"><span class=\"cxd-sv\">3 610+<\/span><span class=\"cxd-sl\">Preuves CBMC<\/span><\/div>\n      <div class=\"cxd-stat\"><span class=\"cxd-sv\">12\/12<\/span><span class=\"cxd-sl\">CWE non exploit<\/span><\/div>\n      <div class=\"cxd-stat\"><span class=\"cxd-sv\">~16 \u00b5s<\/span><span class=\"cxd-sl\">D\u00e9tection + confinement<\/span><\/div>\n      <div class=\"cxd-stat\"><span class=\"cxd-sv\">2,97 ns<\/span><span class=\"cxd-sl\">Hot path MTD<\/span><\/div>\n    <\/div>\n  <\/div>\n  <div class=\"cxd-footer\">CORTEX ORIGIN\u2122 \u00b7 Architecture align\u00e9e EAL7 \u00b7 Trajectoire CFVL \u00b7 Souverainet\u00e9 fran\u00e7aise<\/div>\n<\/div>\n \n<script>\n(function(){\n  var cv = document.getElementById('cxd-cv');\n  if(!cv) return;\n  var ctx = cv.getContext('2d');\n  var W,H,CX,CY,angle=0,particles=[];\n  function resize(){\n    var c = cv.parentElement;\n    W = cv.width = c.offsetWidth;\n    H = cv.height = c.offsetHeight;\n    CX=W\/2; CY=H\/2;\n  }\n  function spawn(){\n    var a=Math.random()*Math.PI*2, r=160+Math.random()*320;\n    particles.push({x:CX+r*Math.cos(a),y:CY+r*Math.sin(a),vx:(Math.random()-.5)*.25,vy:(Math.random()-.5)*.25,life:1,max:100+Math.random()*160,r:.7+Math.random()*1.1,col:Math.random()<.3?'201,169,110':Math.random()<.5?'0,229,255':'129,140,248'});\n  }\n  function draw(){\n    ctx.clearRect(0,0,W,H);\n    var g=ctx.createRadialGradient(CX,CY,0,CX,CY,Math.max(W,H)*.7);\n    g.addColorStop(0,'#162242'); g.addColorStop(1,'#0C1829');\n    ctx.fillStyle=g; ctx.fillRect(0,0,W,H);\n    angle+=.0015;\n    \/\/ rings\n    [{r:70,c:'rgba(79,70,229,.1)',sw:1.2,d:[4,14]},{r:130,c:'rgba(15,110,86,.09)',sw:1,d:[3,12]},{r:195,c:'rgba(0,188,212,.1)',sw:1.5,d:[]},{r:265,c:'rgba(245,158,11,.07)',sw:1,d:[3,11]},{r:330,c:'rgba(255,193,7,.06)',sw:1,d:[4,10]},{r:395,c:'rgba(239,68,68,.05)',sw:.8,d:[3,12]}].forEach(function(rng,i){\n      ctx.save(); ctx.strokeStyle=rng.c; ctx.lineWidth=rng.sw;\n      if(rng.d.length){ctx.setLineDash(rng.d);ctx.lineDashOffset=-angle*(35+i*7);}\n      ctx.beginPath(); ctx.arc(CX,CY,rng.r,0,Math.PI*2); ctx.stroke();\n      ctx.setLineDash([]); ctx.restore();\n    });\n    \/\/ L7 morphic\n    for(var i=0;i<24;i++){\n      var a=(i\/24)*Math.PI*2+angle*2, a2=((i+.38)\/24)*Math.PI*2+angle*2;\n      var p=.06+.1*Math.sin(angle*4+i*.4);\n      ctx.strokeStyle='rgba(0,188,212,'+p.toFixed(2)+')';\n      ctx.lineWidth=1.4;\n      ctx.beginPath(); ctx.moveTo(CX+195*Math.cos(a),CY+195*Math.sin(a)); ctx.lineTo(CX+195*Math.cos(a2),CY+195*Math.sin(a2)); ctx.stroke();\n    }\n    \/\/ TCB glow\n    var tg=ctx.createRadialGradient(CX,CY,0,CX,CY,75);\n    tg.addColorStop(0,'rgba(79,70,229,.07)'); tg.addColorStop(1,'transparent');\n    ctx.fillStyle=tg; ctx.beginPath(); ctx.arc(CX,CY,75,0,Math.PI*2); ctx.fill();\n    \/\/ gold dots\n    for(var i=0;i<8;i++){\n      var a=(i\/8)*Math.PI*2+angle*.35, op=.12+.12*Math.sin(angle*2+i);\n      ctx.fillStyle='rgba(201,169,110,'+op.toFixed(2)+')';\n      ctx.beginPath(); ctx.arc(CX+330*Math.cos(a),CY+330*Math.sin(a),1.4,0,Math.PI*2); ctx.fill();\n    }\n    \/\/ particles\n    if(Math.random()<.035) spawn();\n    particles=particles.filter(function(p){\n      p.life-=1; p.x+=p.vx; p.y+=p.vy;\n      var al=(p.life\/p.max)*.4;\n      ctx.fillStyle='rgba('+p.col+','+al.toFixed(2)+')';\n      ctx.beginPath(); ctx.arc(p.x,p.y,p.r,0,Math.PI*2); ctx.fill();\n      return p.life>0;\n    });\n    requestAnimationFrame(draw);\n  }\n  window.addEventListener('resize',resize);\n  try{new ResizeObserver(resize).observe(cv.parentElement);}catch(e){}\n  resize(); draw();\n})();\n<\/script>\n\n\n\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 Architecture D\u00e9fensive<\/title>\n<style>\n\/* \u2550\u2550 WORDPRESS KILL \u2550\u2550 *\/\n.entry-title,h1.entry-title,h1.page-title,.page-title,.wp-block-post-title{display:none!important}\n.entry-header,.page-header,[class*=\"entry-header\"],[class*=\"page-header\"]{background:#0c1527!important;padding:0!important;margin:0!important;min-height:0!important;border:none!important}\nhtml,body,#page,#content,#primary,#main,.site,.site-content{background:#0c1527!important}\n.entry-content,.wp-block-post-content,.is-layout-constrained>*,[class*=\"wp-container\"]{max-width:none!important;width:100%!important;padding:0!important;margin:0!important}\n*{box-sizing:border-box;margin:0;padding:0}\n:root{\n  --bg:#0c1527;--panel:#0a1220;\n  --gold:#C9A96E;--cyan:#00e5ff;\n  --green:#10b981;--red:#ef4444;\n  --purple:#818cf8;--orange:#f97316;\n  --mono:'JetBrains Mono',monospace;\n  --l4c:#818cf8;--l5c:#f97316;--l6c:#c8a0ff;\n  --l7c:#00bcd4;--l8c:#f59e0b;--l9c:#10b981;--l10c:#ffc107;\n  --l1bc:#0F6E56;--cwec:#ef4444;--tcbc:#4f46e5;\n}\nhtml,body{background:var(--bg)}\nbody{font-family:var(--mono);color:#e2e8f0;display:flex;flex-direction:column;min-height:100vh}\n@keyframes blink{0%,100%{opacity:1}50%{opacity:.12}}\n@keyframes fadein{from{opacity:0;transform:translateY(-4px)}to{opacity:1}}\n \n\/* HEADER *\/\n#hdr{\n  background:rgba(10,18,35,.97);border-bottom:1px solid rgba(0,229,255,.1);\n  padding:.32rem 1rem;display:flex;align-items:center;gap:.8rem;flex-shrink:0\n}\n.hdr-logo{font-size:.52rem;letter-spacing:.22em;color:var(--gold);font-weight:700;white-space:nowrap}\n.vsep{width:1px;height:14px;background:rgba(201,169,110,.2)}\n.hdr-sub{font-size:.44rem;letter-spacing:.12em;color:rgba(0,229,255,.55)}\n.hdr-r{margin-left:auto;display:flex;gap:.45rem;align-items:center}\n.badge{font-size:.36rem;padding:.15rem .45rem;border-radius:2px;letter-spacing:.06em;border:.5px solid}\n.b-gold{color:var(--gold);border-color:rgba(201,169,110,.3);background:rgba(201,169,110,.05)}\n.b-green{color:var(--green);border-color:rgba(16,185,129,.3);background:rgba(16,185,129,.05)}\n.pulse-dot{width:5px;height:5px;border-radius:50%;background:#10b981;animation:blink 1.2s ease-in-out infinite;flex-shrink:0}\n \n\/* MAIN *\/\n#main{flex:1;display:grid;grid-template-columns:1fr 300px;min-height:0;height:calc(100vh - 140px)}\n#canvas-wrap{position:relative;overflow:hidden;min-height:0}\n#cv{width:100%;height:100%;display:block}\n \n\/* RIGHT PANEL *\/\n#rp{background:var(--panel);border-left:1px solid rgba(0,229,255,.07);display:flex;flex-direction:column;overflow:hidden}\n.rp-hd{font-size:.32rem;letter-spacing:.18em;color:rgba(0,229,255,.28);text-transform:uppercase;padding:.35rem .6rem .2rem;border-bottom:1px solid rgba(0,229,255,.05)}\n \n\/* LAYER LIST *\/\n#layer-list{padding:.3rem .4rem;border-bottom:1px solid rgba(0,229,255,.06);overflow-y:auto;max-height:55%}\n.lr{display:flex;align-items:flex-start;gap:.4rem;padding:.28rem .4rem;border-radius:3px;cursor:pointer;transition:background .15s;border:.5px solid transparent;margin-bottom:1px}\n.lr:hover{background:rgba(255,255,255,.03)}\n.lr.sel{background:rgba(0,229,255,.05);border-color:rgba(0,229,255,.12)}\n.lbadge{width:26px;height:16px;border-radius:2px;display:flex;align-items:center;justify-content:center;font-size:6.5px;font-weight:700;color:#fff;flex-shrink:0;margin-top:1px}\n.linfo{flex:1;min-width:0}\n.lname{font-size:.44rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.ldesc{font-size:.36rem;color:rgba(148,163,184,.45);line-height:1.4;margin-top:1px;display:none}\n.lr.sel .ldesc{display:block}\n.lstat{font-size:.34rem;white-space:nowrap;text-align:right;margin-top:1px}\n.lr-sep{font-size:.3rem;letter-spacing:.14em;color:rgba(0,229,255,.22);padding:.2rem .4rem}\n \n\/* LOG *\/\n#log{flex:1;overflow-y:auto;overflow-x:hidden;padding:.3rem .5rem;min-height:0}\n#log::-webkit-scrollbar{width:2px}\n#log::-webkit-scrollbar-thumb{background:rgba(0,229,255,.1)}\n.loge{font-size:.32rem;line-height:1.6;display:flex;gap:.2rem;animation:fadein .18s ease;flex-wrap:wrap}\n.lt{color:rgba(0,229,255,.28);min-width:42px}\n.lok{color:#10b981;min-width:48px}\n.lwn{color:#f59e0b;min-width:48px}\n.lcr{color:#ef4444;min-width:48px}\n.lm{color:rgba(148,163,184,.48);word-break:break-word;overflow-wrap:break-word}.lh{color:var(--cyan);font-weight:700}\n \n\/* CONTROLS *\/\n#ctrl{\n  background:rgba(8,14,26,.98);border-top:1px solid rgba(0,229,255,.08);\n  padding:.3rem .75rem;display:flex;gap:.35rem;align-items:center;flex-wrap:wrap;flex-shrink:0\n}\n.clbl{font-size:.32rem;letter-spacing:.16em;color:rgba(0,229,255,.28);text-transform:uppercase;white-space:nowrap;padding-right:.35rem;border-right:1px solid rgba(0,229,255,.07)}\n.abtn{padding:.18rem .4rem;border-radius:3px;cursor:pointer;font-size:.37rem;color:#ef4444;border:1px solid rgba(239,68,68,.25);background:rgba(239,68,68,.04);transition:all .14s;font-family:var(--mono);white-space:nowrap}\n.abtn:hover,.abtn.on{background:rgba(239,68,68,.18);border-color:var(--red);color:#fff}\n.fbtn{padding:.18rem .45rem;border-radius:3px;cursor:pointer;font-size:.37rem;font-weight:700;color:#ffc107;border:1px solid rgba(255,193,7,.32);background:rgba(255,193,7,.04);transition:all .14s;font-family:var(--mono);white-space:nowrap}\n.fbtn:hover,.fbtn.on{background:#ffc107;color:#000}\n.sbtn{padding:.18rem .38rem;border-radius:3px;cursor:pointer;font-size:.37rem;font-family:var(--mono);border:1px solid rgba(0,229,255,.2);color:var(--cyan);background:rgba(0,229,255,.03);transition:all .13s;white-space:nowrap}\n.sbtn:hover{background:rgba(0,229,255,.1)}\n.sbtn.on{background:rgba(16,185,129,.12);border-color:#10b981;color:#10b981}\n.csep{width:1px;height:15px;background:rgba(0,229,255,.07);flex-shrink:0}\n \n\/* METRICS *\/\n#mbar{\n  background:rgba(6,11,22,.98);border-top:1px solid rgba(0,229,255,.05);\n  padding:.25rem .9rem;display:flex;gap:1.4rem;align-items:center;flex-shrink:0\n}\n.met{text-align:center}\n.mv{font-size:.72rem;font-style:italic;font-weight:700;line-height:1;transition:color .3s}\n.ml{font-size:.28rem;letter-spacing:.1em;color:rgba(80,110,150,.7);text-transform:uppercase;margin-top:1px}\n#mbar-r{margin-left:auto;font-size:.34rem;color:rgba(0,229,255,.28);letter-spacing:.08em}\n<\/style>\n<\/head>\n<body>\n \n<div id=\"hdr\">\n  <div class=\"hdr-logo\">CORTEX ORIGIN\u2122<\/div>\n  <div class=\"vsep\"><\/div>\n  <div class=\"hdr-sub\">Architecture d\u00e9fensive \u00b7 TCB seL4 \u2192 L1b \u2192 CMS L4\u2192L10 \u2192 CWE<\/div>\n  <div class=\"hdr-r\">\n    <div class=\"badge b-gold\">CFVL-EVAL-016 v5.2<\/div>\n    <div class=\"badge b-green\">12\/12 NON EXPLOIT \u00b7 EAL6+\/EAL7<\/div>\n    <div class=\"pulse-dot\"><\/div>\n    <span style=\"font-size:.38rem;color:#10b981\" id=\"status\">ACTIF<\/span>\n  <\/div>\n<\/div>\n \n<div id=\"main\">\n  <div id=\"canvas-wrap\"><canvas id=\"cv\"><\/canvas><\/div>\n \n  <div id=\"rp\">\n    <div class=\"rp-hd\">\/\/ Couches d\u00e9fensives \u00b7 cliquer pour d\u00e9tailler<\/div>\n    <div id=\"layer-list\">\n \n      <div class=\"lr sel\" id=\"lr-tcb\" onclick=\"sel(this,'tcb')\">\n        <div class=\"lbadge\" style=\"background:#4f46e5\">TCB<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:#818cf8\">seL4 \u00b7 PRISM \u00b7 OMEGA \u00b7 M00<\/div>\n          <div class=\"ldesc\">Noyau formellement prouv\u00e9. Inviolable par construction. 714\/714 WP \u00b7 477 lemmes Isabelle\/HOL \u00b7 T1..T8. Aucune attaque ne l&rsquo;atteint jamais.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:#818cf8\">421 ns<\/div>\n      <\/div>\n \n      <div class=\"lr-sep\">\u2500\u2500 L1b \u00b7 Modules Hors-TCB \u2500\u2500<\/div>\n \n      <div class=\"lr\" id=\"lr-l1b\" onclick=\"sel(this,'l1b')\">\n        <div class=\"lbadge\" style=\"background:#0F6E56\">L1b<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:#10b981\">SENTINEL \u00b7 WALL-DOME \u00b7 AEGIS \u00b7 M09 \u00b7 ATLAS \u00b7 M11<\/div>\n          <div class=\"ldesc\">6 modules d\u00e9fensifs en orbite. Les attaques s&rsquo;arr\u00eatent ici \u2014 jamais atteint le TCB. CBMC 3610+ \u00b7 25 Mds+ fuzzing \u00b7 0 exploit r\u00e9ussi.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:#10b981\">100\/100<\/div>\n      <\/div>\n \n      <div class=\"lr-sep\">\u2500\u2500 CMS\u2122 \u00b7 Peau morphique de l&rsquo;anneau L1b \u2500\u2500<\/div>\n \n      <div class=\"lr\" id=\"lr-l4\" onclick=\"sel(this,'l4')\">\n        <div class=\"lbadge\" style=\"background:#534AB7\">L4<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:var(--l4c)\">Byzantine Consensus<\/div>\n          <div class=\"ldesc\">PBFT N=4 \u00b7 Socle confiance distribu\u00e9 \u00b7 anti-replay HKDF \u00b7 quorum 3\/4. Bloque les injections et falsifications de consensus.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:var(--l4c)\">EAL6+<\/div>\n      <\/div>\n \n      <div class=\"lr\" id=\"lr-l5\" onclick=\"sel(this,'l5')\">\n        <div class=\"lbadge\" style=\"background:#c2410c\">L5<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:var(--l5c)\">Honeypot Adaptatif<\/div>\n          <div class=\"ldesc\">DomainDRBG \u00b7 HKDF poison \u00b7 6 oHON actifs \u00b7 capture + empoisonne l&rsquo;attaquant. Surface de d\u00e9ception dynamique vers l&rsquo;ext\u00e9rieur.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:var(--l5c)\">EAL6+<\/div>\n      <\/div>\n \n      <div class=\"lr\" id=\"lr-l6\" onclick=\"sel(this,'l6')\">\n        <div class=\"lbadge\" style=\"background:#7e22ce\">L6<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:var(--l6c)\">Memory Guard<\/div>\n          <div class=\"ldesc\">Canaris head\/mid\/tail \u00b7 fail-closed \u00b7 check_all halt \u00b7 0 corruption. Prot\u00e8ge l&rsquo;int\u00e9grit\u00e9 interne de l&rsquo;anneau L1b.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:var(--l6c)\">EAL5+<\/div>\n      <\/div>\n \n      <div class=\"lr\" id=\"lr-l7\" onclick=\"sel(this,'l7')\">\n        <div class=\"lbadge\" style=\"background:#0277bd\">L7 \u2605<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:var(--l7c)\">Morphisme Topologique<\/div>\n          <div class=\"ldesc\">La peau de l&rsquo;anneau L1b. HKDF 96B \u00b7 morph_rate=1.000 \u00b7 rotation IP\/port continue \u00b7 surface non cartographiable \u00b7 H1=0.000 BLOQU\u00c9. C&rsquo;est le c\u0153ur du morphisme.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:var(--l7c)\" id=\"l7stat\">1.000<\/div>\n      <\/div>\n \n      <div class=\"lr\" id=\"lr-l8\" onclick=\"sel(this,'l8')\">\n        <div class=\"lbadge\" style=\"background:#b45309\">L8<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:var(--l8c)\">D\u00e9fense Adversariale ML<\/div>\n          <div class=\"ldesc\">noise 0.55 \u00b7 degradation_delta 0.967 \u00b7 F-L8-01 \u00b7 r\u00e9sistance fingerprint IA. Rend la surface illisible aux mod\u00e8les adversariaux.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:var(--l8c)\">EAL5+<\/div>\n      <\/div>\n \n      <div class=\"lr\" id=\"lr-l9\" onclick=\"sel(this,'l9')\">\n        <div class=\"lbadge\" style=\"background:#065f46\">L9<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:var(--l9c)\">Morphisme Temporel<\/div>\n          <div class=\"ldesc\">HMAC-DRBG \u00d7 3 \u00b7 jitter [500\u00b5s,8ms] \u00b7 pred_rate 0.18 &lt;0.25 \u00b7 d\u00e9synchronise les attaques s\u00e9quentielles.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:var(--l9c)\" id=\"l9stat\">0.18<\/div>\n      <\/div>\n \n      <div class=\"lr\" id=\"lr-l10\" onclick=\"sel(this,'l10')\">\n        <div class=\"lbadge\" style=\"background:#92400e\">L10\u2605<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:var(--l10c)\">Orchestrateur Cognitif<\/div>\n          <div class=\"ldesc\">argmax HMAC-DRBG \u00b7 4 mod\u00e8les adversariaux \u00b7 bypass 0\/300 \u00b7 INV1-4 PASS \u00b7 pilote L4\u2192L9 en temps r\u00e9el.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:var(--l10c)\">EAL7<\/div>\n      <\/div>\n \n      <div class=\"lr-sep\">\u2500\u2500 CWE \u00b7 Surface d&rsquo;attaque externe \u2500\u2500<\/div>\n \n      <div class=\"lr\" id=\"lr-cwe\" onclick=\"sel(this,'cwe')\">\n        <div class=\"lbadge\" style=\"background:#7f1d1d\">CWE<\/div>\n        <div class=\"linfo\">\n          <div class=\"lname\" style=\"color:#ef4444\">~940 classes de vuln\u00e9rabilit\u00e9s<\/div>\n          <div class=\"ldesc\">Injection \u00b7 DoS \u00b7 0-Day \u00b7 APT IA \u00b7 Supply Chain \u00b7 Memory \u00b7 Side-Channel \u00b7 Crypto \u00b7 Race. Toutes bloqu\u00e9es avant le TCB. 12\/12 NON EXPLOIT.<\/div>\n        <\/div>\n        <div class=\"lstat\" style=\"color:#ef4444\">0 IN<\/div>\n      <\/div>\n    <\/div>\n \n    <div style=\"font-size:.34rem;letter-spacing:.2em;color:rgba(0,229,255,.32);text-transform:uppercase;padding:.4rem .7rem .2rem\">\/\/ Log d\u00e9fensif<\/div>\n    <div id=\"log\">\n      <div class=\"loge\"><span class=\"lt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">TCB <span class=\"lh\">seL4 EAL7<\/span> inviolable \u00b7 T1..T8 \u00b7 421 ns<\/span><\/div>\n      <div class=\"loge\"><span class=\"lt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">CMS MORPHIC SHIELD\u2122 <span class=\"lh\">L4\u2192L10<\/span> actif \u00b7 morph_rate=1.000<\/span><\/div>\n      <div class=\"loge\"><span class=\"lt\">&#8211;:&#8211;.&#8212;<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">L10 orchestration \u00b7 bypass=<span class=\"lh\">0\/300<\/span> \u00b7 INV 4\/4<\/span><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n \n<div id=\"ctrl\">\n  <span class=\"clbl\">\/\/ ATTAQUES<\/span>\n  <button class=\"abtn\" onclick=\"atk('inject',this)\">\ud83d\udc89 INJECTION<\/button>\n  <button class=\"abtn\" onclick=\"atk('dos',this)\">\ud83c\udf0a DoS<\/button>\n  <button class=\"abtn\" onclick=\"atk('zeroday',this)\">\ud83d\udc80 ZERO-DAY<\/button>\n  <button class=\"abtn\" onclick=\"atk('apt',this)\">\ud83e\udd16 APT IA<\/button>\n  <button class=\"abtn\" onclick=\"atk('mem',this)\">\ud83d\udcbe MEMORY<\/button>\n  <button class=\"abtn\" onclick=\"atk('supply',this)\">\ud83d\udd17 SUPPLY<\/button>\n  <button class=\"abtn\" onclick=\"atk('side',this)\">\u23f1 SIDE-CH.<\/button>\n  <button class=\"fbtn\" id=\"btn-all\" onclick=\"fullAtk()\">\u26a1 ATTAQUE TOTALE<\/button>\n  <div class=\"csep\"><\/div>\n  <span class=\"clbl\">\/\/ CONTR\u00d4LE<\/span>\n  <button class=\"sbtn\" id=\"btn-morph\" onclick=\"manualMorph()\">\u21ba MORPH L7<\/button>\n  <button class=\"sbtn\" id=\"btn-auto\" onclick=\"toggleAuto()\">\u23f5 AUTO<\/button>\n  <button class=\"sbtn\" onclick=\"resetAll()\">\u21ba RESET<\/button>\n<\/div>\n \n<div id=\"mbar\">\n  <div class=\"met\"><div class=\"mv\" id=\"m-blk\" style=\"color:#10b981\">0<\/div><div class=\"ml\">Bloqu\u00e9es<\/div><\/div>\n  <div class=\"met\"><div class=\"mv\" id=\"m-layer\" style=\"color:rgba(0,229,255,.5)\">\u2014<\/div><div class=\"ml\">Couche stop<\/div><\/div>\n  <div class=\"met\"><div class=\"mv\" id=\"m-morph\" style=\"color:var(--l7c)\">1.000<\/div><div class=\"ml\">Morph rate<\/div><\/div>\n  <div class=\"met\"><div class=\"mv\" id=\"m-pred\" style=\"color:var(--l9c)\">0.18<\/div><div class=\"ml\">Pred rate<\/div><\/div>\n  <div class=\"met\"><div class=\"mv\" id=\"m-bypass\" style=\"color:#10b981\">0\/300<\/div><div class=\"ml\">Bypass<\/div><\/div>\n  <div class=\"met\"><div class=\"mv\" style=\"color:var(--gold)\">89\/57<\/div><div class=\"ml\">CEM brut<\/div><\/div>\n  <div class=\"met\"><div class=\"mv\" style=\"color:#10b981\">60\/60<\/div><div class=\"ml\">CBMC<\/div><\/div>\n  <div class=\"met\"><div class=\"mv\" style=\"color:#818cf8\">EAL7<\/div><div class=\"ml\">Niveau<\/div><\/div>\n  <div id=\"mbar-r\">CORTEX ORIGIN\u2122 \u00b7 2,97 ns HOT PATH \u00b7 CFVL-EVAL-016 v5.2 \u00b7 Fisher-Yates MTD<\/div>\n<\/div>\n \n<script>\nconst cv = document.getElementById('cv');\nconst cx = cv.getContext('2d');\nlet W,H,CX,CY;\n \n\/\/ Layer radii\nconst RL = { tcb:52, l1b:115, l4:145, l5:170, l6:192, l7:218, l8:244, l9:268, l10:294, cwe:345 };\nconst LC = {\n  tcb:'#818cf8', l1b:'#10b981',\n  l4:'#818cf8', l5:'#f97316', l6:'#c8a0ff',\n  l7:'#00bcd4', l8:'#f59e0b', l9:'#10b981', l10:'#ffc107',\n  cwe:'#ef4444'\n};\n \n\/\/ State\nlet blocked=0, autoOn=false, autoTm=null, morphAngle=0;\nlet particles=[], impacts=[], rings=[];\nlet raf;\n \nconst ATTACKS = {\n  inject:{cwe:'INJECT',angle:15, color:'#f97316',stopAt:'l5', icon:'\ud83d\udc89', name:'Injection SQL\/OS', desc:'CWE-089 \u2192 L5 Honeypot'},\n  dos:   {cwe:'DoS',  angle:90, color:'#06b6d4',stopAt:'l10',icon:'\ud83c\udf0a', name:'DoS Flood adaptatif', desc:'CWE-400 \u2192 L10 Cognitif'},\n  zeroday:{cwe:'0-DAY',angle:200,color:'#dc2626',stopAt:'l1b',icon:'\ud83d\udc80', name:'Zero-Day kernel', desc:'CVE:??? \u2192 L1b seL4'},\n  apt:   {cwe:'APT',  angle:240,color:'#c8a0ff',stopAt:'l8', icon:'\ud83e\udd16', name:'APT IA fingerprint', desc:'CWE-ML \u2192 L8 Adversarial'},\n  mem:   {cwe:'MEM',  angle:45, color:'#a78bfa',stopAt:'l6', icon:'\ud83d\udcbe', name:'Buffer Overflow', desc:'CWE-119 \u2192 L6 Memory Guard'},\n  supply:{cwe:'SUPP', angle:150,color:'#84cc16',stopAt:'l4', icon:'\ud83d\udd17', name:'Supply Chain', desc:'CWE-1104 \u2192 L4 Byzantine'},\n  side:  {cwe:'SIDE', angle:290,color:'#0891b2',stopAt:'tcb',icon:'\u23f1', name:'Side-Channel (ex ante)', desc:'CWE-208 \u2192 TCB HOL proof'},\n};\n \nconst CWE_NODES = [\n  {id:'INJECT',a:15,  c:'#ef4444'},\n  {id:'MEM',   a:45,  c:'#dc2626'},\n  {id:'AUTH',  a:75,  c:'#ef4444'},\n  {id:'DoS',   a:105, c:'#f97316'},\n  {id:'RACE',  a:135, c:'#ef4444'},\n  {id:'SUPP',  a:165, c:'#dc2626'},\n  {id:'CRYP',  a:195, c:'#ef4444'},\n  {id:'0-DAY', a:225, c:'#dc2626'},\n  {id:'SIDE',  a:255, c:'#0891b2'},\n  {id:'APT',   a:285, c:'#c8a0ff'},\n  {id:'INFO',  a:315, c:'#ef4444'},\n  {id:'CONF',  a:345, c:'#dc2626'},\n];\n \nconst L1B_MODULES = [\n  {name:'SENTINEL', a:0,   c:'#0F6E56', r:15},\n  {name:'WALL-DOME',a:60,  c:'#D97706', r:16},\n  {name:'AEGIS',    a:120, c:'#0F6E56', r:14},\n  {name:'M09-CB',   a:180, c:'#7c3aed', r:14},\n  {name:'ATLAS\u2122',   a:240, c:'#0F6E56', r:14},\n  {name:'M11-TL',   a:300, c:'#0F6E56', r:13},\n];\n \nfunction resize() {\n  const wrap = document.getElementById('canvas-wrap');\n  W = wrap.clientWidth; H = wrap.clientHeight;\n  cv.width = W; cv.height = H;\n  CX = W\/2; CY = H\/2;\n}\n \n\/\/ \u2500\u2500 DRAW \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction draw() {\n  cx.clearRect(0,0,W,H);\n  drawBg();\n  drawLayerRings();\n  drawMorphicSurface();\n  drawL1BModules();\n  drawCWEThreats();\n  drawTCB();\n  drawParticles();\n  drawImpacts();\n  drawRingFlashes();\n  morphAngle += 0.004;\n  particles = particles.filter(p => { p.life -= 1; return p.life > 0; });\n  impacts   = impacts.filter(i => { i.life -= 1; return i.life > 0; });\n  rings     = rings.filter(r => { r.life -= 1; return r.life > 0; });\n  \/\/ Animate L7 pulse\n  document.getElementById('l7stat').textContent = (0.995+Math.sin(morphAngle)*0.005).toFixed(3);\n  document.getElementById('l9stat').textContent = (0.18+Math.sin(morphAngle*0.7)*0.04).toFixed(3);\n  raf = requestAnimationFrame(draw);\n}\n \nfunction drawBg() {\n  \/\/ Radial bg\n  const grad = cx.createRadialGradient(CX,CY,0,CX,CY,Math.max(W,H)*.65);\n  grad.addColorStop(0,'#162242');\n  grad.addColorStop(1,'#0c1527');\n  cx.fillStyle=grad; cx.fillRect(0,0,W,H);\n  \/\/ Faint grid\n  cx.strokeStyle='rgba(0,229,255,.025)'; cx.lineWidth=1;\n  for(let i=1;i<8;i++){\n    cx.beginPath();cx.moveTo(W*i\/8,0);cx.lineTo(W*i\/8,H);cx.stroke();\n    cx.beginPath();cx.moveTo(0,H*i\/8);cx.lineTo(W,H*i\/8);cx.stroke();\n  }\n}\n \nfunction drawLayerRings() {\n  \/\/ From outside in: CWE, L10, L9, L8, L7, L6, L5, L4, L1b\n  const ringDefs = [\n    {r:RL.cwe, col:'rgba(239,68,68,.14)', sw:1,   dash:[3,10]},\n    {r:RL.l10, col:'rgba(255,193,7,.14)', sw:1.5, dash:[4,7]},\n    {r:RL.l9,  col:'rgba(16,185,129,.1)', sw:1,   dash:[3,9]},\n    {r:RL.l8,  col:'rgba(245,158,11,.1)', sw:1,   dash:[2,9]},\n    {r:RL.l7,  col:'rgba(0,188,212,.22)', sw:2,   dash:[]},\n    {r:RL.l6,  col:'rgba(200,160,255,.1)',sw:1,   dash:[2,8]},\n    {r:RL.l5,  col:'rgba(249,115,22,.1)', sw:1,   dash:[2,9]},\n    {r:RL.l4,  col:'rgba(129,140,248,.1)',sw:1,   dash:[3,10]},\n    {r:RL.l1b, col:'rgba(15,110,86,.2)',  sw:1.5, dash:[4,8]},\n  ];\n  ringDefs.forEach(({r,col,sw,dash}) => {\n    cx.save();\n    cx.strokeStyle=col; cx.lineWidth=sw;\n    if(dash.length) cx.setLineDash(dash);\n    cx.beginPath(); cx.arc(CX,CY,r,0,Math.PI*2); cx.stroke();\n    cx.setLineDash([]); cx.restore();\n  });\n \n  \/\/ Filled annular zones (very subtle)\n  const zones = [\n    {r1:RL.l4, r2:RL.l5,  col:'rgba(129,140,248,.03)'},\n    {r1:RL.l5, r2:RL.l6,  col:'rgba(249,115,22,.03)'},\n    {r1:RL.l6, r2:RL.l7,  col:'rgba(200,160,255,.03)'},\n    {r1:RL.l7, r2:RL.l8,  col:'rgba(0,188,212,.05)'},\n    {r1:RL.l8, r2:RL.l9,  col:'rgba(245,158,11,.03)'},\n    {r1:RL.l9, r2:RL.l10, col:'rgba(16,185,129,.04)'},\n    {r1:RL.l10,r2:RL.cwe, col:'rgba(255,193,7,.03)'},\n    {r1:0,     r2:RL.l1b, col:'rgba(15,110,86,.06)'},\n  ];\n  zones.forEach(({r1,r2,col}) => {\n    cx.save(); cx.fillStyle=col;\n    cx.beginPath();\n    cx.arc(CX,CY,r2,0,Math.PI*2); cx.arc(CX,CY,r1,0,Math.PI*2,true);\n    cx.fill('evenodd'); cx.restore();\n  });\n \n  \/\/ Layer labels on the rings\n  const lbls = [\n    {r:RL.l4+12,  t:'L4',  c:'rgba(129,140,248,.5)', a:-30},\n    {r:RL.l5+12,  t:'L5',  c:'rgba(249,115,22,.5)', a:-25},\n    {r:RL.l6+12,  t:'L6',  c:'rgba(200,160,255,.5)',a:-20},\n    {r:RL.l7+14,  t:'L7 \u2605',c:'rgba(0,188,212,.7)', a:-15},\n    {r:RL.l8+12,  t:'L8',  c:'rgba(245,158,11,.5)', a:-10},\n    {r:RL.l9+12,  t:'L9',  c:'rgba(16,185,129,.5)', a:-6},\n    {r:RL.l10+12, t:'L10\u2605',c:'rgba(255,193,7,.6)',  a:-2},\n    {r:RL.l1b-16, t:'L1b', c:'rgba(15,110,86,.6)',  a:-30},\n  ];\n  cx.font=\"bold 8px 'JetBrains Mono',monospace\";\n  lbls.forEach(({r,t,c,a}) => {\n    const rad = a*Math.PI\/180;\n    const x=CX+r*Math.cos(rad), y=CY+r*Math.sin(rad);\n    cx.fillStyle=c; cx.textAlign='center'; cx.textBaseline='middle';\n    cx.fillText(t,x,y);\n  });\n}\n \nfunction drawMorphicSurface() {\n  \/\/ L7 morphic ring: rotating dashes \u2014 this IS the morphism\n  const N=32;\n  for(let i=0;i<N;i++) {\n    const a = (i\/N)*Math.PI*2 + morphAngle;\n    const a2= ((i+.4)\/N)*Math.PI*2 + morphAngle;\n    const x1=CX+RL.l7*Math.cos(a), y1=CY+RL.l7*Math.sin(a);\n    const x2=CX+RL.l7*Math.cos(a2),y2=CY+RL.l7*Math.sin(a2);\n    const pulse = 0.3+0.5*Math.sin(morphAngle*3+i*.4);\n    cx.strokeStyle=`rgba(0,188,212,${pulse.toFixed(2)})`;\n    cx.lineWidth=2.5;\n    cx.beginPath(); cx.moveTo(x1,y1); cx.lineTo(x2,y2); cx.stroke();\n  }\n \n  \/\/ L10 cognitive dots \u2014 piloting the layers\n  cx.fillStyle='rgba(255,193,7,.55)';\n  for(let i=0;i<12;i++) {\n    const a=(i\/12)*Math.PI*2 + morphAngle*0.3;\n    cx.beginPath();\n    cx.arc(CX+RL.l10*Math.cos(a), CY+RL.l10*Math.sin(a), 2.5, 0, Math.PI*2);\n    cx.fill();\n  }\n \n  \/\/ L9 temporal: counter-rotating dashes\n  for(let i=0;i<20;i++) {\n    const a=(i\/20)*Math.PI*2 - morphAngle*0.6;\n    const a2=((i+.3)\/20)*Math.PI*2 - morphAngle*0.6;\n    const x1=CX+RL.l9*Math.cos(a),y1=CY+RL.l9*Math.sin(a);\n    const x2=CX+RL.l9*Math.cos(a2),y2=CY+RL.l9*Math.sin(a2);\n    const pulse=0.12+0.1*Math.sin(morphAngle*2+i*.5);\n    cx.strokeStyle=`rgba(16,185,129,${pulse.toFixed(2)})`;\n    cx.lineWidth=1.2;\n    cx.beginPath(); cx.moveTo(x1,y1); cx.lineTo(x2,y2); cx.stroke();\n  }\n \n  \/\/ \"MORPHISME ACTIF\" label\n  cx.save();\n  cx.translate(CX, CY);\n  cx.rotate(morphAngle*0.2);\n  cx.font=\"bold 7px 'JetBrains Mono',monospace\";\n  cx.fillStyle='rgba(0,188,212,.35)';\n  cx.textAlign='center'; cx.textBaseline='middle';\n  cx.fillText('\u2500\u2500 MORPHISME TOPOLOGIQUE \u2500\u2500', 0, -(RL.l7+26));\n  cx.restore();\n}\n \nfunction drawL1BModules() {\n  L1B_MODULES.forEach(m => {\n    const rad=(m.a-90)*Math.PI\/180;\n    const mx=CX+RL.l1b*Math.cos(rad), my=CY+RL.l1b*Math.sin(rad);\n    \/\/ Glow\n    const g=cx.createRadialGradient(mx,my,0,mx,my,m.r+8);\n    g.addColorStop(0,m.c+'30'); g.addColorStop(1,'transparent');\n    cx.fillStyle=g; cx.beginPath(); cx.arc(mx,my,m.r+8,0,Math.PI*2); cx.fill();\n    \/\/ Circle\n    cx.strokeStyle=m.c; cx.lineWidth=1.5;\n    cx.fillStyle=m.c+'18';\n    cx.beginPath(); cx.arc(mx,my,m.r,0,Math.PI*2);\n    cx.fill(); cx.stroke();\n    \/\/ Label\n    cx.font=\"bold 6.5px 'JetBrains Mono',monospace\";\n    cx.fillStyle=m.c; cx.textAlign='center'; cx.textBaseline='middle';\n    cx.fillText(m.name.substring(0,7),mx,my);\n  });\n \n  \/\/ CMS\u2122 module\n  const crad=(30-90)*Math.PI\/180;\n  const cmx=CX+RL.l1b*Math.cos(crad), cmy=CY+RL.l1b*Math.sin(crad);\n  const cg=cx.createRadialGradient(cmx,cmy,0,cmx,cmy,24);\n  cg.addColorStop(0,'rgba(124,58,237,.25)'); cg.addColorStop(1,'transparent');\n  cx.fillStyle=cg; cx.beginPath(); cx.arc(cmx,cmy,24,0,Math.PI*2); cx.fill();\n  cx.strokeStyle='#7c3aed'; cx.lineWidth=2;\n  cx.fillStyle='rgba(91,45,142,.2)';\n  cx.beginPath(); cx.arc(cmx,cmy,17,0,Math.PI*2); cx.fill(); cx.stroke();\n  cx.font=\"bold 7px 'JetBrains Mono',monospace\";\n  cx.fillStyle='#c8a0ff'; cx.textAlign='center'; cx.textBaseline='middle';\n  cx.fillText('CMS\u2122',cmx,cmy-3);\n  cx.font=\"6px 'JetBrains Mono',monospace\";\n  cx.fillStyle='#7c3aed'; cx.fillText('MTD',cmx,cmy+6);\n}\n \nfunction drawCWEThreats() {\n  CWE_NODES.forEach(n => {\n    const rad=(n.a-90)*Math.PI\/180;\n    const nx=CX+RL.cwe*Math.cos(rad), ny=CY+RL.cwe*Math.sin(rad);\n    \/\/ Pulse\n    const pulse=0.5+0.3*Math.sin(morphAngle*1.5+n.a*.05);\n    cx.strokeStyle=n.c; cx.lineWidth=1.2;\n    cx.fillStyle=n.c+'15';\n    cx.globalAlpha=pulse;\n    cx.beginPath(); cx.arc(nx,ny,16,0,Math.PI*2);\n    cx.fill(); cx.stroke();\n    cx.globalAlpha=1;\n    cx.font=\"bold 7px 'JetBrains Mono',monospace\";\n    cx.fillStyle=n.c+'cc'; cx.textAlign='center'; cx.textBaseline='middle';\n    cx.fillText(n.id,nx,ny);\n  });\n}\n \nfunction drawTCB() {\n  \/\/ Outer halo\n  const halo=cx.createRadialGradient(CX,CY,0,CX,CY,90);\n  halo.addColorStop(0,'rgba(79,70,229,.12)'); halo.addColorStop(1,'transparent');\n  cx.fillStyle=halo; cx.beginPath(); cx.arc(CX,CY,90,0,Math.PI*2); cx.fill();\n \n  \/\/ TCB body\n  const tcbG=cx.createRadialGradient(CX,CY,0,CX,CY,RL.tcb);\n  tcbG.addColorStop(0,'#a5b4fc'); tcbG.addColorStop(.5,'#4f46e5'); tcbG.addColorStop(1,'#1e1b4b');\n  cx.shadowColor='rgba(129,140,248,.5)'; cx.shadowBlur=20;\n  cx.fillStyle=tcbG; cx.beginPath(); cx.arc(CX,CY,RL.tcb,0,Math.PI*2); cx.fill();\n  cx.shadowBlur=0;\n \n  \/\/ Border\n  cx.strokeStyle='rgba(165,180,252,.3)'; cx.lineWidth=1.5;\n  cx.beginPath(); cx.arc(CX,CY,RL.tcb,0,Math.PI*2); cx.stroke();\n \n  \/\/ Pulse ring\n  const pr=RL.tcb+(Math.sin(morphAngle*0.8)+1)*12;\n  const pAlpha=0.15-0.12*(Math.sin(morphAngle*0.8)+1)\/2;\n  cx.strokeStyle=`rgba(129,140,248,${pAlpha.toFixed(2)})`; cx.lineWidth=2;\n  cx.beginPath(); cx.arc(CX,CY,pr,0,Math.PI*2); cx.stroke();\n \n  \/\/ Labels\n  cx.textAlign='center';\n  cx.font=\"bold 12px 'JetBrains Mono',monospace\";\n  cx.fillStyle='rgba(30,27,75,.95)'; cx.fillText('TCB',CX,CY-7);\n  cx.font=\"7.5px 'JetBrains Mono',monospace\";\n  cx.fillStyle='#4338ca'; cx.fillText('seL4 EAL7',CX,CY+6);\n  cx.font=\"6px 'JetBrains Mono',monospace\";\n  cx.fillStyle='rgba(67,56,202,.65)'; cx.fillText('PRISM \u00b7 OMEGA',CX,CY+17);\n  cx.fillStyle='rgba(67,56,202,.45)'; cx.fillText('421 ns \u00b7 T1..T8',CX,CY+27);\n}\n \nfunction drawParticles() {\n  particles.forEach(p => {\n    const prog = 1 - p.life\/p.maxLife;\n    const x = p.sx + (p.tx-p.sx)*prog;\n    const y = p.sy + (p.ty-p.sy)*prog;\n    const alpha = p.life\/p.maxLife;\n    \/\/ Trail\n    cx.strokeStyle=p.col+Math.round(alpha*100).toString(16).padStart(2,'0');\n    cx.lineWidth=1.8;\n    cx.setLineDash([6,4]);\n    cx.beginPath(); cx.moveTo(p.sx,p.sy); cx.lineTo(x,y); cx.stroke();\n    cx.setLineDash([]);\n    \/\/ Head\n    cx.shadowColor=p.col; cx.shadowBlur=12;\n    cx.fillStyle=p.col;\n    cx.beginPath(); cx.arc(x,y,5,0,Math.PI*2); cx.fill();\n    cx.shadowBlur=0;\n    \/\/ Origin burst\n    const bAlpha=(p.life\/p.maxLife)*0.5;\n    cx.strokeStyle=p.col+Math.round(bAlpha*255).toString(16).padStart(2,'0');\n    cx.lineWidth=1; cx.beginPath();\n    cx.arc(p.sx,p.sy, 8+(1-alpha)*20, 0, Math.PI*2); cx.stroke();\n  });\n}\n \nfunction drawImpacts() {\n  impacts.forEach(i => {\n    const prog = i.life\/i.maxLife;\n    \/\/ Expanding rings\n    for(let k=0;k<3;k++) {\n      const r = (25+k*10)*(1-prog*0.7);\n      const a = prog*(0.8-k*.15);\n      cx.strokeStyle=i.col+Math.round(a*255).toString(16).padStart(2,'0');\n      cx.lineWidth=2-k*.4;\n      cx.beginPath(); cx.arc(i.x,i.y,r,0,Math.PI*2); cx.stroke();\n    }\n    \/\/ \u2298 symbol\n    const alpha=Math.min(1,prog*4);\n    cx.font=`bold 22px 'JetBrains Mono',monospace`;\n    cx.fillStyle=i.col+Math.round(alpha*200).toString(16).padStart(2,'0');\n    cx.textAlign='center'; cx.textBaseline='middle';\n    cx.fillText('\u2298',i.x,i.y-5);\n    \/\/ Label\n    if(alpha>0.5) {\n      cx.font=`bold 8px 'JetBrains Mono',monospace`;\n      cx.fillStyle=i.col+Math.round((alpha-.5)*2*180).toString(16).padStart(2,'0');\n      cx.fillText('BLOQU\u00c9 \u00b7 '+i.label, i.x, i.y+22);\n    }\n  });\n}\n \nfunction drawRingFlashes() {\n  rings.forEach(r => {\n    const alpha = r.life\/r.maxLife;\n    cx.strokeStyle=r.col+Math.round(alpha*200).toString(16).padStart(2,'0');\n    cx.lineWidth=3.5-2.5*(1-alpha);\n    cx.shadowColor=r.col; cx.shadowBlur=alpha*15;\n    cx.beginPath(); cx.arc(CX,CY,r.r,0,Math.PI*2); cx.stroke();\n    cx.shadowBlur=0;\n  });\n}\n \n\/\/ \u2500\u2500 ATTACK \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction atk(type, btn) {\n  if(btn){btn.classList.add('on'); setTimeout(()=>btn.classList.remove('on'),500);}\n  const a = ATTACKS[type]; if(!a) return;\n  const cweNode = CWE_NODES.find(n=>n.id===a.cwe) || CWE_NODES[0];\n  const ang = (cweNode.a-90)*Math.PI\/180;\n  const sx = CX+RL.cwe*Math.cos(ang), sy = CY+RL.cwe*Math.sin(ang);\n  const stopR = RL[a.stopAt] || RL.l7;\n  const tx = CX+stopR*Math.cos(ang), ty = CY+stopR*Math.sin(ang);\n  const dur = 55 + Math.random()*20;\n \n  particles.push({sx,sy,tx,ty,col:a.color,life:dur,maxLife:dur});\n \n  setTimeout(()=>{\n    impacts.push({x:tx,y:ty,col:a.color,label:a.stopAt.toUpperCase(),life:55,maxLife:55});\n    rings.push({r:stopR,col:a.color,life:35,maxLife:35});\n    blocked++;\n    document.getElementById('m-blk').textContent=blocked;\n    document.getElementById('m-blk').style.color=a.color;\n    setTimeout(()=>document.getElementById('m-blk').style.color='#10b981',500);\n    document.getElementById('m-layer').textContent=a.stopAt.toUpperCase();\n    document.getElementById('m-layer').style.color=a.color;\n    sel(document.getElementById('lr-'+a.stopAt), a.stopAt);\n    addLog('ok', a.name, `${a.desc} \u00b7 BLOQU\u00c9`);\n  }, dur*16.67);\n}\n \nfunction manualMorph() {\n  morphAngle += Math.PI\/8;\n  rings.push({r:RL.l7,col:'#00bcd4',life:40,maxLife:40});\n  const mr=(0.995+Math.random()*.005).toFixed(3);\n  document.getElementById('m-morph').textContent=mr;\n  addLog('ok','L7 MORPH',`Fisher-Yates \u00b7 IPs r\u00e9g\u00e9n\u00e9r\u00e9es \u00b7 morph_rate=${mr}`);\n}\n \nfunction fullAtk() {\n  const btn=document.getElementById('btn-all');\n  btn.classList.add('on'); btn.textContent='\u26a1 EN COURS\u2026';\n  addLog('crit','ATTAQUE TOTALE','7 vecteurs simultan\u00e9s \u00b7 toutes couches d\u00e9fensives activ\u00e9es');\n  Object.keys(ATTACKS).forEach((t,i)=>setTimeout(()=>atk(t,null),i*250));\n  setTimeout(()=>{\n    Object.keys(ATTACKS).slice(0,4).forEach((t,i)=>setTimeout(()=>atk(t,null),i*200));\n  },2200);\n  setTimeout(()=>{\n    btn.classList.remove('on'); btn.textContent='\u26a1 ATTAQUE TOTALE';\n    addLog('ok','R\u00c9SULTAT','7\/7 bloqu\u00e9es \u00b7 TCB inviol\u00e9e \u00b7 bypass=0\/300 \u00b7 morphisme actif');\n    manualMorph();\n  },4000);\n}\n \nfunction toggleAuto() {\n  autoOn=!autoOn;\n  const btn=document.getElementById('btn-auto');\n  if(autoOn){\n    btn.textContent='\u23f8 STOP'; btn.classList.add('on');\n    function loop(){\n      if(!autoOn) return;\n      const keys=Object.keys(ATTACKS);\n      atk(keys[Math.floor(Math.random()*keys.length)],null);\n      if(Math.random()<.25) manualMorph();\n      autoTm=setTimeout(loop, 1000+Math.random()*700);\n    }\n    loop();\n  } else {\n    btn.textContent='\u23f5 AUTO'; btn.classList.remove('on');\n    clearTimeout(autoTm);\n  }\n}\n \nfunction resetAll() {\n  autoOn=false; clearTimeout(autoTm);\n  blocked=0; particles=[]; impacts=[]; rings=[];\n  document.getElementById('m-blk').textContent='0';\n  document.getElementById('m-layer').textContent='\u2014';\n  document.getElementById('btn-auto').textContent='\u23f5 AUTO';\n  document.getElementById('btn-auto').classList.remove('on');\n  document.getElementById('log').innerHTML=`\n    <div class=\"loge\"><span class=\"lt\">--:--.---<\/span><span class=\"lok\">[ OK ]<\/span><span class=\"lm\">R\u00e9initialis\u00e9 \u00b7 TCB inviol\u00e9e \u00b7 morphisme actif<\/span><\/div>`;\n}\n \nfunction sel(el, id) {\n  document.querySelectorAll('.lr').forEach(r=>r.classList.remove('sel'));\n  if(el) el.classList.add('sel');\n  rings.push({r:RL[id]||RL.l7, col:LC[id]||'#00e5ff', life:30, maxLife:30});\n}\n \nfunction addLog(type, src, msg) {\n  const log=document.getElementById('log');\n  const n=new Date();\n  const ts=`${String(n.getHours()).padStart(2,'0')}:${String(n.getMinutes()).padStart(2,'0')}.${String(n.getMilliseconds()).padStart(3,'0')}`;\n  const cls=type==='ok'?'lok':type==='crit'?'lcr':'lwn';\n  const lbl=type==='ok'?'[ OK ]':type==='crit'?'[CRIT]':'[WARN]';\n  const d=document.createElement('div');\n  d.className='loge';\n  d.innerHTML=`<span class=\"lt\">${ts}<\/span><span class=\"${cls}\">${lbl}<\/span><span class=\"lm\"><span class=\"lh\">${src}<\/span> \u2014 ${msg}<\/span>`;\n  log.prepend(d);\n  while(log.children.length>24) log.lastChild.remove();\n}\n \n\/\/ Boot\nwindow.addEventListener('resize',()=>{resize();});\nresize();\ndraw();\nsetTimeout(()=>{\n  addLog('ok','INIT','Architecture d\u00e9fensive \u00b7 7 couches CMS MORPHIC SHIELD\u2122 actives');\n  addLog('ok','L10','orchestration cognitive \u00b7 bypass=0\/300 \u00b7 INV1-4 PASS \u00b7 EAL7 cand.');\n  addLog('ok','L7','morphisme topologique \u00b7 morph_rate=1.000 \u00b7 H1=0.000 BLOQU\u00c9');\n},600);\n<\/script>\n<\/body>\n<\/html>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Syst\u00e8me en ex\u00e9cution \u00b7 CFVL-EVAL-016 v5.2 \u00b7 France Deeptech Cortex ORIGIN\u2122 D\u00e9monstrateur op\u00e9rationnel de cyberd\u00e9fense morphique Cette interface n&rsquo;est pas une simulation. Elle refl\u00e8te le comportement r\u00e9el du syst\u00e8me. Chaque couche, interaction et blocage observ\u00e9 correspond aux m\u00e9canismes effectivement impl\u00e9ment\u00e9s dans le code. \u27c1 Note op\u00e9rationnelle Les vecteurs simul\u00e9s reproduisent des attaques r\u00e9elles \u2014 CWE-089, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1338","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/pages\/1338","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"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=1338"}],"version-history":[{"count":6,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/pages\/1338\/revisions"}],"predecessor-version":[{"id":1351,"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/pages\/1338\/revisions\/1351"}],"wp:attachment":[{"href":"https:\/\/cortexorigin.com\/index.php\/wp-json\/wp\/v2\/media?parent=1338"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}