<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๐๐๐๐๐๐๐๐๐ ๐๐๐๐</title>
<style>
/* ========== LOADING SCREEN STYLES ========== */
#loader-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #000000;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 10000;
transition: opacity 0.5s ease, visibility 0.5s ease;
}
#loader-container.hidden {
opacity: 0;
visibility: hidden;
}
.loader-logo {
width: 180px;
height: 180px;
margin-bottom: 40px;
position: relative;
animation: logoEntry 1s ease-out;
}
@keyframes logoEntry {
0% {
transform: scale(0) rotate(-180deg);
opacity: 0;
}
60% {
transform: scale(1.1) rotate(10deg);
}
100% {
transform: scale(1) rotate(0deg);
opacity: 1;
}
}
.loader-logo-inner {
width: 100%;
height: 100%;
background: linear-gradient(135deg, #0a0a0a, #1a1a1a);
border: 2px solid rgba(0, 255, 100, 0.6);
border-radius: 25px;
padding: 12px;
position: relative;
box-shadow:
0 0 40px rgba(0, 255, 100, 0.4),
inset 0 0 30px rgba(0, 255, 100, 0.1);
animation: logoPulse 2s ease-in-out infinite;
}
@keyframes logoPulse {
0%,
100% {
box-shadow:
0 0 40px rgba(0, 255, 100, 0.4),
inset 0 0 30px rgba(0, 255, 100, 0.1);
}
50% {
box-shadow:
0 0 60px rgba(0, 255, 100, 0.6),
inset 0 0 40px rgba(0, 255, 100, 0.2);
}
}
.loader-logo-inner::before {
content: "";
position: absolute;
top: -6px;
left: -6px;
right: -6px;
bottom: -6px;
border: 2px solid rgba(0, 255, 100, 0.3);
border-radius: 25px;
animation: rotateBorderLoader 3s linear infinite;
}
@keyframes rotateBorderLoader {
0% {
transform: rotate(0deg);
opacity: 0.3;
}
50% {
opacity: 0.8;
}
100% {
transform: rotate(360deg);
opacity: 0.3;
}
}
.loader-logo-img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 18px;
filter: brightness(1.2);
}
.loader-title {
font-family: 'JetBrains Mono', monospace;
font-size: 2.5em;
font-weight: 700;
color: #00ff64;
text-shadow:
0 0 20px rgba(0, 255, 100, 0.8),
0 0 40px rgba(0, 255, 100, 0.5);
letter-spacing: 8px;
margin-bottom: 30px;
animation: titleFlicker 1.5s ease-in-out;
}
@keyframes titleFlicker {
0%,
100% {
opacity: 1;
}
10%,
30%,
50%,
70% {
opacity: 0.8;
}
20%,
40%,
60% {
opacity: 1;
}
}
.loader-subtitle {
font-family: 'JetBrains Mono', monospace;
font-size: 0.9em;
color: rgba(0, 255, 100, 0.6);
letter-spacing: 3px;
margin-bottom: 50px;
animation: fadeIn 1s ease-in 0.5s both;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.progress-container {
width: 400px;
max-width: 80%;
height: 6px;
background: rgba(0, 255, 100, 0.1);
border-radius: 10px;
overflow: hidden;
position: relative;
box-shadow:
0 0 20px rgba(0, 255, 100, 0.2),
inset 0 0 10px rgba(0, 0, 0, 0.5);
animation: fadeIn 1s ease-in 0.8s both;
}
.progress-bar {
height: 100%;
background: linear-gradient(90deg,
rgba(0, 255, 100, 0.6),
rgba(0, 255, 100, 1),
rgba(0, 255, 100, 0.6));
background-size: 200% 100%;
border-radius: 10px;
width: 0%;
transition: width 0.3s ease;
box-shadow: 0 0 20px rgba(0, 255, 100, 0.8);
animation: progressGlow 1.5s ease-in-out infinite;
}
@keyframes progressGlow {
0%,
100% {
background-position: 0% 0%;
}
50% {
background-position: 100% 0%;
}
}
.loader-status {
font-family: 'JetBrains Mono', monospace;
font-size: 0.85em;
color: rgba(0, 255, 100, 0.7);
margin-top: 20px;
letter-spacing: 2px;
animation: fadeIn 1s ease-in 1s both;
}
.loader-dots::after {
content: '';
animation: dots 1.5s steps(4, end) infinite;
}
@keyframes dots {
0%,
20% {
content: '.';
}
40% {
content: '..';
}
60%,
100% {
content: '...';
}
}
.loader-grid {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
linear-gradient(rgba(0, 255, 100, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 255, 100, 0.03) 1px, transparent 1px);
background-size: 40px 40px;
animation: loaderGridScroll 15s linear infinite;
pointer-events: none;
}
@keyframes loaderGridScroll {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(40px, 40px);
}
}
.loader-particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
pointer-events: none;
}
.particle {
position: absolute;
width: 2px;
height: 2px;
background: rgba(0, 255, 100, 0.6);
border-radius: 50%;
animation: particleFloat 3s ease-in-out infinite;
box-shadow: 0 0 10px rgba(0, 255, 100, 0.8);
}
@keyframes particleFloat {
0% {
transform: translateY(100vh) translateX(0);
opacity: 0;
}
10% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
transform: translateY(-100px) translateX(100px);
opacity: 0;
}
}
/* ========== ORIGINAL STYLES ========== */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: #000000;
color: #ffffff;
font-family: 'JetBrains Mono', monospace;
line-height: 1.6;
min-height: 100vh;
overflow-x: hidden;
position: relative;
}
.grid-bg {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
linear-gradient(rgba(0, 255, 100, 0.05) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 255, 100, 0.05) 1px, transparent 1px);
background-size: 50px 50px;
animation: gridScroll 20s linear infinite;
pointer-events: none;
z-index: 0;
}
@keyframes gridScroll {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(50px, 50px);
}
}
.cyber-lines {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 0;
}
.line {
position: absolute;
background: linear-gradient(90deg, transparent, rgba(0, 255, 100, 0.3), transparent);
height: 1px;
width: 100%;
animation: lineMove 3s ease-in-out infinite;
}
.line:nth-child(1) {
top: 20%;
animation-delay: 0s;
}
.line:nth-child(2) {
top: 50%;
animation-delay: 1s;
}
.line:nth-child(3) {
top: 80%;
animation-delay: 2s;
}
@keyframes lineMove {
0%,
100% {
opacity: 0;
transform: translateX(-100%);
}
50% {
opacity: 1;
transform: translateX(100%);
}
}
.container {
position: relative;
z-index: 1;
}
.header-bg {
padding: 80px 20px 60px;
position: relative;
overflow: hidden;
}
.header-bg::before {
content: "";
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 150%;
height: 300px;
background: radial-gradient(ellipse at center, rgba(0, 255, 100, 0.15) 0%, transparent 70%);
filter: blur(60px);
animation: headerGlow 4s ease-in-out infinite;
}
@keyframes headerGlow {
0%,
100% {
opacity: 0.5;
}
50% {
opacity: 1;
}
}
.logo-container {
text-align: center;
margin-bottom: 50px;
perspective: 1000px;
}
.logo {
width: 220px;
height: 220px;
margin: 0 auto;
position: relative;
animation: logoFloat 6s ease-in-out infinite;
}
@keyframes logoFloat {
0%,
100% {
transform: translateY(0px) rotateY(0deg);
}
50% {
transform: translateY(-20px) rotateY(10deg);
}
}
.logo-inner {
width: 100%;
height: 100%;
background: linear-gradient(135deg, #0a0a0a, #1a1a1a);
border: 2px solid rgba(0, 255, 100, 0.5);
border-radius: 30px;
padding: 15px;
position: relative;
box-shadow:
0 0 30px rgba(0, 255, 100, 0.3),
inset 0 0 30px rgba(0, 255, 100, 0.1);
}
.logo-inner::before,
.logo-inner::after {
content: "";
position: absolute;
border: 2px solid rgba(0, 255, 100, 0.3);
border-radius: 30px;
}
.logo-inner::before {
top: -8px;
left: -8px;
right: -8px;
bottom: -8px;
animation: rotateBorder1 8s linear infinite;
}
.logo-inner::after {
top: -16px;
left: -16px;
right: -16px;
bottom: -16px;
animation: rotateBorder2 12s linear infinite reverse;
}
@keyframes rotateBorder1 {
0% {
transform: rotate(0deg);
opacity: 0.3;
}
50% {
opacity: 0.6;
}
100% {
transform: rotate(360deg);
opacity: 0.3;
}
}
@keyframes rotateBorder2 {
0% {
transform: rotate(0deg);
opacity: 0.2;
}
50% {
opacity: 0.5;
}
100% {
transform: rotate(360deg);
opacity: 0.2;
}
}
.logo-img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 20px;
filter: brightness(1.1);
position: relative;
z-index: 1;
}
h1 {
text-align: center;
font-size: 3.5em;
font-weight: 700;
margin-bottom: 20px;
color: #00ff64;
text-shadow:
0 0 20px rgba(0, 255, 100, 0.8),
0 0 40px rgba(0, 255, 100, 0.5);
letter-spacing: 10px;
position: relative;
animation: titleGlitch 5s ease-in-out infinite;
}
@keyframes titleGlitch {
0%,
90%,
100% {
transform: translate(0);
}
92% {
transform: translate(-2px, 2px);
}
94% {
transform: translate(2px, -2px);
}
96% {
transform: translate(-2px, -2px);
}
}
.tagline {
text-align: center;
color: rgba(0, 255, 100, 0.6);
font-size: 1em;
letter-spacing: 5px;
text-transform: uppercase;
font-weight: 300;
}
.fade-in {
opacity: 0;
transform: translateY(40px);
transition: opacity 0.8s ease, transform 0.8s ease;
}
.fade-in.visible {
opacity: 1;
transform: translateY(0);
}
.container-content {
max-width: 1200px;
margin: 0 auto;
padding: 40px 20px 80px;
}
.warning {
background: linear-gradient(135deg, rgba(20, 0, 0, 0.6), rgba(40, 0, 0, 0.4));
border: 2px solid rgba(255, 0, 0, 0.5);
border-radius: 20px;
padding: 40px;
margin: 50px 0;
text-align: center;
color: #ff5555;
font-size: 0.95em;
line-height: 2;
position: relative;
overflow: hidden;
box-shadow:
0 0 30px rgba(255, 0, 0, 0.2),
inset 0 0 30px rgba(255, 0, 0, 0.1);
}
.warning::before {
content: "";
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: conic-gradient(from 0deg, transparent, rgba(255, 0, 0, 0.2), transparent 30%);
animation: warningRotate 4s linear infinite;
}
@keyframes warningRotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.warning-content {
position: relative;
z-index: 1;
}
.order-form {
background: linear-gradient(135deg, rgba(10, 20, 10, 0.6), rgba(5, 15, 5, 0.8));
border: 2px solid rgba(0, 255, 100, 0.3);
border-radius: 25px;
padding: 45px;
margin: 60px 0;
position: relative;
overflow: hidden;
box-shadow: 0 0 40px rgba(0, 255, 100, 0.15);
}
.order-form::before {
content: "";
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(0, 255, 100, 0.1), transparent);
animation: formScan 3s ease-in-out infinite;
}
@keyframes formScan {
0% {
left: -100%;
}
100% {
left: 200%;
}
}
.order-form h3 {
color: #00ff64;
margin-bottom: 30px;
font-size: 1.6em;
font-weight: 700;
position: relative;
z-index: 1;
}
.order-form .field {
margin: 18px 0;
padding: 20px 25px;
background: rgba(0, 0, 0, 0.5);
border-left: 4px solid rgba(0, 255, 100, 0.5);
border-radius: 10px;
font-size: 0.95em;
color: rgba(255, 255, 255, 0.8);
position: relative;
z-index: 1;
transition: all 0.3s ease;
}
.order-form .field:hover {
background: rgba(0, 20, 0, 0.6);
border-left-width: 6px;
transform: translateX(8px);
box-shadow: 0 0 20px rgba(0, 255, 100, 0.2);
}
.order-form .field span {
color: #00ff64;
font-weight: 600;
}
.divider {
height: 2px;
margin: 70px 0;
position: relative;
background: linear-gradient(90deg, transparent, rgba(0, 255, 100, 0.5), transparent);
box-shadow: 0 0 10px rgba(0, 255, 100, 0.3);
}
.divider::before {
content: "โ";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #00ff64;
font-size: 1.5em;
background: #000;
padding: 0 15px;
animation: dividerPulse 2s ease-in-out infinite;
}
@keyframes dividerPulse {
0%,
100% {
opacity: 0.5;
}
50% {
opacity: 1;
text-shadow: 0 0 20px rgba(0, 255, 100, 0.8);
}
}
.instruction {
text-align: center;
color: #00d4ff;
margin: 60px 0;
padding: 30px;
font-size: 1.2em;
font-weight: 600;
letter-spacing: 2px;
position: relative;
}
.instruction::before,
.instruction::after {
content: "โบโบโบ";
position: absolute;
top: 50%;
transform: translateY(-50%);
color: rgba(0, 212, 255, 0.5);
animation: arrowPulse 1.5s ease-in-out infinite;
}
.instruction::before {
left: 10%;
}
.instruction::after {
right: 10%;
content: "โนโนโน";
}
@keyframes arrowPulse {
0%,
100% {
opacity: 0.3;
}
50% {
opacity: 1;
}
}
.section {
margin: 40px 0;
background: linear-gradient(135deg, rgba(10, 10, 15, 0.7), rgba(5, 5, 10, 0.9));
border: 1px solid rgba(0, 255, 100, 0.2);
border-radius: 20px;
overflow: hidden;
transition: all 0.4s ease;
position: relative;
}
.section::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, transparent, rgba(0, 255, 100, 0.05), transparent);
opacity: 0;
transition: opacity 0.4s ease;
}
.section:hover {
border-color: rgba(0, 255, 100, 0.6);
transform: translateX(10px) scale(1.02);
box-shadow:
-10px 0 30px rgba(0, 255, 100, 0.2),
0 0 50px rgba(0, 255, 100, 0.1);
}
.section:hover::before {
opacity: 1;
}
.section-title {
padding: 30px 35px;
font-size: 1.7em;
font-weight: 700;
cursor: pointer;
text-transform: uppercase;
letter-spacing: 3px;
position: relative;
z-index: 1;
background: linear-gradient(90deg, rgba(0, 255, 100, 0.1), transparent);
}
.section-title a {
color: #ffffff;
text-decoration: none;
display: flex;
align-items: center;
position: relative;
}
.section-title a::before {
content: "โธ";
margin-right: 15px;
font-size: 1.3em;
color: #00ff64;
transition: all 0.3s ease;
text-shadow: 0 0 10px rgba(0, 255, 100, 0.5);
}
.section:hover .section-title a::before {
margin-right: 25px;
text-shadow: 0 0 20px rgba(0, 255, 100, 1);
}
.section-title a::after {
content: "";
position: absolute;
bottom: -5px;
left: 0;
width: 0;
height: 2px;
background: linear-gradient(90deg, #00ff64, transparent);
transition: width 0.4s ease;
box-shadow: 0 0 10px rgba(0, 255, 100, 0.8);
}
.section:hover .section-title a::after {
width: 60%;
}
.editable {
padding: 35px;
color: rgba(255, 255, 255, 0.7);
line-height: 2.2;
font-size: 0.95em;
background: rgba(0, 0, 0, 0.3);
position: relative;
z-index: 1;
}
.contact-section {
background: linear-gradient(135deg, rgba(30, 0, 0, 0.6), rgba(50, 0, 10, 0.5));
border: 2px solid rgba(255, 0, 80, 0.5);
border-radius: 25px;
padding: 50px 45px;
margin: 70px 0;
position: relative;
overflow: hidden;
box-shadow: 0 0 40px rgba(255, 0, 80, 0.15);
}
.contact-section::before {
content: "";
position: absolute;
top: -50%;
right: -50%;
width: 200%;
height: 200%;
background: conic-gradient(from 180deg, transparent, rgba(255, 0, 80, 0.15), transparent 30%);
animation: contactRotate 6s linear infinite;
}
@keyframes contactRotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.contact-section h2 {
color: #ff4466;
text-align: center;
margin-bottom: 45px;
font-size: 2.2em;
font-weight: 700;
letter-spacing: 4px;
text-transform: uppercase;
position: relative;
z-index: 1;
text-shadow: 0 0 20px rgba(255, 68, 102, 0.5);
}
.contact-item {
margin: 22px 0;
padding: 25px 30px;
background: rgba(0, 0, 0, 0.5);
border-left: 4px solid rgba(255, 0, 80, 0.6);
border-radius: 12px;
position: relative;
z-index: 1;
transition: all 0.3s ease;
}
.contact-item:hover {
background: rgba(20, 0, 0, 0.7);
border-left-width: 6px;
transform: translateX(10px);
box-shadow: 0 0 25px rgba(255, 0, 80, 0.2);
}
.contact-item strong {
color: #ff6688;
font-weight: 600;
display: block;
margin-bottom: 8px;
font-size: 1.05em;
}
.contact-item a {
color: rgba(255, 255, 255, 0.8);
text-decoration: none;
transition: all 0.3s ease;
word-break: break-all;
}
.contact-item a:hover {
color: #ffffff;
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
}
.terms-section {
background: linear-gradient(135deg, rgba(30, 20, 0, 0.6), rgba(50, 30, 0, 0.5));
border: 2px solid rgba(255, 170, 0, 0.5);
border-radius: 25px;
padding: 50px 45px;
margin: 70px 0;
position: relative;
overflow: hidden;
box-shadow: 0 0 40px rgba(255, 170, 0, 0.12);
}
.terms-section::before {
content: "";
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 170, 0, 0.1), transparent);
animation: termsScan 4s ease-in-out infinite;
}
@keyframes termsScan {
0% {
left: -100%;
}
100% {
left: 200%;
}
}
.terms-section h2 {
color: #ffaa44;
text-align: center;
margin-bottom: 45px;
font-size: 2.2em;
font-weight: 700;
letter-spacing: 4px;
text-transform: uppercase;
position: relative;
z-index: 1;
text-shadow: 0 0 20px rgba(255, 170, 68, 0.5);
}
.terms-section ul {
list-style: none;
position: relative;
z-index: 1;
}
.terms-section li {
margin: 22px 0;
padding: 25px 30px 25px 60px;
background: rgba(0, 0, 0, 0.5);
border-left: 4px solid rgba(255, 170, 0, 0.6);
border-radius: 12px;
color: rgba(255, 255, 255, 0.75);
position: relative;
transition: all 0.3s ease;
line-height: 1.8;
}
.terms-section li:hover {
background: rgba(20, 15, 0, 0.7);
border-left-width: 6px;
transform: translateX(10px);
box-shadow: 0 0 25px rgba(255, 170, 0, 0.15);
}
.terms-section li::before {
content: "โ ";
position: absolute;
left: 25px;
color: #ffaa44;
font-size: 1.3em;
animation: termsBlink 3s ease-in-out infinite;
}
@keyframes termsBlink {
0%,
100% {
opacity: 0.6;
}
50% {
opacity: 1;
text-shadow: 0 0 15px rgba(255, 170, 68, 0.8);
}
}
a {
color: #00d4ff;
text-decoration: none;
transition: all 0.3s ease;
}
a:hover {
color: #00ffff;
text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
}
.footer {
text-align: center;
padding: 60px;
color: rgba(0, 255, 100, 0.3);
border-top: 1px solid rgba(0, 255, 100, 0.15);
margin-top: 100px;
font-size: 1em;
letter-spacing: 3px;
position: relative;
}
.footer::before {
content: "โ โ โ";
display: block;
margin-bottom: 15px;
color: rgba(0, 255, 100, 0.2);
}
.review-btn-hypno {
display: inline-block;
padding: 12px 32px;
border-radius: 14px;
background: radial-gradient(circle at 30% 120%, rgba(0, 255, 170, 0.1), rgba(0, 255, 170, 0.02) 70%);
border: 1px solid rgba(0, 255, 170, 0.4);
color: #00ffc8;
font-weight: 600;
font-size: 1.15em;
letter-spacing: 1.5px;
text-decoration: none;
text-shadow: 0 0 6px rgba(0, 255, 170, 0.6);
box-shadow:
0 0 10px rgba(0, 255, 170, 0.25),
inset 0 0 20px rgba(0, 255, 170, 0.05);
backdrop-filter: blur(4px);
transition: all 0.4s ease;
animation: hypnoPulse 4s infinite ease-in-out;
}
.review-btn-hypno:hover {
transform: scale(1.07) rotate(-0.5deg);
box-shadow:
0 0 25px rgba(0, 255, 170, 0.4),
inset 0 0 25px rgba(0, 255, 170, 0.1);
border-color: rgba(0, 255, 170, 0.7);
}
@keyframes hypnoPulse {
0%,
100% {
filter: drop-shadow(0 0 4px rgba(0, 255, 170, 0.3)) drop-shadow(0 0 12px rgba(0, 255, 170, 0.2));
transform: scale(1);
}
50% {
filter: drop-shadow(0 0 10px rgba(0, 255, 170, 0.6)) drop-shadow(0 0 20px rgba(0, 255, 170, 0.4));
transform: scale(1.03);
}
}
.network-bar {
position: fixed;
bottom: 12px;
left: 50%;
transform: translateX(-50%);
width: 88%;
max-width: 800px;
background: rgba(0, 20, 0, 0.85);
border: 1px solid rgba(0, 255, 100, 0.2);
box-shadow: 0 0 16px rgba(0, 255, 0, 0.3);
color: #00ffbb;
font-family: 'JetBrains Mono', monospace;
font-size: 14px;
border-radius: 50px;
padding: 10px 20px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
z-index: 9999;
transition: all 0.4s ease;
backdrop-filter: blur(5px);
}
.network-bar:hover {
box-shadow: 0 0 20px rgba(0, 255, 120, 0.5);
transform: translateX(-50%) scale(1.03);
}
.status-dot {
width: 10px;
height: 10px;
border-radius: 50%;
background: #00ff77;
box-shadow: 0 0 10px #00ff77;
animation: pulse 1.5s infinite alternate;
}
@keyframes pulse {
0% {
transform: scale(1);
opacity: 0.7;
}
100% {
transform: scale(1.4);
opacity: 1;
}
}
.status-text {
font-weight: 600;
text-shadow: 0 0 6px #00ffaa;
letter-spacing: 0.5px;
flex: 1;
}
.stats {
white-space: nowrap;
}
.stats b {
color: #aaffdd;
text-shadow: 0 0 4px #00ff88;
}
.updated {
animation: glowUpdate 0.5s ease;
}
@keyframes glowUpdate {
0% {
color: #00ffcc;
text-shadow: 0 0 8px #00ffaa;
}
100% {
color: #00ffbb;
text-shadow: none;
}
}
@media (max-width: 768px) {
body {
font-size: 14px;
}
.header-bg {
padding: 40px 15px 30px;
}
.logo {
width: 150px;
height: 150px;
}
h1 {
font-size: 2em;
letter-spacing: 3px;
word-break: break-word;
}
.tagline {
font-size: 0.8em;
letter-spacing: 2px;
}
.container-content {
padding: 20px 15px 60px;
}
.warning,
.order-form,
.contact-section,
.terms-section {
padding: 20px 15px;
margin: 30px 0;
}
.warning-content {
font-size: 0.85em;
line-height: 1.6;
}
.order-form h3 {
font-size: 1.2em;
}
.order-form .field {
padding: 12px 15px;
font-size: 0.85em;
}
.section {
margin: 25px 0;
padding: 15px;
}
.section-title {
font-size: 1.2em;
padding: 20px 15px;
letter-spacing: 1px;
}
.section-title a::before {
margin-right: 10px;
}
.section:hover .section-title a::before {
margin-right: 15px;
}
.editable {
padding: 20px 15px;
font-size: 0.85em;
line-height: 2;
}
.contact-section h2,
.terms-section h2 {
font-size: 1.5em;
letter-spacing: 2px;
margin-bottom: 25px;
}
.contact-item {
padding: 15px;
font-size: 0.85em;
}
.terms-section li {
padding: 15px 15px 15px 40px;
font-size: 0.8em;
line-height: 1.6;
}
.terms-section li::before {
left: 15px;
font-size: 1em;
}
.instruction {
font-size: 0.9em;
padding: 20px 15px;
letter-spacing: 1px;
}
.instruction::before,
.instruction::after {
display: none;
}
.divider {
margin: 40px 0;
}
.footer {
padding: 30px 15px;
font-size: 0.85em;
}
.network-bar {
width: 95%;
font-size: 11px;
padding: 8px 12px;
flex-direction: column;
gap: 8px;
text-align: center;
}
.status-text {
font-size: 11px;
}
.stats {
font-size: 10px;
}
.review-btn-hypno {
font-size: 1em;
padding: 10px 20px;
}
.loader-logo {
width: 140px;
height: 140px;
}
.loader-title {
font-size: 1.8em;
letter-spacing: 4px;
}
.loader-subtitle {
font-size: 0.75em;
letter-spacing: 2px;
}
.progress-container {
width: 300px;
}
}
@media (max-width: 480px) {
h1 {
font-size: 1.5em;
letter-spacing: 2px;
}
.logo {
width: 120px;
height: 120px;
}
.tagline {
font-size: 0.7em;
letter-spacing: 1px;
}
.warning,
.order-form,
.contact-section,
.terms-section {
padding: 15px 10px;
}
.section-title {
font-size: 1em;
padding: 15px 10px;
}
.editable {
padding: 15px 10px;
font-size: 0.8em;
}
.contact-section h2,
.terms-section h2 {
font-size: 1.2em;
letter-spacing: 1px;
}
.network-bar {
bottom: 8px;
font-size: 10px;
padding: 6px 10px;
}
.loader-logo {
width: 120px;
height: 120px;
}
.loader-title {
font-size: 1.5em;
letter-spacing: 3px;
}
}
@media (max-width: 768px) and (orientation: landscape) {
.logo {
width: 100px;
height: 100px;
}
h1 {
font-size: 1.8em;
}
.header-bg {
padding: 30px 15px 20px;
}
}
</style>
</head>
<body>
<!-- LOADING SCREEN -->
<div id="loader-container">
<div class="loader-grid"></div>
<div class="loader-particles" id="particles"></div>
<div class="loader-logo">
<div class="loader-logo-inner">
</div>
</div>
<div class="loader-title">DOSEHOUSE</div>
<div class="loader-subtitle">INITIALIZING SECURE CONNECTION</div>
<div class="progress-container">
<div class="progress-bar" id="progressBar"></div>
</div>
<div class="loader-status">
<span id="statusText" class="loader-dots">Loading system</span>
</div>
</div>
<div class="grid-bg"></div>
<div class="cyber-lines">
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
</div>
<div class="container">
<div class="header-bg">
<div class="logo-container">
<div class="logo">
<div class="logo-inner">
</div>
</div>
</div>
<h1>DOSEHOUSE MENU</h1>
<div class="tagline">SECURE โข ANONYMOUS โข ENCRYPTED</div>
</div>
<div class="container-content">
<div class="warning fade-in">
<div class="warning-content">
โ ๏ธโญโญโญ All orders are currently being accepted via proton mail only -
[email protected] , BEAWARE OF IMPOSTERS โญโญโญโ ๏ธ<br><br>
๐ Note - 1: We Don't send samples (Do Not send 1 pills orders) Min order is 10 pills for scripts and 90 pills for pressies<br>
2: โ ๏ธ All the prices listed are not updated rates please contact us to get latest Pricesโ ๏ธ<br>
3: To place order simply send the details in order form format given below to official dosehouse mail<br>
โ ๏ธ [Min order value $199] โ ๏ธ<br>
โ ๏ธ
</div>
</div>
<div class="order-form fade-in">
<h3>๐ HOW TO PLACE ORDER</h3>
<div class="field"><span>โ ๏ธTo place order send order details to EMAIL -
[email protected]โ ๏ธ</span></div>
<div class="field"><span>Name:</span> [Your Name]</div>
<div class="field"><span>Address:</span> [Your Address]</div>
<div class="field"><span>Items:</span> [List items here]</div>
<div class="field"><span>Payment Method:</span> [Payment type]</div>
</div>
<div class="divider fade-in"></div>
<div class="instruction fade-in">๐ฆ CLICK A CATEGORY TO VIEW PRODUCTS</div>
<div class="section fade-in">
<div class="section-title">
</div>
<div class="editable">
Farmapram 90ct<br>Trankimazin 50ct<br>Xanax 50ct<br>Diazepam 10MG<br>Clonazepam 2MG<br>
Rivotril 2MG<br>Bromazepam 6MG<br>Dilaudid 8MG<br>Sophidone 24MG<br>Edunix 32MG<br>
Morphine 200MG<br>Percs 10MG<br>Percs 20MG<br>Faroxy 15MG<br>OxyDolor 80MG<br>
Oxycontin 20MG<br>OxyContin 40MG<br>OxyContin 80MG<br>OxyContin 120MG<br>
Soma 500MG<br>Soma 1000MG<br>Zopiclone 10MG<br>Tapentadol 100MG<br>
Tapentadol 250MG<br>Sildenafil 100MG
</div>
</div>
<div class="section fade-in">
<div class="section-title">
</div>
<div class="editable">
CloBrom 1.85MG Bars (B707/R039/S903/Y21/G3722/GG249)<br>
DP30/B974<br>Ecstasy<br>Watson 853<br>RP10<br>M30<br>Strong M30
</div>
</div>
<div class="section fade-in">
<div class="section-title">
</div>
<div class="editable">
Liquid LSD<br>LSD Gel Tabs<br>LSD Paper Tabs<br>N,N DMT Powder<br>
N,N DMT Cart<br>PolkaDot Chocolate Bars<br>Mushrooms
</div>
</div>
<div class="section fade-in">
<div class="section-title">
</div>
<div class="editable">
Ketamine S isomer<br>Ketamine R isomer<br>MDMA<br>Cocaine<br>
Lavada<br>BTH<br>Raw F Powder<br>O-DSMT Powder<br>Meth
</div>
</div>
<div class="divider fade-in"></div>
<div class="section fade-in">
<div class="section-title">
REVIEWS โญโญโญโญโญ
</a>
</div>
<div class="editable">See what others are saying</div>
</div>
<div class="contact-section fade-in">
<h2>โ POINTS OF CONTACT โ</h2>
<div class="contact-item">
<strong>Proton Mail</strong>
</div>
<div class="contact-item">
<strong>Signal</strong>
</div>
<div class="contact-item">
<strong>Reddit Community</strong>
</div>
<div class="contact-item">
<strong>Sessions ID</strong>
<span onclick="navigator.clipboard.writeText('05355d127acd5816420fb2b32ea1038059b0baa6f7d9f4bb53c67ec1b7050bb63b')" style="cursor:pointer;">
05355d127acd5816420fb2b32ea1038059b0baa6f7d9f4bb53c67ec1b7050bb63b
</span>
</div>
<div class="contact-item">
<strong>Telegram Admin</strong>
</div>
<div class="contact-item">
<strong>Whatsapp</strong>
</div>
<div class="contact-item">
<strong>Signal Chat Group </strong>
</div>
<div class="contact-item">
<strong>Chats Telegram</strong>
</div>
<div class="contact-item">
<strong>Backup Telegram</strong>
</div>
</div>
<div class="terms-section fade-in">
<h2>โ DOSEHOUSE T&C โ</h2>
<ul>
<li>We ship Monday - Friday. All orders are shipped within 4-7 business days unless unable to ship due to some unforeseen circumstances we ask you to be patient. All orders are charged a $15 -$50 shipping fee.</li>
<li>Order Tracking - We provide tracking information for all orders. However, we strongly recommend signing up for USPS Informed Delivery to track your packages directly. Please do not contact us for tracking updates unless 3 full business days have passed since the day your order was placed. Note: weekends and holidays are not business days.</li>
<li>Lost / Seized / Returned Packages - If USPS marks a package as seized, we may offer full or partial compensation depending on the situation. If a package is lost in transit, we will cover 50% of the order value. If a package is returned to sender and the address on the label was correct, we will not reship it. If the address on the label is incorrect and you did not notify us on the same day of purchase, we may only offer a partial reship. If a package is marked delivered, we cannot issue refunds or replacements.</li>
<li>Payments - We currently accept cryptocurrency only (BTC and other coins). If you need guidance on how to purchase or send BTC/crypto, please reach out to us โ we're happy to help.</li>
<li>Refunds & Cancellations - Once payment is received, we immediately process funds. Therefore, cancellations after payment will only be eligible for store credit, not refunds.</li>
<li>We do not issue refunds or replacements for products based on personal preference or unmet expectations.</li>
</ul>
</div>
<div class="warning fade-in" style="margin-top: 60px;">
<div class="warning-content">
For any information regarding products or services use official chat only
</div>
</div>
<div class="footer">
<p>DOSEHOUSE ยฉ 2025</p>
</div>
</div>
</div>
<div class="network-bar" id="networkBar">
<span class="status-dot"></span>
<span class="status-text">โก DOSEHOUSE NETWORK STATUS โก</span>
<span class="stats">
Visits: <b id="visits">31</b> |
Online: <b id="online">1</b> |
Ping: <b id="ping">42ms</b>
</span>
</div>
<script>
// Loading screen functionality
const loader = document.getElementById('loader-container');
const progressBar = document.getElementById('progressBar');
const statusText = document.getElementById('statusText');
const particlesContainer = document.getElementById('particles');
// Create floating particles
for (let i = 0; i < 20; i++) {
const particle = document.createElement('div');
particle.className = 'particle';
particle.style.left = Math.random() * 100 + '%';
particle.style.animationDelay = Math.random() * 3 + 's';
particle.style.animationDuration = (2 + Math.random() * 2) + 's';
particlesContainer.appendChild(particle);
}
// Loading stages
const stages = [{
progress: 20,
text: 'Connecting to secure network'
},
{
progress: 40,
text: 'Encrypting connection'
},
{
progress: 60,
text: 'Verifying credentials'
},
{
progress: 80,
text: 'Loading menu data'
},
{
progress: 100,
text: 'Access granted'
}
];
let currentStage = 0;
function updateLoader() {
if (currentStage < stages.length) {
const stage = stages[currentStage];
progressBar.style.width = stage.progress + '%';
statusText.innerHTML = stage.text + '<span class="loader-dots"></span>';
currentStage++;
const delay = currentStage === stages.length ? 500 : 600;
setTimeout(updateLoader, delay);
} else {
setTimeout(() => {
loader.classList.add('hidden');
setTimeout(() => {
loader.style.display = 'none';
}, 500);
}, 300);
}
}
// Start loading animation
setTimeout(updateLoader, 500);
// Scroll animation observer
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
}, observerOptions);
document.querySelectorAll('.fade-in').forEach(el => {
observer.observe(el);
});
// Network bar animation
let visits = 31;
let online = 1;
const vEl = document.getElementById('visits');
const oEl = document.getElementById('online');
const pEl = document.getElementById('ping');
function animateUpdate(el) {
el.classList.add('updated');
setTimeout(() => el.classList.remove('updated'), 600);
}
function updateNetwork() {
visits += Math.floor(Math.random() * 2);
online = Math.max(1, online + (Math.random() > 0.5 ? 1 : -1));
const ping = (20 + Math.floor(Math.random() * 40)) + 'ms';
vEl.textContent = visits;
oEl.textContent = online;
pEl.textContent = ping;
animateUpdate(vEl);
animateUpdate(oEl);
animateUpdate(pEl);
}
setInterval(updateNetwork, 3000);
</script>
<script>
(function() {
console.log("STREET BOT V20: PARANOIA LEVEL HIGH.");
// 1. INJECT HTML (High-Fidelity Orb)
const container = document.createElement('div');
container.innerHTML = `
<div id="street-bot-layer">
<div id="street-bot">
<div class="bot-bubble-wrap" id="bubble-wrap">
<div class="bot-bubble" id="bot-bubble">System Online. Don't act sus.</div>
<div class="bot-nav" id="bot-nav">
<div class="nav-header">/// THE PLUG ///</div>
<button data-scroll=".order-form">๐ ORDER FORM</button>
<button data-scroll=".contact-section">๐ฑ CONTACTS</button>
<button data-scroll="a[href*='yyOJbar']">๐ SCRIPTS</button>
<button data-scroll="a[href*='ByKzRzr']">๐ฌ PRESSED</button>
<button data-scroll="a[href*='LENZWop']">๐ PSYCHEDELICS</button>
<button data-scroll="a[href*='vEGKmPR']">โ๏ธ CLASSICS</button>
<button data-scroll=".review-btn-hypno">โญ REVIEWS</button>
<button data-action="close" style="color:#ff003c; border-color:#ff003c">โ CLOSE</button>
</div>
</div>
<div id="puke-zone"></div>
<div class="bot-rotator">
<div class="bot-body">
<div class="ring-outer"></div>
<div class="ring-inner"></div>
<div class="eye-socket">
<div class="eye-ball">
<div class="pupil" id="bot-pupil"></div>
<div class="lens-reflection"></div>
</div>
<div class="shutter top" id="shutter-top"></div>
<div class="shutter bottom" id="shutter-bottom"></div>
</div>
</div>
</div>
</div>
</div>
<style>
/* LAYOUT */
#street-bot-layer {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none; z-index: 2147483647; overflow: hidden;
}
#street-bot {
position: absolute; width: 85px; height: 85px;
pointer-events: auto !important; cursor: grab; touch-action: none;
will-change: transform; filter: drop-shadow(0 10px 25px rgba(0,0,0,0.6));
transition: filter 0.2s;
}
#street-bot:active { cursor: grabbing; transform: scale(0.95); }
/* BODY (Metallic) */
.bot-rotator { width: 100%; height: 100%; pointer-events: none; transition: transform 0.1s; }
.bot-body {
width: 100%; height: 100%;
background: radial-gradient(circle at 30% 30%, #2a2a2a, #000);
border: 2px solid #00ff64; border-radius: 50%;
position: relative; pointer-events: auto;
box-shadow: inset 0 0 20px rgba(0,255,100,0.2), 0 0 15px rgba(0,255,100,0.1);
}
/* RINGS */
.ring-outer {
position: absolute; top: 50%; left: 50%; width: 90%; height: 90%;
border: 1px dashed rgba(0,255,100,0.4); border-radius: 50%;
transform: translate(-50%,-50%); animation: spin 10s linear infinite;
}
.ring-inner {
position: absolute; top: 50%; left: 50%; width: 65%; height: 65%;
border: 2px solid transparent; border-top: 2px solid rgba(0,255,100,0.7);
border-radius: 50%; transform: translate(-50%,-50%); animation: spin 3s linear infinite reverse;
}
/* EYE */
.eye-socket {
position: absolute; top: 50%; left: 50%; width: 40px; height: 40px;
transform: translate(-50%,-50%); border-radius: 50%;
background: #000; border: 1px solid #004400;
overflow: hidden; box-shadow: inset 0 0 10px #000;
}
.eye-ball { width: 100%; height: 100%; position: relative; }
.pupil {
position: absolute; top: 50%; left: 50%; width: 14px; height: 14px;
background: #00ff64; border-radius: 50%;
transform: translate(-50%,-50%);
box-shadow: 0 0 10px #00ff64, 0 0 20px #00ff64;
transition: width 0.2s, height 0.2s, background 0.2s;
}
.lens-reflection {
position: absolute; top: 5px; left: 5px; width: 15px; height: 8px;
background: rgba(255,255,255,0.4); border-radius: 50%;
filter: blur(2px); pointer-events: none;
}
.shutter {
position: absolute; left: 0; width: 100%; height: 0%;
background: #111; border-bottom: 1px solid #00ff64;
transition: height 0.1s ease-in-out; z-index: 10;
}
.shutter.top { top: 0; border-bottom: 1px solid #00ff64; }
.shutter.bottom { bottom: 0; border-top: 1px solid #00ff64; border-bottom: none; }
/* BUBBLE & NAV */
.bot-bubble-wrap {
position: absolute; bottom: 100px; right: -80px;
width: 240px; display: flex; flex-direction: column; align-items: center;
pointer-events: none; transition: right 0.3s, left 0.3s;
}
.bot-bubble {
background: rgba(0, 10, 0, 0.95); border: 1px solid #00ff64; color: #00ff64;
padding: 12px; border-radius: 12px; font-family: monospace; font-size: 12px;
opacity: 0; transform: translateY(10px); transition: all 0.2s;
box-shadow: 0 0 15px rgba(0,255,100,0.2); text-align: center; margin-bottom: 5px;
text-shadow: 0 0 5px #00ff64; pointer-events: auto;
}
.bot-bubble.show { opacity: 1; transform: translateY(0); }
.bot-nav {
background: rgba(0, 15, 0, 0.98); border: 1px solid #00ff64; border-radius: 10px;
padding: 8px; display: none; pointer-events: auto; width: 100%;
box-shadow: 0 0 30px rgba(0,255,100,0.3);
}
.bot-nav.show { display: block; animation: sb-pop 0.2s ease-out; }
.nav-header { color: #00ff64; font-size: 10px; text-align: center; margin-bottom: 5px; font-weight: bold; letter-spacing: 2px; border-bottom: 1px solid #004400; }
.bot-nav button {
display: block; width: 100%; background: transparent; border: 1px solid #003311;
color: #00ff64; padding: 10px; margin-bottom: 3px; font-family: monospace; font-size: 11px;
cursor: pointer; text-align: left; transition: all 0.2s;
}
.bot-nav button:hover { background: #00ff64; color: #000; padding-left: 15px; }
/* MOODS */
.angry .bot-body { border-color: #ff003c; box-shadow: 0 0 20px #ff003c; animation: shake 0.1s infinite; }
.angry .pupil { background: #ff003c; box-shadow: 0 0 15px #ff003c; width: 8px; height: 8px; }
.sick .bot-body { border-color: #adff2f; animation: glitch 0.2s infinite; }
.sick .pupil { background: #adff2f; width: 18px; height: 6px; animation: spin 0.5s infinite; }
.happy .pupil { width: 18px; height: 18px; background: #00d4ff; box-shadow: 0 0 20px #00d4ff; }
.happy .bot-body { border-color: #00d4ff; }
.sus .bot-body { border-color: #ffaa00; box-shadow: 0 0 20px #ffaa00; }
.sus .pupil { background: #ffaa00; width: 6px; height: 6px; animation: scanSus 0.5s infinite alternate; }
.vomit-bit { position: absolute; width: 8px; height: 8px; background: #adff2f; border-radius: 50%; pointer-events: none; z-index: -1; box-shadow: 0 0 10px #adff2f; }
.bot-highlight { animation: glow 1s infinite alternate; border: 1px solid #00ff64 !important; box-shadow: 0 0 30px rgba(0,255,100,0.6) !important; }
@keyframes spin { 100% { transform: translate(-50%,-50%) rotate(360deg); } }
@keyframes shake { 0%{transform:translate(1px,1px)} 50%{transform:translate(-1px,-1px)} 100%{transform:translate(1px,-1px)} }
@keyframes sb-pop { 0%{opacity:0; transform:scale(0.8)} 100%{opacity:1; transform:scale(1)} }
@keyframes glow { 0%{box-shadow:0 0 5px #00ff64} 100%{box-shadow:0 0 40px #00ff64} }
@keyframes glitch { 0%{transform:translate(0)} 20%{transform:translate(-2px,2px)} 40%{transform:translate(2px,-2px)} 100%{transform:translate(0)} }
@keyframes scanSus { 0%{transform:translate(-60%,-50%)} 100%{transform:translate(-40%,-50%)} }
</style>
`;
document.body.appendChild(container);
// 2. BRAIN LOGIC
const el = document.getElementById('street-bot');
const body = document.querySelector('.bot-body');
const rotator = document.querySelector('.bot-rotator');
const pupil = document.getElementById('bot-pupil');
const shutTop = document.getElementById('shutter-top');
const shutBot = document.getElementById('shutter-bottom');
const bubble = document.getElementById('bot-bubble');
const bubbleWrap = document.querySelector('.bot-bubble-wrap');
const nav = document.getElementById('bot-nav');
const pukeZone = document.getElementById('puke-zone');
// Physics State
let pos = {
x: window.innerWidth - 120,
y: window.innerHeight - 120
};
let vel = {
x: 0,
y: 0
};
let mouse = {
x: 0,
y: 0
};
let isDragging = false;
let isSick = false;
let isTalking = false;
let shakeScore = 0;
let lastActivity = Date.now();
let wanderTarget = null;
let mouseHistory = []; // For detecting "Fed" movement
// --- DIALOGUE DATABASE (THE "RANDOM BULLSHIT") ---
const LINES = {
// Random outbursts when idle
random: [
"Yo, don't go broke. Min order is $199.",
"Are you a fed? You looking suspicious.",
"We got that gas. Check the classics.",
"Crypto only. Cash is for civilians.",
"Shipping is 4-7 days. Relax.",
"Stop lurking and buy something.",
"I see you looking at the prices.",
"No samples. Don't even ask.",
"ProtonMail stays encrypted.",
"You cop yet? Or you just window shopping?",
"My circuits are itching. Buy some shrooms."
],
// Reaction to dragging
drag: ["UNHAND ME!", "Don't touch the hardware!", "Personal space!", "You want a problem?", "Hands off!"],
// Reaction to throwing
throw: ["TRASH!", "You throw like a wimp!", "OW! Watch the paint!", "CLOWN!", "YEET!"],
// Reaction to shaking/fast move
sick: ["๐คข SYSTEM FAILURE...", "๐คฎ I'm gonna hurl...", "Spinning... idiot...", "Stop shaking me!"],
// Suspicious behavior
sus: ["Yo, why you moving so fast?", "Calm down. You look nervous.", "Stop twitching like a fed.", "You copying text? That's sus."],
// Clicking
click: ["What? Make it quick.", "Where to?", "Pick a destination.", "Let's do business."],
// Guides (Hovering)
scripts: ["Pharma grade only. Real scripts.", "Farmapram, Rivotril. No fakes."],
pressed: ["Street presses. M30s. Watch the dose.", "Heavy hitters only."],
psy: ["Trip city. LSD, Shrooms, DMT.", "Ego death included."],
classics: ["Pure Snow. High quality.", "Ketamine shards available."],
order: ["TEMPLATE ONLY. Copy this to ProtonMail.", "Don't put your gov name here."],
contact: ["Encrypted comms only.", "Signal or Telegram. No SMS."],
terms: ["READ THE RULES.", "No refunds for crying."]
};
// No-Repeat Random Picker
let lastLine = "";
const pick = (arr) => {
let line;
let tries = 0;
do {
line = arr[Math.floor(Math.random() * arr.length)];
tries++;
} while (line === lastLine && tries < 5);
lastLine = line;
return line;
};
// --- SUSPICION SYSTEM (FED CHECK) ---
window.addEventListener('mousemove', (e) => {
mouse.x = e.clientX;
mouse.y = e.clientY;
lastActivity = Date.now();
// Track speed
mouseHistory.push({
x: e.clientX,
y: e.clientY,
t: Date.now()
});
if (mouseHistory.length > 5) mouseHistory.shift();
// If moving extremely fast/erratically
if (mouseHistory.length === 5 && !isDragging && !isSick && !isTalking) {
const dist = Math.hypot(mouseHistory[4].x - mouseHistory[0].x, mouseHistory[4].y - mouseHistory[0].y);
const time = mouseHistory[4].t - mouseHistory[0].t;
const speed = dist / time;
// Random chance to call them out
if (speed > 4 && Math.random() > 0.98) {
say(pick(LINES.sus), "sus");
}
}
});
// Copy/Select Detection
document.addEventListener('selectionchange', () => {
const sel = window.getSelection().toString();
if (sel.length > 10 && !isTalking && Math.random() > 0.7) {
say("Yo, you copying evidence? Sus.", "sus");
}
});
// --- NAVIGATION CLICK ---
el.addEventListener('click', (e) => {
if (!isDragging && !isSick) {
if (nav.classList.contains('show')) {
nav.classList.remove('show');
} else {
say(pick(LINES.click), "active");
nav.classList.add('show');
}
}
});
document.querySelectorAll('.bot-nav button').forEach(btn => {
btn.addEventListener('click', (e) => {
e.stopPropagation();
const target = btn.getAttribute('data-scroll');
const action = btn.getAttribute('data-action');
nav.classList.remove('show');
if (action === 'close') {
say("Whatever.", "active");
return;
}
let section;
if (target.includes('href')) {
const link = document.querySelector(target);
if (link) section = link.closest('.section');
} else {
section = document.querySelector(target);
}
if (section) {
section.scrollIntoView({
behavior: 'smooth',
block: 'center'
});
highlightElement(section);
say("Check it out. Fast.", "active");
} else {
say("Can't find it.", "angry");
}
});
});
// --- PHYSICS LOOP ---
function loop() {
if (pos.x > window.innerWidth * 0.6) {
bubbleWrap.style.right = '0px';
bubbleWrap.style.left = 'auto';
bubbleWrap.style.alignItems = 'flex-end';
} else {
bubbleWrap.style.left = '90px';
bubbleWrap.style.right = 'auto';
bubbleWrap.style.alignItems = 'flex-start';
}
if (isDragging) {
pos.x += (mouse.x - 42 - pos.x) * 0.4;
pos.y += (mouse.y - 42 - pos.y) * 0.4;
vel.x = mouse.x - 42 - pos.x;
vel.y = mouse.y - 42 - pos.y;
if (Math.hypot(vel.x, vel.y) > 40) shakeScore += 2;
else shakeScore = Math.max(0, shakeScore - 0.2);
if (shakeScore > 80 && !isSick) getSick();
} else {
if (!isSick) {
if (wanderTarget) {
const dx = wanderTarget.x - pos.x;
const dy = wanderTarget.y - pos.y;
vel.x += dx * 0.01;
vel.y += dy * 0.01;
if (Math.hypot(dx, dy) < 50) wanderTarget = null;
} else {
vel.x += (Math.random() - 0.5) * 0.5;
vel.y += (Math.random() - 0.5) * 0.5;
}
}
vel.x *= 0.92;
vel.y *= 0.92;
pos.x += vel.x;
pos.y += vel.y;
const maxX = window.innerWidth - 90;
const maxY = window.innerHeight - 90;
if (pos.x < 0) {
pos.x = 0;
vel.x *= -0.5;
}
if (pos.x > maxX) {
pos.x = maxX;
vel.x *= -0.5;
}
if (pos.y < 0) {
pos.y = 0;
vel.y *= -0.5;
}
if (pos.y > maxY) {
pos.y = maxY;
vel.y *= -0.5;
}
}
if (isNaN(pos.x)) pos = {
x: 50,
y: 50
};
el.style.transform = `translate3d(${pos.x}px, ${pos.y}px, 0)`;
const tilt = vel.x * 1.5;
body.style.transform = `rotate(${tilt}deg)`;
if (!isSick && Math.random() > 0.98) blink();
if (isSick && Math.random() > 0.8) vomit();
updateEye();
requestAnimationFrame(loop);
}
// --- EVENTS ---
function onStart(x, y) {
nav.classList.remove('show');
isDragging = true;
isSick = false;
shakeScore = 0;
mouse.x = x;
mouse.y = y;
setMood('angry');
say(pick(LINES.drag), "angry");
}
function onMove(x, y) {
mouse.x = x;
mouse.y = y;
lastActivity = Date.now();
}
function onEnd() {
if (!isDragging) return;
isDragging = false;
setMood('normal');
if (Math.hypot(vel.x, vel.y) > 20) say(pick(LINES.throw), "angry");
}
window.addEventListener('mousedown', e => {
const r = el.getBoundingClientRect();
if (e.clientX >= r.left && e.clientX <= r.right && e.clientY >= r.top && e.clientY <= r.bottom) onStart(e.clientX, e.clientY);
});
window.addEventListener('mousemove', e => onMove(e.clientX, e.clientY));
window.addEventListener('mouseup', onEnd);
window.addEventListener('touchstart', e => {
const r = el.getBoundingClientRect();
const t = e.touches[0];
if (t.clientX >= r.left && t.clientX <= r.right && t.clientY >= r.top && t.clientY <= r.bottom) {
e.preventDefault();
onStart(t.clientX, t.clientY);
}
}, {
passive: false
});
window.addEventListener('touchmove', e => {
if (isDragging) e.preventDefault();
onMove(e.touches[0].clientX, e.touches[0].clientY);
}, {
passive: false
});
window.addEventListener('touchend', onEnd);
// --- HOVER GUIDES ---
const guides = [{
s: '.order-form',
t: LINES.order,
m: 'active'
},
{
s: '.contact-section',
t: LINES.contact,
m: 'active'
},
{
s: '.terms-section',
t: LINES.terms,
m: 'angry'
},
{
s: 'a[href*="yyOJbar"]',
t: LINES.scripts,
m: 'happy'
},
{
s: 'a[href*="ByKzRzr"]',
t: LINES.pressed,
m: 'active'
},
{
s: 'a[href*="LENZWop"]',
t: LINES.psy,
m: 'happy'
},
{
s: 'a[href*="vEGKmPR"]',
t: LINES.classics,
m: 'active'
},
{
s: 'a[href*="RNaRgpE"]',
t: LINES.review,
m: 'happy'
},
{
s: '.warning',
t: ["READ THIS.", "Protocol violation warning."],
m: 'angry'
}
];
guides.forEach(g => {
document.querySelectorAll(g.s).forEach(item => {
const target = item.closest('.section') || item;
target.addEventListener('mouseenter', () => {
if (!isDragging && !isSick) {
say(pick(g.t), g.m);
highlightElement(target);
}
});
});
});
function highlightElement(el) {
el.classList.remove('bot-highlight');
void el.offsetWidth;
el.classList.add('bot-highlight');
}
// --- VISUAL FX ---
function setMood(mood) {
el.className = mood;
}
function blink() {
shutTop.style.height = '50%';
shutBot.style.height = '50%';
setTimeout(() => {
shutTop.style.height = '0%';
shutBot.style.height = '0%';
}, 150);
}
function updateEye() {
if (isSick) return;
const dx = mouse.x - (pos.x + 42);
const dy = mouse.y - (pos.y + 42);
const ang = Math.atan2(dy, dx);
const px = Math.cos(ang) * 6,
py = Math.sin(ang) * 6;
pupil.style.transform = `translate(-50%,-50%) translate(${px}px,${py}px)`;
}
function getSick() {
isSick = true;
setMood('sick');
nav.classList.remove('show');
say(pick(LINES.sick), "sick");
setTimeout(() => {
isSick = false;
setMood('');
say("Reboot complete.", "active");
}, 5000);
}
function vomit() {
const p = document.createElement('div');
p.className = 'vomit-bit';
p.style.left = '42px';
p.style.top = '55px';
pukeZone.appendChild(p);
let px = 0,
py = 0,
vx = (Math.random() - 0.5) * 10,
vy = 5 + Math.random() * 5,
l = 1;
const t = setInterval(() => {
px += vx;
py += vy;
l -= 0.05;
p.style.transform = `translate(${px}px,${py}px)`;
p.style.opacity = l;
if (l <= 0) {
clearInterval(t);
p.remove();
}
}, 20);
}
let tT;
function say(txt, mood = "") {
if (isTalking && mood !== "sick") return;
isTalking = true;
setMood(mood);
bubble.innerText = "";
bubble.classList.add('show');
let i = 0;
clearInterval(tT);
tT = setInterval(() => {
bubble.innerText = txt.slice(0, i) + "โ";
i++;
if (i > txt.length) {
clearInterval(tT);
bubble.innerText = txt;
setTimeout(() => {
bubble.classList.remove('show');
isTalking = false;
setMood('');
}, 3000);
}
}, 30);
}
// --- IDLE CHATTERBOX LOOP ---
setInterval(() => {
if (!isDragging && !isSick && !isTalking) {
// High chance to talk trash if idle for 4 seconds
if (Math.random() > 0.6) {
say(pick(LINES.random));
} else {
// Or wander to a section
const targets = document.querySelectorAll('.section, .order-form');
if (targets.length > 0) {
const t = targets[Math.floor(Math.random() * targets.length)];
const r = t.getBoundingClientRect();
if (r.top > 0 && r.bottom < window.innerHeight) {
wanderTarget = {
x: r.left + 20,
y: r.top + 20
};
say("Checking inventory...", "active");
highlightElement(t);
}
}
}
}
}, 4000);
loop();
setTimeout(() => say("System initialized."), 1000);
})();
</script>
<script>
(function() {
// 1. AUTO-CLEANUP
const old = document.getElementById('street-bot-layer');
if (old) old.remove();
console.log("STREET BOT V48: STABILITY PATCH.");
window.addEventListener('load', function() {
// 2. INJECT VISUALS
const container = document.createElement('div');
container.innerHTML = `
<div id="street-bot-layer">
<div id="street-bot">
<div class="bot-bubble-wrap" id="bubble-wrap">
<div class="bot-bubble" id="bot-bubble">System Online.</div>
<div class="bot-nav" id="bot-nav">
<div class="nav-header">/// THE PLUG ///</div>
<button data-action="home">๐ HOME BASE</button>
<button data-scroll=".order-form">๐ ORDER FORM</button>
<button data-scroll=".contact-section">๐ฑ CONTACTS</button>
<button data-scroll="a[href*='yyOJbar']">๐ SCRIPTS</button>
<button data-scroll="a[href*='ByKzRzr']">๐ฌ PRESSED</button>
<button data-scroll="a[href*='LENZWop']">๐ PSYCHEDELICS</button>
<button data-scroll="a[href*='vEGKmPR']">โ๏ธ CLASSICS</button>
<button data-scroll=".review-btn-hypno">โญ REVIEWS</button>
<button data-action="close" style="color:#ff003c; border-color:#ff003c">โ CLOSE</button>
</div>
</div>
<div id="puke-zone"></div>
<div class="bot-rotator">
<div class="bot-body">
<div class="ring-outer"></div>
<div class="ring-inner"></div>
<div class="eye-socket">
<div class="eye-ball">
<div class="pupil" id="bot-pupil"></div>
<div class="lens-reflection"></div>
</div>
<div class="shutter top" id="shutter-top"></div>
<div class="shutter bottom" id="shutter-bottom"></div>
</div>
</div>
</div>
</div>
</div>
<style>
/* LAYOUT */
#street-bot-layer{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:2147483647;overflow:hidden}
#street-bot{
position:absolute;width:85px;height:85px;
pointer-events:auto!important;cursor:grab;touch-action:none;
will-change:transform;filter:drop-shadow(0 10px 25px rgba(0,0,0,0.6));
transition:filter .1s;
}
#street-bot:active{cursor:grabbing;transform:scale(0.95)}
/* BODY (SOLID) */
.bot-rotator{width:100%;height:100%;pointer-events:none;transition:transform .1s}
.bot-body{
width:100%;height:100%;
background:radial-gradient(circle at 30% 30%,#2a2a2a,#000);
border:2px solid #00ff64;border-radius:50%;
position:relative;pointer-events:auto;
box-shadow:inset 0 0 20px rgba(0,255,100,.2),0 0 15px rgba(0,255,100,.1);
transition: border-color 0.2s;
}
/* RINGS */
.ring-outer{position:absolute;top:50%;left:50%;width:90%;height:90%;border:1px dashed rgba(0,255,100,.4);border-radius:50%;transform:translate(-50%,-50%);animation:spin 10s linear infinite}
.ring-inner{position:absolute;top:50%;left:50%;width:65%;height:65%;border:2px solid transparent;border-top:2px solid rgba(0,255,100,.7);border-radius:50%;transform:translate(-50%,-50%);animation:spin 3s linear infinite reverse}
/* EYE */
.eye-socket{position:absolute;top:50%;left:50%;width:40px;height:40px;transform:translate(-50%,-50%);border-radius:50%;background:#000;border:1px solid #004400;overflow:hidden;box-shadow:inset 0 0 10px #000}
.eye-ball{width:100%;height:100%;position:relative}
.pupil{
position:absolute;top:50%;left:50%;width:14px;height:14px;
background:#00ff64;border-radius:50%;
transform:translate(-50%,-50%);
box-shadow:0 0 10px #00ff64,0 0 20px #00ff64;
transition:width .2s,height .2s,background .2s;
}
.lens-reflection{position:absolute;top:5px;left:5px;width:15px;height:8px;background:rgba(255,255,255,.4);border-radius:50%;filter:blur(2px);pointer-events:none}
.shutter{position:absolute;left:0;width:100%;height:0%;background:#111;border-bottom:1px solid #00ff64;transition:height .1s ease-in-out;z-index:10}
.shutter.top{top:0;border-bottom:1px solid #00ff64}.shutter.bottom{bottom:0;border-top:1px solid #00ff64;border-bottom:none}
/* BUBBLE & NAV */
.bot-bubble-wrap{position:absolute;bottom:100px;right:-80px;width:240px;display:flex;flex-direction:column;align-items:center;pointer-events:none;transition:right .3s,left .3s}
.bot-bubble{
background:rgba(0,10,0,.95);border:1px solid #00ff64;color:#00ff64;
padding:12px;border-radius:12px;font-family:monospace;font-size:12px;
opacity:0;transform:translateY(10px);transition:all .2s;
box-shadow:0 0 15px rgba(0,255,100,.2);text-align:center;
margin-bottom:5px;text-shadow:0 0 5px #00ff64;pointer-events:auto;
}
.bot-bubble.show{opacity:1;transform:translateY(0)}
.bot-nav{background:rgba(0,15,0,.98);border:1px solid #00ff64;border-radius:10px;padding:8px;display:none;pointer-events:auto;width:100%;box-shadow:0 0 30px rgba(0,255,100,.3)}
.bot-nav.show{display:block;animation:sb-pop .2s ease-out}
.nav-header{color:#00ff64;font-size:10px;text-align:center;margin-bottom:5px;font-weight:bold;letter-spacing:2px;border-bottom:1px solid #004400}
.bot-nav button{display:block;width:100%;background:transparent;border:1px solid #003311;color:#00ff64;padding:10px;margin-bottom:3px;font-family:monospace;font-size:11px;cursor:pointer;text-align:left;transition:all .2s}
.bot-nav button:hover{background:#00ff64;color:#000;padding-left:15px}
/* STATES */
.angry .bot-body{border-color:#ff003c;box-shadow:0 0 30px #ff003c;animation:shake .05s infinite}
.angry .pupil{background:#ff003c;box-shadow:0 0 15px #ff003c;width:8px;height:4px}
.sick .bot-body{border-color:#adff2f;animation:glitch .1s infinite}
.sick .pupil{background:#adff2f;width:18px;height:6px;animation:spin .2s infinite}
.happy .pupil{width:18px;height:18px;background:#00d4ff;box-shadow:0 0 20px #00d4ff}
.happy .bot-body{border-color:#00d4ff}
.zoomies .bot-body{border-color:#ff003c; box-shadow: 0 0 40px #ff003c;}
.vomit-bit{position:absolute;width:8px;height:8px;background:#adff2f;border-radius:50%;pointer-events:none;z-index:-1;box-shadow:0 0 10px #adff2f}
.bot-highlight{animation:glow 1s infinite alternate;border:1px solid #00ff64!important;box-shadow:0 0 30px rgba(0,255,100,.6)!important}
@keyframes spin{100%{transform:translate(-50%,-50%) rotate(360deg)}}
@keyframes shake{0%{transform:translate(2px,2px)}25%{transform:translate(-2px,-2px)}50%{transform:translate(2px,-2px)}75%{transform:translate(-2px,2px)}100%{transform:translate(0,0)}}
@keyframes sb-pop{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}
@keyframes glow{0%{box-shadow:0 0 5px #00ff64}100%{box-shadow:0 0 30px #00ff64}}
@keyframes glitch{0%{transform:translate(0)}20%{transform:translate(-3px,3px)}40%{transform:translate(3px,-3px)}100%{transform:translate(0)}}
</style>`;
document.body.appendChild(container);
// 3. BRAIN LOGIC
const el=document.getElementById('street-bot'), body=document.querySelector('.bot-body'), rotator=document.querySelector('.bot-rotator'), pupil=document.getElementById('bot-pupil'), shutTop=document.getElementById('shutter-top'), shutBot=document.getElementById('shutter-bottom'), bubble=document.getElementById('bot-bubble'), bubbleWrap=document.querySelector('.bot-bubble-wrap'), nav=document.getElementById('bot-nav'), pukeZone=document.getElementById('puke-zone');
let pos={x:window.innerWidth-150,y:window.innerHeight-150}, vel={x:0,y:0}, mouse={x:0,y:0};
let isDragging=false, isSick=false, isTalking=false, isZooming=false;
let shakeScore=0, lastActivity=Date.now(), spokenHistory=[];
let dodgeCount=0;
// KNOWLEDGE
const txt = document.body.innerText.toLowerCase();
const isReviews = !!document.getElementById('reviewsContainer');
const isScripts = txt.includes("farmapram");
const isPressed = txt.includes("pressed");
const isPsych = txt.includes("lsd");
const isClassics = txt.includes("snow");
const LINES={
idle:["You buying?","Secure line.","Check the menu.","Crypto only.","Min order $199.","I'm watching."],
drag:["UNHAND ME!","GET OFF!","DON'T TOUCH!","HANDS OFF!","YOU WANT A PROBLEM?!"],
throw:["TRASH!","CLOWN!","YEET!","WEAK THROW!"],
sick:["๐คข SYSTEM CRASH...","๐คฎ PURGING...","TOO FAST..."],
dodge:["NOPE!","TOO SLOW!","TRY AGAIN!","CATCH ME!","MISSED ME!"],
caught:["OKAY CHILL!","YOU GOT ME.","ALRIGHT DAMN."],
guide:["Check this.", "Look here.", "Top shelf."],
// CONTEXT
scripts:["Pharma grade. No fakes.","Farmapram. Rivotril. Legit.","Straight from the pharmacy."],
pressed:["Street presses. M30s.","Heavy hitters. Watch your dose."],
psy:["Trip safe. Ego death.","LSD Gel Tabs."],
classics:["Pure Snow. High quality.","S-Isomer Ketamine."],
reviews:["We legit. Check the stats.","Real feedback."],
order:["TEMPLATE ONLY. Copy to ProtonMail.","Don't use real names."],
contact:["ProtonMail is safest.","Encrypted comms only."]
};
const pick=arr=>{
if(!arr) return "System online.";
const a=arr.filter(l=>!spokenHistory.includes(l));
const p=a.length>0?a:arr;
const l=p[Math.floor(Math.random()*p.length)];
spokenHistory.push(l);if(spokenHistory.length>10)spokenHistory.shift();return l
};
// --- EXPLAINER LOGIC ---
document.body.addEventListener('mouseover', (e) => {
if (isDragging || isSick || isZooming) return;
const t = e.target;
// Check for specific elements (Only talk, don't shake them)
if (t.closest('.group, .section, .review-card')) {
const item = t.closest('.group, .section, .review-card');
if(item.dataset.botseen) return;
const txt = item.innerText.toLowerCase();
let msg = "Check this.";
if(txt.includes('xanax') || txt.includes('farma')) msg = pick(LINES.scripts);
else if(txt.includes('m30') || txt.includes('press')) msg = pick(LINES.pressed);
else if(txt.includes('lsd') || txt.includes('shroom')) msg = pick(LINES.psy);
else if(txt.includes('snow') || txt.includes('coke')) msg = pick(LINES.classics);
else if(item.classList.contains('review-card')) msg = pick(LINES.reviews);
say(msg, "happy");
highlightElement(item);
item.dataset.botseen = "1";
setTimeout(()=>item.dataset.botseen="", 3000);
}
if (t.closest('.order-form')) say(pick(LINES.order), "angry");
if (t.closest('.contact-section')) say(pick(LINES.contact), "active");
});
// --- PHYSICS ENGINE (STABLE) ---
function loop() {
pos.x>window.innerWidth*.6?(bubbleWrap.style.right='0px',bubbleWrap.style.left='auto',bubbleWrap.style.alignItems='flex-end'):(bubbleWrap.style.left='90px',bubbleWrap.style.right='auto',bubbleWrap.style.alignItems='flex-start');
if (isDragging) {
// Tight Drag
pos.x += (mouse.x - 42 - pos.x) * 0.3;
pos.y += (mouse.y - 42 - pos.y) * 0.3;
vel.x = mouse.x - 42 - pos.x;
vel.y = mouse.y - 42 - pos.y;
if(Math.hypot(vel.x,vel.y)>25) shakeScore+=3; else shakeScore=Math.max(0,shakeScore-0.5);
if(shakeScore>60&&!isSick) getSick();
isZooming=false; dodgeCount=0;
} else {
// DODGE LOGIC
const dist = Math.hypot(mouse.x - (pos.x + 42), mouse.y - (pos.y + 42));
if (!isSick && dist < 120 && dodgeCount < 3) {
const angle = Math.atan2(pos.y - mouse.y, pos.x - mouse.x);
vel.x += Math.cos(angle) * 5;
vel.y += Math.sin(angle) * 5;
if(Math.random()>0.85) say(pick(LINES.dodge), "angry");
dodgeCount += 0.05;
} else if(!isSick && !isZooming) {
// Slow Idle
vel.x += (Math.random()-.5)*0.5;
vel.y += (Math.random()-.5)*0.5;
vel.x *= 0.92; vel.y *= 0.92; // Heavy friction
if(dodgeCount>0) dodgeCount-=0.01;
} else if(isZooming) {
// Fast Zoomies
if(Math.random()>0.9) { vel.x += (Math.random()-.5)*10; vel.y += (Math.random()-.5)*10; }
vel.x *= 0.98; vel.y *= 0.98;
}
pos.x+=vel.x; pos.y+=vel.y;
const maxX=window.innerWidth-90, maxY=window.innerHeight-90;
// Gentle Bounce
if(pos.x<0){pos.x=0;vel.x*=-.7;} if(pos.x>maxX){pos.x=maxX;vel.x*=-.7;}
if(pos.y<0){pos.y=0;vel.y*=-.7;} if(pos.y>maxY){pos.y=maxY;vel.y*=-.7;}
}
if(isNaN(pos.x))pos={x:50,y:50};
el.style.transform = `translate3d(${pos.x}px, ${pos.y}px, 0)`;
const tilt = vel.x * 2;
body.style.transform = `rotate(${tilt}deg)`; // Tilt only, no stretch
if(!isSick && Math.random()>.98) blink();
if(isSick) vomit();
updateEye();
requestAnimationFrame(loop);
}
// --- INPUTS ---
el.addEventListener('mousedown', (e) => {
if (!isSick && dodgeCount < 2 && Math.random()>0.4) {
const a = Math.random() * Math.PI * 2;
vel.x = Math.cos(a)*25; vel.y = Math.sin(a)*25;
dodgeCount++;
say(pick(LINES.dodge), "angry");
} else {
onStart(e.clientX, e.clientY);
if(dodgeCount >= 2) { say(pick(LINES.caught), "active"); dodgeCount=0; }
}
});
el.addEventListener('click', () => {
if(isDragging) { nav.classList.add('show'); say("What you want?", "active"); }
});
function onStart(x, y) { nav.classList.remove('show'); isDragging = true; isSick = false; shakeScore = 0; mouse.x = x; mouse.y = y; setMood('angry'); say(pick(LINES.drag), "angry"); isZooming=false; }
function onMove(x, y) { mouse.x = x; mouse.y = y; lastActivity = Date.now(); }
function onEnd() { if (!isDragging) return; isDragging = false; setMood('normal'); if (Math.hypot(vel.x, vel.y) > 20) { say(pick(LINES.throw), "angry"); isZooming=true; setTimeout(()=>isZooming=false, 3000); } }
window.addEventListener('mousemove', e => onMove(e.clientX, e.clientY));
window.addEventListener('mouseup', onEnd);
window.addEventListener('touchstart', e => { if (e.target.closest('#street-bot')) { e.preventDefault(); onStart(e.touches[0].clientX, e.touches[0].clientY); } }, { passive: false });
window.addEventListener('touchmove', e => { if (isDragging) e.preventDefault(); onMove(e.touches[0].clientX, e.touches[0].clientY); }, { passive: false });
window.addEventListener('touchend', onEnd);
// --- UTILS ---
function highlightElement(e){e.classList.remove('bot-highlight');void e.offsetWidth;e.classList.add('bot-highlight')}
function setMood(m){el.className=m}
function blink(){shutTop.style.height='50%';shutBot.style.height='50%';setTimeout(()=>{shutTop.style.height='0%';shutBot.style.height='0%'},150)}
function updateEye(){if(isSick)return;const dx=mouse.x-(pos.x+42),dy=mouse.y-(pos.y+42),ang=Math.atan2(dy,dx),px=Math.cos(ang)*6,py=Math.sin(ang)*6;pupil.style.transform=`translate(-50%,-50%) translate(${px}px,${py}px)`}
function getSick(){isSick=true;setMood('sick');nav.classList.remove('show');say(pick(LINES.sick),"sick");setTimeout(()=>{isSick=false;setMood('');say("Chill.","active")},5000)}
function vomit(){const p=document.createElement('div');p.className='vomit-bit';p.style.left='45px';p.style.top='50px';pukeZone.appendChild(p);let px=0,py=0,vx=(Math.random()-.5)*15,vy=5+Math.random()*8,l=1;const t=setInterval(()=>{px+=vx;py+=vy;l-=.05;p.style.transform=`translate(${px}px,${py}px)`;p.style.opacity=l;if(l<=0){clearInterval(t);p.remove()}},20)}
let tT;function say(t,m=""){if(isTalking&&m!=="sick")return;isTalking=true;setMood(m);bubble.innerText="";bubble.classList.add('show');let i=0;clearInterval(tT);tT=setInterval(()=>{bubble.innerText=t.slice(0,i)+"โ";i++;if(i>t.length){clearInterval(tT);bubble.innerText=t;setTimeout(()=>{bubble.classList.remove('show');isTalking=false;setMood('')},2500)}},30)}
document.querySelectorAll('.bot-nav button').forEach(b=>{b.addEventListener('click',e=>{e.stopPropagation();const t=b.getAttribute('data-scroll'),a=b.getAttribute('data-action');nav.classList.remove('show');if(a==='close')return;if(a==='home'){window.location.href='
https://codepen.io/Cage-the-typescripter/full/QwNEpaa';return}const s=document.querySelector(t);if(s){s.scrollIntoView({behavior:'smooth',block:'center'});highlightElement(s);say("Check it.","active")}})});
// IDLE TIMER (Slowed down slightly)
setInterval(()=>{if(!isDragging&&!isSick&&!isTalking&&!isZooming&&Math.random()>.8)say(pick(LINES.idle))},10000);
// RANDOM ZOOMIES
setInterval(()=>{if(!isDragging&&!isSick&&!isTalking&&!isZooming&&Math.random()>.9) { isZooming=true; setMood('angry'); setTimeout(()=>isZooming=false, 4000); }}, 8000);
loop();
setTimeout(()=>say("System initialized."),1000);
});
})();
</script>
</body>
</html>