feat: Fully implemented Auto-Switch feature

This commit is contained in:
MiraclePatrickLumowa authored and GitHub committed 2025-09-20 00:22:09 +08:00
1 parent f7a0c7f495
commit 954eed9d98
20 files changed
+2051 -449

No files matched your search

+5 -14
View File
@@ -7,7 +7,7 @@
// @match https://wplace.live/*
// @grant none
// @icon
// ==/UserScript==
// ==/UserScript==l
; (async () => {
console.log('%c🚀 WPlace AutoBOT Script Manager Loading...', 'color: #00ff41; font-weight: bold; font-size: 16px;');
@@ -28,23 +28,14 @@
icon: '🖼️',
category: 'automation'
},
{
name: 'Auto-Repair.js',
displayName: '🔧 Auto Repair',
{
name: 'Auto-Repair.js',
displayName: '🔧 Auto Repair',
description: 'Automated repair and maintenance tasks',
icon: '🔧',
category: 'utility'
},
{
name: 'Acc-Switch.js',
displayName: '🔄 Account Switcher',
description: 'Temporary account switching script',
icon: '🔄',
category: 'automation'
}
];
// Neon theme styling
]; // Neon theme styling
const NEON_STYLES = `
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap');
+84 -7
View File
@@ -206,12 +206,12 @@
position: fixed;
top: 20px;
left: 20px;
width: 280px;
width: 340px;
max-height: calc(100vh - 40px);
padding: 0;
z-index: 9998;
animation: slide-in 0.4s ease-out;
overflow: hidden auto;
overflow: hidden;
transition: all 0.3s ease;
user-select: none;
@@ -233,21 +233,21 @@
}
#wplace-image-bot-container.wplace-compact {
width: 240px;
width: 300px;
}
#wplace-image-bot-container.wplace-minimized {
width: 200px;
width: 260px;
height: auto;
overflow: hidden;
}
/* Stats container sits to the right of main (280 + 30 = 330) */
/* Stats container sits to the right of main (340 + 30 = 370) */
#wplace-stats-container {
position: fixed;
top: 20px;
left: 310px;
width: 230px;
left: 370px;
width: 300px;
max-height: calc(100vh - 40px);
padding: 0;
z-index: 9997;
@@ -2081,3 +2081,80 @@
.wplace-account-placeholder i {
color: var(--wplace-warning);
}
/* ===================================== */
/* Hide browser default spinner buttons */
/* ===================================== */
/* Hide spinner buttons for all number inputs in the extension */
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
/* Firefox support */
input[type="number"] {
-moz-appearance: textfield;
appearance: textfield;
}
/* Specifically target extension number inputs */
.wplace-settings-number-input::-webkit-outer-spin-button,
.wplace-settings-number-input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.wplace-settings-number-input {
-moz-appearance: textfield;
appearance: textfield;
}
/* Hide spinners on batch control inputs */
.wplace-random-batch-grid input[type="number"]::-webkit-outer-spin-button,
.wplace-random-batch-grid input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.wplace-random-batch-grid input[type="number"] {
-moz-appearance: textfield;
appearance: textfield;
}
/* Hide spinners on block size inputs */
.wplace-block-size-grid input[type="number"]::-webkit-outer-spin-button,
.wplace-block-size-grid input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.wplace-block-size-grid input[type="number"] {
-moz-appearance: textfield;
appearance: textfield;
}
/* Hide spinners on threshold inputs */
.resize-threshold-input::-webkit-outer-spin-button,
.resize-threshold-input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.resize-threshold-input {
-moz-appearance: textfield;
appearance: textfield;
}
/* Hide spinners on notification interval inputs */
.wplace-notification-interval-input::-webkit-outer-spin-button,
.wplace-notification-interval-input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.wplace-notification-interval-input {
-moz-appearance: textfield;
appearance: textfield;
}
+3 -3
View File
@@ -1,6 +1,6 @@
// Background service worker for WPlace AutoBOT Extension
// Test resource loading on extension start
// Test resource loading on extension starto
chrome.runtime.onStartup.addListener(async () => {
console.log('🚀 WPlace AutoBOT Extension started');
const resources = await loadExtensionResources();
@@ -15,7 +15,7 @@ chrome.runtime.onInstalled.addListener(async () => {
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === 'executeScript') {
// Get tabId from sender or request
// Get tabId from sender or requests
const tabId = request.tabId || sender.tab?.id;
if (!tabId) {
@@ -23,7 +23,7 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
return;
}
// Use IIFE for async handling
// Use IIFE for async handlings
(async () => {
try {
await executeLocalScript(request.scriptName, tabId);
+2 -2
View File
@@ -1,6 +1,6 @@
// Content script for WPlace AutoBOT - Creates in-page UI
// Check if we're on wplace.live
// Check if we're on wplace.lives
if (window.location.hostname === 'wplace.live') {
// Control variables
@@ -59,7 +59,7 @@ if (window.location.hostname === 'wplace.live') {
}
}
// Execute script function
// Execute script functions
async function executeScript(scriptName) {
if (!autobotButton || currentScript) return;
+3 -13
View File
@@ -9,7 +9,6 @@
"stopPainting": "Boyamayı Durdur",
"checkingColors": "🔍 Uygun renkler kontrol ediliyor...",
"noColorsFound": "❌ Sitede renk paletini açın ve tekrar deneyin!",
"colorsUpdated": "✅ Mevcut renk sayısı arttı {oldCount} -> {newCount}, {diffCount} yeni renk bulundu.",
"colorsFound": "✅ {count} uygun renk bulundu. Yüklemeye hazır.",
"loadingImage": "🖼️ Resim yükleniyor...",
"imageLoaded": "✅ Resim {count} geçerli piksel ile yüklendi",
@@ -21,12 +20,8 @@
"startPaintingMsg": "🎨 Boyama başlatılıyor...",
"paintingProgress": "🧱 İlerleme: {painted}/{total} piksel...",
"noCharges": "⌛ Yeterli hak yok. Bekleniyor {time}...",
"overlayTilesNotLoaded": "❌ Gerekli harita döşemeleri yüklenmedi. Bağlantıyı kontrol edin veya tekrar deneyin.",
"paintingStopped": "⏹️ Boyama kullanıcı tarafından durduruldu",
"paintingComplete": "✅ Boyama tamamlandı! {count} piksel boyandı.",
"paintingBatchFailed": "❌ Yeniden denemelerden sonra piksel grubu gönderilemedi. Boyama durduruldu.",
"paintingPixelCheckFailed": "❌ ({x}, {y}) konumundaki piksel okunamadı. Boyama durduruldu.",
"paintingFinalBatchFailed": "⚠️ {count} pikselden oluşan son parti, yeniden denemelerden sonra başarısız oldu.",
"paintingStoppedByUser": "⏹️ Boyama kullanıcı tarafından durduruldu.",
"paintingError": "❌ Boyama sırasında hata oluştu",
"missingRequirements": "❌ Önce resim yükleyip konum seçmelisiniz",
"progress": "İlerleme",
@@ -35,7 +30,6 @@
"estimatedTime": "Tahmini süre",
"initMessage": "Başlamak için 'Resim Yükle'ye tıklayın",
"waitingInit": "Başlatma bekleniyor...",
"fullChargeIn": "Tam Şarj",
"initializingToken": "🔧 Turnstile token üreticisi başlatılıyor...",
"tokenReady": "✅ Token üreteci hazır - artık boyamaya başlayabilirsiniz!",
"tokenRetryLater": "⚠️ Token üreteci gerektiğinde yeniden deneyecek",
@@ -146,9 +140,5 @@
"hideStats": "İstatistikleri Gizle",
"paintOptions": "Boya Seçenekleri",
"paintWhitePixels": "Beyaz pikselleri boya",
"paintWhitePixelsDescription": "Etkinleştirildiğinde, şablonun beyaz pikselleri boyanacaktır.",
"paintTransparentPixels": "Şeffaf pikselleri boya",
"paintTransparentPixelsDescription": "Etkinleştirildiğinde, şablonun şeffaf pikselleri boyanır.",
"paintUnavailablePixels": "Boyama Yapılamıyor.",
"paintUnavailablePixelsDescription": "Etkinleştirildiğinde, kullanılamayan şablon renkleri, mevcut en yakın renk kullanılarak boyanır."
}
"paintTransparentPixels": "Şeffaf pikselleri boya"
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "WPlace AutoBOT Script Launcher",
"version": "1.0.0",
"version": "2.0.0",
"description": "Launch and manage automation scripts for WPlace",
"icons": {
"16": "icons/icon16.png",
+1 -1
View File
@@ -105,7 +105,7 @@
<footer>
<div class="footer-info">
<span>v1.0.0</span>
<span>v2.0.0</span>
<a href="#" id="settingsBtn">Settings</a>
</div>
</footer>
+7 -25
View File
@@ -18,7 +18,7 @@ const AVAILABLE_SCRIPTS = [
{
name: 'Auto-Image.js',
displayName: '🖼️ Auto Image',
description: 'Automated image processing and placement',
description: 'Automated image processing and placement with account switching',
filename: 'Auto-Image.js'
},
{
@@ -26,12 +26,6 @@ const AVAILABLE_SCRIPTS = [
displayName: '🔧 Auto Repair',
description: 'Automated repair and maintenance tasks',
filename: 'Auto-Repair.js'
},
{
name: 'Acc-Switch.js',
displayName: '🔄 Account Switcher',
description: 'Temporary account switching script',
filename: 'Acc-Switch.js'
}
];
@@ -612,9 +606,6 @@ function showNotification(message, type = 'info') {
}
}, 3000);
// Log to console as well
// console.log(`📢 ${type.toUpperCase()}: ${message}`);
// Update status indicator
if (type === 'error') {
statusDot.className = 'status-dot error';
@@ -630,10 +621,12 @@ function showNotification(message, type = 'info') {
statusText.textContent = 'Info';
}
// Reset status after 3 seconds
setTimeout(() => {
checkCurrentTab();
}, 3000);
// Only reset status if it's not the initial "Ready to launch" message
if (message !== 'Ready to launch scripts on wplace.live') {
setTimeout(() => {
checkCurrentTab();
}, 3000);
}
}
function escapeHtml(text) {
@@ -664,17 +657,6 @@ async function loadStartupScript() {
}
}
// Load startup script selection
async function loadStartupScript() {
const result = await chrome.storage.local.get('startupScript');
const select = document.getElementById('startupScriptSelect');
if (select) {
select.value = result.startupScript || '';
}
}
// Enhanced account validation
async function validateAccountToken(token) {
try {
File diff suppressed because it is too large. Load diff
+15 -10
View File
@@ -1773,16 +1773,21 @@
const targetColor = Utils.resolveColor([originalR, originalG, originalB], state.availableColors);
const currentColor = Utils.resolveColor(currentPixel.slice(0, 3), state.availableColors);
if (targetColor.id !== currentColor.id) {
damagedPixels.push({
x,
y,
originalColor: targetColor,
currentColor: currentColor,
originalRgb: [originalR, originalG, originalB],
currentRgb: currentPixel.slice(0, 3),
isDamagedTransparent: false
});
if (targetColor.id === currentColor.id) {
// Pixel is already correctly painted - skip it
continue;
}
// Pixel has wrong color - mark as damaged
damagedPixels.push({
x,
y,
originalColor: targetColor,
currentColor: currentColor,
originalRgb: [originalR, originalG, originalB],
currentRgb: currentPixel.slice(0, 3),
isDamagedTransparent: false
});
wrongColorPixelsDetected++;
if (!state.autonomousMode || wrongColorPixelsDetected <= 10) {
+1 -1
View File
@@ -10,7 +10,7 @@
/**
* ImageProcessor - Handles image loading, processing, color conversion, and dithering for WPlace AutoBot
* Extracted from Auto-Image.js for better modularity and reusability
* Extracted from Auto-Image.js for better modularity and reusabilit
*/
class ImageProcessor {
constructor(imageSrc = null) {
+1 -1
View File
@@ -10,7 +10,7 @@
/**
* OverlayManager - Handles overlay processing, tile chunking, and canvas operations for WPlace AutoBot
* Extracted from Auto-Image.js for better modularity and reusability
* Extracted from Auto-Image.js for better modularity and reusabilityc
*/
class OverlayManager {
constructor() {
+2 -2
View File
@@ -5,12 +5,12 @@
// @description Turnstile token management for WPlace AutoBot
// @author Wbot
// @match https://wplace.live/*
// @grant none
// @grant nones
// ==/UserScript==
/**
* TokenManager - Handles Turnstile token generation, caching, and validation for WPlace AutoBot
* Extracted from Auto-Image.js for better modularity and reusability
* Extracted from Auto-Image.js for better modularity and reusabilitys
*/
class TokenManager {
constructor() {
+38 -4
View File
@@ -1,6 +1,6 @@
/**
* WPlace AutoBOT - Utils Manager
* Centralized utility functions for the WPlace automation system
* Centralized utility functions for the WPlace automation systemds
*/
class WPlaceUtilsManager {
@@ -408,6 +408,16 @@ class WPlaceUtilsManager {
}
formatTime(ms) {
// Handle invalid or infinite values
if (!Number.isFinite(ms) || ms < 0) {
return '--:--:--';
}
// Handle very large values (more than 999 days)
if (ms > 999 * 24 * 60 * 60 * 1000) {
return '999d+';
}
const seconds = Math.floor((ms / 1000) % 60);
const minutes = Math.floor((ms / (1000 * 60)) % 60);
const hours = Math.floor((ms / (1000 * 60 * 60)) % 24);
@@ -423,15 +433,34 @@ class WPlaceUtilsManager {
}
calculateEstimatedTime(remainingPixels, charges, cooldown) {
if (remainingPixels <= 0) return 0;
// Safety checks for input parameters
if (!Number.isFinite(remainingPixels) || remainingPixels <= 0) return 0;
if (!Number.isFinite(charges) || charges <= 0) charges = 1;
if (!Number.isFinite(cooldown) || cooldown <= 0) cooldown = 30000; // Default 30s
const paintingSpeed = window.state?.paintingSpeed || 5;
if (!Number.isFinite(paintingSpeed) || paintingSpeed <= 0) {
// Fallback calculation without painting speed
const cyclesNeeded = Math.ceil(remainingPixels / Math.max(charges, 1));
const timeFromCharges = cyclesNeeded * cooldown;
return Math.min(timeFromCharges, 999 * 24 * 60 * 60 * 1000); // Cap at 999 days
}
const paintingSpeedDelay = window.state.paintingSpeed > 0 ? 1000 / window.state.paintingSpeed : 1000;
const paintingSpeedDelay = 1000 / paintingSpeed;
const timeFromSpeed = remainingPixels * paintingSpeedDelay;
const cyclesNeeded = Math.ceil(remainingPixels / Math.max(charges, 1));
const timeFromCharges = cyclesNeeded * cooldown;
return timeFromSpeed + timeFromCharges;
const totalTime = timeFromSpeed + timeFromCharges;
// Safety check to prevent infinity and cap at reasonable maximum
if (!Number.isFinite(totalTime) || totalTime < 0) {
return 0;
}
// Cap at 999 days to prevent display issues
return Math.min(totalTime, 999 * 24 * 60 * 60 * 1000);
}
// Painted pixel tracking helpers
@@ -472,6 +501,11 @@ class WPlaceUtilsManager {
return false;
}
// Alias for isPixelPainted - used in pre-filtering logic
isPixelMarkedPainted(x, y, regionX = 0, regionY = 0) {
return this.isPixelPainted(x, y, regionX, regionY);
}
// Smart save
shouldAutoSave() {
const now = Date.now();
+153
View File
@@ -627,3 +627,156 @@
border-radius: var(--wplace-radius);
color: var(--wplace-text);
}
/* Account switching UI styles */
.wplace-theme-acrylic .wplace-section {
margin: 15px 0;
border-radius: var(--wplace-radius);
background: rgba(255, 255, 255, 0.08);
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.15);
backdrop-filter: var(--wplace-backdrop);
}
.wplace-theme-acrylic .wplace-section-title {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--wplace-text);
margin-bottom: 10px;
font-size: 14px;
}
/* Auto-swap toggle switch */
.wplace-theme-acrylic .wplace-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.wplace-theme-acrylic .wplace-switch input {
opacity: 0;
width: 0;
height: 0;
}
.wplace-theme-acrylic .wplace-slider-round {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255, 255, 255, 0.2);
transition: 0.4s;
border-radius: 24px;
backdrop-filter: blur(10px);
}
.wplace-theme-acrylic .wplace-slider-round:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 3px;
bottom: 3px;
background-color: white;
transition: 0.4s;
border-radius: 50%;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.wplace-theme-acrylic .wplace-switch input:checked + .wplace-slider-round {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.wplace-theme-acrylic .wplace-switch input:checked + .wplace-slider-round:before {
transform: translateX(26px);
}
/* Account list container */
.wplace-theme-acrylic .accounts-list-container {
max-height: 200px;
overflow-y: auto;
margin-top: 10px;
padding: 0 6px;
}
/* Individual account item */
.wplace-theme-acrylic .wplace-account-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 8px;
margin: 4px 0;
background: rgba(255, 255, 255, 0.05);
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.15);
transition: all 0.3s ease;
backdrop-filter: blur(10px);
position: relative;
}
/* Account ordering number */
.wplace-theme-acrylic .wplace-account-number {
position: absolute;
top: 3px;
left: 3px;
width: 16px;
height: 16px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 9px;
font-weight: bold;
z-index: 1;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
}.wplace-theme-acrylic .wplace-account-item:hover {
background: rgba(255, 255, 255, 0.12);
border-color: rgba(255, 255, 255, 0.3);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.wplace-theme-acrylic .wplace-account-item.is-current {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.3) 0%, rgba(118, 75, 162, 0.3) 100%);
border-color: #667eea;
box-shadow: 0 0 20px rgba(102, 126, 234, 0.4);
}
/* Account details */
.wplace-theme-acrylic .wplace-account-details {
flex: 1;
margin-left: 25px;
}.wplace-theme-acrylic .wplace-account-name {
font-weight: 600;
color: var(--wplace-text);
font-size: 13px;
margin-bottom: 2px;
}
/* Account statistics */
.wplace-theme-acrylic .wplace-account-stats {
display: flex;
gap: 12px;
align-items: center;
font-size: 12px;
color: rgba(255, 255, 255, 0.75);
}
.wplace-theme-acrylic .wplace-account-stats i {
margin-right: 4px;
}
.wplace-theme-acrylic .wplace-account-stats .fas.fa-bolt {
color: #ffd700;
}
.wplace-theme-acrylic .wplace-account-stats .fas.fa-tint {
color: #00bfff;
}
+159 -1
View File
@@ -556,7 +556,7 @@
color: var(--wplace-text);
padding: 4px 8px;
font-size: 12px;
width: 50px;
width: 65px;
text-align: center;
transition: all 0.2s ease;
height: 22px;
@@ -617,6 +617,164 @@
border: 1px solid rgb(0 0 0 / 10%) !important;
}
/* Account switching UI styles */
.wplace-theme-classic-light .wplace-section {
margin: 15px 0;
border-radius: var(--wplace-radius);
background: rgba(0, 0, 0, 0.03);
padding: 15px;
border: 1px solid rgba(0, 0, 0, 0.1);
}
.wplace-theme-classic-light .wplace-section-title {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--wplace-text);
margin-bottom: 10px;
font-size: 14px;
}
/* Auto-swap toggle switch */
.wplace-theme-classic-light .wplace-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.wplace-theme-classic-light .wplace-switch input {
opacity: 0;
width: 0;
height: 0;
}
.wplace-theme-classic-light .wplace-slider-round {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: 0.4s;
border-radius: 24px;
}
.wplace-theme-classic-light .wplace-slider-round:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 3px;
bottom: 3px;
background-color: white;
transition: 0.4s;
border-radius: 50%;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.wplace-theme-classic-light .wplace-switch input:checked + .wplace-slider-round {
background-color: #4facfe;
}
.wplace-theme-classic-light .wplace-switch input:checked + .wplace-slider-round:before {
transform: translateX(26px);
}
/* Account list container */
.wplace-theme-classic-light .accounts-list-container {
max-height: 200px;
overflow-y: auto;
margin-top: 10px;
padding: 0 6px;
}
/* Individual account item */
.wplace-theme-classic-light .wplace-account-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 8px;
margin: 4px 0;
background: rgba(0, 0, 0, 0.02);
border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.08);
transition: all 0.3s ease;
position: relative;
}
/* Account ordering number */
.wplace-theme-classic-light .wplace-account-number {
position: absolute;
top: 3px;
left: 3px;
width: 16px;
height: 16px;
background: #4facfe;
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 9px;
font-weight: bold;
z-index: 1;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.wplace-theme-classic-light .wplace-account-item:hover {
background: rgba(0, 0, 0, 0.05);
border-color: rgba(0, 0, 0, 0.15);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.wplace-theme-classic-light .wplace-account-item.is-current {
background: rgba(79, 172, 254, 0.1);
border-color: #4facfe;
box-shadow: 0 0 10px rgba(79, 172, 254, 0.2);
}
/* Account details */
.wplace-theme-classic-light .wplace-account-details {
flex: 1;
margin-left: 20px;
min-width: 0;
}
.wplace-theme-classic-light .wplace-account-name {
font-weight: 600;
color: var(--wplace-text);
font-size: 12px;
margin-bottom: 1px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Account statistics */
.wplace-theme-classic-light .wplace-account-stats {
display: flex;
gap: 8px;
align-items: center;
font-size: 11px;
color: rgba(0, 0, 0, 0.6);
flex-shrink: 0;
}
.wplace-theme-classic-light .wplace-account-stats i {
margin-right: 4px;
}
.wplace-theme-classic-light .wplace-account-stats .fas.fa-bolt {
color: #ff9800;
}
.wplace-theme-classic-light .wplace-account-stats .fas.fa-tint {
color: #2196f3;
}
+175 -1
View File
@@ -689,7 +689,7 @@
color: white;
padding: 4px 8px;
font-size: 12px;
width: 50px;
width: 65px;
text-align: center;
transition: all 0.2s ease;
height: 22px;
@@ -747,3 +747,177 @@
box-shadow: 0 0 20px rgb(0 0 0 / 50%);
}
/* Account switching UI styles */
:root .wplace-section,
.wplace-theme-classic .wplace-section {
margin: 15px 0;
border-radius: var(--wplace-radius);
background: rgba(255, 255, 255, 0.05);
padding: 15px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
:root .wplace-section-title,
.wplace-theme-classic .wplace-section-title {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--wplace-text);
margin-bottom: 10px;
font-size: 14px;
}
/* Auto-swap toggle switch */
:root .wplace-switch,
.wplace-theme-classic .wplace-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
:root .wplace-switch input,
.wplace-theme-classic .wplace-switch input {
opacity: 0;
width: 0;
height: 0;
}
:root .wplace-slider-round,
.wplace-theme-classic .wplace-slider-round {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #444;
transition: 0.4s;
border-radius: 24px;
}
:root .wplace-slider-round:before,
.wplace-theme-classic .wplace-slider-round:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 3px;
bottom: 3px;
background-color: white;
transition: 0.4s;
border-radius: 50%;
}
:root .wplace-switch input:checked + .wplace-slider-round,
.wplace-theme-classic .wplace-switch input:checked + .wplace-slider-round {
background: var(--wplace-slider-track-bg);
}
:root .wplace-switch input:checked + .wplace-slider-round:before,
.wplace-theme-classic .wplace-switch input:checked + .wplace-slider-round:before {
transform: translateX(26px);
}
/* Account list container */
:root .accounts-list-container,
.wplace-theme-classic .accounts-list-container {
max-height: 200px;
overflow-y: auto;
margin-top: 10px;
padding: 0 6px;
}
/* Individual account item */
:root .wplace-account-item,
.wplace-theme-classic .wplace-account-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 8px;
margin: 4px 0;
background: rgba(255, 255, 255, 0.03);
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
position: relative;
}
/* Account ordering number */
:root .wplace-account-number,
.wplace-theme-classic .wplace-account-number {
position: absolute;
top: 3px;
left: 3px;
width: 16px;
height: 16px;
background: var(--wplace-highlight);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 9px;
font-weight: bold;
z-index: 1;
}
:root .wplace-account-item:hover,
.wplace-theme-classic .wplace-account-item:hover {
background: rgba(255, 255, 255, 0.08);
border-color: var(--wplace-highlight);
}
:root .wplace-account-item.is-current,
.wplace-theme-classic .wplace-account-item.is-current {
background: rgba(79, 172, 254, 0.2);
border-color: #4facfe;
box-shadow: 0 0 10px rgba(79, 172, 254, 0.3);
}
/* Account details */
:root .wplace-account-details,
.wplace-theme-classic .wplace-account-details {
flex: 1;
margin-left: 20px;
min-width: 0;
}
:root .wplace-account-name,
.wplace-theme-classic .wplace-account-name {
font-weight: 600;
color: var(--wplace-text);
font-size: 12px;
margin-bottom: 1px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Account statistics */
:root .wplace-account-stats,
.wplace-theme-classic .wplace-account-stats {
display: flex;
gap: 8px;
align-items: center;
font-size: 11px;
color: var(--wplace-muted-text);
flex-shrink: 0;
}
:root .wplace-account-stats i,
.wplace-theme-classic .wplace-account-stats i {
margin-right: 4px;
}
:root .wplace-account-stats .fas.fa-bolt,
.wplace-theme-classic .wplace-account-stats .fas.fa-bolt {
color: #ffd700;
}
:root .wplace-account-stats .fas.fa-tint,
.wplace-theme-classic .wplace-account-stats .fas.fa-tint {
color: #00bfff;
}
+186 -1
View File
@@ -455,7 +455,7 @@
color: var(--wplace-text) !important;
padding: 2px 4px;
font-size: 10px;
width: 40px;
width: 65px;
text-align: center;
transition: all 0.2s ease;
height: 18px;
@@ -516,3 +516,188 @@
box-shadow: none !important; /* Optional: remove glows */
font-family: 'Press Start 2P', monospace !important;
}
/* Account switching UI styles */
.wplace-theme-neon-cyan .wplace-section {
margin: 15px 0;
border-radius: 0;
background: rgba(0, 255, 255, 0.05);
padding: 15px;
border: 2px solid #00ffff;
box-shadow: 0 0 20px rgba(0, 255, 255, 0.3);
font-family: var(--wplace-font);
}
.wplace-theme-neon-cyan .wplace-section-title {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--wplace-text);
margin-bottom: 10px;
font-size: 12px;
text-transform: uppercase;
text-shadow: 0 0 8px var(--wplace-text);
font-family: var(--wplace-font);
}
/* Auto-swap toggle switch */
.wplace-theme-neon-cyan .wplace-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.wplace-theme-neon-cyan .wplace-switch input {
opacity: 0;
width: 0;
height: 0;
}
.wplace-theme-neon-cyan .wplace-slider-round {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #1a1a2e;
transition: 0.4s;
border-radius: 0;
border: 2px solid #333;
box-shadow: 0 0 10px rgba(0, 255, 255, 0.2);
}
.wplace-theme-neon-cyan .wplace-slider-round:before {
position: absolute;
content: "";
height: 14px;
width: 14px;
left: 3px;
bottom: 3px;
background-color: #fff;
transition: 0.4s;
border-radius: 0;
box-shadow: 0 0 8px rgba(255, 255, 255, 0.5);
}
.wplace-theme-neon-cyan .wplace-switch input:checked + .wplace-slider-round {
background-color: #00ffff;
box-shadow: 0 0 20px rgba(0, 255, 255, 0.6);
}
.wplace-theme-neon-cyan .wplace-switch input:checked + .wplace-slider-round:before {
transform: translateX(26px);
box-shadow: 0 0 12px rgba(0, 255, 255, 0.8);
}
/* Account list container */
.wplace-theme-neon-cyan .accounts-list-container {
max-height: 200px;
overflow-y: auto;
margin-top: 10px;
padding: 0 6px;
}
/* Individual account item */
.wplace-theme-neon-cyan .wplace-account-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 8px;
margin: 4px 0;
background: rgba(0, 255, 255, 0.03);
border-radius: 0;
border: 1px solid #00ffff;
transition: all 0.3s ease;
box-shadow: 0 0 5px rgba(0, 255, 255, 0.2);
position: relative;
}
/* Account ordering number */
.wplace-theme-neon-cyan .wplace-account-number {
position: absolute;
top: 3px;
left: 3px;
width: 8x;
height: 8px;
background: #00ffff;
color: #1a1a2e;
border-radius: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 8px;
font-weight: bold;
z-index: 1;
border: 1px solid #00ffff;
box-shadow: 0 0 8px rgba(0, 255, 255, 0.6);
font-family: var(--wplace-font);
}
.wplace-theme-neon-cyan .wplace-account-item:hover {
background: rgba(0, 255, 255, 0.08);
border-color: #00ffff;
box-shadow: 0 0 15px rgba(0, 255, 255, 0.4);
transform: translateX(2px);
}
.wplace-theme-neon-cyan .wplace-account-item.is-current {
background: rgba(0, 255, 255, 0.15);
border-color: #00ffff;
box-shadow: 0 0 25px rgba(0, 255, 255, 0.6);
animation: neon-cyan-pulse 2s infinite;
}
@keyframes neon-cyan-pulse {
0%, 100% { box-shadow: 0 0 25px rgba(0, 255, 255, 0.6); }
50% { box-shadow: 0 0 35px rgba(0, 255, 255, 0.8); }
}
/* Account details */
.wplace-theme-neon-cyan .wplace-account-details {
flex: 1;
margin-left: 20px;
min-width: 0;
}
.wplace-theme-neon-cyan .wplace-account-name {
font-weight: 600;
color: var(--wplace-text);
font-size: 8px;
margin-bottom: 1px;
text-transform: uppercase;
text-shadow: 0 0 5px var(--wplace-text);
font-family: var(--wplace-font);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Account statistics */
.wplace-theme-neon-cyan .wplace-account-stats {
display: flex;
gap: 8px;
align-items: center;
font-size: 8px;
color: rgba(0, 255, 255, 0.8);
text-transform: uppercase;
font-family: var(--wplace-font);
flex-shrink: 0;
}
.wplace-theme-neon-cyan .wplace-account-stats i {
margin-right: 4px;
text-shadow: 0 0 5px currentColor;
}
.wplace-theme-neon-cyan .wplace-account-stats .fas.fa-bolt {
color: #ffff00;
text-shadow: 0 0 8px #ffff00;
}
.wplace-theme-neon-cyan .wplace-account-stats .fas.fa-tint {
color: #00ffff;
text-shadow: 0 0 8px #00ffff;
}
+187 -1
View File
@@ -455,7 +455,7 @@
color: var(--wplace-text) !important;
padding: 2px 4px;
font-size: 10px;
width: 40px;
width: 65px;
text-align: center;
transition: all 0.2s ease;
height: 18px;
@@ -517,3 +517,189 @@
box-shadow: none !important; /* Optional: remove glows */
font-family: 'Press Start 2P', monospace !important;
}
/* Account switching UI styles */
.wplace-theme-neon-light .wplace-section {
margin: 15px 0;
border-radius: 0;
background: rgba(32, 60, 93, 0.05);
padding: 15px;
border: 2px solid #203C5D;
box-shadow: 0 0 20px rgba(32, 60, 93, 0.2);
font-family: var(--wplace-font);
}
.wplace-theme-neon-light .wplace-section-title {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--wplace-text);
margin-bottom: 10px;
font-size: 12px;
text-transform: uppercase;
text-shadow: 0 0 5px var(--wplace-text);
font-family: var(--wplace-font);
}
/* Auto-swap toggle switch */
.wplace-theme-neon-light .wplace-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.wplace-theme-neon-light .wplace-switch input {
opacity: 0;
width: 0;
height: 0;
}
.wplace-theme-neon-light .wplace-slider-round {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #f0f0f0;
transition: 0.4s;
border-radius: 0;
border: 2px solid #ccc;
box-shadow: 0 0 8px rgba(32, 60, 93, 0.15);
}
.wplace-theme-neon-light .wplace-slider-round:before {
position: absolute;
content: "";
height: 14px;
width: 14px;
left: 3px;
bottom: 3px;
background-color: #203C5D;
transition: 0.4s;
border-radius: 0;
box-shadow: 0 0 8px rgba(32, 60, 93, 0.3);
}
.wplace-theme-neon-light .wplace-switch input:checked + .wplace-slider-round {
background-color: #203C5D;
box-shadow: 0 0 15px rgba(32, 60, 93, 0.4);
}
.wplace-theme-neon-light .wplace-switch input:checked + .wplace-slider-round:before {
transform: translateX(26px);
background-color: #fff;
box-shadow: 0 0 10px rgba(32, 60, 93, 0.5);
}
/* Account list container */
.wplace-theme-neon-light .accounts-list-container {
max-height: 200px;
overflow-y: auto;
margin-top: 10px;
padding: 0 6px;
}
/* Individual account item */
.wplace-theme-neon-light .wplace-account-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 8px;
margin: 4px 0;
background: rgba(32, 60, 93, 0.03);
border-radius: 0;
border: 1px solid #203C5D;
transition: all 0.3s ease;
box-shadow: 0 0 5px rgba(32, 60, 93, 0.1);
position: relative;
}
/* Account ordering number */
.wplace-theme-neon-light .wplace-account-number {
position: absolute;
top: 3px;
left: 3px;
width: 8px;
height: 8px;
background: #203C5D;
color: white;
border-radius: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 8px;
font-weight: bold;
z-index: 1;
border: 1px solid #203C5D;
box-shadow: 0 0 6px rgba(32, 60, 93, 0.4);
font-family: var(--wplace-font);
}
.wplace-theme-neon-light .wplace-account-item:hover {
background: rgba(32, 60, 93, 0.08);
border-color: #203C5D;
box-shadow: 0 0 12px rgba(32, 60, 93, 0.2);
transform: translateX(2px);
}
.wplace-theme-neon-light .wplace-account-item.is-current {
background: rgba(32, 60, 93, 0.15);
border-color: #203C5D;
box-shadow: 0 0 20px rgba(32, 60, 93, 0.3);
animation: neon-light-pulse 2s infinite;
}
@keyframes neon-light-pulse {
0%, 100% { box-shadow: 0 0 20px rgba(32, 60, 93, 0.3); }
50% { box-shadow: 0 0 25px rgba(32, 60, 93, 0.4); }
}
/* Account details */
.wplace-theme-neon-light .wplace-account-details {
flex: 1;
margin-left: 20px;
min-width: 0;
}
.wplace-theme-neon-light .wplace-account-name {
font-weight: 600;
color: var(--wplace-text);
font-size: 8px;
margin-bottom: 1px;
text-transform: uppercase;
text-shadow: 0 0 3px var(--wplace-text);
font-family: var(--wplace-font);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Account statistics */
.wplace-theme-neon-light .wplace-account-stats {
display: flex;
gap: 8px;
align-items: center;
font-size: 8px;
color: rgba(32, 60, 93, 0.8);
text-transform: uppercase;
font-family: var(--wplace-font);
flex-shrink: 0;
}
.wplace-theme-neon-light .wplace-account-stats i {
margin-right: 4px;
text-shadow: 0 0 3px currentColor;
}
.wplace-theme-neon-light .wplace-account-stats .fas.fa-bolt {
color: #ff6b35;
text-shadow: 0 0 5px #ff6b35;
}
.wplace-theme-neon-light .wplace-account-stats .fas.fa-tint {
color: #203C5D;
text-shadow: 0 0 5px #203C5D;
}
+186 -1
View File
@@ -571,7 +571,7 @@
color: var(--wplace-text) !important;
padding: 2px 4px;
font-size: 10px;
width: 40px;
width: 65px;
text-align: center;
transition: all 0.2s ease;
height: 18px;
@@ -633,3 +633,188 @@
font-family: 'Press Start 2P', monospace !important;
}
/* Account switching UI styles */
.wplace-theme-neon .wplace-section {
margin: 15px 0;
border-radius: 0;
background: rgba(0, 255, 65, 0.05);
padding: 15px;
border: 2px solid #00ff41;
box-shadow: 0 0 20px rgba(0, 255, 65, 0.3);
font-family: var(--wplace-font);
}
.wplace-theme-neon .wplace-section-title {
display: flex;
align-items: center;
gap: 8px;
font-weight: 600;
color: var(--wplace-text);
margin-bottom: 10px;
font-size: 12px;
text-transform: uppercase;
text-shadow: 0 0 8px var(--wplace-text);
font-family: var(--wplace-font);
}
/* Auto-swap toggle switch */
.wplace-theme-neon .wplace-switch {
position: relative;
display: inline-block;
width: 50px;
height: 24px;
}
.wplace-theme-neon .wplace-switch input {
opacity: 0;
width: 0;
height: 0;
}
.wplace-theme-neon .wplace-slider-round {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #1a1a2e;
transition: 0.4s;
border-radius: 0;
border: 2px solid #333;
box-shadow: 0 0 10px rgba(0, 255, 65, 0.2);
}
.wplace-theme-neon .wplace-slider-round:before {
position: absolute;
content: "";
height: 14px;
width: 14px;
left: 3px;
bottom: 3px;
background-color: #fff;
transition: 0.4s;
border-radius: 0;
box-shadow: 0 0 8px rgba(255, 255, 255, 0.5);
}
.wplace-theme-neon .wplace-switch input:checked + .wplace-slider-round {
background-color: #00ff41;
box-shadow: 0 0 20px rgba(0, 255, 65, 0.6);
}
.wplace-theme-neon .wplace-switch input:checked + .wplace-slider-round:before {
transform: translateX(26px);
box-shadow: 0 0 12px rgba(0, 255, 65, 0.8);
}
/* Account list container */
.wplace-theme-neon .accounts-list-container {
max-height: 200px;
overflow-y: auto;
margin-top: 10px;
padding: 0 6px;
}
/* Individual account item */
.wplace-theme-neon .wplace-account-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 8px;
margin: 4px 0;
background: rgba(0, 255, 65, 0.03);
border-radius: 0;
border: 1px solid #00ff41;
transition: all 0.3s ease;
box-shadow: 0 0 5px rgba(0, 255, 65, 0.2);
position: relative;
}
/* Account ordering number */
.wplace-theme-neon .wplace-account-number {
position: absolute;
top: 3px;
left: 3px;
width: 8px;
height: 8px;
background: #00ff41;
color: #1a1a2e;
border-radius: 0;
display: flex;
align-items: center;
justify-content: center;
font-size: 8px;
font-weight: bold;
z-index: 1;
border: 1px solid #00ff41;
box-shadow: 0 0 8px rgba(0, 255, 65, 0.6);
font-family: var(--wplace-font);
}
.wplace-theme-neon .wplace-account-item:hover {
background: rgba(0, 255, 65, 0.08);
border-color: #00ff41;
box-shadow: 0 0 15px rgba(0, 255, 65, 0.4);
transform: translateX(2px);
}
.wplace-theme-neon .wplace-account-item.is-current {
background: rgba(0, 255, 65, 0.15);
border-color: #00ff41;
box-shadow: 0 0 25px rgba(0, 255, 65, 0.6);
animation: neon-pulse 2s infinite;
}
@keyframes neon-pulse {
0%, 100% { box-shadow: 0 0 25px rgba(0, 255, 65, 0.6); }
50% { box-shadow: 0 0 35px rgba(0, 255, 65, 0.8); }
}
/* Account details */
.wplace-theme-neon .wplace-account-details {
flex: 1;
margin-left: 20px;
min-width: 0;
}
.wplace-theme-neon .wplace-account-name {
font-weight: 600;
color: var(--wplace-text);
font-size: 8px;
margin-bottom: 1px;
text-transform: uppercase;
text-shadow: 0 0 5px var(--wplace-text);
font-family: var(--wplace-font);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Account statistics */
.wplace-theme-neon .wplace-account-stats {
display: flex;
gap: 8px;
align-items: center;
font-size: 8px;
color: rgba(0, 255, 65, 0.8);
text-transform: uppercase;
font-family: var(--wplace-font);
flex-shrink: 0;
}
.wplace-theme-neon .wplace-account-stats i {
margin-right: 4px;
text-shadow: 0 0 5px currentColor;
}
.wplace-theme-neon .wplace-account-stats .fas.fa-bolt {
color: #ffff00;
text-shadow: 0 0 8px #ffff00;
}
.wplace-theme-neon .wplace-account-stats .fas.fa-tint {
color: #00bfff;
text-shadow: 0 0 8px #00bfff;
}