Voxiom.io Emulation Premium Cheat Client

A premium cheat client for Voxiom.io developed by Emulation, featuring advanced in-game mods and enhancements.

当前为 2025-06-17 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Voxiom.io Emulation Premium Cheat Client
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  A premium cheat client for Voxiom.io developed by Emulation, featuring advanced in-game mods and enhancements.
// @author       Emulation
// @match        https://voxiom.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=voxiom.io
// @grant        none
// @license      MIT
// ==/UserScript==


(function() {
  // Settings
  const prototype_ = {
    player: {
      opacity: 1,
      wireframe: false,
      seeThroughWalls: false,
      meshType: 'Normal',
      animationSpeed: 1,
      baseHue: 0,
      emissiveIntensity: 0.5,
      crosshairType: 'None',
      crosshairSize: 20,
      crosshairGap: 5,
      crosshairColor: '#00f0ff',
      notifications: true,
      modStatus: true,
      menuOpacity: 1.0,
      fov: 90,
      noFog: false,
      theme: localStorage.getItem('theme') || 'obsidian-black',
      menuPosition: JSON.parse(localStorage.getItem('menuPosition')) || { left: '50%', top: '50%' },
      menuVisible: localStorage.getItem('menuVisible') !== 'false',
      menuMinimized: false
    }
  };

  const playerMaterials = new Set();
  let notificationTimeout = null;
  const clientVersion = '2.0.0';
  let menuVisible = prototype_.player.menuVisible;
  let camera, scene;
  const notifications = [];

  // Save settings
  function saveSettings() {
    localStorage.setItem('theme', prototype_.player.theme);
    localStorage.setItem('menuPosition', JSON.stringify(prototype_.player.menuPosition));
    localStorage.setItem('menuVisible', menuVisible);
    localStorage.setItem('menuMinimized', prototype_.player.menuMinimized);
    localStorage.setItem('settings', JSON.stringify({
      opacity: prototype_.player.opacity,
      wireframe: prototype_.player.wireframe,
      seeThroughWalls: prototype_.player.seeThroughWalls,
      meshType: prototype_.player.meshType,
      animationSpeed: prototype_.player.animationSpeed,
      baseHue: prototype_.player.baseHue,
      emissiveIntensity: prototype_.player.emissiveIntensity,
      crosshairType: prototype_.player.crosshairType,
      crosshairSize: prototype_.player.crosshairSize,
      crosshairGap: prototype_.player.crosshairGap,
      crosshairColor: prototype_.player.crosshairColor,
      notifications: prototype_.player.notifications,
      modStatus: prototype_.player.modStatus,
      menuOpacity: prototype_.player.menuOpacity,
      fov: prototype_.player.fov,
      noFog: prototype_.player.noFog
    }));
  }

  // Load settings
  const savedSettings = localStorage.getItem('settings');
  if (savedSettings) {
    Object.assign(prototype_.player, JSON.parse(savedSettings));
  }

  // Show notification
  function showNotification(message) {
    if (!prototype_.player.notifications) return;
    const notification = document.createElement('div');
    notification.className = 'notification tooltip';
    notification.textContent = message;
    notification.style.position = 'fixed';
    notification.style.bottom = `${20 + notifications.length * 40}px`;
    notification.style.right = '20px';
    notification.style.background = 'var(--bg-gradient)';
    notification.style.border = '1px solid var(--accent-color)';
    notification.style.color = 'var(--text-color)';
    notification.style.padding = '6px 12px';
    notification.style.borderRadius = '5px';
    notification.style.boxShadow = '0 4px 15px var(--accent-shadow)';
    notification.style.opacity = '0';
    notification.style.transition = 'opacity 0.3s ease, transform 0.3s ease';
    notification.style.transform = 'translateX(20px)';
    notification.style.zIndex = '999997';
    notification.style.fontFamily = '"Inter", sans-serif';
    notification.style.fontSize = '11px';
    notification.style.backdropFilter = 'blur(12px)';
    document.body.appendChild(notification);
    notifications.push(notification);

    setTimeout(() => {
      notification.style.opacity = '1';
      notification.style.transform = 'translateX(0)';
    }, 10);
    setTimeout(() => {
      notification.style.opacity = '0';
      notification.style.transform = 'translateX(20px)';
      setTimeout(() => {
        notification.remove();
        notifications.splice(notifications.indexOf(notification), 1);
        notifications.forEach((n, i) => {
          n.style.bottom = `${20 + i * 40}px`;
        });
      }, 300);
    }, 2500);

    if (notificationTimeout) clearTimeout(notificationTimeout);
    notificationTimeout = setTimeout(() => {}, 100);
  }

  // Patch Array.push
  const originalPush = Array.prototype.push;
  Array.prototype.push = function(...args) {
    try {
      for (const obj of args) {
        const mat = obj?.material;
        if (!mat || mat.type !== "MeshBasicMaterial") continue;
        mat.transparent = true;
        playerMaterials.add(mat);
        applyMeshType(mat);
        if (!camera && obj.camera) {
          camera = obj.camera;
          applyFOV();
        }
        if (!scene && obj.scene) {
          scene = obj.scene;
          applyFog();
        }
      }
    } catch (e) {
      console.error("[EMULATION'S PREMIUM] Material hook error:", e);
      showNotification("Warning: Material hooking failed");
    }
    return originalPush.apply(this, args);
  };

  // Apply chams
  function applyChamsSettings() {
    try {
      playerMaterials.forEach(mat => {
        if (!mat) return;
        mat.opacity = prototype_.player.opacity;
        mat.wireframe = prototype_.player.wireframe;
        mat.transparent = true;
        mat.side = 2;
        if (prototype_.player.seeThroughWalls) {
          mat.depthTest = false;
          mat.depthFunc = 7;
        } else {
          mat.depthTest = true;
          mat.depthFunc = 3;
        }
        applyMeshType(mat);
      });
      applyFOV();
      applyFog();
      updateStatus();
      drawCrosshair();
    } catch (e) {
      console.error("[EMULATION'S PREMIUM] Chams error:", e);
      showNotification("Error applying chams");
    }
  }

  // Apply FOV
  function applyFOV() {
    if (camera) {
      camera.fov = prototype_.player.fov;
      camera.updateProjectionMatrix();
    }
  }

  // Apply Fog
  function applyFog() {
    if (scene) {
      if (prototype_.player.noFog) {
        scene.fog = null;
      } else {
        if (scene.fog === null) {
          scene.fog = new THREE.Fog(0x000000, 10, 100);
        }
      }
    }
  }

  // Dynamic color helpers
  function getRainbowColor() { return `hsl(${(Date.now() / (50 / prototype_.player.animationSpeed)) % 360}, 100%, 50%)`; }
  function getAuroraColor() { const t = Date.now() / (400 / prototype_.player.animationSpeed); return `hsl(${(t * 30 + prototype_.player.baseHue) % 360}, 80%, 60%)`; }
  function getNeonPulseColor() { const t = Date.now() / (100 / prototype_.player.animationSpeed); const i = (Math.sin(t * 2) + 1) / 2; return `hsl(${(300 + prototype_.player.baseHue) % 360}, 100%, ${50 + i * 30}%)`; }
  function getSolarFlareColor() { const t = Date.now() / (250 / prototype_.player.animationSpeed); return `hsl(${(30 + prototype_.player.baseHue) % 360}, 100%, ${60 + Math.sin(t) * 20}%)`; }

  // Mesh type implementation
  function applyMeshType(mat) {
    if (!mat) return;
    const type = prototype_.player.meshType;
    mat.color.set('white');
    if (mat.emissive) mat.emissive.setHex(0x000000);
    mat.wireframe = prototype_.player.wireframe;
    mat.side = 2;
    const emissiveFactor = prototype_.player.emissiveIntensity;
    switch (type) {
      case 'Normal': mat.opacity = 1; mat.transparent = false; mat.depthTest = true; break;
      case 'Glow Neon': mat.color.set(`hsl(${(180 + prototype_.player.baseHue) % 360}, 100%, 50%)`); mat.opacity = prototype_.player.opacity; if (mat.emissive) mat.emissive.setHex(0x00FFFF).multiplyScalar(emissiveFactor); mat.transparent = mat.opacity < 1; mat.depthTest = true; break;
      case 'Rainbow': mat.transparent = true; mat.opacity = 0.9; mat.depthTest = false; mat.color.set(getRainbowColor()); break;
      case 'Glass': mat.color.set(`hsl(${(200 + prototype_.player.baseHue) % 360}, 50%, 80%)`); mat.opacity = 0.3; mat.transparent = true; mat.depthTest = true; break;
      case 'Red Danger': mat.color.set(`hsl(${(0 + prototype_.player.baseHue) % 360}, 100%, 50%)`); mat.opacity = 0.9; mat.transparent = true; mat.depthTest = true; break;
      case 'Hacker Matrix': mat.color.set(`hsl(${(120 + prototype_.player.baseHue) % 360}, 100%, 50%)`); mat.wireframe = true; mat.opacity = 1; mat.transparent = false; mat.depthTest = true; break;
      case 'Chrome Metal': mat.color.set('#C0C0C0'); if (mat.emissive) mat.emissive.setHex(0x404040).multiplyScalar(emissiveFactor); mat.opacity = 1; mat.transparent = false; mat.depthTest = true; break;
      case 'Aurora Borealis': mat.transparent = true; mat.opacity = 0.7; mat.depthTest = false; mat.color.set(getAuroraColor()); break;
      case 'Neon Pulse': mat.transparent = true; mat.opacity = 0.9; mat.depthTest = false; mat.color.set(getNeonPulseColor()); if (mat.emissive) mat.emissive.setHex(0xFF00FF).multiplyScalar(emissiveFactor); break;
      case 'Solar Flare': mat.transparent = true; mat.opacity = 0.9; mat.depthTest = false; mat.color.set(getSolarFlareColor()); if (mat.emissive) mat.emissive.setHex(0xFFA500).multiplyScalar(emissiveFactor); break;
      default: mat.opacity = prototype_.player.opacity; mat.transparent = mat.opacity < 1; mat.depthTest = true; break;
    }
  }

  // Animation loop
  let animationFrameId;
  function animate() {
    if (!menuVisible && !prototype_.player.modStatus && prototype_.player.crosshairType === 'None') {
      drawCrosshair();
      animationFrameId = requestAnimationFrame(animate);
      return;
    }
    const staticMeshes = ['Normal', 'Glow Neon', 'Glass', 'Red Danger', 'Hacker Matrix', 'Chrome Metal'];
    if (!staticMeshes.includes(prototype_.player.meshType)) {
      playerMaterials.forEach(mat => {
        if (!mat) return;
        switch (prototype_.player.meshType) {
          case 'Rainbow': mat.color.set(getRainbowColor()); break;
          case 'Aurora Borealis': mat.color.set(getAuroraColor()); break;
          case 'Neon Pulse': mat.color.set(getNeonPulseColor()); break;
          case 'Solar Flare': mat.color.set(getSolarFlareColor()); break;
        }
      });
    }
    drawCrosshair();
    animationFrameId = requestAnimationFrame(animate);
  }

  // Crosshair rendering
  let crosshairCanvas, crosshairCtx;
  function initCrosshairCanvas() {
    crosshairCanvas = document.createElement('canvas');
    crosshairCanvas.id = 'crosshair-canvas';
    crosshairCanvas.style.position = 'fixed';
    crosshairCanvas.style.top = '0';
    crosshairCanvas.style.left = '0';
    crosshairCanvas.style.width = '100%';
    crosshairCanvas.style.height = '100%';
    crosshairCanvas.style.zIndex = '999998';
    crosshairCanvas.style.pointerEvents = 'none';
    crosshairCanvas.style.background = 'var(--crosshair-overlay)';
    document.body.appendChild(crosshairCanvas);
    crosshairCtx = crosshairCanvas.getContext('2d');
    resizeCrosshair();
  }

  function resizeCrosshair() {
    if (!crosshairCanvas) return;
    crosshairCanvas.width = window.innerWidth;
    crosshairCanvas.height = window.innerHeight;
    drawCrosshair();
  }

  function drawCrosshair() {
    if (!crosshairCtx || !crosshairCanvas) return;
    crosshairCtx.clearRect(0, 0, crosshairCanvas.width, crosshairCanvas.height);
    if (prototype_.player.crosshairType === 'None') return;

    const centerX = crosshairCanvas.width / 2;
    const centerY = crosshairCanvas.height / 2;
    const size = prototype_.player.crosshairSize;
    const gap = prototype_.player.crosshairGap;
    const color = prototype_.player.crosshairColor;
    crosshairCtx.strokeStyle = color;
    crosshairCtx.fillStyle = color;
    crosshairCtx.lineWidth = 2;

    switch (prototype_.player.crosshairType) {
      case 'Dot':
        crosshairCtx.beginPath();
        crosshairCtx.arc(centerX, centerY, size / 5, 0, Math.PI * 2);
        crosshairCtx.fill();
        break;
      case 'Cross':
        crosshairCtx.beginPath();
        crosshairCtx.moveTo(centerX - size / 2, centerY);
        crosshairCtx.lineTo(centerX - gap, centerY);
        crosshairCtx.moveTo(centerX + gap, centerY);
        crosshairCtx.lineTo(centerX + size / 2, centerY);
        crosshairCtx.moveTo(centerX, centerY - size / 2);
        crosshairCtx.lineTo(centerX, centerY - gap);
        crosshairCtx.moveTo(centerX, centerY + gap);
        crosshairCtx.lineTo(centerX, centerY + size / 2);
        crosshairCtx.stroke();
        break;
      case 'Plus':
        crosshairCtx.beginPath();
        crosshairCtx.lineWidth = 4;
        crosshairCtx.moveTo(centerX - size / 3, centerY);
        crosshairCtx.lineTo(centerX - gap, centerY);
        crosshairCtx.moveTo(centerX + gap, centerY);
        crosshairCtx.lineTo(centerX + size / 3, centerY);
        crosshairCtx.moveTo(centerX, centerY - size / 3);
        crosshairCtx.lineTo(centerX, centerY - gap);
        crosshairCtx.moveTo(centerX, centerY + gap);
        crosshairCtx.lineTo(centerX, centerY + size / 3);
        crosshairCtx.stroke();
        break;
      case 'Dynamic Dot':
        const pulseSize = size / 5 + Math.sin(Date.now() / 300) * (size / 4);
        crosshairCtx.beginPath();
        crosshairCtx.arc(centerX, centerY, pulseSize, 0, Math.PI * 2);
        crosshairCtx.fill();
        break;
    }
  }

  // Update status bar
  function updateStatus() {
    const statusBar = document.querySelector('#status-bar');
    if (!statusBar) return;
    statusBar.innerHTML = `
      <span class="status-item" title="Current mesh type"><i class="fas fa-cube"></i> Mesh: <span class="status-value">${prototype_.player.meshType}</span></span>
      <span class="status-item tooltip" id="wallhack-toggle" title="Click to toggle wallhacks"><i class="fas fa-eye"></i> Wallhacks: <span class="${prototype_.player.seeThroughWalls ? 'active' : ''}">${prototype_.player.seeThroughWalls ? 'ON' : 'OFF'}</span></span>
      <span class="status-item tooltip" title="Current crosshair type"><i class="fas fa-crosshairs"></i> Crosshair: <span class="status-value">${prototype_.player.crosshairType}</span></span>
      <span class="status-item tooltip" title="Current FOV setting"><i class="fas fa-camera"></i> FOV: <span class="status-value">${prototype_.player.fov}°</span></span>
    `;
    const wallhackToggle = statusBar.querySelector('#wallhack-toggle');
    if (wallhackToggle) {
      wallhackToggle.onclick = () => {
        prototype_.player.seeThroughWalls = !prototype_.player.seeThroughWalls;
        showNotification(`Wallhacks ${prototype_.player.seeThroughWalls ? 'enabled' : 'disabled'}`);        applyChamsSettings();
        updateCategoryUI('Settings');
      };
    }
  }

  // UI styles
  if (!document.getElementById('emuChamsStyle')) {
    const styleSheet = document.createElement('style');
    styleSheet.id = 'emuChamsStyle';
    styleSheet.innerHTML = `
      @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=Orbitron:wght@700;800&display=swap');
      @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css');

      :root {
        --accent-color: #00ccff;
        --accent-shadow: rgba(0, 204, 255, 0.4);
        --bg-gradient: linear-gradient(to bottom, rgba(0, 10, 20, 0.9), rgba(5, 15, 30, 0.9));
        --btn-bg: rgba(20, 30, 50, 0.7);
        --btn-hover-gradient: linear-gradient(to right, rgba(0, 204, 255, 0.3), rgba(255, 64, 129, 0.3));
        --text-color: #f0f6ff;
        --status-bg: rgba(0, 10, 20, 0.85);
        --border-color: #1a2538;
        --divider-color: #2e3a50;
        --crosshair-overlay: linear-gradient(to bottom, rgba(0, 10, 20, 0.05), rgba(0, 10, 20, 0.1));
      }

      [data-theme="obsidian-black"] { --accent-color: #00ccff; --accent-shadow: rgba(0, 204, 255, 0.4); --bg-gradient: linear-gradient(to bottom, rgba(0, 10, 20, 0.9), rgba(5, 5, 15, 30, 0.9)); --btn-bg: rgba(20, 30, 50, 0.7); --btn-hover-bg: rgba(0, 204, 255, 0.3); --text-color: #f0f6ff; --status-bg: rgba(0, 10, 20, 5, 30, 0.85); --border-color: #1a2538; --divider-color: #2e3a50; --crosshair-overlay: linear-gradient(to bottom, rgba(0, 10, 20, 0.05), rgba(0, 10, 20, 0.1)); }
      [data-theme="arctic-white"] { --accent-color: #0066cc; --accent-shadow: rgba(0, 0, 204, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(255, 255, 255, 0.9), rgba(235, 245, 255, 0.9)); --btn-bg: rgba(210, 220, 230, 0.4); --btn-hover-bg: rgba(0, 105, 204, 0.2); --text-color: #1a2530; --status-bg: rgba(255, 255, 255, 0.85); --border-color: #d5e0f0; --divider-color: #e5e0f5; --crosshair-overlay: linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(235, 245, 255, 0.1)); }
      [data-theme="crimson-pulse"] { --accent-color: #ff3333; --accent-shadow: rgba(255, 51, 51, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(45, 0, 0, 0.9), rgba(30, 5, 5, 5, 0.9)); --btn-bg: rgba(60, 15, 15, 0.7); --btn-hover-bg: rgba(255, 51, 51, 0.5); --text-color: #ffcc99; --status-bg: rgba(30, 5, 5, 0, 0.85); --border-color: #4a2525; --divider-color: #5a3f3f3f; --crosshair-bg: linear-gradient(to bottom, rgba(45, 0, 0, 0.1), rgba(30, 5, 5, 0.1)); }
      [data-theme="toxic-green"] { --accent-color: #00ff33; --accent-shadow: rgba(0, 255, 51, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(0, 40, 0, 0.9), rgba(55, 25, 5, 0.9)); --btn-bg: rgba(20, 60, 20, 0.7); --btn-hover-bg: rgba(0, 255, 51, 0.2); --text-color: #ccff99; --status-bg: rgba(5, 5, 25, 5, 0.85); --border-color: #2f4a2f; --divider-color: #3f5a3f; --crosshair-bg: linear-gradient(to bottom, rgba(5, 40, 0, 0.05), rgba(5, 5, 25, 5, 0.05)); }
      [data-theme="sapphire-blue"] { --accent-color: #3399ff; --accent-shadow: rgba(51, 153, 255, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(0, 20, 50, 0.9), rgba(5, 5, 15, 40, 0.9)); --btn-bg: rgba(20, 50, 80, 0.3); --btn-hover-bg: rgba(51, 153, 255, 0.2); --text-color: #c3c3e6ff; --status-bg: rgba(5, 5, 15, 40, 0.85); --border-color: #2f3f5a; --divider-color: #3f4f6a; --crosshair-bg: linear-gradient(to bottom, rgba(0, 20, 50, 0.05), rgba(5, 5, 15, 40, 0.05)); }
      [data-theme="synthwave-purple"] { --accent-color: #cc66cc; --accent-shadow: rgba(204, 102, 204, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(40, 0, 50, 0.9), rgba(25, 5, 5, 40, 0.9)); --btn-bg: rgba(60, 20, 70, 0.3); --btn-hover-bg: rgba(204, 102, 204, 0.2); --text-color: #e6ccff; --status-bg: rgba(25, 5, 5, 40, 0.85); --border-color: #4a2f5a; --divider-color: #5a3f6a; --crosshair-bg: linear-gradient(to bottom, rgba(40, 0, 50, 0.05), rgba(25, 5, 5, 40, 0.05)); }
      [data-theme="dark-neon"] { --accent-color: #00e6ff; --accent-shadow: rgba(0, 230, 255, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(0, 10, 20, 0.9), rgba(5, 5, 15, 30, 0.9)); --btn-bg: rgba(20, 30, 50, 0.7); --btn-hover-bg: rgba(0, 230, 255, 0.2); --text-color: #f0f6ff; --status-bg: rgba(0, 10, 20, 5, 30, 0.85); --border-color: #1a2538; --divider-color: #2e3a50; --crosshair-bg: linear-gradient(to bottom, rgba(0, 10, 20, 0.05), rgba(0, 10, 20, 0.1)); }
      [data-theme="light-cyber"] { --accent-color: #0066cc; --accent-shadow: rgba(0, 102, 204, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(255, 255, 255, 0.9), rgba(235, 245, 255, 0.9)); --btn-bg: rgba(210, 220, 230, 0.4); --btn-hover-bg: rgba(0, 102, 204, 0.2); --text-color: #1a2530; --status-bg: rgba(255, 255, 255, 0.85); --border-color: #d5e0f0; --divider-color: #e5e0f5; --crosshair-bg: linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(235, 245, 255, 0.1)); }
      [data-theme="matrix-green"] { --accent-color: #00ff33; --accent-shadow: rgba(0, 255, 51, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(0, 40, 0, 0.9), rgba(5, 5, 25, 5, 0.9)); --btn-bg: rgba(20, 60, 20, 0.7); --btn-hover-bg: rgba(0, 255, 51, 0.2); --text-color: #ccff99; --status-bg: rgba(5, 5, 25, 5, 0.85); --border-color: #2f4a2f; --divider-color: #3f5a3f; --crosshair-bg: linear-gradient(to bottom, rgba(0, 40, 0, 0.05), rgba(5, 5, 25, 5, 0.05)); }
      [data-theme="retro-vaporwave"] { --accent-color: #ff66cc; --accent-shadow: rgba(255, 102, 204, 0.3); --bg-gradient: linear-gradient(to bottom, rgba(255, 102, 204, 0.5), rgba(90, 0, 150, 0.5)); --btn-bg: rgba(255, 102, 204, 0.4); --btn-hover-bg: rgba(255, 102, 204, 0.6); --text-color: #f0f6ff; --status-bg: rgba(90, 0, 150, 0.7); --border-color: #9000cc; --divider-color: #c300ff; --crosshair-bg: linear-gradient(to bottom, rgba(255, 102, 204, 0.1), rgba(90, 0, 150, 0.1)); }

      #menu {
        position: absolute;
        width: 400px;
        background: var(--bg-gradient);
        backdrop-filter: blur(12px);
        border: 1px solid var(--accent-color);
        border-radius: 5px;
        box-shadow: 0 4px 25px var(--accent-shadow), inset 0 0 5px rgba(255, 255, 255, 0.1);
        z-index: 999999;
        font-family: 'Inter', sans-serif;
        color: var(--text-color);
        opacity: ${prototype_.player.menuOpacity};
        transition: opacity 0.3s ease, transform 0.3s ease, height 0.3s ease;
        left: ${prototype_.player.menuPosition.left};
        top: ${prototype_.player.menuPosition.top};
      }

      #menu.hidden {
        opacity: 0;
        transform: scale(0.95);
        pointer-events: none;
      }

      #menu.minimized {
        height: 32px;
        overflow: hidden;
      }

      #menu.transitioning {
        opacity: 0;
        transition: opacity 0.2s ease;
      }

      #menu-header {
        padding: 5px 8px;
        background: rgba(0, 0, 0, 0.3);
        display: flex;
        align-items: center;
        border-bottom: 1px solid var(--border-color);
        cursor: move;
      }

      #menu-logo {
        width: 18px;
        height: 18px;
        margin-right: 6px;
        background: conic-gradient(from 45deg, transparent 0deg 90deg, var(--accent-color) 90deg 180deg, transparent 180deg 270deg, var(--accent-color) 270deg 360deg);
        clip-path: polygon(50% 0%, 100% 100%, 0% 100%);
        transform: rotate(45deg);
      }

      #menu-badge {
        font-size: 8px;
        padding: 2px 6px;
        background: linear-gradient(45deg, var(--accent-color), #ff4081);
        color: var(--btn-bg);
        border-radius: 3px;
        margin-left: 6px;
        text-transform: uppercase;
        font-weight: 800;
        font-family: 'Orbitron', sans-serif;
      }

      #menu-title {
        font-size: 13px;
        font-weight: 800;
        font-family: 'Orbitron', sans-serif;
        background: linear-gradient(45deg, var(--accent-color), #ff4081);
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        text-shadow: 0 0 3px var(--accent-shadow);
        margin: 0;
        flex-grow: 1;
      }

      #menu-controls button {
        background: none;
        border: none;
        color: var(--text-color);
        font-size: 11px;
        padding: 3px;
        cursor: pointer;
        transition: color 0.2s, transform 0.2s;
        margin-left: 3px;
      }

      #menu-controls button:hover {
        color: var(--accent-color);
        transform: scale(1.1);
      }

      #menu-tabs {
        display: flex;
        background: var(--status-bg);
        border-bottom: 1px solid var(--border-color);
      }

      #menu-tabs button {
        background: transparent;
        border: none;
        color: var(--text-color);
        padding: 5px 8px;
        cursor: pointer;
        font-size: 10px;
        font-weight: 800;
        font-family: 'Orbitron', sans-serif;
        transition: all 0.2s;
        flex: 1;
        text-align: center;
        text-transform: uppercase;
      }

      #menu-tabs button:hover {
        background: var(--btn-hover-bg);
      }

      #menu-tabs button.active {
        color: var(--accent-color);
        background: var(--btn-bg);
        border-bottom: 2px solid var(--accent-color);
      }

      #menu-body {
        padding: 8px;
        max-height: 380px;
        overflow-y: auto;
        background: transparent;
      }

      #menu-body::-webkit-scrollbar {
        width: 6px;
      }

      #menu-body::-webkit-scrollbar-track {
        background: var(--btn-bg);
        border-radius: 3px;
      }

      #menu-body::-webkit-scrollbar-thumb {
        background: var(--accent-color);
        border-radius: 3px;
      }

      .tab-content {
        display: none;
        animation: fadeIn 0.3s ease;
      }

      .tab-content.active {
        display: block;
      }

      @keyframes fadeIn {
        from { opacity: 0; transform: translateY(6px); }
        to { opacity: 1; transform: translateY(0); }
      }

      .btn-grid {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
        gap: 5px;
        margin: 5px 0;
      }

      .btn-grid.settings {
        grid-template-columns: repeat(3, 1fr);
      }

      .cheat-btn {
        position: relative;
        background: var(--btn-bg);
        border: 1px solid var(--border-color);
        color: var(--text-color);
        padding: 4px;
        border-radius: 4px;
        font-size: 8px;
        font-weight: 800;
        font-family: 'Orbitron', sans-serif;
        cursor: pointer;
        transition: all 0.2s ease;
        text-align: center;
        display: flex;
        align-items: center;
        justify-content: center;
        gap: 3px;
        text-transform: uppercase;
        overflow: hidden;
      }

      .cheat-btn:hover {
        background: var(--btn-hover-bg);
        border-color: var(--accent-color);
        box-shadow: 0 0 5px var(--accent-shadow);
        transform: scale(1.02);
      }

      .cheat-btn:hover::after {
        content: '';
        position: absolute;
        top: 50%;
        left: 50%;
        width: 100px;
        height: 100px;
        background: radial-gradient(circle, rgba(255,255,255,0.2) 0%, transparent 70%);
        transform: translate(-50%, -50%) scale(0);
        animation: ripple 0.5s ease-out;
      }

      @keyframes ripple {
        to { transform: translate(-50%, -50%) scale(2); opacity: 0; }
      }

      .cheat-btn.active {
        background: var(--accent-color);
        color: var(--btn-bg);
        border-color: var(--accent-color);
      }

      .cheat-btn:active {
        transform: scale(0.98);
      }

      #status-bar {
        padding: 4px 8px;
        background: var(--status-bg);
        border-top: 1px solid var(--border-color);
        font-size: 8px;
        color: var(--text-color);
        display: flex;
        flex-wrap: wrap;
        gap: 5px;
        font-family: 'Inter', sans-serif;
      }

      .status-item {
        background: var(--btn-bg);
        padding: 2px 6px;
        border-radius: 10px;
        cursor: pointer;
        transition: background 0.2s, color 0.2s;
        display: flex;
        align-items: center;
        gap: 3px;
      }

      .status-item:hover {
        background: var(--btn-hover-bg);
        color: var(--accent-color);
      }

      .status-value, .active {
        color: var(--accent-color);
        font-weight: 600;
      }

      #mod-status {
        position: fixed;
        top: 10px;
        right: 10px;
        background: var(--bg-gradient);
        color: var(--text-color);
        padding: 4px 8px;
        border-radius: 4px;
        border: 1px solid var(--accent-color);
        font-family: 'Inter', sans-serif;
        font-size: 9px;
        z-index: 999997;
        box-shadow: 0 0 5px var(--accent-shadow);
        backdrop-filter: blur(10px);
        animation: pulseGlow 0.5s infinite alternate;
        display: none;
      }

      @keyframes pulseGlow {
        to { box-shadow: 0 0 8px var(--accent-shadow); }
      }

      #branding {
        position: fixed;
        top: 10px;
        left: 10px;
        display: flex;
        align-items: center;
        background: var(--bg-gradient);
        padding: 6px 12px;
        border-radius: 4px;
        border: 2px solid var(--border-color);
        box-shadow: 0 0 5px var(--accent-shadow), inset 0 0 3px rgba(255,255,255,0.1);
        color: var(--text-color);
        font-family: 'Inter', sans-serif;
        font-size: 11px;
        z-index: 999997;
        backdrop-filter: blur(10px);
      }

      #branding-icon {
        width: 20px;
        height: 20px;
        margin-right: 6px;
        background: conic-gradient(from 0deg, transparent 0deg 90deg, var(--accent-color) 90deg 180deg, transparent 180deg 270deg, var(--accent-color) 270deg 360deg);
        clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
        transform: rotate(0deg);
        animation: spin 4s linear infinite;
      }

      #branding-text {
        background: linear-gradient(45deg, var(--accent-color), #ff4081);
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        text-shadow: 0 0 3px var(--accent-shadow);
      }

      #branding-version {
        font-size: 8px;
        color: var(--text-color);
        opacity: 0.6;
        margin-left: 4px;
      }

      .tooltip::after {
        content: attr(title);
        position: absolute;
        bottom: 100%;
        left: 50%;
        transform: translateX(-50%);
        background: var(--btn-bg);
        color: var(--text-color);
        padding: 3px 6px;
        border-radius: 4px;
        font-size: 8px;
        white-space: nowrap;
        opacity: 0;
        pointer-events: none;
        transition: opacity 0.2s;
        z-index: 10;
        border: 1px solid var(--border-color);
      }

      .tooltip:hover::after {
        opacity: 1;
      }

      @keyframes spin {
        to { transform: rotate(360deg); }
      }

      hr {
        border: 0;
        border-top: 1px solid var(--divider-color);
        margin: 5px 0;
      }

      label {
        display: block;
        font-size: 10px;
        font-weight: 500;
        margin: 5px 0 2px;
        color: var(--text-color);
      }

      input[type="color"], input[type="range"] {
        width: 100%;
        height: 20px;
        border: 1px solid var(--border-color);
        border-radius: 4px;
        background: var(--btn-bg);
        cursor: pointer;
      }

      input[type="range"] {
        -webkit-appearance: none;
        height: 6px;
      }

      input[type="range"]::-webkit-slider-thumb {
        -webkit-appearance: none;
        width: 12px;
        height: 12px;
        background: var(--accent-color);
        border-radius: 50%;
        border: 1px solid var(--border-color);
        cursor: pointer;
      }

      .description {
        font-size: 9px;
        color: var(--text-color);
        opacity: 0.6;
        margin-bottom: 5px;
      }
    `;
    document.head.appendChild(styleSheet);
  }

  // Create UI
  let menu = document.getElementById('menu');
  if (!menu) {
    // Branding
    const branding = document.createElement('div');
    branding.id = 'branding';
    branding.innerHTML = `
      <span id="branding-icon"></span>
      <span id="branding-text">Emulation's Premium Client</span>
      <span id="branding-version">v${clientVersion}</span>
    `;
    document.body.appendChild(branding);

    // Mod status
    const modStatus = document.createElement('div');
    modStatus.id = 'mod-status';
    modStatus.textContent = "Emulation's Premium: Active";
    modStatus.style.display = prototype_.player.modStatus ? 'block' : 'none';
    document.body.appendChild(modStatus);

    // Menu
    menu = document.createElement('div');
    menu.id = 'menu';
    menu.dataset.theme = prototype_.player.theme;
    menu.classList.toggle('hidden', !menuVisible);
    menu.classList.toggle('minimized', prototype_.player.menuMinimized);

    const header = document.createElement('div');
    header.id = 'menu-header';
    const logo = document.createElement('div');
    logo.id = 'menu-logo';
    const title = document.createElement('h1');
    title.id = 'menu-title';
    title.textContent = "Emulation's Premium Client";
    const badge = document.createElement('span');
    badge.id = 'menu-badge';
    badge.textContent = 'PREMIUM';
    const controls = document.createElement('div');
    controls.id = 'menu-controls';
    const minimizeBtn = document.createElement('button');
    minimizeBtn.innerHTML = '<i class="fas fa-minus"></i>';
    minimizeBtn.setAttribute('aria-label', 'Minimize menu');
    minimizeBtn.onclick = () => {
      prototype_.player.menuMinimized = !prototype_.player.menuMinimized;
      menu.classList.toggle('minimized', prototype_.player.menuMinimized);
      minimizeBtn.innerHTML = `<i class="fas fa-${prototype_.player.menuMinimized ? 'plus' : 'minus'}"></i>`;
      saveSettings();
      showNotification(`Menu ${prototype_.player.menuMinimized ? 'minimized' : 'restored'}`);
    };
    const closeBtn = document.createElement('button');
    closeBtn.innerHTML = '<i class="fas fa-times"></i>';
    closeBtn.setAttribute('aria-label', 'Close menu');
    closeBtn.onclick = () => {
      menuVisible = false;
      menu.classList.add('hidden');
      saveSettings();
      showNotification('Menu closed');
    };
    controls.appendChild(minimizeBtn);
    controls.appendChild(closeBtn);
    header.appendChild(logo);
    header.appendChild(title);
    header.appendChild(badge);
    header.appendChild(controls);

    const content = document.createElement('div');
    content.id = 'menu-content';
    const tabs = document.createElement('div');
    tabs.id = 'menu-tabs';
    const body = document.createElement('div');
    body.id = 'menu-body';
    const statusBar = document.createElement('div');
    statusBar.id = 'status-bar';
    content.appendChild(tabs);
    content.appendChild(body);
    content.appendChild(statusBar);

    menu.appendChild(header);
    menu.appendChild(content);
    document.body.appendChild(menu);

    // Draggable menu
    let isDragging = false;
    let currentX, currentY;
    header.addEventListener('mousedown', (e) => {
      isDragging = true;
      currentX = e.clientX - parseFloat(menu.style.left || window.innerWidth / 2);
      currentY = e.clientY - parseFloat(menu.style.top || window.innerHeight / 2);
      document.body.style.userSelect = 'none';
    });
    document.addEventListener('mousemove', (e) => {
      if (!isDragging) return;
      e.preventDefault();
      let newX = e.clientX - currentX;
      let newY = e.clientY - currentY;
      newX = Math.max(0, Math.min(newX, window.innerWidth - menu.offsetWidth));
      newY = Math.max(0, Math.min(newY, window.innerHeight - menu.offsetHeight));
      menu.style.left = `${newX}px`;
      menu.style.top = `${newY}px`;
      prototype_.player.menuPosition = { left: `${newX}px`, top: `${newY}px` };
      saveSettings();
    });
    document.addEventListener('mouseup', () => {
      isDragging = false;
      document.body.style.userSelect = '';
    });

    initCrosshairCanvas();
    window.addEventListener('resize', resizeCrosshair);

    const categories = [
      { name: 'Advantage', description: 'Tactical enhancements for strategic play', meshes: [
        { name: 'Normal', desc: 'Default mesh rendering' },
        { name: 'Glow Neon', desc: 'Bright neon glow effect' },
        { name: 'Red Danger', desc: 'Red highlight for threats' },
        { name: 'Hacker Matrix', desc: 'Green wireframe style' },
        { name: 'Chrome Metal', desc: 'Shiny metallic finish' },
      ]},
      { name: 'Visuals', description: 'Dynamic visual effects for immersion', meshes: [
        { name: 'Rainbow', desc: 'Cycling rainbow colors' },
        { name: 'Aurora Borealis', desc: 'Northern lights effect' },
        { name: 'Neon Pulse', desc: 'Pulsating pink glow' },
        { name: 'Solar Flare', desc: 'Bright fiery pulses' },
      ]},
      { name: 'Crosshairs', description: 'Customizable crosshair styles', crosshairs: [
        { name: 'None', desc: 'No crosshair' },
        { name: 'Dot', desc: 'Small centered dot' },
        { name: 'Cross', desc: 'Classic cross shape' },
        { name: 'Plus', desc: 'Thick plus shape' },
        { name: 'Dynamic Dot', desc: 'Pulsing dot effect' },
      ]},
      { name: 'Settings', description: 'Configure client options', meshes: [] }
    ];

    let currentCategory = 'Advantage';

    function updateCategoryButtons() {
      tabs.innerHTML = '';
      categories.forEach(cat => {
        const btn = document.createElement('button');
        btn.textContent = cat.name;
        btn.classList.toggle('active', cat.name === currentCategory);
        btn.setAttribute('aria-label', `Select ${cat.name} tab`);
        btn.onclick = () => {
          currentCategory = cat.name;
          updateCategoryUI();
          updateCategoryButtons();
          showNotification(`Switched to ${cat.name}`);
        };
        tabs.appendChild(btn);
      });
    }

    function updateCategoryUI() {
      body.innerHTML = '';
      const tabContent = document.createElement('div');
      tabContent.className = `tab-content ${currentCategory.toLowerCase()} active`;
      const info = document.createElement('div');
      info.className = 'description';
      info.textContent = categories.find(c => c.name === currentCategory).description;
      tabContent.appendChild(info);

      if (currentCategory === 'Advantage' || currentCategory === 'Visuals') {
        const btnGrid = document.createElement('div');
        btnGrid.className = 'btn-grid';
        const meshes = categories.find(c => c.name === currentCategory).meshes;
        meshes.forEach(mesh => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.meshType === mesh.name ? 'active' : ''} tooltip`;
          btn.title = mesh.desc;
          btn.innerHTML = `<i class="fas fa-cube"></i> ${mesh.name}`;
          btn.onclick = () => {
            prototype_.player.meshType = mesh.name;
            btnGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Mesh set to ${mesh.name}`);
            applyChamsSettings();
            saveSettings();
          };
          btnGrid.appendChild(btn);
        });
        tabContent.appendChild(btnGrid);
      } else if (currentCategory === 'Crosshairs') {
        const btnGrid = document.createElement('div');
        btnGrid.className = 'btn-grid';
        const crosshairs = categories.find(c => c.name === currentCategory).crosshairs;
        crosshairs.forEach(ch => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.crosshairType === ch.name ? 'active' : ''} tooltip`;
          btn.title = ch.desc;
          btn.innerHTML = `<i class="fas fa-crosshairs"></i> ${ch.name}`;
          btn.onclick = () => {
            prototype_.player.crosshairType = ch.name;
            btnGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Crosshair set to ${ch.name}`);
            applyChamsSettings();
            saveSettings();
          };
          btnGrid.appendChild(btn);
        });
        tabContent.appendChild(btnGrid);

        const sizeLabel = document.createElement('label');
        sizeLabel.textContent = 'Crosshair Size';
        const sizeGrid = document.createElement('div');
        sizeGrid.className = 'btn-grid';
        [10, 20, 30, 40, 50].forEach(size => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.crosshairSize === size ? 'active' : ''} tooltip`;
          btn.title = `Set size to ${size}px`;
          btn.textContent = `${size}px`;
          btn.onclick = () => {
            prototype_.player.crosshairSize = size;
            sizeGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Crosshair Size set to ${size}px`);
            applyChamsSettings();
            saveSettings();
          };
          sizeGrid.appendChild(btn);
        });
        tabContent.appendChild(sizeLabel);
        tabContent.appendChild(sizeGrid);

        const gapLabel = document.createElement('label');
        gapLabel.textContent = 'Crosshair Gap';
        const gapGrid = document.createElement('div');
        gapGrid.className = 'btn-grid';
        [0, 5, 10, 15, 20].forEach(gap => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.crosshairGap === gap ? 'active' : ''} tooltip`;
          btn.title = `Set gap to ${gap}px`;
          btn.textContent = `${gap}px`;
          btn.onclick = () => {
            prototype_.player.crosshairGap = gap;
            gapGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Crosshair Gap set to ${gap}px`);
            applyChamsSettings();
            saveSettings();
          };
          gapGrid.appendChild(btn);
        });
        tabContent.appendChild(gapLabel);
        tabContent.appendChild(gapGrid);

        const colorLabel = document.createElement('label');
        colorLabel.textContent = 'Crosshair Color';
        const colorPicker = document.createElement('input');
        colorPicker.type = 'color';
        colorPicker.value = prototype_.player.crosshairColor;
        colorPicker.onchange = () => {
          prototype_.player.crosshairColor = colorPicker.value;
          showNotification(`Crosshair color set to ${colorPicker.value}`);
          applyChamsSettings();
          saveSettings();
        };
        tabContent.appendChild(colorLabel);
        tabContent.appendChild(colorPicker);
      } else if (currentCategory === 'Settings') {
        const btnGrid = document.createElement('div');
        btnGrid.className = 'btn-grid settings';

        // Wallhacks
        const wallhackBtn = document.createElement('button');
        wallhackBtn.className = `cheat-btn ${prototype_.player.seeThroughWalls ? 'active' : ''} tooltip`;
        wallhackBtn.title = 'Toggle visibility through walls';
        wallhackBtn.innerHTML = `<i class="fas fa-eye"></i> Wallhacks: ${prototype_.player.seeThroughWalls ? 'ON' : 'OFF'}`;
        wallhackBtn.onclick = () => {
          prototype_.player.seeThroughWalls = !prototype_.player.seeThroughWalls;
          wallhackBtn.innerHTML = `<i class="fas fa-eye"></i> Wallhacks: ${prototype_.player.seeThroughWalls ? 'ON' : 'OFF'}`;
          wallhackBtn.classList.toggle('active');
          showNotification(`Wallhacks ${prototype_.player.seeThroughWalls ? 'enabled' : 'disabled'}`);
          applyChamsSettings();
          saveSettings();
        };
        btnGrid.appendChild(wallhackBtn);

        // Wireframe
        const wireframeBtn = document.createElement('button');
        wireframeBtn.className = `cheat-btn ${prototype_.player.wireframe ? 'active' : ''} tooltip`;
        wireframeBtn.title = 'Enable wireframe rendering';
        wireframeBtn.innerHTML = `<i class="fas fa-draw-polygon"></i> Wireframe: ${prototype_.player.wireframe ? 'ON' : 'OFF'}`;
        wireframeBtn.onclick = () => {
          prototype_.player.wireframe = !prototype_.player.wireframe;
          wireframeBtn.innerHTML = `<i class="fas fa-draw-polygon"></i> Wireframe: ${prototype_.player.wireframe ? 'ON' : 'OFF'}`;
          wireframeBtn.classList.toggle('active');
          showNotification(`Wireframe ${prototype_.player.wireframe ? 'enabled' : 'disabled'}`);
          applyChamsSettings();
          saveSettings();
        };
        btnGrid.appendChild(wallhackBtn);

        // No Fog
        const noFogBtn = document.createElement('button');
        noFogBtn.className = `cheat-btn ${prototype_.player.noFog ? 'active' : ''} tooltip`;
        noFogBtn.title = 'Disable environmental fog';
        noFogBtn.innerHTML = `<i class="fas fa-cloud"></i> No Fog: ${prototype_.player.noFog ? 'ON' : 'OFF'}`;
        noFogBtn.onclick = () => {
          prototype_.player.noFog = !prototype_.player.noFog;
          noFogBtn.innerHTML = `<i class="fas fa-cloud"></i> No Fog: ${prototype_.player.noFog ? 'ON' : 'OFF'}`;
          noFogBtn.classList.toggle('active');
          showNotification(`No Fog ${prototype_.player.noFog ? 'enabled' : 'disabled'}`);
          applyChamsSettings();
          saveSettings();
        };
        btnGrid.appendChild(noFogBtn);

        // Notifications
        const notifyBtn = document.createElement('button');
        notifyBtn.className = `cheat-btn ${prototype_.player.notifications ? 'active' : ''} tooltip`;
        notifyBtn.title = 'Toggle action notifications';
        notifyBtn.innerHTML = `<i class="fas fa-bell"></i> Notifications: ${prototype_.player.notifications ? 'ON' : 'OFF'}`;
        notifyBtn.onclick = () => {
          prototype_.player.notifications = !prototype_.player.notifications;
          notifyBtn.innerHTML = `<i class="fas fa-bell"></i> Notifications: ${prototype_.player.notifications ? 'ON' : 'OFF'}`;
          notifyBtn.classList.toggle('active');
          showNotification(`Notifications ${prototype_.player.notifications ? 'enabled' : 'disabled'}`);
          saveSettings();
        };
        btnGrid.appendChild(notifyBtn);

        // Mod Status
        const modStatusBtn = document.createElement('button');
        modStatusBtn.className = `cheat-btn ${prototype_.player.modStatus ? 'active' : ''} tooltip`;
        modStatusBtn.title = 'Toggle mod status display';
        modStatusBtn.innerHTML = `<i class="fas fa-shield-alt"></i> Mod Status: ${prototype_.player.modStatus ? 'ON' : 'OFF'}`;
        modStatusBtn.onclick = () => {
          prototype_.player.modStatus = !prototype_.player.modStatus;
          modStatusBtn.innerHTML = `<i class="fas fa-shield-alt"></i> Mod Status: ${prototype_.player.modStatus ? 'ON' : 'OFF'}`;
          modStatusBtn.classList.toggle('active');
          document.getElementById('mod-status').style.display = prototype_.player.modStatus ? 'block' : 'none';
          showNotification(`Mod Status ${prototype_.player.modStatus ? 'enabled' : 'disabled'}`);
          saveSettings();
        };
        btnGrid.appendChild(modStatusBtn);
        tabContent.appendChild(btnGrid);
        tabContent.appendChild(document.createElement('hr'));

        // Opacity
        const opacityLabel = document.createElement('label');
        opacityLabel.textContent = 'Mesh Opacity';
        const opacityGrid = document.createElement('div');
        opacityGrid.className = 'btn-grid';
        [0.1, 0.3, 0.5, 0.7, 0.9, 1.0].forEach(op => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.opacity === op ? 'active' : ''} tooltip`;
          btn.title = `Set opacity to ${op}`;
          btn.textContent = op.toFixed(1);
          btn.onclick = () => {
            prototype_.player.opacity = op;
            opacityGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Opacity set to ${op}`);
            applyChamsSettings();
            saveSettings();
          };
          opacityGrid.appendChild(btn);
        });
        tabContent.appendChild(opacityLabel);
        tabContent.appendChild(opacityGrid);

        // Animation Speed
        const speedLabel = document.createElement('label');
        speedLabel.textContent = 'Animation Speed';
        const speedGrid = document.createElement('div');
        speedGrid.className = 'btn-grid';
        [0.5, 1.0, 1.5, 2.0].forEach(speed => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.animationSpeed === speed ? 'active' : ''} tooltip`;
          btn.title = `Set speed to ${speed}x`;
          btn.textContent = `${speed}x`;
          btn.onclick = () => {
            prototype_.player.animationSpeed = speed;
            speedGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Animation speed set to ${speed}x`);
            applyChamsSettings();
            saveSettings();
          };
          speedGrid.appendChild(btn);
        });
        tabContent.appendChild(speedLabel);
        tabContent.appendChild(speedGrid);

        // Base Hue
        const hueLabel = document.createElement('label');
        hueLabel.textContent = 'Base Hue';
        const hueGrid = document.createElement('div');
        hueGrid.className = 'btn-grid';
        [0, 60, 120, 180, 240, 300].forEach(hue => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.baseHue === hue ? 'active' : ''} tooltip`;
          btn.title = `Set hue to ${hue}°`;
          btn.textContent = `${hue}°`;
          btn.onclick = () => {
            prototype_.player.baseHue = hue;
            hueGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Base Hue set to ${hue}°`);
            applyChamsSettings();
            saveSettings();
          };
          hueGrid.appendChild(btn);
        });
        tabContent.appendChild(hueLabel);
        tabContent.appendChild(hueGrid);

        // Emissive Intensity
        const emissiveLabel = document.createElement('label');
        emissiveLabel.textContent = 'Emissive Intensity';
        const emissiveGrid = document.createElement('div');
        emissiveGrid.className = 'btn-grid';
        [0.0, 0.2, 0.4, 0.6, 0.8, 1.0].forEach(intensity => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.emissiveIntensity === intensity ? 'active' : ''} tooltip`;
          btn.title = `Set intensity to ${intensity}`;
          btn.textContent = intensity.toFixed(1);
          btn.onclick = () => {
            prototype_.player.emissiveIntensity = intensity;
            emissiveGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Emissive Intensity set to ${intensity}`);
            applyChamsSettings();
            saveSettings();
          };
          emissiveGrid.appendChild(btn);
        });
        tabContent.appendChild(emissiveLabel);
        tabContent.appendChild(emissiveGrid);

        // FOV
        const fovLabel = document.createElement('label');
        fovLabel.textContent = `Field of View: ${prototype_.player.fov}°`;
        const fovSlider = document.createElement('input');
        fovSlider.type = 'range';
        fovSlider.min = 70;
        fovSlider.max = 120;
        fovSlider.step = 1;
        fovSlider.value = prototype_.player.fov;
        fovSlider.oninput = () => {
          prototype_.player.fov = parseInt(fovSlider.value);
          fovLabel.textContent = `Field of View: ${prototype_.player.fov}°`;
          showNotification(`FOV set to ${prototype_.player.fov}°`);
          applyChamsSettings();
          saveSettings();
        };
        tabContent.appendChild(fovLabel);
        tabContent.appendChild(fovSlider);
        tabContent.appendChild(document.createElement('hr'));

        // Menu Opacity
        const menuOpacityLabel = document.createElement('label');
        menuOpacityLabel.textContent = 'Menu Opacity';
        const menuOpacityGrid = document.createElement('div');
        menuOpacityGrid.className = 'btn-grid';
        [0.5, 0.7, 0.9, 1.0].forEach(op => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.menuOpacity === op ? 'active' : ''} tooltip`;
          btn.title = `Set menu opacity to ${op}`;
          btn.textContent = op.toFixed(1);
          btn.onclick = () => {
            prototype_.player.menuOpacity = op;
            menu.style.opacity = op;
            menuOpacityGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            showNotification(`Menu Opacity set to ${op}`);
            saveSettings();
          };
          menuOpacityGrid.appendChild(btn);
        });
        tabContent.appendChild(menuOpacityLabel);
        tabContent.appendChild(menuOpacityGrid);

        // Theme
        const themeLabel = document.createElement('label');
        themeLabel.textContent = 'Theme';
        const themeGrid = document.createElement('div');
        themeGrid.className = 'btn-grid';
        ['obsidian-black', 'arctic-white', 'crimson-pulse', 'toxic-green', 'sapphire-blue', 'synthwave-purple', 'dark-neon', 'light-cyber', 'matrix-green', 'retro-vaporwave'].forEach(theme => {
          const btn = document.createElement('button');
          btn.className = `cheat-btn ${prototype_.player.theme === theme ? 'active' : ''} tooltip`;
          btn.title = `Switch to ${theme.replace('-', ' ')} theme`;
          btn.textContent = theme.replace('-', ' ').replace(/\b\w/g, c => c.toUpperCase());
          btn.onclick = () => {
            menu.classList.add('transitioning');
            setTimeout(() => {
              prototype_.player.theme = theme;
              menu.dataset.theme = theme;
              saveSettings();
              themeGrid.querySelectorAll('.cheat-btn').forEach(b => b.classList.remove('active'));
              btn.classList.add('active');
              showNotification(`Theme set to ${theme}`);
              menu.classList.remove('transitioning');
              branding.dataset.theme = theme;
              modStatus.dataset.theme = theme;
              crosshairCanvas.dataset.theme = theme;
            }, 200);
          };
          themeGrid.appendChild(btn);
        });
        tabContent.appendChild(themeLabel);
        tabContent.appendChild(themeGrid);
        tabContent.appendChild(document.createElement('hr'));

        // Reset Settings
        const resetLabel = document.createElement('label');
        resetLabel.textContent = 'Reset Settings';
        const resetBtn = document.createElement('button');
        resetBtn.className = 'cheat-btn tooltip';
        resetBtn.title = 'Reset all settings to default';
        resetBtn.innerHTML = '<i class="fas fa-undo"></i> Reset All';
        resetBtn.onclick = () => {
          prototype_.player = {
            opacity: 1,
            wireframe: false,
            seeThroughWalls: false,
            meshType: 'Normal',
            animationSpeed: 1,
            baseHue: 0,
            emissiveIntensity: 0.5,
            crosshairType: 'None',
            crosshairSize: 20,
            crosshairGap: 5,
            crosshairColor: '#00f0ff',
            notifications: true,
            modStatus: true,
            menuOpacity: 1.0,
            fov: 90,
            noFog: false,
            theme: 'obsidian-black',
            menuPosition: { left: '50%', top: '50%' },
            menuVisible: true,
            menuMinimized: false
          };
          menu.style.opacity = 1.0;
          menu.style.left = '50%';
          menu.style.top = '50%';
          menu.dataset.theme = 'obsidian-black';
          menuVisible = true;
          menu.classList.remove('hidden');
          menu.classList.remove('minimized');
          branding.dataset.theme = 'obsidian-black';
          modStatus.dataset.theme = 'obsidian-black';
          crosshairCanvas.dataset.theme = 'obsidian-black';
          saveSettings();
          showNotification('Settings reset to default');
          applyChamsSettings();
          updateCategoryUI();
        };
        tabContent.appendChild(resetLabel);
        tabContent.appendChild(resetBtn);
      }
      body.appendChild(tabContent);
      updateStatus();
    }

    updateCategoryButtons();
    updateCategoryUI();

    // Toggle menu with semicolon
    document.addEventListener('keydown', (e) => {
      if (e.key === ';') {
        menuVisible = !menuVisible;
        menu.classList.toggle('hidden', !menuVisible);
        saveSettings();
        showNotification(`Menu ${menuVisible ? 'opened' : 'closed'}`);
      }
    });
  }

  // Start animation loop
  applyChamsSettings();
  animate();
})();