/* ===== Section outils (code + images) ===== */
.tools-section{max-width:1180px;margin:120px auto 0;padding:0 20px}
.tools-head{text-align:center;margin-bottom:46px}
.tools-head h2{font-size:clamp(34px,5.4vw,64px);letter-spacing:-.045em;line-height:1.02;margin:14px 0 16px}
.tools-head h2 span{background:linear-gradient(100deg,#ff6a6a,#ff2d3a);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.tools-head p:last-child{color:#9a9aa4;font-size:17px;line-height:1.6;max-width:560px;margin:0 auto}
.tools-grid{display:grid;grid-template-columns:1.25fr 1fr;grid-template-areas:"code vision" "code osint";gap:18px}
.code-card{grid-area:code}
.vision-card{grid-area:vision}
.osint-card{grid-area:osint}
.tool-card{position:relative;overflow:hidden;padding:26px;border:1px solid #ffffff14;border-radius:26px;background:linear-gradient(180deg,#ffffff08,#ffffff02),#0a0a0c;transition:border-color .3s,box-shadow .3s,transform .3s}
.tool-card::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 0 0,#ff2d3a1c,transparent 50%);opacity:0;transition:opacity .4s;pointer-events:none}
.tool-card:hover{border-color:#ff4a4a66;box-shadow:0 24px 60px #000a,0 0 40px #ff2d3a1f;transform:translateY(-4px)}
.tool-card:hover::before{opacity:1}
.tool-card header{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.tool-card h3{margin:0;font-size:22px;letter-spacing:-.02em}
.tool-ico{display:grid;place-items:center;width:40px;height:40px;border:1px solid #ff4a4a55;border-radius:12px;background:#ff2d3a18;color:#ff5a5a;font-size:15px;font-weight:700;animation:tl-ring 2.6s ease-out infinite}
@keyframes tl-ring{0%{box-shadow:0 0 0 0 #ff2d3a66}70%,100%{box-shadow:0 0 0 11px #ff2d3a00}}
.tool-card>p{margin:0 0 18px;color:#9a9aa4;line-height:1.65;font-size:15px}
.lang-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.lang-chips span{padding:6px 12px;border:1px solid #ffffff1a;border-radius:9px;background:#ffffff06;color:#b8b8c2;font-size:12px;animation:tl-chip 4.4s ease-in-out infinite;animation-delay:calc(var(--i,0)*.35s)}
@keyframes tl-chip{0%,70%,100%{border-color:#ffffff1a;color:#b8b8c2;box-shadow:none;transform:none}80%{border-color:#ff4a4a;color:#fff;box-shadow:0 0 16px #ff2d3a66;transform:translateY(-3px)}}
.editor{position:relative;border:1px solid #ffffff18;border-radius:16px;background:#08080a;overflow:hidden}
.etabs{display:flex;border-bottom:1px solid #ffffff12;background:#0d0d10}
.etabs button{padding:11px 18px;border:0;border-right:1px solid #ffffff12;background:none;color:#6f6f7a;font:12.5px ui-monospace,Consolas,monospace;cursor:pointer;transition:color .2s,background .2s}
.etabs button:hover{color:#ddd}
.etabs button[aria-selected="true"]{color:#fff;background:#08080a;box-shadow:inset 0 -2px #ff4a4a}
.ecode{margin:0;padding:16px 0;min-height:250px;font:12.5px/1.75 ui-monospace,Consolas,"SF Mono",monospace;color:#d8d8e0;counter-reset:ln;white-space:pre;overflow:hidden}
.ecode .ln{display:block;padding:0 18px 0 52px;position:relative;min-height:1.75em;counter-increment:ln}
.ecode .ln::before{content:counter(ln);position:absolute;left:0;width:36px;text-align:right;color:#4a4a55}
.ecode .ln.cur{background:#ff2d3a12;box-shadow:inset 3px 0 #ff4a4a}
.ecode .caret{display:inline-block;width:7px;height:1.1em;margin-left:1px;vertical-align:-2px;background:#ff4a4a;box-shadow:0 0 8px #ff4a4a;animation:tl-blink .8s steps(1) infinite}
@keyframes tl-blink{50%{opacity:0}}
.ecode .k{color:#ff7a8a}.ecode .f{color:#7ab4ff}.ecode .s{color:#ffd98a}.ecode .c{color:#6a6a78;font-style:italic}.ecode .n{color:#b79aff}
.gen-toast{position:absolute;right:16px;bottom:14px;display:flex;align-items:center;gap:10px;padding:10px 14px;border:1px solid #ff4a4a66;border-radius:12px;background:#140a0ef0;font-size:13px;box-shadow:0 10px 30px #000a,0 0 22px #ff2d3a33;opacity:0;transform:translateY(14px) scale(.95);transition:opacity .4s,transform .5s cubic-bezier(.22,1.4,.4,1)}
.gen-toast.show{opacity:1;transform:none}
.gen-toast i{color:#ff5a5a;font-style:normal}
.gen-toast kbd{padding:2px 7px;border:1px solid #ffffff22;border-radius:6px;color:#8a8a95;font:11px ui-monospace,monospace}
.vis{border:1px solid #ffffff14;border-radius:16px;background:#08080a;overflow:hidden}
.vtabs{display:flex;padding:6px;gap:6px;border-bottom:1px solid #ffffff12;background:#0d0d10}
.vtabs button{flex:1;padding:9px;border:1px solid transparent;border-radius:10px;background:none;color:#7a7a86;font:inherit;font-size:13px;cursor:pointer;transition:all .25s}
.vtabs button[aria-selected="true"]{background:#ff2d3a1c;border-color:#ff4a4a66;color:#fff}
.vshot{position:relative;margin:14px;height:150px;border:1px solid #ffffff14;border-radius:12px;overflow:hidden;background:#0c0c10}
.vimg{position:absolute;inset:0;padding:14px;font:12px/1.7 ui-monospace,Consolas,monospace;color:#9a9aa8;white-space:pre;animation:tl-fade .6s}
@keyframes tl-fade{from{opacity:0;transform:scale(.97)}}
.vimg .bad{color:#ff6a7a;background:#ff2d3a1f;border-radius:3px;padding:0 3px}
.vimg .box{display:inline-block;padding:3px 9px;border:1px solid #7ab4ff77;border-radius:6px;background:#7ab4ff12;margin:2px 4px 2px 0;color:#bcd8ff}
.scanline{position:absolute;left:0;right:0;height:46px;top:-46px;background:linear-gradient(180deg,transparent,#ff4a4a55 90%,#ff8a8a);border-bottom:2px solid #ff6a6a;box-shadow:0 6px 24px #ff2d3a88;animation:tl-scan 2.8s ease-in-out infinite}
@keyframes tl-scan{0%{top:-46px;opacity:0}12%{opacity:1}88%{opacity:1}100%{top:150px;opacity:0}}
.vres{list-style:none;margin:0;padding:0 16px 16px;display:grid;gap:9px;min-height:112px;align-content:start}
.vres li{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;line-height:1.5;color:#d4d4dc;animation:tl-in .5s cubic-bezier(.22,.8,.22,1) backwards}
.vres li::before{content:"✓";flex:none;display:grid;place-items:center;width:19px;height:19px;margin-top:1px;border-radius:50%;background:#ff2d3a26;color:#ff5a5a;font-size:11px}
@keyframes tl-in{from{opacity:0;transform:translateX(-14px)}}
.osint-card>p a{color:#ff7a7a}
.otabs{display:flex;padding:6px;gap:6px;border-bottom:1px solid #ffffff12;background:#0d0d10}
.otabs button{flex:1;padding:9px;border:1px solid transparent;border-radius:10px;background:none;color:#7a7a86;font:inherit;font-size:13px;cursor:pointer;transition:all .25s}
.otabs button[aria-selected="true"]{background:#ff2d3a1c;border-color:#ff4a4a66;color:#fff}
.obar{display:flex;align-items:center;gap:10px;margin:14px;padding:12px 14px;border:1px solid #ffffff18;border-radius:12px;background:#08080a}
.obar svg{width:16px;height:16px;flex:none;color:#6f6f7a}
.obar .oq{flex:1;font:13px ui-monospace,Consolas,"SF Mono",monospace;color:#d8d8e0;white-space:nowrap;overflow:hidden}
.obar .ocaret{width:2px;height:14px;background:#ff4a4a;box-shadow:0 0 8px #ff4a4a;animation:tl-blink .8s steps(1) infinite;flex:none}
@media(max-width:900px){.tools-grid{grid-template-columns:1fr;grid-template-areas:"code" "vision" "osint"}.tools-section{margin-top:80px;padding:0 12px}.ecode{font-size:11.5px}}

/* le bloc code remplit toute la hauteur de la carte (plus de vide) */
.code-card{display:flex;flex-direction:column}
.code-card>.editor{flex:1;display:flex;flex-direction:column}
.code-card .ecode{flex:1}
