diff --git a/public/assets/data/g.json b/public/assets/data/g.json index d76984eb..3ddcd655 100644 --- a/public/assets/data/g.json +++ b/public/assets/data/g.json @@ -2213,10 +2213,5 @@ "name": "Black Jack", "directory": "blackjack/", "image": "icon.png" - }, - { - "name": "Speed Stars", - "directory": "speed-stars/", - "image": "icon.png" } ] \ No newline at end of file diff --git a/public/assets/js/wv.js b/public/assets/js/wv.js index ffd93e42..cc6493b5 100644 --- a/public/assets/js/wv.js +++ b/public/assets/js/wv.js @@ -1,103 +1,59 @@ (async()=>{ const storageKey = 'wv-verified'; - const verifiedTime = localStorage.getItem(storageKey); - if(verifiedTime && Date.now() - verifiedTime < 2592000000) { - return; - } + const last = localStorage.getItem(storageKey); + if(last && Date.now() - last < 2592000000) return; - const s=document.createElement('style');s.textContent=` - :root{--overlay-bg:#000;--card-bg:rgba(0,0,0,0.85);--accent:#fff;--text-main:#fff;--text-secondary:rgba(255,255,255,0.7);--radius:12px;--transition:.3s ease;--dot-size:8px;--dot-gap:8px} - #wv-check-overlay{position:fixed;inset:0;background:var(--overlay-bg);display:flex;align-items:center;justify-content:center;font-family:system-ui,sans-serif;z-index:2147483647;opacity:1;transition:opacity .4s ease-out} - #wv-check-overlay.fade-out{opacity:0} - #wv-check-card{background:var(--card-bg);backdrop-filter:blur(12px);border-radius:var(--radius);padding:32px 24px;width:340px;text-align:center;color:var(--text-main);transition:transform var(--transition)} - #wv-check-card h2{margin:0 0 16px;font-size:1.6rem;display:flex;align-items:center;justify-content:center;gap:.5rem} - #wv-progress-bar{width:0;height:6px;background:var(--accent);transition:width var(--transition);border-radius:var(--radius)} - #wv-info{margin:12px 0 20px;font-size:.95rem;color:var(--text-secondary)} - #wv-loading-dots{display:flex;justify-content:center;align-items:center;gap:var(--dot-gap);margin-top:5px} - #wv-loading-dots .dot{width:var(--dot-size);height:var(--dot-size);background:var(--accent);border-radius:50%;opacity:.3;animation:windows-load 1s infinite ease-in-out} - #wv-loading-dots .dot:nth-child(1){animation-delay:0s}#wv-loading-dots .dot:nth-child(2){animation-delay:.2s}#wv-loading-dots .dot:nth-child(3){animation-delay:.4s}#wv-loading-dots .dot:nth-child(4){animation-delay:.6s} - @keyframes windows-load{0%,80%,100%{opacity:.3;transform:scale(1)}40%{opacity:1;transform:scale(1.4)}} - #wv-complete{display:none;text-align:center}#wv-complete.show{display:block;animation:fade-in .4s ease-out forwards} - #wv-complete h2{display:flex;align-items:center;justify-content:center;gap:.5rem;font-size:1.5rem;margin-bottom:8px;color:var(--accent)} - #wv-complete p{color:var(--accent);font-size:1rem;text-align:center;margin:0 auto;width:100%}@keyframes fade-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}} - `;document.head.appendChild(s); + const style = document.createElement('style'); + style.textContent = ` + :root{--bg:#000;--card:rgba(0,0,0,0.85);--accent:#fff;--radius:12px;--trans:.3s} + #wv-overlay{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;font-family:system-ui;z-index:9999;opacity:1;transition:opacity .4s} + #wv-card{background:var(--card);backdrop-filter:blur(12px);border-radius:var(--radius);padding:32px;width:320px;text-align:center;color:var(--accent)} + #wv-progress{width:100%;height:6px;background:#333;border-radius:var(--radius);overflow:hidden;margin:16px 0} + #wv-bar{width:0;height:100%;background:var(--accent);transition:width var(--trans)} + #wv-info{font-size:.95rem;opacity:.8} + #wv-complete{display:none;} + #wv-complete.show{display:block;} + `; + document.head.appendChild(style); - const overlay=document.createElement('div');overlay.id='wv-check-overlay';overlay.innerHTML=` -
-

Verifying Your Browser...

-
-
Starting tests...
-
+ const overlay = document.createElement('div'); overlay.id='wv-overlay'; + overlay.innerHTML = ` +
+

Verifying Browser

+
+
-
-

Success!

-

You may continue.

-
`; +

Success!

Continue.

+ `; document.body.appendChild(overlay); - const info=overlay.querySelector('#wv-info'), bar=overlay.querySelector('#wv-progress-bar'); - const tests=[ - async()=>({msg:'Browser Automation',pass:!navigator.webdriver}), - async()=>{ - const ua = navigator.userAgent.toLowerCase(); - return {msg:'Headless Mode',pass:!/headless|phantomjs|puppeteer|selenium/i.test(ua)}; - }, - async()=>({msg:'Language Support',pass:navigator.languages && navigator.languages.length > 0}), - async()=>({msg:'Browser Plugins',pass:navigator.plugins.length > 0}), - async()=>{ - try { - const c=document.createElement('canvas'); - const gl=c.getContext('webgl')||c.getContext('experimental-webgl'); - if(!gl) return {msg:'WebGL Support',pass:false}; - const debugInfo=gl.getExtension('WEBGL_debug_renderer_info'); - const vendor=debugInfo ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) : ''; - return {msg:'Graphics Driver',pass:!/swiftshader|lavapipe/i.test(vendor)}; - } catch(e) { - return {msg:'WebGL Support',pass:false}; - } - }, - async()=>({msg:'Screen Resolution',pass:screen.width >= 320 && screen.height >= 480}), - async()=>{ - try { - const start = performance.now(); - const buffer = new ArrayBuffer(1000000); - const view = new Uint8Array(buffer); - return {msg:'Performance Check',pass:performance.now() - start < 30}; - } catch(e) { - return {msg:'Performance Check',pass:false}; - } - }, - async()=>({msg:'Device Memory',pass:!navigator.deviceMemory || navigator.deviceMemory > 0.5}), - async()=>{ - const mq=window.matchMedia('(pointer:fine)'); - return {msg:'Input Method',pass:mq.matches}; - } + const info = document.getElementById('wv-info'); + const bar = document.getElementById('wv-bar'); + const tests = [ + {msg:'Automation',pass:!navigator.webdriver}, + {msg:'Headless',pass:!/headless|phantomjs|puppeteer|selenium/i.test(navigator.userAgent)}, + {msg:'Languages',pass:Array.isArray(navigator.languages) && navigator.languages.length>0}, + {msg:'Plugins',pass:navigator.plugins.length>0}, + {msg:'WebGL',pass:(()=>{try{const c=document.createElement('canvas');const g=c.getContext('webgl')||c.getContext('experimental-webgl');return!!g;}catch{return false;}})()} ]; - const failures=[]; + let failures = []; for(let i=0;isetTimeout(r,300)); - } catch(e) { - failures.push(`Test error`); - } + const t=tests[i]; + info.textContent = `${t.msg}...`; + if(!t.pass) failures.push(t.msg); + bar.style.width = `${((i+1)/tests.length)*100}%`; + await new Promise(r=>setTimeout(r,200)); } if(failures.length===0){ localStorage.setItem(storageKey, Date.now()); - overlay.querySelector('#wv-check-card').style.display='none'; - overlay.querySelector('#wv-complete').classList.add('show'); - setTimeout(()=>{ - overlay.classList.add('fade-out'); - setTimeout(()=>overlay.remove(),400); - },800); + document.getElementById('wv-card').style.display='none'; + const done = document.getElementById('wv-complete'); done.classList.add('show'); + setTimeout(()=>overlay.style.opacity='0',500); + setTimeout(()=>overlay.remove(),800); } else { - info.innerHTML=`Verification failed:
${failures.map(m=>`• ${m}`).join('
')}`; + info.innerHTML = `Failed:
${failures.map(f=>`• ${f}`).join('
')}`; bar.style.background='red'; - overlay.querySelector('#wv-loading-dots').remove(); } })(); \ No newline at end of file