200 lines
6.0 KiB
HTML
200 lines
6.0 KiB
HTML
<!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 }}/{{ world_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 }}/{{ world_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 }}';
|
|
const worldId = '{{ world_id }}';
|
|
fetch(`/dashboard/towns?player_id=${playerId}&world_id=${worldId}`)
|
|
.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>
|