fixed a lot of bs

This commit is contained in:
MiraclePatrickLumowa authored and GitHub committed 2025-10-01 17:23:49 +08:00
1 parent c5ca628922
commit 59544427f5
20 files changed
+1466 -766

No files matched your search

+54 -9
View File
@@ -2037,22 +2037,23 @@
.wplace-account-item.current {
background: var(--wplace-success)20;
border-left: 3px solid var(--wplace-success);
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
0 0 25px rgba(46, 204, 113, 0.4),
0 0 35px rgba(46, 204, 113, 0.2);
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
0 0 25px rgba(46, 204, 113, 0.4),
0 0 35px rgba(46, 204, 113, 0.2);
animation: currentAccountGlow 2s ease-in-out infinite alternate;
}
@keyframes currentAccountGlow {
from {
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
0 0 25px rgba(46, 204, 113, 0.4),
0 0 35px rgba(46, 204, 113, 0.2);
box-shadow: 0 0 15px rgba(46, 204, 113, 0.6),
0 0 25px rgba(46, 204, 113, 0.4),
0 0 35px rgba(46, 204, 113, 0.2);
}
to {
box-shadow: 0 0 20px rgba(46, 204, 113, 0.8),
0 0 30px rgba(46, 204, 113, 0.6),
0 0 40px rgba(46, 204, 113, 0.4);
box-shadow: 0 0 20px rgba(46, 204, 113, 0.8),
0 0 30px rgba(46, 204, 113, 0.6),
0 0 40px rgba(46, 204, 113, 0.4);
}
}
@@ -2061,6 +2062,7 @@
box-shadow: 0 0 10px rgba(46, 204, 113, 0.8);
transform: scale(1);
}
to {
box-shadow: 0 0 15px rgba(46, 204, 113, 1.0);
transform: scale(1.05);
@@ -2191,4 +2193,47 @@ input[type="number"] {
.wplace-notification-interval-input {
-moz-appearance: textfield;
appearance: textfield;
}
.pill-container {
position: relative;
display: flex;
background: #2d1f40;
border-radius: 50px;
width: 100%;
max-width: 280px;
box-sizing: border-box;
padding: 9px;
}
.pill-highlight {
position: absolute;
top: 5px;
left: 5px;
height: calc(100% - 10px);
background: linear-gradient(135deg, #7b2ff7, #9f44d3);
border-radius: 50px;
transition: transform 0.4s ease;
z-index: 0;
width: calc((100% - 10px) / 3);
/* evenly divide space for 3 buttons */
}
.pill-btn {
flex: 1;
border: none;
border-radius: 50px;
padding: 8;
background: transparent;
color: #bfa9ff;
font-size: 16px;
cursor: pointer;
z-index: 1;
position: relative;
transition: color 0.3s ease;
}
.pill-btn.active {
color: white;
}
+44 -20
View File
@@ -44,16 +44,16 @@ async function executeLocalScript(scriptName, tabId) {
// Check if we need to inject dependencies first for Auto-Image.js or Art-Extractor.js
if (scriptName === 'Auto-Image.js' || scriptName === 'Art-Extractor.js') {
console.log(`🔑 ${scriptName} detected, ensuring dependencies are loaded first...`);
try {
// First inject token-manager.js
const tokenManagerUrl = chrome.runtime.getURL('scripts/token-manager.js');
const tokenManagerResponse = await fetch(tokenManagerUrl);
if (tokenManagerResponse.ok) {
const tokenManagerCode = await tokenManagerResponse.text();
console.log('🔑 Token manager loaded, injecting first...');
// Execute token manager first
await chrome.scripting.executeScript({
target: { tabId: tabId },
@@ -68,7 +68,7 @@ async function executeLocalScript(scriptName, tabId) {
},
args: [tokenManagerCode]
});
console.log('✅ Token manager injected successfully');
} else {
console.warn('⚠️ Could not load token-manager.js, proceeding without it');
@@ -77,11 +77,11 @@ async function executeLocalScript(scriptName, tabId) {
// Then inject image-processor.js
const imageProcessorUrl = chrome.runtime.getURL('scripts/image-processor.js');
const imageProcessorResponse = await fetch(imageProcessorUrl);
if (imageProcessorResponse.ok) {
const imageProcessorCode = await imageProcessorResponse.text();
console.log('🖼️ Image processor loaded, injecting second...');
// Execute image processor second
await chrome.scripting.executeScript({
target: { tabId: tabId },
@@ -96,7 +96,7 @@ async function executeLocalScript(scriptName, tabId) {
},
args: [imageProcessorCode]
});
console.log('✅ Image processor injected successfully');
} else {
console.warn('⚠️ Could not load image-processor.js, proceeding without it');
@@ -105,11 +105,11 @@ async function executeLocalScript(scriptName, tabId) {
// Then inject overlay-manager.js
const overlayManagerUrl = chrome.runtime.getURL('scripts/overlay-manager.js');
const overlayManagerResponse = await fetch(overlayManagerUrl);
if (overlayManagerResponse.ok) {
const overlayManagerCode = await overlayManagerResponse.text();
console.log('🎨 Overlay manager loaded, injecting third...');
// Execute overlay manager thirds
await chrome.scripting.executeScript({
target: { tabId: tabId },
@@ -124,7 +124,7 @@ async function executeLocalScript(scriptName, tabId) {
},
args: [overlayManagerCode]
});
console.log('✅ Overlay manager injected successfully');
} else {
console.warn('⚠️ Could not load overlay-manager.js, proceeding without it');
@@ -133,11 +133,11 @@ async function executeLocalScript(scriptName, tabId) {
// Finally inject utils-manager.js
const utilsManagerUrl = chrome.runtime.getURL('scripts/utils-manager.js');
const utilsManagerResponse = await fetch(utilsManagerUrl);
if (utilsManagerResponse.ok) {
const utilsManagerCode = await utilsManagerResponse.text();
console.log('🛠️ Utils manager loaded, injecting fourth...');
// Execute utils manager fourth
await chrome.scripting.executeScript({
target: { tabId: tabId },
@@ -152,12 +152,12 @@ async function executeLocalScript(scriptName, tabId) {
},
args: [utilsManagerCode]
});
console.log('✅ Utils manager injected successfully');
} else {
console.warn('⚠️ Could not load utils-manager.js, proceeding without it');
}
// Small delay to ensure dependencies are fully initialized
await new Promise(resolve => setTimeout(resolve, 200));
} catch (error) {
@@ -270,15 +270,32 @@ async function executeLocalScript(scriptName, tabId) {
// Helper function to get language data with detailed logging
window.getLanguage = function (lang = 'en') {
const langFile = lang + '.json';
const result = window.AUTOBOT_LANGUAGES[langFile] || window.AUTOBOT_LANGUAGES['en.json'] || {};
const langFile = `${lang}.json`;
let sourceFile = langFile;
let successMessage = 'Found exact match';
let result = window.AUTOBOT_LANGUAGES[langFile];
if (!result) {
const localeMatch = Object.keys(window.AUTOBOT_LANGUAGES).find(file => file.toLowerCase().startsWith(`${lang.toLowerCase()}-`));
if (localeMatch) {
result = window.AUTOBOT_LANGUAGES[localeMatch];
sourceFile = localeMatch;
successMessage = `Using regional fallback (${localeMatch.replace('.json', '')})`;
}
}
if (!result) {
result = window.AUTOBOT_LANGUAGES['en.json'] || {};
sourceFile = 'en.json';
successMessage = 'Fallback to English';
}
console.group(`%c🔤 Language Access: ${lang.toUpperCase()}`, 'color: #06b6d4; font-weight: bold;');
console.log(` 📋 Requested: ${lang}`);
console.log(` 📄 File: ${langFile}`);
console.log(` 📄 File: ${sourceFile}`);
console.log(` 📍 Source: Extension local file`);
console.log(` 📏 Keys returned: ${Object.keys(result).length}`);
console.log(` ✅ Success: ${window.AUTOBOT_LANGUAGES[langFile] ? 'Found exact match' : 'Fallback to English'}`);
console.log(` ✅ Success: ${successMessage}`);
console.log(` 📝 Data preview:`, result);
console.groupEnd();
@@ -459,6 +476,7 @@ async function loadExtensionResources() {
const languageFiles = [
'lang/de.json',
'lang/en.json',
'lang/es.json',
'lang/fr.json',
'lang/id.json',
'lang/ja.json',
@@ -536,6 +554,12 @@ async function loadExtensionResources() {
}
}
}
// Ensure base Spanish file is available even if only regional variant exists
if (!resources.languages['es.json'] && resources.languages['es-MX.json']) {
resources.languages['es.json'] = resources.languages['es-MX.json'];
console.log(`%c✅ Added fallback mapping: es-MX.json ➝ es.json`, 'color: #10b981; font-weight: bold;');
}
console.groupEnd();
const loadTime = performance.now() - startTime;
@@ -757,7 +781,7 @@ chrome.webNavigation.onCompleted.addListener(
if (details.url.includes("wplace.live")) {
console.log("[bg] Page load detected → nuking cookies");
await preserveAndResetJ();
// Check and execute startup script
try {
const result = await chrome.storage.local.get('startupScript');
@@ -804,7 +828,7 @@ async function setCookie(value) {
});
}
});
resolve(cookie);
}
}
+83 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Malgeschwindigkeit",
"pixelsPerSecond": "Pixel/Sekunde",
"speedSetting": "Geschwindigkeit: {speed} Pixel/Sek",
"keepAspectRatio": "Seitenverhältnis beibehalten",
"settings": "Einstellungen",
"botSettings": "Bot-Einstellungen",
"close": "Schließen",
@@ -70,5 +71,86 @@
"captchaSolving": "🔑 Generiere Turnstile-Token...",
"captchaFailed": "❌ Turnstile-Token-Generierung fehlgeschlagen. Versuche Fallback-Methode...",
"automation": "Automatisierung",
"noChargesThreshold": "⌛ Warte bis {threshold} Ladungen erreicht sind. Aktuell {current}. Nächste in {time}..."
"noChargesThreshold": "⌛ Warte bis {threshold} Ladungen erreicht sind. Aktuell {current}. Nächste in {time}...",
"tokenCapturedSuccess": "Token erfolgreich erfasst! Du kannst jetzt mit dem Bot beginnen.",
"notificationsNotSupported": "Benachrichtigungen werden in diesem Browser nicht unterstützt.",
"chargesReadyNotification": "WPlace — Ladungen bereit",
"chargesReadyMessage": "Ladungen bereit: {current} / {max}. Schwellenwert: {threshold}.",
"testNotificationTitle": "WPlace — Test",
"testNotificationMessage": "Dies ist eine Test-Benachrichtigung.",
"showStats": "Statistiken anzeigen",
"compactMode": "Kompaktmodus",
"refreshCharges": "Ladungen aktualisieren",
"closeStats": "Statistiken schließen",
"zoomOut": "Verkleinern",
"zoomIn": "Vergrößern",
"fitToView": "An Ansicht anpassen",
"actualSize": "Tatsächliche Größe (100%)",
"panMode": "Schwenken (ziehen zum Bewegen)",
"clearIgnoredPixels": "Alle ignorierten Pixel löschen",
"invertMask": "Maske invertieren",
"waitingSetupComplete": "🔄 Warte auf Abschluss der Ersteinrichtung...",
"waitingTokenGenerator": "🔄 Warte auf Token-Generator-Initialisierung...",
"uploadImageFirst": "Lade zuerst ein Bild hoch, um verfügbare Farben zu erfassen",
"pleaseWaitInitialSetup": "🔄 Bitte warte, bis die Ersteinrichtung abgeschlossen ist, bevor du Fortschritt lädst.",
"pleaseWaitFileSetup": "🔄 Bitte warte, bis die Ersteinrichtung abgeschlossen ist, bevor du aus Datei lädst.",
"errorSavingProgress": "❌ Fehler beim Speichern des Fortschritts",
"errorLoadingProgress": "❌ Fehler beim Laden des Fortschritts",
"fileOperationsAvailable": "📂 Dateioperationen (Laden/Hochladen) sind jetzt verfügbar!",
"tokenGeneratorReady": "🔑 Token-Generator bereit!",
"paintingStats": "Malstatistiken",
"enablePaintingSpeedLimit": "Malgeschwindigkeitslimit aktivieren (Batch-Größenkontrolle)",
"enableNotifications": "Benachrichtigungen aktivieren",
"notifyOnChargesThreshold": "Benachrichtigen, wenn Ladungen Schwellenwert erreichen",
"onlyWhenNotFocused": "Nur wenn Tab nicht fokussiert ist",
"repeatEvery": "Wiederholen alle",
"minutesPl": "Minute(n)",
"grantPermission": "Berechtigung erteilen",
"test": "Test",
"showAllColorsIncluding": "Alle Farben anzeigen (auch nicht verfügbare)",
"chromaWeight": "Chroma-Gewicht",
"downloadPreview": "Vorschau herunterladen",
"apply": "Anwenden",
"cancel": "Abbrechen",
"fit": "Anpassen",
"hundred": "100%",
"clear": "Löschen",
"invert": "Invertieren",
"reprocessingOverlay": "Overlay wird neu verarbeitet...",
"overlayUpdated": "Overlay aktualisiert!",
"notificationsEnabled": "Benachrichtigungen aktiviert.",
"notificationsPermissionDenied": "Benachrichtigungsberechtigung verweigert.",
"overlayEnabled": "Overlay aktiviert.",
"overlayDisabled": "Overlay deaktiviert.",
"tokenSourceSet": "Token-Quelle auf {source} gesetzt",
"batchModeSet": "Batch-Modus auf {mode} gesetzt",
"randomRange": "Zufallsbereich",
"normalFixedSize": "Normale feste Größe",
"advancedColorSettingsReset": "Erweiterte Farbeinstellungen zurückgesetzt.",
"shiftRowAltColumn": "Shift = Zeile • Alt = Spalte",
"hideTurnstileBtn": "Ausblenden",
"turnstileInstructions": "Cloudflare Turnstile — bitte schließe die Überprüfung ab, falls angezeigt",
"uploadImageFirstColors": "Bitte lade zuerst ein Bild hoch, um verfügbare Farben zu erfassen",
"availableColors": "Verfügbare Farben ({count})",
"colorTooltip": "ID: {id}\nRGB: {rgb}",
"expandMode": "Erweiterungsmodus",
"minimize": "Minimieren",
"restore": "Wiederherstellen",
"hideStats": "Statistiken ausblenden",
"paintOptions": "Mal-Optionen",
"paintWhitePixels": "Weiße Pixel malen",
"paintWhitePixelsDescription": "Wenn aktiviert, werden weiße Template-Pixel gemalt.",
"paintTransparentPixels": "Transparente Pixel malen",
"paintTransparentPixelsDescription": "Wenn aktiviert, werden transparente Template-Pixel gemalt",
"paintUnavailablePixels": "Nicht verfügbare Pixel malen",
"paintUnavailablePixelsDescription": "Wenn aktiviert, werden nicht verfügbare Template-Farben mit der nächsten verfügbaren Farbe gemalt",
"colorsUpdated": "✅ Verfügbare Farben erhöht {oldCount} -> {newCount}, {diffCount} neue Farben gefunden",
"overlayTilesNotLoaded": "❌ Erforderliche Kartenkacheln nicht geladen. Verbindung prüfen oder erneut versuchen.",
"paintingBatchFailed": "❌ Batch-Senden nach mehreren Versuchen fehlgeschlagen. Malen gestoppt.",
"paintingPixelCheckFailed": "❌ Pixel bei ({x}, {y}) konnte nicht gelesen werden. Malen gestoppt.",
"paintingFinalBatchFailed": "⚠️ Finaler Batch von {count} Pixeln nach mehreren Versuchen fehlgeschlagen.",
"fullChargeIn": "Vollständige Aufladung in",
"batchSize": "Batch-Größe",
"speedOn": "An",
"speedOff": "Aus"
}
+2
View File
@@ -60,6 +60,8 @@
"paintingSpeed": "Painting Speed",
"pixelsPerSecond": "pixels/second",
"speedSetting": "Speed: {speed} pixels/sec",
"batchSize": "Batch Size",
"keepAspectRatio": "Keep Aspect Ratio",
"settings": "Settings",
"botSettings": "Bot Settings",
"close": "Close",
+156
View File
@@ -0,0 +1,156 @@
{
"title": "WPlace Auto-Imagen",
"toggleOverlay": "Alternar superposición",
"scanColors": "Escanear colores",
"uploadImage": "Subir imagen",
"resizeImage": "Cambiar tamaño",
"selectPosition": "Seleccionar posición",
"startPainting": "Iniciar",
"stopPainting": "Detener",
"checkingColors": "🔍 Verificando colores disponibles...",
"noColorsFound": "❌ ¡Abre la paleta de colores en el sitio e inténtalo de nuevo!",
"colorsUpdated": "✅ Colores disponibles aumentados {oldCount} -> {newCount}, {diffCount} nuevos colores encontrados",
"colorsFound": "✅ Se encontraron {count} colores disponibles. Listo para subir.",
"loadingImage": "🖼️ Cargando imagen...",
"imageLoaded": "✅ Imagen cargada con {count} píxeles válidos",
"imageError": "❌ Error al cargar la imagen",
"selectPositionAlert": "¡Pinta el primer píxel en la ubicación donde quieres que comience el arte!",
"waitingPosition": "👆 Esperando que pintes el píxel de referencia...",
"positionSet": "✅ ¡Posición establecida con éxito!",
"positionTimeout": "❌ Tiempo de espera para seleccionar la posición agotado",
"startPaintingMsg": "🎨 Iniciando pintado...",
"paintingProgress": "🧱 Progreso: {painted}/{total} píxeles...",
"noCharges": "⌛ Sin cargas. Esperando {time}...",
"overlayTilesNotLoaded": "❌ Bloques de mapa necesarios no cargados. Verifica la conexión o intenta de nuevo.",
"paintingStoppedByUser": "⏹️ Pintado detenido por el usuario",
"paintingBatchFailed": "❌ Falló el envío de lote después de varios intentos. Pintado detenido.",
"paintingPixelCheckFailed": "❌ No se pudo leer el píxel en ({x}, {y}). Pintado detenido.",
"paintingFinalBatchFailed": "⚠️ Lote final de {count} píxeles falló después de varios intentos.",
"paintingComplete": "✅ ¡Pintado completo! Se pintaron {count} píxeles.",
"paintingError": "❌ Error durante el pintado",
"missingRequirements": "❌ Primero carga una imagen y selecciona una posición",
"progress": "Progreso",
"pixels": "Píxeles",
"charges": "Cargas",
"batchSize": "Tamaño de lote",
"fullChargeIn": "Carga completa en",
"estimatedTime": "Tiempo estimado",
"initMessage": "Haz clic en 'Subir imagen' para comenzar",
"waitingInit": "Esperando inicialización...",
"initializingToken": "🔧 Inicializando generador de token Turnstile...",
"tokenReady": "✅ ¡Generador de token listo! Ya puedes empezar a pintar.",
"tokenRetryLater": "⚠️ El generador de token volverá a intentarlo cuando sea necesario",
"resizeSuccess": "✅ Imagen redimensionada a {width}x{height}",
"paintingPaused": "⏸️ Pintado pausado en la posición X: {x}, Y: {y}",
"captchaNeeded": "❗ Falló la generación de token. Por favor, inténtalo de nuevo en un momento.",
"saveData": "Guardar progreso",
"loadData": "Cargar progreso",
"saveToFile": "Guardar en archivo",
"loadFromFile": "Cargar desde archivo",
"dataManager": "Gestor de datos",
"autoSaved": "✅ Progreso guardado automáticamente",
"dataLoaded": "✅ Progreso cargado con éxito",
"fileSaved": "✅ Progreso guardado en archivo con éxito",
"fileLoaded": "✅ Progreso cargado desde archivo con éxito",
"noSavedData": "❌ No se encontró progreso guardado",
"savedDataFound": "✅ ¡Se encontró progreso guardado! ¿Cargar para continuar?",
"savedDate": "Guardado el: {date}",
"clickLoadToContinue": "Haz clic en 'Cargar progreso' para continuar.",
"fileError": "❌ Error al procesar el archivo",
"invalidFileFormat": "❌ Formato de archivo inválido",
"paintingSpeed": "Velocidad de pintado",
"pixelsPerSecond": "píxeles/segundo",
"speedSetting": "Velocidad: {speed} píxeles/seg",
"keepAspectRatio": "Mantener proporción",
"settings": "Ajustes",
"botSettings": "Ajustes del bot",
"close": "Cerrar",
"language": "Idioma",
"themeSettings": "Ajustes de tema",
"themeSettingsDesc": "Elige tu tema de color preferido para la interfaz.",
"languageSelectDesc": "Selecciona tu idioma preferido. Los cambios se aplicarán inmediatamente.",
"autoCaptcha": "Solucionador automático de CAPTCHA (Turnstile)",
"autoCaptchaDesc": "Genera automáticamente tokens de Turnstile usando el generador integrado. Utiliza la automatización del navegador como alternativa si es necesario.",
"applySettings": "Aplicar ajustes",
"settingsSaved": "✅ ¡Ajustes guardados con éxito!",
"speedOn": "Activado",
"speedOff": "Desactivado",
"cooldownSettings": "Ajustes de tiempo de espera",
"waitCharges": "Esperar hasta que las cargas lleguen a",
"captchaSolving": "🔑 Generando token de Turnstile...",
"captchaFailed": "❌ Falló la generación de token de Turnstile. Probando método alternativo...",
"automation": "Automatización",
"noChargesThreshold": "⌛ Esperando que las cargas lleguen a {threshold}. Actual: {current}. Siguiente en {time}...",
"tokenCapturedSuccess": "¡Token capturado con éxito! Ya puedes iniciar el bot.",
"notificationsNotSupported": "Las notificaciones no son compatibles con este navegador.",
"chargesReadyNotification": "WPlace — Cargas listas",
"chargesReadyMessage": "Cargas listas: {current} / {max}. Umbral: {threshold}.",
"testNotificationTitle": "WPlace — Prueba",
"testNotificationMessage": "Esta es una notificación de prueba.",
"showStats": "Mostrar estadísticas",
"compactMode": "Modo compacto",
"refreshCharges": "Actualizar cargas",
"closeStats": "Cerrar estadísticas",
"zoomOut": "Alejar",
"zoomIn": "Acercar",
"fitToView": "Ajustar a la vista",
"actualSize": "Tamaño real (100%)",
"panMode": "Desplazamiento (arrastra para mover la vista)",
"clearIgnoredPixels": "Limpiar todos los píxeles ignorados",
"invertMask": "Invertir máscara",
"waitingSetupComplete": "🔄 Esperando que se complete la configuración inicial...",
"waitingTokenGenerator": "🔄 Esperando que se inicialice el generador de tokens...",
"uploadImageFirst": "Sube una imagen primero para capturar los colores disponibles",
"pleaseWaitInitialSetup": "🔄 Por favor, espera a que se complete la configuración inicial antes de cargar el progreso.",
"pleaseWaitFileSetup": "🔄 Por favor, espera a que se complete la configuración inicial antes de cargar desde un archivo.",
"errorSavingProgress": "❌ Error al guardar el progreso",
"errorLoadingProgress": "❌ Error al cargar el progreso",
"fileOperationsAvailable": "📂 ¡Las operaciones de archivo (Cargar/Subir) ya están disponibles!",
"tokenGeneratorReady": "🔑 ¡Generador de tokens listo!",
"paintingStats": "Estadísticas de pintado",
"enablePaintingSpeedLimit": "Activar límite de velocidad de pintado (control de lotes)",
"enableNotifications": "Activar notificaciones",
"notifyOnChargesThreshold": "Notificar cuando las cargas alcancen el umbral",
"onlyWhenNotFocused": "Solo cuando la pestaña no esté en foco",
"repeatEvery": "Repetir cada",
"minutesPl": "minuto(s)",
"grantPermission": "Otorgar permiso",
"test": "Probar",
"showAllColorsIncluding": "Mostrar todos los colores (incluidos los no disponibles)",
"chromaWeight": "Peso de croma",
"downloadPreview": "Descargar vista previa",
"apply": "Aplicar",
"cancel": "Cancelar",
"fit": "Ajustar",
"hundred": "100%",
"clear": "Limpiar",
"invert": "Invertir",
"reprocessingOverlay": "Reprocesando superposición...",
"overlayUpdated": "¡Superposición actualizada!",
"notificationsEnabled": "Notificaciones activadas.",
"notificationsPermissionDenied": "Permiso de notificaciones denegado.",
"overlayEnabled": "Superposición activada.",
"overlayDisabled": "Superposición desactivada.",
"tokenSourceSet": "Fuente de token establecida en: {source}",
"batchModeSet": "Modo por lotes establecido en: {mode}",
"randomRange": "Rango aleatorio",
"normalFixedSize": "Tamaño fijo normal",
"advancedColorSettingsReset": "Ajustes de color avanzados restablecidos.",
"shiftRowAltColumn": "Shift = Fila • Alt = Columna",
"hideTurnstileBtn": "Ocultar",
"turnstileInstructions": "Cloudflare Turnstile — por favor, completa la verificación si se muestra",
"uploadImageFirstColors": "Por favor, sube una imagen primero para capturar los colores disponibles",
"availableColors": "Colores disponibles ({count})",
"colorTooltip": "ID: {id}\nRGB: {rgb}",
"expandMode": "Modo expandido",
"minimize": "Minimizar",
"restore": "Restaurar",
"hideStats": "Ocultar estadísticas",
"paintOptions": "Opciones de pintado",
"paintWhitePixels": "Pintar píxeles blancos",
"paintWhitePixelsDescription": "Si está activado, se pintarán los píxeles blancos de la plantilla.",
"paintTransparentPixels": "Pintar píxeles transparentes",
"paintTransparentPixelsDescription": "Si está activado, se pintarán los píxeles transparentes de la plantilla",
"paintUnavailablePixels": "Pintar píxeles no disponibles",
"paintUnavailablePixelsDescription": "Si está activado, los colores de plantilla no disponibles se pintarán usando el color disponible más cercano"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Vitesse de peinture",
"pixelsPerSecond": "pixels/seconde",
"speedSetting": "Vitesse: {speed} pixels/sec",
"keepAspectRatio": "Conserver le rapport d'aspect",
"settings": "Paramètres",
"botSettings": "Paramètres du Bot",
"close": "Fermer",
@@ -140,5 +141,18 @@
"hideStats": "Masquer les Stats",
"paintOptions": "Options de peinture",
"paintWhitePixels": "Peindre les pixels blancs",
"paintTransparentPixels": "Peindre les pixels transparents"
"paintWhitePixelsDescription": "Si activé, les pixels blancs du modèle seront peints.",
"paintTransparentPixels": "Peindre les pixels transparents",
"paintTransparentPixelsDescription": "Si activé, les pixels transparents du modèle seront peints",
"paintUnavailablePixels": "Peindre les pixels indisponibles",
"paintUnavailablePixelsDescription": "Si activé, les couleurs de modèle non disponibles seront peintes avec la couleur disponible la plus proche",
"colorsUpdated": "✅ Couleurs disponibles augmentées {oldCount} -> {newCount}, {diffCount} nouvelles couleurs trouvées",
"overlayTilesNotLoaded": "❌ Tuiles de carte requises non chargées. Vérifiez la connexion ou réessayez.",
"paintingBatchFailed": "❌ Échec de l'envoi du lot après plusieurs tentatives. Peinture arrêtée.",
"paintingPixelCheckFailed": "❌ Impossible de lire le pixel à ({x}, {y}). Peinture arrêtée.",
"paintingFinalBatchFailed": "⚠️ Lot final de {count} pixels échoué après plusieurs tentatives.",
"paintingStoppedByUser": "⏹️ Peinture arrêtée par l'utilisateur",
"fullChargeIn": "Pleine charge dans",
"batchSize": "Taille du lot"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Kecepatan Melukis",
"pixelsPerSecond": "piksel/detik",
"speedSetting": "Kecepatan: {speed} piksel/detik",
"keepAspectRatio": "Pertahankan rasio aspek",
"settings": "Pengaturan",
"botSettings": "Pengaturan Bot",
"close": "Tutup",
@@ -140,5 +141,18 @@
"hideStats": "Sembunyikan Statistik",
"paintOptions": "Opsi Pewarnaan",
"paintWhitePixels": "Warnai piksel putih",
"paintTransparentPixels": "Warnai piksel transparan"
"paintWhitePixelsDescription": "Jika diaktifkan, piksel putih template akan dicat.",
"paintTransparentPixels": "Warnai piksel transparan",
"paintTransparentPixelsDescription": "Jika diaktifkan, piksel transparan template akan dicat",
"paintUnavailablePixels": "Cat piksel tidak tersedia",
"paintUnavailablePixelsDescription": "Jika diaktifkan, warna template yang tidak tersedia akan dicat dengan warna tersedia terdekat",
"colorsUpdated": "✅ Warna tersedia meningkat {oldCount} -> {newCount}, {diffCount} warna baru ditemukan",
"overlayTilesNotLoaded": "❌ Ubin peta yang diperlukan tidak dimuat. Periksa koneksi atau coba lagi.",
"paintingBatchFailed": "❌ Gagal mengirim batch setelah beberapa percobaan. Melukis dihentikan.",
"paintingPixelCheckFailed": "❌ Gagal membaca piksel di ({x}, {y}). Melukis dihentikan.",
"paintingFinalBatchFailed": "⚠️ Batch akhir {count} piksel gagal setelah beberapa percobaan.",
"paintingStoppedByUser": "⏹️ Melukis dihentikan oleh pengguna",
"fullChargeIn": "Muatan penuh dalam",
"batchSize": "Ukuran batch"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "描画速度",
"pixelsPerSecond": "ピクセル/秒",
"speedSetting": "速度: {speed} ピクセル/秒",
"keepAspectRatio": "アスペクト比を維持",
"settings": "設定",
"botSettings": "ボット設定",
"close": "閉じる",
@@ -140,5 +141,18 @@
"hideStats": "統計を非表示",
"paintOptions": "描画オプション",
"paintWhitePixels": "白いピクセルを描画",
"paintTransparentPixels": "透明ピクセルを描画"
"paintWhitePixelsDescription": "有効にすると、テンプレートの白いピクセルが描画されます。",
"paintTransparentPixels": "透明ピクセルを描画",
"paintTransparentPixelsDescription": "有効にすると、テンプレートの透明ピクセルが描画されます",
"paintUnavailablePixels": "利用不可のピクセルを描画",
"paintUnavailablePixelsDescription": "有効にすると、利用できないテンプレートの色は最も近い利用可能な色で描画されます",
"colorsUpdated": "✅ 利用可能な色が増加 {oldCount} -> {newCount}、{diffCount} 個の新しい色が見つかりました",
"overlayTilesNotLoaded": "❌ 必要なマップタイルがロードされていません。接続を確認するか、再試行してください。",
"paintingBatchFailed": "❌ 複数回の試行後、バッチ送信に失敗しました。描画を停止しました。",
"paintingPixelCheckFailed": "❌ ({x}, {y}) のピクセルを読み取れませんでした。描画を停止しました。",
"paintingFinalBatchFailed": "⚠️ {count} ピクセルの最終バッチが複数回の試行後に失敗しました。",
"paintingStoppedByUser": "⏹️ ユーザーにより停止されました",
"fullChargeIn": "フル充電まで",
"batchSize": "バッチサイズ"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "그리기 속도",
"pixelsPerSecond": "픽셀/초",
"speedSetting": "속도: {speed} 픽셀/초",
"keepAspectRatio": "종횡비 유지",
"settings": "설정",
"botSettings": "봇 설정",
"close": "닫기",
@@ -140,5 +141,18 @@
"hideStats": "통계 숨김",
"paintOptions": "페인트 옵션",
"paintWhitePixels": "흰색 픽셀 칠하기",
"paintTransparentPixels": "투명 픽셀 칠하기"
"paintWhitePixelsDescription": "활성화하면 템플릿 흰색 픽셀이 칠해집니다.",
"paintTransparentPixels": "투명 픽셀 칠하기",
"paintTransparentPixelsDescription": "활성화하면 템플릿 투명 픽셀이 칠해집니다",
"paintUnavailablePixels": "사용 불가능한 픽셀 칠하기",
"paintUnavailablePixelsDescription": "활성화하면 사용할 수 없는 템플릿 색상을 가장 가까운 사용 가능한 색상으로 칠합니다",
"colorsUpdated": "✅ 사용 가능한 색상 증가 {oldCount} -> {newCount}, {diffCount}개의 새 색상 발견",
"overlayTilesNotLoaded": "❌ 필요한 맵 타일이 로드되지 않았습니다. 연결을 확인하거나 다시 시도하세요.",
"paintingBatchFailed": "❌ 여러 번 시도 후 배치 전송 실패. 그리기가 중지되었습니다.",
"paintingPixelCheckFailed": "❌ ({x}, {y})의 픽셀을 읽을 수 없습니다. 그리기가 중지되었습니다.",
"paintingFinalBatchFailed": "⚠️ {count}개 픽셀의 최종 배치가 여러 번 시도 후 실패했습니다.",
"paintingStoppedByUser": "⏹️ 사용자에 의해 중지됨",
"fullChargeIn": "완전 충전까지",
"batchSize": "배치 크기"
}
+14 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Velocidade de Pintura",
"pixelsPerSecond": "pixels/segundo",
"speedSetting": "Velocidade: {speed} pixels/seg",
"keepAspectRatio": "Manter proporção",
"settings": "Configurações",
"botSettings": "Configurações do Bot",
"close": "Fechar",
@@ -139,5 +140,17 @@
"hideStats": "Ocultar Estatísticas",
"paintOptions": "Opções de pintura",
"paintWhitePixels": "Pintar pixels brancos",
"paintTransparentPixels": "Pintar pixels transparentes"
"paintWhitePixelsDescription": "Se ativado, pixels brancos do modelo serão pintados.",
"paintTransparentPixels": "Pintar pixels transparentes",
"paintTransparentPixelsDescription": "Se ativado, pixels transparentes do modelo serão pintados",
"paintUnavailablePixels": "Pintar pixels indisponíveis",
"paintUnavailablePixelsDescription": "Se ativado, cores de modelo indisponíveis serão pintadas usando a cor disponível mais próxima",
"colorsUpdated": "✅ Cores disponíveis aumentadas {oldCount} -> {newCount}, {diffCount} novas cores encontradas",
"overlayTilesNotLoaded": "❌ Blocos de mapa necessários não carregados. Verifique a conexão ou tente novamente.",
"paintingBatchFailed": "❌ Falha ao enviar lote após várias tentativas. Pintura interrompida.",
"paintingPixelCheckFailed": "❌ Falha ao ler pixel em ({x}, {y}). Pintura interrompida.",
"paintingFinalBatchFailed": "⚠️ Lote final de {count} pixels falhou após várias tentativas.",
"paintingStoppedByUser": "⏹️ Pintura interrompida pelo usuário",
"fullChargeIn": "Carga completa em",
"batchSize": "Tamanho do lote"
}
+14 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Скорость рисования",
"pixelsPerSecond": "пикселей/сек",
"speedSetting": "Скорость: {speed} пикс./сек",
"keepAspectRatio": "Сохранять пропорции",
"settings": "Настройки",
"botSettings": "Настройки бота",
"close": "Закрыть",
@@ -139,5 +140,17 @@
"hideStats": "Скрыть статистику",
"paintOptions": "Параметры рисования",
"paintWhitePixels": "Рисовать белые пиксели",
"paintTransparentPixels": "Рисовать прозрачные пиксели"
"paintWhitePixelsDescription": "Если включено, белые пиксели шаблона будут рисоваться.",
"paintTransparentPixels": "Рисовать прозрачные пиксели",
"paintTransparentPixelsDescription": "Если включено, прозрачные пиксели шаблона будут рисоваться",
"paintUnavailablePixels": "Рисовать недоступные пиксели",
"paintUnavailablePixelsDescription": "Если включено, недоступные цвета шаблона будут рисоваться ближайшим доступным цветом",
"colorsUpdated": "✅ Доступные цвета увеличены {oldCount} -> {newCount}, найдено {diffCount} новых цветов",
"overlayTilesNotLoaded": "❌ Необходимые тайлы карты не загружены. Проверьте соединение или попробуйте снова.",
"paintingBatchFailed": "❌ Не удалось отправить пакет после нескольких попыток. Рисование остановлено.",
"paintingPixelCheckFailed": "❌ Не удалось прочитать пиксель в ({x}, {y}). Рисование остановлено.",
"paintingFinalBatchFailed": "⚠️ Финальный пакет из {count} пикселей не удалось отправить после нескольких попыток.",
"paintingStoppedByUser": "⏹️ Рисование остановлено пользователем",
"fullChargeIn": "Полная зарядка через",
"batchSize": "Размер пакета"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Boyama Hızı",
"pixelsPerSecond": "piksel/saniye",
"speedSetting": "Hız: {speed} piksel/sn",
"keepAspectRatio": "En-boy oranını koru",
"settings": "Ayarlar",
"botSettings": "Bot Ayarları",
"close": "Kapat",
@@ -140,5 +141,18 @@
"hideStats": "İstatistikleri Gizle",
"paintOptions": "Boya Seçenekleri",
"paintWhitePixels": "Beyaz pikselleri boya",
"paintTransparentPixels": "Şeffaf pikselleri boya"
"paintWhitePixelsDescription": "Etkinleştirilirse, şablon beyaz pikselleri boyanacaktır.",
"paintTransparentPixels": "Şeffaf pikselleri boya",
"paintTransparentPixelsDescription": "Etkinleştirilirse, şablon şeffaf pikselleri boyanacaktır",
"paintUnavailablePixels": "Kullanılamayan pikselleri boya",
"paintUnavailablePixelsDescription": "Etkinleştirilirse, kullanılamayan şablon renkleri en yakın uygun renkle boyanacaktır",
"colorsUpdated": "✅ Uygun renkler arttı {oldCount} -> {newCount}, {diffCount} yeni renk bulundu",
"overlayTilesNotLoaded": "❌ Gerekli harita karoları yüklenmedi. Bağlantıyı kontrol edin veya yeniden deneyin.",
"paintingBatchFailed": "❌ Toplu gönderim birkaç denemeden sonra başarısız oldu. Boyama durduruldu.",
"paintingPixelCheckFailed": "❌ ({x}, {y}) konumundaki piksel okunamadı. Boyama durduruldu.",
"paintingFinalBatchFailed": "⚠️ {count} pikselden oluşan son topluluk birkaç denemeden sonra başarısız oldu.",
"paintingStoppedByUser": "⏹️ Boyama kullanıcı tarafından durduruldu",
"fullChargeIn": "Tam dolum süresi",
"batchSize": "Topluluk boyutu"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Швидкість малювання",
"pixelsPerSecond": "пікселів/секунда",
"speedSetting": "Швидкість: {speed} пікселів/сек",
"keepAspectRatio": "Зберігати співвідношення сторін",
"settings": "Налаштування",
"botSettings": "Налаштування бота",
"close": "Закрити",
@@ -140,5 +141,18 @@
"hideStats": "Приховати статистику",
"paintOptions": "Параметри малювання",
"paintWhitePixels": "Малювати білі пікселі",
"paintTransparentPixels": "Малювати прозорі пікселі"
"paintWhitePixelsDescription": "Якщо ввімкнено, білі пікселі шаблону будуть намальовані.",
"paintTransparentPixels": "Малювати прозорі пікселі",
"paintTransparentPixelsDescription": "Якщо ввімкнено, прозорі пікселі шаблону будуть намальовані",
"paintUnavailablePixels": "Малювати недоступні пікселі",
"paintUnavailablePixelsDescription": "Якщо ввімкнено, недоступні кольори шаблону будуть намальовані найближчим доступним кольором",
"colorsUpdated": "✅ Доступні кольори збільшено {oldCount} -> {newCount}, знайдено {diffCount} нових кольорів",
"overlayTilesNotLoaded": "❌ Необхідні тайли карти не завантажені. Перевір з'єднання або спробуй знову.",
"paintingBatchFailed": "❌ Не вдалося відправити пакет після кількох спроб. Малювання зупинено.",
"paintingPixelCheckFailed": "❌ Не вдалося прочитати піксель у ({x}, {y}). Малювання зупинено.",
"paintingFinalBatchFailed": "⚠️ Фінальний пакет з {count} пікселів не вдалося відправити після кількох спроб.",
"paintingStoppedByUser": "⏹️ Малювання зупинено користувачем",
"fullChargeIn": "Повний заряд через",
"batchSize": "Розмір пакета"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "Tốc độ vẽ",
"pixelsPerSecond": "pixel/giây",
"speedSetting": "Tốc độ: {speed} pixel/giây",
"keepAspectRatio": "Giữ tỷ lệ khung hình",
"settings": "Cài đặt",
"botSettings": "Cài đặt Bot",
"close": "Đóng",
@@ -140,5 +141,18 @@
"hideStats": "Ẩn thống kê",
"paintOptions": "Tùy chọn vẽ",
"paintWhitePixels": "Vẽ điểm ảnh trắng",
"paintTransparentPixels": "Vẽ điểm ảnh trong suốt"
"paintWhitePixelsDescription": "Nếu được bật, các pixel trắng của mẫu sẽ được vẽ.",
"paintTransparentPixels": "Vẽ điểm ảnh trong suốt",
"paintTransparentPixelsDescription": "Nếu được bật, các pixel trong suốt của mẫu sẽ được vẽ",
"paintUnavailablePixels": "Vẽ pixel không khả dụng",
"paintUnavailablePixelsDescription": "Nếu được bật, màu mẫu không khả dụng sẽ được vẽ bằng màu khả dụng gần nhất",
"colorsUpdated": "✅ Màu khả dụng tăng {oldCount} -> {newCount}, tìm thấy {diffCount} màu mới",
"overlayTilesNotLoaded": "❌ Ô bản đồ cần thiết chưa được tải. Kiểm tra kết nối hoặc thử lại.",
"paintingBatchFailed": "❌ Gửi lô thất bại sau nhiều lần thử. Dừng vẽ.",
"paintingPixelCheckFailed": "❌ Không thể đọc pixel tại ({x}, {y}). Dừng vẽ.",
"paintingFinalBatchFailed": "⚠️ Lô cuối cùng gồm {count} pixel thất bại sau nhiều lần thử.",
"paintingStoppedByUser": "⏹️ Người dùng đã dừng vẽ",
"fullChargeIn": "Sạc đầy trong",
"batchSize": "Kích thước lô"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "绘制速度",
"pixelsPerSecond": "像素/秒",
"speedSetting": "速度: {speed} 像素/秒",
"keepAspectRatio": "保持纵横比",
"settings": "设置",
"botSettings": "机器人设置",
"close": "关闭",
@@ -140,5 +141,18 @@
"hideStats": "隐藏统计",
"paintOptions": "绘图选项",
"paintWhitePixels": "绘制白色像素",
"paintTransparentPixels": "绘制透明像素"
"paintWhitePixelsDescription": "如果启用,将绘制模板白色像素。",
"paintTransparentPixels": "绘制透明像素",
"paintTransparentPixelsDescription": "如果启用,将绘制模板透明像素",
"paintUnavailablePixels": "绘制不可用像素",
"paintUnavailablePixelsDescription": "如果启用,不可用的模板颜色将使用最接近的可用颜色绘制",
"colorsUpdated": "✅ 可用颜色增加 {oldCount} -> {newCount},找到 {diffCount} 个新颜色",
"overlayTilesNotLoaded": "❌ 所需的地图图块未加载。检查连接或重试。",
"paintingBatchFailed": "❌ 多次尝试后批量发送失败。绘制已停止。",
"paintingPixelCheckFailed": "❌ 无法读取 ({x}, {y}) 处的像素。绘制已停止。",
"paintingFinalBatchFailed": "⚠️ {count} 个像素的最终批次在多次尝试后失败。",
"paintingStoppedByUser": "⏹️ 已被用户停止",
"fullChargeIn": "完全充电时间",
"batchSize": "批次大小"
}
+15 -1
View File
@@ -54,6 +54,7 @@
"paintingSpeed": "繪製速度",
"pixelsPerSecond": "像素/秒",
"speedSetting": "速度: {speed} 像素/秒",
"keepAspectRatio": "保持縱橫比",
"settings": "設定",
"botSettings": "機器人設定",
"close": "關閉",
@@ -140,5 +141,18 @@
"hideStats": "隱藏統計",
"paintOptions": "繪圖選項",
"paintWhitePixels": "繪製白色像素",
"paintTransparentPixels": "繪製透明像素"
"paintWhitePixelsDescription": "如果啟用,將繪製範本白色像素。",
"paintTransparentPixels": "繪製透明像素",
"paintTransparentPixelsDescription": "如果啟用,將繪製範本透明像素",
"paintUnavailablePixels": "繪製不可用像素",
"paintUnavailablePixelsDescription": "如果啟用,不可用的範本顏色將使用最接近的可用顏色繪製",
"colorsUpdated": "✅ 可用顏色增加 {oldCount} -> {newCount},找到 {diffCount} 個新顏色",
"overlayTilesNotLoaded": "❌ 所需的地圖圖塊未載入。檢查連線或重試。",
"paintingBatchFailed": "❌ 多次嘗試後批次傳送失敗。繪製已停止。",
"paintingPixelCheckFailed": "❌ 無法讀取 ({x}, {y}) 處的像素。繪製已停止。",
"paintingFinalBatchFailed": "⚠️ {count} 個像素的最終批次在多次嘗試後失敗。",
"paintingStoppedByUser": "⏹️ 已被使用者停止",
"fullChargeIn": "完全充電時間",
"batchSize": "批次大小"
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "WPlace AutoBOT Script Launcher",
"version": "2.0.5",
"version": "2.0.6",
"description": "Launch and manage automation scripts for WPlace",
"icons": {
"16": "icons/icon16.png",
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+56 -43
View File
@@ -22,13 +22,13 @@
--wplace-icon-primary: #4facfe;
--wplace-icon-secondary: #00f2fe;
--wplace-icon-palette: #f093fb;
/* Additional UI colors */
--wplace-danger: #ff6a6a;
--wplace-danger-dark: #ff4757;
--wplace-muted-text: #fffB;
--wplace-highlight-secondary: #203C5D;
/* Slider colors */
--wplace-slider-track-bg: linear-gradient(to right, #4facfe 0%, #00f2fe 100%);
}
@@ -231,7 +231,7 @@
:root .wplace-btn[aria-pressed="true"] i,
.wplace-theme-classic .wplace-btn.active i,
.wplace-theme-classic .wplace-btn[aria-pressed="true"] i {
filter: drop-shadow(0 0 3px #000);
filter: drop-shadow(0 0 3px #000);
}
:root .mask-mode-group .wplace-btn.active,
@@ -355,6 +355,7 @@
/* Auto light/dark support for classic theme */
@media (prefers-color-scheme: light) {
:root .theme-auto,
.wplace-theme-classic .theme-auto {
--wplace-primary: #fff;
@@ -365,6 +366,7 @@
}
@media (prefers-color-scheme: dark) {
:root .theme-auto,
.wplace-theme-classic .theme-auto {
--wplace-primary: #1e1e1e;
@@ -431,27 +433,27 @@
/* Icon colors for classic theme */
:root .wplace-icon-key,
.wplace-theme-classic .wplace-icon-key {
color: #4facfe;
color: #4facfe;
}
:root .wplace-icon-robot,
.wplace-theme-classic .wplace-icon-robot {
color: #4facfe;
color: #4facfe;
}
:root .wplace-icon-speed,
.wplace-theme-classic .wplace-icon-speed {
color: #4facfe;
color: #4facfe;
}
:root .wplace-icon-bell,
.wplace-theme-classic .wplace-icon-bell {
color: #ffd166;
color: #ffd166;
}
:root .wplace-icon-palette,
.wplace-theme-classic .wplace-icon-palette {
color: #f093fb;
color: #f093fb;
}
:root .wplace-icon-globe,
@@ -666,26 +668,26 @@
align-items: center;
justify-content: center;
transition: all 0.2s ease;
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
:root .wplace-input-btn-compact:hover,
.wplace-theme-classic .wplace-input-btn-compact:hover {
transform: translateY(-1px);
box-shadow: 0 4px 8px rgba(0,0,0,0.3);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
background: linear-gradient(135deg, #00f2fe 0%, #4facfe 100%);
}
:root .wplace-input-btn-compact:active,
.wplace-theme-classic .wplace-input-btn-compact:active {
transform: translateY(0);
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
:root .wplace-number-input-compact,
.wplace-theme-classic .wplace-number-input-compact {
background: rgba(255,255,255,0.1);
border: 1px solid rgba(255,255,255,0.2);
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 4px;
color: white;
padding: 4px 8px;
@@ -701,12 +703,12 @@
outline: none;
border-color: #4facfe;
box-shadow: 0 0 0 3px rgba(79, 172, 254, 0.3);
background: rgba(255,255,255,0.15);
background: rgba(255, 255, 255, 0.15);
}
:root .wplace-input-label-compact,
.wplace-theme-classic .wplace-input-label-compact {
color: rgba(255,255,255,0.8);
color: rgba(255, 255, 255, 0.8);
font-size: 11px;
margin-left: 4px;
white-space: nowrap;
@@ -811,13 +813,13 @@
border-radius: 50%;
}
:root .wplace-switch input:checked + .wplace-slider-round,
.wplace-theme-classic .wplace-switch input:checked + .wplace-slider-round {
: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 {
:root .wplace-switch input:checked+.wplace-slider-round:before,
.wplace-theme-classic .wplace-switch input:checked+.wplace-slider-round:before {
transform: translateX(26px);
}
@@ -1388,6 +1390,14 @@
box-shadow: 0 0 8px rgba(0, 0, 0, 0.25) inset, 0 0 6px rgba(79, 172, 254, 0.5);
}
/* Specific tool styling to ensure proper click handling */
:root #fillTool,
.wplace-theme-classic #fillTool {
position: relative;
z-index: 10;
pointer-events: auto;
}
:root .edit-toggle,
.wplace-theme-classic .edit-toggle {
background: linear-gradient(135deg, #333 0%, #555 100%);
@@ -1622,10 +1632,10 @@
justify-content: center;
width: 100%;
height: 100%;
background:
linear-gradient(45deg, #f0f0f0 25%, transparent 25%),
linear-gradient(-45deg, #f0f0f0 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, #f0f0f0 75%),
background:
linear-gradient(45deg, #f0f0f0 25%, transparent 25%),
linear-gradient(-45deg, #f0f0f0 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, #f0f0f0 75%),
linear-gradient(-45deg, transparent 75%, #f0f0f0 75%);
background-size: 20px 20px;
background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
@@ -1637,7 +1647,7 @@
position: relative;
transform-origin: center center;
display: inline-block;
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
border: 2px solid #333;
background: white;
transition: transform 0.1s ease-out;
@@ -1648,12 +1658,12 @@
.wplace-theme-classic .brush-preview {
position: absolute;
pointer-events: none;
border: 2px solid rgba(255,255,255,0.8);
background: rgba(0,0,0,0.1);
border: 2px solid rgba(255, 255, 255, 0.8);
background: rgba(0, 0, 0, 0.1);
z-index: 1000;
transform-origin: top left;
display: none;
box-shadow: 0 0 4px rgba(0,0,0,0.5);
box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
}
:root .minimap-container,
@@ -1667,7 +1677,7 @@
padding: 8px;
z-index: 100;
backdrop-filter: blur(4px);
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
:root .minimap-header,
@@ -1862,6 +1872,7 @@
/* Mobile Responsive Adjustments */
@media (max-width: 1024px) {
:root .edit-container,
.wplace-theme-classic .edit-container {
width: 100vw;
@@ -1872,31 +1883,31 @@
left: 0;
border-radius: 0;
}
:root .edit-nav-controls,
.wplace-theme-classic .edit-nav-controls {
flex-direction: column;
gap: 8px;
}
:root .edit-main-area,
.wplace-theme-classic .edit-main-area {
flex-direction: row;
}
:root .edit-toolbar,
.wplace-theme-classic .edit-toolbar {
width: 60px;
min-width: 60px;
}
:root .minimap-container,
.wplace-theme-classic .minimap-container {
top: 80px;
right: 8px;
transform: scale(0.8);
}
:root .zoom-controls,
.wplace-theme-classic .zoom-controls {
flex-wrap: wrap;
@@ -1905,6 +1916,7 @@
}
@media (max-width: 768px) {
:root .edit-header,
.wplace-theme-classic .edit-header {
padding: 8px 12px;
@@ -1912,28 +1924,28 @@
gap: 8px;
min-height: 60px;
}
:root .edit-main-area,
.wplace-theme-classic .edit-main-area {
flex-direction: row;
}
:root .edit-toolbar,
.wplace-theme-classic .edit-toolbar {
width: 50px;
min-width: 50px;
}
:root .zoom-controls,
.wplace-theme-classic .zoom-controls {
scale: 0.9;
}
:root .minimap-container,
.wplace-theme-classic .minimap-container {
display: none;
}
:root .edit-color-grid .color-btn,
.wplace-theme-classic .edit-color-grid .color-btn {
width: 16px;
@@ -1943,19 +1955,20 @@
/* Touch Device Optimizations */
@media (hover: none) and (pointer: coarse) {
:root .zoom-btn,
.wplace-theme-classic .zoom-btn {
min-width: 44px;
min-height: 44px;
}
:root .edit-tool,
.wplace-theme-classic .edit-tool {
min-width: 44px;
min-height: 44px;
padding: 12px;
}
:root .edit-color-btn,
.wplace-theme-classic .edit-color-btn {
width: 32px;
@@ -1965,13 +1978,14 @@
/* High DPI Display Support */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
:root .edit-canvas,
.wplace-theme-classic .edit-canvas {
image-rendering: pixelated;
image-rendering: -moz-crisp-edges;
image-rendering: crisp-edges;
}
:root .minimap-canvas,
.wplace-theme-classic .minimap-canvas {
image-rendering: pixelated;
@@ -1999,5 +2013,4 @@
:root .zoom-btn:active,
.wplace-theme-classic .zoom-btn:active {
transform: translateY(1px) scale(0.95);
}
}