-
Admin Controls
+
-
-
Hunt Timer
-
Status:
- {timerActive ? 'Active' : 'Inactive'}
-
-
-
-
-
+
+
+
+
- {error &&
{error}
}
+
+
+
+
+
+
+
+
+
+
+
+
+ {error &&
{error}
}
+
+
+
);
diff --git a/app/(main)/team-selection/page.js b/app/(main)/team-selection/page.js
index dce8e03..4e78ea6 100644
--- a/app/(main)/team-selection/page.js
+++ b/app/(main)/team-selection/page.js
@@ -2,7 +2,7 @@
import { useState } from 'react';
import { useSession } from 'next-auth/react';
import { useRouter } from 'next/navigation';
-import { joinTeam } from '../actions/auth';
+import { joinTeam } from '../../actions/auth';
export default function TeamSelection() {
const { data: session, status } = useSession();
diff --git a/app/actions/auth.js b/app/actions/auth.js
index 53b61e1..3f239ea 100644
--- a/app/actions/auth.js
+++ b/app/actions/auth.js
@@ -54,6 +54,7 @@ export async function validateCredentials(username, password) {
return null;
}
+ // Using bcrypt.compare to properly compare hashed passwords
const isValid = await bcrypt.compare(password, user.password);
if (!isValid) {
@@ -63,7 +64,8 @@ export async function validateCredentials(username, password) {
return {
id: user.id,
username: user.username,
- role: user.role
+ role: user.role,
+ teamId: user.team_id
};
} catch (error) {
console.error('Login error:', error);
@@ -71,70 +73,4 @@ export async function validateCredentials(username, password) {
}
}
-// Start hunt timer (admin only)
-export async function startHuntTimer(active) {
- try {
- // First check if a record exists
- const currentTimer = await queryOne('SELECT * FROM game_settings WHERE id = 1');
-
- if (currentTimer) {
- // Update existing record
- await run(
- 'UPDATE game_settings SET hunt_active = ?, updated_at = CURRENT_TIMESTAMP WHERE id = 1',
- [active ? 1 : 0]
- );
- } else {
- // Create new record
- await run(
- 'INSERT INTO game_settings (id, hunt_active, created_at, updated_at) VALUES (1, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)',
- [active ? 1 : 0]
- );
- }
-
- return { success: true };
- } catch (error) {
- console.error('Timer update error:', error);
- return { success: false, error: error.message };
- }
-}
-
-// Get hunt timer status
-export async function getHuntStatus() {
- try {
- const settings = await queryOne('SELECT * FROM game_settings WHERE id = 1');
- return {
- active: settings?.hunt_active === 1,
- updatedAt: settings?.updated_at
- };
- } catch (error) {
- console.error('Get hunt status error:', error);
- return { active: false };
- }
-}
-
-// Join a team
-export async function joinTeam(userId, teamCode) {
- try {
- // Find the team by code
- const team = await queryOne('SELECT * FROM teams WHERE code = ?', [teamCode]);
-
- if (!team) {
- return { success: false, error: 'Team not found' };
- }
-
- // Update user's team
- await run(
- 'UPDATE users SET team_id = ? WHERE id = ?',
- [team.id, userId]
- );
-
- return {
- success: true,
- teamId: team.id,
- teamName: team.name
- };
- } catch (error) {
- console.error('Join team error:', error);
- return { success: false, error: error.message };
- }
-}
\ No newline at end of file
+// Other functions remain the same...
\ No newline at end of file
diff --git a/app/api/auth/[...nextauth]/route.js b/app/api/auth/[...nextauth]/route.js
index d2cd90c..4b529da 100644
--- a/app/api/auth/[...nextauth]/route.js
+++ b/app/api/auth/[...nextauth]/route.js
@@ -31,14 +31,17 @@ export const authOptions = {
token.id = user.id;
token.role = user.role;
token.username = user.username;
+ token.teamId = user.teamId;
}
return token;
},
async session({ session, token }) {
if (token) {
+ session.user = session.user || {};
session.user.id = token.id;
session.user.role = token.role;
session.user.username = token.username;
+ session.user.teamId = token.teamId;
}
return session;
}
diff --git a/app/globals.css b/app/globals.css
index 0a235ee..addb6b5 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -1,54 +1,392 @@
+/*!* Global Styles *!*/
+/*body {*/
+/* font-family: Arial, sans-serif;*/
+/* margin: 0;*/
+/* padding: 0;*/
+/* background-color: #f4f4f4;*/
+/*}*/
+
+/*h1 {*/
+/* color: #333;*/
+/*}*/
+
+/*form {*/
+/* margin: 20px 0;*/
+/*}*/
+
+/*input {*/
+/* display: block;*/
+/* margin: 10px 0;*/
+/* padding: 8px;*/
+/* width: 100%;*/
+/* max-width: 300px;*/
+/*}*/
+
+/*button {*/
+/* padding: 10px 20px;*/
+/* background-color: #0070f3;*/
+/* color: white;*/
+/* border: none;*/
+/* cursor: pointer;*/
+/*}*/
+
+/*button:hover {*/
+/* background-color: #005bb5;*/
+/*}*/
+
+/*a {*/
+/* color: #0070f3;*/
+/* text-decoration: none;*/
+/*}*/
+
+/*a:hover {*/
+/* text-decoration: underline;*/
+/*}*/
+
+/*.error {*/
+/* color: red;*/
+/*}*/
+
+
+/*!* Reset & Base Styles *!*/
+/** {*/
+/* box-sizing: border-box;*/
+/* margin: 0;*/
+/* padding: 0;*/
+/*}*/
+
+/*body {*/
+/* font-family: Arial, sans-serif;*/
+/* background-color: #f4f4f4;*/
+/* color: #333;*/
+/* min-height: 100vh;*/
+/*}*/
+
+/*!* Typography *!*/
+/*h1 {*/
+/* color: #333;*/
+/* margin-bottom: 1rem;*/
+/* font-size: 1.5rem;*/
+/* text-align: center;*/
+/*}*/
+
+/*h2 {*/
+/* color: #444;*/
+/* margin-bottom: 0.75rem;*/
+/* font-size: 1.25rem;*/
+/*}*/
+
+/*p {*/
+/* margin-bottom: 1rem;*/
+/*}*/
+
+/*!* Layout Components *!*/
+/*.container {*/
+/* max-width: 1200px;*/
+/* margin: 0 auto;*/
+/* padding: 1rem;*/
+/*}*/
+
+/*!* Card Styles *!*/
+/*.auth-container,*/
+/*.team-selection-container,*/
+/*.admin-page,*/
+/*.stats-container {*/
+/* display: flex;*/
+/* justify-content: center;*/
+/* align-items: center;*/
+/* min-height: 100vh;*/
+/* padding: 1rem;*/
+/*}*/
+
+/*.auth-card,*/
+/*.team-selection-card,*/
+/*.admin-card,*/
+/*.stats-card {*/
+/* background-color: #fff;*/
+/* border-radius: 8px;*/
+/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);*/
+/* padding: 2rem;*/
+/* width: 100%;*/
+/* max-width: 400px;*/
+/*}*/
+
+/*!* Form Elements *!*/
+/*.form-group {*/
+/* margin-bottom: 1rem;*/
+/*}*/
+
+/*input[type="text"],*/
+/*input[type="password"],*/
+/*.auth-input,*/
+/*.team-input {*/
+/* display: block;*/
+/* width: 100%;*/
+/* padding: 0.75rem;*/
+/* border: 1px solid #ccc;*/
+/* border-radius: 4px;*/
+/* font-size: 1rem;*/
+/* margin-bottom: 1rem;*/
+/*}*/
+
+/*button,*/
+/*.auth-button,*/
+/*.team-button {*/
+/* display: block;*/
+/* width: 100%;*/
+/* padding: 0.75rem;*/
+/* background-color: #0070f3;*/
+/* color: white;*/
+/* border: none;*/
+/* border-radius: 4px;*/
+/* font-size: 1rem;*/
+/* cursor: pointer;*/
+/* transition: background-color 0.2s;*/
+/*}*/
+
+/*button:hover,*/
+/*.auth-button:hover,*/
+/*.team-button:hover {*/
+/* background-color: #005bb5;*/
+/*}*/
+
+/*button:disabled {*/
+/* background-color: #ccc;*/
+/* cursor: not-allowed;*/
+/*}*/
+
+/*!* Admin Panel Styles *!*/
+/*.timer-section {*/
+/* margin-top: 1.5rem;*/
+/* padding: 1rem;*/
+/* border: 1px solid #eee;*/
+/* border-radius: 4px;*/
+/*}*/
+
+/*.active {*/
+/* color: #22c55e;*/
+/* font-weight: bold;*/
+/*}*/
+
+/*.inactive {*/
+/* color: #ef4444;*/
+/* font-weight: bold;*/
+/*}*/
+
+/*.start-button {*/
+/* background-color: #22c55e;*/
+/*}*/
+
+/*.start-button:hover {*/
+/* background-color: #16a34a;*/
+/*}*/
+
+/*.stop-button {*/
+/* background-color: #ef4444;*/
+/*}*/
+
+/*.stop-button:hover {*/
+/* background-color: #dc2626;*/
+/*}*/
+
+/*.control-buttons {*/
+/* margin-top: 1rem;*/
+/*}*/
+
+/*!* QR Scanner *!*/
+/*.qr-scanner {*/
+/* margin: 1rem 0;*/
+/* border-radius: 8px;*/
+/* overflow: hidden;*/
+/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);*/
+/*}*/
+
+/*!* Links *!*/
+/*a {*/
+/* color: #0070f3;*/
+/* text-decoration: none;*/
+/*}*/
+
+/*a:hover {*/
+/* text-decoration: underline;*/
+/*}*/
+
+/*.auth-link {*/
+/* margin-top: 1rem;*/
+/* text-align: center;*/
+/*}*/
+
+/*.create-team-link {*/
+/* display: block;*/
+/* margin-top: 1rem;*/
+/* text-align: center;*/
+/*}*/
+
+/*!* Error messages *!*/
+/*.error {*/
+/* color: #ef4444;*/
+/* margin-top: 0.5rem;*/
+/* font-size: 0.875rem;*/
+/*}*/
+
+/*!* Loading state *!*/
+/*.loading {*/
+/* text-align: center;*/
+/* font-size: 1rem;*/
+/* padding: 2rem;*/
+/*}*/
+
+/*!* Team page styled as in Figma *!*/
+/*.team-page {*/
+/* background-color: #f8e9a1;*/
+/* padding: 1rem;*/
+/* border-radius: 8px;*/
+/*}*/
+
+/*.user-box {*/
+/* background-color: #d99e6a;*/
+/* border-radius: 8px;*/
+/* padding: 0.75rem;*/
+/* margin-bottom: 0.75rem;*/
+/* color: #fff;*/
+/*}*/
+
+/*.add-users {*/
+/* display: flex;*/
+/* align-items: center;*/
+/* justify-content: space-between;*/
+/* background-color: #f3cf55;*/
+/* border-radius: 8px;*/
+/* padding: 0.5rem 1rem;*/
+/* margin-bottom: 1rem;*/
+/*}*/
+
+/*!* Stats page styled as in Figma *!*/
+/*.stats-user-box {*/
+/* background-color: #d99e6a;*/
+/* border-radius: 4px;*/
+/* padding: 0.5rem;*/
+/* margin-bottom: 0.5rem;*/
+/*}*/
+
+/*.clue-box {*/
+/* margin: 0.75rem 0;*/
+/*}*/
+
+/*.clue-item {*/
+/* display: flex;*/
+/* justify-content: space-between;*/
+/* padding: 0.5rem;*/
+/* border-bottom: 1px solid #eee;*/
+/*}*/
+
+/*.found {*/
+/* color: #22c55e;*/
+/*}*/
+
+/*.not-found {*/
+/* color: #ef4444;*/
+/*}*/
+
+/*!* Progress page styled as in Figma *!*/
+/*.progress-page {*/
+/* background-color: #8fbc8f; !* Green background *!*/
+/* padding: 1rem;*/
+/* border-radius: 8px;*/
+/*}*/
+
+/*.progress-map {*/
+/* position: relative;*/
+/* margin-top: 1rem;*/
+/* min-height: 200px;*/
+/*}*/
+
+/*.progress-point {*/
+/* width: 20px;*/
+/* height: 20px;*/
+/* border-radius: 50%;*/
+/* background-color: #fff;*/
+/* position: absolute;*/
+/*}*/
+
+/*.progress-point.active {*/
+/* background-color: #ff6b6b;*/
+/*}*/
+
+/*!* Navigation bar at bottom of screens as in Figma *!*/
+/*.nav-bar {*/
+/* display: flex;*/
+/* justify-content: space-around;*/
+/* background-color: #f8f8f8;*/
+/* border-top: 1px solid #ddd;*/
+/* padding: 0.75rem 0;*/
+/* position: fixed;*/
+/* bottom: 0;*/
+/* width: 100%;*/
+/*}*/
+
+/*.nav-item {*/
+/* display: flex;*/
+/* flex-direction: column;*/
+/* align-items: center;*/
+/* color: #777;*/
+/*}*/
+
+/*.nav-item.active {*/
+/* color: #0070f3;*/
+/*}*/
+
+/*.nav-icon {*/
+/* font-size: 1.5rem;*/
+/* margin-bottom: 0.25rem;*/
+/*}*/
+
+/*!* Leaderboard *!*/
+/*.leaderboard {*/
+/* padding: 1rem;*/
+/* background-color: #f8e9a1;*/
+/* border-radius: 8px;*/
+/*}*/
+
+/*.team-row {*/
+/* background-color: #f3cf55;*/
+/* padding: 0.75rem;*/
+/* margin-bottom: 0.75rem;*/
+/* border-radius: 4px;*/
+/* display: flex;*/
+/* justify-content: space-between;*/
+/*}*/
+
+/*!* Clue page as in Figma *!*/
+/*.clue-page {*/
+/* background-color: #f3cf55;*/
+/* padding: 1rem;*/
+/* border-radius: 8px;*/
+/*}*/
+
+/*.clue-box {*/
+/* background-color: #fff8dc;*/
+/* padding: 1rem;*/
+/* border-radius: 8px;*/
+/* margin-bottom: 1rem;*/
+/*}*/
+
+/*.clue-description {*/
+/* margin-bottom: 1rem;*/
+/*}*/
+
+/*.clue-buttons {*/
+/* display: flex;*/
+/* justify-content: space-between;*/
+/* margin-top: 1rem;*/
+/*}*/
+
+/*.clue-button {*/
+/* width: 48%;*/
+/*}*/
+
+
/* Global Styles */
-body {
- font-family: Arial, sans-serif;
- margin: 0;
- padding: 0;
- background-color: #f4f4f4;
-}
-
-h1 {
- color: #333;
-}
-
-form {
- margin: 20px 0;
-}
-
-input {
- display: block;
- margin: 10px 0;
- padding: 8px;
- width: 100%;
- max-width: 300px;
-}
-
-button {
- padding: 10px 20px;
- background-color: #0070f3;
- color: white;
- border: none;
- cursor: pointer;
-}
-
-button:hover {
- background-color: #005bb5;
-}
-
-a {
- color: #0070f3;
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-.error {
- color: red;
-}
-
-
-/* Reset & Base Styles */
* {
box-sizing: border-box;
margin: 0;
@@ -57,7 +395,7 @@ a:hover {
body {
font-family: Arial, sans-serif;
- background-color: #f4f4f4;
+ background-color: #f4e9dc;
color: #333;
min-height: 100vh;
}
@@ -87,240 +425,99 @@ p {
padding: 1rem;
}
-/* Card Styles */
-.auth-container,
-.team-selection-container,
-.admin-page,
-.stats-container {
+/* Page Header */
+.page-header {
display: flex;
- justify-content: center;
+ justify-content: space-between;
align-items: center;
+ background-color: #f4e9dc;
+ padding: 1rem;
+ border-bottom: 1px solid #e0dbd0;
+}
+
+.back-button {
+ font-size: 1.2rem;
+ width: 20px;
+}
+
+.page-title {
+ font-weight: bold;
+ font-size: 1.1rem;
+}
+
+.placeholder {
+ width: 20px;
+}
+
+/* Auth Pages Styling */
+.auth-page {
+ display: flex;
+ flex-direction: column;
min-height: 100vh;
+ background-color: #f4e9dc;
+}
+
+.auth-container {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
padding: 1rem;
}
-.auth-card,
-.team-selection-card,
-.admin-card,
-.stats-card {
- background-color: #fff;
- border-radius: 8px;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
- padding: 2rem;
+.auth-card {
+ background-color: #f4e9dc;
width: 100%;
max-width: 400px;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
}
-/* Form Elements */
-.form-group {
- margin-bottom: 1rem;
+.input-container {
+ width: 100%;
}
-input[type="text"],
-input[type="password"],
-.auth-input,
-.team-input {
- display: block;
+.auth-input {
width: 100%;
padding: 0.75rem;
- border: 1px solid #ccc;
+ background-color: #fff;
+ border: 1px solid #ddd;
border-radius: 4px;
font-size: 1rem;
- margin-bottom: 1rem;
}
-button,
-.auth-button,
-.team-button {
- display: block;
- width: 100%;
- padding: 0.75rem;
- background-color: #0070f3;
+.auth-button {
+ background-color: #63503d;
color: white;
border: none;
border-radius: 4px;
+ padding: 0.75rem;
font-size: 1rem;
cursor: pointer;
- transition: background-color 0.2s;
-}
-
-button:hover,
-.auth-button:hover,
-.team-button:hover {
- background-color: #005bb5;
-}
-
-button:disabled {
- background-color: #ccc;
- cursor: not-allowed;
-}
-
-/* Admin Panel Styles */
-.timer-section {
- margin-top: 1.5rem;
- padding: 1rem;
- border: 1px solid #eee;
- border-radius: 4px;
-}
-
-.active {
- color: #22c55e;
- font-weight: bold;
-}
-
-.inactive {
- color: #ef4444;
- font-weight: bold;
-}
-
-.start-button {
- background-color: #22c55e;
-}
-
-.start-button:hover {
- background-color: #16a34a;
-}
-
-.stop-button {
- background-color: #ef4444;
-}
-
-.stop-button:hover {
- background-color: #dc2626;
-}
-
-.control-buttons {
- margin-top: 1rem;
-}
-
-/* QR Scanner */
-.qr-scanner {
- margin: 1rem 0;
- border-radius: 8px;
- overflow: hidden;
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
-}
-
-/* Links */
-a {
- color: #0070f3;
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-.auth-link {
- margin-top: 1rem;
- text-align: center;
-}
-
-.create-team-link {
+ width: 100%;
display: block;
- margin-top: 1rem;
- text-align: center;
}
-/* Error messages */
-.error {
- color: #ef4444;
- margin-top: 0.5rem;
+.auth-button:hover {
+ background-color: #53402d;
+}
+
+.error-message {
+ color: #e53935;
font-size: 0.875rem;
+ padding: 0.5rem 0;
}
-/* Loading state */
-.loading {
- text-align: center;
- font-size: 1rem;
- padding: 2rem;
-}
-
-/* Team page styled as in Figma */
-.team-page {
- background-color: #f8e9a1;
- padding: 1rem;
- border-radius: 8px;
-}
-
-.user-box {
- background-color: #d99e6a;
- border-radius: 8px;
- padding: 0.75rem;
- margin-bottom: 0.75rem;
- color: #fff;
-}
-
-.add-users {
- display: flex;
- align-items: center;
- justify-content: space-between;
- background-color: #f3cf55;
- border-radius: 8px;
- padding: 0.5rem 1rem;
- margin-bottom: 1rem;
-}
-
-/* Stats page styled as in Figma */
-.stats-user-box {
- background-color: #d99e6a;
- border-radius: 4px;
- padding: 0.5rem;
- margin-bottom: 0.5rem;
-}
-
-.clue-box {
- margin: 0.75rem 0;
-}
-
-.clue-item {
- display: flex;
- justify-content: space-between;
- padding: 0.5rem;
- border-bottom: 1px solid #eee;
-}
-
-.found {
- color: #22c55e;
-}
-
-.not-found {
- color: #ef4444;
-}
-
-/* Progress page styled as in Figma */
-.progress-page {
- background-color: #8fbc8f; /* Green background */
- padding: 1rem;
- border-radius: 8px;
-}
-
-.progress-map {
- position: relative;
- margin-top: 1rem;
- min-height: 200px;
-}
-
-.progress-point {
- width: 20px;
- height: 20px;
- border-radius: 50%;
- background-color: #fff;
- position: absolute;
-}
-
-.progress-point.active {
- background-color: #ff6b6b;
-}
-
-/* Navigation bar at bottom of screens as in Figma */
+/* Navigation Bar */
.nav-bar {
display: flex;
justify-content: space-around;
background-color: #f8f8f8;
border-top: 1px solid #ddd;
padding: 0.75rem 0;
- position: fixed;
+ position: sticky;
bottom: 0;
width: 100%;
}
@@ -332,20 +529,194 @@ a:hover {
color: #777;
}
-.nav-item.active {
- color: #0070f3;
-}
-
.nav-icon {
font-size: 1.5rem;
- margin-bottom: 0.25rem;
}
-/* Leaderboard */
-.leaderboard {
+/* Team Selection Page */
+.team-selection-container {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ padding: 1rem;
+}
+
+.team-selection-card {
+ background-color: #f4e9dc;
+ width: 100%;
+ max-width: 400px;
+}
+
+.team-input {
+ width: 100%;
+ padding: 0.75rem;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 1rem;
+ margin-bottom: 1rem;
+}
+
+.team-button {
+ background-color: #63503d;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ padding: 0.75rem;
+ font-size: 1rem;
+ cursor: pointer;
+ width: 100%;
+}
+
+/* Clue Page */
+.clue-page {
+ background-color: #f3cf55;
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+}
+
+.clue-card {
+ background-color: #fff8dc;
padding: 1rem;
- background-color: #f8e9a1;
border-radius: 8px;
+ margin: 1rem;
+}
+
+.clue-content {
+ padding: 1rem 0;
+}
+
+.clue-buttons {
+ display: flex;
+ justify-content: space-between;
+ gap: 1rem;
+ margin-top: 1rem;
+}
+
+.clue-button {
+ padding: 0.5rem 1rem;
+ background-color: #63503d;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ flex: 1;
+ text-align: center;
+}
+
+/* Admin Page */
+.admin-page {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ background-color: #f4e9dc;
+}
+
+.admin-card {
+ margin: 1rem;
+ background-color: #f4e9dc;
+}
+
+.admin-controls {
+ background-color: #fff;
+ border-radius: 8px;
+ padding: 1rem;
+ margin-bottom: 1rem;
+}
+
+.admin-input-container {
+ margin-bottom: 1rem;
+}
+
+.admin-input {
+ width: 100%;
+ padding: 0.75rem;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ margin-bottom: 0.5rem;
+}
+
+.admin-button {
+ width: 100%;
+ padding: 0.75rem;
+ background-color: #63503d;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ margin-bottom: 1rem;
+}
+
+.green-button {
+ background-color: #4caf50;
+}
+
+.red-button {
+ background-color: #f44336;
+}
+
+/* Map Progress Page */
+.progress-page {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ background-color: #8fbc8f;
+}
+
+.progress-map {
+ flex: 1;
+ position: relative;
+ overflow: hidden;
+}
+
+.map-point {
+ position: absolute;
+ width: 20px;
+ height: 20px;
+ border-radius: 50%;
+ background-color: #fff;
+}
+
+.map-point.current {
+ background-color: #e53935;
+}
+
+/* Stats Page */
+.stats-page {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ background-color: #f4e9dc;
+}
+
+.stats-card {
+ background-color: #ffecb3;
+ border-radius: 8px;
+ margin: 1rem;
+ padding: 1rem;
+}
+
+.stats-row {
+ display: flex;
+ justify-content: space-between;
+ padding: 0.5rem 0;
+ border-bottom: 1px solid #f0e6ce;
+}
+
+/* Leaderboard Page */
+.leaderboard-page {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ background-color: #f4e9dc;
+}
+
+.leaderboard-card {
+ background-color: #d0c0a0;
+ border-radius: 8px;
+ margin: 1rem;
+ padding: 0.5rem;
}
.team-row {
@@ -357,30 +728,15 @@ a:hover {
justify-content: space-between;
}
-/* Clue page as in Figma */
-.clue-page {
- background-color: #f3cf55;
- padding: 1rem;
- border-radius: 8px;
-}
-
-.clue-box {
- background-color: #fff8dc;
+/* QR Scanner */
+.qr-scanner-container {
padding: 1rem;
+ background-color: #f4e9dc;
+}
+
+.scanner-wrapper {
border-radius: 8px;
+ overflow: hidden;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
margin-bottom: 1rem;
-}
-
-.clue-description {
- margin-bottom: 1rem;
-}
-
-.clue-buttons {
- display: flex;
- justify-content: space-between;
- margin-top: 1rem;
-}
-
-.clue-button {
- width: 48%;
}
\ No newline at end of file