RushTeam Hack — Wallhack, ESP, Aimbot & More

Control panel for Rush Team WebGL. Recoil Control free. Full version (Wallhack, Aimbot, ESP, Ghost Mode) at rushteam.tools

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name            RushTeam Hack — Wallhack, ESP, Aimbot & More
// @name:tr         RushTeam Hack — Wallhack, ESP, Aimbot ve Daha Fazlası
// @name:ru         RushTeam Hack — Wallhack, ESP, Аимбот и многое другое
// @name:fr         RushTeam Hack — Wallhack, ESP, Aimbot et plus
// @name:pt-BR      RushTeam Hack — Wallhack, ESP, Aimbot e Muito Mais
// @name:de         RushTeam Hack — Wallhack, ESP, Aimbot & Mehr
// @name:es         RushTeam Hack — Wallhack, ESP, Aimbot y Más
// @namespace       https://rushteam.tools
// @version         2.1.3
// @description     Control panel for Rush Team WebGL. Recoil Control free. Full version (Wallhack, Aimbot, ESP, Ghost Mode) at rushteam.tools
// @description:tr  Rush Team için hile paneli. Geri Tepme Kontrolü ücretsiz. Tam sürüm (Wallhack, Aimbot, ESP, Ghost Modu) rushteam.tools'ta.
// @description:ru  Панель управления для Rush Team. Контроль отдачи бесплатно. Полная версия (Wallhack, Аимбот, ESP, Ghost Mode) на rushteam.tools.
// @description:fr  Panneau de contrôle pour Rush Team. Contrôle du recul gratuit. Version complète (Wallhack, Aimbot, ESP, Ghost Mode) sur rushteam.tools.
// @description:pt-BR  Painel de controle para Rush Team. Controle de Recuo grátis. Versão completa (Wallhack, Aimbot, ESP, Ghost Mode) em rushteam.tools.
// @description:de  Steuerungspanel für Rush Team. Rückstoßkontrolle kostenlos. Vollversion (Wallhack, Aimbot, ESP, Geistermodus) auf rushteam.tools.
// @description:es  Panel de control para Rush Team. Control de Retroceso gratis. Versión completa (Wallhack, Aimbot, ESP, Modo Fantasma) en rushteam.tools.
// @author       Polyfillers
// @homepage     https://rushteam.tools
// @match        https://www.gaming-style.com/RushTeam/RushTeamWebGL/index.php*
// @match        https://www.gaming-style.com/RushTeam/index.php*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gaming-style.com
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function () {
  "use strict";

  const SITE = "https://rushteam.tools";
  const DISCORD = "https://discord.gg/hNAtbuUM";
  const VERSION = "2.1.3";
  const WEBGL_URL =
    "https://www.gaming-style.com/RushTeam/RushTeamWebGL/index.php";

  const IS_WEBGL = /RushTeamWebGL/.test(window.location.pathname);

  const _cn = ["unity", "canvas"].join("-");
  const _ev = ["mouse", "move"].join("");
  const _na = ["Not", "Allowed"].join("");
  const _uc = ["unity", "container"].join("-");

  let panelOpen = false;
  let _on = false;
  let _ti = null;
  let _str = 180;
  let _mb = false;
  let isDragging = false, dragOffX = 0, dragOffY = 0;

  document.addEventListener("mousedown", (e) => { if (e.button === 0) _mb = true; }, true);
  document.addEventListener("mouseup",   (e) => { if (e.button === 0) _mb = false; }, true);

  function _rs() {
    if (_ti) return;
    _ti = setInterval(() => {
      if (!_mb) return;
      const _c = document.getElementById(_cn);
      if (!_c) return;
      _c.dispatchEvent(new MouseEvent(_ev, { bubbles: true, cancelable: true, movementX: 0, movementY: _str / 50 }));
    }, 16);
  }

  function _rx() {
    clearInterval(_ti);
    _ti = null;
  }

  function toggleRecoil() {
    _on = !_on;
    _on ? _rs() : _rx();
    _syncRc();
    toast("Recoil Control " + (_on ? "ON" : "OFF"));
  }

  function _syncRc() {
    document.querySelectorAll('#security-toolkit-panel [data-id="norecoil"], #security-toolkit-panel [data-id="norecoil-toggle"]').forEach((row) => {
      const v = row.querySelector(".rt-row-value");
      if (v) v.textContent = _on ? "ON" : "OFF";
      row.classList.toggle("on", _on);
    });
    const dot = document.getElementById("stp-dot-norecoil");
    if (dot) dot.classList.toggle("on", _on);
  }

  function toast(msg) {
    const el = document.createElement("div");
    el.textContent = msg;
    Object.assign(el.style, {
      position: "fixed",
      bottom: "20px",
      right: "20px",
      background: "#0d1117",
      border: "1px solid #10b981",
      color: "#e6edf3",
      padding: "7px 13px",
      borderRadius: "6px",
      fontSize: "11px",
      fontFamily: "monospace",
      zIndex: "2147483647",
      opacity: "0",
      transition: "opacity 180ms ease",
      pointerEvents: "none",
    });
    document.body.appendChild(el);
    requestAnimationFrame(() => {
      el.style.opacity = "1";
    });
    setTimeout(() => {
      el.style.opacity = "0";
      setTimeout(() => el.remove(), 200);
    }, 2200);
  }

  const PANEL_CSS = `
    #security-toolkit-panel {
      --rt-bg-primary: #111118;
      --rt-bg-secondary: #0d0d14;
      --rt-bg-elevated: rgba(255,255,255,0.025);
      --rt-bg-hover: rgba(16,185,129,0.04);
      --rt-bg-active: rgba(16,185,129,0.08);
      --rt-border: rgba(255,255,255,0.04);
      --rt-border-subtle: rgba(255,255,255,0.025);
      --rt-border-active: #10b981;
      --rt-text-primary: #e2e2e8;
      --rt-text-secondary: #7a7a8a;
      --rt-text-muted: #4a4a60;
      --rt-text-accent: #10b981;
      --rt-text-accent-light: #34d399;
      --rt-text-danger: #ef4444;
      --rt-text-warning: #f59e0b;
      --rt-accent: #10b981;
      --rt-accent-dim: rgba(16,185,129,0.15);
      --rt-accent-glow: rgba(16,185,129,0.3);
      --rt-tier-free: #6b6b7b;
      --rt-tier-paid: #10b981;
      --rt-tier-pro: #f59e0b;
      --rt-font: 'Segoe UI', system-ui, -apple-system, sans-serif;
      --rt-font-mono: 'Consolas', 'Monaco', monospace;
      --rt-font-xs: 9px;
      --rt-font-sm: 10px;
      --rt-font-base: 12px;
      --rt-transition: 150ms ease;
    }
    #security-toolkit-panel {
      position: fixed; top: 64px; left: 16px; width: 440px;
      background: var(--rt-bg-primary); border: 1px solid var(--rt-border);
      border-radius: 10px; font-family: var(--rt-font); font-size: var(--rt-font-base);
      color: var(--rt-text-primary); z-index: 999999; display: none;
      user-select: none; overflow: hidden; box-shadow: 0 8px 32px rgba(0,0,0,0.5); line-height: 1.4;
    }
    #security-toolkit-panel.visible { display: block; }
    #security-toolkit-panel * { box-sizing: border-box; }
    .rt-header {
      display: flex; align-items: center; justify-content: space-between;
      padding: 8px 12px; background: var(--rt-bg-secondary);
      border-bottom: 1px solid var(--rt-border); cursor: move;
    }
    .rt-header-left { display: flex; align-items: center; gap: 8px; }
    .rt-logo-box {
      width: 20px; height: 20px; background: var(--rt-accent); border-radius: 3px;
      display: flex; align-items: center; justify-content: center;
      color: #000; font-weight: 900; font-size: 11px; letter-spacing: -0.5px; flex-shrink: 0;
    }
    .rt-title { font-size: var(--rt-font-base); font-weight: 700; color: var(--rt-text-primary); letter-spacing: 1px; text-transform: uppercase; }
    .rt-version { font-size: var(--rt-font-xs); color: var(--rt-text-muted); font-weight: 600; }
    .rt-header-right { display: flex; align-items: center; gap: 8px; }
    .rt-close {
      width: 22px; height: 22px; display: flex; align-items: center; justify-content: center;
      border-radius: 6px; border: none; background: none; color: var(--rt-text-muted);
      cursor: pointer; transition: all var(--rt-transition); padding: 0;
    }
    .rt-close:hover { background: rgba(255,255,255,0.05); color: var(--rt-text-secondary); }
    .rt-tabs {
      display: flex; padding: 0 12px; background: var(--rt-bg-secondary);
      border-bottom: 1px solid var(--rt-border); gap: 0;
    }
    .rt-tab {
      padding: 7px 12px 5px; background: none; border: none;
      border-bottom: 2px solid transparent; color: var(--rt-text-muted);
      font-family: inherit; font-size: var(--rt-font-sm); font-weight: 600;
      cursor: pointer; transition: all var(--rt-transition); white-space: nowrap;
    }
    .rt-tab .rt-tab-hint { font-size: 8px; color: var(--rt-text-muted); opacity: 0.5; margin-left: 3px; vertical-align: super; }
    .rt-tab:hover { color: var(--rt-text-secondary); }
    .rt-tab.active { color: var(--rt-accent); border-bottom-color: var(--rt-accent); }
    .rt-guide-bar {
      display: flex; align-items: center; justify-content: center; gap: 12px;
      padding: 4px 12px; background: var(--rt-bg-secondary);
      border-bottom: 1px solid var(--rt-border); font-size: 8px;
      color: var(--rt-text-muted); letter-spacing: 0.5px;
    }
    .rt-guide-bar kbd {
      display: inline-block; padding: 0 4px; background: rgba(255,255,255,0.04);
      border: 1px solid rgba(255,255,255,0.06); border-radius: 2px;
      font-family: var(--rt-font-mono); font-size: 8px; color: var(--rt-text-secondary); line-height: 1.4;
    }
    .rt-tab-content { display: none; padding: 8px 0; max-height: 420px; overflow-y: auto; }
    .rt-tab-content.active { display: block; }
    .rt-tab-content::-webkit-scrollbar { width: 2px; }
    .rt-tab-content::-webkit-scrollbar-thumb { background: rgba(16,185,129,0.2); border-radius: 1px; }
    .rt-category {
      font-size: 8px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase;
      color: #3a3a50; padding: 8px 14px 3px;
    }
    .rt-category:first-child { padding-top: 4px; }
    .rt-row {
      display: flex; align-items: center; padding: 5px 14px 5px 18px;
      position: relative; cursor: pointer; transition: background var(--rt-transition); min-height: 28px;
    }
    .rt-row:hover { background: var(--rt-bg-hover); }
    .rt-row.on::before {
      content: ''; position: absolute; left: 0; top: 4px; bottom: 4px; width: 3px;
      background: var(--rt-accent); border-radius: 0 2px 2px 0; box-shadow: 0 0 4px var(--rt-accent-glow);
    }
    .rt-row.locked {
      opacity: 0.8; background: rgba(245,158,11,0.03);
      border-left: 2px solid rgba(245,158,11,0.28); cursor: pointer;
    }
    .rt-row.locked .rt-row-name { color: var(--rt-text-secondary); }
    .rt-row.locked .rt-row-key { visibility: hidden; }
    .rt-row.locked .rt-row-value {
      color: #f59e0b; display: flex; align-items: center; justify-content: flex-end; gap: 3px;
    }
    .rt-row.locked .rt-row-value::after {
      content: 'PRO'; font-size: 7px; font-weight: 800; letter-spacing: 0.6px;
      color: rgba(245,158,11,0.65); background: rgba(245,158,11,0.1);
      border: 1px solid rgba(245,158,11,0.22); border-radius: 2px;
      padding: 1px 3px; margin-left: 3px; line-height: 1.4;
    }
    .rt-row.locked:hover { background: rgba(245,158,11,0.08); opacity: 1; border-left-color: rgba(245,158,11,0.6); }
    .rt-row.locked:hover .rt-row-value { color: #fbbf24; }
    .rt-row.locked:hover .rt-row-value::after { color: #f59e0b; background: rgba(245,158,11,0.18); border-color: rgba(245,158,11,0.4); }
    .rt-row-name { flex: 1; font-size: var(--rt-font-sm); font-weight: 500; color: var(--rt-text-primary); }
    .rt-row-key {
      font-size: 8px; color: var(--rt-text-muted); font-weight: 600;
      padding: 1px 5px; background: rgba(255,255,255,0.03); border-radius: 3px;
      margin-right: 8px; font-family: var(--rt-font-mono);
    }
    .rt-row-value { font-size: var(--rt-font-sm); font-weight: 600; color: var(--rt-text-muted); min-width: 30px; text-align: right; }
    .rt-row.on .rt-row-value { color: var(--rt-accent); }
    .rt-row-slider { display: flex; align-items: center; gap: 6px; min-width: 120px; justify-content: flex-end; }
    .rt-slider-track {
      -webkit-appearance: none; appearance: none; height: 3px;
      background: rgba(255,255,255,0.06); border-radius: 2px; outline: none; cursor: pointer; width: 80px;
    }
    .rt-slider-track::-webkit-slider-thumb {
      -webkit-appearance: none; appearance: none; width: 10px; height: 10px;
      background: var(--rt-accent); border-radius: 50%; cursor: pointer; border: none;
    }
    .rt-slider-track::-moz-range-thumb { width: 10px; height: 10px; background: var(--rt-accent); border-radius: 50%; cursor: pointer; border: none; }
    .rt-slider-fill {
      color: var(--rt-text-accent); font-size: var(--rt-font-sm); min-width: 28px;
      text-align: right; font-family: var(--rt-font-mono); font-weight: 600;
    }
    .rt-select {
      background: var(--rt-bg-secondary); border: 1px solid var(--rt-border);
      color: var(--rt-text-primary); padding: 4px 8px; border-radius: 4px;
      font-family: inherit; font-size: var(--rt-font-sm); cursor: pointer; outline: none;
      transition: border-color var(--rt-transition);
    }
    .rt-select:hover, .rt-select:focus { border-color: var(--rt-accent); }
    .rt-select option { background: var(--rt-bg-primary); color: var(--rt-text-primary); }
    .rt-info-row { padding: 3px 14px 3px 18px; font-size: var(--rt-font-xs); color: var(--rt-text-muted); line-height: 1.5; }
    .rt-info-row.rt-nudge { color: #f59e0b; cursor: pointer; letter-spacing: 0.3px; font-weight: 600; }
    .rt-info-row.rt-nudge:hover { color: #fbbf24; }
    .rt-keybind-value {
      background: var(--rt-bg-secondary); border: 1px solid var(--rt-border);
      color: var(--rt-text-primary); padding: 2px 6px; border-radius: 4px;
      font-family: var(--rt-font-mono); font-size: var(--rt-font-xs);
      width: 52px; text-align: center; cursor: default; outline: none;
    }
    .rt-status-bar {
      display: flex; align-items: center; justify-content: space-between;
      padding: 5px 12px; background: var(--rt-bg-secondary); border-top: 1px solid var(--rt-border);
    }
    .rt-status-items { display: flex; gap: 10px; align-items: center; }
    .rt-status-item { display: flex; align-items: center; gap: 4px; font-size: 8px; color: var(--rt-text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }
    .rt-dot { width: 5px; height: 5px; border-radius: 50%; background: rgba(255,255,255,0.08); transition: background var(--rt-transition), box-shadow var(--rt-transition); }
    .rt-dot.on { background: var(--rt-accent); box-shadow: 0 0 6px var(--rt-accent-glow); }
    .rt-badge { padding: 2px 8px; border-radius: 9999px; font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; line-height: 1.4; }
    .rt-badge-free { background: rgba(107,107,123,0.15); color: var(--rt-tier-free); }
    .rt-badge-paid { background: rgba(16,185,129,0.12); color: var(--rt-tier-paid); }
    .rt-tier-display { display: flex; align-items: center; justify-content: space-between; padding: 4px 14px 4px 18px; }
    .rt-tier-label { font-size: var(--rt-font-sm); color: var(--rt-text-secondary); }
    .rt-tier-value { font-size: var(--rt-font-sm); font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; }
    .rt-timer { font-family: var(--rt-font-mono); font-size: var(--rt-font-sm); font-weight: 600; color: var(--rt-text-secondary); }
    .rt-input-row { display: flex; gap: 4px; align-items: center; padding: 6px 14px; }
    .rt-input {
      background: var(--rt-bg-secondary); border: 1px solid var(--rt-border);
      color: var(--rt-text-primary); padding: 4px 8px; border-radius: 4px;
      font-family: inherit; font-size: var(--rt-font-sm); outline: none;
      transition: border-color var(--rt-transition); width: 60px;
    }
    .rt-input:focus { border-color: var(--rt-accent); }
    .rt-input::placeholder { color: var(--rt-text-muted); }
    .rt-btn {
      padding: 4px 10px; border: 1px solid var(--rt-border); background: var(--rt-bg-elevated);
      color: var(--rt-text-secondary); border-radius: 4px; cursor: pointer;
      font-family: inherit; font-size: var(--rt-font-sm); transition: all var(--rt-transition); white-space: nowrap;
    }
    .rt-btn:hover { border-color: var(--rt-accent); color: var(--rt-accent); }
    .rt-btn-primary { border-color: var(--rt-accent); color: var(--rt-accent); }
    .rt-btn-primary:hover { background: var(--rt-accent-dim); }
    .rt-btn-danger { border-color: rgba(239,68,68,0.3); color: var(--rt-text-danger); }
    .rt-btn-icon-danger {
      flex-shrink: 0; width: 26px; padding: 0; display: flex; align-items: center;
      justify-content: center; color: var(--rt-text-muted); border-color: transparent;
    }
    .rt-btn-icon-danger:hover { color: var(--rt-text-danger); border-color: rgba(239,68,68,0.3); background: rgba(239,68,68,0.08); }
    .rt-btn-warning { border-color: rgba(245,158,11,0.3); color: var(--rt-text-warning); }
    .rt-btn-warning:hover { background: rgba(245,158,11,0.1); border-color: var(--rt-text-warning); }
    .rt-divider { height: 1px; background: var(--rt-border); margin: 8px 0; }
    .rt-discord-card {
      display: flex; align-items: center; justify-content: space-between; gap: 10px;
      margin: 8px 10px 6px; padding: 9px 12px;
      background: rgba(88,101,242,0.1); border: 1px solid rgba(88,101,242,0.3);
      border-radius: 6px; cursor: pointer; transition: background var(--rt-transition), border-color var(--rt-transition);
    }
    .rt-discord-card:hover { background: rgba(88,101,242,0.16); border-color: rgba(88,101,242,0.5); }
    .rt-discord-card-left { display: flex; align-items: center; gap: 9px; }
    .rt-discord-title { font-size: var(--rt-font-sm); font-weight: 700; color: #7289da; line-height: 1.3; }
    .rt-discord-sub { font-size: var(--rt-font-xs); color: rgba(114,137,218,0.65); margin-top: 1px; }
    .rt-discord-join { font-size: var(--rt-font-xs); font-weight: 700; color: #7289da; font-family: var(--rt-font-mono); white-space: nowrap; opacity: 0.8; }
    .rt-discord-card:hover .rt-discord-join { opacity: 1; }
    .rt-plan-row {
      display: flex; align-items: center; gap: 8px; padding: 5px 14px 5px 18px;
      border-bottom: 1px solid var(--rt-border-subtle); cursor: pointer; transition: background 0.15s ease;
    }
    .rt-plan-row:hover { background: rgba(16,185,129,0.07); }
    .rt-plan-row.rt-plan-highlight { background: rgba(16,185,129,0.03); }
    .rt-plan-row.rt-plan-highlight:hover { background: rgba(16,185,129,0.1); }
    .rt-plan-name { flex: 1; font-size: var(--rt-font-sm); font-weight: 600; color: var(--rt-text-primary); display: flex; align-items: center; gap: 5px; }
    .rt-plan-period { font-size: var(--rt-font-xs); color: var(--rt-text-muted); font-family: var(--rt-font-mono); min-width: 42px; text-align: right; }
    .rt-plan-price { font-size: var(--rt-font-sm); font-weight: 700; font-family: var(--rt-font-mono); color: var(--rt-text-accent); min-width: 28px; text-align: right; }
    .rt-plan-price-gold { color: var(--rt-text-warning); }
    .rt-plan-badge { font-size: 7px; font-weight: 700; letter-spacing: 0.5px; padding: 1px 4px; border-radius: 2px; background: rgba(16,185,129,0.1); border: 1px solid rgba(16,185,129,0.25); color: var(--rt-accent); }
    .rt-plan-badge-gold { background: rgba(245,158,11,0.1); border: 1px solid rgba(245,158,11,0.25); color: var(--rt-text-warning); }
    .rt-btn-plan { font-size: var(--rt-font-xs); padding: 3px 8px; font-family: var(--rt-font-mono); letter-spacing: 0.3px; pointer-events: none; }
  `;

  const SVG_CLOSE =
    '<svg width="12" height="12" viewBox="0 0 12 12" fill="none"><path d="M1 1l10 10M11 1L1 11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>';
  const SVG_TRASH =
    '<svg width="12" height="12" viewBox="0 0 12 12" fill="none"><path d="M1 3h10M4 3V2a1 1 0 011-1h2a1 1 0 011 1v1m1 0v7a1 1 0 01-1 1H4a1 1 0 01-1-1V3h8z" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>';
  const SVG_DISCORD =
    '<svg width="16" height="16" viewBox="0 0 24 24" fill="#7289da" style="flex-shrink:0"><path d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057c.002.022.015.043.033.054a19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03z"/></svg>';

  const PANEL_HTML = `
    <!-- Title Bar -->
    <div class="rt-header">
      <div class="rt-header-left">
        <div class="rt-logo-box">PF</div>
        <span class="rt-title">Polyfillers Hack</span>
        <span class="rt-version">v${VERSION}</span>
        <span class="rt-badge rt-badge-free">FREE</span>
      </div>
      <div class="rt-header-right">
        <button class="rt-close" id="stp-close">${SVG_CLOSE}</button>
      </div>
    </div>

    <!-- Version notice banner — always shown (GreasyFork build is always outdated) -->
    <div id="stp-version-banner" style="display:flex; background:rgba(124,58,237,0.12); border-bottom:1px solid rgba(124,58,237,0.3); padding:5px 12px; font-size:9px; color:#a78bfa; align-items:center; justify-content:space-between; gap:8px; flex-shrink:0;">
      <span style="flex:1;">v${VERSION} is outdated — newer version available with all features unlocked</span>
      <a href="${SITE}/install/rush-team-hack.production.user.js" target="_blank" style="color:#c4b5fd; text-decoration:none; white-space:nowrap; font-weight:600;">Update →</a>
    </div>

    <!-- Tabs -->
    <div class="rt-tabs">
      <button class="rt-tab active" data-tab="license"><span class="rt-tab-hint">1</span> License</button>
      <button class="rt-tab" data-tab="main"><span class="rt-tab-hint">2</span> Main</button>
      <button class="rt-tab" data-tab="visuals"><span class="rt-tab-hint">3</span> Visuals</button>
      <button class="rt-tab" data-tab="aim"><span class="rt-tab-hint">4</span> Aim</button>
      <button class="rt-tab" data-tab="ghost"><span class="rt-tab-hint">5</span> Ghost</button>
    </div>

    <!-- Guide Bar -->
    <div class="rt-guide-bar">
      <span><kbd>F2</kbd>/<kbd>Ins</kbd> panel</span>
      <span><kbd>↑↓</kbd> nav</span>
      <span><kbd>Enter</kbd> toggle</span>
      <span><kbd>←→</kbd> adjust</span>
      <span><kbd>Tab</kbd> tabs</span>
    </div>

    <!-- ── Tab 1: License ─────────────────────────────────────────────────── -->
    <div class="rt-tab-content active" id="tab-license">

      <div class="rt-discord-card" id="stp-discord-btn">
        <div class="rt-discord-card-left">
          ${SVG_DISCORD}
          <div>
            <div class="rt-discord-title">Support &amp; Help</div>
            <div class="rt-discord-sub">Key delivery · device resets · issues</div>
          </div>
        </div>
        <span class="rt-discord-join">Join →</span>
      </div>

      <div class="rt-category">License Key</div>
      <div class="rt-input-row">
        <input type="text" class="rt-input" id="stp-license-key" placeholder="RT-XXXX-XXXX-XXXX-XXXX" style="flex:1; width:auto; font-size:9px;">
        <button class="rt-btn rt-btn-primary" id="stp-license-apply">Apply</button>
        <button class="rt-btn rt-btn-icon-danger" id="stp-license-clear" title="Clear key">${SVG_TRASH}</button>
      </div>

      <div class="rt-category">Status</div>
      <div class="rt-tier-display">
        <span class="rt-tier-label">Tier</span>
        <span class="rt-tier-value" style="color: var(--rt-tier-free);">FREE</span>
      </div>
      <div class="rt-tier-display">
        <span class="rt-tier-label">Session</span>
        <span class="rt-timer">—</span>
      </div>

      <div class="rt-category">Get a License</div>
      <div class="rt-plan-row" data-checkout="weekly">
        <span class="rt-plan-name">Weekly</span>
        <span class="rt-plan-period">7 days</span>
        <span class="rt-plan-price">$5</span>
        <span class="rt-btn rt-btn-plan">Buy →</span>
      </div>
      <div class="rt-plan-row rt-plan-highlight" data-checkout="monthly">
        <span class="rt-plan-name">Monthly <span class="rt-plan-badge">POPULAR</span></span>
        <span class="rt-plan-period">30 days</span>
        <span class="rt-plan-price">$10</span>
        <span class="rt-btn rt-btn-plan rt-btn-primary">Buy →</span>
      </div>
      <div class="rt-plan-row" data-checkout="lifetime">
        <span class="rt-plan-name">Lifetime <span class="rt-plan-badge rt-plan-badge-gold">BEST</span></span>
        <span class="rt-plan-period">Forever</span>
        <span class="rt-plan-price rt-plan-price-gold">$40</span>
        <span class="rt-btn rt-btn-plan rt-btn-warning">Buy →</span>
      </div>
      <div class="rt-info-row">Instant · Crypto · 0 bans · rushteam.tools</div>

      <div class="rt-divider"></div>
      <div class="rt-info-row" style="text-align:center; padding:6px 14px; cursor:pointer;" id="stp-access-link">
        Get full access at <span style="color:var(--rt-accent);">rushteam.tools</span>
      </div>
    </div>

    <!-- ── Tab 2: Main ────────────────────────────────────────────────────── -->
    <div class="rt-tab-content" id="tab-main">

      <div class="rt-category">Features</div>
      <div class="rt-row locked" data-id="xray">
        <span class="rt-row-name">Wallhack</span>
        <span class="rt-row-key">F3</span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-row locked" data-id="chams">
        <span class="rt-row-name">Chams</span>
        <span class="rt-row-key">F4</span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-row" data-id="norecoil">
        <span class="rt-row-name">Recoil Control</span>
        <span class="rt-row-key">F5</span>
        <span class="rt-row-value">OFF</span>
      </div>
      <div class="rt-row locked" data-id="desync">
        <span class="rt-row-name">Ghost Hack</span>
        <span class="rt-row-key">F6</span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-row locked" data-id="aim">
        <span class="rt-row-name">Aimbot</span>
        <span class="rt-row-key">F7</span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-row locked" data-id="bot">
        <span class="rt-row-name">Bot Mode</span>
        <span class="rt-row-key">F8</span>
        <span class="rt-row-value"></span>
      </div>

      <div class="rt-info-row rt-nudge" id="stp-upgrade-nudge" style="display:none;">Features locked — upgrade to unlock all</div>

      <div class="rt-category">Keybinds</div>
      <div class="rt-row" style="cursor:default;" data-id="key-panel">
        <span class="rt-row-name">Panel</span>
        <input type="text" class="rt-keybind-value" value="F2" readonly tabindex="-1">
      </div>
      <div class="rt-row" style="cursor:default;" data-id="key-esp">
        <span class="rt-row-name">Wallhack</span>
        <input type="text" class="rt-keybind-value" value="F3" readonly tabindex="-1">
      </div>
      <div class="rt-row" style="cursor:default;" data-id="key-chams">
        <span class="rt-row-name">Chams</span>
        <input type="text" class="rt-keybind-value" value="F4" readonly tabindex="-1">
      </div>
      <div class="rt-row" style="cursor:default;" data-id="key-norecoil">
        <span class="rt-row-name">Recoil Ctrl</span>
        <input type="text" class="rt-keybind-value" value="F5" readonly tabindex="-1">
      </div>
      <div class="rt-row" style="cursor:default;" data-id="key-desync">
        <span class="rt-row-name">Ghost Hack</span>
        <input type="text" class="rt-keybind-value" value="F6" readonly tabindex="-1">
      </div>
      <div class="rt-row" style="cursor:default;" data-id="key-aimdebug">
        <span class="rt-row-name">Aimbot</span>
        <input type="text" class="rt-keybind-value" value="F7" readonly tabindex="-1">
      </div>
      <div class="rt-row" style="cursor:default;" data-id="key-botmode">
        <span class="rt-row-name">Bot Mode</span>
        <input type="text" class="rt-keybind-value" value="F8" readonly tabindex="-1">
      </div>
      <div class="rt-info-row">Keybind editing available in full version at rushteam.tools</div>

      <div class="rt-category">Network</div>
      <div class="rt-row locked" data-id="bypass">
        <span class="rt-row-name">IP Bypass</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value"></span>
      </div>

    </div>

    <!-- ── Tab 3: Visuals ─────────────────────────────────────────────────── -->
    <div class="rt-tab-content" id="tab-visuals">

      <div class="rt-category">Wallhack</div>
      <div class="rt-row locked" data-id="xray-toggle">
        <span class="rt-row-name">Wallhack</span>
        <span class="rt-row-key">F3</span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-row locked" data-id="xray-depth">
        <span class="rt-row-name">Depth Offset</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">-100000</span>
      </div>

      <div class="rt-category">Chams</div>
      <div class="rt-row locked" data-id="chams-toggle">
        <span class="rt-row-name">Chams</span>
        <span class="rt-row-key">F4</span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-row locked" data-id="chams-color">
        <span class="rt-row-name">Color</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">Red</span>
      </div>

    </div>

    <!-- ── Tab 4: Aim ─────────────────────────────────────────────────────── -->
    <div class="rt-tab-content" id="tab-aim">

      <div class="rt-category">Aimbot</div>
      <div class="rt-row locked" data-id="aim-toggle">
        <span class="rt-row-name">Aimbot</span>
        <span class="rt-row-key">F7</span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-info-row">Hold aim key to lock onto nearest target</div>

      <div class="rt-category">Configuration</div>
      <div class="rt-row locked" data-id="aim-mode">
        <span class="rt-row-name">Mode</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">Smooth</span>
      </div>
      <div class="rt-row locked" data-id="aim-smoothing">
        <span class="rt-row-name">Smoothing</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">0.50</span>
      </div>
      <div class="rt-row locked" data-id="aim-fov">
        <span class="rt-row-name">FOV</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">300</span>
      </div>
      <div class="rt-row locked" data-id="aim-sensitivity">
        <span class="rt-row-name">Sensitivity</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">1.00</span>
      </div>
      <div class="rt-row locked" data-id="aim-headheight">
        <span class="rt-row-name">Target Spot</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">Head</span>
      </div>
      <div class="rt-row locked" data-id="aim-priority">
        <span class="rt-row-name">Priority</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">Crosshair</span>
      </div>

      <div class="rt-category">Aim Key</div>
      <div class="rt-row locked" data-id="aim-key">
        <span class="rt-row-name">Hold Key</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">Mouse4</span>
      </div>

      <div class="rt-category">Recoil Control</div>
      <div class="rt-row" data-id="norecoil-toggle">
        <span class="rt-row-name">Recoil Control</span>
        <span class="rt-row-key">F5</span>
        <span class="rt-row-value">OFF</span>
      </div>
      <div class="rt-row" style="cursor:default;" data-id="rc-strength">
        <span class="rt-row-name">Strength</span>
        <div class="rt-row-slider">
          <input type="range" class="rt-slider-track" id="stp-rc-strength" min="10" max="300" value="180" step="10">
          <span class="rt-slider-fill" id="stp-rc-strength-val">1.80</span>
        </div>
      </div>
      <div class="rt-row" style="cursor:default;" data-id="rc-preset">
        <span class="rt-row-name">Preset</span>
        <select class="rt-select" id="stp-rc-preset" style="width:90px;">
          <option value="light">Light  1.5x</option>
          <option value="medium" selected>Medium 2.0x</option>
          <option value="heavy">Heavy  2.5x</option>
          <option value="sniper">Sniper 1.0x</option>
        </select>
      </div>

    </div>

    <!-- ── Tab 5: Ghost ───────────────────────────────────────────────────── -->
    <div class="rt-tab-content" id="tab-ghost">

      <div class="rt-category">Ghost Hack</div>
      <div class="rt-row locked" data-id="ghost-toggle">
        <span class="rt-row-name">Ghost Hack</span>
        <span class="rt-row-key">F6</span>
        <span class="rt-row-value"></span>
      </div>

      <div class="rt-category">Configuration</div>
      <div class="rt-row locked" data-id="ghost-mode">
        <span class="rt-row-name">Mode</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">Ghost</span>
      </div>
      <div class="rt-info-row">Ghost: frozen until shoot, click = brief flash</div>
      <div class="rt-row locked" data-id="ghost-autopulse">
        <span class="rt-row-name">Auto-Pulse</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value"></span>
      </div>
      <div class="rt-row locked" data-id="ghost-interval">
        <span class="rt-row-name">Interval</span>
        <span class="rt-row-key"></span>
        <span class="rt-row-value">0.4s</span>
      </div>

    </div>

    <!-- Upgrade overlay — shown immediately to push users to full version -->
    <div id="rt-upgrade-overlay" style="display:flex; position:absolute; inset:0; background:#0a0a0f; z-index:9999; flex-direction:column; align-items:center; justify-content:center; padding:28px 24px; text-align:center; gap:14px;">
      <div style="color:#ef4444; font-size:13px; font-weight:700; letter-spacing:0.08em; text-transform:uppercase;">Newer Version Available</div>
      <div style="color:#4a4a60; font-size:10px; line-height:1.9; max-width:260px;">
        v2.1.0 (GreasyFork) is a limited preview.<br>
        The latest version unlocks all features:<br>
        <span style="color:#7a7a8a;">Wallhack · Aimbot · Chams · Ghost Mode</span><br>
        <span style="color:#3a3a50; font-size:9px;">Recoil Control is free in both versions.</span>
      </div>
      <a href="https://rushteam.tools/install/rush-team-hack.production.user.js" target="_blank" style="display:inline-block; background:#10b981; color:#000; font-size:10px; font-weight:700; padding:9px 20px; border-radius:6px; text-decoration:none; font-family:monospace; letter-spacing:0.04em;">Get Full Version →</a>
      <div id="rt-overlay-dismiss" style="font-size:8px; color:#2a2a3a; font-family:monospace; cursor:pointer; text-decoration:underline; text-underline-offset:2px;">continue with limited version</div>
    </div>

    <!-- Status Bar -->
    <div class="rt-status-bar">
      <div class="rt-status-items">
        <div class="rt-status-item"><span class="rt-dot" id="stp-dot-xray"></span> WH</div>
        <div class="rt-status-item"><span class="rt-dot" id="stp-dot-chams"></span> CH</div>
        <div class="rt-status-item"><span class="rt-dot" id="stp-dot-norecoil"></span> RC</div>
        <div class="rt-status-item"><span class="rt-dot" id="stp-dot-aim"></span> AB</div>
        <div class="rt-status-item"><span class="rt-dot" id="stp-dot-ghost"></span> Ghost</div>
        <div class="rt-status-item"><span class="rt-dot" id="stp-dot-bot"></span> Bot</div>
      </div>
      <span class="rt-badge rt-badge-free">FREE</span>
    </div>
  `;

  let panelEl = null;

  function buildPanel() {
    if (panelEl) return;
    const styleEl = document.createElement("style");
    styleEl.textContent = PANEL_CSS;
    (document.head || document.documentElement).appendChild(styleEl);

    const el = document.createElement("div");
    el.id = "security-toolkit-panel";
    el.innerHTML = PANEL_HTML;
    document.body.appendChild(el);
    panelEl = el;
    setupEvents();
  }

  function setupEvents() {
    const p = panelEl;

    p.querySelector("#stp-close").addEventListener("click", () => {
      panelOpen = false;
      p.classList.remove("visible");
    });

    p.querySelector(".rt-header").addEventListener("mousedown", (e) => {
      if (e.target.closest("#stp-close")) return;
      isDragging = true;
      const r = p.getBoundingClientRect();
      dragOffX = e.clientX - r.left;
      dragOffY = e.clientY - r.top;
    });
    document.addEventListener("mousemove", (e) => {
      if (!isDragging) return;
      p.style.left = e.clientX - dragOffX + "px";
      p.style.top = e.clientY - dragOffY + "px";
    });
    document.addEventListener("mouseup", () => {
      isDragging = false;
    });

    p.querySelectorAll(".rt-tab").forEach((tab) => {
      tab.addEventListener("click", () => {
        const id = tab.dataset.tab;
        p.querySelectorAll(".rt-tab").forEach((t) =>
          t.classList.toggle("active", t === tab),
        );
        p.querySelectorAll(".rt-tab-content").forEach((c) =>
          c.classList.toggle("active", c.id === "tab-" + id),
        );
      });
    });

    p.querySelector("#stp-discord-btn").addEventListener("click", () =>
      window.open(DISCORD, "_blank"),
    );

    p.querySelector("#stp-access-link").addEventListener("click", () =>
      window.open(SITE, "_blank"),
    );

    p.querySelectorAll(".rt-plan-row").forEach((row) => {
      row.addEventListener("click", () => window.open(SITE, "_blank"));
    });

    p.querySelector("#stp-license-apply").addEventListener("click", () => {
      toast("Enter your key at rushteam.tools");
      setTimeout(() => window.open(SITE, "_blank"), 400);
    });
    p.querySelector("#stp-license-clear").addEventListener("click", () => {
      p.querySelector("#stp-license-key").value = "";
    });

    p.querySelectorAll(".rt-row.locked").forEach((row) => {
      row.addEventListener("click", (e) => {
        if (e.target.tagName === "SELECT" || e.target.tagName === "INPUT")
          return;
        const name =
          (row.querySelector(".rt-row-name") || {}).textContent ||
          "This feature";
        toast(name.trim() + " — unlock at rushteam.tools");
        setTimeout(() => window.open(SITE, "_blank"), 400);
      });
    });

    p.querySelectorAll(
      '[data-id="norecoil"], [data-id="norecoil-toggle"]',
    ).forEach((row) => {
      row.addEventListener("click", () => toggleRecoil());
    });

    const rcSlider = p.querySelector("#stp-rc-strength");
    const rcVal = p.querySelector("#stp-rc-strength-val");
    if (rcSlider) {
      rcSlider.addEventListener("input", () => {
        _str = +rcSlider.value;
        if (rcVal) rcVal.textContent = (_str / 100).toFixed(2);
        if (_on) { _rx(); _rs(); }
      });
    }

    const rcPreset = p.querySelector("#stp-rc-preset");
    if (rcPreset) {
      rcPreset.addEventListener("change", () => {
        const map = { light: 150, medium: 200, heavy: 250, sniper: 100 };
        _str = map[rcPreset.value] || 200;
        if (rcSlider) rcSlider.value = String(_str);
        if (rcVal) rcVal.textContent = (_str / 100).toFixed(2);
        if (_on) { _rx(); _rs(); }
      });
    }

    const nudge = p.querySelector("#stp-upgrade-nudge");
    if (nudge) {
      nudge.style.display = "block";
      nudge.addEventListener("click", () => window.open(SITE, "_blank"));
    }

    const dismiss = p.querySelector("#rt-overlay-dismiss");
    if (dismiss) {
      dismiss.addEventListener("click", () => {
        const overlay = p.querySelector("#rt-upgrade-overlay");
        if (overlay) overlay.style.display = "none";
      });
    }
  }

  function togglePanel() {
    panelOpen = !panelOpen;
    if (panelEl) panelEl.classList.toggle("visible", panelOpen);
  }

  document.addEventListener(
    "keydown",
    (e) => {
      if (e.key === "F2" || e.key === "Insert") {
        e.preventDefault();
        togglePanel();
      }
      if (e.key === "F5" && document.getElementById("unity-canvas")) {
        e.preventDefault();
        toggleRecoil();
      }
    },
    true,
  );

  function _ab() {
    const _a = document.getElementById(_na);
    const _b = document.getElementById(_uc);
    if (_a) _a.style.setProperty("display", "none", "important");
    if (_b) _b.style.setProperty("display", "block", "important");
  }

  function startBypass() {
    _ab();
    const _obs = new MutationObserver(_ab);
    [_na, _uc].forEach((id) => {
      const el = document.getElementById(id);
      if (el) _obs.observe(el, { attributes: true, attributeFilter: ["style"] });
    });
    setTimeout(() => {
      if (typeof runUnityLoader === "function") {
        runUnityLoader();
      } else {
        const _btn = document.getElementById(["loading", "button"].join("-"));
        if (_btn) _btn.click();
      }
    }, 200);
  }

  function buildNotice() {
    if (panelEl) return;

    const styleEl = document.createElement("style");
    styleEl.textContent =
      PANEL_CSS +
      `
      #security-toolkit-notice {
        --rt-bg-primary: #111118; --rt-bg-secondary: #0d0d14;
        --rt-bg-elevated: rgba(255,255,255,0.025); --rt-border: rgba(255,255,255,0.04);
        --rt-text-primary: #e2e2e8; --rt-text-secondary: #7a7a8a; --rt-text-muted: #4a4a60;
        --rt-text-accent: #10b981; --rt-accent: #10b981; --rt-accent-dim: rgba(16,185,129,0.15);
        --rt-font: 'Segoe UI', system-ui, -apple-system, sans-serif;
        --rt-font-mono: 'Consolas', 'Monaco', monospace;
        --rt-font-xs: 9px; --rt-font-sm: 10px; --rt-font-base: 12px; --rt-transition: 150ms ease;
        position: fixed; top: 64px; left: 16px; width: 300px;
        background: var(--rt-bg-primary); border: 1px solid var(--rt-border);
        border-radius: 10px; font-family: var(--rt-font); font-size: var(--rt-font-base);
        color: var(--rt-text-primary); z-index: 999999; display: none;
        user-select: none; overflow: hidden; box-shadow: 0 8px 32px rgba(0,0,0,0.5); line-height: 1.4;
      }
      #security-toolkit-notice.visible { display: block; }
      #security-toolkit-notice * { box-sizing: border-box; }
    `;
    (document.head || document.documentElement).appendChild(styleEl);

    const el = document.createElement("div");
    el.id = "security-toolkit-notice";
    el.innerHTML = `
      <div class="rt-header" style="cursor:move;">
        <div class="rt-header-left">
          <div class="rt-logo-box">PF</div>
          <span class="rt-title">Polyfillers Hack</span>
          <span class="rt-version">v${VERSION}</span>
        </div>
        <div class="rt-header-right">
          <button class="rt-close" id="stp-notice-close">${SVG_CLOSE}</button>
        </div>
      </div>
      <div style="padding:14px 16px 18px; text-align:center;">
        <div style="font-size:10px; color:#7a7a8a; line-height:1.8; margin-bottom:14px;">
          You're on the standard Rush Team client.<br>
          Switch to the ad-free WebGL version for a<br>
          cleaner experience with full toolkit support<br>
          and no interruptions.
        </div>
        <a href="${WEBGL_URL}" style="display:block; background:#10b981; color:#000; font-size:10px; font-weight:700; padding:8px 18px; border-radius:6px; text-decoration:none; font-family:monospace; letter-spacing:0.04em; text-align:center;">Switch to WebGL Version →</a>
      </div>
    `;
    document.body.appendChild(el);
    panelEl = el;

    el.querySelector("#stp-notice-close").addEventListener("click", () => {
      panelOpen = false;
      el.classList.remove("visible");
    });

    el.querySelector(".rt-header").addEventListener("mousedown", (e) => {
      if (e.target.closest("#stp-notice-close")) return;
      isDragging = true;
      const r = el.getBoundingClientRect();
      dragOffX = e.clientX - r.left;
      dragOffY = e.clientY - r.top;
    });
  }

  function init() {
    if (IS_WEBGL) {
      startBypass();
      buildPanel();
      panelOpen = true;
      panelEl.classList.add("visible");
      toast("RushTeam Tools loaded  ·  F2 to toggle panel");
    } else {
      buildNotice();
      panelOpen = true;
      panelEl.classList.add("visible");
    }
  }

  if (document.readyState === "loading") window.addEventListener("load", init);
  else init();
})();