/* Loading overlay styling */ #loading-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 9999; align-items: center; justify-content: center; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); opacity: 0; transition: opacity 0.4s ease; } #loading-overlay.show { display: flex; opacity: 1; } /* Restart banner */ #restartBanner { display: none; } #serverManagerList { min-height: 480px; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; } ::-webkit-scrollbar-thumb { background: #888; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #555; } /* Custom select2 styling to match Tailwind */ .select2-container--default .select2-selection--multiple { border: 1px solid #d1d5db; border-radius: 0.375rem; padding: 0.25rem 0.5rem; min-height: 42px; } .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: #3b82f6; border: 1px solid #3b82f6; color: white; border-radius: 0.25rem; padding: 0 0.5rem; } .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { color: white; margin-right: 0.25rem; } /* Custom modal styling */ .modal-content { box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); } body.modal-open { overflow: hidden !important; } /* Custom tooltip styling */ .tooltip { position: relative; display: inline-block; } .tooltip .tooltip-text { visibility: hidden; width: 200px; background-color: #333; color: #fff; text-align: center; border-radius: 6px; padding: 5px; position: absolute; z-index: 1; bottom: 125%; left: 50%; margin-left: -100px; opacity: 0; transition: opacity 0.3s; } .tooltip:hover .tooltip-text { visibility: visible; opacity: 1; } /* Custom mark styling for search highlights */ mark { background-color: #fef08a; padding: 0.1em 0em 0.1em 0.2em; border-radius: 0.25em; } /* Toast notifications */ #toast-container { position: fixed; top: 1.5rem; right: 1.5rem; display: flex; flex-direction: column; gap: 0.5rem; z-index: 10000; pointer-events: none; } .toast { min-width: 240px; max-width: 360px; padding: 0.75rem 1rem; border-radius: 0.5rem; color: #fff; font-weight: 500; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); opacity: 0; transform: translateY(-6px); transition: opacity 0.25s ease, transform 0.25s ease; } .toast.show { opacity: 1; transform: translateY(0); } .toast-success { background-color: #047857; } .toast-error { background-color: #b91c1c; } .toast-info { background-color: #1d4ed8; } .toast-warning { background-color: #d97706; } .toast-ban-event { background-color: #7f1d1d; pointer-events: auto; cursor: pointer; } .toast-ban-event:hover { background-color: #991b1b; transform: translateY(-2px); box-shadow: 0 15px 20px -3px rgba(0, 0, 0, 0.15); } .toast-unban-event { background-color: #14532d; pointer-events: auto; cursor: pointer; } .toast-unban-event:hover { background-color: #166534; transform: translateY(-2px); box-shadow: 0 15px 20px -3px rgba(0, 0, 0, 0.15); } /* Backend Status Indicator */ #backendStatus { display: flex; align-items: center; gap: 0.5rem; padding: 0.25rem 0.5rem; margin-left: 5px; border-radius: 0.25rem; /* background-color: rgba(255, 255, 255, 0.1); */ transition: background-color 0.2s ease; } /*#backendStatus:hover { background-color: rgba(255, 255, 255, 0.15); }*/ #statusDot { width: 0.5rem; height: 0.5rem; border-radius: 50%; display: inline-block; transition: background-color 0.3s ease, box-shadow 0.3s ease; box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7); animation: pulse 2s infinite; } #statusDot.bg-green-500 { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7); animation: pulseGreen 2s infinite; } #statusDot.bg-yellow-500 { box-shadow: 0 0 0 0 rgba(234, 179, 8, 0.7); animation: pulseYellow 2s infinite; } #statusDot.bg-red-500 { box-shadow: 0 0 0 0 rgb(163 44 44); animation: pulseRed 2s infinite; } #statusDot.bg-gray-400 { animation: none; } #statusText { font-size: 0.75rem; font-weight: 500; color: rgba(255, 255, 255, 0.9); white-space: nowrap; } @keyframes pulseGreen { 0% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.7); } 70% { box-shadow: 0 0 0 4px rgba(34, 197, 94, 0); } 100% { box-shadow: 0 0 0 0 rgba(34, 197, 94, 0); } } @keyframes pulseYellow { 0% { box-shadow: 0 0 0 0 rgba(234, 179, 8, 0.7); } 70% { box-shadow: 0 0 0 4px rgba(234, 179, 8, 0); } 100% { box-shadow: 0 0 0 0 rgba(234, 179, 8, 0); } } @keyframes pulseRed { 0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); } 70% { box-shadow: 0 0 0 4px rgba(239, 68, 68, 0); } 100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); } } /* Clock Display */ #clockDisplay { display: flex; align-items: center; padding: 0.25rem 0.75rem; border-radius: 0.25rem; background-color: rgba(255, 255, 255, 0.1); transition: background-color 0.2s ease; } #clockDisplay:hover { background-color: rgba(255, 255, 255, 0.15); } #clockTime { font-family: 'Courier New', Courier, monospace; font-size: 0.875rem; font-weight: 600; color: rgba(255, 255, 255, 0.95); letter-spacing: 0.05em; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); } /* Mobile responsive adjustments */ @media (max-width: 768px) { #backendStatus { padding: 0.125rem 0.375rem; } #statusText { font-size: 0.625rem; } #clockDisplay { padding: 0.125rem 0.5rem; } #clockTime { font-size: 0.75rem; } } #advancedMikrotikFields, #advancedPfSenseFields { padding: 10px; } /* Additional Tailwind color classes for buttons */ .bg-red-500 { --tw-bg-opacity: 1; background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1)); } .bg-red-600 { --tw-bg-opacity: 1; background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); } .hover\:bg-red-600:hover { --tw-bg-opacity: 1; background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1)); } .bg-purple-600 { --tw-bg-opacity: 1; background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1)); } .bg-purple-700 { --tw-bg-opacity: 1; background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1)); } .hover\:bg-purple-700:hover { --tw-bg-opacity: 1; background-color: rgb(126 34 206 / var(--tw-bg-opacity, 1)); } /* Ensure Font Awesome icons are visible */ .fas, .far, .fab, .fal, .fad { font-family: "Font Awesome 6 Free", "Font Awesome 6 Brands", "Font Awesome 6 Pro"; font-weight: 900; display: inline-block; font-style: normal; font-variant: normal; text-rendering: auto; line-height: 1; } .fas::before { font-weight: 900; } /* Button icon spacing */ button .fas, button .far, button .fab { margin-right: 0.25rem; } button .fas:only-child, button .far:only-child, button .fab:only-child { margin-right: 0; } /* Additional utility classes that might be missing */ /* Support for top-1/2 and -translate-y-1/2 (with escaped slash) */ .top-1\/2 { top: 50%; } .-translate-y-1\/2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } /* Alternative class name without escape (for compatibility) */ .top-1-2 { top: 50%; } .-translate-y-1-2 { --tw-translate-y: -50%; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .gap-2 { gap: 0.5rem; } /* Ensure buttons with icons display properly */ button.inline-flex, .inline-flex { display: inline-flex; align-items: center; } button .fas, button .far, button .fab { display: inline-block; width: 1em; text-align: center; } /* Ensure delete button is visible */ button.bg-red-500, button.bg-red-600 { color: white; border: none; cursor: pointer; } button.bg-red-500:hover, button.bg-red-600:hover { background-color: rgb(220 38 38); } /* Green color classes */ .bg-green-100 { --tw-bg-opacity: 1; background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1)); } .text-green-800 { --tw-text-opacity: 1; color: rgb(22 101 52 / var(--tw-text-opacity, 1)); }