Files
peworkshop/app/(main)/map/map.module.css
T
bobbert 8d0bca1d87 fixed a bunch of styling and component usage
made sure almost all viewer pages use the navbar component properly instead of using their hardcoded version, started to match the styling of the design for a lot of pages
2025-03-23 14:33:53 +00:00

304 lines
5.9 KiB
CSS

.map-page {
display: flex;
flex-direction: column;
width: 100%;
height: 100vh; /* Full viewport height */
overflow: hidden; /* Hide overflow at page level */
position: relative;
background-color: #69b5a8;
}
.map-banner {
background-image: url("/images/Bottom-Bar.svg");
background-repeat: no-repeat;
background-size: cover;
background-position: center;
color: white;
padding: 15px 20px;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
}
.team-name {
font-size: 1.1rem;
font-weight: bold;
color: white;
flex: 1;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding-right: 5px;
}
.elapsed-time {
position: absolute;
left: 50%;
transform: translateX(-50%);
text-align: center;
color: white;
font-weight: bold;
padding: 5px 10px;
background-color: rgba(0, 0, 0, 0.2);
border-radius: 8px;
flex: 0 0 auto; /* Don't grow or shrink */
margin: 0 10px;
}
.time-value {
font-size: 18px;
font-weight: bold;
}
.team-code {
font-size: 1.1rem;
font-weight: bold;
color: white;
flex: 1;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding-left: 5px;
}
/* Map container takes all available space */
.map-container {
flex: 1; /* Take all available space */
position: relative;
width: 100%;
height: 100%;
background-color: #69b5a8; /* Background color */
overflow: auto; /* Enable scrolling */
display: block; /* Use block for proper scrolling */
}
.treasure-map {
position: relative;
width: fit-content; /* Allow natural width */
min-width: 100%; /* Ensure it's at least full width */
height: fit-content;
min-height: 100%;
display: flex;
justify-content: flex-end; /* Align to the right */
align-items: flex-start; /* Align to the top */
}
/* Map image container for positioning */
.map-image-container {
position: relative;
width: fit-content;
height: fit-content;
}
/* Map image styling */
.map-image {
display: block;
max-width: none; /* Don't constrain the image */
width: auto;
height: auto;
}
/* Map overlay positioned absolutely over the map image */
.map-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: auto; /* Allow interaction with buttons */
z-index: 20; /* Ensure overlay is above map */
box-sizing: border-box;
}
.loading-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 50;
background-color: rgba(105, 181, 168, 0.8);
}
.loading-spinner {
border: 4px solid #f3f3f3;
border-top: 4px solid #68543c;
border-radius: 50%;
width: 40px;
height: 40px;
animation: spin 1s linear infinite;
margin-bottom: 20px;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.map-error {
padding: 20px;
text-align: center;
}
/* Navigation bar - now sticky at the bottom */
.nav-bar {
display: flex;
justify-content: space-around;
background-color: white;
border-top: 1px solid #ddd;
padding: 10px 0;
position: fixed; /* Changed from sticky to fixed */
bottom: 0; /* Stick to bottom */
left: 0;
width: 100%;
box-sizing: border-box;
z-index: 100; /* Ensure it stays on top */
flex-shrink: 0; /* Prevent navbar from shrinking */
margin: 0;
height: auto;
}
.nav-item {
display: flex;
flex-direction: column;
align-items: center;
text-decoration: none;
color: #666;
flex: 1;
padding: 8px 0;
}
.nav-icon {
font-size: 22px;
margin-bottom: 3px;
}
.nav-label {
font-size: 12px;
}
.nav-item.active {
color: #68543c;
}
/* Refresh map button styling */
.refresh-map-button {
position: fixed;
bottom: 80px;
right: 20px;
background-color: rgba(104, 84, 60, 0.9);
color: white;
border: none;
border-radius: 8px;
padding: 8px 16px;
font-size: 14px;
cursor: pointer;
z-index: 1000;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
}
.refresh-map-button:hover {
background-color: rgba(104, 84, 60, 1);
}
/* Make sure the map is responsive */
@media (max-width: 480px) {
.team-name {
font-size: 16px;
}
.team-code {
font-size: 14px;
}
.time-value {
font-size: 16px;
}
.nav-icon {
font-size: 20px;
}
.nav-label {
font-size: 11px;
}
}
/* Clue button styling */
.clue-button {
position: absolute;
width: 60px;
height: 60px;
border-radius: 50%;
background-color: #9e9e9e; /* Default grey background */
color: white;
font-weight: bold;
border: 3px solid #757575;
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
z-index: 30;
transform: translate(-50%, -50%); /* Center the button on its position */
}
.clue-button:hover {
transform: translate(-50%, -50%) scale(1.1);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);
}
/* Clue status styles */
.clue-found {
background-color: #2e7d32; /* Green for found clues */
border-color: #1b5e20;
}
.clue-available {
background-color: #ff9800; /* Orange for available clues */
border-color: #e65100;
animation: pulse 1.5s infinite;
}
.clue-locked {
background-color: #9e9e9e; /* Grey for locked clues */
border-color: #757575;
cursor: default;
}
/* Add this new class for skipped clues after your existing clue status styles */
.clue-skipped {
background-color: #1976d2; /* Dark blue for skipped clues */
border-color: #0d47a1;
cursor: pointer;
}
/* Pulse animation for available clues */
@keyframes pulse {
0% {
transform: translate(-50%, -50%) scale(1);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
}
50% {
transform: translate(-50%, -50%) scale(1.1);
box-shadow: 0 4px 8px rgba(255, 152, 0, 0.6);
}
100% {
transform: translate(-50%, -50%) scale(1);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
}
}