Spaces:
Configuration error
Configuration error
File size: 6,176 Bytes
1391c11 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | ```javascript
// voidcaptcha.js
(function(){
const COLORS=["red","blue"];
const BASE_TINY=15.19202383;
let target=null, tries=0, cooldown=5000, blockedUntil=0, verified=false, countdownTimer=null;
function createOverlay(){
if(document.getElementById("voidcaptcha-overlay")) return;
// full screen overlay
const overlay=document.createElement("div");
overlay.id="voidcaptcha-overlay";
overlay.style.cssText=`
position:fixed;top:0;left:0;width:100%;height:100%;
background:#000;display:flex;justify-content:center;align-items:center;
z-index:2147483647;flex-direction:column;
`;
// container card
const card=document.createElement("div");
card.style.cssText=`
background:#111214;color:#eee;padding:26px;border-radius:14px;
text-align:center;box-shadow:0 18px 60px rgba(0,0,0,0.7);
max-width:380px;width:92%;display:flex;flex-direction:column;align-items:center;
`;
const title=document.createElement("h2");
title.innerText="VoidCaptcha";
title.style.margin="0 0 10px 0";
title.style.fontSize="20px";
// checkbox container
const cbContainer=document.createElement("div");
cbContainer.style.margin="10px 0 20px 0";
const checkbox=document.createElement("input");
checkbox.type="checkbox";
checkbox.id="voidcaptcha-checkbox";
checkbox.style.width="24px"; checkbox.style.height="24px"; checkbox.style.cursor="pointer";
const label=document.createElement("label");
label.style.color="#eee"; label.style.cursor="pointer"; label.style.marginLeft="8px";
label.innerText="I'm not a robot";
cbContainer.appendChild(checkbox); cbContainer.appendChild(label);
// links
const links=document.createElement("div");
links.style.fontSize="12px"; links.style.color="#aaa"; links.style.marginTop="8px";
links.innerHTML=`<a href="privacy.html" target="_blank" style="color:#8ab4f8;">Privacy Policy</a> | <a href="tos.html" target="_blank" style="color:#8ab4f8;">Terms of Service</a>`;
// instruction & result
const instruction=document.createElement("p");
instruction.style.margin="10px 0 12px 0";
instruction.style.color="#cfcfcf"; instruction.style.fontSize="14px";
const result=document.createElement("div");
result.style.fontWeight="700"; result.style.minHeight="20px"; result.style.marginTop="10px";
// box container (hidden until checkbox checked)
const boxesWrap=document.createElement("div");
boxesWrap.style.margin="6px 0 8px 0"; boxesWrap.style.display="none"; boxesWrap.style.justifyContent="center";
card.appendChild(title);
card.appendChild(cbContainer);
card.appendChild(instruction);
card.appendChild(boxesWrap);
card.appendChild(result);
card.appendChild(links);
overlay.appendChild(card);
document.body.appendChild(overlay);
// create box
function makeBox(color){
const el=document.createElement("div"); el.dataset.color=color;
el.style.cssText=`
display:inline-block;width:120px;height:120px;margin:8px;cursor:pointer;
border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,0.45);
background:${color};transition: transform .12s ease, filter .12s ease;
`;
el.addEventListener("mouseover",()=>el.style.transform="translateY(-3px)");
el.addEventListener("mouseout",()=>el.style.transform="translateY(0px)");
boxesWrap.appendChild(el);
el.addEventListener("click",(e)=>onBoxClick(e,el,result));
return el;
}
const redBox=makeBox("red"), blueBox=makeBox("blue");
function setTarget(){
target=COLORS[Math.floor(Math.random()*COLORS.length)];
instruction.innerText=`Click the ${target} box`;
}
function setCooldown(){
blockedUntil=Date.now()+cooldown;
cooldown=Math.min(cooldown*2,3600000); // max 1 hour
if(cooldown>=3600000) result.innerText="⏳ Maximum wait reached! Next fail = infinite wait";
redBox.style.pointerEvents="none"; blueBox.style.pointerEvents="none";
clearInterval(countdownTimer);
countdownTimer=setInterval(()=>{
const left=Math.max(0,Math.ceil((blockedUntil-Date.now())/1000));
result.innerText=`⏳ Wait ${left}s before trying again...`;
if(left<=0){
clearInterval(countdownTimer); countdownTimer=null; tries=0;
redBox.style.pointerEvents="auto"; blueBox.style.pointerEvents="auto"; result.innerText="";
setTarget();
}
},300);
}
function failAttempt(msg){
tries++;
if(msg) result.innerText=msg;
if(tries>=2){
if(cooldown>=3600000){ // infinite wait
blockedUntil=1e20;
result.innerText="⏳ Infinite wait! You failed too many times.";
}else setCooldown();
}else setTimeout(()=>{result.innerText=""; setTarget();},350);
}
function pass(){
verified=true;
overlay.style.transition="opacity .36s ease"; overlay.style.opacity="0";
setTimeout(()=>{if(overlay.parentNode) overlay.parentNode.removeChild(overlay);},380);
checkbox.checked=true; checkbox.disabled=true;
}
function onBoxClick(e,el,result){
if(Date.now()<blockedUntil) return;
const color=el.dataset.color;
if(color!==target){el.style.filter="blur(2px)"; setTimeout(()=>el.style.filter="",350); setTimeout(setTarget,350); return;}
const rect=el.getBoundingClientRect();
const clickX=e.clientX-rect.left, clickY=e.clientY-rect.top;
const forbiddenX=(rect.width/100)*BASE_TINY+1;
const forbiddenY=(rect.height/100)*BASE_TINY+1;
if(Math.abs(clickX-rect.width/2)<forbiddenX && Math.abs(clickY-rect.height/2)<forbiddenY){
failAttempt("❌ Try Again!"); return;
}
pass();
}
// checkbox click → show boxes
checkbox.addEventListener("change",()=>{
if(verified){ checkbox.checked=true; checkbox.disabled=true; return;}
if(checkbox.checked){ boxesWrap.style.display="flex"; setTarget();}
});
}
if(document.readyState==="loading") document.addEventListener("DOMContentLoaded",createOverlay);
else createOverlay();
})();
``` |