@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Orbitron:wght@400;700;900&family=Space+Mono:wght@400;700&display=swap');
:root{--g:#00ff41;--g2:#00cc33;--g3:#009922;--g4:#004411;--rd:#ff3333;--am:#ffaa00;--cy:#00ffff;--pu:#cc44ff;--bl:#0088ff;--pk:#ff44aa;--bg:#020a02;--bg2:#050f05;--bg3:#0a1a0a;--br:rgba(0,255,65,.2);--br2:rgba(0,255,65,.4);--wh:#e8ffe8;}
html,body{margin:0!important;padding:0!important;background:#020a02!important;color:#00ff41;font-family:'Share Tech Mono',monospace;width:100%;overflow-x:hidden;}
#cyberlab-root{width:100%;min-height:100vh;background:var(--bg);color:var(--g);font-family:'Share Tech Mono',monospace;margin:0;padding:0;display:flex;flex-direction:column;}
#cyberlab-root *,#cyberlab-root *::before,#cyberlab-root *::after{box-sizing:border-box;}
.cl-scanline{position:fixed;top:0;left:0;width:100%;height:100%;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,255,65,.012) 2px,rgba(0,255,65,.012) 4px);pointer-events:none;z-index:9999;}
.cl-header{width:100%;border-bottom:1px solid var(--br2);background:rgba(0,255,65,.03);position:sticky;top:0;z-index:200;}
.cl-header-inner{width:100%;max-width:1140px;margin:0 auto;padding:12px 28px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;}
.cl-logo{display:flex;align-items:center;gap:14px;}
.cl-logo-icon{width:40px;height:40px;border:1.5px solid var(--g);display:flex;align-items:center;justify-content:center;font-family:'Orbitron',monospace;font-size:11px;font-weight:900;color:var(--g);flex-shrink:0;animation:cl-pulse 2s infinite;}
@keyframes cl-pulse{0%,100%{box-shadow:0 0 0 0 rgba(0,255,65,0)}50%{box-shadow:0 0 0 4px rgba(0,255,65,.1)}}
.cl-logo-name{font-family:'Orbitron',monospace;font-size:16px;font-weight:900;letter-spacing:3px;color:var(--g);}
.cl-logo-sub{font-size:9px;letter-spacing:3px;color:var(--g3);}
.cl-header-right{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.cl-status-dot{width:7px;height:7px;border-radius:50%;background:var(--g);display:inline-block;animation:cl-blink 1.5s step-end infinite;}
@keyframes cl-blink{0%,100%{opacity:1}50%{opacity:.1}}
.cl-status-txt{font-size:10px;color:var(--g3);letter-spacing:1px;}
.cl-user-badge{font-size:9px;padding:3px 9px;border:1px solid var(--am);color:var(--am);letter-spacing:1px;}
.cl-user-name{font-size:11px;color:var(--g);}
.cl-btn-logout{font-family:'Orbitron',monospace;font-size:9px;font-weight:700;letter-spacing:1px;color:var(--bg);background:var(--rd);border:none;padding:6px 14px;cursor:pointer;transition:all .15s;}
.cl-btn-logout:hover{background:var(--am);}
.cl-wrap{width:100%;max-width:1140px;margin:0 auto;padding:0 28px;}
.cl-hero{padding:52px 0 36px;}
.cl-hero-label{font-size:10px;letter-spacing:4px;color:var(--g3);margin-bottom:14px;}
.cl-hero-title{font-family:'Orbitron',monospace;font-size:clamp(28px,5vw,54px);font-weight:900;line-height:1.1;margin-bottom:16px;text-shadow:0 0 40px rgba(0,255,65,.25);}
.cl-accent-c{color:var(--cy);}.cl-accent-a{color:var(--am);}
.cl-hero-desc{font-size:13px;color:rgba(0,255,65,.65);line-height:1.85;max-width:680px;margin-bottom:24px;}
.cl-badges{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:36px;}
.cl-badge{font-size:9px;letter-spacing:1px;padding:4px 12px;border:1px solid;}
.cl-badge-g{border-color:var(--g3);color:var(--g);}.cl-badge-c{border-color:var(--cy);color:var(--cy);}.cl-badge-a{border-color:var(--am);color:var(--am);}.cl-badge-r{border-color:var(--rd);color:var(--rd);}.cl-badge-p{border-color:var(--pu);color:var(--pu);}
.cl-terminal{margin-bottom:48px;}
.cl-term-inner{background:#000;border:1px solid var(--br2);padding:18px;}
.cl-term-bar{display:flex;align-items:center;gap:6px;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--br);}
.cl-td{width:10px;height:10px;border-radius:50%;}.cl-td1{background:#ff5f56}.cl-td2{background:#ffbd2e}.cl-td3{background:#27c93f}
.cl-term-title{margin-left:8px;font-size:10px;color:var(--g3);letter-spacing:2px;}
.cl-term-body{font-size:11px;line-height:1.9;min-height:160px;}
.cl-term-body .tp{color:var(--g3);}.cl-term-body .tc{color:var(--cy);}.cl-term-body .to{color:rgba(0,255,65,.6);}.cl-term-body .tw{color:var(--am);}.cl-term-body .tok{color:var(--g);}.cl-term-body .tpu{color:var(--pu);}.cl-term-body .te{color:var(--rd);}
.cl-cursor{display:inline-block;width:8px;height:14px;background:var(--g);vertical-align:text-bottom;animation:cl-blink 1s step-end infinite;}
.cl-stats,.cl-dash-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:44px;}
.cl-stat,.cl-dash-stat{background:var(--bg2);border:1px solid var(--br);padding:16px;text-align:center;}
.cl-sv{font-family:'Orbitron',monospace;font-size:26px;font-weight:900;color:var(--g);}
.cl-sv-c{color:var(--cy);}.cl-sv-a{color:var(--am);}.cl-sv-p{color:var(--pu);}.cl-sv-r{color:var(--rd);}
.cl-sl{font-size:9px;letter-spacing:2px;color:var(--g4);margin-top:4px;}
.cl-section-hdr{display:flex;align-items:center;gap:14px;margin-bottom:18px;}
.cl-line{flex:1;height:1px;background:var(--br);}
.cl-slbl{font-family:'Orbitron',monospace;font-size:9px;letter-spacing:3px;color:var(--g3);white-space:nowrap;}
.cl-mod-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin-bottom:44px;}
.cl-mod-preview{background:var(--bg2);border:1px solid var(--br);border-left:3px solid var(--mc,var(--g));padding:14px 16px;transition:all .2s;}
.cl-mod-preview:hover{background:var(--bg3);border-color:var(--mc,var(--g));}
.cl-mp-icon{font-size:24px;margin-bottom:8px;}.cl-mp-name{font-family:'Space Mono',monospace;font-size:11px;font-weight:700;color:var(--wh);margin-bottom:4px;}.cl-mp-level{font-size:9px;color:var(--g4);letter-spacing:2px;}
.cl-legal{margin-bottom:44px;}
.cl-legal-box{border:1px solid rgba(255,51,51,.4);padding:18px 22px;background:rgba(255,0,0,.04);}
.cl-legal-title{font-size:10px;letter-spacing:2px;color:var(--rd);margin-bottom:10px;}
.cl-legal-text{font-size:11px;color:rgba(0,255,65,.55);line-height:1.85;}
.cl-legal-text strong{color:rgba(0,255,65,.8);}
.cl-pin-section{margin-bottom:52px;}
.cl-pin-box{border:1px solid var(--br2);padding:40px 24px;background:var(--bg2);display:flex;flex-direction:column;align-items:center;gap:16px;position:relative;}
.cl-pin-restricted{position:absolute;top:12px;font-size:9px;letter-spacing:3px;color:var(--rd);}
.cl-pin-title{font-family:'Orbitron',monospace;font-size:18px;font-weight:900;letter-spacing:4px;margin-top:8px;}
.cl-pin-sub{font-size:11px;color:var(--g3);letter-spacing:1px;text-align:center;}
.cl-pin-display{display:flex;gap:10px;margin:8px 0;flex-wrap:wrap;justify-content:center;}
.cl-pc{width:40px;height:52px;border:1px solid var(--g3);display:flex;align-items:center;justify-content:center;font-family:'Orbitron',monospace;font-size:20px;font-weight:900;background:#000;transition:all .1s;color:var(--g);}
.cl-pc.active{border-color:var(--cy);color:var(--cy);}.cl-pc.filled{border-color:var(--g);}
.cl-pin-msg{font-size:11px;letter-spacing:1px;min-height:16px;text-align:center;}
.cl-pin-msg.ok{color:var(--g);}.cl-pin-msg.err{color:var(--rd);animation:cl-shake .3s;}
@keyframes cl-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.cl-keypad{display:grid;grid-template-columns:repeat(3,58px);gap:8px;}
.cl-key{height:48px;background:var(--bg3);border:1px solid var(--br);color:var(--g);font-family:'Orbitron',monospace;font-size:16px;font-weight:700;cursor:pointer;transition:all .1s;display:flex;align-items:center;justify-content:center;}
.cl-key:hover{background:rgba(0,255,65,.1);border-color:var(--g2);}.cl-key:active{transform:scale(.96);}
.cl-key-del{font-size:11px;color:var(--rd);border-color:rgba(255,51,51,.3);}
.cl-key-clr{font-size:10px;color:var(--am);border-color:rgba(255,170,0,.3);}
.cl-key-enter{font-size:9px;letter-spacing:1px;color:var(--am);border-color:rgba(255,170,0,.4);grid-column:span 3;height:40px;}
.cl-dash-layout{display:flex;flex:1;min-height:calc(100vh - 200px);}
.cl-left-panel{width:215px;flex-shrink:0;border-right:1px solid var(--br);padding:16px 0;overflow-y:auto;}
.cl-panel-title{font-size:9px;letter-spacing:3px;color:var(--g4);padding:0 14px 12px;border-bottom:1px solid var(--br);}
.cl-mod-item{padding:11px 14px;cursor:pointer;border-left:3px solid transparent;transition:all .15s;font-size:11px;}
.cl-mod-item:hover{background:rgba(0,255,65,.05);border-left-color:var(--g3);}
.cl-mod-item.active{border-left-color:var(--mc,var(--g));background:rgba(0,255,65,.08);}
.cl-mi-name{font-weight:700;color:var(--mc,var(--g));margin-bottom:3px;font-size:11px;}
.cl-mi-sub{font-size:9px;color:var(--g4);letter-spacing:1px;}
.cl-mi-count{font-size:9px;color:var(--g3);}
.cl-right-panel{flex:1;overflow-x:hidden;overflow-y:auto;}
.cl-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:400px;color:var(--g4);font-size:12px;letter-spacing:2px;gap:12px;}
.cl-empty-icon{font-size:44px;opacity:.3;}
.cl-mod-header{padding:22px 26px 18px;border-bottom:1px solid var(--br);position:relative;}
.cl-mod-header::before{content:'';position:absolute;top:0;left:0;width:4px;height:100%;background:var(--mc,var(--g));}
.cl-mh-top{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;}
.cl-mh-left{display:flex;gap:14px;align-items:flex-start;}
.cl-mh-icon{font-size:34px;line-height:1;}
.cl-mh-name{font-family:'Orbitron',monospace;font-size:16px;font-weight:900;letter-spacing:2px;margin-bottom:6px;}
.cl-mh-desc{font-size:11px;color:rgba(0,255,65,.6);line-height:1.8;max-width:560px;}
.cl-mh-badges{display:flex;gap:7px;margin-top:10px;flex-wrap:wrap;}
.cl-mh-badge{font-size:9px;padding:3px 9px;border:1px solid;letter-spacing:1px;}
.cl-mh-stats{display:flex;gap:18px;flex-wrap:wrap;flex-shrink:0;}
.cl-mh-stat{text-align:center;}
.cl-mhs-v{font-family:'Orbitron',monospace;font-size:20px;font-weight:900;}
.cl-mhs-l{font-size:9px;color:var(--g4);letter-spacing:1px;}
.cl-nodes-area{padding:18px 24px;}
.cl-nodes-title{font-size:9px;letter-spacing:3px;color:var(--g4);margin-bottom:14px;display:flex;align-items:center;gap:10px;}
.cl-nodes-title::after{content:'';flex:1;height:1px;background:var(--br);}
.cl-nodes-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;}
.cl-node{background:var(--bg2);border:1px solid var(--br);cursor:pointer;transition:all .2s;overflow:hidden;position:relative;}
.cl-node::before{content:'';position:absolute;top:0;left:0;width:100%;height:2px;background:var(--nc,var(--g));transform:scaleX(0);transform-origin:left;transition:transform .2s;}
.cl-node:hover,.cl-node.open{border-color:var(--nc,var(--g));background:var(--bg3);}
.cl-node:hover::before,.cl-node.open::before{transform:scaleX(1);}
.cl-nh{padding:13px 15px;display:flex;align-items:center;gap:11px;}
.cl-ni{font-size:20px;flex-shrink:0;}.cl-ntw{flex:1;}
.cl-nt{font-family:'Space Mono',monospace;font-size:12px;font-weight:700;color:var(--wh);margin-bottom:2px;}
.cl-ns{font-size:9px;color:var(--g4);letter-spacing:1px;}
.cl-narr{font-size:12px;color:var(--g3);transition:transform .2s;flex-shrink:0;}
.cl-node.open .cl-narr{transform:rotate(90deg);color:var(--nc,var(--g));}
.cl-nb{display:none;padding:0 15px 15px;border-top:1px solid var(--br);}
.cl-node.open .cl-nb{display:block;}
.cl-nb-section{margin-top:12px;}
.cl-nb-stitle{font-size:9px;letter-spacing:2px;color:var(--g3);margin-bottom:7px;}
.cl-nb-text{font-size:11px;color:rgba(0,255,65,.6);line-height:1.8;}
.cl-nb-list{list-style:none;}
.cl-nb-list li{font-size:11px;color:rgba(0,255,65,.6);padding:2px 0 2px 14px;position:relative;line-height:1.7;}
.cl-nb-list li::before{content:'▸';position:absolute;left:0;color:var(--nc,var(--g));font-size:9px;}
.cl-nb-code{background:#000;border:1px solid var(--br);padding:9px 11px;margin-top:7px;font-size:10px;line-height:1.9;overflow-x:auto;}
.cl-nb-code .cm{color:var(--g4);}.cl-nb-code .ck{color:var(--cy);}.cl-nb-code .cv{color:var(--am);}.cl-nb-code .cs{color:var(--rd);}
.cl-nb-tools{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px;}
.cl-nb-tool{font-size:9px;padding:2px 7px;background:rgba(0,255,65,.06);border:1px solid var(--br);color:var(--g3);letter-spacing:1px;}
.cl-nb-diff{display:flex;align-items:center;gap:8px;margin-top:9px;}
.cl-nb-dlbl{font-size:9px;color:var(--g4);}
.cl-nb-ddots{display:flex;gap:3px;}
.cl-nb-dot{width:8px;height:8px;}
.cl-nb-dot.on{background:var(--nc,var(--g));}.cl-nb-dot.off{background:var(--br);}
.cl-labs-list{margin-top:12px;display:flex;flex-direction:column;gap:7px;}
.cl-lab-row{background:#000;border:1px solid var(--br);padding:10px 13px;display:flex;align-items:center;gap:11px;cursor:pointer;transition:all .15s;}
.cl-lab-row:hover{border-color:var(--nc,var(--g));background:var(--bg3);}
.cl-lab-type{font-size:8px;padding:2px 7px;border:1px solid;letter-spacing:1px;flex-shrink:0;}
.cl-lab-title{flex:1;font-size:11px;color:var(--wh);}
.cl-lab-pts{font-size:10px;color:var(--am);flex-shrink:0;}
.cl-lab-status{font-size:9px;flex-shrink:0;letter-spacing:1px;}
.cl-lab-status.done{color:var(--g);}
.cl-lab-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.88);z-index:10000;display:flex;align-items:center;justify-content:center;padding:20px;}
.cl-lab-modal{background:var(--bg2);border:1px solid var(--br2);width:100%;max-width:740px;max-height:90vh;overflow-y:auto;}
.cl-lm-header{padding:18px 22px;border-bottom:1px solid var(--br);display:flex;align-items:flex-start;justify-content:space-between;gap:12px;}
.cl-lm-title{font-family:'Orbitron',monospace;font-size:14px;font-weight:900;letter-spacing:2px;margin-bottom:6px;color:var(--g);}
.cl-lm-type{font-size:9px;padding:3px 9px;border:1px solid var(--am);color:var(--am);letter-spacing:1px;}
.cl-lm-close{background:none;border:none;color:var(--rd);font-size:20px;cursor:pointer;flex-shrink:0;line-height:1;}
.cl-lm-body{padding:20px 22px;}
.cl-scenario-step{background:#000;border:1px solid var(--br);padding:14px 16px;margin-bottom:10px;}
.cl-step-title{font-size:10px;letter-spacing:2px;color:var(--cy);margin-bottom:8px;}
.cl-step-body{font-size:11px;color:rgba(0,255,65,.7);line-height:1.8;}
.cl-step-code{background:var(--bg3);border:1px solid var(--br);padding:8px 10px;margin-top:8px;font-size:10px;color:var(--am);line-height:1.9;overflow-x:auto;white-space:pre;}
.cl-submit-zone{margin-top:18px;}
.cl-submit-label{font-size:10px;letter-spacing:2px;color:var(--g3);margin-bottom:8px;display:block;}
.cl-submit-row{display:flex;gap:8px;}
.cl-answer-input{flex:1;background:#000;border:1px solid var(--br2);color:var(--g);font-family:'Share Tech Mono',monospace;font-size:13px;padding:9px 13px;outline:none;width:100%;}
.cl-answer-input:focus{border-color:var(--cy);}
.cl-answer-input::placeholder{color:var(--g4);}
.cl-submit-btn{font-family:'Orbitron',monospace;font-size:10px;font-weight:700;letter-spacing:1px;background:var(--g);color:var(--bg);border:none;padding:9px 18px;cursor:pointer;white-space:nowrap;}
.cl-submit-btn:hover{background:var(--cy);}
.cl-feedback{margin-top:10px;font-size:11px;padding:9px 13px;border:1px solid;}
.cl-feedback.ok{border-color:var(--g3);color:var(--g);background:rgba(0,255,65,.06);}
.cl-feedback.err{border-color:rgba(255,51,51,.4);color:var(--rd);background:rgba(255,0,0,.04);}
.cl-hint-btn{font-size:10px;background:none;border:1px solid var(--br2);color:var(--am);cursor:pointer;padding:6px 12px;margin:0 6px 8px 0;}
.cl-hint-item{font-size:11px;color:var(--am);padding:7px 11px;background:rgba(255,170,0,.06);border-left:3px solid var(--am);margin-bottom:5px;}
.cl-footer{border-top:1px solid var(--br);padding:16px 28px;display:flex;justify-content:space-between;align-items:center;font-size:9px;color:var(--g4);letter-spacing:1px;flex-wrap:wrap;gap:8px;margin-top:auto;}
@media(max-width:900px){.cl-dash-layout{flex-direction:column;}.cl-left-panel{width:100%;border-right:none;border-bottom:1px solid var(--br);max-height:200px;overflow-y:auto;}}
@media(max-width:600px){.cl-wrap{padding:0 16px;}.cl-hero-title{font-size:28px;}.cl-nodes-grid{grid-template-columns:1fr;}.cl-keypad{grid-template-columns:repeat(3,48px);}.cl-key{height:42px;}}

/* ══════════════════════════════════════════
   MODULE MODAL — LANDING PAGE
══════════════════════════════════════════ */
.cl-mod-modal-overlay{
  position:fixed;top:0;left:0;width:100%;height:100%;
  background:rgba(0,0,0,.88);z-index:10000;
  display:flex;align-items:center;justify-content:center;padding:16px;
}

.cl-mod-modal{
  background:var(--bg2);border:1px solid var(--br2);
  width:100%;max-width:880px;max-height:92vh;
  display:flex;flex-direction:column;
  overflow:hidden;
  transform:translateY(20px);opacity:0;
  transition:transform .2s ease,opacity .2s ease;
}
.cl-mod-modal.cl-mm-visible{transform:translateY(0);opacity:1;}

.cl-mm-header{
  padding:20px 24px;border-bottom:1px solid var(--br);
  display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  flex-shrink:0;
}
.cl-mm-h-left{display:flex;gap:16px;align-items:flex-start;flex:1;}
.cl-mm-icon{font-size:36px;line-height:1;flex-shrink:0;}
.cl-mm-name{font-family:'Orbitron',monospace;font-size:18px;font-weight:900;letter-spacing:2px;margin-bottom:6px;}
.cl-mm-desc{font-size:11px;color:rgba(0,255,65,.6);line-height:1.7;max-width:500px;}
.cl-mm-level{display:inline-block;font-size:9px;padding:3px 9px;border:1px solid;letter-spacing:2px;margin-top:8px;color:var(--am);border-color:var(--am);}

.cl-mm-h-right{display:flex;gap:16px;align-items:center;flex-shrink:0;}
.cl-mm-stat{text-align:center;}
.cl-mm-sv{font-family:'Orbitron',monospace;font-size:22px;font-weight:900;color:var(--g);}
.cl-mm-sl{font-size:9px;letter-spacing:1px;color:var(--g4);}
.cl-mm-close{
  background:none;border:1px solid rgba(255,51,51,.4);
  color:var(--rd);font-size:16px;cursor:pointer;
  width:32px;height:32px;display:flex;align-items:center;justify-content:center;
  flex-shrink:0;transition:all .15s;
}
.cl-mm-close:hover{background:rgba(255,51,51,.15);}

.cl-mm-body{
  flex:1;overflow-y:auto;padding:20px 24px;
}

.cl-mm-nodes-title{
  font-size:9px;letter-spacing:3px;color:var(--g4);margin-bottom:14px;
  display:flex;align-items:center;gap:10px;
}
.cl-mm-nodes-title::after{content:'';flex:1;height:1px;background:var(--br);}

.cl-mm-nodes-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
  gap:10px;margin-bottom:20px;
}

.cl-mm-loading{
  font-size:12px;color:var(--g3);letter-spacing:2px;
  padding:40px 0;text-align:center;
}

/* Bannière auth en bas de la modale */
.cl-mm-auth-banner{
  margin-top:16px;padding:16px 20px;
  background:rgba(0,255,65,.04);border:1px solid var(--br2);
  display:flex;align-items:center;justify-content:space-between;
  gap:16px;flex-wrap:wrap;
}
.cl-mm-auth-text{font-size:11px;color:rgba(0,255,65,.7);letter-spacing:1px;}
.cl-mm-auth-btn{
  font-family:'Orbitron',monospace;font-size:10px;font-weight:700;
  letter-spacing:2px;background:var(--g);color:var(--bg);
  border:none;padding:10px 20px;cursor:pointer;white-space:nowrap;
  transition:all .15s;
}
.cl-mm-auth-btn:hover{background:var(--cy);}

/* Modules landing cliquables */
.cl-mod-preview{cursor:pointer;transition:all .2s;}
.cl-mod-preview:hover{
  transform:translateY(-2px);
  box-shadow:0 4px 20px rgba(0,255,65,.1);
}
.cl-mod-preview .cl-mp-click{
  font-size:9px;color:var(--g4);letter-spacing:1px;margin-top:6px;
  transition:color .15s;
}
.cl-mod-preview:hover .cl-mp-click{color:var(--g3);}

@media(max-width:600px){
  .cl-mm-header{flex-direction:column;}
  .cl-mm-h-right{width:100%;justify-content:space-between;}
  .cl-mm-nodes-grid{grid-template-columns:1fr;}
}

/* ── LAB PROGRESS BADGE ── */
.cl-lab-progress { font-size:10px; letter-spacing:1px; padding:4px 10px; border:1px solid; }
.cl-lab-progress.ok      { border-color:var(--g3); color:var(--g); background:rgba(0,255,65,.06); }
.cl-lab-progress.ongoing { border-color:rgba(255,170,0,.4); color:var(--am); }

/* ── LAB ROW hover amélioré ── */
.cl-lab-row { position:relative; }
.cl-lab-row::after {
  content:'▶ OUVRIR';
  position:absolute; right:10px;
  font-size:8px; letter-spacing:2px; color:var(--g4);
  opacity:0; transition:opacity .15s;
}
.cl-lab-row:hover::after { opacity:1; color:var(--g3); }

/* ══ TERMINAL WIDGET dans lab modal ══ */
.cl-lab-modal--with-terminal { max-width: 900px; }
.cl-terminal-widget {
  background: #000;
  border: 1px solid rgba(0,255,65,.4);
  font-family: 'Share Tech Mono','Courier New',monospace;
  font-size: 12px;
  display: flex; flex-direction: column;
  height: 380px; min-height: 280px;
  resize: vertical; overflow: hidden;
  margin: 12px 0;
}
.cl-tw-bar {
  background: #1a1a1a; padding: 6px 12px;
  display: flex; align-items: center; gap: 6px;
  border-bottom: 1px solid rgba(0,255,65,.2); flex-shrink: 0;
}
.cl-tw-dot { width: 12px; height: 12px; border-radius: 50%; }
.cl-tw-dot.r{background:#ff5f56} .cl-tw-dot.y{background:#ffbd2e} .cl-tw-dot.g{background:#27c93f}
.cl-tw-title { font-size: 10px; color: #666; margin-left: 8px; letter-spacing: 1px; }
.cl-tw-output {
  flex: 1; overflow-y: auto; padding: 10px 14px;
  line-height: 1.7; color: rgba(0,255,65,.85);
}
.cl-tw-output::-webkit-scrollbar{width:4px}
.cl-tw-output::-webkit-scrollbar-thumb{background:rgba(0,255,65,.3)}
.cl-tw-line { word-break: break-all; min-height: 1em; }
.cl-tw-line.cl-tw-err     { color: #ff3333; }
.cl-tw-line.cl-tw-info    { color: #00ffff; }
.cl-tw-line.cl-tw-muted   { color: rgba(0,255,65,.4); }
.cl-tw-line.cl-tw-out     { color: rgba(0,255,65,.85); }
.cl-tw-line.cl-tw-mono    { color: #88ff88; font-size: 11px; }
.cl-tw-line.cl-tw-flag    { color: #ffaa00; font-weight: bold; letter-spacing: 1px; }
.cl-tw-line.cl-tw-success { color: #00ff41; }
.cl-tw-line.cl-tw-warn    { color: #ffaa00; }
.cl-tw-g{color:#00ff41} .cl-tw-y{color:#ffaa00} .cl-tw-r{color:#ff3333} .cl-tw-c{color:#00ffff}
.cl-tw-dir{color:#0088ff;font-weight:bold} .cl-tw-file{color:rgba(0,255,65,.85)} .cl-tw-cmd{color:#00ffff}
.cl-tw-prompt-echo{color:rgba(0,255,65,.5)}
.cl-tw-inputrow {
  display: flex; align-items: center; padding: 6px 14px;
  border-top: 1px solid rgba(0,255,65,.2);
  background: rgba(0,255,65,.03); flex-shrink: 0;
}
.cl-tw-prompt { white-space: nowrap; flex-shrink: 0; }
.cl-tw-user   { color: #00ff41; font-weight: bold; }
.cl-tw-path   { color: #0088ff; }
.cl-tw-dollar { color: rgba(0,255,65,.6); }
.cl-tw-input  {
  flex: 1; background: transparent; border: none; outline: none;
  color: #00ff41; font-family: inherit; font-size: inherit;
  caret-color: #00ff41; min-width: 0;
}
.cl-tw-hints {
  background: rgba(0,255,65,.04); border: 1px solid rgba(0,255,65,.2);
  border-bottom: none; padding: 8px 14px; font-size: 11px; color: rgba(0,255,65,.6);
}
.cl-tw-hints strong { color: #ffaa00; }
