From df7dff68a83ac63c42556546959f587013d65aef Mon Sep 17 00:00:00 2001 From: mudabbir-ahmad Date: Tue, 11 Mar 2025 17:30:16 +0000 Subject: [PATCH] fixed a bit --- app/(auth)/login/page.js | 45 +- app/(main)/admin/page.js | 61 +- app/(main)/team-selection/page.js | 2 +- app/actions/auth.js | 72 +-- app/api/auth/[...nextauth]/route.js | 3 + app/globals.css | 918 +++++++++++++++++++--------- 6 files changed, 719 insertions(+), 382 deletions(-) diff --git a/app/(auth)/login/page.js b/app/(auth)/login/page.js index eca8ab9..b212d55 100644 --- a/app/(auth)/login/page.js +++ b/app/(auth)/login/page.js @@ -23,8 +23,9 @@ export default function Login() { password, }); - if (result.error) { + if (result?.error) { setError('Invalid username or password'); + setIsLoading(false); } else { // Fetch the user role to redirect appropriately const response = await fetch('/api/user'); @@ -39,17 +40,21 @@ export default function Login() { } catch (err) { setError('An unexpected error occurred'); console.error(err); - } finally { setIsLoading(false); } }; return ( -
-
-

Login

-
-
+
+
+
←
+
Login
+
+
+ +
+
+
-
+
+ {error &&
{error}
} - - {error &&

{error}

} -

- Don't have an account? Register -

+
+
+ +
+
+
🏠
+
+
+
📊
+
+
+
🏆
+
+
+
👤
+
); diff --git a/app/(main)/admin/page.js b/app/(main)/admin/page.js index 26e5fbc..44dbc42 100644 --- a/app/(main)/admin/page.js +++ b/app/(main)/admin/page.js @@ -72,27 +72,52 @@ export default function Admin() { return (
-
-

Admin Controls

+
+
←
+
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