<html lang="en"><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=0.5,maximum-scale=5,user-scalable=yes,viewport-fit=cover">
<title>ONX 𝗧𝗘𝗔𝗠 𝗨𝗟𝗧𝗥𝗔 𝗦𝗬𝗡𝗖 𝗛𝗔𝗖𝗞</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
<link href="https://fonts.googleapis.com/css2?family=Audiowide&family=Bungee&family=Chakra+Petch:wght@500;600;700&family=Orbitron:wght@600;700;800;900&family=Share+Tech+Mono&family=Teko:wght@600;700&display=swap" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<style>
:root {
--green: #39ff14;
--green2: #00c83c;
--lime: #b9ff00;
--cyan: #00eaff;
--gold: #ffe600;
--red: #ff225d;
--purple: #bc28ff;
--ink: #000603;
--panel: #001208;
--white: #fff;
--flight: 2.25s;
--scan-progress: 0;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
-webkit-tap-highlight-color: transparent;
user-select: none
}
html,
body {
width: 100%;
height: 100%;
min-height: 100dvh;
overflow: hidden;
background: transparent !important;
color: #fff;
font-family: Orbitron, sans-serif
}
button {
font: inherit
}
.hidden {
display: none !important
}
/* GAME */
#target-game-frame {
display: block;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
min-width: 100%;
min-height: 100%;
border: 0;
z-index: 1;
background: #fff;
overflow: auto;
-webkit-overflow-scrolling: touch;
touch-action: auto;
}
#burstCanvasLayer {
position: fixed;
inset: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: 99995
}
/* FLOATING ORB */
.launcher {
position: fixed;
right: 18px;
bottom: 120px;
width: 58px;
height: 58px;
z-index: 9999;
display: grid;
place-items: center;
border: 1.5px solid rgba(57, 255, 20, .65);
border-radius: 50%;
cursor: grab;
touch-action: none;
background: radial-gradient(circle at 32% 25%, rgba(57, 255, 20, .34), transparent 48%), linear-gradient(145deg, #003012, #000b05 62%, #000);
box-shadow: 0 12px 28px #000, 0 0 18px rgba(57, 255, 20, .48), inset 0 0 15px rgba(57, 255, 20, .24);
}
.launcher.hidden {
display: none !important
}
.launcher-glass {
position: absolute;
inset: 3px;
border: 1px solid rgba(255, 255, 255, .14);
border-radius: 50%;
background: linear-gradient(135deg, rgba(255, 255, 255, .16), transparent 55%)
}
.launcher-core {
position: relative;
z-index: 4;
width: 100%;
height: 100%;
display: grid;
place-items: center;
overflow: hidden;
border-radius: 50%;
filter: drop-shadow(0 0 6px var(--green))
}
.launcher-icon-img {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
border-radius: 50%;
pointer-events: none
}
.launcher-ring {
position: absolute;
inset: -8px;
width: calc(100% + 16px);
height: calc(100% + 16px);
pointer-events: none
}
.launcher-ring circle {
fill: none;
stroke: var(--green);
stroke-width: 1.7;
stroke-linecap: round;
stroke-dasharray: 28 16;
transform-origin: 50% 50%;
animation: spin 6s linear infinite;
filter: drop-shadow(0 0 3px var(--green))
}
.launcher-ring .r2 {
stroke: var(--lime);
stroke-width: 1.1;
stroke-dasharray: 8 21;
animation-duration: 4s;
animation-direction: reverse
}
.launcher-orbit {
position: absolute;
inset: -6px;
z-index: 3;
animation: spin 3s linear infinite
}
.launcher-orbit i {
position: absolute;
top: -2px;
left: 50%;
width: 5px;
height: 5px;
border-radius: 50%;
background: #fff;
box-shadow: 0 0 9px var(--lime)
}
@keyframes spin {
to {
transform: rotate(360deg)
}
}
/* FLOATING PANEL WITHOUT WINGS */
.wrap {
position: fixed;
left: 50%;
top: 50%;
z-index: 10000;
display: none;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
touch-action: none;
transform: translate(-50%, -50%) scale(.9);
transition: opacity .2s ease, transform .25s cubic-bezier(.2, .9, .2, 1.1)
}
.wrap.visible {
display: flex;
opacity: 1;
pointer-events: auto;
transform: translate(-50%, -50%) scale(1)
}
.flight-chassis {
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
/* CARD */
.box-wrapper {
position: relative;
z-index: 10;
width: 218px;
height: 276px;
display: flex;
overflow: hidden;
padding: 2px;
border-radius: 38px;
background: #000;
isolation: isolate;
cursor: grab;
box-shadow: 0 0 30px rgba(57, 255, 20, .38), 0 18px 50px rgba(0, 0, 0, .96);
perspective: 800px
}
.box-wrapper:active { cursor: grabbing }
.box-wrapper:before,
.box-wrapper:after {
content: "";
position: absolute;
left: -75%;
top: -75%;
width: 250%;
height: 250%;
z-index: 0;
background: conic-gradient(from 0deg, transparent 64%, var(--green) 77%, #fff 82%, var(--cyan) 87%, transparent 100%);
animation: plasma 3.8s linear infinite
}
.box-wrapper:after {
background: conic-gradient(from 180deg, transparent 64%, var(--green2) 77%, var(--gold) 82%, var(--lime) 88%, transparent 100%);
animation-duration: 5.2s;
animation-direction: reverse;
opacity: .72
}
@keyframes plasma { to { transform: rotate(360deg) } }
.box {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
overflow: hidden;
border-radius: 36px;
padding: 10px 9px 9px;
background: radial-gradient(circle at 50% -10%, rgba(0, 83, 30, .72), transparent 53%), linear-gradient(#001208, #000803 57%, #000201);
box-shadow: inset 0 0 22px rgba(57, 255, 20, .24)
}
.box:after {
content: "";
position: absolute;
inset: 0;
z-index: 3;
pointer-events: none;
border-radius: inherit;
background: linear-gradient(112deg, transparent 20%, rgba(255, 255, 255, .08) 35%, transparent 49%);
transform: translateX(-130%);
animation: panelShine 6.3s linear infinite
}
@keyframes panelShine { to { transform: translateX(160%) } }
.ambient {
position: absolute;
inset: -40%;
z-index: 0;
pointer-events: none;
background: radial-gradient(circle at 30% 70%, rgba(0, 234, 255, .08), transparent 28%), radial-gradient(circle at 65% 35%, rgba(57, 255, 20, .15), transparent 30%);
filter: blur(13px);
animation: ambient 10s ease-in-out infinite alternate
}
@keyframes ambient { to { transform: rotate(24deg) scale(1.15) } }
.dot-field {
position: absolute;
inset: 0;
z-index: 1;
overflow: hidden;
pointer-events: none
}
.dot-field i {
position: absolute;
bottom: -8px;
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--green);
box-shadow: 0 0 5px var(--green);
opacity: 0;
animation: rise 5s linear infinite
}
.dot-field i:nth-child(1) { left: 12%; animation-delay: 0s }
.dot-field i:nth-child(2) { left: 29%; animation-delay: 1.2s; animation-duration: 6s }
.dot-field i:nth-child(3) { left: 49%; animation-delay: 2.4s }
.dot-field i:nth-child(4) { left: 72%; animation-delay: .6s; animation-duration: 5.8s }
.dot-field i:nth-child(5) { left: 87%; animation-delay: 3s; animation-duration: 4.7s }
@keyframes rise {
20%, 78% { opacity: .8 }
to { transform: translateY(-285px) scale(1.25); opacity: 0 }
}
.gloss-stream {
position: absolute;
inset: 0;
pointer-events: none;
overflow: hidden;
z-index: 3
}
.gloss-line {
position: absolute;
width: 1.5px;
border-radius: 2px;
opacity: 0;
background: linear-gradient(180deg, transparent, rgba(0, 255, 65, .2) 20%, #fff 60%, rgba(0, 255, 65, .9) 80%, transparent);
filter: drop-shadow(0 0 3px var(--green));
animation: glossFall linear infinite
}
.gl-1 { left: 16%; height: 46px; animation-duration: 2.6s }
.gl-2 { left: 38%; height: 32px; animation-duration: 3.2s; animation-delay: 1.1s }
.gl-3 { left: 64%; height: 52px; animation-duration: 2.2s; animation-delay: .5s }
.gl-4 { left: 84%; height: 38px; animation-duration: 3s; animation-delay: 1.7s }
.gl-5 { left: 50%; height: 44px; animation-duration: 2.8s; animation-delay: 2.1s }
@keyframes glossFall {
0% { transform: translateY(-60px); opacity: 0 }
25%, 75% { opacity: .9 }
100% { transform: translateY(290px); opacity: 0 }
}
.panel-sweep {
position: absolute;
inset: 0;
z-index: 3;
pointer-events: none;
overflow: hidden;
border-radius: 36px
}
.panel-sweep:before {
content: "";
position: absolute;
top: -30%;
left: -60%;
width: 60%;
height: 160%;
background: linear-gradient(90deg, transparent, rgba(0, 255, 65, .07) 45%, rgba(255, 255, 255, .12) 50%, rgba(0, 255, 65, .07) 55%, transparent);
transform: skewX(-18deg);
animation: panelSweepMove 6.5s linear infinite;
filter: blur(1px)
}
@keyframes panelSweepMove { to { transform: translateX(320%) skewX(-18deg) } }
.bg-anim {
position: absolute;
inset: 0;
border-radius: 36px;
overflow: hidden;
pointer-events: none;
z-index: 1
}
.aurora {
position: absolute;
width: 200%;
height: 200%;
top: -50%;
left: -50%;
background: radial-gradient(circle at 50% 50%, rgba(0, 255, 65, .16), transparent 40%), radial-gradient(circle at 30% 70%, rgba(57, 255, 20, .10), transparent 40%), radial-gradient(circle at 70% 30%, rgba(127, 255, 0, .10), transparent 40%);
filter: blur(14px);
animation: auroraSwirl 10s ease-in-out infinite alternate;
mix-blend-mode: screen
}
@keyframes auroraSwirl {
0% { transform: scale(1) rotate(0) }
50% { transform: scale(1.2) rotate(18deg) }
100% { transform: scale(1.05) rotate(-10deg) }
}
.inner {
position: relative;
z-index: 5;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between
}
.hdr {
display: flex;
flex-direction: column;
gap: 3px;
padding-bottom: 3px;
border-bottom: 1px solid rgba(57, 255, 20, .34)
}
.title-bar {
min-height: 25px;
display: grid;
place-items: center;
overflow: hidden;
padding: 3px 7px;
border: 1px solid rgba(57, 255, 20, .46);
border-radius: 8px;
background: linear-gradient(90deg, rgba(57, 255, 20, .17), rgba(0, 0, 0, .9), rgba(0, 234, 255, .12));
box-shadow: 0 2px 5px #000
}
.brand-wrapper {
width: 100%;
display: flex;
justify-content: center;
overflow: hidden
}
.card-title {
display: inline-block;
white-space: nowrap;
color: #fff;
font: 900 11px Audiowide;
letter-spacing: .7px;
text-align: center;
text-shadow: 0 0 8px var(--green), 0 0 14px rgba(255, 255, 255, .35)
}
.stat-strip {
display: flex;
gap: 3px
}
.stat-pill {
flex: 1;
display: flex;
justify-content: center;
gap: 2px;
white-space: nowrap;
padding: 2px;
border: 1px solid rgba(57, 255, 20, .38);
border-radius: 6px;
background: linear-gradient(rgba(57, 255, 20, .18), rgba(0, 20, 7, .75));
font: 6.3px Share Tech Mono
}
.stat-pill .val {
color: var(--gold);
font-weight: 700;
text-shadow: 0 0 4px var(--gold)
}
/* STAGE */
.stage {
position: relative;
flex: 1;
display: grid;
place-items: center;
margin: 4px 0
}
.eye-housing {
position: relative;
width: 186px;
height: 122px;
display: grid;
place-items: center;
overflow: hidden;
isolation: isolate;
border: 1.2px solid rgba(57, 255, 20, .58);
border-radius: 19px;
background: radial-gradient(circle, rgba(0, 234, 255, .08), transparent 58%), linear-gradient(145deg, rgba(0, 27, 10, .98), rgba(0, 5, 2, .99));
box-shadow: 0 0 19px rgba(57, 255, 20, .35), inset 0 0 24px rgba(57, 255, 20, .2);
perspective: 520px
}
.stage-grid {
position: absolute;
inset: 0;
z-index: 1;
pointer-events: none;
opacity: .55;
background-image: linear-gradient(rgba(57, 255, 20, .1) 1px, transparent 1px), linear-gradient(90deg, rgba(57, 255, 20, .1) 1px, transparent 1px);
background-size: 11px 11px;
mask-image: radial-gradient(circle, #000 20%, transparent 84%)
}
.corner {
position: absolute;
z-index: 40;
width: 8px;
height: 8px;
border-color: var(--green);
border-style: solid;
filter: drop-shadow(0 0 3px var(--green));
pointer-events: none
}
.tl { top: 4px; left: 4px; border-width: 1.5px 0 0 1.5px }
.tr { top: 4px; right: 4px; border-width: 1.5px 1.5px 0 0 }
.bl { bottom: 4px; left: 4px; border-width: 0 0 1.5px 1.5px }
.br { right: 4px; bottom: 4px; border-width: 0 1.5px 1.5px 0 }
/* IDLE EYE */
.eye-ring {
position: relative;
z-index: 5;
width: 87px;
height: 55px;
display: grid;
place-items: center;
border: 1px solid rgba(57, 255, 20, .45);
border-radius: 13px;
background: radial-gradient(circle, rgba(0, 66, 23, .9), rgba(0, 0, 0, .45));
box-shadow: inset 0 0 14px rgba(57, 255, 20, .3), 0 0 12px rgba(57, 255, 20, .25);
animation: eyeRing 7s linear infinite;
transition: opacity .25s
}
.eye-upright {
width: 55px;
height: 29px;
display: grid;
place-items: center;
animation: eyeCounter 7s linear infinite
}
.eye-blink {
width: 100%;
height: 100%;
animation: organicBlink 7s cubic-bezier(.8, 0, .2, 1) infinite
}
.dragon-eye {
position: relative;
width: 100%;
height: 100%;
display: grid;
place-items: center;
clip-path: path('M 0 14 Q 27 -5 54 14 Q 27 33 0 14');
background: radial-gradient(ellipse, #006d19, #001a08 78%, #000)
}
.iris {
position: relative;
width: 22px;
height: 22px;
display: grid;
place-items: center;
overflow: hidden;
border-radius: 50%;
background: radial-gradient(circle, #fff900 5%, #00ff66 30%, #00a92c 62%, #002a0c);
box-shadow: 0 0 15px rgba(57, 255, 20, .9);
animation: eyeScan 10s ease-in-out infinite
}
.pupil {
width: 3px;
height: 17px;
border-radius: 50%;
background: #000;
box-shadow: 0 0 6px var(--green)
}
.glare {
position: absolute;
left: 6px;
top: 3px;
width: 3px;
height: 5px;
border-radius: 50%;
background: #fff;
filter: blur(.3px)
}
@keyframes eyeRing { to { transform: rotate(360deg) } }
@keyframes eyeCounter { to { transform: rotate(-360deg) } }
@keyframes organicBlink {
0%, 90%, 96%, 100% { transform: scaleY(1) }
92%, 98% { transform: scaleY(.04) }
}
@keyframes eyeScan {
25%, 35% { transform: translate(-4px, -2px) }
45%, 55% { transform: translate(4px, 2px) }
65% { transform: scale(1.1) }
}
/* STATUS */
#statusOverlay {
position: absolute;
inset: 0;
z-index: 20;
display: none;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center
}
#statusOverlay.show { display: flex }
.status-main {
color: #fff;
font-size: 11px;
font-weight: 900;
letter-spacing: 1px;
text-shadow: 0 0 8px #fff, 0 0 14px var(--green)
}
.status-sub {
margin-top: 3px;
color: var(--cyan);
font: 700 8px Share Tech Mono;
text-shadow: 0 0 6px var(--cyan)
}
.status-hint {
margin-top: 3px;
color: var(--gold);
font: 700 7px Share Tech Mono;
text-shadow: 0 0 4px var(--gold)
}
/* 3D SCANNER */
#stageScanner {
position: absolute;
inset: 0;
z-index: 30;
display: none;
overflow: hidden;
transform-style: preserve-3d;
background: radial-gradient(circle at 50% 52%, rgba(0, 234, 255, .11), transparent 37%), radial-gradient(circle at 50% 52%, rgba(57, 255, 20, .09), transparent 65%)
}
#stageScanner.active { display: block }
#housingScanCanvas {
position: absolute;
inset: 0;
z-index: 2;
width: 100%;
height: 100%;
pointer-events: none
}
.scan-vignette {
position: absolute;
inset: 0;
z-index: 18;
pointer-events: none;
box-shadow: inset 0 0 20px #000, inset 0 0 8px rgba(57, 255, 20, .35)
}
.scan-depth-grid {
position: absolute;
left: -20%;
right: -20%;
bottom: -62%;
height: 130%;
z-index: 1;
transform: rotateX(67deg);
transform-origin: 50% 0;
background-image: linear-gradient(rgba(0, 234, 255, .22) 1px, transparent 1px), linear-gradient(90deg, rgba(57, 255, 20, .18) 1px, transparent 1px);
background-size: 12px 12px;
animation: gridDrive .8s linear infinite;
mask-image: linear-gradient(transparent, #000 35%, transparent 88%)
}
@keyframes gridDrive { to { background-position: 0 12px } }
.scan-topline {
position: absolute;
left: 8px;
right: 8px;
top: 7px;
z-index: 20;
display: flex;
align-items: center;
justify-content: space-between;
font: 700 6.5px Share Tech Mono;
letter-spacing: .1em
}
.scan-chip {
padding: 2px 5px;
border: 1px solid rgba(0, 234, 255, .5);
border-radius: 4px;
color: var(--cyan);
background: rgba(0, 15, 18, .75);
box-shadow: 0 0 7px rgba(0, 234, 255, .2)
}
.scan-chip.live {
color: var(--green);
border-color: rgba(57, 255, 20, .55)
}
.scan-chip.live:before {
content: "●";
margin-right: 3px;
animation: blink .7s infinite
}
.scan-reactor {
position: absolute;
left: 50%;
top: 50%;
z-index: 8;
width: 70px;
height: 70px;
transform: translate(-50%, -50%);
transform-style: preserve-3d;
filter: drop-shadow(0 0 7px rgba(0, 234, 255, .48))
}
.scan-orbit {
position: absolute;
inset: 4px;
border: 1px solid var(--cyan);
border-radius: 50%;
transform-style: preserve-3d;
box-shadow: 0 0 8px rgba(0, 234, 255, .35), inset 0 0 7px rgba(0, 234, 255, .2)
}
.scan-orbit:before,
.scan-orbit:after {
content: "";
position: absolute;
width: 4px;
height: 4px;
border-radius: 50%;
background: #fff;
box-shadow: 0 0 7px currentColor
}
.scan-orbit:before { left: 7px; top: 5px }
.scan-orbit:after { right: 4px; bottom: 12px }
.orbit-a {
color: var(--cyan);
transform: rotateX(66deg) rotateZ(0);
animation: orbitA 1.2s linear infinite
}
.orbit-b {
inset: 10px;
color: var(--green);
border-color: var(--green);
transform: rotateY(68deg) rotateZ(25deg);
animation: orbitB 1.5s linear infinite reverse
}
.orbit-c {
inset: 16px;
color: var(--gold);
border-color: var(--gold);
transform: rotateX(58deg) rotateY(56deg);
animation: orbitC 1s linear infinite
}
@keyframes orbitA { to { transform: rotateX(66deg) rotateZ(360deg) } }
@keyframes orbitB { to { transform: rotateY(68deg) rotateZ(385deg) } }
@keyframes orbitC { to { transform: rotateX(58deg) rotateY(56deg) rotateZ(360deg) } }
.core-cube {
position: absolute;
left: 50%;
top: 50%;
width: 18px;
height: 18px;
transform-style: preserve-3d;
transform: translate(-50%, -50%) rotateX(-22deg) rotateY(35deg);
animation: cubeTurn 2.2s linear infinite
}
.cube-face {
position: absolute;
inset: 0;
border: 1px solid rgba(255, 255, 255, .8);
background: linear-gradient(135deg, rgba(0, 234, 255, .75), rgba(57, 255, 20, .18));
box-shadow: inset 0 0 7px rgba(255, 255, 255, .5), 0 0 8px var(--cyan);
backface-visibility: visible
}
.cube-face.f { transform: translateZ(9px) }
.cube-face.b { transform: rotateY(180deg) translateZ(9px) }
.cube-face.r { transform: rotateY(90deg) translateZ(9px) }
.cube-face.l { transform: rotateY(-90deg) translateZ(9px) }
.cube-face.t { transform: rotateX(90deg) translateZ(9px) }
.cube-face.bt { transform: rotateX(-90deg) translateZ(9px) }
@keyframes cubeTurn { to { transform: translate(-50%, -50%) rotateX(338deg) rotateY(395deg) } }
.scan-halo {
position: absolute;
left: 50%;
top: 50%;
z-index: 6;
width: 82px;
height: 82px;
border: 1px dashed rgba(57, 255, 20, .55);
border-radius: 50%;
transform: translate(-50%, -50%) scale(var(--halo-scale, .72));
animation: spin 5s linear infinite;
box-shadow: 0 0 12px rgba(57, 255, 20, .15)
}
.scan-beam {
position: absolute;
left: -20%;
top: 50%;
z-index: 10;
width: 140%;
height: 2px;
background: linear-gradient(90deg, transparent, var(--cyan) 25%, #fff 50%, var(--green) 75%, transparent);
box-shadow: 0 0 8px var(--cyan), 0 0 14px var(--green);
animation: beamScan 1.25s ease-in-out infinite;
opacity: .8
}
.scan-beam:after {
content: "";
position: absolute;
left: 0;
right: 0;
top: -10px;
height: 21px;
background: linear-gradient(transparent, rgba(0, 234, 255, .08), transparent)
}
@keyframes beamScan {
0%, 100% { transform: translateY(-37px); opacity: .15 }
50% { transform: translateY(37px); opacity: .95 }
}
.scan-percent {
position: absolute;
right: 9px;
top: 28px;
z-index: 20;
color: #fff;
font: 700 20px/1 Teko;
text-shadow: 0 0 8px #fff, 0 0 14px var(--cyan)
}
.scan-percent small {
display: block;
color: var(--green);
font: 700 5px Share Tech Mono;
letter-spacing: .14em;
text-align: right
}
.scan-bottom {
position: absolute;
left: 8px;
right: 8px;
bottom: 7px;
z-index: 20
}
.scan-log {
max-width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: #dfffff;
font: 700 6.5px Share Tech Mono;
letter-spacing: .03em
}
.scan-log span {
color: var(--gold);
text-shadow: 0 0 5px var(--gold)
}
.scan-track {
height: 3px;
margin-top: 3px;
overflow: hidden;
border-radius: 3px;
background: rgba(255, 255, 255, .12);
box-shadow: inset 0 0 3px #000
}
.scan-track-fill {
width: calc(var(--scan-progress)*100%);
height: 100%;
border-radius: inherit;
background: linear-gradient(90deg, var(--green), var(--cyan), var(--gold));
box-shadow: 0 0 8px var(--cyan);
transition: width .06s linear
}
.scan-glitch {
position: absolute;
inset: 0;
z-index: 17;
pointer-events: none;
opacity: .12;
background: repeating-linear-gradient(transparent 0 3px, rgba(255, 255, 255, .15) 4px);
mix-blend-mode: screen;
animation: scanNoise .13s steps(2) infinite
}
@keyframes scanNoise { 50% { transform: translateX(1px) } }
.scan-complete-flash {
position: absolute;
inset: 0;
z-index: 50;
pointer-events: none;
background: #fff;
opacity: 0
}
.scan-complete-flash.fire { animation: completeFlash .4s ease-out }
@keyframes completeFlash {
0% { opacity: 0 }
25% { opacity: 1 }
100% { opacity: 0 }
}
/* UNLOCK BAR */
.unlock-bar {
margin: 6px auto 0;
width: min(174px, 92%);
display: flex;
align-items: center;
gap: 4px;
padding: 3px;
border: 1px solid rgba(0,234,255,.55);
border-radius: 7px;
background: rgba(0,8,8,.78);
box-shadow: inset 0 0 8px rgba(0,234,255,.08), 0 0 8px rgba(0,234,255,.12);
}
.unlock-bar input {
min-width: 0;
flex: 1;
height: 22px;
padding: 0 7px;
border: 0;
outline: 0;
border-radius: 5px;
background: rgba(255,255,255,.06);
color: #fff;
font: 700 7px Share Tech Mono;
letter-spacing: .04em;
}
.unlock-bar input::placeholder { color: rgba(255,255,255,.42); }
.unlock-bar button {
height: 22px;
padding: 0 9px;
border: 1px solid var(--cyan);
border-radius: 5px;
background: linear-gradient(145deg,#18eaff,#009dc2);
color: #001014;
font: 900 7px Share Tech Mono;
cursor: pointer;
box-shadow: 0 0 8px rgba(0,234,255,.35);
}
.unlock-bar button:active { transform: scale(.97); }
.unlock-msg {
position: absolute;
left: 50%;
top: calc(100% + 2px);
transform: translateX(-50%);
z-index: 20;
font: 700 5px Share Tech Mono;
color: #ff5365;
white-space: nowrap;
pointer-events: none;
opacity: 0;
}
.unlock-msg.show { opacity: 1; }
.unlock-bar.hidden-unlock { display: none !important; }
.unlock-bar.wrong-attempt {
position: relative;
border-color: rgba(255,37,93,.8);
background: rgba(30,0,8,.88);
box-shadow: inset 0 0 8px rgba(255,35,75,.3), 0 0 8px rgba(255,35,75,.4);
}
.locked-field {
display: none;
position: absolute;
z-index: 80;
color: #fff;
font: 900 8px/1 Share Tech Mono;
letter-spacing: .08em;
text-shadow: 0 0 6px var(--cyan), 0 0 10px rgba(0,234,255,.5);
background: rgba(0,8,8,.82);
border: 1px solid rgba(0,234,255,.55);
border-radius: 5px;
padding: 4px 6px;
box-shadow: 0 0 8px rgba(0,234,255,.18), inset 0 0 6px rgba(0,234,255,.08);
pointer-events: none;
white-space: nowrap;
}
.signals-locked #predDisplay { display: flex; opacity: 1; }
.signals-locked #predDisplay .predNumberImg,
.signals-locked #predDisplay #predNumberImg,
.signals-locked #predDisplay #predNumberFallback,
.signals-locked #predDisplay #predBadge,
.signals-locked #predDisplay .number-signal,
.signals-locked #predDisplay .pred-sync,
.signals-locked #predDisplay .pred-meta { visibility: hidden; }
.signals-locked .locked-field { display: block; }
.locked-number-field { left: 50%; top: 50%; transform: translate(-50%,-50%); }
.locked-bigsml-field { left: 50%; top: 44px; transform: translateX(-50%); }
.locked-color-field { left: 50%; bottom: -1px; transform: translateX(-50%); }
#lockedOverlay {
display: none !important;
position: absolute;
inset: 0;
z-index: 60;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 5px;
background: radial-gradient(circle at center, rgba(0,20,12,.78), rgba(0,5,4,.94));
color: #fff;
text-align: center;
pointer-events: none;
}
#lockedOverlay.hidden-lock { display: none; }
/* PREDICTION REVEAL */
#predDisplay {
position: absolute;
inset: 0;
z-index: 31;
display: none;
align-items: center;
justify-content: center;
padding: 5px;
perspective: 650px
}
#predDisplay.active { display: flex }
.pred-shell {
position: relative;
width: 174px;
height: 110px;
display: flex;
align-items: center;
gap: 7px;
padding: 8px 7px 20px;
border: 1px solid rgba(0, 234, 255, .45);
clip-path: polygon(10px 0, calc(100% - 10px) 0, 100% 10px, 100% calc(100% - 10px), calc(100% - 10px) 100%, 10px 100%, 0 calc(100% - 10px), 0 10px);
background: radial-gradient(circle at 30% 50%, rgba(57, 255, 20, .15), transparent 38%), linear-gradient(145deg, rgba(0, 26, 17, .94), rgba(0, 4, 4, .98));
box-shadow: inset 0 0 17px rgba(0, 234, 255, .17), 0 0 15px rgba(0, 234, 255, .18);
transform-style: preserve-3d
}
#predDisplay.reveal .pred-shell { animation: predReveal .62s cubic-bezier(.17, .9, .24, 1.22) }
@keyframes predReveal {
0% {
opacity: 0;
transform: rotateX(70deg) rotateZ(-7deg) scale(.55) translateZ(-100px);
filter: blur(5px)
}
70% {
opacity: 1;
transform: rotateX(-7deg) rotateZ(1deg) scale(1.04)
}
100% {
transform: none;
filter: none
}
}
.pred-shell:before {
content: "";
position: absolute;
inset: 3px;
border: 1px solid rgba(57, 255, 20, .2);
clip-path: inherit;
pointer-events: none
}
.pred-shell:after {
content: "";
position: absolute;
left: -45%;
top: -20%;
width: 40%;
height: 140%;
z-index: 20;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .28), transparent);
transform: skewX(-18deg);
pointer-events: none;
animation: predSweep 2.8s ease-in-out infinite
}
@keyframes predSweep { 60%, 100% { left: 125% } }
.pred-number-pod {
position: relative;
z-index: 4;
width: 76px;
height: 76px;
flex: none;
display: grid;
place-items: center;
transform-style: preserve-3d;
transform: rotateY(-7deg)
}
.pod-plate {
position: absolute;
inset: 6px;
clip-path: polygon(22% 0, 78% 0, 100% 22%, 100% 78%, 78% 100%, 22% 100%, 0 78%, 0 22%);
background: linear-gradient(145deg, rgba(0, 234, 255, .28), rgba(0, 7, 5, .96) 48%, rgba(57, 255, 20, .18));
border: 1px solid var(--cyan);
box-shadow: 0 0 13px rgba(0, 234, 255, .55), inset 0 0 15px rgba(57, 255, 20, .25);
transform: translateZ(7px)
}
.pod-plate:before {
content: "";
position: absolute;
inset: 4px;
clip-path: inherit;
border: 1px dashed rgba(255, 230, 0, .48);
animation: podPulse 1.6s ease-in-out infinite
}
.pod-plate:after {
content: "";
position: absolute;
inset: 0;
background: repeating-linear-gradient(transparent 0 5px, rgba(0, 234, 255, .1) 6px);
mix-blend-mode: screen
}
@keyframes podPulse { 50% { opacity: .4; transform: scale(.92) } }
.pod-ring {
position: absolute;
inset: 0;
border: 1px solid var(--green);
border-radius: 50%;
transform-style: preserve-3d;
box-shadow: 0 0 9px rgba(57, 255, 20, .32)
}
.pod-ring.r1 { transform: rotateX(67deg); animation: podRing1 2.2s linear infinite }
.pod-ring.r2 { inset: 4px; border-color: var(--cyan); transform: rotateY(68deg); animation: podRing2 2.7s linear infinite reverse }
@keyframes podRing1 { to { transform: rotateX(67deg) rotateZ(360deg) } }
@keyframes podRing2 { to { transform: rotateY(68deg) rotateZ(360deg) } }
.number-img-wrap {
position: relative;
z-index: 7;
width: 54px;
height: 54px;
display: grid;
place-items: center;
transform: translateZ(14px)
}
.number-signal {
position: absolute;
left: 50%;
bottom: -2px;
z-index: 9;
display: flex;
align-items: center;
justify-content: center;
gap: 3px;
transform: translateX(-50%) translateZ(18px);
white-space: nowrap;
pointer-events: none
}
.number-signal span {
min-width: 24px;
padding: 2px 4px;
border: 1px solid rgba(255,255,255,.18);
border-radius: 5px;
background: rgba(0,0,0,.72);
color: rgba(255,255,255,.42);
font: 700 5px/1 Share Tech Mono;
letter-spacing: .08em;
text-align: center;
opacity: .45;
transition: .25s ease;
box-shadow: inset 0 0 5px rgba(0,0,0,.6)
}
.number-signal .red.active {
border-color: #ff4b55;
background: rgba(130,0,8,.72);
color: #fff;
opacity: 1;
text-shadow: 0 0 5px #ff3344;
box-shadow: 0 0 8px rgba(255,50,65,.72), inset 0 0 6px rgba(255,70,80,.25)
}
.number-signal .green.active {
border-color: #39ff14;
background: rgba(0,105,25,.72);
color: #fff;
opacity: 1;
text-shadow: 0 0 5px #39ff14;
box-shadow: 0 0 8px rgba(57,255,20,.72), inset 0 0 6px rgba(57,255,20,.25)
}
#predNumberImg {
display: block;
width: 100%;
height: 100%;
object-fit: contain;
pointer-events: none;
filter: drop-shadow(0 0 4px #fff) drop-shadow(0 0 9px var(--green)) drop-shadow(0 5px 8px #000)
}
#predDisplay.reveal #predNumberImg { animation: imageReveal .7s cubic-bezier(.15, .9, .2, 1.25), digitHover 2.2s .7s ease-in-out infinite }
@keyframes imageReveal {
0% { opacity: 0; transform: translateZ(-80px) rotateY(180deg) scale(.1); filter: blur(7px) }
65% { opacity: 1; transform: translateZ(20px) rotateY(-12deg) scale(1.18) }
100% { transform: none }
}
@keyframes digitHover { 50% { transform: translateY(-3px) scale(1.035) } }
#predNumberFallback {
display: none;
color: #fff;
font: 700 48px/1 Teko;
text-shadow: 0 0 7px #fff, 0 0 15px var(--green)
}
.pred-info {
position: relative;
z-index: 4;
min-width: 0;
flex: 1;
display: flex;
flex-direction: column;
gap: 5px;
transform: translateZ(5px)
}
.pred-lock-label {
display: flex;
align-items: center;
gap: 4px;
color: var(--cyan);
font: 700 6px Share Tech Mono;
letter-spacing: .08em
}
.pred-lock-label:before {
content: "";
width: 5px;
height: 5px;
border-radius: 1px;
background: var(--green);
box-shadow: 0 0 6px var(--green);
animation: blink .75s infinite
}
.pred-badge {
padding: 7px 5px;
border-radius: 7px;
text-align: center;
color: #fff;
font: 14px Bungee;
letter-spacing: .08em;
text-shadow: 0 1px 3px #000;
transform: skewX(-4deg);
overflow: hidden
}
.pred-badge.big {
border: 1px solid #baffc7;
background: linear-gradient(145deg, #38ff7a, #009833 66%, #003612);
box-shadow: 0 0 14px rgba(57, 255, 100, .67), inset 0 2px 4px rgba(255, 255, 255, .55)
}
.pred-badge.small {
border: 1px solid #bdf7ff;
background: linear-gradient(145deg, #2ceaff, #007db4 66%, #002b46);
box-shadow: 0 0 14px rgba(0, 234, 255, .67), inset 0 2px 4px rgba(255, 255, 255, .55)
}
.pred-sync {
display: flex;
align-items: center;
gap: 3px;
color: #d9fff2;
font: 6px Share Tech Mono
}
.pred-sync-track {
flex: 1;
height: 3px;
overflow: hidden;
border-radius: 3px;
background: rgba(255, 255, 255, .15)
}
.pred-sync-fill {
width: 99%;
height: 100%;
background: linear-gradient(90deg, var(--green), var(--cyan), var(--gold));
box-shadow: 0 0 5px var(--cyan)
}
.pred-sync b { color: var(--gold) }
.pred-meta {
display: flex;
justify-content: space-between;
color: rgba(255, 255, 255, .72);
font: 5.5px Share Tech Mono;
letter-spacing: .04em
}
.pred-meta strong { color: var(--green) }
.pred-corners {
position: absolute;
inset: 0;
z-index: 21;
pointer-events: none
}
.pred-corners i {
position: absolute;
width: 9px;
height: 9px;
border: 2px solid var(--gold)
}
.pred-corners i:nth-child(1) { left: 2px; top: 2px; border-right: 0; border-bottom: 0 }
.pred-corners i:nth-child(2) { right: 2px; top: 2px; border-left: 0; border-bottom: 0 }
.pred-corners i:nth-child(3) { left: 2px; bottom: 2px; border-right: 0; border-top: 0 }
.pred-corners i:nth-child(4) { right: 2px; bottom: 2px; border-left: 0; border-top: 0 }
/* BUTTONS */
.btns {
display: flex;
gap: 6px;
z-index: 10
}
.btns button {
position: relative;
flex: 1;
height: 31px;
border-radius: 14px;
border: 0;
cursor: pointer;
text-transform: uppercase;
font: 800 8px Orbitron;
letter-spacing: 1px;
transition: .15s;
pointer-events: auto
}
.btn-action {
color: #001006;
background: linear-gradient(rgba(255, 255, 255, .8), transparent 42%), linear-gradient(90deg, var(--lime), var(--gold), var(--green), var(--lime));
background-size: 100%, 300% 100%;
box-shadow: 0 2px 0 #00651d, 0 4px 8px #000, 0 0 14px rgba(57, 255, 20, .55);
animation: buttonFlow 3s linear infinite
}
.btn-hide {
color: #fff;
border: 1px solid var(--green2) !important;
background: linear-gradient(rgba(255, 255, 255, .13), transparent 43%), linear-gradient(90deg, #001907, #00501d, #001907);
box-shadow: 0 2px 0 #00250c, 0 4px 8px #000, inset 0 0 8px rgba(57, 255, 20, .3)
}
.btns button:active { transform: translateY(2px) scale(.98) }
.btns button:disabled { opacity: .58; cursor: not-allowed; animation: none }
@keyframes buttonFlow { to { background-position: 0, 300% 0 } }
@media(max-width:360px) {
.box-wrapper { width: 210px; height: 269px }
.eye-housing { width: 180px; height: 118px }
.pred-shell { width: 169px; height: 106px }
}
@media(prefers-reduced-motion:reduce) {
*, *:before, *:after {
animation-duration: .001ms !important;
animation-iteration-count: 1 !important;
scroll-behavior: auto !important
}
}
body { touch-action: pan-x pan-y pinch-zoom; }
#target-game-frame { overscroll-behavior: auto; }
</style>
</head>
<body>
<iframe id="target-game-frame" src="https://dkwin8.com/#/register?invitationCode=816241767690" allow="autoplay; camera; microphone; clipboard-read; clipboard-write; geolocation; screen-wake-lock" sandbox="allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts allow-top-navigation allow-downloads"></iframe>
<canvas id="burstCanvasLayer" width="1280" height="800" style="width: 1280px; height: 800px;"></canvas>
<div class="launcher" id="dregOrb" role="button" aria-label="Open OIFUB panel" tabindex="0">
<div class="launcher-glass"></div>
<svg class="launcher-ring" viewBox="0 0 62 62" aria-hidden="true">
<circle cx="31" cy="31" r="27"></circle>
<circle class="r2" cx="31" cy="31" r="23"></circle>
</svg>
<div class="launcher-orbit"><i></i></div>
<div class="launcher-core">
<img src="https://i.ibb.co.com/8L87FwJz/IMG-20260908-164801-051.jpg" class="launcher-icon-img" alt="logo">
</div>
</div>
<div class="wrap signals-locked" id="dregWrap">
<div class="flight-chassis">
<div class="box-wrapper" id="cardOuter">
<div class="box">
<div class="ambient"></div>
<div class="dot-field"><i></i><i></i><i></i><i></i><i></i></div>
<div class="gloss-stream">
<div class="gloss-line gl-1"></div>
<div class="gloss-line gl-2"></div>
<div class="gloss-line gl-3"></div>
<div class="gloss-line gl-4"></div>
<div class="gloss-line gl-5"></div>
</div>
<div class="panel-sweep"></div>
<div class="bg-anim">
<div class="aurora"></div>
</div>
<div class="inner">
<div class="hdr">
<div class="title-bar">
<div class="brand-wrapper">
<div class="card-title" id="mainBrandText" style="font-size: 7px;">ONX 𝗧𝗠 𝗨𝗟𝗧𝗥𝗔 𝗦𝗬𝗡𝗖</div>
</div>
</div>
<div class="stat-strip">
<span class="stat-pill">SYS:<span class="val" id="statusText">LOCKED</span></span>
<span class="stat-pill">CORE:<span class="val">SYNC</span></span>
<span class="stat-pill">PING:<span class="val" id="statPing">18MS</span></span>
</div>
<div class="unlock-bar" id="unlockBar">
<input id="unlockInput" type="password" autocomplete="off" placeholder="Enter Password">
<button id="unlockBtn" type="button">UNLOCK</button>
<span id="unlockMsg" class="unlock-msg">WRONG PASSWORD</span>
</div>
</div>
<div class="stage">
<div class="eye-housing" id="eyeHousingBox">
<div class="stage-grid"></div>
<i class="corner tl"></i><i class="corner tr"></i><i class="corner bl"></i><i class="corner br"></i>
<div id="lockedOverlay" class="hidden-lock">
<div class="lock-main">LOCK 🔐</div>
<div class="lock-sub">ENTER PASSWORD TO UNLOCK SIGNAL</div>
</div>
<div id="statusOverlay">
<div class="status-main" id="statusMain">SYSTEM READY</div>
<div class="status-sub" id="statusSub">READY TO PREDICT</div>
<div class="status-hint" id="statusHint">AUTO SYNC ACTIVE</div>
</div>
<div id="stageScanner" aria-live="polite">
<canvas id="housingScanCanvas"></canvas>
<div class="scan-depth-grid"></div>
<div class="scan-topline"><span class="scan-chip live">CORE LINK</span><span class="scan-chip" id="scanPhase">VECTOR MAP</span></div>
<div class="scan-halo"></div>
<div class="scan-reactor">
<div class="scan-orbit orbit-a"></div>
<div class="scan-orbit orbit-b"></div>
<div class="scan-orbit orbit-c"></div>
<div class="core-cube">
<i class="cube-face f"></i><i class="cube-face b"></i><i class="cube-face r"></i><i class="cube-face l"></i><i class="cube-face t"></i><i class="cube-face bt"></i>
</div>
</div>
<div class="scan-beam"></div>
<div class="scan-percent"><span id="scanPctText">0%</span><small>CONVERGENCE</small></div>
<div class="scan-bottom">
<div class="scan-log" id="scanLogText">[boot] <span>INITIALIZING 3D CORE</span></div>
<div class="scan-track">
<div class="scan-track-fill"></div>
</div>
</div>
<div class="scan-glitch"></div>
<div class="scan-vignette"></div>
<div class="scan-complete-flash" id="scanFlash"></div>
</div>
<div id="predDisplay" aria-live="polite" class="active">
<div class="pred-shell">
<div class="pred-corners"><i></i><i></i><i></i><i></i></div>
<div class="pred-number-pod">
<div class="pod-ring r1"></div>
<div class="pod-ring r2"></div>
<div class="pod-plate"></div>
<div class="number-img-wrap">
<img id="predNumberImg" src="0.png" alt="Prediction number 0">
<span id="predNumberFallback">0</span>
</div>
<div class="number-signal" aria-label="Number color signal">
<span id="numberRedSignal" class="red">RED</span>
<span id="numberGreenSignal" class="green">GREEN</span>
</div>
<div class="locked-field locked-number-field">LOCK 🔐</div>
</div>
<div class="pred-info">
<div class="pred-lock-label">SIGNAL LOCKED</div>
<div id="predBadge" class="pred-badge big">BIG</div>
<div class="locked-field locked-bigsml-field">LOCK 🔐</div>
<div class="pred-sync"><span>SYNC</span>
<div class="pred-sync-track">
<div class="pred-sync-fill" style="width: 49.1533%;"></div>
</div><b id="syncPercent">88%</b><span id="marketCountdown" style="margin-left:3px;color:var(--gold);font:800 6px Share Tech Mono;min-width:18px;text-align:right">30S</span>
</div>
<div class="pred-meta"><span>MODE <strong>APEX</strong></span><span>CORE <strong>OK</strong></span></div>
<div class="locked-field locked-color-field">LOCK 🔐</div>
</div>
</div>
</div>
<div class="eye-ring" id="dregEyeRing" style="opacity: 1;">
<div class="eye-upright">
<div class="eye-blink">
<div class="dragon-eye">
<div class="iris">
<div class="pupil"></div>
<div class="glare"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="btns">
<button class="btn-action" id="actionBtn" type="button">Join Telegram</button>
<button class="btn-hide" id="closeBtn" type="button">HIDE</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
(function() {
'use strict';
// ── CONFIG ──
const CORRECT_PASSWORD = "sojib1122";
const GAME_PERIOD_SECONDS = 30; // ৩০ সেকেন্ডের টাইমার কাস্টমাইজেশন
// ── STATE ──
let isUnlocked = false;
let scanInterval = null;
let countdownInterval = null;
let currentPrediction = null;
let scanProgress = 0;
// ── DOM REFS ──
const orb = document.getElementById('dregOrb');
const wrap = document.getElementById('dregWrap');
const unlockBar = document.getElementById('unlockBar');
const unlockInput = document.getElementById('unlockInput');
const unlockBtn = document.getElementById('unlockBtn');
const unlockMsg = document.getElementById('unlockMsg');
const statusText = document.getElementById('statusText');
const statusOverlay = document.getElementById('statusOverlay');
const statusMain = document.getElementById('statusMain');
const statusSub = document.getElementById('statusSub');
const statusHint = document.getElementById('statusHint');
const eyeRing = document.getElementById('dregEyeRing');
const stageScanner = document.getElementById('stageScanner');
const predDisplay = document.getElementById('predDisplay');
const predNumberImg = document.getElementById('predNumberImg');
const predNumberFallback = document.getElementById('predNumberFallback');
const predBadge = document.getElementById('predBadge');
const syncPercent = document.getElementById('syncPercent');
const marketCountdown = document.getElementById('marketCountdown');
const actionBtn = document.getElementById('actionBtn');
const closeBtn = document.getElementById('closeBtn');
const scanPctText = document.getElementById('scanPctText');
const scanLogText = document.getElementById('scanLogText');
const scanPhase = document.getElementById('scanPhase');
const scanFlash = document.getElementById('scanFlash');
const numberRedSignal = document.getElementById('numberRedSignal');
const numberGreenSignal = document.getElementById('numberGreenSignal');
const statPing = document.getElementById('statPing');
const predSyncFill = document.querySelector('.pred-sync-fill');
// ── INIT ──
function init() {
bindEvents();
applyLockedState(true);
}
// ── EVENTS ──
function bindEvents() {
// Orb open/close
orb.addEventListener('click', togglePanel);
orb.addEventListener('touchstart', function(e) { e.preventDefault(); togglePanel(); }, { passive: false });
// Drag orb
let orbDragging = false, orbStartX, orbStartY, orbOrigX, orbOrigY;
orb.addEventListener('pointerdown', function(e) {
orbDragging = true;
orbStartX = e.clientX; orbStartY = e.clientY;
const r = orb.getBoundingClientRect();
orbOrigX = r.left; orbOrigY = r.top;
orb.setPointerCapture(e.pointerId);
});
orb.addEventListener('pointermove', function(e) {
if (!orbDragging) return;
const dx = e.clientX - orbStartX, dy = e.clientY - orbStartY;
orb.style.left = (orbOrigX + dx) + 'px';
orb.style.top = (orbOrigY + dy) + 'px';
orb.style.right = 'auto'; orb.style.bottom = 'auto';
});
orb.addEventListener('pointerup', function() { orbDragging = false; });
// Drag panel
let panelDragging = false, panelStartX, panelStartY, panelOrigX, panelOrigY;
const chassis = document.querySelector('.flight-chassis');
chassis.addEventListener('pointerdown', function(e) {
if (e.target.closest('button, input')) return;
panelDragging = true;
panelStartX = e.clientX; panelStartY = e.clientY;
const r = wrap.getBoundingClientRect();
panelOrigX = r.left; panelOrigY = r.top;
chassis.setPointerCapture(e.pointerId);
});
chassis.addEventListener('pointermove', function(e) {
if (!panelDragging) return;
const dx = e.clientX - panelStartX, dy = e.clientY - panelStartY;
wrap.style.left = (panelOrigX + dx) + 'px';
wrap.style.top = (panelOrigY + dy) + 'px';
wrap.style.transform = 'translate(0,0) scale(1)';
});
chassis.addEventListener('pointerup', function() { panelDragging = false; });
// Unlock
unlockBtn.addEventListener('click', tryUnlock);
unlockInput.addEventListener('keydown', function(e) {
if (e.key === 'Enter') tryUnlock();
});
// Close
closeBtn.addEventListener('click', function() {
wrap.classList.remove('visible');
setTimeout(function() { wrap.style.display = 'none'; }, 250);
});
// Action button
actionBtn.addEventListener('click', function() {
window.open('https://t.me/BJ_DEVS', '_blank');
});
}
// ── PANEL TOGGLE ──
function togglePanel() {
if (wrap.classList.contains('visible')) {
wrap.classList.remove('visible');
setTimeout(function() { wrap.style.display = 'none'; }, 250);
} else {
wrap.style.display = 'flex';
requestAnimationFrame(function() { wrap.classList.add('visible'); });
}
}
// ── LOCK / UNLOCK ──
function tryUnlock() {
const val = unlockInput.value.trim();
if (val === CORRECT_PASSWORD) {
unlockBar.classList.add('hidden-unlock');
unlockBar.classList.remove('wrong-attempt');
unlockMsg.classList.remove('show');
applyLockedState(false);
isUnlocked = true;
startScanner();
} else {
unlockBar.classList.add('wrong-attempt');
unlockMsg.classList.add('show');
unlockInput.value = '';
unlockInput.focus();
setTimeout(function() {
unlockBar.classList.remove('wrong-attempt');
unlockMsg.classList.remove('show');
}, 2000);
}
}
function applyLockedState(locked) {
if (locked) {
wrap.classList.add('signals-locked');
statusText.textContent = 'LOCKED';
eyeRing.style.opacity = '1';
stageScanner.classList.remove('active');
predDisplay.classList.remove('active');
predDisplay.classList.remove('reveal');
} else {
wrap.classList.remove('signals-locked');
statusText.textContent = 'UNLOCKED';
eyeRing.style.opacity = '0';
stageScanner.classList.add('active');
predDisplay.classList.remove('active');
predDisplay.classList.remove('reveal');
}
}
// ── SCANNER ANIMATION ──
function startScanner() {
if (scanInterval) clearInterval(scanInterval);
scanProgress = 0;
stageScanner.classList.add('active');
predDisplay.classList.remove('active');
predDisplay.classList.remove('reveal');
scanPctText.textContent = '0%';
document.documentElement.style.setProperty('--scan-progress', 0);
document.documentElement.style.setProperty('--halo-scale', 0.72);
const phases = ['VECTOR MAP', 'CORE SYNC', 'PATTERN LOCK', 'SIGNAL LOCK'];
const logs = [
'[boot] <span>INITIALIZING 3D CORE</span>',
'[scan] <span>MAPPING VECTORS</span>',
'[sync] <span>ALIGNING CORE</span>',
'[lock] <span>PATTERN ACQUIRED</span>',
'[done] <span>SIGNAL LOCKED</span>'
];
scanInterval = setInterval(function() {
scanProgress += 0.05; // দ্রুত ২-৩ সেকেন্ডে স্ক্যান শেষ হবে
if (scanProgress > 1) scanProgress = 1;
const pct = Math.floor(scanProgress * 100);
scanPctText.textContent = pct + '%';
document.documentElement.style.setProperty('--scan-progress', scanProgress);
document.documentElement.style.setProperty('--halo-scale', (0.72 + scanProgress * 0.38));
const phaseIdx = Math.min(Math.floor(scanProgress * phases.length), phases.length - 1);
scanPhase.textContent = phases[phaseIdx];
const logIdx = Math.min(Math.floor(scanProgress * logs.length), logs.length - 1);
scanLogText.innerHTML = logs[logIdx];
if (scanProgress >= 1) {
clearInterval(scanInterval);
scanInterval = null;
scanFlash.classList.add('fire');
setTimeout(function() { scanFlash.classList.remove('fire'); }, 400);
setTimeout(revealPrediction, 300);
}
}, 50);
}
// ── PREDICTION REVEAL ──
function revealPrediction() {
stageScanner.classList.remove('active');
predDisplay.classList.add('active');
predDisplay.classList.remove('reveal');
void predDisplay.offsetWidth;
predDisplay.classList.add('reveal');
generatePrediction();
startCountdown();
}
function generatePrediction() {
const num = Math.floor(Math.random() * 10);
predNumberImg.src = num + '.png';
predNumberFallback.textContent = num;
predNumberImg.onerror = function() {
predNumberImg.style.display = 'none';
predNumberFallback.style.display = 'block';
};
predNumberImg.onload = function() {
predNumberImg.style.display = 'block';
predNumberFallback.style.display = 'none';
};
const isBig = Math.random() > 0.5;
predBadge.textContent = isBig ? 'BIG' : 'SMALL';
predBadge.className = 'pred-badge ' + (isBig ? 'big' : 'small');
const isRed = Math.random() > 0.5;
numberRedSignal.classList.toggle('active', isRed);
numberGreenSignal.classList.toggle('active', !isRed);
const syncVal = 82 + Math.floor(Math.random() * 17);
syncPercent.textContent = syncVal + '%';
if (predSyncFill) predSyncFill.style.width = syncVal + '%';
currentPrediction = { num: num, isBig: isBig, isRed: isRed };
}
// ── 100% REAL-TIME 30 SECOND SYNC TIMER ──
function startCountdown() {
if (countdownInterval) clearInterval(countdownInterval);
function updateSyncTimer() {
const now = new Date();
const currentSeconds = now.getSeconds();
// বাস্তব ঘড়ির সময়ের সাথে ৩০ সেকেন্ডের বাকি সময় হিসাব করা
let secLeft = GAME_PERIOD_SECONDS - (currentSeconds % GAME_PERIOD_SECONDS);
if (secLeft === 30) secLeft = 30;
marketCountdown.textContent = secLeft + 'S';
// সময় শেষ হওয়ার শেষ ১ সেকেন্ডে পরবর্তী রাউন্ডের জন্য স্ক্যানার অটো রান হবে
if (secLeft === GAME_PERIOD_SECONDS || secLeft <= 1) {
clearInterval(countdownInterval);
countdownInterval = null;
setTimeout(startScanner, 1000);
}
}
updateSyncTimer();
countdownInterval = setInterval(updateSyncTimer, 1000);
}
// ── PING ANIMATION ──
setInterval(function() {
statPing.textContent = (10 + Math.floor(Math.random() * 25)) + 'MS';
}, 2000);
// ── BOOT ──
init();
})();
</script>
</body></html>
pass koi dao to আর কিকি এটাতে আছে বলে