// ==UserScript== // @name GarticPro v3.0 // @namespace http://tampermonkey.net/ // @version 3.0 // @description Gartic.io Enhanced Experience // @author ProDev // @match https://gartic.io/?Pro* // @icon https://www.google.com/s2/favicons?sz=64&domain=gartic.io // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant unsafeWindow // @downloadURL https://update.greasyfork.icu/scripts/524297/GarticPro%20v30.user.js // @updateURL https://update.greasyfork.icu/scripts/524297/GarticPro%20v30.meta.js // ==/UserScript== (function() { 'use strict'; const STYLE = ` :root { --primary: #6c5ce7; --primary-dark: #5849e0; --accent: #a55eea; --background: rgba(15,15,26,0.95); --surface: rgba(26,26,46,0.98); --surface-light: rgba(36,36,68,0.95); --text: #ffffff; --text-secondary: rgba(255,255,255,0.7); --border: rgba(108,92,231,0.2); --shadow: 0 4px 20px rgba(0,0,0,0.25); --shadow-lg: 0 8px 30px rgba(0,0,0,0.3); --gradient: linear-gradient(45deg, var(--primary), var(--accent)); } #garticpro { position: fixed; top: 20px; left: 20px; width: 95%; max-width: 400px; background: var(--surface); border-radius: 15px; box-shadow: var(--shadow-lg); z-index: 9999; backdrop-filter: blur(10px); border: 1px solid var(--border); overflow: hidden; transform: translateX(-420px); transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); opacity: 0; animation: fadeIn 0.5s ease forwards; } #garticpro.active { transform: translateX(0); } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .gp-header { background: var(--gradient); padding: 1rem; display: flex; align-items: center; justify-content: space-between; } .gp-title { display: flex; align-items: center; gap: 0.75rem; } .gp-logo { width: 32px; height: 32px; background: rgba(255,255,255,0.2); border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; } .gp-name { font-weight: 600; font-size: 1rem; color: var(--text); } .gp-version { font-size: 0.75rem; opacity: 0.8; } .gp-toggle { position: fixed; top: 20px; left: 20px; width: 48px; height: 48px; background: var(--surface); border-radius: 12px; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: var(--shadow); border: 1px solid var(--border); transition: all 0.3s ease; z-index: 10000; } .gp-toggle:hover { transform: scale(1.05); background: var(--surface-light); } .gp-content { padding: 1rem; } .gp-stats { display: flex; justify-content: space-between; margin-bottom: 1rem; } .gp-stat { background: var(--surface-light); padding: 0.75rem; border-radius: 12px; display: flex; align-items: center; gap: 0.5rem; transition: all 0.3s ease; } .gp-stat-icon { width: 32px; height: 32px; background: var(--primary); border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 1rem; } .gp-stat-info { flex: 1; } .gp-stat-value { font-size: 1rem; font-weight: 600; } .gp-stat-label { font-size: 0.75rem; color: var(--text-secondary); } .gp-tabs { display: flex; gap: 0.5rem; margin-bottom: 1rem; padding: 0.25rem; background: var(--surface-light); border-radius: 10px; } .gp-tab { flex: 1; padding: 0.5rem; border: none; background: none; color: var(--text); border-radius: 8px; cursor: pointer; transition: all 0.3s ease; font-weight: 500; } .gp-tab.active { background: var(--primary); } .gp-list { display: flex; flex-direction: column; gap: 0.5rem; max-height: 400px; overflow-y: auto; padding-right: 0.5rem; } .gp-room, .gp-player { background: var(--surface-light); padding: 0.75rem; border-radius: 12px; display: flex; align-items: center; gap: 0.5rem; transition: all 0.3s ease; } .gp-avatar { width: 40px; height: 40px; border-radius: 10px; overflow: hidden; } .gp-avatar img { width: 100%; height: 100%; object-fit: cover; } .gp-info { flex: 1; } .gp-name { font-weight: 600; font-size: 0.875rem; margin-bottom: 0.25rem; } .gp-stats { font-size: 0.75rem; color: var(--text-secondary); display: flex; gap: 0.5rem; } .gp-actions { display: flex; gap: 0.5rem; } .gp-action { width: 28px; height: 28px; border-radius: 8px; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,0.1); border: none; color: var(--text); cursor: pointer; transition: all 0.3s ease; } `; class GarticPro { constructor() { this.players = new Map(); this.rooms = new Map(); this.activeTab = 'players'; this.initialized = false; } init() { this.createUI(); this.fetchRoomData(); this.setupEventListeners(); this.startUpdateCycle(); this.initialized = true; } createUI() { GM_addStyle(STYLE); const container = document.createElement('div'); container.id = 'garticpro'; container.innerHTML = `