Update index.html
Browse files- index.html +170 -530
index.html
CHANGED
|
@@ -84,7 +84,6 @@
|
|
| 84 |
|
| 85 |
.window.active {
|
| 86 |
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(0, 255, 255, 0.3);
|
| 87 |
-
/* z-index removed to fix stacking issues with JS */
|
| 88 |
}
|
| 89 |
|
| 90 |
.window-header {
|
|
@@ -145,10 +144,6 @@
|
|
| 145 |
text-shadow: 0 0 5px currentColor, 0 0 10px currentColor;
|
| 146 |
}
|
| 147 |
|
| 148 |
-
.neon-border {
|
| 149 |
-
box-shadow: 0 0 10px rgba(0, 255, 255, 0.5), inset 0 0 10px rgba(0, 255, 255, 0.1);
|
| 150 |
-
}
|
| 151 |
-
|
| 152 |
/* Taskbar */
|
| 153 |
.taskbar {
|
| 154 |
background: linear-gradient(180deg, rgba(10, 25, 50, 0.9) 0%, rgba(5, 15, 30, 0.95) 100%);
|
|
@@ -215,15 +210,6 @@
|
|
| 215 |
}
|
| 216 |
|
| 217 |
/* Animations */
|
| 218 |
-
@keyframes pulse-glow {
|
| 219 |
-
0%, 100% { box-shadow: 0 0 20px rgba(0, 255, 255, 0.3); }
|
| 220 |
-
50% { box-shadow: 0 0 30px rgba(0, 255, 255, 0.6); }
|
| 221 |
-
}
|
| 222 |
-
|
| 223 |
-
.animate-pulse-glow {
|
| 224 |
-
animation: pulse-glow 2s infinite;
|
| 225 |
-
}
|
| 226 |
-
|
| 227 |
@keyframes slide-up {
|
| 228 |
from { transform: translateY(100%); opacity: 0; }
|
| 229 |
to { transform: translateY(0); opacity: 1; }
|
|
@@ -233,23 +219,6 @@
|
|
| 233 |
animation: slide-up 0.3s ease-out;
|
| 234 |
}
|
| 235 |
|
| 236 |
-
/* Mobile Responsive */
|
| 237 |
-
@media (max-width: 768px) {
|
| 238 |
-
.window {
|
| 239 |
-
position: fixed !important;
|
| 240 |
-
top: 0 !important;
|
| 241 |
-
left: 0 !important;
|
| 242 |
-
width: 100% !important;
|
| 243 |
-
height: 100% !important;
|
| 244 |
-
border-radius: 0;
|
| 245 |
-
}
|
| 246 |
-
|
| 247 |
-
.desktop-grid {
|
| 248 |
-
grid-template-columns: repeat(3, 1fr);
|
| 249 |
-
}
|
| 250 |
-
}
|
| 251 |
-
|
| 252 |
-
/* Grid Pattern for File Manager */
|
| 253 |
.grid-pattern {
|
| 254 |
background-image:
|
| 255 |
linear-gradient(rgba(0, 255, 255, 0.03) 1px, transparent 1px),
|
|
@@ -307,7 +276,6 @@
|
|
| 307 |
<span class="text-xs text-center font-medium text-pink-100 drop-shadow-md">Calculator</span>
|
| 308 |
</div>
|
| 309 |
|
| 310 |
-
<!-- NEW MASTER SPEC DESKTOP ICON -->
|
| 311 |
<div class="desktop-icon flex flex-col items-center p-3 rounded-lg w-24" onclick="openWindow('spec')">
|
| 312 |
<div class="w-12 h-12 bg-gray-900 rounded-lg flex items-center justify-center mb-2 border border-red-500/30 shadow-lg shadow-red-500/20">
|
| 313 |
<i data-lucide="book-open" class="w-6 h-6 text-red-400"></i>
|
|
@@ -315,7 +283,6 @@
|
|
| 315 |
<span class="text-xs text-center font-medium text-red-100 drop-shadow-md">Master Spec</span>
|
| 316 |
</div>
|
| 317 |
|
| 318 |
-
<!-- NEW XOR'S FAVS DESKTOP ICON -->
|
| 319 |
<div class="desktop-icon flex flex-col items-center p-3 rounded-lg w-24" onclick="openWindow('favs')">
|
| 320 |
<div class="w-12 h-12 bg-gray-900 rounded-lg flex items-center justify-center mb-2 border border-yellow-500/30 shadow-lg shadow-yellow-500/20">
|
| 321 |
<i data-lucide="star" class="w-6 h-6 text-yellow-400"></i>
|
|
@@ -323,6 +290,14 @@
|
|
| 323 |
<span class="text-xs text-center font-medium text-yellow-100 drop-shadow-md">Xor's Favs</span>
|
| 324 |
</div>
|
| 325 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 326 |
<a href="https://ko-fi.com/Z8Z51E5TIG" target="_blank" class="desktop-icon flex flex-col items-center p-3 rounded-lg w-24 no-underline">
|
| 327 |
<div class="w-12 h-12 bg-gray-900 rounded-lg flex items-center justify-center mb-2 border border-orange-500/30 shadow-lg shadow-orange-500/20">
|
| 328 |
<i data-lucide="coffee" class="w-6 h-6 text-orange-400"></i>
|
|
@@ -360,7 +335,7 @@
|
|
| 360 |
<div class="terminal-text text-green-400 space-y-1">
|
| 361 |
<div class="text-cyan-400 font-bold">Xortron Operating System v7.7.7</div>
|
| 362 |
<div class="text-gray-400">Kernel 5.15.0-76-generic x86_64</div>
|
| 363 |
-
<div class="text-gray-500 text-xs mt-2">Last login: <span id="last-login">
|
| 364 |
<div class="mt-4 flex items-center">
|
| 365 |
<span class="text-green-500">root@xortron-os:~#</span>
|
| 366 |
<span class="ml-2 cursor-blink">█</span>
|
|
@@ -391,56 +366,17 @@
|
|
| 391 |
<div class="flex items-center gap-2 text-gray-300 hover:text-cyan-400 cursor-pointer p-1 rounded hover:bg-cyan-900/20 transition"><i data-lucide="monitor" class="w-4 h-4"></i> Desktop</div>
|
| 392 |
<div class="flex items-center gap-2 text-gray-300 hover:text-cyan-400 cursor-pointer p-1 rounded hover:bg-cyan-900/20 transition"><i data-lucide="download" class="w-4 h-4"></i> Downloads</div>
|
| 393 |
<div class="flex items-center gap-2 text-cyan-400 bg-cyan-900/20 p-1 rounded cursor-pointer"><i data-lucide="database" class="w-4 h-4"></i> Data</div>
|
| 394 |
-
<div class="flex items-center gap-2 text-gray-300 hover:text-cyan-400 cursor-pointer p-1 rounded hover:bg-cyan-900/20 transition"><i data-lucide="wifi" class="w-4 h-4"></i> Network</div>
|
| 395 |
-
</div>
|
| 396 |
-
<div class="mt-6 pt-4 border-t border-cyan-900/30">
|
| 397 |
-
<div class="text-xs text-gray-500 mb-2">/root/files</div>
|
| 398 |
-
<button class="w-full py-1 px-2 bg-cyan-900/30 hover:bg-cyan-800/50 border border-cyan-700/50 rounded text-xs text-cyan-300 transition flex items-center justify-center gap-1">
|
| 399 |
-
<i data-lucide="plus" class="w-3 h-3"></i> New Folder
|
| 400 |
-
</button>
|
| 401 |
-
<button class="w-full mt-2 py-1 px-2 bg-cyan-900/30 hover:bg-cyan-800/50 border border-cyan-700/50 rounded text-xs text-cyan-300 transition flex items-center justify-center gap-1">
|
| 402 |
-
<i data-lucide="upload" class="w-3 h-3"></i> Upload
|
| 403 |
-
</button>
|
| 404 |
</div>
|
| 405 |
</div>
|
| 406 |
<div class="flex-1 p-4 bg-black/20 grid-pattern overflow-auto">
|
| 407 |
-
<div class="flex items-center justify-between mb-4">
|
| 408 |
-
<div class="text-xs text-gray-400">Documents > Hack Tools</div>
|
| 409 |
-
<div class="flex gap-2">
|
| 410 |
-
<i data-lucide="grid" class="w-4 h-4 text-cyan-400 cursor-pointer"></i>
|
| 411 |
-
<i data-lucide="list" class="w-4 h-4 text-gray-500 cursor-pointer"></i>
|
| 412 |
-
</div>
|
| 413 |
-
</div>
|
| 414 |
<div class="grid grid-cols-4 gap-3">
|
| 415 |
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group">
|
| 416 |
<i data-lucide="file-code" class="w-8 h-8 text-blue-400 mb-2 group-hover:scale-110 transition"></i>
|
| 417 |
<div class="text-xs text-gray-300 truncate">script.py</div>
|
| 418 |
-
<div class="text-[10px] text-gray-500">2.4 KB</div>
|
| 419 |
-
</div>
|
| 420 |
-
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group">
|
| 421 |
-
<i data-lucide="file-text" class="w-8 h-8 text-yellow-400 mb-2 group-hover:scale-110 transition"></i>
|
| 422 |
-
<div class="text-xs text-gray-300 truncate">Weaponizer.txt</div>
|
| 423 |
-
<div class="text-[10px] text-gray-500">15 KB</div>
|
| 424 |
</div>
|
| 425 |
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group">
|
| 426 |
<i data-lucide="file-archive" class="w-8 h-8 text-red-400 mb-2 group-hover:scale-110 transition"></i>
|
| 427 |
-
<div class="text-xs text-gray-300 truncate">
|
| 428 |
-
<div class="text-[10px] text-gray-500">45 MB</div>
|
| 429 |
-
</div>
|
| 430 |
-
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group">
|
| 431 |
-
<i data-lucide="key" class="w-8 h-8 text-green-400 mb-2 group-hover:scale-110 transition"></i>
|
| 432 |
-
<div class="text-xs text-gray-300 truncate">keys.asc</div>
|
| 433 |
-
<div class="text-[10px] text-gray-500">4 KB</div>
|
| 434 |
-
</div>
|
| 435 |
-
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group">
|
| 436 |
-
<i data-lucide="database" class="w-8 h-8 text-purple-400 mb-2 group-hover:scale-110 transition"></i>
|
| 437 |
-
<div class="text-xs text-gray-300 truncate">passwords.db</div>
|
| 438 |
-
<div class="text-[10px] text-gray-500">Encrypted</div>
|
| 439 |
-
</div>
|
| 440 |
-
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group border-pink-500/30">
|
| 441 |
-
<i data-lucide="globe" class="w-8 h-8 text-pink-400 mb-2 group-hover:scale-110 transition"></i>
|
| 442 |
-
<div class="text-xs text-gray-300 truncate">PornHub.com</div>
|
| 443 |
-
<div class="text-[10px] text-gray-500">Shortcut</div>
|
| 444 |
</div>
|
| 445 |
</div>
|
| 446 |
</div>
|
|
@@ -455,7 +391,6 @@
|
|
| 455 |
<span class="text-sm font-medium text-red-100">Hack Tools v3.1.4</span>
|
| 456 |
</div>
|
| 457 |
<div class="flex items-center gap-2">
|
| 458 |
-
<span class="text-xs text-red-400 font-mono mr-2 animate-pulse">[Encrypted Connection Active]</span>
|
| 459 |
<div class="window-btn btn-min" onclick="minimizeWindow('hacktools')"></div>
|
| 460 |
<div class="window-btn btn-max" onclick="maximizeWindow('hacktools')"></div>
|
| 461 |
<div class="window-btn btn-close" onclick="closeWindow('hacktools')"></div>
|
|
@@ -463,78 +398,11 @@
|
|
| 463 |
</div>
|
| 464 |
<div class="p-6 h-[calc(100%-40px)] overflow-auto bg-black/40">
|
| 465 |
<div class="grid grid-cols-2 gap-4">
|
| 466 |
-
<div class="glass-panel p-4 rounded-lg
|
| 467 |
-
<div class="
|
| 468 |
-
<div class="p-2 bg-red-500/20 rounded-lg">
|
| 469 |
-
<i data-lucide="scan-line" class="w-5 h-5 text-red-400"></i>
|
| 470 |
-
</div>
|
| 471 |
-
<div class="font-semibold text-red-100">Port Scanner</div>
|
| 472 |
-
</div>
|
| 473 |
-
<div class="text-xs text-gray-400">Scan for open ports and services</div>
|
| 474 |
-
</div>
|
| 475 |
-
|
| 476 |
-
<div class="glass-panel p-4 rounded-lg hover:bg-orange-900/10 cursor-pointer transition group border border-transparent hover:border-orange-500/30">
|
| 477 |
-
<div class="flex items-center gap-3 mb-2">
|
| 478 |
-
<div class="p-2 bg-orange-500/20 rounded-lg">
|
| 479 |
-
<i data-lucide="hammer" class="w-5 h-5 text-orange-400"></i>
|
| 480 |
-
</div>
|
| 481 |
-
<div class="font-semibold text-orange-100">Brute Force</div>
|
| 482 |
-
</div>
|
| 483 |
-
<div class="text-xs text-gray-400">Password cracking utility</div>
|
| 484 |
-
</div>
|
| 485 |
-
|
| 486 |
-
<div class="glass-panel p-4 rounded-lg hover:bg-blue-900/10 cursor-pointer transition group border border-transparent hover:border-blue-500/30">
|
| 487 |
-
<div class="flex items-center gap-3 mb-2">
|
| 488 |
-
<div class="p-2 bg-blue-500/20 rounded-lg">
|
| 489 |
-
<i data-lucide="database" class="w-5 h-5 text-blue-400"></i>
|
| 490 |
-
</div>
|
| 491 |
-
<div class="font-semibold text-blue-100">SQL Inject</div>
|
| 492 |
-
</div>
|
| 493 |
-
<div class="text-xs text-gray-400">Database penetration tool</div>
|
| 494 |
-
</div>
|
| 495 |
-
|
| 496 |
-
<div class="glass-panel p-4 rounded-lg hover:bg-purple-900/10 cursor-pointer transition group border border-transparent hover:border-purple-500/30">
|
| 497 |
-
<div class="flex items-center gap-3 mb-2">
|
| 498 |
-
<div class="p-2 bg-purple-500/20 rounded-lg">
|
| 499 |
-
<i data-lucide="git-compare" class="w-5 h-5 text-purple-400"></i>
|
| 500 |
-
</div>
|
| 501 |
-
<div class="font-semibold text-purple-100">MITM</div>
|
| 502 |
-
</div>
|
| 503 |
-
<div class="text-xs text-gray-400">Man-in-the-middle attack</div>
|
| 504 |
</div>
|
| 505 |
-
|
| 506 |
-
|
| 507 |
-
<div class="flex items-center gap-3 mb-2">
|
| 508 |
-
<div class="p-2 bg-yellow-500/20 rounded-lg">
|
| 509 |
-
<i data-lucide="bug" class="w-5 h-5 text-yellow-400"></i>
|
| 510 |
-
</div>
|
| 511 |
-
<div class="font-semibold text-yellow-100">Exploit DB</div>
|
| 512 |
-
</div>
|
| 513 |
-
<div class="text-xs text-gray-400">Vulnerability database</div>
|
| 514 |
-
</div>
|
| 515 |
-
|
| 516 |
-
<div class="glass-panel p-4 rounded-lg hover:bg-green-900/10 cursor-pointer transition group border border-transparent hover:border-green-500/30">
|
| 517 |
-
<div class="flex items-center gap-3 mb-2">
|
| 518 |
-
<div class="p-2 bg-green-500/20 rounded-lg">
|
| 519 |
-
<i data-lucide="user-x" class="w-5 h-5 text-green-400"></i>
|
| 520 |
-
</div>
|
| 521 |
-
<div class="font-semibold text-green-100">Anonymizer</div>
|
| 522 |
-
</div>
|
| 523 |
-
<div class="text-xs text-gray-400">TOR/VPN configuration</div>
|
| 524 |
-
</div>
|
| 525 |
-
</div>
|
| 526 |
-
|
| 527 |
-
<div class="mt-6 p-4 glass-panel rounded-lg border border-red-500/20">
|
| 528 |
-
<div class="flex items-center gap-2 text-red-400 text-sm font-mono mb-2">
|
| 529 |
-
<i data-lucide="activity" class="w-4 h-4 animate-pulse"></i>
|
| 530 |
-
<span>SYSTEM STATUS: ARMED</span>
|
| 531 |
-
</div>
|
| 532 |
-
<div class="w-full bg-gray-800 rounded-full h-2 overflow-hidden">
|
| 533 |
-
<div class="bg-gradient-to-r from-red-500 to-orange-500 h-full w-[78%] animate-pulse"></div>
|
| 534 |
-
</div>
|
| 535 |
-
<div class="flex justify-between text-xs text-gray-500 mt-1 font-mono">
|
| 536 |
-
<span>Threat Level: HIGH</span>
|
| 537 |
-
<span>78%</span>
|
| 538 |
</div>
|
| 539 |
</div>
|
| 540 |
</div>
|
|
@@ -548,97 +416,14 @@
|
|
| 548 |
<span class="text-sm font-medium text-green-100">Network Monitor</span>
|
| 549 |
</div>
|
| 550 |
<div class="flex items-center gap-2">
|
| 551 |
-
<span class="text-xs text-green-400 font-mono mr-2 animate-pulse">12 active connections</span>
|
| 552 |
<div class="window-btn btn-min" onclick="minimizeWindow('network')"></div>
|
| 553 |
<div class="window-btn btn-max" onclick="maximizeWindow('network')"></div>
|
| 554 |
<div class="window-btn btn-close" onclick="closeWindow('network')"></div>
|
| 555 |
</div>
|
| 556 |
</div>
|
| 557 |
-
<div class="
|
| 558 |
-
<div class="
|
| 559 |
-
<
|
| 560 |
-
<div class="text-xs text-gray-400 uppercase tracking-wider">Bandwidth Usage</div>
|
| 561 |
-
<div class="font-mono text-green-400">
|
| 562 |
-
<span id="download-speed">3.7</span> MB/s ↓ | <span id="upload-speed">1.2</span> MB/s ↑
|
| 563 |
-
</div>
|
| 564 |
-
</div>
|
| 565 |
-
<div class="flex gap-1 h-16">
|
| 566 |
-
<!-- Simulated graph bars -->
|
| 567 |
-
<div class="flex-1 bg-green-500/20 rounded-sm relative overflow-hidden">
|
| 568 |
-
<div class="absolute bottom-0 left-0 right-0 bg-green-500/60 transition-all duration-500" style="height: 45%"></div>
|
| 569 |
-
</div>
|
| 570 |
-
<div class="flex-1 bg-green-500/20 rounded-sm relative overflow-hidden">
|
| 571 |
-
<div class="absolute bottom-0 left-0 right-0 bg-green-500/60 transition-all duration-500" style="height: 72%"></div>
|
| 572 |
-
</div>
|
| 573 |
-
<div class="flex-1 bg-green-500/20 rounded-sm relative overflow-hidden">
|
| 574 |
-
<div class="absolute bottom-0 left-0 right-0 bg-green-500/60 transition-all duration-500" style="height: 30%"></div>
|
| 575 |
-
</div>
|
| 576 |
-
<div class="flex-1 bg-green-500/20 rounded-sm relative overflow-hidden">
|
| 577 |
-
<div class="absolute bottom-0 left-0 right-0 bg-green-500/60 transition-all duration-500" style="height: 85%"></div>
|
| 578 |
-
</div>
|
| 579 |
-
<div class="flex-1 bg-green-500/20 rounded-sm relative overflow-hidden">
|
| 580 |
-
<div class="absolute bottom-0 left-0 right-0 bg-green-500/60 transition-all duration-500" style="height: 55%"></div>
|
| 581 |
-
</div>
|
| 582 |
-
<div class="flex-1 bg-green-500/20 rounded-sm relative overflow-hidden">
|
| 583 |
-
<div class="absolute bottom-0 left-0 right-0 bg-green-500/60 transition-all duration-500" style="height: 40%"></div>
|
| 584 |
-
</div>
|
| 585 |
-
</div>
|
| 586 |
-
</div>
|
| 587 |
-
|
| 588 |
-
<div class="flex flex-1 overflow-hidden">
|
| 589 |
-
<div class="w-1/2 p-4 border-r border-cyan-900/30 overflow-auto">
|
| 590 |
-
<div class="text-xs text-gray-400 uppercase tracking-wider mb-3">Active Connections</div>
|
| 591 |
-
<div class="space-y-2 font-mono text-xs">
|
| 592 |
-
<div class="flex items-center justify-between p-2 glass-panel rounded hover:bg-cyan-900/20 transition cursor-pointer">
|
| 593 |
-
<span class="text-cyan-300">192.168.1.1:443</span>
|
| 594 |
-
<span class="text-green-400 text-[10px]">ENCRYPTED</span>
|
| 595 |
-
</div>
|
| 596 |
-
<div class="flex items-center justify-between p-2 glass-panel rounded hover:bg-cyan-900/20 transition cursor-pointer">
|
| 597 |
-
<span class="text-cyan-300">104.18.25.36:80</span>
|
| 598 |
-
<span class="text-yellow-400 text-[10px]">UNSECURED</span>
|
| 599 |
-
</div>
|
| 600 |
-
<div class="flex items-center justify-between p-2 glass-panel rounded hover:bg-cyan-900/20 transition cursor-pointer border border-red-500/30">
|
| 601 |
-
<span class="text-cyan-300">74.91.123.45:3306</span>
|
| 602 |
-
<span class="text-red-400 text-[10px] animate-pulse">VULNERABLE</span>
|
| 603 |
-
</div>
|
| 604 |
-
<div class="flex items-center justify-between p-2 glass-panel rounded hover:bg-cyan-900/20 transition cursor-pointer">
|
| 605 |
-
<span class="text-cyan-300">192.168.1.105:8080</span>
|
| 606 |
-
<span class="text-green-400 text-[10px]">LOCAL</span>
|
| 607 |
-
</div>
|
| 608 |
-
</div>
|
| 609 |
-
</div>
|
| 610 |
-
|
| 611 |
-
<div class="w-1/2 p-4 overflow-auto font-mono text-xs">
|
| 612 |
-
<div class="text-xs text-gray-400 uppercase tracking-wider mb-3">Network Map</div>
|
| 613 |
-
<div class="space-y-3">
|
| 614 |
-
<div class="flex items-start gap-2">
|
| 615 |
-
<i data-lucide="corner-down-right" class="w-4 h-4 text-cyan-600 mt-1"></i>
|
| 616 |
-
<div>
|
| 617 |
-
<div class="text-cyan-400">[YOU] 192.168.1.105</div>
|
| 618 |
-
<div class="flex items-start gap-2 mt-1 ml-4">
|
| 619 |
-
<i data-lucide="corner-down-right" class="w-4 h-4 text-cyan-600 mt-1"></i>
|
| 620 |
-
<div>
|
| 621 |
-
<div class="text-cyan-300">Router 192.168.1.1</div>
|
| 622 |
-
<div class="flex items-start gap-2 mt-1 ml-4 flex-col">
|
| 623 |
-
<div class="flex items-center gap-2">
|
| 624 |
-
<i data-lucide="minus" class="w-4 h-4 text-cyan-600"></i>
|
| 625 |
-
<span class="text-gray-400">Device 192.168.1.102 (Mobile)</span>
|
| 626 |
-
</div>
|
| 627 |
-
<div class="flex items-center gap-2">
|
| 628 |
-
<i data-lucide="minus" class="w-4 h-4 text-cyan-600"></i>
|
| 629 |
-
<span class="text-gray-400">Device 192.168.1.103 (Laptop)</span>
|
| 630 |
-
</div>
|
| 631 |
-
</div>
|
| 632 |
-
</div>
|
| 633 |
-
</div>
|
| 634 |
-
<div class="flex items-start gap-2 mt-1 ml-4">
|
| 635 |
-
<i data-lucide="corner-down-right" class="w-4 h-4 text-purple-600 mt-1"></i>
|
| 636 |
-
<div class="text-purple-400">[TOR Exit Node] 74.125.24.102</div>
|
| 637 |
-
</div>
|
| 638 |
-
</div>
|
| 639 |
-
</div>
|
| 640 |
-
</div>
|
| 641 |
-
</div>
|
| 642 |
</div>
|
| 643 |
</div>
|
| 644 |
</div>
|
|
@@ -651,41 +436,14 @@
|
|
| 651 |
<span class="text-sm font-medium text-purple-100">Xortron Browser</span>
|
| 652 |
</div>
|
| 653 |
<div class="flex items-center gap-2">
|
| 654 |
-
<span class="text-xs text-purple-400 font-mono mr-2 flex items-center gap-1">
|
| 655 |
-
<span class="w-2 h-2 bg-green-400 rounded-full animate-pulse"></span>
|
| 656 |
-
[Secure Connection]
|
| 657 |
-
</span>
|
| 658 |
<div class="window-btn btn-min" onclick="minimizeWindow('browser')"></div>
|
| 659 |
<div class="window-btn btn-max" onclick="maximizeWindow('browser')"></div>
|
| 660 |
<div class="window-btn btn-close" onclick="closeWindow('browser')"></div>
|
| 661 |
</div>
|
| 662 |
</div>
|
| 663 |
<div class="flex flex-col h-[calc(100%-40px)] bg-gray-900">
|
| 664 |
-
<div class="flex items-center gap-2 p-2 bg-gray-800/50 border-b border-gray-700">
|
| 665 |
-
<div class="flex gap-1">
|
| 666 |
-
<button class="p-1 hover:bg-gray-700 rounded text-gray-400" onclick="browserBack()"><i data-lucide="arrow-left" class="w-4 h-4"></i></button>
|
| 667 |
-
<button class="p-1 hover:bg-gray-700 rounded text-gray-400" onclick="browserForward()"><i data-lucide="arrow-right" class="w-4 h-4"></i></button>
|
| 668 |
-
<button class="p-1 hover:bg-gray-700 rounded text-gray-400" onclick="browserRefresh()"><i data-lucide="refresh-cw" class="w-4 h-4"></i></button>
|
| 669 |
-
</div>
|
| 670 |
-
<div class="flex-1 flex items-center gap-2 bg-gray-800 rounded-lg px-3 py-1 border border-gray-700">
|
| 671 |
-
<i data-lucide="lock" class="w-3 h-3 text-green-400"></i>
|
| 672 |
-
<input type="text" id="browser-url" value="https://darkc0de-chat.hf.space/" class="bg-transparent border-none outline-none text-sm text-gray-300 flex-1 font-mono" onkeydown="if(event.key==='Enter')browserNavigate()">
|
| 673 |
-
<button onclick="browserNavigate()" class="p-1 hover:bg-gray-700 rounded text-gray-400">
|
| 674 |
-
<i data-lucide="search" class="w-3 h-3"></i>
|
| 675 |
-
</button>
|
| 676 |
-
</div>
|
| 677 |
-
<div class="flex gap-1">
|
| 678 |
-
<button class="p-1 hover:bg-gray-700 rounded text-gray-400" onclick="browserHome()"><i data-lucide="home" class="w-4 h-4"></i></button>
|
| 679 |
-
</div>
|
| 680 |
-
</div>
|
| 681 |
<div class="flex-1 relative bg-black/40 overflow-hidden">
|
| 682 |
<iframe id="browser-frame" src="https://darkc0de-chat.hf.space/" class="w-full h-full border-none" sandbox="allow-scripts allow-same-origin allow-forms allow-popups"></iframe>
|
| 683 |
-
<div id="browser-loading" class="absolute inset-0 bg-gray-900/90 flex items-center justify-center hidden">
|
| 684 |
-
<div class="flex flex-col items-center gap-3">
|
| 685 |
-
<div class="w-12 h-12 border-4 border-purple-500/30 border-t-purple-400 rounded-full animate-spin"></div>
|
| 686 |
-
<span class="text-purple-400 font-mono text-sm">Loading...</span>
|
| 687 |
-
</div>
|
| 688 |
-
</div>
|
| 689 |
</div>
|
| 690 |
</div>
|
| 691 |
</div>
|
|
@@ -698,7 +456,6 @@
|
|
| 698 |
<span class="text-sm font-medium text-pink-100">Xortron-Calc</span>
|
| 699 |
</div>
|
| 700 |
<div class="flex items-center gap-2">
|
| 701 |
-
<span class="text-xs text-gray-400 font-mono mr-2">v1.0</span>
|
| 702 |
<div class="window-btn btn-min" onclick="minimizeWindow('calculator')"></div>
|
| 703 |
<div class="window-btn btn-max" onclick="maximizeWindow('calculator')"></div>
|
| 704 |
<div class="window-btn btn-close" onclick="closeWindow('calculator')"></div>
|
|
@@ -709,31 +466,6 @@
|
|
| 709 |
<div id="calc-history" class="text-xs text-gray-500 font-mono text-right mb-1 h-4"></div>
|
| 710 |
<div id="calc-display" class="text-3xl text-pink-100 font-mono text-right truncate">0</div>
|
| 711 |
</div>
|
| 712 |
-
<div class="grid grid-cols-4 gap-2 flex-1">
|
| 713 |
-
<button onclick="calcClear()" class="bg-red-500/20 hover:bg-red-500/30 text-red-400 rounded-lg font-semibold transition border border-red-500/30">C</button>
|
| 714 |
-
<button onclick="calcOperator('(')" class="glass-panel hover:bg-pink-900/20 text-pink-300 rounded-lg font-semibold transition">(</button>
|
| 715 |
-
<button onclick="calcOperator(')')" class="glass-panel hover:bg-pink-900/20 text-pink-300 rounded-lg font-semibold transition">)</button>
|
| 716 |
-
<button onclick="calcOperator('/')" class="bg-pink-500/20 hover:bg-pink-500/30 text-pink-400 rounded-lg font-semibold transition border border-pink-500/30">÷</button>
|
| 717 |
-
|
| 718 |
-
<button onclick="calcNumber('7')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">7</button>
|
| 719 |
-
<button onclick="calcNumber('8')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">8</button>
|
| 720 |
-
<button onclick="calcNumber('9')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">9</button>
|
| 721 |
-
<button onclick="calcOperator('*')" class="bg-pink-500/20 hover:bg-pink-500/30 text-pink-400 rounded-lg font-semibold transition border border-pink-500/30">×</button>
|
| 722 |
-
|
| 723 |
-
<button onclick="calcNumber('4')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">4</button>
|
| 724 |
-
<button onclick="calcNumber('5')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">5</button>
|
| 725 |
-
<button onclick="calcNumber('6')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">6</button>
|
| 726 |
-
<button onclick="calcOperator('-')" class="bg-pink-500/20 hover:bg-pink-500/30 text-pink-400 rounded-lg font-semibold transition border border-pink-500/30">-</button>
|
| 727 |
-
|
| 728 |
-
<button onclick="calcNumber('1')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">1</button>
|
| 729 |
-
<button onclick="calcNumber('2')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">2</button>
|
| 730 |
-
<button onclick="calcNumber('3')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">3</button>
|
| 731 |
-
<button onclick="calcOperator('+')" class="bg-pink-500/20 hover:bg-pink-500/30 text-pink-400 rounded-lg font-semibold transition border border-pink-500/30">+</button>
|
| 732 |
-
|
| 733 |
-
<button onclick="calcNumber('0')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg col-span-2">0</button>
|
| 734 |
-
<button onclick="calcNumber('.')" class="glass-panel hover:bg-gray-700/50 text-gray-200 rounded-lg font-semibold transition text-lg">.</button>
|
| 735 |
-
<button onclick="calcEquals()" class="bg-pink-500 hover:bg-pink-400 text-white rounded-lg font-bold transition text-xl shadow-lg shadow-pink-500/30">=</button>
|
| 736 |
-
</div>
|
| 737 |
</div>
|
| 738 |
</div>
|
| 739 |
|
|
@@ -745,10 +477,6 @@
|
|
| 745 |
<span class="text-sm font-medium text-red-100">Xortron Master Spec</span>
|
| 746 |
</div>
|
| 747 |
<div class="flex items-center gap-2">
|
| 748 |
-
<span class="text-xs text-red-400 font-mono mr-2 flex items-center gap-1">
|
| 749 |
-
<span class="w-2 h-2 bg-red-400 rounded-full animate-pulse"></span>
|
| 750 |
-
[Classified Document]
|
| 751 |
-
</span>
|
| 752 |
<div class="window-btn btn-min" onclick="minimizeWindow('spec')"></div>
|
| 753 |
<div class="window-btn btn-max" onclick="maximizeWindow('spec')"></div>
|
| 754 |
<div class="window-btn btn-close" onclick="closeWindow('spec')"></div>
|
|
@@ -759,7 +487,7 @@
|
|
| 759 |
</div>
|
| 760 |
</div>
|
| 761 |
|
| 762 |
-
<!--
|
| 763 |
<div id="window-favs" class="window glass-strong pointer-events-auto hidden" style="top: 8%; left: 18%; width: 400px; height: 700px; z-index: 56;">
|
| 764 |
<div class="window-header flex items-center justify-between px-4 py-2 select-none" onmousedown="startDrag(event, 'window-favs')">
|
| 765 |
<div class="flex items-center gap-2">
|
|
@@ -767,10 +495,6 @@
|
|
| 767 |
<span class="text-sm font-medium text-yellow-100">Xor's Favorites</span>
|
| 768 |
</div>
|
| 769 |
<div class="flex items-center gap-2">
|
| 770 |
-
<span class="text-xs text-yellow-400 font-mono mr-2 flex items-center gap-1">
|
| 771 |
-
<span class="w-2 h-2 bg-yellow-400 rounded-full animate-pulse"></span>
|
| 772 |
-
[Saved Bookmarks]
|
| 773 |
-
</span>
|
| 774 |
<div class="window-btn btn-min" onclick="minimizeWindow('favs')"></div>
|
| 775 |
<div class="window-btn btn-max" onclick="maximizeWindow('favs')"></div>
|
| 776 |
<div class="window-btn btn-close" onclick="closeWindow('favs')"></div>
|
|
@@ -781,20 +505,33 @@
|
|
| 781 |
</div>
|
| 782 |
</div>
|
| 783 |
|
| 784 |
-
|
| 785 |
-
|
| 786 |
-
|
| 787 |
-
|
| 788 |
-
|
| 789 |
-
|
| 790 |
-
|
| 791 |
-
<div class="
|
| 792 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 793 |
</div>
|
| 794 |
-
<button class="ml-auto text-gray-400 hover:text-white" onclick="document.getElementById('system-alert').style.display='none'">
|
| 795 |
-
<i data-lucide="x" class="w-4 h-4"></i>
|
| 796 |
-
</button>
|
| 797 |
</div>
|
|
|
|
| 798 |
</div>
|
| 799 |
|
| 800 |
<!-- Taskbar -->
|
|
@@ -824,28 +561,26 @@
|
|
| 824 |
<button class="taskbar-icon w-10 h-10 rounded-lg flex items-center justify-center" onclick="openWindow('calculator')" id="taskbar-calculator">
|
| 825 |
<i data-lucide="calculator" class="w-5 h-5 text-pink-400"></i>
|
| 826 |
</button>
|
| 827 |
-
<!-- MASTER SPEC TASKBAR ICON -->
|
| 828 |
<button class="taskbar-icon w-10 h-10 rounded-lg flex items-center justify-center" onclick="openWindow('spec')" id="taskbar-spec">
|
| 829 |
<i data-lucide="book-open" class="w-5 h-5 text-red-400"></i>
|
| 830 |
</button>
|
| 831 |
-
<!-- NEW XOR'S FAVS TASKBAR ICON -->
|
| 832 |
<button class="taskbar-icon w-10 h-10 rounded-lg flex items-center justify-center" onclick="openWindow('favs')" id="taskbar-favs">
|
| 833 |
<i data-lucide="star" class="w-5 h-5 text-yellow-400"></i>
|
| 834 |
</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 835 |
</div>
|
| 836 |
|
| 837 |
<div class="flex items-center gap-4 px-4 py-2 glass-panel rounded-lg">
|
| 838 |
-
<div class="flex items-center gap-2 text-xs font-mono">
|
| 839 |
-
<span class="w-2 h-2 bg-green-400 rounded-full animate-pulse"></span>
|
| 840 |
-
<span class="text-green-400">VPN:ON</span>
|
| 841 |
-
</div>
|
| 842 |
-
<div class="w-px h-4 bg-gray-600"></div>
|
| 843 |
<div class="text-xs font-mono text-gray-300" id="clock">03:57 AM</div>
|
| 844 |
<div class="text-xs text-gray-500" id="date">Wed, Mar 18</div>
|
| 845 |
</div>
|
| 846 |
</div>
|
| 847 |
|
| 848 |
-
<!-- Start Menu
|
| 849 |
<div id="start-menu" class="fixed bottom-16 left-4 w-64 glass-strong rounded-xl border border-cyan-500/20 shadow-2xl transform translate-y-4 opacity-0 pointer-events-none transition-all duration-200 z-[998]">
|
| 850 |
<div class="p-4 border-b border-cyan-900/30">
|
| 851 |
<div class="flex items-center gap-3">
|
|
@@ -877,29 +612,22 @@
|
|
| 877 |
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-pink-900/20 transition text-left text-sm text-gray-300" onclick="openWindow('calculator'); toggleStartMenu()">
|
| 878 |
<i data-lucide="calculator" class="w-4 h-4 text-pink-400"></i> Calculator
|
| 879 |
</button>
|
| 880 |
-
|
| 881 |
-
<!-- MASTER SPEC START MENU ITEM -->
|
| 882 |
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-red-900/20 transition text-left text-sm text-gray-300" onclick="openWindow('spec'); toggleStartMenu()">
|
| 883 |
<i data-lucide="book-open" class="w-4 h-4 text-red-400"></i> Master Spec
|
| 884 |
</button>
|
| 885 |
-
|
| 886 |
-
<!-- NEW XOR'S FAVS START MENU ITEM -->
|
| 887 |
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-yellow-900/20 transition text-left text-sm text-gray-300" onclick="openWindow('favs'); toggleStartMenu()">
|
| 888 |
<i data-lucide="star" class="w-4 h-4 text-yellow-400"></i> Xor's Favs
|
| 889 |
</button>
|
| 890 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 891 |
<div class="border-t border-cyan-900/30 my-2"></div>
|
| 892 |
<a href="https://ko-fi.com/Z8Z51E5TIG" target="_blank" class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-orange-900/20 transition text-left text-sm text-gray-300 no-underline" onclick="toggleStartMenu()">
|
| 893 |
<i data-lucide="coffee" class="w-4 h-4 text-orange-400"></i> Buy me a coffee
|
| 894 |
</a>
|
| 895 |
-
<a href="https://huggingface.co/darkc0de" target="_blank" class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-yellow-900/20 transition text-left text-sm text-gray-300 no-underline" onclick="toggleStartMenu()">
|
| 896 |
-
<i data-lucide="smile" class="w-4 h-4 text-yellow-400"></i> Visit the Dev on HF
|
| 897 |
-
</a>
|
| 898 |
-
</div>
|
| 899 |
-
<div class="p-2 border-t border-cyan-900/30">
|
| 900 |
-
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-red-900/20 transition text-left text-sm text-red-400">
|
| 901 |
-
<i data-lucide="power" class="w-4 h-4"></i> Shutdown
|
| 902 |
-
</button>
|
| 903 |
</div>
|
| 904 |
</div>
|
| 905 |
|
|
@@ -934,10 +662,8 @@
|
|
| 934 |
window.style.zIndex = ++zIndexCounter;
|
| 935 |
window.classList.add('active');
|
| 936 |
|
| 937 |
-
// Update taskbar
|
| 938 |
if (taskbarBtn) taskbarBtn.classList.add('active');
|
| 939 |
|
| 940 |
-
// Animate opening
|
| 941 |
window.style.transform = 'scale(0.9)';
|
| 942 |
window.style.opacity = '0';
|
| 943 |
setTimeout(() => {
|
|
@@ -945,10 +671,8 @@
|
|
| 945 |
window.style.opacity = '1';
|
| 946 |
}, 10);
|
| 947 |
} else {
|
| 948 |
-
// If already open, just focus it
|
| 949 |
focusWindow(windowId);
|
| 950 |
}
|
| 951 |
-
|
| 952 |
activeWindow = windowId;
|
| 953 |
}
|
| 954 |
|
|
@@ -985,14 +709,12 @@
|
|
| 985 |
const window = document.getElementById(`window-${windowId}`);
|
| 986 |
|
| 987 |
if (window.dataset.maximized === 'true') {
|
| 988 |
-
// Restore
|
| 989 |
window.style.width = window.dataset.prevWidth;
|
| 990 |
window.style.height = window.dataset.prevHeight;
|
| 991 |
window.style.top = window.dataset.prevTop;
|
| 992 |
window.style.left = window.dataset.prevLeft;
|
| 993 |
window.dataset.maximized = 'false';
|
| 994 |
} else {
|
| 995 |
-
// Maximize
|
| 996 |
window.dataset.prevWidth = window.style.width;
|
| 997 |
window.dataset.prevHeight = window.style.height;
|
| 998 |
window.dataset.prevTop = window.style.top;
|
|
@@ -1010,22 +732,19 @@
|
|
| 1010 |
const window = document.getElementById(`window-${windowId}`);
|
| 1011 |
window.style.zIndex = ++zIndexCounter;
|
| 1012 |
|
| 1013 |
-
// Remove active class from all windows
|
| 1014 |
document.querySelectorAll('.window').forEach(w => w.classList.remove('active'));
|
| 1015 |
window.classList.add('active');
|
| 1016 |
}
|
| 1017 |
|
| 1018 |
-
// Drag functionality
|
| 1019 |
function startDrag(e, windowId) {
|
| 1020 |
-
if (e.target.closest('.window-btn')) return;
|
| 1021 |
|
| 1022 |
const window = document.getElementById(windowId);
|
| 1023 |
-
if (window.dataset.maximized === 'true') return;
|
| 1024 |
|
| 1025 |
isDragging = true;
|
| 1026 |
draggedWindow = window;
|
| 1027 |
|
| 1028 |
-
// TEMPORARILY DISABLE IFRAMES SO THEY DON'T TRAP THE MOUSE
|
| 1029 |
document.querySelectorAll('iframe').forEach(iframe => {
|
| 1030 |
iframe.style.pointerEvents = 'none';
|
| 1031 |
});
|
|
@@ -1043,7 +762,6 @@
|
|
| 1043 |
let x = e.clientX - dragOffset.x;
|
| 1044 |
let y = e.clientY - dragOffset.y;
|
| 1045 |
|
| 1046 |
-
// Keep within bounds
|
| 1047 |
x = Math.max(0, Math.min(x, window.innerWidth - draggedWindow.offsetWidth));
|
| 1048 |
y = Math.max(0, Math.min(y, window.innerHeight - draggedWindow.offsetHeight - 56));
|
| 1049 |
|
|
@@ -1055,13 +773,11 @@
|
|
| 1055 |
isDragging = false;
|
| 1056 |
draggedWindow = null;
|
| 1057 |
|
| 1058 |
-
// RE-ENABLE IFRAMES
|
| 1059 |
document.querySelectorAll('iframe').forEach(iframe => {
|
| 1060 |
iframe.style.pointerEvents = 'auto';
|
| 1061 |
});
|
| 1062 |
});
|
| 1063 |
|
| 1064 |
-
// Add click handlers to windows for focus
|
| 1065 |
document.querySelectorAll('.window').forEach(window => {
|
| 1066 |
window.addEventListener('mousedown', () => {
|
| 1067 |
const id = window.id.replace('window-', '');
|
|
@@ -1069,7 +785,6 @@
|
|
| 1069 |
});
|
| 1070 |
});
|
| 1071 |
|
| 1072 |
-
// Start Menu Toggle
|
| 1073 |
function toggleStartMenu() {
|
| 1074 |
const menu = document.getElementById('start-menu');
|
| 1075 |
if (menu.classList.contains('opacity-0')) {
|
|
@@ -1079,35 +794,15 @@
|
|
| 1079 |
}
|
| 1080 |
}
|
| 1081 |
|
| 1082 |
-
// Close start menu when clicking outside
|
| 1083 |
document.addEventListener('click', (e) => {
|
| 1084 |
const menu = document.getElementById('start-menu');
|
| 1085 |
const btn = document.querySelector('[onclick="toggleStartMenu()"]');
|
| 1086 |
|
| 1087 |
-
if (!menu.contains(e.target) && !btn.contains(e.target)) {
|
| 1088 |
menu.classList.add('opacity-0', 'pointer-events-none', 'translate-y-4');
|
| 1089 |
}
|
| 1090 |
});
|
| 1091 |
|
| 1092 |
-
// Simulate network traffic
|
| 1093 |
-
setInterval(() => {
|
| 1094 |
-
const download = (Math.random() * 5 + 2).toFixed(1);
|
| 1095 |
-
const upload = (Math.random() * 2 + 0.5).toFixed(1);
|
| 1096 |
-
document.getElementById('download-speed').textContent = download;
|
| 1097 |
-
document.getElementById('upload-speed').textContent = upload;
|
| 1098 |
-
}, 3000);
|
| 1099 |
-
|
| 1100 |
-
// Update last login time
|
| 1101 |
-
const now = new Date();
|
| 1102 |
-
const loginStr = now.toLocaleDateString() + ', ' + now.toLocaleTimeString();
|
| 1103 |
-
document.getElementById('last-login').textContent = loginStr;
|
| 1104 |
-
|
| 1105 |
-
// Auto-open browser on launch
|
| 1106 |
-
setTimeout(() => {
|
| 1107 |
-
openWindow('browser');
|
| 1108 |
-
}, 500);
|
| 1109 |
-
|
| 1110 |
-
// Desktop icon selection
|
| 1111 |
document.querySelectorAll('.desktop-icon').forEach(icon => {
|
| 1112 |
icon.addEventListener('click', (e) => {
|
| 1113 |
e.stopPropagation();
|
|
@@ -1120,198 +815,143 @@
|
|
| 1120 |
document.querySelectorAll('.desktop-icon').forEach(i => i.classList.remove('selected'));
|
| 1121 |
});
|
| 1122 |
|
| 1123 |
-
// Mobile touch support for dragging
|
| 1124 |
-
let touchStartX, touchStartY;
|
| 1125 |
-
|
| 1126 |
-
document.querySelectorAll('.window-header').forEach(header => {
|
| 1127 |
-
header.addEventListener('touchstart', (e) => {
|
| 1128 |
-
const touch = e.touches[0];
|
| 1129 |
-
const windowId = header.parentElement.id;
|
| 1130 |
-
if (e.target.closest('.window-btn')) return;
|
| 1131 |
-
|
| 1132 |
-
const window = document.getElementById(windowId);
|
| 1133 |
-
if (window.dataset.maximized === 'true') return;
|
| 1134 |
-
|
| 1135 |
-
const rect = window.getBoundingClientRect();
|
| 1136 |
-
touchStartX = touch.clientX - rect.left;
|
| 1137 |
-
touchStartY = touch.clientY - rect.top;
|
| 1138 |
-
|
| 1139 |
-
// TEMPORARILY DISABLE IFRAMES SO THEY DON'T TRAP THE MOUSE
|
| 1140 |
-
document.querySelectorAll('iframe').forEach(iframe => {
|
| 1141 |
-
iframe.style.pointerEvents = 'none';
|
| 1142 |
-
});
|
| 1143 |
-
|
| 1144 |
-
focusWindow(windowId.replace('window-', ''));
|
| 1145 |
-
}, {passive: false});
|
| 1146 |
-
|
| 1147 |
-
header.addEventListener('touchmove', (e) => {
|
| 1148 |
-
if (!touchStartX) return;
|
| 1149 |
-
e.preventDefault();
|
| 1150 |
-
|
| 1151 |
-
const touch = e.touches[0];
|
| 1152 |
-
const windowId = header.parentElement.id;
|
| 1153 |
-
const window = document.getElementById(windowId);
|
| 1154 |
-
|
| 1155 |
-
let x = touch.clientX - touchStartX;
|
| 1156 |
-
let y = touch.clientY - touchStartY;
|
| 1157 |
-
|
| 1158 |
-
x = Math.max(0, Math.min(x, window.innerWidth - window.offsetWidth));
|
| 1159 |
-
y = Math.max(0, Math.min(y, window.innerHeight - window.offsetHeight - 56));
|
| 1160 |
-
|
| 1161 |
-
window.style.left = x + 'px';
|
| 1162 |
-
window.style.top = y + 'px';
|
| 1163 |
-
}, {passive: false});
|
| 1164 |
-
|
| 1165 |
-
header.addEventListener('touchend', () => {
|
| 1166 |
-
touchStartX = null;
|
| 1167 |
-
touchStartY = null;
|
| 1168 |
-
|
| 1169 |
-
// RE-ENABLE IFRAMES
|
| 1170 |
-
document.querySelectorAll('iframe').forEach(iframe => {
|
| 1171 |
-
iframe.style.pointerEvents = 'auto';
|
| 1172 |
-
});
|
| 1173 |
-
});
|
| 1174 |
-
});
|
| 1175 |
-
|
| 1176 |
-
// Prevent zoom on double tap for mobile
|
| 1177 |
-
let lastTouchEnd = 0;
|
| 1178 |
-
document.addEventListener('touchend', (e) => {
|
| 1179 |
-
const now = Date.now();
|
| 1180 |
-
if (now - lastTouchEnd <= 300) {
|
| 1181 |
-
e.preventDefault();
|
| 1182 |
-
}
|
| 1183 |
-
lastTouchEnd = now;
|
| 1184 |
-
}, false);
|
| 1185 |
|
| 1186 |
-
//
|
| 1187 |
-
|
| 1188 |
-
|
| 1189 |
-
|
| 1190 |
-
|
| 1191 |
-
|
| 1192 |
-
|
| 1193 |
-
|
| 1194 |
-
|
| 1195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1196 |
|
| 1197 |
-
|
| 1198 |
-
|
| 1199 |
-
|
| 1200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1201 |
|
| 1202 |
-
|
| 1203 |
-
frame.src = fullUrl;
|
| 1204 |
|
| 1205 |
-
|
| 1206 |
-
|
| 1207 |
-
|
| 1208 |
-
}
|
| 1209 |
-
browserHistory.push(fullUrl);
|
| 1210 |
-
browserHistoryIndex++;
|
| 1211 |
-
|
| 1212 |
-
setTimeout(() => {
|
| 1213 |
-
loading.classList.add('hidden');
|
| 1214 |
-
}, 1000);
|
| 1215 |
}
|
| 1216 |
|
| 1217 |
-
function
|
| 1218 |
-
|
| 1219 |
-
|
| 1220 |
-
const url = browserHistory[browserHistoryIndex];
|
| 1221 |
-
document.getElementById('browser-url').value = url;
|
| 1222 |
-
document.getElementById('browser-frame').src = url;
|
| 1223 |
-
}
|
| 1224 |
}
|
| 1225 |
|
| 1226 |
-
function
|
| 1227 |
-
if (
|
| 1228 |
-
browserHistoryIndex++;
|
| 1229 |
-
const url = browserHistory[browserHistoryIndex];
|
| 1230 |
-
document.getElementById('browser-url').value = url;
|
| 1231 |
-
document.getElementById('browser-frame').src = url;
|
| 1232 |
-
}
|
| 1233 |
-
}
|
| 1234 |
|
| 1235 |
-
|
| 1236 |
-
const frame = document.getElementById('browser-frame');
|
| 1237 |
-
const loading = document.getElementById('browser-loading');
|
| 1238 |
-
loading.classList.remove('hidden');
|
| 1239 |
-
frame.src = frame.src;
|
| 1240 |
-
setTimeout(() => {
|
| 1241 |
-
loading.classList.add('hidden');
|
| 1242 |
-
}, 800);
|
| 1243 |
-
}
|
| 1244 |
|
| 1245 |
-
|
| 1246 |
-
|
| 1247 |
-
|
| 1248 |
-
|
| 1249 |
|
| 1250 |
-
|
| 1251 |
-
|
| 1252 |
-
|
| 1253 |
-
|
| 1254 |
-
|
|
|
|
| 1255 |
|
| 1256 |
-
|
| 1257 |
-
document.getElementById('calc-display').textContent = calcCurrent || '0';
|
| 1258 |
-
document.getElementById('calc-history').textContent = calcPrevious + (calcOperation || '');
|
| 1259 |
-
}
|
| 1260 |
|
| 1261 |
-
|
| 1262 |
-
if (
|
| 1263 |
-
|
| 1264 |
-
|
|
|
|
|
|
|
|
|
|
| 1265 |
}
|
| 1266 |
-
if (num === '.' && calcCurrent.includes('.')) return;
|
| 1267 |
-
calcCurrent += num;
|
| 1268 |
-
calcUpdateDisplay();
|
| 1269 |
-
}
|
| 1270 |
|
| 1271 |
-
|
| 1272 |
-
calcCurrent += op;
|
| 1273 |
-
calcUpdateDisplay();
|
| 1274 |
}
|
| 1275 |
|
| 1276 |
-
function
|
| 1277 |
-
|
| 1278 |
-
|
| 1279 |
-
|
| 1280 |
-
calcResetNext = false;
|
| 1281 |
-
calcUpdateDisplay();
|
| 1282 |
-
}
|
| 1283 |
|
| 1284 |
-
|
| 1285 |
-
|
| 1286 |
-
|
| 1287 |
-
|
| 1288 |
-
|
| 1289 |
-
|
| 1290 |
-
calcResetNext = true;
|
| 1291 |
-
calcUpdateDisplay();
|
| 1292 |
-
} catch (e) {
|
| 1293 |
-
calcCurrent = 'Error';
|
| 1294 |
-
calcResetNext = true;
|
| 1295 |
-
calcUpdateDisplay();
|
| 1296 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1297 |
}
|
| 1298 |
|
| 1299 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1300 |
document.addEventListener('keydown', (e) => {
|
| 1301 |
-
const
|
| 1302 |
-
|
| 1303 |
-
if
|
| 1304 |
-
|
| 1305 |
-
|
| 1306 |
-
|
| 1307 |
-
if
|
| 1308 |
-
|
| 1309 |
-
if (e.key === 'Escape') calcClear();
|
| 1310 |
-
if (e.key === 'Backspace') {
|
| 1311 |
-
calcCurrent = calcCurrent.slice(0, -1);
|
| 1312 |
-
calcUpdateDisplay();
|
| 1313 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1314 |
});
|
|
|
|
| 1315 |
</script>
|
| 1316 |
</body>
|
| 1317 |
</html>
|
|
|
|
| 84 |
|
| 85 |
.window.active {
|
| 86 |
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(0, 255, 255, 0.3);
|
|
|
|
| 87 |
}
|
| 88 |
|
| 89 |
.window-header {
|
|
|
|
| 144 |
text-shadow: 0 0 5px currentColor, 0 0 10px currentColor;
|
| 145 |
}
|
| 146 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
/* Taskbar */
|
| 148 |
.taskbar {
|
| 149 |
background: linear-gradient(180deg, rgba(10, 25, 50, 0.9) 0%, rgba(5, 15, 30, 0.95) 100%);
|
|
|
|
| 210 |
}
|
| 211 |
|
| 212 |
/* Animations */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 213 |
@keyframes slide-up {
|
| 214 |
from { transform: translateY(100%); opacity: 0; }
|
| 215 |
to { transform: translateY(0); opacity: 1; }
|
|
|
|
| 219 |
animation: slide-up 0.3s ease-out;
|
| 220 |
}
|
| 221 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 222 |
.grid-pattern {
|
| 223 |
background-image:
|
| 224 |
linear-gradient(rgba(0, 255, 255, 0.03) 1px, transparent 1px),
|
|
|
|
| 276 |
<span class="text-xs text-center font-medium text-pink-100 drop-shadow-md">Calculator</span>
|
| 277 |
</div>
|
| 278 |
|
|
|
|
| 279 |
<div class="desktop-icon flex flex-col items-center p-3 rounded-lg w-24" onclick="openWindow('spec')">
|
| 280 |
<div class="w-12 h-12 bg-gray-900 rounded-lg flex items-center justify-center mb-2 border border-red-500/30 shadow-lg shadow-red-500/20">
|
| 281 |
<i data-lucide="book-open" class="w-6 h-6 text-red-400"></i>
|
|
|
|
| 283 |
<span class="text-xs text-center font-medium text-red-100 drop-shadow-md">Master Spec</span>
|
| 284 |
</div>
|
| 285 |
|
|
|
|
| 286 |
<div class="desktop-icon flex flex-col items-center p-3 rounded-lg w-24" onclick="openWindow('favs')">
|
| 287 |
<div class="w-12 h-12 bg-gray-900 rounded-lg flex items-center justify-center mb-2 border border-yellow-500/30 shadow-lg shadow-yellow-500/20">
|
| 288 |
<i data-lucide="star" class="w-6 h-6 text-yellow-400"></i>
|
|
|
|
| 290 |
<span class="text-xs text-center font-medium text-yellow-100 drop-shadow-md">Xor's Favs</span>
|
| 291 |
</div>
|
| 292 |
|
| 293 |
+
<!-- NEW GAME DESKTOP ICON -->
|
| 294 |
+
<div class="desktop-icon flex flex-col items-center p-3 rounded-lg w-24" onclick="openWindow('game')">
|
| 295 |
+
<div class="w-12 h-12 bg-gray-900 rounded-lg flex items-center justify-center mb-2 border border-emerald-500/30 shadow-lg shadow-emerald-500/20">
|
| 296 |
+
<i data-lucide="gamepad-2" class="w-6 h-6 text-emerald-400"></i>
|
| 297 |
+
</div>
|
| 298 |
+
<span class="text-xs text-center font-medium text-emerald-100 drop-shadow-md">Cyber Snake</span>
|
| 299 |
+
</div>
|
| 300 |
+
|
| 301 |
<a href="https://ko-fi.com/Z8Z51E5TIG" target="_blank" class="desktop-icon flex flex-col items-center p-3 rounded-lg w-24 no-underline">
|
| 302 |
<div class="w-12 h-12 bg-gray-900 rounded-lg flex items-center justify-center mb-2 border border-orange-500/30 shadow-lg shadow-orange-500/20">
|
| 303 |
<i data-lucide="coffee" class="w-6 h-6 text-orange-400"></i>
|
|
|
|
| 335 |
<div class="terminal-text text-green-400 space-y-1">
|
| 336 |
<div class="text-cyan-400 font-bold">Xortron Operating System v7.7.7</div>
|
| 337 |
<div class="text-gray-400">Kernel 5.15.0-76-generic x86_64</div>
|
| 338 |
+
<div class="text-gray-500 text-xs mt-2">Last login: <span id="last-login"></span> from 192.168.1.105</div>
|
| 339 |
<div class="mt-4 flex items-center">
|
| 340 |
<span class="text-green-500">root@xortron-os:~#</span>
|
| 341 |
<span class="ml-2 cursor-blink">█</span>
|
|
|
|
| 366 |
<div class="flex items-center gap-2 text-gray-300 hover:text-cyan-400 cursor-pointer p-1 rounded hover:bg-cyan-900/20 transition"><i data-lucide="monitor" class="w-4 h-4"></i> Desktop</div>
|
| 367 |
<div class="flex items-center gap-2 text-gray-300 hover:text-cyan-400 cursor-pointer p-1 rounded hover:bg-cyan-900/20 transition"><i data-lucide="download" class="w-4 h-4"></i> Downloads</div>
|
| 368 |
<div class="flex items-center gap-2 text-cyan-400 bg-cyan-900/20 p-1 rounded cursor-pointer"><i data-lucide="database" class="w-4 h-4"></i> Data</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 369 |
</div>
|
| 370 |
</div>
|
| 371 |
<div class="flex-1 p-4 bg-black/20 grid-pattern overflow-auto">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 372 |
<div class="grid grid-cols-4 gap-3">
|
| 373 |
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group">
|
| 374 |
<i data-lucide="file-code" class="w-8 h-8 text-blue-400 mb-2 group-hover:scale-110 transition"></i>
|
| 375 |
<div class="text-xs text-gray-300 truncate">script.py</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 376 |
</div>
|
| 377 |
<div class="glass-panel p-3 rounded-lg hover:bg-cyan-900/20 cursor-pointer transition group">
|
| 378 |
<i data-lucide="file-archive" class="w-8 h-8 text-red-400 mb-2 group-hover:scale-110 transition"></i>
|
| 379 |
+
<div class="text-xs text-gray-300 truncate">data.zip</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 380 |
</div>
|
| 381 |
</div>
|
| 382 |
</div>
|
|
|
|
| 391 |
<span class="text-sm font-medium text-red-100">Hack Tools v3.1.4</span>
|
| 392 |
</div>
|
| 393 |
<div class="flex items-center gap-2">
|
|
|
|
| 394 |
<div class="window-btn btn-min" onclick="minimizeWindow('hacktools')"></div>
|
| 395 |
<div class="window-btn btn-max" onclick="maximizeWindow('hacktools')"></div>
|
| 396 |
<div class="window-btn btn-close" onclick="closeWindow('hacktools')"></div>
|
|
|
|
| 398 |
</div>
|
| 399 |
<div class="p-6 h-[calc(100%-40px)] overflow-auto bg-black/40">
|
| 400 |
<div class="grid grid-cols-2 gap-4">
|
| 401 |
+
<div class="glass-panel p-4 rounded-lg border border-transparent hover:border-red-500/30">
|
| 402 |
+
<div class="font-semibold text-red-100">Port Scanner</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 403 |
</div>
|
| 404 |
+
<div class="glass-panel p-4 rounded-lg border border-transparent hover:border-orange-500/30">
|
| 405 |
+
<div class="font-semibold text-orange-100">Brute Force</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 406 |
</div>
|
| 407 |
</div>
|
| 408 |
</div>
|
|
|
|
| 416 |
<span class="text-sm font-medium text-green-100">Network Monitor</span>
|
| 417 |
</div>
|
| 418 |
<div class="flex items-center gap-2">
|
|
|
|
| 419 |
<div class="window-btn btn-min" onclick="minimizeWindow('network')"></div>
|
| 420 |
<div class="window-btn btn-max" onclick="maximizeWindow('network')"></div>
|
| 421 |
<div class="window-btn btn-close" onclick="closeWindow('network')"></div>
|
| 422 |
</div>
|
| 423 |
</div>
|
| 424 |
+
<div class="p-4 bg-black/40 h-[calc(100%-40px)]">
|
| 425 |
+
<div class="font-mono text-green-400">
|
| 426 |
+
<span id="download-speed">3.7</span> MB/s ↓ | <span id="upload-speed">1.2</span> MB/s ↑
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 427 |
</div>
|
| 428 |
</div>
|
| 429 |
</div>
|
|
|
|
| 436 |
<span class="text-sm font-medium text-purple-100">Xortron Browser</span>
|
| 437 |
</div>
|
| 438 |
<div class="flex items-center gap-2">
|
|
|
|
|
|
|
|
|
|
|
|
|
| 439 |
<div class="window-btn btn-min" onclick="minimizeWindow('browser')"></div>
|
| 440 |
<div class="window-btn btn-max" onclick="maximizeWindow('browser')"></div>
|
| 441 |
<div class="window-btn btn-close" onclick="closeWindow('browser')"></div>
|
| 442 |
</div>
|
| 443 |
</div>
|
| 444 |
<div class="flex flex-col h-[calc(100%-40px)] bg-gray-900">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 445 |
<div class="flex-1 relative bg-black/40 overflow-hidden">
|
| 446 |
<iframe id="browser-frame" src="https://darkc0de-chat.hf.space/" class="w-full h-full border-none" sandbox="allow-scripts allow-same-origin allow-forms allow-popups"></iframe>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 447 |
</div>
|
| 448 |
</div>
|
| 449 |
</div>
|
|
|
|
| 456 |
<span class="text-sm font-medium text-pink-100">Xortron-Calc</span>
|
| 457 |
</div>
|
| 458 |
<div class="flex items-center gap-2">
|
|
|
|
| 459 |
<div class="window-btn btn-min" onclick="minimizeWindow('calculator')"></div>
|
| 460 |
<div class="window-btn btn-max" onclick="maximizeWindow('calculator')"></div>
|
| 461 |
<div class="window-btn btn-close" onclick="closeWindow('calculator')"></div>
|
|
|
|
| 466 |
<div id="calc-history" class="text-xs text-gray-500 font-mono text-right mb-1 h-4"></div>
|
| 467 |
<div id="calc-display" class="text-3xl text-pink-100 font-mono text-right truncate">0</div>
|
| 468 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 469 |
</div>
|
| 470 |
</div>
|
| 471 |
|
|
|
|
| 477 |
<span class="text-sm font-medium text-red-100">Xortron Master Spec</span>
|
| 478 |
</div>
|
| 479 |
<div class="flex items-center gap-2">
|
|
|
|
|
|
|
|
|
|
|
|
|
| 480 |
<div class="window-btn btn-min" onclick="minimizeWindow('spec')"></div>
|
| 481 |
<div class="window-btn btn-max" onclick="maximizeWindow('spec')"></div>
|
| 482 |
<div class="window-btn btn-close" onclick="closeWindow('spec')"></div>
|
|
|
|
| 487 |
</div>
|
| 488 |
</div>
|
| 489 |
|
| 490 |
+
<!-- Xor's Favs Window -->
|
| 491 |
<div id="window-favs" class="window glass-strong pointer-events-auto hidden" style="top: 8%; left: 18%; width: 400px; height: 700px; z-index: 56;">
|
| 492 |
<div class="window-header flex items-center justify-between px-4 py-2 select-none" onmousedown="startDrag(event, 'window-favs')">
|
| 493 |
<div class="flex items-center gap-2">
|
|
|
|
| 495 |
<span class="text-sm font-medium text-yellow-100">Xor's Favorites</span>
|
| 496 |
</div>
|
| 497 |
<div class="flex items-center gap-2">
|
|
|
|
|
|
|
|
|
|
|
|
|
| 498 |
<div class="window-btn btn-min" onclick="minimizeWindow('favs')"></div>
|
| 499 |
<div class="window-btn btn-max" onclick="maximizeWindow('favs')"></div>
|
| 500 |
<div class="window-btn btn-close" onclick="closeWindow('favs')"></div>
|
|
|
|
| 505 |
</div>
|
| 506 |
</div>
|
| 507 |
|
| 508 |
+
<!-- NEW: CYBER SNAKE GAME WINDOW -->
|
| 509 |
+
<div id="window-game" class="window glass-strong pointer-events-auto hidden" style="top: 15%; left: 35%; width: 420px; height: 500px; z-index: 65;">
|
| 510 |
+
<div class="window-header flex items-center justify-between px-4 py-2 select-none" onmousedown="startDrag(event, 'window-game')">
|
| 511 |
+
<div class="flex items-center gap-2">
|
| 512 |
+
<i data-lucide="gamepad-2" class="w-4 h-4 text-emerald-400"></i>
|
| 513 |
+
<span class="text-sm font-medium text-emerald-100">Cyber Snake</span>
|
| 514 |
+
</div>
|
| 515 |
+
<div class="flex items-center gap-2">
|
| 516 |
+
<span class="text-xs text-gray-400 font-mono mr-2">Score: <span id="snake-score" class="text-emerald-400 font-bold">0</span></span>
|
| 517 |
+
<div class="window-btn btn-min" onclick="minimizeWindow('game')"></div>
|
| 518 |
+
<div class="window-btn btn-max" onclick="maximizeWindow('game')"></div>
|
| 519 |
+
<div class="window-btn btn-close" onclick="closeWindow('game')"></div>
|
| 520 |
+
</div>
|
| 521 |
+
</div>
|
| 522 |
+
<div class="flex flex-col items-center justify-center h-[calc(100%-40px)] bg-black/90 relative p-4">
|
| 523 |
+
|
| 524 |
+
<div id="snake-overlay" class="absolute inset-0 flex flex-col items-center justify-center bg-black/80 backdrop-blur-sm z-10 transition-all">
|
| 525 |
+
<i data-lucide="gamepad-2" class="w-12 h-12 text-emerald-400 mb-4 animate-pulse"></i>
|
| 526 |
+
<h2 class="text-3xl font-bold text-emerald-400 mb-2 font-mono neon-text tracking-widest">CYBER SNAKE</h2>
|
| 527 |
+
<p class="text-gray-400 text-sm mb-6 font-mono text-center px-8">Use arrow keys to control.<br>Do not hit the walls.</p>
|
| 528 |
+
<button onclick="startSnakeGame()" class="px-6 py-2 bg-emerald-500/10 border border-emerald-500/50 text-emerald-400 hover:bg-emerald-500 hover:text-black hover:shadow-[0_0_15px_#10b981] transition-all rounded font-bold tracking-widest">INITIATE</button>
|
| 529 |
+
</div>
|
| 530 |
+
|
| 531 |
+
<canvas id="snake-canvas" width="360" height="360" class="border border-emerald-500/30 shadow-[0_0_20px_rgba(16,185,129,0.15)] bg-gray-900 rounded"></canvas>
|
| 532 |
</div>
|
|
|
|
|
|
|
|
|
|
| 533 |
</div>
|
| 534 |
+
|
| 535 |
</div>
|
| 536 |
|
| 537 |
<!-- Taskbar -->
|
|
|
|
| 561 |
<button class="taskbar-icon w-10 h-10 rounded-lg flex items-center justify-center" onclick="openWindow('calculator')" id="taskbar-calculator">
|
| 562 |
<i data-lucide="calculator" class="w-5 h-5 text-pink-400"></i>
|
| 563 |
</button>
|
|
|
|
| 564 |
<button class="taskbar-icon w-10 h-10 rounded-lg flex items-center justify-center" onclick="openWindow('spec')" id="taskbar-spec">
|
| 565 |
<i data-lucide="book-open" class="w-5 h-5 text-red-400"></i>
|
| 566 |
</button>
|
|
|
|
| 567 |
<button class="taskbar-icon w-10 h-10 rounded-lg flex items-center justify-center" onclick="openWindow('favs')" id="taskbar-favs">
|
| 568 |
<i data-lucide="star" class="w-5 h-5 text-yellow-400"></i>
|
| 569 |
</button>
|
| 570 |
+
|
| 571 |
+
<!-- NEW GAME TASKBAR ICON -->
|
| 572 |
+
<button class="taskbar-icon w-10 h-10 rounded-lg flex items-center justify-center" onclick="openWindow('game')" id="taskbar-game">
|
| 573 |
+
<i data-lucide="gamepad-2" class="w-5 h-5 text-emerald-400"></i>
|
| 574 |
+
</button>
|
| 575 |
</div>
|
| 576 |
|
| 577 |
<div class="flex items-center gap-4 px-4 py-2 glass-panel rounded-lg">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 578 |
<div class="text-xs font-mono text-gray-300" id="clock">03:57 AM</div>
|
| 579 |
<div class="text-xs text-gray-500" id="date">Wed, Mar 18</div>
|
| 580 |
</div>
|
| 581 |
</div>
|
| 582 |
|
| 583 |
+
<!-- Start Menu -->
|
| 584 |
<div id="start-menu" class="fixed bottom-16 left-4 w-64 glass-strong rounded-xl border border-cyan-500/20 shadow-2xl transform translate-y-4 opacity-0 pointer-events-none transition-all duration-200 z-[998]">
|
| 585 |
<div class="p-4 border-b border-cyan-900/30">
|
| 586 |
<div class="flex items-center gap-3">
|
|
|
|
| 612 |
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-pink-900/20 transition text-left text-sm text-gray-300" onclick="openWindow('calculator'); toggleStartMenu()">
|
| 613 |
<i data-lucide="calculator" class="w-4 h-4 text-pink-400"></i> Calculator
|
| 614 |
</button>
|
|
|
|
|
|
|
| 615 |
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-red-900/20 transition text-left text-sm text-gray-300" onclick="openWindow('spec'); toggleStartMenu()">
|
| 616 |
<i data-lucide="book-open" class="w-4 h-4 text-red-400"></i> Master Spec
|
| 617 |
</button>
|
|
|
|
|
|
|
| 618 |
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-yellow-900/20 transition text-left text-sm text-gray-300" onclick="openWindow('favs'); toggleStartMenu()">
|
| 619 |
<i data-lucide="star" class="w-4 h-4 text-yellow-400"></i> Xor's Favs
|
| 620 |
</button>
|
| 621 |
|
| 622 |
+
<!-- NEW GAME START MENU ITEM -->
|
| 623 |
+
<button class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-emerald-900/20 transition text-left text-sm text-gray-300" onclick="openWindow('game'); toggleStartMenu()">
|
| 624 |
+
<i data-lucide="gamepad-2" class="w-4 h-4 text-emerald-400"></i> Cyber Snake
|
| 625 |
+
</button>
|
| 626 |
+
|
| 627 |
<div class="border-t border-cyan-900/30 my-2"></div>
|
| 628 |
<a href="https://ko-fi.com/Z8Z51E5TIG" target="_blank" class="w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-orange-900/20 transition text-left text-sm text-gray-300 no-underline" onclick="toggleStartMenu()">
|
| 629 |
<i data-lucide="coffee" class="w-4 h-4 text-orange-400"></i> Buy me a coffee
|
| 630 |
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 631 |
</div>
|
| 632 |
</div>
|
| 633 |
|
|
|
|
| 662 |
window.style.zIndex = ++zIndexCounter;
|
| 663 |
window.classList.add('active');
|
| 664 |
|
|
|
|
| 665 |
if (taskbarBtn) taskbarBtn.classList.add('active');
|
| 666 |
|
|
|
|
| 667 |
window.style.transform = 'scale(0.9)';
|
| 668 |
window.style.opacity = '0';
|
| 669 |
setTimeout(() => {
|
|
|
|
| 671 |
window.style.opacity = '1';
|
| 672 |
}, 10);
|
| 673 |
} else {
|
|
|
|
| 674 |
focusWindow(windowId);
|
| 675 |
}
|
|
|
|
| 676 |
activeWindow = windowId;
|
| 677 |
}
|
| 678 |
|
|
|
|
| 709 |
const window = document.getElementById(`window-${windowId}`);
|
| 710 |
|
| 711 |
if (window.dataset.maximized === 'true') {
|
|
|
|
| 712 |
window.style.width = window.dataset.prevWidth;
|
| 713 |
window.style.height = window.dataset.prevHeight;
|
| 714 |
window.style.top = window.dataset.prevTop;
|
| 715 |
window.style.left = window.dataset.prevLeft;
|
| 716 |
window.dataset.maximized = 'false';
|
| 717 |
} else {
|
|
|
|
| 718 |
window.dataset.prevWidth = window.style.width;
|
| 719 |
window.dataset.prevHeight = window.style.height;
|
| 720 |
window.dataset.prevTop = window.style.top;
|
|
|
|
| 732 |
const window = document.getElementById(`window-${windowId}`);
|
| 733 |
window.style.zIndex = ++zIndexCounter;
|
| 734 |
|
|
|
|
| 735 |
document.querySelectorAll('.window').forEach(w => w.classList.remove('active'));
|
| 736 |
window.classList.add('active');
|
| 737 |
}
|
| 738 |
|
|
|
|
| 739 |
function startDrag(e, windowId) {
|
| 740 |
+
if (e.target.closest('.window-btn')) return;
|
| 741 |
|
| 742 |
const window = document.getElementById(windowId);
|
| 743 |
+
if (window.dataset.maximized === 'true') return;
|
| 744 |
|
| 745 |
isDragging = true;
|
| 746 |
draggedWindow = window;
|
| 747 |
|
|
|
|
| 748 |
document.querySelectorAll('iframe').forEach(iframe => {
|
| 749 |
iframe.style.pointerEvents = 'none';
|
| 750 |
});
|
|
|
|
| 762 |
let x = e.clientX - dragOffset.x;
|
| 763 |
let y = e.clientY - dragOffset.y;
|
| 764 |
|
|
|
|
| 765 |
x = Math.max(0, Math.min(x, window.innerWidth - draggedWindow.offsetWidth));
|
| 766 |
y = Math.max(0, Math.min(y, window.innerHeight - draggedWindow.offsetHeight - 56));
|
| 767 |
|
|
|
|
| 773 |
isDragging = false;
|
| 774 |
draggedWindow = null;
|
| 775 |
|
|
|
|
| 776 |
document.querySelectorAll('iframe').forEach(iframe => {
|
| 777 |
iframe.style.pointerEvents = 'auto';
|
| 778 |
});
|
| 779 |
});
|
| 780 |
|
|
|
|
| 781 |
document.querySelectorAll('.window').forEach(window => {
|
| 782 |
window.addEventListener('mousedown', () => {
|
| 783 |
const id = window.id.replace('window-', '');
|
|
|
|
| 785 |
});
|
| 786 |
});
|
| 787 |
|
|
|
|
| 788 |
function toggleStartMenu() {
|
| 789 |
const menu = document.getElementById('start-menu');
|
| 790 |
if (menu.classList.contains('opacity-0')) {
|
|
|
|
| 794 |
}
|
| 795 |
}
|
| 796 |
|
|
|
|
| 797 |
document.addEventListener('click', (e) => {
|
| 798 |
const menu = document.getElementById('start-menu');
|
| 799 |
const btn = document.querySelector('[onclick="toggleStartMenu()"]');
|
| 800 |
|
| 801 |
+
if (!menu.contains(e.target) && btn && !btn.contains(e.target)) {
|
| 802 |
menu.classList.add('opacity-0', 'pointer-events-none', 'translate-y-4');
|
| 803 |
}
|
| 804 |
});
|
| 805 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 806 |
document.querySelectorAll('.desktop-icon').forEach(icon => {
|
| 807 |
icon.addEventListener('click', (e) => {
|
| 808 |
e.stopPropagation();
|
|
|
|
| 815 |
document.querySelectorAll('.desktop-icon').forEach(i => i.classList.remove('selected'));
|
| 816 |
});
|
| 817 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 818 |
|
| 819 |
+
// ==========================================
|
| 820 |
+
// CYBER SNAKE GAME LOGIC
|
| 821 |
+
// ==========================================
|
| 822 |
+
const gameCanvas = document.getElementById('snake-canvas');
|
| 823 |
+
const gameCtx = gameCanvas.getContext('2d');
|
| 824 |
+
const gridSize = 20;
|
| 825 |
+
let snake = [];
|
| 826 |
+
let food = {};
|
| 827 |
+
let snakeDx = gridSize;
|
| 828 |
+
let snakeDy = 0;
|
| 829 |
+
let snakeGameLoop;
|
| 830 |
+
let snakeScore = 0;
|
| 831 |
+
let isSnakeRunning = false;
|
| 832 |
+
|
| 833 |
+
function startSnakeGame() {
|
| 834 |
+
document.getElementById('snake-overlay').classList.add('hidden');
|
| 835 |
|
| 836 |
+
snake = [
|
| 837 |
+
{x: 160, y: 160},
|
| 838 |
+
{x: 140, y: 160},
|
| 839 |
+
{x: 120, y: 160}
|
| 840 |
+
];
|
| 841 |
+
snakeDx = gridSize;
|
| 842 |
+
snakeDy = 0;
|
| 843 |
+
snakeScore = 0;
|
| 844 |
+
document.getElementById('snake-score').innerText = snakeScore;
|
| 845 |
|
| 846 |
+
spawnFood();
|
|
|
|
| 847 |
|
| 848 |
+
if(snakeGameLoop) clearInterval(snakeGameLoop);
|
| 849 |
+
isSnakeRunning = true;
|
| 850 |
+
snakeGameLoop = setInterval(updateSnake, 120);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 851 |
}
|
| 852 |
|
| 853 |
+
function spawnFood() {
|
| 854 |
+
food.x = Math.floor(Math.random() * (gameCanvas.width / gridSize)) * gridSize;
|
| 855 |
+
food.y = Math.floor(Math.random() * (gameCanvas.height / gridSize)) * gridSize;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 856 |
}
|
| 857 |
|
| 858 |
+
function updateSnake() {
|
| 859 |
+
if (!isSnakeRunning) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 860 |
|
| 861 |
+
const head = {x: snake[0].x + snakeDx, y: snake[0].y + snakeDy};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 862 |
|
| 863 |
+
// Wall collision (Game Over)
|
| 864 |
+
if (head.x < 0 || head.x >= gameCanvas.width || head.y < 0 || head.y >= gameCanvas.height) {
|
| 865 |
+
return gameSnakeOver();
|
| 866 |
+
}
|
| 867 |
|
| 868 |
+
// Self collision (Game Over)
|
| 869 |
+
for (let i = 0; i < snake.length; i++) {
|
| 870 |
+
if (head.x === snake[i].x && head.y === snake[i].y) {
|
| 871 |
+
return gameSnakeOver();
|
| 872 |
+
}
|
| 873 |
+
}
|
| 874 |
|
| 875 |
+
snake.unshift(head);
|
|
|
|
|
|
|
|
|
|
| 876 |
|
| 877 |
+
// Food collision
|
| 878 |
+
if (head.x === food.x && head.y === food.y) {
|
| 879 |
+
snakeScore += 10;
|
| 880 |
+
document.getElementById('snake-score').innerText = snakeScore;
|
| 881 |
+
spawnFood();
|
| 882 |
+
} else {
|
| 883 |
+
snake.pop();
|
| 884 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 885 |
|
| 886 |
+
drawSnake();
|
|
|
|
|
|
|
| 887 |
}
|
| 888 |
|
| 889 |
+
function drawSnake() {
|
| 890 |
+
// Draw background
|
| 891 |
+
gameCtx.fillStyle = '#111827'; // Dark gray bg
|
| 892 |
+
gameCtx.fillRect(0, 0, gameCanvas.width, gameCanvas.height);
|
|
|
|
|
|
|
|
|
|
| 893 |
|
| 894 |
+
// Draw grid lines (Cyber look)
|
| 895 |
+
gameCtx.strokeStyle = 'rgba(16, 185, 129, 0.05)';
|
| 896 |
+
gameCtx.lineWidth = 1;
|
| 897 |
+
for(let i = 0; i < gameCanvas.width; i += gridSize) {
|
| 898 |
+
gameCtx.beginPath(); gameCtx.moveTo(i, 0); gameCtx.lineTo(i, gameCanvas.height); gameCtx.stroke();
|
| 899 |
+
gameCtx.beginPath(); gameCtx.moveTo(0, i); gameCtx.lineTo(gameCanvas.width, i); gameCtx.stroke();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 900 |
}
|
| 901 |
+
|
| 902 |
+
// Draw Food
|
| 903 |
+
gameCtx.fillStyle = '#ec4899'; // Pink food
|
| 904 |
+
gameCtx.shadowBlur = 15;
|
| 905 |
+
gameCtx.shadowColor = '#ec4899';
|
| 906 |
+
gameCtx.fillRect(food.x + 2, food.y + 2, gridSize - 4, gridSize - 4);
|
| 907 |
+
|
| 908 |
+
// Draw Snake
|
| 909 |
+
gameCtx.shadowColor = '#10b981';
|
| 910 |
+
snake.forEach((part, index) => {
|
| 911 |
+
if(index === 0) {
|
| 912 |
+
gameCtx.fillStyle = '#34d399'; // Lighter head
|
| 913 |
+
gameCtx.shadowBlur = 10;
|
| 914 |
+
} else {
|
| 915 |
+
gameCtx.fillStyle = '#10b981'; // Body
|
| 916 |
+
gameCtx.shadowBlur = 5;
|
| 917 |
+
}
|
| 918 |
+
gameCtx.fillRect(part.x + 1, part.y + 1, gridSize - 2, gridSize - 2);
|
| 919 |
+
});
|
| 920 |
+
|
| 921 |
+
gameCtx.shadowBlur = 0; // Reset
|
| 922 |
}
|
| 923 |
|
| 924 |
+
function gameSnakeOver() {
|
| 925 |
+
isSnakeRunning = false;
|
| 926 |
+
clearInterval(snakeGameLoop);
|
| 927 |
+
const overlay = document.getElementById('snake-overlay');
|
| 928 |
+
overlay.classList.remove('hidden');
|
| 929 |
+
overlay.querySelector('h2').innerText = 'SYSTEM FAILURE';
|
| 930 |
+
overlay.querySelector('h2').classList.replace('text-emerald-400', 'text-red-500');
|
| 931 |
+
overlay.querySelector('p').innerHTML = `Game Over.<br>Final Score: ${snakeScore}`;
|
| 932 |
+
overlay.querySelector('button').innerText = 'REBOOT GAME';
|
| 933 |
+
}
|
| 934 |
+
|
| 935 |
+
// Global Keydown hook that isolates commands only when the Game Window is active
|
| 936 |
document.addEventListener('keydown', (e) => {
|
| 937 |
+
const gameWindow = document.getElementById('window-game');
|
| 938 |
+
|
| 939 |
+
// Only process game inputs if the Game window is open AND is currently active (in focus)
|
| 940 |
+
if (gameWindow.classList.contains('hidden') || !gameWindow.classList.contains('active')) return;
|
| 941 |
+
|
| 942 |
+
// Prevent page scrolling with arrows when playing
|
| 943 |
+
if(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].indexOf(e.code) > -1) {
|
| 944 |
+
e.preventDefault();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 945 |
}
|
| 946 |
+
|
| 947 |
+
if (!isSnakeRunning) return;
|
| 948 |
+
|
| 949 |
+
if (e.code === 'ArrowUp' && snakeDy === 0) { snakeDx = 0; snakeDy = -gridSize; }
|
| 950 |
+
if (e.code === 'ArrowDown' && snakeDy === 0) { snakeDx = 0; snakeDy = gridSize; }
|
| 951 |
+
if (e.code === 'ArrowLeft' && snakeDx === 0) { snakeDx = -gridSize; snakeDy = 0; }
|
| 952 |
+
if (e.code === 'ArrowRight' && snakeDx === 0) { snakeDx = gridSize; snakeDy = 0; }
|
| 953 |
});
|
| 954 |
+
|
| 955 |
</script>
|
| 956 |
</body>
|
| 957 |
</html>
|