/* ============================ Base Styles ============================ */ body { margin: 0; font-family: 'Segoe UI', sans-serif; color: rgb(224, 231, 233); /* soft off-white */ transition: background-color 0.3s, color 0.3s; box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } body.light { color: rgb(17, 17, 17); } /* ============================ Panels Base Style (all menus) ============================ */ .panel { display: none; margin: 3vh auto; width: 100vw; max-width: 840px; /* Default max width */ padding: 1.5rem 1.5rem; border-radius: 16px; background-color: rgb(30, 42, 56); /* dark slate */ color: rgb(224, 231, 233); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.7); overflow-y: auto; max-height: 90vh; box-sizing: border-box; /* Unified scrollbar styling */ scrollbar-width: thin; scrollbar-color: rgb(0, 184, 217) rgb(30, 42, 56); } body.light .panel { background-color: rgb(255, 255, 255); color: rgb(17, 17, 17); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); scrollbar-color: rgb(0, 155, 191) rgb(255, 255, 255); } /* Webkit scrollbar for .panel */ .panel::-webkit-scrollbar { width: 12px; } .panel::-webkit-scrollbar-track { background: rgb(30, 42, 56); border-radius: 16px; } body.light .panel::-webkit-scrollbar-track { background: rgb(255, 255, 255); } .panel::-webkit-scrollbar-thumb { background-color: rgb(0, 184, 217); border-radius: 16px; border: 3px solid rgb(30, 42, 56); } body.light .panel::-webkit-scrollbar-thumb { background-color: rgb(0, 155, 191); border: 3px solid rgb(255, 255, 255); } /* ============================ Header Section (All Panels) ============================ */ .header { cursor: grab; user-select: none; /* prevent text selection during drag */ -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; padding: 15px; background-color: rgb(39, 56, 71); /* muted dark blue */ border-radius: 12px 12px 0 0; position: relative; color: rgb(224, 231, 233); } .header:active { cursor: grabbing; } body.light .header { background-color: rgb(226, 232, 240); /* light blue gray */ color: rgb(17, 17, 17); } /* Logo & Title Container */ .logo-title-wrapper { display: flex; flex-direction: column; align-items: center; flex-grow: 1; } .logo { width: 80px; height: 80px; border-radius: 50%; object-fit: cover; animation: pulseSpin 0.8s ease-out; margin-bottom: 8px; box-shadow: 0 0 8px rgb(0, 184, 217); } .menu-title { margin: 0; font-size: 1.6em; font-weight: 700; text-align: center; color: inherit; } /* Theme Toggle */ .theme-toggle { position: absolute; top: 20px; right: 20px; display: flex; align-items: center; justify-content: flex-end; user-select: none; } /* Switch (Toggle) */ .switch { position: relative; display: inline-block; width: 50px; height: 24px; cursor: pointer; } .switch input { opacity: 0; width: 0; height: 0; } .slider { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: rgb(85, 85, 85); border-radius: 24px; transition: 0.4s; } .slider:before { position: absolute; content: ""; height: 18px; width: 18px; left: 3px; bottom: 3px; background-color: white; border-radius: 50%; transition: 0.4s; } input:checked + .slider { background-color: rgb(0, 184, 217); } input:checked + .slider:before { transform: translateX(26px); } /* ============================ Content Area (All Panels) ============================ */ .content { padding: 15px; font-size: 1.1em; box-sizing: border-box; } /* Inputs and Selects (text fields, dropdowns) */ select, input[type="text"], input[type="date"] { width: 100%; max-width: 100%; padding: 12px; margin: 10px 0; font-size: 1em; border-radius: 8px; border: 1px solid rgb(68, 68, 68); background-color: rgb(34, 48, 60); color: rgb(224, 231, 233); font-family: 'Segoe UI', sans-serif; transition: background-color 0.3s, color 0.3s, border-color 0.3s; box-sizing: border-box; } select:hover, input:hover, select:focus, input:focus { border-color: rgb(0, 184, 217); outline: none; } body.light select, body.light input[type="text"], body.light input[type="date"] { background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); border: 1px solid rgb(204, 204, 204); } /* ============================ Buttons and Button Containers ============================ */ .button-container { display: flex; justify-content: space-between; margin-top: 20px; gap: 10px; flex-wrap: wrap; } button { flex-grow: 1; padding: 12px; font-size: 1.1em; border-radius: 10px; border: none; cursor: pointer; transition: background-color 0.3s, transform 0.3s, box-shadow 0.3s; color: white; font-family: 'Segoe UI', sans-serif; box-shadow: 0 4px 8px rgba(0, 184, 217, 0.4); min-width: 90px; } button:hover { transform: scale(1.05); box-shadow: 0 6px 14px rgba(0, 155, 191, 0.7); } /* Button Variants */ .confirm { background-color: rgb(0, 184, 217); } .cancel { background-color: rgb(231, 76, 60); box-shadow: 0 4px 8px rgba(231, 76, 60, 0.5); } .back { background-color: rgb(0, 155, 191); box-shadow: none; color: white; } body.light .back { background-color: rgb(0, 155, 191); box-shadow: none; color: white; } body.light .confirm { background-color: rgb(0, 155, 191); box-shadow: none; color: white; } body.light .cancel { background-color: rgb(231, 76, 60); box-shadow: none; color: white; } /* ============================ Search Table (Panel 2) ============================ */ #searchResults { width: 100%; border-collapse: collapse; margin-top: 15px; box-shadow: 0 0 15px rgba(0, 184, 217, 0.25); border-radius: 12px; overflow: hidden; } #searchResults thead { background-color: rgb(39, 56, 71); } body.light #searchResults thead { background-color: rgb(226, 232, 240); } #searchResults th, #searchResults td { text-align: center; padding: 12px 15px; border-top: 1px solid rgb(68, 68, 68); color: rgb(224, 231, 233); user-select: none; font-weight: 600; } body.light #searchResults th, body.light #searchResults td { color: rgb(17, 17, 17); border-top: 1px solid rgb(221, 221, 221); } /* Zebra Striping for rows */ #searchResults tbody tr:nth-child(even) { background-color: rgb(22, 34, 48); } body.light #searchResults tbody tr:nth-child(even) { background-color: rgb(245, 247, 250); } #searchResults tbody tr:hover { background-color: rgb(0, 184, 217); color: white; cursor: pointer; transition: background-color 0.3s, color 0.3s; } body.light #searchResults tbody tr:hover { background-color: rgb(0, 155, 191); color: white; } /* ============================ Character Select List (Panel 5) ============================ */ #characterSelectList { display: flex; flex-direction: column; gap: 10px; margin: 15px 0; } #characterSelectList button { padding: 12px; font-size: 1.1em; border-radius: 10px; border: none; cursor: pointer; background-color: rgb(0, 184, 217); color: white; transition: background-color 0.3s, transform 0.3s, box-shadow 0.3s; box-shadow: 0 4px 8px rgba(0, 184, 217, 0.4); font-family: 'Segoe UI', sans-serif; } #characterSelectList button:hover { background-color: rgb(0, 155, 191); transform: scale(1.05); box-shadow: 0 6px 14px rgba(0, 155, 191, 0.7); } /* ============================ Dynamic Select Buttons (Generic) ============================ */ button.select-btn { background-color: rgb(0, 184, 217); color: white; padding: 8px 14px; border-radius: 8px; border: none; cursor: pointer; box-shadow: 0 4px 8px rgba(0, 184, 217, 0.4); transition: background-color 0.3s ease, transform 0.3s ease; } button.select-btn:hover { background-color: rgb(0, 155, 191); transform: scale(1.05); } /* ============================ Search Result Items Container (for custom search results, e.g. div lists) ============================ */ #searchResultsContainer { margin-top: 15px; max-height: 50vh; overflow-y: auto; border-radius: 12px; background-color: rgb(22, 34, 48); box-shadow: 0 0 15px rgba(0, 184, 217, 0.25); padding: 10px; /* Unified scrollbar styling */ scrollbar-width: thin; scrollbar-color: rgb(0, 184, 217) rgb(30, 42, 56); } body.light #searchResultsContainer { background-color: rgb(245, 247, 250); box-shadow: 0 0 12px rgba(0, 184, 217, 0.15); scrollbar-color: rgb(0, 155, 191) rgb(255, 255, 255); } #searchResultsContainer::-webkit-scrollbar { width: 12px; } #searchResultsContainer::-webkit-scrollbar-track { background: rgb(30, 42, 56); border-radius: 16px; } body.light #searchResultsContainer::-webkit-scrollbar-track { background: rgb(255, 255, 255); } #searchResultsContainer::-webkit-scrollbar-thumb { background-color: rgb(0, 184, 217); border-radius: 16px; border: 3px solid rgb(30, 42, 56); } body.light #searchResultsContainer::-webkit-scrollbar-thumb { background-color: rgb(0, 155, 191); border: 3px solid rgb(255, 255, 255); } /* ============================ Footer (All Panels) ============================ */ .footer { text-align: center; padding: 12px; font-size: 0.9em; color: rgb(122, 138, 153); user-select: none; } body.light .footer { color: rgb(136, 136, 136); } /* ============================ Animations ============================ */ @keyframes pulseSpin { 0% { transform: scale(0.8) rotate(0deg); opacity: 0; } 100% { transform: scale(1) rotate(360deg); opacity: 1; } } /* ============================ Responsive Design ============================ */ @media (max-width: 768px) { .panel { width: 95vw; margin: 4vh auto; padding: 1rem 1rem; } } table#searchResults, table#restoreResults { width: 100%; border-collapse: collapse; margin-top: 15px; font-size: 1em; font-family: 'Segoe UI', sans-serif; user-select: none; } table#searchResults th, table#searchResults td, table#restoreResults th, table#restoreResults td { text-align: center; padding: 12px 10px; border-top: 1px solid rgb(68, 68, 68); color: rgb(224, 231, 233); transition: background-color 0.3s ease; } /* Header row */ table#searchResults th, table#restoreResults th { background-color: rgb(39, 56, 71); font-weight: 600; } /* Light mode overrides */ body.light table#searchResults th, body.light table#searchResults td, body.light table#restoreResults th, body.light table#restoreResults td { color: rgb(17, 17, 17); border-top: 1px solid rgb(221, 221, 221); } body.light table#searchResults th, body.light table#restoreResults th { background-color: rgb(226, 232, 240); } /* Hover effect for rows */ table#searchResults tbody tr:hover, table#restoreResults tbody tr:hover { background-color: rgba(0, 184, 217, 0.15); cursor: pointer; } /* Optional: Zebra striping */ table#searchResults tbody tr:nth-child(even), table#restoreResults tbody tr:nth-child(even) { background-color: rgba(0, 184, 217, 0.05); } body.light table#searchResults tbody tr:nth-child(even), body.light table#restoreResults tbody tr:nth-child(even) { background-color: rgba(0, 155, 191, 0.1); } /* ============================ Buttons inside tables (e.g. action buttons) ============================ */ table#searchResults button, table#restoreResults button { padding: 6px 12px; border-radius: 8px; border: none; background-color: rgb(0, 184, 217); color: white; cursor: pointer; box-shadow: 0 3px 6px rgba(0, 184, 217, 0.5); transition: background-color 0.3s ease, transform 0.3s ease; font-family: 'Segoe UI', sans-serif; font-size: 0.95em; } table#searchResults button:hover, table#restoreResults button:hover { background-color: rgb(0, 155, 191); transform: scale(1.05); } /* ============================ Responsive tweaks for tables ============================ */ @media (max-width: 600px) { table#searchResults th, table#searchResults td, table#restoreResults th, table#restoreResults td { padding: 8px 6px; font-size: 0.9em; } table#searchResults button, table#restoreResults button { padding: 5px 10px; font-size: 0.85em; } } /* ============================ Custom Styles for Manage Player Panel (#panel-manage) ============================ */ /* Manage player name styling */ #managePlayerName { margin-bottom: 1.2rem; font-weight: 700; font-size: 1.3em; color: rgb(255, 255, 255); } body.light #managePlayerName { color: rgb(0, 0, 0); } /* Buttons inside #panel-manage */ #panel-manage button.confirm { background-color: rgb(10, 140, 180); box-shadow: 0 4px 12px rgba(0, 140, 180, 0.7); } /* ============================ Restore Panel Adjustments ============================ */ /* Make restore panel wider and center it */ #panel-restore { max-width: 840px !important; width: 100%; margin: 0 auto; } /* Restore results table container - responsive */ table#restoreResults { width: 100% !important; max-width: 1200px; margin: 0 auto; border-collapse: collapse; font-family: 'Segoe UI', sans-serif; } /* Limit tbody height with scrollbar for restore results */ table#restoreResults tbody { display: block; max-height: 260px; /* ~5 rows */ overflow-y: auto; /* Hide scrollbar but keep scroll */ scrollbar-width: none; /* Firefox */ } /* Hide scrollbar for Webkit browsers */ table#restoreResults tbody::-webkit-scrollbar { width: 0; height: 0; } body.light table#restoreResults tbody { scrollbar-color: rgb(0, 155, 191) rgb(255, 255, 255); } /* Keep table head and rows fixed layout and aligned */ table#restoreResults thead, table#restoreResults tbody tr { display: table; width: 100%; table-layout: fixed; } /* Fix padding and vertical alignment */ table#restoreResults th, table#restoreResults td { padding: 8px 12px; vertical-align: middle; text-align: left; } /* Limit Name column width and truncate overflow */ table#restoreResults th:nth-child(1), table#restoreResults td:nth-child(1) { max-width: 220px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Limit License column width and truncate overflow */ table#restoreResults th:nth-child(3), table#restoreResults td:nth-child(3) { max-width: 180px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* Fix Action column width and center button */ table#restoreResults th:nth-child(4), table#restoreResults td:nth-child(4) { width: 120px; text-align: center; } /* Restore button styling */ button.restore-btn { background-color: rgb(0, 184, 217); color: white; padding: 8px 14px; border-radius: 8px; border: none; cursor: pointer; box-shadow: 0 4px 8px rgba(0, 184, 217, 0.4); transition: background-color 0.3s ease, transform 0.3s ease; font-weight: 600; font-size: 1rem; min-width: 80px; box-sizing: border-box; display: inline-block; } button.restore-btn:hover { background-color: rgb(0, 155, 191); transform: scale(1.05); } /* Optional: Focus outline for accessibility */ button.restore-btn:focus { outline: 2px solid rgb(0, 155, 191); outline-offset: 2px; } /* ============================ Manage Player panel buttons (specific override) ============================ */ #panel-manage .confirm { background: linear-gradient(135deg, #00d2ff 0%, #3a47d5 100%); color: white; font-weight: 700; font-size: 1.3em; padding: 14px 24px; margin: 8px 0; border-radius: 14px; box-shadow: 0 6px 12px rgba(58, 71, 213, 0.6); border: 2px solid #1f2a56; transition: background 0.4s ease, transform 0.3s ease, box-shadow 0.4s ease; width: 100%; cursor: pointer; } #panel-manage .confirm:not(:last-child) { margin-bottom: 16px; } #panel-manage .confirm:hover { background: linear-gradient(135deg, #3a47d5 0%, #00d2ff 100%); box-shadow: 0 8px 20px rgba(58, 71, 213, 0.9); transform: scale(1.05); } /* Light mode overrides */ body.light #panel-manage .confirm { background: linear-gradient(135deg, #3a8eff 0%, #1c3c8d 100%); color: white; border: 2px solid #3758b0; box-shadow: 0 6px 12px rgba(28, 60, 141, 0.6); } body.light #panel-manage .confirm:hover { background: linear-gradient(135deg, #1c3c8d 0%, #3a8eff 100%); box-shadow: 0 8px 20px rgba(28, 60, 141, 0.9); } .select-btn { background: linear-gradient(135deg, #00d2ff 0%, #3a47d5 100%); color: white; font-weight: 700; font-size: 1.3em; padding: 14px 24px; margin: 8px 0; border-radius: 14px; box-shadow: 0 6px 12px rgba(58, 71, 213, 0.6); border: 2px solid #1f2a56; transition: background 0.4s ease, transform 0.3s ease, box-shadow 0.4s ease; width: 100%; cursor: pointer; box-sizing: border-box; } .select-btn:hover { background: linear-gradient(135deg, #3a47d5 0%, #00d2ff 100%); box-shadow: 0 8px 20px rgba(58, 71, 213, 0.9); transform: scale(1.05); } /* Light mode */ body.light .select-btn { background: linear-gradient(135deg, #3a8eff 0%, #1c3c8d 100%); color: white; border: 2px solid #3758b0; box-shadow: 0 6px 12px rgba(28, 60, 141, 0.6); } body.light .select-btn:hover { background: linear-gradient(135deg, #1c3c8d 0%, #3a8eff 100%); box-shadow: 0 8px 20px rgba(28, 60, 141, 0.9); }