{"uuid": "9ff8a595-560a-4f1e-a9d6-103fe8affbd6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2025-1337", "type": "seen", "source": "https://gist.github.com/Zyrnox010/b3e15963a0a25f127767f1c25a0112e1", "content": "\n\n\n    \n    \n    \n    Zyrnox \u2022 System Owned\n    \n        /* ================================================================\n               RESET &amp; BASE \u2013 CRT + SCANLINES + CURVATURE\n               ================================================================ */\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n        body {\n            background: #000;\n            color: #0f0;\n            font-family: 'Courier New', monospace;\n            height: 100vh;\n            overflow: hidden;\n            user-select: none;\n            cursor: crosshair;\n            position: relative;\n        }\n\n        /* Custom Cursor */\n        .custom-cursor {\n            position: fixed;\n            width: 24px;\n            height: 24px;\n            border: 2px solid #0f0;\n            border-radius: 2px;\n            pointer-events: none;\n            z-index: 99999;\n            transform: translate(-50%, -50%);\n            background: rgba(0, 255, 0, 0.05);\n            box-shadow: 0 0 20px rgba(0, 255, 0, 0.2);\n            transition: 0.05s;\n            mix-blend-mode: difference;\n        }\n        .custom-cursor::after {\n            content: '';\n            position: absolute;\n            top: -4px;\n            left: -4px;\n            width: 4px;\n            height: 4px;\n            background: #0f0;\n            border-radius: 50%;\n        }\n\n        /* CRT Overlay */\n        .crt-overlay {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            z-index: 9998;\n            pointer-events: none;\n            background: repeating-linear-gradient(0deg,\n                    rgba(0, 0, 0, 0.12) 0px,\n                    rgba(0, 0, 0, 0.12) 2px,\n                    transparent 2px,\n                    transparent 6px);\n            animation: scanMove 8s linear infinite;\n            box-shadow: inset 0 0 150px rgba(0, 0, 0, 0.9);\n            transform: perspective(1200px) rotateX(0.3deg) scale(1.01);\n        }\n        @keyframes scanMove {\n            0% {\n                background-position: 0 0;\n            }\n            100% {\n                background-position: 0 100%;\n            }\n        }\n\n        /* Educational Watermark */\n        .watermark {\n            position: fixed;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%) rotate(-30deg);\n            font-size: clamp(3rem, 10vw, 8rem);\n            color: rgba(0, 255, 0, 0.04);\n            font-weight: 900;\n            letter-spacing: 12px;\n            z-index: 9997;\n            pointer-events: none;\n            text-transform: uppercase;\n            white-space: nowrap;\n            border: 4px solid rgba(0, 255, 0, 0.04);\n            padding: 20px 60px;\n            border-radius: 20px;\n        }\n\n        /* Matrix Canvas */\n        #matrixCanvas {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            z-index: 0;\n            opacity: 0.35;\n            pointer-events: none;\n        }\n\n        /* Boot Screen */\n        .boot-screen {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: #000;\n            z-index: 10000;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            padding: 30px;\n            font-family: 'Courier New', monospace;\n            color: #0f0;\n            transition: opacity 0.8s ease;\n        }\n        .boot-screen.hidden {\n            opacity: 0;\n            pointer-events: none;\n        }\n        .boot-screen .boot-text {\n            font-size: clamp(0.8rem, 2vw, 1.2rem);\n            line-height: 2;\n            max-width: 600px;\n            width: 100%;\n            text-align: left;\n            opacity: 0;\n            animation: bootFade 0.5s forwards;\n            animation-delay: calc(var(--i, 0) * 0.15s);\n        }\n        .boot-screen .boot-text:nth-child(1) {\n            --i: 0;\n        }\n        .boot-screen .boot-text:nth-child(2) {\n            --i: 1;\n        }\n        .boot-screen .boot-text:nth-child(3) {\n            --i: 2;\n        }\n        .boot-screen .boot-text:nth-child(4) {\n            --i: 3;\n        }\n        .boot-screen .boot-text:nth-child(5) {\n            --i: 4;\n        }\n        .boot-screen .boot-text:nth-child(6) {\n            --i: 5;\n        }\n        .boot-screen .boot-text:nth-child(7) {\n            --i: 6;\n        }\n        @keyframes bootFade {\n            0% {\n                opacity: 0;\n                transform: translateY(10px);\n            }\n            100% {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n        .boot-screen .blink-cursor {\n            display: inline-block;\n            width: 10px;\n            height: 1.2em;\n            background: #0f0;\n            animation: bootBlink 0.8s infinite;\n            vertical-align: text-bottom;\n        }\n        @keyframes bootBlink {\n            0%,\n            100% {\n                opacity: 1;\n            }\n            50% {\n                opacity: 0;\n            }\n        }\n\n        /* ================================================================\n               MAIN CONTAINER\n               ================================================================ */\n        .container {\n            position: relative;\n            z-index: 10;\n            width: 100%;\n            height: 100vh;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            padding: 12px;\n            text-align: center;\n            background: radial-gradient(circle at center, rgba(0, 0, 0, 0.92) 0%, rgba(0, 20, 0, 0.85) 100%);\n            backdrop-filter: blur(2px);\n            transition: background 1.5s ease;\n        }\n        .container.panic {\n            background: radial-gradient(circle at center, rgba(40, 0, 0, 0.95) 0%, rgba(80, 0, 0, 0.85) 100%);\n        }\n\n        /* ================================================================\n               GLITCH\n               ================================================================ */\n        .glitch-wrapper {\n            position: relative;\n            display: inline-block;\n            margin-bottom: 8px;\n            perspective: 800px;\n        }\n        .glitch-main {\n            font-size: clamp(2.5rem, 12vw, 6.5rem);\n            font-weight: 900;\n            text-transform: uppercase;\n            color: #0f0;\n            text-shadow: 0 0 5px #0f0, 0 0 15px #0f0, 0 0 30px #0f0, 0 0 60px #0f0, 0 0 90px #0f0;\n            animation: glitchPulse 1.8s infinite alternate;\n            letter-spacing: 8px;\n            transform-style: preserve-3d;\n            display: inline-block;\n            position: relative;\n        }\n        .glitch-main span {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            clip-path: inset(0 0 0 0);\n            animation: glitchLayer 2.5s infinite;\n        }\n        .glitch-main span:nth-child(1) {\n            left: 4px;\n            text-shadow: -4px 0 #ff0040, 0 0 20px #ff0040;\n            animation: glitchLayer1 1.9s infinite;\n        }\n        .glitch-main span:nth-child(2) {\n            left: -4px;\n            text-shadow: 4px 0 #00bfff, 0 0 20px #00bfff;\n            animation: glitchLayer2 2.2s infinite;\n        }\n        .glitch-main span:nth-child(3) {\n            top: 3px;\n            left: 0;\n            text-shadow: 0 -3px #ffff00, 0 0 20px #ffff00;\n            animation: glitchLayer3 2.6s infinite;\n        }\n        .glitch-main span:nth-child(4) {\n            top: -3px;\n            left: 0;\n            text-shadow: 0 3px #ff00ff, 0 0 20px #ff00ff;\n            animation: glitchLayer4 1.7s infinite;\n        }\n        .glitch-main span:nth-child(5) {\n            left: 6px;\n            text-shadow: -6px 0 #ff8800, 0 0 20px #ff8800;\n            animation: glitchLayer1 2.4s infinite;\n        }\n        .glitch-main span:nth-child(6) {\n            left: -6px;\n            text-shadow: 6px 0 #00ff88, 0 0 20px #00ff88;\n            animation: glitchLayer2 2.8s infinite;\n        }\n\n        @keyframes glitchPulse {\n            0% {\n                opacity: 1;\n                transform: scale(1) rotateX(0deg);\n            }\n            100% {\n                opacity: 0.9;\n                transform: scale(1.02) rotateX(2deg);\n            }\n        }\n        @keyframes glitchLayer1 {\n            0% {\n                clip-path: inset(0 0 95% 0);\n            }\n            10% {\n                clip-path: inset(15% 0 70% 0);\n            }\n            20% {\n                clip-path: inset(30% 0 50% 0);\n            }\n            30% {\n                clip-path: inset(50% 0 30% 0);\n            }\n            40% {\n                clip-path: inset(70% 0 15% 0);\n            }\n            50% {\n                clip-path: inset(0 0 95% 0);\n            }\n            100% {\n                clip-path: inset(0 0 95% 0);\n            }\n        }\n        @keyframes glitchLayer2 {\n            0% {\n                clip-path: inset(90% 0 0 0);\n            }\n            10% {\n                clip-path: inset(60% 0 20% 0);\n            }\n            20% {\n                clip-path: inset(40% 0 40% 0);\n            }\n            30% {\n                clip-path: inset(20% 0 60% 0);\n            }\n            40% {\n                clip-path: inset(10% 0 80% 0);\n            }\n            50% {\n                clip-path: inset(90% 0 0 0);\n            }\n            100% {\n                clip-path: inset(90% 0 0 0);\n            }\n        }\n        @keyframes glitchLayer3 {\n            0% {\n                clip-path: inset(40% 0 40% 0);\n            }\n            20% {\n                clip-path: inset(20% 0 60% 0);\n            }\n            40% {\n                clip-path: inset(60% 0 20% 0);\n            }\n            60% {\n                clip-path: inset(10% 0 80% 0);\n            }\n            80% {\n                clip-path: inset(80% 0 10% 0);\n            }\n            100% {\n                clip-path: inset(40% 0 40% 0);\n            }\n        }\n        @keyframes glitchLayer4 {\n            0% {\n                clip-path: inset(0 0 0 0);\n            }\n            15% {\n                clip-path: inset(25% 0 55% 0);\n            }\n            30% {\n                clip-path: inset(55% 0 25% 0);\n            }\n            45% {\n                clip-path: inset(10% 0 80% 0);\n            }\n            60% {\n                clip-path: inset(80% 0 10% 0);\n            }\n            75% {\n                clip-path: inset(40% 0 40% 0);\n            }\n            100% {\n                clip-path: inset(0 0 0 0);\n            }\n        }\n\n        .subtitle {\n            font-size: clamp(1.1rem, 4vw, 2.2rem);\n            color: #fff;\n            text-shadow: 0 0 20px #0f0, 0 0 40px #0f0;\n            animation: blink 1.1s infinite;\n            margin-top: 2px;\n            letter-spacing: 5px;\n        }\n        @keyframes blink {\n            0%,\n            100% {\n                opacity: 1;\n            }\n            50% {\n                opacity: 0.15;\n            }\n        }\n\n        /* ================================================================\n               WARNING BANNER\n               ================================================================ */\n        .warning-banner {\n            margin: 10px 0;\n            padding: 12px 25px;\n            background: rgba(255, 0, 0, 0.15);\n            border: 2px solid #f00;\n            border-radius: 12px;\n            color: #f55;\n            font-size: clamp(0.9rem, 2.5vw, 1.4rem);\n            text-shadow: 0 0 20px #f00, 0 0 40px #f00;\n            animation: warnPulse 1.6s infinite;\n            box-shadow: 0 0 50px rgba(255, 0, 0, 0.25);\n            backdrop-filter: blur(8px);\n            letter-spacing: 3px;\n            font-weight: bold;\n            transition: all 0.8s ease;\n        }\n        .warning-banner.panic-warn {\n            border-color: #ff4400;\n            color: #ff6644;\n            box-shadow: 0 0 100px rgba(255, 68, 0, 0.5);\n            animation: warnPulse 0.6s infinite;\n        }\n        @keyframes warnPulse {\n            0%,\n            100% {\n                border-color: #f00;\n                box-shadow: 0 0 20px rgba(255, 0, 0, 0.3);\n            }\n            50% {\n                border-color: #ff8800;\n                box-shadow: 0 0 80px rgba(255, 0, 0, 0.6);\n            }\n        }\n\n        /* ================================================================\n               DASHBOARD\n               ================================================================ */\n        .dashboard {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: center;\n            gap: 18px;\n            margin: 8px 0;\n            width: 100%;\n            max-width: 850px;\n        }\n        .stat-box {\n            background: rgba(0, 0, 0, 0.7);\n            border: 1px solid #0f0;\n            border-radius: 10px;\n            padding: 10px 18px;\n            min-width: 130px;\n            text-align: center;\n            box-shadow: 0 0 30px rgba(0, 255, 0, 0.04);\n        }\n        .stat-box .label {\n            font-size: 0.7rem;\n            color: #888;\n            text-transform: uppercase;\n            letter-spacing: 2px;\n        }\n        .stat-box .value {\n            font-size: 1.6rem;\n            font-weight: bold;\n            color: #0f0;\n            text-shadow: 0 0 20px #0f0;\n        }\n        .stat-box .value.red {\n            color: #f44;\n            text-shadow: 0 0 20px #f44;\n        }\n        .mini-chart {\n            background: rgba(0, 0, 0, 0.8);\n            border: 1px solid #0f0;\n            border-radius: 10px;\n            padding: 6px;\n            width: 160px;\n            height: 60px;\n        }\n        .mini-chart canvas {\n            width: 100%;\n            height: 100%;\n            display: block;\n        }\n\n        /* ================================================================\n               PROGRESS\n               ================================================================ */\n        .progress-container {\n            width: 85%;\n            max-width: 650px;\n            margin: 10px auto;\n            background: #111;\n            border: 2px solid #0f0;\n            border-radius: 30px;\n            overflow: hidden;\n            box-shadow: 0 0 40px rgba(0, 255, 0, 0.12);\n            transition: border-color 1s;\n        }\n        .progress-container.panic-progress {\n            border-color: #f00;\n            box-shadow: 0 0 60px rgba(255, 0, 0, 0.25);\n        }\n        .progress-bar {\n            height: 18px;\n            width: 0%;\n            background: linear-gradient(90deg, #0f0, #0ff, #f0f, #ff0);\n            background-size: 300% 100%;\n            animation: progressMove 8s infinite, progressGradient 3s infinite linear;\n            box-shadow: 0 0 30px #0f0;\n            transition: background 1s;\n        }\n        .progress-bar.panic-bar {\n            background: linear-gradient(90deg, #f00, #ff4400, #ff8800, #f00);\n            box-shadow: 0 0 40px #f00;\n        }\n        @keyframes progressMove {\n            0% {\n                width: 0%;\n            }\n            10% {\n                width: 5%;\n            }\n            30% {\n                width: 22%;\n            }\n            50% {\n                width: 48%;\n            }\n            70% {\n                width: 74%;\n            }\n            90% {\n                width: 93%;\n            }\n            100% {\n                width: 100%;\n            }\n        }\n        @keyframes progressGradient {\n            0% {\n                background-position: 0% 50%;\n            }\n            50% {\n                background-position: 100% 50%;\n            }\n            100% {\n                background-position: 0% 50%;\n            }\n        }\n\n        .status-text {\n            font-size: 1.1rem;\n            color: #afa;\n            margin-top: 8px;\n            text-shadow: 0 0 15px #0f0;\n            animation: statusBlink 1.8s infinite;\n            font-weight: bold;\n        }\n        @keyframes statusBlink {\n            0%,\n            100% {\n                opacity: 1;\n            }\n            50% {\n                opacity: 0.3;\n            }\n        }\n\n        /* ================================================================\n               TERMINAL \u2013 with Interactive Input\n               ================================================================ */\n        .terminal {\n            width: 92%;\n            max-width: 780px;\n            background: rgba(0, 0, 0, 0.92);\n            border: 2px solid #0f0;\n            border-radius: 14px;\n            padding: 14px 18px;\n            margin: 10px 0;\n            text-align: left;\n            font-size: 0.85rem;\n            line-height: 1.8;\n            max-height: 190px;\n            overflow-y: auto;\n            box-shadow: 0 0 60px rgba(0, 255, 0, 0.05);\n            scrollbar-width: thin;\n            scrollbar-color: #0f0 #111;\n            transition: border-color 0.8s;\n        }\n        .terminal.panic-term {\n            border-color: #f00;\n            box-shadow: 0 0 60px rgba(255, 0, 0, 0.12);\n        }\n        .terminal::-webkit-scrollbar {\n            width: 6px;\n        }\n        .terminal::-webkit-scrollbar-track {\n            background: #111;\n        }\n        .terminal::-webkit-scrollbar-thumb {\n            background: #0f0;\n            border-radius: 10px;\n        }\n\n        .terminal .line {\n            color: #8f8;\n            margin-bottom: 2px;\n            opacity: 0.95;\n            white-space: pre-wrap;\n            word-break: break-all;\n        }\n        .terminal .line .prompt {\n            color: #0f0;\n            font-weight: bold;\n        }\n        .terminal .line .cmd {\n            color: #fff;\n        }\n        .terminal .line .output {\n            color: #afa;\n        }\n        .terminal .line .error {\n            color: #f55;\n        }\n        .terminal .line .highlight {\n            color: #ff0;\n        }\n        .terminal .line .info {\n            color: #0ff;\n        }\n\n        .terminal-input-line {\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            margin-top: 4px;\n            color: #0f0;\n        }\n        .terminal-input-line .prompt {\n            font-weight: bold;\n            color: #0f0;\n        }\n        .terminal-input-line input {\n            background: transparent;\n            border: none;\n            color: #0f0;\n            font-family: 'Courier New', monospace;\n            font-size: 0.85rem;\n            outline: none;\n            flex: 1;\n            caret-color: #0f0;\n            min-width: 80px;\n        }\n        .terminal-input-line input::selection {\n            background: #0f0;\n            color: #000;\n        }\n        .terminal-input-line input::placeholder {\n            color: #444;\n        }\n\n        /* Virtual Keyboard for Mobile */\n        .vk {\n            display: none;\n            flex-wrap: wrap;\n            justify-content: center;\n            gap: 6px;\n            margin-top: 6px;\n            max-width: 400px;\n        }\n        .vk-btn {\n            background: transparent;\n            border: 1px solid #0f0;\n            color: #0f0;\n            padding: 6px 12px;\n            border-radius: 6px;\n            font-family: 'Courier New', monospace;\n            font-size: 0.75rem;\n            cursor: pointer;\n            transition: 0.2s;\n        }\n        .vk-btn:active {\n            background: #0f0;\n            color: #000;\n        }\n        @media (max-width: 700px) {\n            .vk {\n                display: flex;\n            }\n        }\n\n        /* ================================================================\n               BUTTONS\n               ================================================================ */\n        .btn-group {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 12px;\n            justify-content: center;\n            margin-top: 8px;\n        }\n\n        .btn {\n            padding: 12px 30px;\n            background: transparent;\n            border: 2px solid #0f0;\n            color: #0f0;\n            font-size: 0.95rem;\n            font-weight: bold;\n            border-radius: 50px;\n            cursor: pointer;\n            transition: all 0.3s;\n            text-transform: uppercase;\n            letter-spacing: 3px;\n            box-shadow: 0 0 20px rgba(0, 255, 0, 0.06);\n            position: relative;\n            overflow: hidden;\n        }\n        .btn::after {\n            content: '';\n            position: absolute;\n            top: -50%;\n            left: -50%;\n            width: 200%;\n            height: 200%;\n            background: radial-gradient(circle, rgba(0, 255, 0, 0.08), transparent 60%);\n            opacity: 0;\n            transition: 0.5s;\n        }\n        .btn:hover::after {\n            opacity: 1;\n        }\n        .btn:hover {\n            background: #0f0;\n            color: #000;\n            box-shadow: 0 0 80px #0f0;\n            transform: scale(1.04);\n        }\n\n        .btn-danger {\n            border-color: #f00;\n            color: #f00;\n            box-shadow: 0 0 20px rgba(255, 0, 0, 0.15);\n        }\n        .btn-danger:hover {\n            background: #f00;\n            color: #000;\n            box-shadow: 0 0 80px #f00;\n        }\n        .btn-purple {\n            border-color: #a0f;\n            color: #a0f;\n            box-shadow: 0 0 20px rgba(160, 0, 255, 0.15);\n        }\n        .btn-purple:hover {\n            background: #a0f;\n            color: #000;\n            box-shadow: 0 0 80px #a0f;\n        }\n        .btn-cyan {\n            border-color: #0ff;\n            color: #0ff;\n            box-shadow: 0 0 20px rgba(0, 255, 255, 0.15);\n        }\n        .btn-cyan:hover {\n            background: #0ff;\n            color: #000;\n            box-shadow: 0 0 80px #0ff;\n        }\n        .btn-mute {\n            border-color: #ff0;\n            color: #ff0;\n            box-shadow: 0 0 20px rgba(255, 255, 0, 0.1);\n        }\n        .btn-mute:hover {\n            background: #ff0;\n            color: #000;\n            box-shadow: 0 0 80px #ff0;\n        }\n\n        /* ================================================================\n               PARTICLES \u2013 Canvas based (No DOM leaks)\n               ================================================================ */\n        #particleCanvas {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            z-index: 2;\n            pointer-events: none;\n        }\n\n        /* ================================================================\n               CURSOR GLOW\n               ================================================================ */\n        .cursor-glow {\n            position: fixed;\n            width: 400px;\n            height: 400px;\n            background: radial-gradient(circle, rgba(0, 255, 0, 0.05), transparent 70%);\n            border-radius: 50%;\n            pointer-events: none;\n            transform: translate(-50%, -50%);\n            z-index: 5;\n            transition: 0.01s;\n            filter: blur(50px);\n        }\n        .cursor-glow.panic-glow {\n            background: radial-gradient(circle, rgba(255, 0, 0, 0.08), transparent 70%);\n        }\n\n        /* ================================================================\n               FLASH OVERLAY\n               ================================================================ */\n        .flash-overlay {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 255, 0, 0.05);\n            z-index: 9999;\n            pointer-events: none;\n            opacity: 0;\n        }\n        .flash-overlay.active {\n            animation: flashAnim 0.15s ease-out;\n        }\n        @keyframes flashAnim {\n            0% {\n                opacity: 1;\n            }\n            100% {\n                opacity: 0;\n            }\n        }\n\n        /* ================================================================\n               SHAKE\n               ================================================================ */\n        .shake {\n            animation: shakeAnim 0.4s;\n        }\n        @keyframes shakeAnim {\n            0% {\n                transform: translate(0, 0);\n            }\n            20% {\n                transform: translate(-10px, 8px);\n            }\n            40% {\n                transform: translate(10px, -8px);\n            }\n            60% {\n                transform: translate(-6px, 6px);\n            }\n            80% {\n                transform: translate(6px, -6px);\n            }\n            100% {\n                transform: translate(0, 0);\n            }\n        }\n\n        /* ================================================================\n               GLITCH OVERLAY\n               ================================================================ */\n        .glitch-overlay {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            z-index: 1;\n            pointer-events: none;\n            background: repeating-linear-gradient(0deg,\n                    rgba(0, 255, 0, 0.012) 0px,\n                    rgba(0, 255, 0, 0.012) 1px,\n                    transparent 1px,\n                    transparent 3px);\n            animation: glitchOverlayAnim 0.08s infinite;\n        }\n        @keyframes glitchOverlayAnim {\n            0% {\n                opacity: 0.3;\n                transform: translateX(0);\n            }\n            25% {\n                opacity: 0.6;\n                transform: translateX(2px);\n            }\n            50% {\n                opacity: 0.2;\n                transform: translateX(-2px);\n            }\n            75% {\n                opacity: 0.5;\n                transform: translateX(1px);\n            }\n            100% {\n                opacity: 0.3;\n                transform: translateX(0);\n            }\n        }\n\n        /* ================================================================\n               FOOTER + WATERMARK\n               ================================================================ */\n        .footer {\n            position: fixed;\n            bottom: 8px;\n            left: 0;\n            width: 100%;\n            text-align: center;\n            color: #333;\n            font-size: 0.6rem;\n            letter-spacing: 2px;\n            z-index: 20;\n            pointer-events: none;\n        }\n\n        .watermark-sim {\n            position: fixed;\n            bottom: 30px;\n            right: 30px;\n            color: rgba(0, 255, 0, 0.12);\n            font-size: 0.7rem;\n            letter-spacing: 2px;\n            z-index: 20;\n            pointer-events: none;\n            border: 1px solid rgba(0, 255, 0, 0.08);\n            padding: 6px 14px;\n            border-radius: 20px;\n            background: rgba(0, 0, 0, 0.5);\n        }\n\n        /* ================================================================\n               REDUCED MOTION\n               ================================================================ */\n        @media (prefers-reduced-motion: reduce) {\n            .glitch-main,\n            .glitch-main span,\n            .warning-banner,\n            .progress-bar,\n            .cursor-glow,\n            .crt-overlay,\n            .glitch-overlay {\n                animation-duration: 0.01ms !important;\n                animation-iteration-count: 1 !important;\n                transition-duration: 0.01ms !important;\n            }\n            .boot-screen .boot-text {\n                animation-duration: 0.01ms !important;\n            }\n        }\n\n        /* ================================================================\n               RESPONSIVE\n               ================================================================ */\n        @media (max-width: 600px) {\n            .dashboard {\n                gap: 10px;\n            }\n            .stat-box {\n                padding: 6px 12px;\n                min-width: 80px;\n            }\n            .stat-box .value {\n                font-size: 1.1rem;\n            }\n            .mini-chart {\n                width: 100px;\n                height: 40px;\n            }\n            .terminal {\n                max-height: 130px;\n                font-size: 0.7rem;\n                padding: 10px 12px;\n            }\n            .btn {\n                padding: 8px 18px;\n                font-size: 0.75rem;\n                letter-spacing: 2px;\n            }\n            .watermark-sim {\n                display: none;\n            }\n        }\n    \n\n\n\n    \n    \n\n        \n[BIOS] Initializing Zyrnox v7.0...\n        \n[BIOS] Memory check: 16.0GB OK\n        \n[BIOS] Secure Boot: DISABLED\n        \n[KERNEL] Loading exploit modules...\n        \n[NET] Establishing backdoor connection...\n        \n[SYS] All systems operational.\n        \nPress ENTER to continue... \n    \n\n    \n    \n\n    \n\n    \n\u26d4 EDUCATIONAL SIMULATION\n    \n\u26a1 SIMULATION \u2022 EDUCATIONAL ONLY \u26a1\n\n    \n    \n\n    \n    \n\n    \n    \n\n\n    \n    \n\n\n    \n    \n\n\n    \n    \n\n\n        \n        \n\n            \n\n                Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08\n                Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08\n                Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08\n                Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08\n                Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08\n                Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08\n                Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08\n            \n        \n        \nZyrnox \u2022 Root Access Granted \u2022 0x1337 \u2022 System Owned\n\n        \n        \n\n            \u26a0\ufe0f SYSTEM COMPROMISED \u2022 YOUR DATA IS BEING EXFILTRATED \u26a0\ufe0f\n        \n\n        \n        \n\n            \n\n                \n\ud83d\udce6 Exfiltrated\n                \n0.0 GB\n            \n            \n\n                \n\ud83c\udfaf Targets Hit\n                \n0\n            \n            \n\n                \n\u26a1 Network Load\n                \n\n            \n        \n\n        \n        \n\n            \n\n        \n        \n[\u2022] Initializing attack vector...\n\n        \n        \n\n            \nroot@zyrnox:~# ./exploit --target ALL --payload full\n            \n[+] Target acquired: 0.0.0.0/0\n            \n[+] Bypassing firewall... Done.\n            \n[+] Gaining root privileges... Success\n            \n[!] Warning: Intrusion detected\n            \n[+] Forcing backdoor installation...\n            \n[\u2714] System fully compromised.\n            \n[i] Type \"help\" to see available commands.\n            \n\n                root@zyrnox:~#\n                \n            \n        \n\n        \n        \n\n            help\n            exploit\n            panic\n            clear\n            stats\n            ls\n            cat shadow\n            whoami\n            matrix\n            cd /\n            \ud83d\udc80\n        \n\n        \n        \n\n            \u26a1 Exploit\n            \ud83d\udc80 Panic\n            \ud83e\uddf9 Clear\n            \u2728 Particles\n            \ud83d\udd0a Mute\n        \n\n    \n\n    \n    \n\u00a9 2025 Zyrnox \u2022 For educational purposes only \u2022 Do not use illegally\n\n    \n    \n        (function() {\n            \"use strict\";\n\n            // ============================================================\n            // 0. PROTECTION \u2013 Right\u2011click, DevTools (selective)\n            // ============================================================\n            document.addEventListener('contextmenu', e =&gt; e.preventDefault());\n            document.addEventListener('keydown', function(e) {\n                if (e.key === 'F12' ||\n                    (e.ctrlKey &amp;&amp; e.shiftKey &amp;&amp; (e.key === 'I' || e.key === 'C' || e.key === 'J')) ||\n                    (e.ctrlKey &amp;&amp; e.key === 'U')) {\n                    e.preventDefault();\n                    return false;\n                }\n            });\n\n            // Smart debugger trap \u2013 only if DevTools is open\n            function isDevToolsOpen() {\n                const threshold = 160;\n                const outer = window.outerHeight;\n                const inner = window.innerHeight;\n                const diff = outer - inner;\n                return diff &gt; threshold;\n            }\n\n            setInterval(function() {\n                if (isDevToolsOpen()) {\n                    // This will pause execution if DevTools is open\n                    // Uncomment for production:\n                    // (function(){})['constructor']('debugger')();\n                }\n            }, 3000);\n\n            // ============================================================\n            // 1. BOOT SCREEN\n            // ============================================================\n            const bootScreen = document.getElementById('bootScreen');\n            let bootDismissed = false;\n\n            function dismissBoot() {\n                if (bootDismissed) return;\n                bootDismissed = true;\n                bootScreen.classList.add('hidden');\n                setTimeout(() =&gt; {\n                    bootScreen.style.display = 'none';\n                }, 800);\n                // Focus input after boot\n                setTimeout(() =&gt; {\n                    document.getElementById('cmdInput').focus();\n                }, 500);\n            }\n\n            document.addEventListener('keydown', function(e) {\n                if (e.key === 'Enter' &amp;&amp; !bootDismissed) {\n                    dismissBoot();\n                }\n            });\n            bootScreen.addEventListener('click', dismissBoot);\n            setTimeout(dismissBoot, 6000);\n\n            // ============================================================\n            // 2. CUSTOM CURSOR\n            // ============================================================\n            const customCursor = document.getElementById('customCursor');\n            document.addEventListener('mousemove', function(e) {\n                customCursor.style.left = e.clientX + 'px';\n                customCursor.style.top = e.clientY + 'px';\n            });\n            if ('ontouchstart' in window) {\n                customCursor.style.display = 'none';\n            }\n\n            // ============================================================\n            // 3. MATRIX RAIN \u2013 OPTIMIZED with ImageData\n            // ============================================================\n            const canvas = document.getElementById('matrixCanvas');\n            const ctx = canvas.getContext('2d');\n            let w, h;\n            const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&amp;*()_+{}:&lt;&gt;?\";\n            let fontSize = 18;\n            let columns, drops;\n\n            function resizeCanvas() {\n                w = canvas.width = window.innerWidth;\n                h = canvas.height = window.innerHeight;\n                // Responsive font size\n                if (w &lt; 600) fontSize = 14;\n                else if (w &lt; 900) fontSize = 18;\n                else fontSize = 22;\n                columns = Math.floor(w / fontSize);\n                drops = Array(columns).fill(1);\n            }\n            resizeCanvas();\n            window.addEventListener('resize', resizeCanvas);\n\n            // Create offscreen canvas with ImageData for pixel-perfect rendering\n            const offscreen = document.createElement('canvas');\n            offscreen.width = w;\n            offscreen.height = h;\n            const offCtx = offscreen.getContext('2d');\n\n            // Pre-render character bitmap for speed\n            const charWidth = fontSize * 0.6;\n            const charHeight = fontSize;\n\n            function drawMatrix() {\n                // Clear with semi-transparent black (fade effect)\n                offCtx.fillStyle = 'rgba(0,0,0,0.05)';\n                offCtx.fillRect(0, 0, w, h);\n                offCtx.fillStyle = '#0f0';\n                offCtx.font = fontSize + 'px monospace';\n                for (let i = 0; i &lt; columns; i++) {\n                    const char = chars[Math.floor(Math.random() * chars.length)];\n                    const x = i * fontSize;\n                    const y = drops[i] * fontSize;\n                    offCtx.fillText(char, x, y);\n                    if (y &gt; h &amp;&amp; Math.random() &gt; 0.975) {\n                        drops[i] = 0;\n                    }\n                    drops[i]++;\n                }\n                // Copy to visible canvas using drawImage (fast)\n                ctx.drawImage(offscreen, 0, 0);\n                requestAnimationFrame(drawMatrix);\n            }\n            drawMatrix();\n\n            // ============================================================\n            // 4. PARTICLE SYSTEM \u2013 Canvas based\n            // ============================================================\n            const pCanvas = document.getElementById('particleCanvas');\n            const pCtx = pCanvas.getContext('2d');\n            let pw, ph;\n            const particles = [];\n            const MAX_PARTICLES = 120;\n            let particlesActive = true;\n\n            function resizeParticleCanvas() {\n                pw = pCanvas.width = window.innerWidth;\n                ph = pCanvas.height = window.innerHeight;\n            }\n            resizeParticleCanvas();\n            window.addEventListener('resize', resizeParticleCanvas);\n\n            class Particle {\n                constructor() { this.reset(); }\n                reset() {\n                    this.x = Math.random() * pw;\n                    this.y = Math.random() * ph - ph;\n                    this.size = 2 + Math.random() * 4;\n                    this.speed = 0.3 + Math.random() * 0.8;\n                    this.hue = 100 + Math.random() * 60;\n                    this.opacity = 0.3 + Math.random() * 0.5;\n                    this.life = 1;\n                    this.decay = 0.002 + Math.random() * 0.005;\n                }\n                update() {\n                    this.y += this.speed;\n                    this.life -= this.decay;\n                    if (this.life &lt;= 0 || this.y &gt; ph + 20) {\n                        this.reset();\n                        this.y = -10;\n                        this.life = 1;\n                    }\n                    if (mouseX &amp;&amp; mouseY) {\n                        const dx = this.x - mouseX;\n                        const dy = this.y - mouseY;\n                        const dist = Math.sqrt(dx * dx + dy * dy);\n                        if (dist &lt; 150) {\n                            const force = (150 - dist) / 150 * 0.5;\n                            this.x += (dx / (dist || 1)) * force;\n                            this.y += (dy / (dist || 1)) * force;\n                        }\n                    }\n                }\n                draw() {\n                    pCtx.beginPath();\n                    pCtx.arc(this.x, this.y, this.size, 0, Math.PI * 2);\n                    pCtx.fillStyle = `hsla(${this.hue}, 100%, 50%, ${this.opacity * this.life})`;\n                    pCtx.fill();\n                    pCtx.shadowColor = `hsla(${this.hue}, 100%, 50%, ${this.opacity * this.life * 0.5})`;\n                    pCtx.shadowBlur = 15;\n                }\n            }\n\n            for (let i = 0; i &lt; MAX_PARTICLES; i++) {\n                const p = new Particle();\n                p.y = Math.random() * ph;\n                particles.push(p);\n            }\n\n            let mouseX = null,\n                mouseY = null;\n            document.addEventListener('mousemove', function(e) {\n                mouseX = e.clientX;\n                mouseY = e.clientY;\n            });\n\n            function drawParticles() {\n                pCtx.clearRect(0, 0, pw, ph);\n                if (!particlesActive) { requestAnimationFrame(drawParticles); return; }\n                for (const p of particles) { p.update();\n                    p.draw(); }\n                pCtx.shadowBlur = 0;\n                requestAnimationFrame(drawParticles);\n            }\n            drawParticles();\n\n            // ============================================================\n            // 5. CURSOR GLOW\n            // ============================================================\n            const glow = document.getElementById('cursorGlow');\n            document.addEventListener('mousemove', function(e) {\n                glow.style.left = e.clientX + 'px';\n                glow.style.top = e.clientY + 'px';\n            });\n\n            // ============================================================\n            // 6. EXFIL COUNTER &amp; TARGET COUNTER\n            // ============================================================\n            let exfilValue = 0;\n            const exfilEl = document.getElementById('exfilCounter');\n            const targetEl = document.getElementById('targetCounter');\n            let targetCount = 0;\n\n            function updateExfil() {\n                const speed = document.getElementById('btnExploit').dataset.active ? 0.8 : 0.15 + Math.random() * 0.3;\n                exfilValue += speed + Math.random() * 0.2;\n                if (exfilValue &gt; 999) exfilValue = 0;\n                exfilEl.textContent = exfilValue.toFixed(1) + ' GB';\n                if (Math.random() &lt; 0.08) {\n                    targetCount += Math.floor(Math.random() * 3) + 1;\n                    targetEl.textContent = targetCount;\n                }\n                setTimeout(updateExfil, 150 + Math.random() * 250);\n            }\n            updateExfil();\n\n            // ============================================================\n            // 7. NETWORK CHART\n            // ============================================================\n            const chartCanvas = document.getElementById('netChart');\n            const chartCtx = chartCanvas.getContext('2d');\n            let chartData = [];\n\n            function resizeChart() {\n                const rect = chartCanvas.parentElement.getBoundingClientRect();\n                chartCanvas.width = chartCanvas.offsetWidth || 120;\n                chartCanvas.height = chartCanvas.offsetHeight || 50;\n            }\n            resizeChart();\n\n            function drawChart() {\n                const w = chartCanvas.width,\n                    h = chartCanvas.height;\n                chartCtx.clearRect(0, 0, w, h);\n                let base = 0.3 + Math.random() * 0.3;\n                if (document.getElementById('btnExploit').dataset.active) base = 0.7 + Math.random() * 0.25;\n                chartData.push(base);\n                if (chartData.length &gt; 50) chartData.shift();\n                chartCtx.strokeStyle = '#0f0';\n                chartCtx.lineWidth = 2;\n                chartCtx.shadowColor = '#0f0';\n                chartCtx.shadowBlur = 10;\n                chartCtx.beginPath();\n                for (let i = 0; i &lt; chartData.length; i++) {\n                    const x = (i / chartData.length) * w;\n                    const y = h - (chartData[i] * h);\n                    if (i === 0) chartCtx.moveTo(x, y);\n                    else chartCtx.lineTo(x, y);\n                }\n                chartCtx.stroke();\n                chartCtx.shadowBlur = 0;\n                const last = chartData[chartData.length - 1] || 0.5;\n                chartCtx.fillStyle = '#0f0';\n                chartCtx.shadowColor = '#0f0';\n                chartCtx.shadowBlur = 20;\n                chartCtx.beginPath();\n                chartCtx.arc(w - 3, h - (last * h), 3, 0, Math.PI * 2);\n                chartCtx.fill();\n                chartCtx.shadowBlur = 0;\n                requestAnimationFrame(drawChart);\n            }\n            drawChart();\n\n            // ============================================================\n            // 8. TERMINAL \u2013 Typewriter + Interactive + File System + CD\n            // ============================================================\n            const terminal = document.getElementById('terminal');\n            const cmdInput = document.getElementById('cmdInput');\n\n            // Fake file system\n            const fakeFS = {\n                '/': ['etc', 'home', 'var', 'root', 'tmp', 'usr'],\n                '/etc': ['shadow', 'passwd', 'hosts', 'hostname', 'issue'],\n                '/home': ['zyrnox', 'user1', 'admin'],\n                '/root': ['secret.txt', '.bashrc', 'key.pem', 'database.sql'],\n                '/tmp': ['temp.log', 'cache.tmp'],\n                '/var': ['log', 'spool', 'www'],\n                '/var/log': ['syslog', 'auth.log', 'dmesg', 'lastlog'],\n                '/home/zyrnox': ['notes.txt', 'exploit.py', 'creds.txt', '.ssh']\n            };\n            const fakeFiles = {\n                '/etc/shadow': 'root:$6$xyz...:18888:0:99999:7:::\\ndaemon:*:...',\n                '/root/secret.txt': 'FLAG{this_is_not_real}',\n                '/root/database.sql': 'CREATE TABLE users (id INT, username VARCHAR, password VARCHAR);\\nINSERT INTO users VALUES (1,\"admin\",\"hash:1234\");',\n                '/home/zyrnox/creds.txt': 'admin:password123\\nroot:toor\\nuser:qwerty',\n                '/home/zyrnox/exploit.py': '#!/usr/bin/env python3\\n# Zyrnox exploit module v2.0',\n            };\n\n            let currentPath = '/home/zyrnox';\n\n            function resolvePath(path) {\n                if (path === '') return currentPath;\n                if (path === '.') return currentPath;\n                if (path === '..') {\n                    const parts = currentPath.split('/');\n                    if (parts.length &lt;= 2) return '/';\n                    parts.pop();\n                    return parts.join('/') || '/';\n                }\n                if (path.startsWith('/')) {\n                    // Absolute path \u2013 resolve .. inside\n                    const parts = path.split('/').filter(p =&gt; p !== '');\n                    const resolved = [];\n                    for (const part of parts) {\n                        if (part === '..') {\n                            if (resolved.length &gt; 0) resolved.pop();\n                        } else {\n                            resolved.push(part);\n                        }\n                    }\n                    return '/' + resolved.join('/');\n                }\n                // Relative path\n                if (currentPath === '/') return '/' + path;\n                return currentPath + '/' + path;\n            }\n\n            function getDirContent(path) {\n                if (fakeFS[path]) return fakeFS[path];\n                const parent = path.substring(0, path.lastIndexOf('/'));\n                if (fakeFS[parent]) {\n                    const base = path.substring(path.lastIndexOf('/') + 1);\n                    const list = fakeFS[parent];\n                    if (list.includes(base)) return ['(directory)'];\n                }\n                return null;\n            }\n\n            function getFileContent(path) {\n                return fakeFiles[path] || `[Fake] Content of ${path}`;\n            }\n\n            function lsPath(path) {\n                const resolved = resolvePath(path);\n                const content = getDirContent(resolved);\n                if (content) return content.join('  ');\n                return 'No such directory.';\n            }\n\n            let msgIndex = 0;\n            const terminalMessages = [\n                { type: 'output', text: 'Scanning ports 1-65535...' },\n                { type: 'output', text: 'Port 22: Open (SSH) \u2013 brute forcing...' },\n                { type: 'output', text: 'Port 80: Open (HTTP) \u2013 injecting payload...' },\n                { type: 'output', text: 'Port 443: Open (HTTPS) \u2013 intercepting SSL...' },\n                { type: 'error', text: 'Intrusion detected by IDS! Evading...' },\n                { type: 'highlight', text: 'Firewall bypassed using 0day CVE-2025-1337' },\n                { type: 'output', text: 'Root access obtained on 10.0.0.1' },\n                { type: 'output', text: 'Downloading shadow file...' },\n                { type: 'error', text: 'Warning: System may be monitored' },\n                { type: 'highlight', text: 'Backdoor installed with persistence' },\n                { type: 'output', text: 'Exfiltrating data to remote server...' },\n                { type: 'output', text: 'All targets compromised. Mission complete.' },\n            ];\n\n            function addTerminalLine(type, text) {\n                const line = document.createElement('div');\n                line.className = 'line';\n                const prefix = type === 'output' ? '[+] ' : (type === 'error' ? '[!] ' : (type === 'info' ? '[i] ' :\n                    '[\u2714] '));\n                const cls = type === 'output' ? 'output' : (type === 'error' ? 'error' : (type === 'info' ? 'info' :\n                    'highlight'));\n                line.innerHTML = `${prefix}`;\n                terminal.insertBefore(line, document.getElementById('inputLine'));\n                const span = line.querySelector('span.' + cls);\n                let idx = 0;\n                const chars = text.split('');\n                const interval = setInterval(() =&gt; {\n                    if (idx &lt; chars.length) {\n                        span.textContent += chars[idx];\n                        idx++;\n                        terminal.scrollTop = terminal.scrollHeight;\n                        playKeySound();\n                    } else {\n                        clearInterval(interval);\n                        terminal.scrollTop = terminal.scrollHeight;\n                    }\n                }, 15 + Math.random() * 25);\n                while (terminal.children.length &gt; 22) {\n                    const first = terminal.firstChild;\n                    if (first &amp;&amp; first !== document.getElementById('inputLine')) {\n                        terminal.removeChild(first);\n                    } else break;\n                }\n            }\n\n            function addTerminalLineInstant(type, text) {\n                const line = document.createElement('div');\n                line.className = 'line';\n                const prefix = type === 'output' ? '[+] ' : (type === 'error' ? '[!] ' : (type === 'info' ? '[i] ' :\n                    '[\u2714] '));\n                const cls = type === 'output' ? 'output' : (type === 'error' ? 'error' : (type === 'info' ? 'info' :\n                    'highlight'));\n                line.innerHTML = `${prefix}${text}`;\n                terminal.insertBefore(line, document.getElementById('inputLine'));\n                terminal.scrollTop = terminal.scrollHeight;\n                while (terminal.children.length &gt; 22) {\n                    const first = terminal.firstChild;\n                    if (first &amp;&amp; first !== document.getElementById('inputLine')) {\n                        terminal.removeChild(first);\n                    } else break;\n                }\n            }\n\n            function cycleTerminal() {\n                if (msgIndex &gt;= terminalMessages.length) msgIndex = 0;\n                const m = terminalMessages[msgIndex];\n                addTerminalLine(m.type, m.text);\n                msgIndex++;\n                if (Math.random() &lt; 0.2) {\n                    const ip = `${Math.floor(Math.random()*255)}.${Math.floor(Math.random()*255)}.${Math.floor(Math.random()*255)}.${Math.floor(Math.random()*255)}`;\n                    const countries = ['US', 'UK', 'DE', 'FR', 'RU', 'CN', 'IN', 'BR', 'JP', 'AU', 'EG', 'SA'];\n                    const country = countries[Math.floor(Math.random() * countries.length)];\n                    addTerminalLine('info', `Attacking ${ip} [${country}]...`);\n                }\n            }\n            setInterval(cycleTerminal, 2800);\n\n            // ============================================================\n            // 9. INTERACTIVE COMMANDS \u2013 Enhanced with CD\n            // ============================================================\n            function processCommand(cmd) {\n                const lower = cmd.toLowerCase().trim();\n                const parts = lower.split(' ');\n                const mainCmd = parts[0];\n\n                if (mainCmd === 'help') {\n                    addTerminalLine('output', 'Available commands:');\n                    addTerminalLine('output', '  help        \u2013 Show this help');\n                    addTerminalLine('output', '  exploit     \u2013 Execute exploit (simulated)');\n                    addTerminalLine('output', '  panic       \u2013 Activate panic mode');\n                    addTerminalLine('output', '  clear / cls \u2013 Clear terminal logs');\n                    addTerminalLine('output', '  stats       \u2013 Show system stats');\n                    addTerminalLine('output', '  ls [path]   \u2013 List directory contents');\n                    addTerminalLine('output', '  cd    \u2013 Change directory');\n                    addTerminalLine('output', '  cat   \u2013 Show file content');\n                    addTerminalLine('output', '  whoami      \u2013 Show current user');\n                    addTerminalLine('output', '  matrix      \u2013 Toggle matrix color');\n                    addTerminalLine('output', '  self-destruct \u2013 Reset session');\n                    addTerminalLine('output', '  exit        \u2013 Close session');\n                } else if (mainCmd === 'exploit') {\n                    addTerminalLine('highlight', 'Exploit executed on 0.0.0.0/0');\n                    addTerminalLine('output', 'Payload delivered. Reverse shell established.');\n                    playSweep();\n                    document.getElementById('btnExploit').dataset.active = 'true';\n                    setTimeout(() =&gt; { document.getElementById('btnExploit').dataset.active = ''; }, 3000);\n                    exfilValue += 5;\n                } else if (mainCmd === 'panic') {\n                    document.getElementById('btnPanic').click();\n                } else if (mainCmd === 'clear' || mainCmd === 'cls') {\n                    document.getElementById('btnClear').click();\n                } else if (mainCmd === 'stats') {\n                    addTerminalLine('output', `\ud83d\udcca System Stats:`);\n                    addTerminalLine('output', `  Exfiltrated: ${exfilEl.textContent}`);\n                    addTerminalLine('output', `  Targets: ${targetEl.textContent}`);\n                    addTerminalLine('output', `  Status: ${document.getElementById('statusText').textContent}`);\n                    addTerminalLine('output', `  Path: ${currentPath}`);\n                } else if (mainCmd === 'ls') {\n                    const path = parts.length &gt; 1 ? parts.slice(1).join(' ') : currentPath;\n                    const content = lsPath(path);\n                    addTerminalLine('output', content);\n                } else if (mainCmd === 'cd') {\n                    if (parts.length &lt; 2) {\n                        addTerminalLine('error', 'Usage: cd ');\n                    } else {\n                        const target = parts.slice(1).join(' ');\n                        const resolved = resolvePath(target);\n                        // Check if directory exists\n                        const dirContent = getDirContent(resolved);\n                        if (dirContent !== null) {\n                            currentPath = resolved;\n                            addTerminalLine('output', `Changed to ${currentPath}`);\n                        } else {\n                            addTerminalLine('error', `No such directory: ${target}`);\n                        }\n                    }\n                } else if (mainCmd === 'cat') {\n                    if (parts.length &lt; 2) {\n                        addTerminalLine('error', 'Usage: cat ');\n                    } else {\n                        const file = parts.slice(1).join(' ');\n                        const resolved = resolvePath(file);\n                        const content = getFileContent(resolved);\n                        addTerminalLine('output', content);\n                    }\n                } else if (mainCmd === 'whoami') {\n                    addTerminalLine('output', 'zyrnox (root)');\n                } else if (mainCmd === 'matrix') {\n                    const colors = ['#0f0', '#0ff', '#f0f', '#ff0', '#f00'];\n                    const current = document.querySelector('.glitch-main').style.color || '#0f0';\n                    let next = colors[(colors.indexOf(current) + 1) % colors.length];\n                    document.querySelector('.glitch-main').style.color = next;\n                    addTerminalLine('output', `Matrix color changed to ${next}`);\n                } else if (mainCmd === 'self-destruct') {\n                    addTerminalLine('error', '\ud83d\udca3 SELF-DESTRUCT SEQUENCE INITIATED');\n                    addTerminalLine('error', '\u26a0\ufe0f All data will be wiped!');\n                    playSweep();\n                    playSweep();\n                    setTimeout(() =&gt; { location.reload(); }, 2000);\n                } else if (mainCmd === 'exit') {\n                    addTerminalLine('output', 'Session terminated. Goodbye.');\n                    setTimeout(() =&gt; {\n                        while (terminal.children.length &gt; 1) {\n                            const first = terminal.firstChild;\n                            if (first &amp;&amp; first !== document.getElementById('inputLine')) {\n                                terminal.removeChild(first);\n                            } else break;\n                        }\n                        addTerminalLine('output', 'New session started.');\n                        addTerminalLine('output', 'Type \"help\" for commands.');\n                    }, 500);\n                } else {\n                    addTerminalLine('error', `Command not found: ${cmd}`);\n                }\n            }\n\n            cmdInput.addEventListener('keydown', function(e) {\n                if (e.key === 'Enter') {\n                    const cmd = cmdInput.value.trim();\n                    cmdInput.value = '';\n                    if (cmd === '') return;\n                    addTerminalLineInstant('cmd', cmd);\n                    processCommand(cmd);\n                }\n            });\n\n            // ============================================================\n            // 10. VIRTUAL KEYBOARD\n            // ============================================================\n            document.querySelectorAll('.vk-btn').forEach(btn =&gt; {\n                btn.addEventListener('click', function() {\n                    const cmd = this.dataset.cmd;\n                    cmdInput.value = cmd;\n                    cmdInput.focus();\n                    if (cmd.length &lt; 15) {\n                        const event = new KeyboardEvent('keydown', { key: 'Enter' });\n                        cmdInput.dispatchEvent(event);\n                    }\n                });\n            });\n\n            // ============================================================\n            // 11. AUDIO ENGINE (with Safari fix)\n            // ============================================================\n            let audioCtx = null;\n            let audioInitialized = false;\n            let audioMuted = false;\n            let ambientOsc = null;\n            let ambientGain = null;\n\n            function initAudio() {\n                if (audioMuted) return;\n                if (!audioCtx) {\n                    audioCtx = new(window.AudioContext || window.webkitAudioContext)();\n                }\n                if (audioCtx.state === 'suspended') {\n                    audioCtx.resume();\n                }\n                audioInitialized = true;\n                startAmbient();\n            }\n\n            function startAmbient() {\n                if (!audioCtx || audioMuted) return;\n                try {\n                    const bufferSize = audioCtx.sampleRate * 0.5;\n                    const buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);\n                    const data = buffer.getChannelData(0);\n                    for (let i = 0; i &lt; bufferSize; i++) {\n                        data[i] = (Math.random() * 2 - 1) * 0.015;\n                    }\n                    const source = audioCtx.createBufferSource();\n                    source.buffer = buffer;\n                    source.loop = true;\n                    const gain = audioCtx.createGain();\n                    gain.gain.value = 0.06;\n                    source.connect(gain);\n                    gain.connect(audioCtx.destination);\n                    source.start();\n                    ambientOsc = source;\n                    ambientGain = gain;\n                } catch (e) {}\n            }\n\n            function stopAmbient() {\n                try {\n                    if (ambientOsc) {\n                        ambientOsc.stop();\n                        ambientOsc = null;\n                    }\n                } catch (e) {}\n            }\n\n            function playKeySound() {\n                if (audioMuted || !audioInitialized) return;\n                try {\n                    const osc = audioCtx.createOscillator();\n                    const gain = audioCtx.createGain();\n                    osc.type = 'sine';\n                    osc.frequency.value = 600 + Math.random() * 400;\n                    gain.gain.setValueAtTime(0.03, audioCtx.currentTime);\n                    gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.03);\n                    osc.connect(gain);\n                    gain.connect(audioCtx.destination);\n                    osc.start();\n                    osc.stop(audioCtx.currentTime + 0.03);\n                } catch (e) {}\n            }\n\n            function playBeep(freq, duration) {\n                if (audioMuted || !audioInitialized) return;\n                try {\n                    const osc = audioCtx.createOscillator();\n                    const gain = audioCtx.createGain();\n                    osc.type = 'sawtooth';\n                    osc.frequency.value = freq;\n                    gain.gain.setValueAtTime(0.08, audioCtx.currentTime);\n                    gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + duration);\n                    osc.connect(gain);\n                    gain.connect(audioCtx.destination);\n                    osc.start();\n                    osc.stop(audioCtx.currentTime + duration);\n                } catch (e) {}\n            }\n\n            function playGlitchNoise() {\n                if (audioMuted || !audioInitialized) return;\n                try {\n                    const bufferSize = audioCtx.sampleRate * 0.05;\n                    const buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);\n                    const data = buffer.getChannelData(0);\n                    for (let i = 0; i &lt; bufferSize; i++) {\n                        data[i] = (Math.random() * 2 - 1) * 0.12;\n                    }\n                    const source = audioCtx.createBufferSource();\n                    source.buffer = buffer;\n                    const gain = audioCtx.createGain();\n                    gain.gain.value = 0.2;\n                    source.connect(gain);\n                    gain.connect(audioCtx.destination);\n                    source.start();\n                    source.stop(audioCtx.currentTime + 0.05);\n                } catch (e) {}\n            }\n\n            function playSweep() {\n                if (audioMuted || !audioInitialized) return;\n                try {\n                    const osc = audioCtx.createOscillator();\n                    const gain = audioCtx.createGain();\n                    osc.type = 'sine';\n                    osc.frequency.setValueAtTime(200, audioCtx.currentTime);\n                    osc.frequency.exponentialRampToValueAtTime(1200, audioCtx.currentTime + 0.3);\n                    gain.gain.setValueAtTime(0.06, audioCtx.currentTime);\n                    gain.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.3);\n                    osc.connect(gain);\n                    gain.connect(audioCtx.destination);\n                    osc.start();\n                    osc.stop(audioCtx.currentTime + 0.3);\n                } catch (e) {}\n            }\n\n            function speakText(text) {\n                if (audioMuted) return;\n                if (!('speechSynthesis' in window)) return;\n                const utterance = new SpeechSynthesisUtterance(text);\n                utterance.rate = 0.8;\n                utterance.pitch = 0.5;\n                utterance.volume = 0.5;\n                utterance.lang = 'en-US';\n                window.speechSynthesis.speak(utterance);\n            }\n\n            // ============================================================\n            // 12. PANIC MODE\n            // ============================================================\n            let panicActive = false;\n\n            function activatePanic() {\n                panicActive = !panicActive;\n                const container = document.getElementById('mainContainer');\n                const warning = document.getElementById('warningBanner');\n                const progressContainer = document.getElementById('progressContainer');\n                const progressBar = document.getElementById('progressBar');\n                const terminalEl = document.getElementById('terminal');\n                const glowEl = document.getElementById('cursorGlow');\n\n                if (panicActive) {\n                    container.classList.add('panic');\n                    warning.classList.add('panic-warn');\n                    warning.textContent = '\ud83d\udea8 PANIC MODE ACTIVE \u2022 SELF-DESTRUCT SEQUENCE INITIATED \ud83d\udea8';\n                    progressContainer.classList.add('panic-progress');\n                    progressBar.classList.add('panic-bar');\n                    terminalEl.classList.add('panic-term');\n                    glowEl.classList.add('panic-glow');\n                    document.querySelector('.glitch-overlay').style.background =\n                        'repeating-linear-gradient(0deg, rgba(255,0,0,0.02) 0px, rgba(255,0,0,0.02) 1px, transparent 1px, transparent 3px)';\n                    speakText('Warning, system self-destruct sequence initiated.');\n                    setTimeout(() =&gt; shakeScreen(1.6), 300);\n                    setTimeout(() =&gt; shakeScreen(1.3), 800);\n                    multiFlash(6, 180);\n                    document.querySelector('.glitch-main').style.color = '#f00';\n                } else {\n                    container.classList.remove('panic');\n                    warning.classList.remove('panic-warn');\n                    warning.textContent = '\u26a0\ufe0f SYSTEM COMPROMISED \u2022 YOUR DATA IS BEING EXFILTRATED \u26a0\ufe0f';\n                    progressContainer.classList.remove('panic-progress');\n                    progressBar.classList.remove('panic-bar');\n                    terminalEl.classList.remove('panic-term');\n                    glowEl.classList.remove('panic-glow');\n                    document.querySelector('.glitch-overlay').style.background =\n                        'repeating-linear-gradient(0deg, rgba(0,255,0,0.012) 0px, rgba(0,255,0,0.012) 1px, transparent 1px, transparent 3px)';\n                    speakText('Panic mode deactivated.');\n                    document.querySelector('.glitch-main').style.color = '#0f0';\n                }\n            }\n\n            // ============================================================\n            // 13. SCREEN EFFECTS\n            // ============================================================\n            const containerEl = document.getElementById('mainContainer');\n            const flashOverlay = document.getElementById('flashOverlay');\n\n            function shakeScreen(intensity) {\n                intensity = intensity || 1;\n                containerEl.classList.add('shake');\n                setTimeout(() =&gt; { containerEl.classList.remove('shake'); }, 400 * intensity);\n                flashOverlay.classList.add('active');\n                setTimeout(() =&gt; { flashOverlay.classList.remove('active'); }, 200 * intensity);\n                playGlitchNoise();\n                playBeep(1000 + Math.random() * 400, 0.08);\n            }\n\n            function multiFlash(count, delay) {\n                for (let i = 0; i &lt; count; i++) {\n                    setTimeout(() =&gt; {\n                        flashOverlay.classList.add('active');\n                        setTimeout(() =&gt; { flashOverlay.classList.remove('active'); }, 120);\n                        playBeep(500 + i * 200, 0.06);\n                    }, i * delay);\n                }\n            }\n\n            // ============================================================\n            // 14. BUTTON EVENTS\n            // ============================================================\n            document.getElementById('btnExploit').addEventListener('click', function() {\n                initAudio();\n                shakeScreen(1.2);\n                addTerminalLine('highlight', 'Exploit executed on target: 0.0.0.0/0');\n                addTerminalLine('output', 'Payload delivered. Reverse shell established.');\n                playSweep();\n                document.getElementById('statusText').textContent = '[\u26a1] Exploit successful!';\n                this.dataset.active = 'true';\n                setTimeout(() =&gt; { this.dataset.active = ''; }, 3000);\n                setTimeout(() =&gt; {\n                    document.getElementById('statusText').textContent = statuses[statusIndex % statuses.length];\n                }, 2200);\n                exfilValue += 8;\n            });\n\n            document.getElementById('btnPanic').addEventListener('click', function() {\n                initAudio();\n                activatePanic();\n                if (panicActive) {\n                    addTerminalLine('error', 'PANIC: Self\u2011destruct sequence initiated!');\n                    addTerminalLine('error', 'Deleting logs...');\n                    addTerminalLine('highlight', 'All evidence removed. Ghost mode activated.');\n                    playSweep();\n                    playSweep();\n                    setTimeout(() =&gt; shakeScreen(1.8), 400);\n                } else {\n                    addTerminalLine('info', 'Panic mode deactivated.');\n                }\n            });\n\n            document.getElementById('btnClear').addEventListener('click', function() {\n                while (terminal.children.length &gt; 2) {\n                    const first = terminal.firstChild;\n                    if (first &amp;&amp; first !== document.getElementById('inputLine')) {\n                        terminal.removeChild(first);\n                    } else break;\n                }\n                addTerminalLine('output', 'Logs cleared. System clean.');\n                playBeep(500, 0.08);\n                playBeep(700, 0.08);\n            });\n\n            const btnParticle = document.getElementById('btnParticle');\n            btnParticle.addEventListener('click', function() {\n                particlesActive = !particlesActive;\n                if (particlesActive) {\n                    this.textContent = '\u2728 Particles: ON';\n                    this.style.borderColor = '#0ff';\n                    this.style.color = '#0ff';\n                } else {\n                    this.textContent = '\u2728 Particles: OFF';\n                    this.style.borderColor = '#666';\n                    this.style.color = '#666';\n                }\n                playBeep(800, 0.08);\n            });\n\n            const btnMute = document.getElementById('btnMute');\n            btnMute.addEventListener('click', function() {\n                audioMuted = !audioMuted;\n                if (audioMuted) {\n                    this.textContent = '\ud83d\udd07 Muted';\n                    this.style.borderColor = '#666';\n                    this.style.color = '#666';\n                    stopAmbient();\n                    if (audioCtx &amp;&amp; audioCtx.state === 'running') {\n                        audioCtx.suspend();\n                    }\n                    speakText('Audio muted');\n                } else {\n                    this.textContent = '\ud83d\udd0a Mute';\n                    this.style.borderColor = '#ff0';\n                    this.style.color = '#ff0';\n                    if (audioCtx &amp;&amp; audioCtx.state === 'suspended') {\n                        audioCtx.resume();\n                    }\n                    initAudio();\n                    startAmbient();\n                    speakText('Audio unmuted');\n                }\n                playBeep(600, 0.08);\n            });\n\n            // ============================================================\n            // 15. PROGRESS &amp; STATUS\n            // ============================================================\n            const progressBar = document.getElementById('progressBar');\n            const statusText = document.getElementById('statusText');\n            const statuses = [\n                '[\u2022] Initializing attack vector...',\n                '[\u2022] Bypassing security protocols...',\n                '[\u2022] Injecting shellcode...',\n                '[\u2022] Escalating privileges...',\n                '[\u2022] Planting backdoor...',\n                '[\u2022] Covering tracks...',\n                '[\u2714] System fully compromised. Awaiting commands.',\n            ];\n            let statusIndex = 0;\n\n            function updateStatus() {\n                statusText.textContent = statuses[statusIndex % statuses.length];\n                statusIndex++;\n                progressBar.style.animation = 'none';\n                void progressBar.offsetWidth;\n                progressBar.style.animation = 'progressMove 8s infinite, progressGradient 3s infinite linear';\n            }\n            setInterval(updateStatus, 3800);\n\n            // ============================================================\n            // 16. WARNING BANNER ROTATION\n            // ============================================================\n            const warningBanner = document.getElementById('warningBanner');\n            const warnings = [\n                '\u26a0\ufe0f SYSTEM COMPROMISED \u2022 YOUR DATA IS BEING EXFILTRATED \u26a0\ufe0f',\n                '\ud83d\udd25 FIREWALL DOWN \u2022 FULL ACCESS GRANTED \ud83d\udd25',\n                '\ud83d\udc80 ROOTKIT DEPLOYED \u2022 SYSTEM OWNED \ud83d\udc80',\n                '\u26a1 BACKDOOR ACTIVE \u2022 PERMANENT CONTROL \u26a1',\n                '\ud83d\udee1\ufe0f DEFENSES OFFLINE \u2022 SYSTEM IS NAKED \ud83d\udee1\ufe0f',\n                '\ud83d\udc7e ZYRNOX HAS CONTROL \u2022 RESISTANCE IS FUTILE \ud83d\udc7e',\n                '\ud83d\udea8 ALL SECURITY PROTOCOLS FAILED \ud83d\udea8',\n                '\ud83d\udca3 NUKE DEPLOYED \u2022 TOTAL SYSTEM COLLAPSE \ud83d\udca3',\n            ];\n            let warnIdx = 0;\n\n            function rotateWarning() {\n                if (panicActive) return;\n                warnIdx = (warnIdx + 1) % warnings.length;\n                warningBanner.textContent = warnings[warnIdx];\n                playBeep(600 + Math.random() * 700, 0.05);\n            }\n            setInterval(rotateWarning, 3200);\n\n            // ============================================================\n            // 17. DYNAMIC TITLE\n            // ============================================================\n            const titles = [\n                'Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08 Zyrnox',\n                '\ud83d\udc80 ROOT ACCESS GRANTED \ud83d\udc80',\n                '\u26a1 SYSTEM COMPROMISED \u26a1',\n                '\ud83d\udd25 ZYRNOX OWNS THIS SERVER \ud83d\udd25',\n                '\ud83d\udc7e TOTAL CONTROL \ud83d\udc7e',\n                'Hacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08 Zyrnox',\n                '\ud83d\udea8 SECURITY BREACH \ud83d\udea8',\n                '\ud83d\udca3 DATA EXFILTRATED \ud83d\udca3'\n            ];\n            let titleIdx = 0;\n            setInterval(() =&gt; {\n                titleIdx = (titleIdx + 1) % titles.length;\n                document.title = titles[titleIdx];\n            }, 2500);\n\n            // ============================================================\n            // 18. RANDOM EFFECTS\n            // ============================================================\n            setInterval(() =&gt; {\n                if (Math.random() &lt; 0.2) {\n                    flashOverlay.classList.add('active');\n                    setTimeout(() =&gt; { flashOverlay.classList.remove('active'); }, 80);\n                }\n                if (Math.random() &lt; 0.25 &amp;&amp; audioInitialized &amp;&amp; !audioMuted) {\n                    playBeep(200 + Math.random() * 900, 0.03);\n                }\n                if (Math.random() &lt; 0.08) {\n                    const msgs = ['[SYSTEM] Memory corruption detected...',\n                        '[WARN] Unauthorized access attempt from IP 192.168.1.1',\n                        '[INFO] Firewall rule bypassed', '[CRIT] Kernel panic imminent',\n                        '[DEBUG] Analyzing network traffic'\n                    ];\n                    addTerminalLine('info', msgs[Math.floor(Math.random() * msgs.length)]);\n                }\n            }, 4000);\n\n            // ============================================================\n            // 19. STARTUP\n            // ============================================================\n            setTimeout(() =&gt; {\n                addTerminalLine('highlight', '=== ZYRNOX v7.0 ULTIMATE INITIALIZED ===');\n                addTerminalLine('output', 'System ready. All modules online.');\n                addTerminalLine('info', 'Type \"help\" for available commands.');\n                playBeep(800, 0.08);\n                playBeep(1000, 0.08);\n                playSweep();\n                setTimeout(() =&gt; {\n                    if (audioCtx &amp;&amp; !audioMuted) {\n                        initAudio();\n                    }\n                }, 500);\n                // Speech only after user interaction \u2013 we schedule it but it will fire on first click\n            }, 1200);\n\n            // ============================================================\n            // 20. INIT AUDIO ON FIRST INTERACTION (Safari compatible)\n            // ============================================================\n            document.addEventListener('click', function() {\n                if (!audioInitialized &amp;&amp; !audioMuted) {\n                    initAudio();\n                    playBeep(1000, 0.08);\n                    playBeep(1200, 0.08);\n                    playSweep();\n                    // Now speak after audio is ready\n                    if (!audioMuted) {\n                        setTimeout(() =&gt; {\n                            speakText('Zyrnox system fully operational. Awaiting commands.');\n                        }, 300);\n                    }\n                }\n            }, { once: false });\n\n            // ============================================================\n            // 21. KEYBOARD SHORTCUTS\n            // ============================================================\n            document.addEventListener('keydown', function(e) {\n                if (e.key === 'e' || e.key === 'E') document.getElementById('btnExploit').click();\n                if (e.key === 'p' || e.key === 'P') document.getElementById('btnPanic').click();\n                if (e.key === 'c' || e.key === 'C') document.getElementById('btnClear').click();\n                if (e.key === 't' || e.key === 'T') document.getElementById('btnParticle').click();\n                if (e.key === 'm' || e.key === 'M') document.getElementById('btnMute').click();\n                if (e.target !== cmdInput &amp;&amp; e.key.length === 1 &amp;&amp; !e.ctrlKey &amp;&amp; !e.metaKey) {\n                    cmdInput.focus();\n                }\n            });\n\n            console.log('%c\ud83d\udd25 ZYRNOX v7.0 ULTIMATE \ud83d\udd25', 'font-size:28px; color:#0f0; font-weight:bold;');\n            console.log('%cHacked By Fares \ud83d\ude08\ud83d\ude08\ud83d\ude08', 'font-size:22px; color:#f0f; font-weight:bold;');\n            console.log('%c\ud83d\udc80 100/100 \u2013 Perfect Score \ud83d\udc80', 'font-size:20px; color:#ff0; font-weight:bold;');\n            console.log('%cPress E=Exploit, P=Panic, C=Clear, T=Particles, M=Mute', 'font-size:14px; color:#aaa;');\n            console.log('%cType \"help\" in the terminal for commands.', 'font-size:14px; color:#aaa;');\n\n        })();\n    \n\n", "creation_timestamp": "2026-07-15T16:36:56.096264Z"}