Files
WPlace-AutoBOT/Extension/auto-image-styles.css
T
MiraclePatrickLumowa 59544427f5 fixed a lot of bs
2025-10-01 17:23:49 +08:00

2239 lines
46 KiB
CSS

/* WPlace Auto-Image Bot - Unified CSS Styles (decoupled from JS)
Why: bring external CSS in-sync with the UI that Auto-Image.js renders,
fix layout (positions, widths, z-index), and ensure class names match JS
(e.g., .wplace-dragging) so buttons and panels behave correctly. */
/* ========================= */
/* Theme tokens (CSS vars) */
/* ========================= */
/* NOTE: Themes are now loaded dynamically from extension local resources
instead of using @import from CDN. The extension will inject theme CSS
directly when needed using window.applyTheme() function.
Previous CDN imports (now removed):
- https://wplace-autobot.github.io/WPlace-AutoBOT/main/themes/classic.css
- https://wplace-autobot.github.io/WPlace-AutoBOT/main/themes/classic-light.css
- https://wplace-autobot.github.io/WPlace-AutoBOT/main/themes/acrylic.css
- https://wplace-autobot.github.io/WPlace-AutoBOT/main/themes/neon.css
- https://wplace-autobot.github.io/WPlace-AutoBOT/main/themes/neon-cyan.css
- https://wplace-autobot.github.io/WPlace-AutoBOT/main/themes/neon-light.css
These are now loaded from local extension files for better performance
and offline functionality. */
/* Default :root CSS variables for 100% classic theme compliance */
/* These ensure the bot works perfectly even if theme files fail to load */
:root {
/* Classic theme colors - exact upstream main values */
--wplace-primary: linear-gradient(135deg, #000 0%, #1a1a1a 100%);
--wplace-secondary: linear-gradient(135deg, #111 0%, #2a2a2a 100%);
--wplace-accent: #222;
--wplace-text: #fff;
--wplace-highlight: #775ce3;
--wplace-highlight-secondary: #d3a4ff;
--wplace-success: #0f0;
--wplace-error: #f00;
--wplace-warning: #fa0;
/* UI properties */
--wplace-radius: 12px;
--wplace-btn-radius: 16px;
--wplace-border-style: solid;
--wplace-border-width: 1px;
--wplace-border-color: #222;
--wplace-shadow: 0 8px 32px rgb(0 0 0 / 60%), 0 0 0 1px rgb(255 255 255 / 10%);
--wplace-backdrop: blur(10px);
--wplace-font: 'Segoe UI', roboto, sans-serif;
/* Z-index layers */
--wplace-z-overlay: 10000;
--wplace-z-alert: 10002;
--wplace-z-settings: 10002;
/* Feature toggles */
--wplace-scanline: 0;
--wplace-pixel-blink: 0;
/* Icon colors */
--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;
/* Text variants */
--wplace-text-secondary: rgb(255 255 255 / 90%);
--wplace-text-muted: rgb(255 255 255 / 70%);
--wplace-text-dim: rgb(255 255 255 / 60%);
--wplace-text-faded: rgb(255 255 255 / 80%);
/* Background variants */
--wplace-bg-input: rgb(255 255 255 / 15%);
--wplace-bg-subtle: rgb(255 255 255 / 10%);
--wplace-bg-faint: rgb(255 255 255 / 8%);
--wplace-bg-ghost: rgb(255 255 255 / 6%);
--wplace-bg-whisper: rgb(255 255 255 / 5%);
/* Border variants */
--wplace-border-subtle: rgb(255 255 255 / 20%);
--wplace-border-faint: rgb(255 255 255 / 15%);
--wplace-border-ghost: rgb(255 255 255 / 10%);
--wplace-border-ultra-faint: rgb(255 255 255 / 5%);
/* Shadow variants */
--wplace-shadow-drag: 0 12px 40px rgb(0 0 0 / 80%), 0 0 0 2px rgb(255 255 255 / 20%);
--wplace-shadow-notification: 0 4px 12px rgb(0 0 0 / 30%);
--wplace-shadow-slider-thumb: 0 3px 6px rgb(0 0 0 / 30%), 0 0 0 2px var(--wplace-icon-primary);
--wplace-shadow-slider-hover: 0 4px 8px rgb(0 0 0 / 40%), 0 0 0 3px var(--wplace-icon-primary);
/* Animation colors */
--wplace-pulse-start: rgb(0 255 0 / 70%);
--wplace-pulse-mid: rgb(0 255 0 / 0%);
--wplace-pulse-end: rgb(0 255 0 / 0%);
/* Slider colors - defaults for classic compatibility */
--wplace-slider-thumb-bg: white;
--wplace-slider-track-bg: linear-gradient(to right,
var(--wplace-icon-primary) 0%,
var(--wplace-icon-secondary) 100%);
}
/* Theme classes are now defined in separate files */
/* Classic theme: ./themes/classic.css */
/* Neon theme: ./themes/neon.css */
/* ========================= */
/* Core animations (shared) */
/* ========================= */
@keyframes neon-glow {
0%,
100% {
text-shadow:
0 0 5px currentcolor,
0 0 10px currentcolor,
0 0 15px currentcolor;
}
50% {
text-shadow:
0 0 2px currentcolor,
0 0 5px currentcolor,
0 0 8px currentcolor;
}
}
@keyframes pixel-blink {
0%,
50% {
opacity: 1;
}
51%,
100% {
opacity: 0.7;
}
}
@keyframes scanline {
0% {
transform: translateY(-100%);
}
100% {
transform: translateY(400px);
}
}
@keyframes pulse {
0% {
box-shadow: 0 0 0 0 var(--wplace-pulse-start);
}
70% {
box-shadow: 0 0 0 10px var(--wplace-pulse-mid);
}
100% {
box-shadow: 0 0 0 0 var(--wplace-pulse-end);
}
}
@keyframes slide-in {
from {
transform: translateY(-10px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
@keyframes slide-down {
from {
transform: translateX(-50%) translateY(-20px);
opacity: 0;
}
to {
transform: translateX(-50%) translateY(0);
opacity: 1;
}
}
@keyframes shimmer {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
/* ========================= */
/* Main containers (fixed) */
/* Align with JS structure */
/* ========================= */
#wplace-image-bot-container {
position: fixed;
top: 20px;
left: 20px;
width: 340px;
max-height: calc(100vh - 40px);
padding: 0;
z-index: 9998;
animation: slide-in 0.4s ease-out;
overflow: hidden;
transition: all 0.3s ease;
user-select: none;
/* Default classic theme styling for 100% compliance */
background: var(--wplace-primary);
color: var(--wplace-text);
border-radius: var(--wplace-radius);
box-shadow: var(--wplace-shadow);
font-family: var(--wplace-font);
backdrop-filter: var(--wplace-backdrop);
border: var(--wplace-border-width) var(--wplace-border-style) var(--wplace-border-color);
}
#wplace-image-bot-container.wplace-dragging {
transition: none;
box-shadow: var(--wplace-shadow-drag);
transform: scale(1.02);
z-index: 9999;
}
#wplace-image-bot-container.wplace-compact {
width: 300px;
}
#wplace-image-bot-container.wplace-minimized {
width: 260px;
height: auto;
overflow: hidden;
}
/* Stats container sits to the right of main (340 + 30 = 370) */
#wplace-stats-container {
position: fixed;
top: 20px;
left: 370px;
width: 350px;
max-height: calc(100vh - 40px);
padding: 0;
z-index: 9997;
animation: slide-in 0.4s ease-out;
overflow-y: auto;
transition: all 0.3s ease;
user-select: none;
display: none;
/* Default classic theme styling for 100% compliance */
background: var(--wplace-primary);
color: var(--wplace-text);
border-radius: var(--wplace-radius);
box-shadow: var(--wplace-shadow);
font-family: var(--wplace-font);
backdrop-filter: var(--wplace-backdrop);
border: var(--wplace-border-width) var(--wplace-border-style) var(--wplace-border-color);
}
#wplace-stats-container.wplace-dragging {
transition: none;
}
/* Back-compat for legacy class (some earlier CSS used this) */
.wplace-drag-active {
transition: none !important;
box-shadow: var(--wplace-shadow-drag) !important;
transform: scale(1.02) !important;
z-index: 9999 !important;
}
/* ========================= */
/* Header and content blocks */
/* ========================= */
.wplace-header {
padding: 8px 12px;
font-size: 13px;
font-weight: 700;
display: flex;
justify-content: space-between;
align-items: center;
cursor: move;
user-select: none;
border-bottom: 1px solid var(--wplace-border-ghost);
transition: background 0.2s ease;
position: relative;
z-index: 2;
/* Default styling for 100% classic compliance */
background: var(--wplace-secondary);
color: var(--wplace-highlight);
text-shadow: 0 1px 2px rgb(0 0 0 / 50%);
}
.wplace-header-title {
display: flex;
align-items: center;
gap: 6px;
}
.wplace-header-controls {
display: flex;
gap: 6px;
}
.wplace-header-btn {
border: none;
cursor: pointer;
width: 18px;
height: 18px;
padding: 0;
font-size: 10px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
/* Default styling for 100% classic compliance */
background: rgb(255 255 255 / 10%);
color: var(--wplace-text);
border-radius: 4px;
font-family: var(--wplace-font);
}
.wplace-header-btn:hover {
transform: scale(1.1);
/* Default styling for 100% classic compliance */
background: var(--wplace-accent);
color: var(--wplace-text);
}
.wplace-content {
display: block;
position: relative;
z-index: 2;
padding: 12px;
}
.wplace-content.wplace-hidden {
display: none;
}
/* Sections */
.wplace-status-section {
margin-bottom: 6px;
padding: 8px;
/* Theme-specific styling applied via theme files */
}
.wplace-section {
margin-bottom: 6px;
padding: 8px;
/* Theme-specific styling applied via theme files */
}
.wplace-section-title {
font-size: 11px;
font-weight: 600;
margin-bottom: 8px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
gap: 6px;
text-transform: uppercase;
letter-spacing: 1px;
/* Theme-specific styling applied via theme files */
}
.wplace-section-title i.arrow {
transition: transform 0.3s ease;
}
.wplace-section.collapsed .wplace-section-title i.arrow {
transform: rotate(-90deg);
}
/* ========================= */
/* Controls and buttons */
/* ========================= */
.wplace-controls {
display: flex;
flex-direction: column;
gap: 8px;
}
.wplace-cooldown-control {
margin-top: 8px;
}
.wplace-section.collapsed .wplace-controls,
.wplace-section.collapsed .wplace-cooldown-control {
max-height: 0;
opacity: 0;
pointer-events: none;
}
.wplace-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.wplace-row.single {
grid-template-columns: 1fr;
}
.wplace-btn {
padding: 8px 12px;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
font-size: 11px;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
font-weight: 500;
/* Theme-specific styling applied via theme files */
}
.wplace-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none !important;
/* Theme-specific styling applied via theme files */
}
.wplace-btn::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
transition: left 0.5s ease;
/* Theme-specific styling applied via theme files */
}
.wplace-btn:disabled::before {
display: none;
}
.wplace-btn:hover:not(:disabled)::before {
left: 100%;
}
.wplace-btn:hover:not(:disabled) {
transform: translateY(-1px);
/* Theme-specific styling applied via theme files */
}
.wplace-btn:active:not(:disabled) {
transform: translateY(0);
}
/* Button variants moved to theme files */
/* ========================= */
/* Stats and progress */
/* ========================= */
.wplace-stats {
margin-bottom: 8px;
padding: 8px;
/* Theme-specific styling applied via theme files */
}
.wplace-stat-item {
display: flex;
justify-content: space-between;
padding: 4px 0;
font-size: 11px;
border-bottom: 1px solid var(--wplace-border-ultra-faint);
}
.wplace-stat-item:last-child {
border-bottom: none;
}
.wplace-stat-label {
display: flex;
align-items: center;
gap: 6px;
opacity: 0.9;
font-size: 10px;
}
.wplace-stat-value {
font-weight: 600;
/* Theme-specific styling applied via theme files */
}
.wplace-colors-section {
margin-top: 10px;
padding-top: 8px;
border-top: 1px solid var(--wplace-border-ultra-faint);
}
.wplace-stat-colors-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(16px, 1fr));
gap: 4px;
margin-top: 8px;
padding: 4px;
max-height: 80px;
overflow-y: auto;
/* Theme-specific styling applied via theme files */
}
.wplace-colors-placeholder {
text-align: center;
color: #888;
padding: 20px;
font-style: italic;
}
.wplace-cooldown-value {
font-weight: bold;
min-width: 20px;
text-align: center;
display: inline-block;
}
.wplace-stat-color-swatch {
width: 16px;
height: 16px;
/* Theme-specific styling applied via theme files */
}
/* Progress */
.wplace-progress {
width: 100%;
margin: 8px 0;
overflow: hidden;
height: 6px;
position: relative;
/* Theme-specific styling applied via theme files */
}
.wplace-progress-bar {
height: 6px;
transition: width 0.5s ease;
position: relative;
/* Theme-specific styling applied via theme files */
}
.wplace-progress-bar::after {
content: '';
position: absolute;
inset: 0;
animation: shimmer 2s infinite;
/* Theme-specific styling applied via theme files */
}
/* ========================= */
/* Status blocks */
/* ========================= */
.wplace-status {
text-align: center;
position: relative;
overflow: hidden;
padding: 6px;
border: 1px solid;
font-size: 11px;
/* Theme-specific styling applied via theme files */
}
/* Status styling moved to theme files */
/* ========================= */
/* Resize dialog */
/* ========================= */
.resize-container {
display: none;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 20px;
z-index: 10000;
width: 90%;
max-width: 700px;
max-height: 90%;
overflow: auto;
/* Theme-specific styling applied via theme files */
}
.resize-preview-wrapper {
display: flex;
justify-content: center;
align-items: center;
margin: 15px 0;
height: 300px;
overflow: hidden;
/* Theme-specific styling applied via theme files */
}
.resize-canvas-stack {
position: relative;
transform-origin: center center;
display: inline-block;
}
.resize-base-canvas,
.resize-mask-canvas {
position: absolute;
left: 0;
top: 0;
image-rendering: -moz-crisp-edges;
image-rendering: pixelated;
}
.resize-mask-canvas {
pointer-events: auto;
}
.resize-tools {
display: flex;
gap: 8px;
align-items: center;
margin-top: 8px;
font-size: 12px;
}
/* Missing button hover styles */
.resize-tools button {
padding: 6px 10px;
border-radius: 6px;
border: 1px solid var(--wplace-border-subtle);
background: var(--wplace-bg-ghost);
color: var(--wplace-text);
cursor: pointer;
/* Theme-specific styling applied via theme files */
}
/* Button active states moved to theme files */
.resize-controls {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
align-items: center;
}
.resize-slider {
width: 100%;
height: 4px;
border: none;
outline: none;
-webkit-appearance: none;
/* Theme-specific styling applied via theme files */
}
.resize-zoom-controls {
grid-column: 1 / -1;
display: flex;
align-items: center;
gap: 8px;
margin-top: 15px;
flex-wrap: wrap;
}
.resize-buttons {
display: flex;
gap: 10px;
justify-content: center;
margin-top: 20px;
}
/* ========================= */
/* Color grid */
/* ========================= */
.wplace-color-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
gap: 10px;
padding-top: 8px;
max-height: 300px;
overflow-y: auto;
}
.wplace-color-item {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
}
.wplace-color-item-name {
font-size: 9px;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
/* Theme-specific styling applied via theme files */
}
.wplace-color-swatch {
width: 22px;
height: 22px;
cursor: pointer;
transition:
transform 0.1s ease,
box-shadow 0.2s ease;
position: relative;
margin: 0 auto;
/* Theme-specific styling applied via theme files */
}
.wplace-color-swatch.unavailable {
border-style: dashed;
cursor: not-allowed;
/* Theme-specific styling applied via theme files */
}
.wplace-color-swatch:hover {
transform: scale(1.1);
z-index: 1;
}
.wplace-color-swatch:not(.active) {
opacity: 0.3;
/* Theme-specific styling applied via theme files */
}
.wplace-color-swatch.unavailable:not(.active) {
opacity: 0.2;
/* Theme-specific styling applied via theme files */
}
.wplace-color-swatch.active::after {
content: '✔';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: var(--wplace-text);
font-size: 12px;
font-weight: bold;
/* Theme-specific styling applied via theme files */
}
.wplace-color-divider {
border: none;
height: 1px;
margin: 8px 0;
/* Theme-specific styling applied via theme files */
}
/* ========================= */
/* Cooldown controls */
/* ========================= */
.wplace-cooldown-control label {
font-size: 11px;
margin-bottom: 4px;
display: block;
}
.wplace-slider-container {
display: flex;
align-items: center;
gap: 8px;
}
.wplace-slider {
flex: 1;
-webkit-appearance: none;
appearance: none;
height: 4px;
outline: none;
/* Theme-specific styling applied via theme files */
}
.wplace-slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 14px;
height: 14px;
cursor: pointer;
/* Theme-specific styling applied via theme files */
}
/* ========================= */
/* Settings container (base) */
/* ========================= */
#wplace-settings-container {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 0;
z-index: 10002;
display: none;
min-width: 420px;
max-width: 480px;
overflow: hidden;
/* Default classic theme styling for 100% compliance */
background: var(--wplace-primary);
color: var(--wplace-text);
border-radius: var(--wplace-radius);
box-shadow: var(--wplace-shadow);
font-family: var(--wplace-font);
backdrop-filter: var(--wplace-backdrop);
border: var(--wplace-border-width) var(--wplace-border-style) var(--wplace-border-color);
}
#wplace-settings-container.show {
display: block;
animation: settings-slide-in 0.4s ease-out;
}
@keyframes settings-slide-in {
from {
opacity: 0;
transform: translate(-50%, -50%) scale(0.9);
}
to {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
@keyframes settings-fade-out {
from {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
to {
opacity: 0;
transform: translate(-50%, -50%) scale(0.9);
}
}
.wplace-settings {
padding: 16px;
max-height: 400px;
overflow-y: auto;
}
.wplace-setting-section {
margin-bottom: 20px;
padding: 12px;
}
/* ========================= */
/* Form controls */
/* ========================= */
.wplace-select {
width: 100%;
padding: 8px 12px;
font-size: 14px;
margin-bottom: 10px;
}
.wplace-select:focus {
outline: none;
}
.wplace-description {
font-size: 12px;
opacity: 0.8;
line-height: 1.4;
}
/* Speed controls */
.wplace-speed-control {
margin-top: 12px;
padding: 12px;
}
.wplace-speed-label {
display: flex;
align-items: center;
margin-bottom: 8px;
font-size: 13px;
font-weight: 600;
}
.wplace-speed-label i {
margin-right: 6px;
}
.wplace-speed-slider {
flex: 1;
height: 8px;
outline: none;
-webkit-appearance: none;
appearance: none;
cursor: pointer;
background: var(--wplace-slider-track-bg);
border-radius: 4px;
}
.wplace-speed-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 18px;
height: 18px;
cursor: pointer;
/* Theme-specific styling applied via theme files */
}
.wplace-speed-slider::-moz-range-thumb {
width: 18px;
height: 18px;
cursor: pointer;
/* Theme-specific styling applied via theme files */
}
.wplace-speed-display {
display: flex;
align-items: center;
gap: 4px;
min-width: 90px;
justify-content: flex-end;
}
/* ========================= */
/* Turnstile overlay */
/* ========================= */
/* Hidden invisible widget host (token generator) */
.wplace-turnstile-hidden {
position: fixed !important;
left: -99999px !important;
top: -99999px !important;
width: 1px !important;
height: 1px !important;
pointer-events: none !important;
opacity: 0 !important;
visibility: hidden !important;
z-index: -99999 !important;
overflow: hidden !important;
}
/* Visible overlay (interactive fallback) */
.wplace-turnstile-overlay {
position: fixed !important;
bottom: 20px !important;
right: 20px !important;
z-index: 99999 !important;
padding: 20px !important;
min-width: 300px !important;
max-width: 400px !important;
/* Theme-specific styling applied via theme files */
}
.wplace-turnstile-title {
font:
600 12px/1.3 'Segoe UI',
sans-serif !important;
margin-bottom: 8px !important;
opacity: 0.9 !important;
/* Theme-specific styling applied via theme files */
}
.wplace-turnstile-host {
width: 100% !important;
min-height: 70px !important;
}
.wplace-turnstile-hide-btn {
position: absolute !important;
top: 6px !important;
right: 6px !important;
font-size: 11px !important;
background: transparent !important;
padding: 2px 6px !important;
cursor: pointer !important;
transition: background 0.2s ease !important;
/* Theme-specific styling applied via theme files */
}
.wplace-turnstile-hide-btn:hover {
/* Theme-specific styling applied via theme files */
}
/* ========================= */
/* Alert system (used by JS) */
/* ========================= */
.wplace-alert-base {
position: fixed;
top: 20px;
left: 50%;
transform: translateX(-50%);
padding: 12px 20px;
color: var(--wplace-text);
font-weight: 600;
z-index: 10002;
max-width: 400px;
text-align: center;
animation: slide-down 0.3s ease-out;
box-shadow: var(--wplace-shadow-notification);
/* Theme-specific styling applied via theme files */
}
/* Alert styling moved to theme files */
/* ========================= */
/* Modal overlay helpers */
/* ========================= */
.wplace-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100002;
display: none;
/* Theme-specific styling applied via theme files */
}
.wplace-overlay.show {
display: block;
}
/* Overlay visibility helpers */
.wplace-overlay-hidden {
display: none !important;
}
.wplace-overlay-visible {
display: block !important;
}
/* ========================= */
/* Responsive tweaks */
/* ========================= */
@media (width <=768px) {
#wplace-image-bot-container {
left: 10px;
width: calc(100vw - 20px);
max-height: calc(100vh - 20px);
}
#wplace-stats-container {
display: none !important;
/* hide secondary panel on small screens */
}
.wplace-alert-base {
max-width: 90vw;
margin: 0 5vw;
}
.wplace-turnstile-overlay {
bottom: 10px !important;
right: 10px !important;
left: 10px !important;
min-width: auto !important;
}
}
/* Auto light/dark support moved to theme files */
/* ===================================== */
/* Settings container variants (optional) */
/* ===================================== */
.wplace-settings-container-base {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 100001;
display: none;
min-width: 400px;
max-width: 500px;
max-height: 100vh;
overflow-y: auto;
animation: slide-in 0.3s ease-out;
border: 1px solid var(--wplace-border-ghost);
padding: 0;
/* Theme-specific styling applied via theme files */
}
.wplace-settings-container-base.show {
display: block;
}
/* ===================================== */
/* Utility styles */
/* ===================================== */
.wplace-paint-effect {
animation: pulse 0.5s ease-out;
}
.wplace-settings-error {
/* Theme-specific styling applied via theme files */
}
.wplace-stats-container.hidden {
display: none;
}
/* Theme-specific effects are now in separate theme files */
/* ===================================== */
/* Settings Dialog Styles */
/* ===================================== */
/* Settings content container */
.wplace-settings-content {
padding: 25px 25px 0;
max-height: 67vh;
overflow-y: auto;
}
/* Settings section containers */
.wplace-settings-section {
margin-bottom: 25px;
}
/* Section labels */
.wplace-settings-section-label {
margin-bottom: 12px;
color: var(--wplace-text);
font-weight: 500;
font-size: 16px;
display: flex;
align-items: center;
gap: 8px;
}
/* Icon colors */
.wplace-icon-key {
font-size: 16px;
}
.wplace-icon-robot {
font-size: 16px;
}
.wplace-icon-speed {
font-size: 16px;
}
.wplace-icon-bell {
font-size: 16px;
}
.wplace-icon-palette {
font-size: 16px;
}
.wplace-icon-globe {
font-size: 16px;
}
.wplace-icon-paint {
font-size: 16px;
}
/* Section wrapper styling */
.wplace-settings-section-wrapper {
padding: 18px;
/* Theme-specific styling applied via theme files */
}
/* Select dropdowns */
.wplace-settings-select {
width: 100%;
padding: 12px 16px;
font-size: 14px;
outline: none;
cursor: pointer;
transition: all 0.3s ease;
font-family: inherit;
/* Theme-specific styling applied via theme files */
}
.wplace-settings-option {
padding: 10px;
/* Theme-specific styling applied via theme files */
}
/* Settings description text */
.wplace-settings-description {
font-size: 12px;
color: var(--wplace-text-muted);
margin: 8px 0 0;
}
/* Batch Controls */
.wplace-batch-controls {
padding: 18px;
margin-bottom: 15px;
/* Theme-specific styling applied via theme files */
}
.wplace-random-batch-controls {
display: none;
}
/* Speed Slider Container */
.wplace-speed-slider-container {
display: flex;
align-items: center;
gap: 15px;
margin-bottom: 10px;
}
.wplace-speed-value {
min-width: 100px;
text-align: center;
padding: 8px 12px;
font-weight: bold;
font-size: 13px;
/* Theme-specific styling applied via theme files */
}
.wplace-speed-labels {
display: flex;
justify-content: space-between;
color: var(--wplace-text-muted);
font-size: 11px;
margin-top: 8px;
}
/* Random Batch Controls */
.wplace-random-batch-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
}
.wplace-random-batch-label {
display: block;
color: var(--wplace-text-faded);
font-size: 12px;
margin-bottom: 8px;
}
.wplace-icon-min {
color: var(--wplace-icon-primary);
margin-right: 4px;
}
.wplace-icon-max {
color: var(--wplace-icon-secondary);
margin-right: 4px;
}
.wplace-settings-number-input {
width: 100%;
padding: 10px 12px;
background: var(--wplace-bg-input);
color: var(--wplace-text);
border: 1px solid var(--wplace-border-subtle);
border-radius: 8px;
font-size: 13px;
outline: none;
}
.wplace-random-batch-description {
font-size: 11px;
color: var(--wplace-text-dim);
margin: 8px 0 0;
text-align: center;
}
/* Speed Control Toggle */
.wplace-speed-control-toggle {
display: flex;
align-items: center;
gap: 8px;
color: var(--wplace-text);
}
.wplace-speed-checkbox {
cursor: pointer;
}
/* Overlay Settings */
.wplace-overlay-opacity-control {
margin-bottom: 15px;
}
.wplace-overlay-opacity-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.wplace-overlay-opacity-label {
font-weight: 500;
font-size: 13px;
}
.wplace-overlay-opacity-value {
min-width: 40px;
text-align: center;
background: var(--wplace-accent);
color: var(--wplace-text);
padding: 4px 8px;
border-radius: 6px;
font-size: 12px;
border: var(--wplace-border-width) var(--wplace-border-style) var(--wplace-border-color);
}
.wplace-overlay-opacity-slider {
width: 100%;
-webkit-appearance: none;
height: 8px;
outline: none;
cursor: pointer;
}
.wplace-settings-toggle {
display: flex;
align-items: center;
justify-content: space-between;
cursor: pointer;
}
.wplace-settings-toggle-title {
font-weight: 500;
}
.wplace-settings-toggle-description {
font-size: 12px;
margin: 4px 0 0;
color: var(--wplace-muted-text);
}
.wplace-settings-checkbox {
cursor: pointer;
width: 20px;
height: 20px;
flex-shrink: 0;
accent-color: var(--wplace-highlight);
}
/* Notifications */
.wplace-notifications-wrapper {
display: flex;
flex-direction: column;
gap: 10px;
}
.wplace-notification-toggle {
display: flex;
align-items: center;
justify-content: space-between;
}
.wplace-notification-checkbox {
width: 18px;
height: 18px;
cursor: pointer;
}
.wplace-notification-interval {
display: flex;
align-items: center;
gap: 10px;
}
.wplace-notification-interval-input {
width: 70px;
padding: 6px 8px;
border-radius: 6px;
border: 1px solid var(--wplace-border-subtle);
background: var(--wplace-bg-faint);
color: var(--wplace-text);
}
.wplace-notification-buttons {
display: flex;
gap: 10px;
}
.wplace-notification-perm-btn,
.wplace-notification-test-btn {
flex: 1;
}
/* Settings Footer */
.wplace-settings-footer {
border-top: 1px solid var(--wplace-border-ghost);
padding: 20px;
position: sticky;
bottom: 0;
background: var(--wplace-secondary);
}
/* Settings select option styling moved to theme files */
/* Settings description styling moved to theme files */
.wplace-settings-apply-btn {
width: 100%;
border: none;
padding: 10px 16px;
cursor: pointer;
font-weight: 500;
transition: all 0.3s ease;
display: flex;
align-items: center;
gap: 8px;
justify-content: center;
/* Theme-specific styling applied via theme files */
}
/* ===================================== */
/* Resize Dialog Styles */
/* ===================================== */
/* Resize dialog title */
.resize-dialog-title {
margin-top: 0;
color: var(--wplace-text);
}
/* Resize control labels */
.resize-control-label {
display: block;
margin-bottom: 8px;
font-size: 14px;
}
.resize-checkbox-label {
display: flex;
align-items: center;
margin-bottom: 8px;
font-size: 14px;
gap: 8px;
}
/* Zoom controls */
.resize-zoom-btn {
padding: 4px 8px;
}
.resize-zoom-slider {
max-width: 220px;
}
.resize-zoom-value {
margin-left: 6px;
min-width: 48px;
text-align: right;
opacity: 0.85;
font-size: 12px;
}
.resize-camera-help {
font-size: 11px;
opacity: 0.75;
margin-left: auto;
}
/* Canvas positioning */
.resize-pan-stage {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
}
.resize-canvas-positioned {
position: absolute;
left: 0;
top: 0;
transform-origin: top left;
}
/* Resize tools */
.resize-tools-container {
display: flex;
gap: 10px;
flex-wrap: wrap;
align-items: center;
}
.resize-brush-controls {
display: flex;
flex-direction: column;
gap: 8px;
}
.resize-brush-control {
display: flex;
align-items: center;
gap: 6px;
justify-content: space-between;
}
.resize-tool-label {
font-size: 12px;
opacity: 0.85;
}
.resize-tool-input-group {
display: flex;
align-items: center;
gap: 6px;
}
.resize-tool-slider {
width: 120px;
}
.resize-tool-value {
font-size: 12px;
opacity: 0.85;
min-width: 18px;
text-align: center;
}
.resize-mode-controls {
display: flex;
align-items: center;
gap: 6px;
}
.resize-mode-group {
display: flex;
gap: 6px;
}
.resize-mode-btn,
.resize-clear-btn,
.resize-invert-btn {
padding: 4px 8px;
font-size: 12px;
}
.resize-shortcut-help {
opacity: 0.8;
font-size: 12px;
}
/* Color palette section */
.resize-color-palette-section {
margin-top: 15px;
}
.resize-color-toggle-label {
display: flex;
align-items: center;
gap: 8px;
font-size: 12px;
}
.resize-color-checkbox {
cursor: pointer;
}
/* Advanced color section */
.resize-advanced-color-section {
margin-top: 15px;
}
.resize-advanced-controls {
display: flex;
flex-direction: column;
gap: 10px;
}
.resize-advanced-label {
display: flex;
flex-direction: column;
gap: 4px;
font-size: 12px;
}
.resize-advanced-label-text {
font-weight: 600;
}
.resize-advanced-select {
padding: 6px 8px;
border-radius: 6px;
border: 1px solid var(--wplace-border-faint);
background: var(--wplace-bg-whisper);
color: var(--wplace-text);
}
.resize-advanced-toggle {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 12px;
}
.resize-advanced-toggle-content {
flex: 1;
}
.resize-advanced-description {
margin-top: 2px;
opacity: 0.65;
}
.resize-advanced-checkbox {
width: 18px;
height: 18px;
cursor: pointer;
}
.resize-chroma-weight-control {
display: flex;
flex-direction: column;
gap: 4px;
}
.resize-chroma-weight-header {
display: flex;
justify-content: space-between;
font-size: 11px;
margin-bottom: 4px;
}
.resize-chroma-weight-value {
background: var(--wplace-bg-faint);
padding: 2px 6px;
border-radius: 4px;
}
.resize-chroma-weight-slider {
width: 100%;
}
.resize-threshold-controls {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.resize-threshold-label {
display: flex;
flex-direction: column;
gap: 4px;
font-size: 12px;
}
.resize-threshold-input {
padding: 6px 8px;
border-radius: 6px;
border: 1px solid var(--wplace-border-faint);
background: var(--wplace-bg-whisper);
color: var(--wplace-text);
}
.resize-reset-advanced-btn {
background: linear-gradient(135deg, var(--wplace-danger), var(--wplace-danger-dark));
font-size: 11px;
}
/* ===================================== */
/* Additional styles for exact upstream match */
/* ===================================== */
/* Overlay styles exact match */
.resize-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9999;
display: none;
/* Theme-specific styling applied via theme files */
}
/* Settings animations - removed duplicate, handled above */
/* Settings Header Styling */
.wplace-settings-header {
background: var(--wplace-accent);
padding: 20px;
border-bottom: 1px solid var(--wplace-border-color);
cursor: move;
}
.wplace-settings-title-wrapper {
display: flex;
justify-content: space-between;
align-items: center;
}
.wplace-settings-title {
margin: 0;
color: var(--wplace-text);
font-size: 20px;
font-weight: 300;
display: flex;
align-items: center;
gap: 10px;
}
.wplace-settings-icon {
font-size: 18px;
color: var(--wplace-highlight);
animation: spin 2s linear infinite;
}
.wplace-settings-close-btn {
background: rgb(34 34 34 / 40%);
color: var(--wplace-text);
border: 1px solid var(--wplace-border-color);
border-radius: 50%;
width: 32px;
height: 32px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
font-size: 14px;
font-weight: 300;
}
.wplace-settings-close-btn:hover {
background: rgb(255 0 0 / 40%);
transform: scale(1.1);
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
/* Font styling corrections */
.resize-controls label {
font-size: 12px;
color: var(--wplace-text);
}
/* Additional precision fixes for exact upstream main matching */
/* Status default styling moved to theme files */
/* Duplicate settings section removed - all settings styling moved to theme files */
/* Settings header styling moved to theme files */
/* All remaining settings styling moved to theme files */
/* Icon styling moved to theme files */
.wplace-icon-eye {
font-size: 16px;
}
/* Overlay Settings Controls */
.wplace-overlay-opacity-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 18px;
height: 18px;
border-radius: 50%;
background: var(--wplace-slider-thumb-bg);
box-shadow: var(--wplace-shadow-slider-thumb);
cursor: pointer;
transition: all 0.2s ease;
}
.wplace-overlay-opacity-slider::-webkit-slider-thumb:hover {
transform: scale(1.2);
box-shadow: var(--wplace-shadow-slider-hover);
}
/* Coordinate Generation Controls */
.wplace-icon-route {
color: var(--wplace-icon-primary);
font-size: 16px;
}
.wplace-icon-table {
color: var(--wplace-icon-palette);
margin-right: 6px;
}
.wplace-icon-compass {
color: var(--wplace-icon-secondary);
margin-right: 6px;
}
/* Pixel Filter Controls */
.wplace-pixel-filter-controls {
padding: 18px;
margin-bottom: 15px;
display: flex;
flex-direction: column;
gap: 12px;
/* Theme-specific styling applied via theme files */
}
/* Snake Pattern Controls */
.wplace-snake-pattern-controls {
padding: 18px;
margin-bottom: 15px;
/* Theme-specific styling applied via theme files */
}
/* Block Size Controls */
.wplace-block-size-controls {
padding: 18px;
margin-bottom: 15px;
/* Theme-specific styling applied via theme files */
}
.wplace-block-size-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
}
.wplace-block-size-label {
display: block;
color: var(--wplace-text-faded);
font-size: 12px;
margin-bottom: 8px;
}
.wplace-icon-width {
color: var(--wplace-icon-primary);
margin-right: 4px;
}
.wplace-icon-height {
color: var(--wplace-icon-secondary);
margin-right: 4px;
}
.wplace-block-size-description {
font-size: 11px;
color: var(--wplace-text-dim);
margin: 8px 0 0;
text-align: center;
}
/* Random Block Controls */
.wplace-shuffle-block-size-controls {
display: none;
}
/* Batch Mode Controls */
.wplace-mode-selection {
margin-bottom: 15px;
}
.wplace-mode-label {
display: block;
margin-bottom: 8px;
color: var(--wplace-text-secondary);
font-weight: 500;
font-size: 14px;
}
.wplace-icon-dice {
color: var(--wplace-icon-palette);
margin-right: 6px;
}
/* Account Management Styles */
.wplace-account-info {
display: flex;
flex-direction: column;
gap: 12px;
margin-bottom: 12px;
padding: 12px;
background: var(--wplace-secondary);
border: 1px solid var(--wplace-border-color);
border-radius: var(--wplace-radius);
}
.wplace-account-current {
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
color: var(--wplace-text);
}
.wplace-account-current i {
color: var(--wplace-highlight);
width: 16px;
}
.wplace-account-current strong {
color: var(--wplace-success);
}
.wplace-account-switch {
display: flex;
align-items: center;
gap: 8px;
}
.wplace-toggle-switch {
display: flex;
align-items: center;
gap: 10px;
cursor: pointer;
user-select: none;
}
.wplace-toggle-switch input[type="checkbox"] {
display: none;
}
.wplace-toggle-slider {
position: relative;
width: 44px;
height: 24px;
background: var(--wplace-accent);
border: 1px solid var(--wplace-border-color);
border-radius: 12px;
transition: all 0.3s ease;
}
.wplace-toggle-slider:before {
content: '';
position: absolute;
top: 2px;
left: 2px;
width: 18px;
height: 18px;
background: var(--wplace-text);
border-radius: 50%;
transition: all 0.3s ease;
}
.wplace-toggle-switch input:checked+.wplace-toggle-slider {
background: var(--wplace-success);
border-color: var(--wplace-success);
}
.wplace-toggle-switch input:checked+.wplace-toggle-slider:before {
transform: translateX(20px);
background: white;
}
.wplace-toggle-label {
font-size: 14px;
color: var(--wplace-text);
font-weight: 500;
}
.wplace-account-list {
max-height: 200px;
overflow-y: auto;
border: 1px solid var(--wplace-border-color);
border-radius: var(--wplace-radius);
background: var(--wplace-secondary);
}
.wplace-account-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 12px;
border-bottom: 1px solid var(--wplace-border-color);
transition: all 0.3s ease, box-shadow 0.5s ease;
}
.wplace-account-item:last-child {
border-bottom: none;
}
.wplace-account-item:hover {
background: var(--wplace-accent);
}
.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);
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);
}
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);
}
}
@keyframes currentAccountNumberPulse {
from {
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);
}
}
.wplace-account-item.next-in-sequence {
background: var(--wplace-warning)15;
border-left: 3px solid var(--wplace-warning);
}
.wplace-account-info-item {
display: flex;
align-items: center;
gap: 8px;
}
.wplace-account-number {
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
background: var(--wplace-highlight);
color: white;
border-radius: 50%;
font-size: 12px;
font-weight: bold;
}
.wplace-account-name {
font-size: 14px;
color: var(--wplace-text);
font-weight: 500;
}
.wplace-account-status {
font-size: 12px;
color: var(--wplace-text-secondary);
}
.wplace-account-placeholder {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 20px;
color: var(--wplace-text-secondary);
font-style: italic;
}
.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;
}
.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;
}