:root { --c-bg: #ffffff; --c-text: #334155; --c-border: #e2e8f0; --c-card: #ffffff; --c-header: #0f172a; --c-muted: #64748b; --c-primary: #4f46e5; --c-primary-hover: #4338ca; --c-secondary-bg: #f1f5f9; --c-info-card-bg: #f8fafc; --c-modal-overlay: rgba(0,0,0,0.5); --c-success: #16a34a; --c-error: #dc2626; --c-btn-secondary-bg: #e2e8f0; --c-primary-rgb: 79, 70, 229; --c-info-card-bg-rgb: 248, 250, 252; --c-primary-transparent: 79, 70, 229; } html.dark { --c-bg: #0f172a; --c-text: #e2e8f0; --c-border: #334155; --c-card: #1e293b; --c-header: #f8fafc; --c-muted: #94a3b8; --c-primary: #6366f1; --c-primary-hover: #4f46e5; --c-secondary-bg: #1e293b; --c-info-card-bg: #0d121c; --c-modal-overlay: rgba(0,0,0,0.7); --c-success: #22c55e; --c-error: #ef4444; --c-btn-secondary-bg: #334155; --c-info-card-bg-rgb: 13, 18, 28; --c-primary-transparent: 99, 102, 241; } body { font-family: 'Inter', sans-serif; color: var(--c-text); overflow: hidden; user-select: text; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; } [contenteditable="true"] { user-select: text; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; } .sidebar { width: 250px; flex-shrink: 0; background-color: var(--c-secondary-bg); border-right: 1px solid var(--c-border); display: flex; flex-direction: column; padding: 0.75rem; transition: background-color 0.3s, border-color 0.3s; } .main-nav-link { display: flex; align-items: center; gap: 0.75rem; padding: 0.6rem 0.8rem; border-radius: 0.5rem; font-weight: 500; color: var(--c-muted); transition: color 0.2s, background-color 0.2s; cursor: pointer; } .main-nav-link:hover { color: var(--c-header); background-color: var(--c-btn-secondary-bg); } .main-nav-link.active { background-color: var(--c-primary); color: white; } html.dark .main-nav-link.active { color: white; } .tab-btn { padding: 0.5rem 1.5rem; font-size: 0.875rem; font-weight: 600; border-radius: 0.5rem; border: 1px solid; transition: all 0.2s ease-in-out; } .tab-btn.tab-active { background-color: var(--c-primary); color: white; border-color: var(--c-primary); } html.dark .tab-btn.tab-active { color: white; } .tab-btn.tab-inactive { color: var(--c-muted); background-color: transparent; border-color: var(--c-border); } .tab-btn.tab-inactive:hover { border-color: var(--c-primary); color: var(--c-primary); } #rcon-container { flex: 1; display: flex; flex-direction: column; border: 1px solid #ccc; } #rcon-output { height: 300px; overflow-y: auto; padding: 1rem; white-space: pre-wrap; font-size: 16px; color: #eaeaea; } #rcon-output > div { margin-bottom: 4px; } .rcon-tab-btn { padding: 0.5rem 1rem; font-size: 0.875rem; font-weight: 600; border: 1px solid transparent; border-bottom: none; border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; color: var(--c-muted); transition: all 0.2s ease-in-out; margin-bottom: -1px; } .rcon-tab-btn:hover { color: var(--c-header); } .rcon-tab-btn.tab-active { color: var(--c-primary); background-color: var(--c-bg); border-color: var(--c-border); } #command-builder-area form { flex-wrap: wrap; } .input-field { background-color: var(--c-bg); border: 1px solid var(--c-border); border-radius: 0.5rem; padding: 0.5rem 0.75rem; font-size: 0.875rem; } .input-field:focus { outline: none; border-color: var(--c-primary); } .playable-class-item { padding: 0.4rem 0.8rem; border-radius: 0.375rem; cursor: pointer; text-align: center; font-weight: 500; transition: background-color 0.2s, color 0.2s, border-color 0.2s; border: 1px solid transparent; } .playable-class-item.enabled { background-color: var(--c-success); color: white; border-color: var(--c-success); } .playable-class-item.disabled { background-color: var(--c-btn-secondary-bg); color: var(--c-muted); border-color: var(--c-border); } .playable-class-item.enabled:hover { background-color: #15803d; border-color: #15803d; } .playable-class-item.disabled:hover { background-color: var(--c-border); color: var(--c-text); border-color: var(--c-text); } #player-list-container.grid-view { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 1rem; align-content: start; } .player-card { background-color: var(--c-card); border: 1px solid var(--c-border); border-radius: 0.75rem; padding: 1rem; cursor: pointer; transition: border-color 0.2s, box-shadow 0.2s; } .player-card:hover { border-color: var(--c-primary); box-shadow: 0 0 0 1px var(--c-primary); } .player-card.selected { border-color: var(--c-primary); box-shadow: 0 0 0 2px var(--c-primary); } .player-card-list-item { display: flex; justify-content: space-between; align-items: center; padding: 1rem; border-radius: 0.5rem; border: 1px solid var(--c-border); transition: border-color 0.2s, box-shadow 0.2s; cursor: pointer; background-color: var(--c-card); } .player-card-list-item:hover { border-color: var(--c-primary); } .view-toggle-btn { border-radius: 0.375rem; } .view-toggle-btn.active { background-color: var(--c-primary); color: white; } .server-details-card { background-color: var(--c-card); border: 1px solid var(--c-border); border-radius: 0.75rem; padding: 1rem; } .modal-container { position: fixed; inset: 0; background-color: var(--c-modal-overlay); display: flex; align-items: center; justify-content: center; z-index: 50; padding: 1rem; } .modal-content { background-color: var(--c-card); border-radius: 0.75rem; box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25); width: 100%; max-width: 500px; display: flex; flex-direction: column; } .modal-info-card { background-color: var(--c-info-card-bg); } .copy-btn { color: var(--c-muted); } .copy-btn:hover { background-color: var(--c-btn-secondary-bg); color: var(--c-primary); } .btn-primary { background-color: var(--c-primary); color: white; font-weight: 600; padding: 0.5rem 1rem; border-radius: 0.5rem; transition: background-color 0.2s; } .btn-primary:hover { background-color: var(--c-primary-hover); } .btn-secondary { background-color: var(--c-btn-secondary-bg); color: var(--c-text); font-weight: 600; padding: 0.5rem 1rem; border-radius: 0.5rem; transition: background-color 0.2s; border: 1px solid var(--c-border); } .btn-secondary:hover { background-color: var(--c-border); } .btn-danger { background-color: var(--c-error); color: white; font-weight: 600; padding: 0.5rem 1rem; border-radius: 0.5rem; transition: background-color 0.2s; } .btn-danger:hover { opacity: 0.85; } .switch { position: relative; display: inline-block; width: 38px; height: 22px; } .switch input { opacity: 0; width: 0; height: 0; } .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--c-muted); -webkit-transition: .2s; transition: .2s; border-radius: 22px; } .slider:before { position: absolute; content: ""; height: 16px; width: 16px; left: 3px; bottom: 3px; background-color: white; -webkit-transition: .2s; transition: .2s; border-radius: 50%; } input:checked + .slider { background-color: var(--c-primary); } input:focus + .slider { box-shadow: 0 0 1px var(--c-primary); } input:checked + .slider:before { -webkit-transform: translateX(16px); -ms-transform: translateX(16px); transform: translateX(16px); } .modal-content button[id^="close-"] { background: none; border: none; cursor: pointer; padding: 0.5rem; border-radius: 0.375rem; transition: background-color 0.2s, color 0.2s; } .modal-content button[id^="close-"]:hover { background-color: var(--c-btn-secondary-bg); } #announcement-modal { z-index: 1160; } .cta-button { display: flex; align-items: center; justify-content: center; gap: 0.75rem; padding: 0.75rem 1rem; border-radius: 0.5rem; font-weight: 600; color: white; transition: background-color 0.2s; text-decoration: none; } #changelog-card { position: relative; } #changelog-banner-container { position: relative; height: 10rem; border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; overflow: hidden; cursor: pointer; --mouse-x: 50%; --mouse-y: 50%; background-image: radial-gradient( circle at var(--mouse-x) var(--mouse-y), rgba(var(--c-primary-rgb), 0.15) 0%, transparent 15% ); background-size: 200% 200%; background-position: var(--mouse-x) var(--mouse-y); transition: background-image 0.1s linear, background-position 0.1s linear; } #changelog-banner-container::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 35%; background: linear-gradient(to bottom, transparent 0%, var(--c-info-card-bg) 80%); } #changelog-banner-image { width: 100%; height: 100%; object-fit: cover; object-position: left; display: block; } #changelog-card > .p-4 { position: relative; margin-top: -4rem; background-color: rgba(248, 250, 252, 0.7); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); border-top: 1px solid rgba(226, 232, 240, 0.5); border-radius: 0.5rem; margin-left: 0.75rem; margin-right: 0.75rem; padding: 1rem; } html.dark #changelog-card > .p-4 { background-color: rgba(13, 18, 28, 0.7); border-top: 1px solid rgba(51, 65, 85, 0.5); } .context-menu { position: fixed; background-color: rgba(var(--c-info-card-bg-rgb), 0.7); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); border: 1px solid var(--c-border); border-radius: 1rem; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); padding: 0.5rem 0; z-index: 1000; min-width: 150px; display: none; flex-direction: column; gap: 0.25rem; transform-origin: top left; animation: contextMenuPopOut 0.2s ease-out forwards; opacity: 0; transform: scale(0.8); } .context-menu-item { position: relative; display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 1rem; cursor: pointer; color: var(--c-text); transition: color 0.15s ease-in-out; overflow: hidden; } .context-menu-item::before { content: ''; position: absolute; top: 0; left: 0.5rem; right: 0.5rem; bottom: 0; background-color: rgba(var(--c-primary-transparent), 0.15); border-radius: 0.25rem; opacity: 0; transform: scaleX(0); transform-origin: left center; transition: opacity 0.2s ease-out, transform 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); z-index: -1; } .context-menu-icon { font-size: 1.1rem; width: 1.1rem; display: flex; justify-content: center; align-items: center; color: var(--c-muted); } .context-menu-item:hover .context-menu-icon { color: var(--c-primary); } .context-menu-text { font-size: 0.875rem; white-space: nowrap; } .context-menu-divider { height: 1px; background-color: var(--c-border); margin: 0.25rem 0; } .context-menu.is-popping-out { transform-origin: top left; animation: contextMenuPopOutBounce 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55) forwards; } @keyframes contextMenuPopOutBounce { 0% { opacity: 0; transform: scale(0.8); } 70% { opacity: 1; transform: scale(1.05); } 100% { opacity: 1; transform: scale(1); } } #update-modal { transition: opacity 0.3s ease-out, transform 0.3s ease-out;} #update-modal.hidden { opacity: 0; transform: scale(0.95); pointer-events: none; } #update-modal.show { opacity: 1; transform: scale(1); pointer-events: auto; } #update-floating-bar.show { transform: translate-x-0; opacity: 1; } #update-floating-bar.hidden-transition { transform: translate-x-full; opacity: 0; } #persistent-update-indicator button { animation: pulse 2s infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } } .status-pill { padding: 0.125rem 0.5rem; border-radius: 9999px; font-size: 0.7rem; font-weight: 700; line-height: 1; text-transform: uppercase; flex-shrink: 0; } .status-pill-active { background-color: var(--c-success); color: white; } .status-pill-inactive { background-color: #f59e0b; /* Amber 500 */ color: white; } .loader { width: 18px; height: 18px; border: 2px solid; border-color: white; border-bottom-color: transparent; border-radius: 50%; display: inline-block; box-sizing: border-box; animation: rotation 1s linear infinite; } .status-indicator { display: inline-block; padding: 0.2rem 0.5rem; border-radius: 9999px; font-size: 0.7rem; font-weight: 700; line-height: 1; text-transform: uppercase; color: white; min-width: 40px; text-align: center; } .status-on { background-color: var(--c-success); } .status-off { background-color: var(--c-muted); } html:not(.dark) .loader { border-color: var(--c-text); border-bottom-color: transparent; } @keyframes rotation { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } html { scrollbar-width: thin; scrollbar-color: var(--c-muted) transparent; } ::-webkit-scrollbar { width: 14px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background-color: var(--c-muted); border-radius: 20px; border: 4px solid var(--c-bg); } ::-webkit-scrollbar-thumb:hover { background-color: var(--c-primary); } .command-item { display: flex; flex-direction: column; padding: 0.5rem; border-radius: 0.375rem; cursor: pointer; transition: background-color 0.2s; } .command-item:hover, .command-item.selected { background-color: var(--c-primary); color: white; } .command-item:hover .command-desc, .command-item.selected .command-desc { color: #e0e7ff; } .command-name { font-weight: 600; } .command-desc { font-size: 0.75rem; color: var(--c-muted); } .file-drop-area { transition: background-color 0.2s ease-in-out; } .file-drop-area.dragover { background-color: rgba(79, 70, 229, 0.05); border-color: var(--c-primary); } html.dark .file-drop-area.dragover { background-color: rgba(99, 102, 241, 0.1); } .btn-change-file { padding: 0.5rem 1rem; font-size: 0.875rem; font-weight: 500; border-radius: 0.375rem; border: 1px solid var(--c-border); color: var(--c-muted); background-color: var(--c-btn-secondary-bg); margin-left: 1rem; flex-shrink: 0; transition: background-color 0.2s; cursor: pointer; } .btn-change-file:hover { background-color: var(--c-secondary-bg); } .preview-code .key { color: #f97316; } html.dark .preview-code .key { color: #fb923c; } .preview-code .string { color: #22c55e; } html.dark .preview-code .string { color: #4ade80; } .preview-code .number { color: #3b82f6; } html.dark .preview-code .number { color: #60a5fa; } .preview-code .boolean { color: #a855f7; } html.dark .preview-code .boolean { color: #c084fc; } .preview-code .null { color: #ef4444; } html.dark .preview-code .null { color: #f87171; }