2025-03-15 06:49:30 +00:00
|
|
|
/* Full-screen layout */
|
|
|
|
|
html, body {
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
background: #000;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
font-family: 'Roboto', sans-serif;
|
|
|
|
|
color: #FFF;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Canvas covers the entire window */
|
|
|
|
|
canvas {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
display: block;
|
|
|
|
|
background: #000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Panels for controls + time & leaderboards */
|
|
|
|
|
.control-panel,
|
|
|
|
|
.time-panel {
|
|
|
|
|
position: absolute;
|
|
|
|
|
padding: 8px;
|
|
|
|
|
user-select: none;
|
|
|
|
|
z-index: 2;
|
|
|
|
|
border: 1px solid #555;
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
box-shadow: 0 0 10px rgba(255, 0, 255, 0.3);
|
|
|
|
|
background: linear-gradient(135deg, rgba(20,0,40,0.8), rgba(0,0,0,0.6));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* widths: make both 420px to match each other in desktop */
|
|
|
|
|
.control-panel {
|
|
|
|
|
width: 420px;
|
|
|
|
|
left: 50%;
|
|
|
|
|
bottom: 20px;
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
}
|
|
|
|
|
.time-panel {
|
|
|
|
|
width: 420px;
|
|
|
|
|
left: 50%;
|
|
|
|
|
top: 20px;
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Panel headers */
|
|
|
|
|
.control-panel .header,
|
|
|
|
|
.time-panel .header {
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
padding: 6px;
|
|
|
|
|
background: rgba(0,0,0,0.8);
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
border-radius: 5px;
|
|
|
|
|
box-shadow: inset 0 0 5px rgba(255,0,255,0.2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Panel content */
|
|
|
|
|
.control-panel .content,
|
|
|
|
|
.time-panel .content {
|
|
|
|
|
margin-top: 8px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Buttons in panels */
|
|
|
|
|
.control-panel button,
|
|
|
|
|
.time-panel button {
|
|
|
|
|
background: #444;
|
|
|
|
|
border: none;
|
|
|
|
|
color: #FFF;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
padding: 4px 8px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
.control-panel button:hover,
|
|
|
|
|
.time-panel button:hover {
|
|
|
|
|
background: #666;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Control panel styling */
|
|
|
|
|
.control-group {
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
text-align: left;
|
|
|
|
|
}
|
|
|
|
|
.control-group label {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
width: 150px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
.control-group input[type=range] {
|
|
|
|
|
width: 200px;
|
|
|
|
|
}
|
|
|
|
|
.control-buttons {
|
|
|
|
|
text-align: center;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
}
|
|
|
|
|
.control-buttons button {
|
|
|
|
|
margin: 0 5px;
|
|
|
|
|
padding: 6px 12px;
|
|
|
|
|
background: linear-gradient(90deg, #8000ff 0%, #ff00ff 100%);
|
|
|
|
|
border: none;
|
|
|
|
|
color: #FFF;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
box-shadow: 0 0 5px rgba(255,0,255,0.4);
|
|
|
|
|
}
|
|
|
|
|
.control-buttons button:hover {
|
|
|
|
|
opacity: 0.8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Main tab styling */
|
|
|
|
|
.top-level-tabs {
|
|
|
|
|
display: flex;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
}
|
|
|
|
|
.top-level-tabs .tabBtn {
|
|
|
|
|
flex: 1;
|
|
|
|
|
margin: 0 2px;
|
|
|
|
|
background: #444;
|
|
|
|
|
border: none;
|
|
|
|
|
color: #FFF;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
padding: 4px 8px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
.top-level-tabs .tabBtn.active {
|
|
|
|
|
background: linear-gradient(90deg, #8000ff 0%, #ff00ff 100%);
|
|
|
|
|
box-shadow: 0 0 5px rgba(255,0,255,0.4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sub-tab styling for Reward sub-tabs */
|
|
|
|
|
.reward-subtabs {
|
|
|
|
|
display: flex;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
}
|
|
|
|
|
.reward-subtabs .tabBtn {
|
|
|
|
|
flex: 1;
|
|
|
|
|
margin: 0 2px;
|
|
|
|
|
background: #444;
|
|
|
|
|
border: none;
|
|
|
|
|
color: #FFF;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
padding: 4px 8px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
.reward-subtabs .tabBtn.active {
|
|
|
|
|
background: linear-gradient(90deg, #8000ff 0%, #ff00ff 100%);
|
|
|
|
|
box-shadow: 0 0 5px rgba(255,0,255,0.4);
|
|
|
|
|
}
|
|
|
|
|
.reward-sub-content {
|
|
|
|
|
display: none; /* hidden by default */
|
|
|
|
|
}
|
|
|
|
|
.reward-sub-content.active {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* .tab-content is used for top-level content areas */
|
|
|
|
|
.tab-content {
|
|
|
|
|
display: none; /* hidden by default */
|
|
|
|
|
}
|
|
|
|
|
.tab-content.active {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Basic text styling for descriptions */
|
|
|
|
|
.tab-description {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
font-style: italic;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
opacity: 0.9;
|
|
|
|
|
}
|
|
|
|
|
.setting-description {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
font-style: italic;
|
|
|
|
|
margin-top: 4px;
|
|
|
|
|
opacity: 0.8;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Leaderboard styling */
|
|
|
|
|
.leaderboard-text {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
line-height: 1.2;
|
|
|
|
|
word-break: break-word; /* allow word wrapping */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Loading overlay for fast-forward */
|
|
|
|
|
#loadingOverlay {
|
|
|
|
|
position: absolute;
|
|
|
|
|
left: 0;
|
|
|
|
|
top: 0;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
background: rgba(0,0,0,0.8);
|
|
|
|
|
color: #FFF;
|
|
|
|
|
display: none;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
z-index: 10;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
@keyframes sinewave {
|
|
|
|
|
0% { transform: translateX(-50%) translateY(0); }
|
|
|
|
|
50% { transform: translateX(-50%) translateY(-20px); }
|
|
|
|
|
100% { transform: translateX(-50%) translateY(0); }
|
|
|
|
|
}
|
|
|
|
|
#loadingOverlay .sinewave {
|
|
|
|
|
font-size: 24px;
|
|
|
|
|
animation: sinewave 1s infinite;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Center the "?" help button on the right edge */
|
|
|
|
|
.help-button {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 50%;
|
|
|
|
|
right: 10px;
|
|
|
|
|
transform: translateY(-50%);
|
|
|
|
|
z-index: 3;
|
|
|
|
|
background: #444;
|
|
|
|
|
border: 1px solid #555;
|
|
|
|
|
color: #FFF;
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
padding: 4px 8px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
box-shadow: 0 0 8px rgba(255, 0, 255, 0.5);
|
|
|
|
|
}
|
|
|
|
|
.help-button:hover {
|
|
|
|
|
background: #666;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Help Modal Overlay */
|
|
|
|
|
.help-modal {
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
background: rgba(0,0,0,0.8);
|
|
|
|
|
display: none;
|
|
|
|
|
z-index: 9999;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center; /* center horizontally */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Help Modal Content */
|
|
|
|
|
.help-content {
|
|
|
|
|
position: relative;
|
|
|
|
|
width: 400px;
|
|
|
|
|
max-width: 90%;
|
|
|
|
|
padding: 16px;
|
|
|
|
|
border: 1px solid #555;
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
background: linear-gradient(135deg, rgba(20,0,40,0.9), rgba(0,0,0,0.7));
|
|
|
|
|
box-shadow: 0 0 10px rgba(255, 0, 255, 0.4);
|
|
|
|
|
text-align: left;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Close button inside modal */
|
|
|
|
|
.help-close {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 6px;
|
|
|
|
|
right: 8px;
|
|
|
|
|
background: transparent;
|
|
|
|
|
border: none;
|
|
|
|
|
color: #FFF;
|
|
|
|
|
font-size: 18px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
}
|
|
|
|
|
.help-close:hover {
|
|
|
|
|
color: #ff00ff;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Mobile-friendly adjustments */
|
2025-03-15 17:43:55 +00:00
|
|
|
@media (max-width: 1000px) {
|
2025-03-15 06:49:30 +00:00
|
|
|
.control-panel {
|
|
|
|
|
width: 90%;
|
|
|
|
|
bottom: 20px;
|
|
|
|
|
left: 50%;
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
}
|
|
|
|
|
.time-panel {
|
|
|
|
|
width: 90%;
|
|
|
|
|
top: 20px;
|
|
|
|
|
left: 50%;
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
}
|
|
|
|
|
/* Stack the leaderboards vertically in mobile to avoid overflow */
|
|
|
|
|
.leaderboardColumn {
|
|
|
|
|
width: 100% !important;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
padding-left: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
}
|