update add modules
This commit is contained in:
198
templates/hub.html
Normal file
198
templates/hub.html
Normal file
@@ -0,0 +1,198 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="el">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Grepolis Remote — Hub</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
|
||||
body {
|
||||
min-height: 100vh;
|
||||
background: #0f0f1a;
|
||||
font-family: 'Inter', 'Segoe UI', sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 2rem;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.hub-header {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
.hub-header h1 {
|
||||
font-size: 2.4rem;
|
||||
font-weight: 800;
|
||||
background: linear-gradient(135deg, #c8a44a, #f0c96e, #c8a44a);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
letter-spacing: -0.5px;
|
||||
}
|
||||
.hub-header p {
|
||||
color: #888;
|
||||
margin-top: 0.5rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.player-badge {
|
||||
display: inline-block;
|
||||
background: rgba(200, 164, 74, 0.15);
|
||||
border: 1px solid rgba(200, 164, 74, 0.35);
|
||||
color: #c8a44a;
|
||||
padding: 4px 14px;
|
||||
border-radius: 20px;
|
||||
font-size: 0.82rem;
|
||||
font-weight: 600;
|
||||
margin-top: 0.7rem;
|
||||
}
|
||||
|
||||
.hub-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
|
||||
gap: 1.5rem;
|
||||
max-width: 900px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.hub-card {
|
||||
background: linear-gradient(160deg, #1e1e30 0%, #181824 100%);
|
||||
border: 1px solid #2a2a40;
|
||||
border-radius: 18px;
|
||||
padding: 2rem;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.hub-card::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
border-radius: 18px;
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
.hub-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 12px 40px rgba(0,0,0,0.5);
|
||||
}
|
||||
.hub-card:hover::before { opacity: 1; }
|
||||
|
||||
/* Admin Mode — gold */
|
||||
.hub-card.admin { border-color: #3a3020; }
|
||||
.hub-card.admin::before { background: radial-gradient(circle at top left, rgba(200,164,74,0.08), transparent 70%); }
|
||||
.hub-card.admin:hover { border-color: #c8a44a; box-shadow: 0 12px 40px rgba(200,164,74,0.15); }
|
||||
|
||||
/* Farm Manager — green */
|
||||
.hub-card.farm { border-color: #1a3020; }
|
||||
.hub-card.farm::before { background: radial-gradient(circle at top left, rgba(74,200,100,0.08), transparent 70%); }
|
||||
.hub-card.farm:hover { border-color: #4acc64; box-shadow: 0 12px 40px rgba(74,200,100,0.15); }
|
||||
|
||||
/* Live Tracker — blue (coming soon, dimmed) */
|
||||
.hub-card.tracker { border-color: #1a2030; opacity: 0.65; cursor: not-allowed; }
|
||||
.hub-card.tracker:hover { transform: none; box-shadow: none; border-color: #1a2030; }
|
||||
|
||||
.card-icon {
|
||||
font-size: 2.8rem;
|
||||
margin-bottom: 1rem;
|
||||
display: block;
|
||||
}
|
||||
.card-title {
|
||||
font-size: 1.3rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.hub-card.admin .card-title { color: #c8a44a; }
|
||||
.hub-card.farm .card-title { color: #4acc64; }
|
||||
.hub-card.tracker .card-title { color: #6fcfcf; }
|
||||
|
||||
.card-desc {
|
||||
font-size: 0.875rem;
|
||||
color: #888;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.soon-badge {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
background: rgba(111,207,207,0.15);
|
||||
border: 1px solid rgba(111,207,207,0.3);
|
||||
color: #6fcfcf;
|
||||
font-size: 0.7rem;
|
||||
font-weight: 700;
|
||||
padding: 2px 10px;
|
||||
border-radius: 10px;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
margin-top: 2.5rem;
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
.back-link:hover { color: #aaa; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="hub-header">
|
||||
<h1>⚔️ Grepolis Remote</h1>
|
||||
<p>Επέλεξε λειτουργία</p>
|
||||
<span class="player-badge" id="player-badge">Φόρτωση...</span>
|
||||
</div>
|
||||
|
||||
<div class="hub-grid">
|
||||
|
||||
<a href="/player/{{ player_id }}/admin" class="hub-card admin">
|
||||
<span class="card-icon">🏛️</span>
|
||||
<div class="card-title">Admin Mode</div>
|
||||
<div class="card-desc">Κτίρια, στρατολόγηση, αγορά, ουρά κατασκευών και πλήρης έλεγχος πόλεων.</div>
|
||||
</a>
|
||||
|
||||
<a href="/player/{{ player_id }}/farm" class="hub-card farm">
|
||||
<span class="card-icon">🌾</span>
|
||||
<div class="card-title">Farm Manager</div>
|
||||
<div class="card-desc">Αυτόματη συλλογή πόρων από χωριά. Ρυθμίσεις χρόνου λεηλασίας και έλεγχος με ένα κλικ.</div>
|
||||
</a>
|
||||
|
||||
<div class="hub-card tracker">
|
||||
<span class="soon-badge">Σύντομα</span>
|
||||
<span class="card-icon">🛡️</span>
|
||||
<div class="card-title">Live Tracker</div>
|
||||
<div class="card-desc">Παρακολούθηση κινήσεων στρατού σε πραγματικό χρόνο. Εισερχόμενες επιθέσεις και ενισχύσεις.</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<a href="/" class="back-link">← Επιστροφή στην επιλογή παίκτη</a>
|
||||
|
||||
<script>
|
||||
// Fetch player name to show in the badge
|
||||
const playerId = '{{ player_id }}';
|
||||
fetch(`/dashboard/towns?player_id=${playerId}`)
|
||||
.then(r => r.json())
|
||||
.then(towns => {
|
||||
if (towns && towns.length > 0) {
|
||||
const t = towns[0];
|
||||
document.getElementById('player-badge').textContent =
|
||||
`${t.player} · ${t.world_id}${t.alliance_name ? ' · ' + t.alliance_name : ''}`;
|
||||
} else {
|
||||
document.getElementById('player-badge').textContent = `ID: ${playerId}`;
|
||||
}
|
||||
})
|
||||
.catch(() => { document.getElementById('player-badge').textContent = `ID: ${playerId}`; });
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user