diff --git a/admin.php b/admin.php new file mode 100644 index 0000000..57b2cd9 --- /dev/null +++ b/admin.php @@ -0,0 +1,119 @@ +exec("UPDATE cities SET current_red_percentage = 100, is_liberated = 0"); + $db->exec("UPDATE planets SET terrestrial_control = 0, status = 'hostile'"); + header("Location: admin.php?success=reset"); + exit; +} + +$total_planets = $db->query("SELECT COUNT(*) FROM planets")->fetchColumn(); +$liberated_planets = $db->query("SELECT COUNT(*) FROM planets WHERE status = 'stable'")->fetchColumn(); +$total_cities = $db->query("SELECT COUNT(*) FROM cities")->fetchColumn(); +$liberated_cities = $db->query("SELECT COUNT(*) FROM cities WHERE is_liberated = 1")->fetchColumn(); + +$planets_stats = $db->query("SELECT * FROM planets ORDER BY terrestrial_control DESC")->fetchAll(); + +// Mock Resources +$resources = [ + 'Metal' => ['val' => '136 053', 'max' => '1 210 000', 'prod' => '+1 980', 'icon' => 'fa-cube'], + 'Crystal' => ['val' => '127 322', 'max' => '1 010 000', 'prod' => '+1 703', 'icon' => 'fa-gem'], + 'Deuterium' => ['val' => '32 277', 'max' => '50 000', 'prod' => '+28', 'icon' => 'fa-flask'], + 'Energy' => ['val' => '2 100', 'max' => '2 100', 'prod' => '', 'icon' => 'fa-bolt'], + 'Dark Matter' => ['val' => '4 930', 'max' => '', 'prod' => '', 'icon' => 'fa-atom'] +]; +?> + + + + + + Console MJ + + + + + +
+
+ $res): ?> +
+
+
+ +
+ +
+
+ +
+
+ Retour au Secteur +

Console de Commandement MJ

+ +
+
+
Planètes Libérées
+
/
+
+
+
Villes Libérées
+
/
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
PlanèteTypeStatutContrôle SolAction
%Localiser
+
+
+ + diff --git a/assets/css/custom.css b/assets/css/custom.css index 50e0502..ba98e4a 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -1,302 +1,128 @@ +:root { + --bg-black: #000000; + --border-color: #2d3545; + --text-primary: #ffffff; + --text-muted: #8c92a3; + --accent-blue: #3b82f6; + --danger-red: #ef4444; + --success-green: #22c55e; + --nord-0: #2e3440; + --nord-1: #3b4252; + --nord-2: #434c5e; + --nord-3: #4c566a; + --nord-4: #d8dee9; + --nord-5: #e5e9f0; + --nord-6: #eceff4; + --nord-7: #8fbcbb; + --nord-8: #88c0d0; + --nord-9: #81a1c1; + --nord-10: #5e81ac; +} + body { - background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab); - background-size: 400% 400%; - animation: gradient 15s ease infinite; - color: #212529; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; - font-size: 14px; + background-color: var(--bg-black); + color: var(--text-primary); + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + font-size: 13px; margin: 0; + padding: 0; +} + +.text-muted { color: var(--text-muted); } +.text-accent { color: var(--nord-8); } +.text-success { color: var(--success-green); } +.text-danger { color: var(--danger-red); } + +/* Global Layout */ +#main-wrapper { + display: flex; + flex-direction: column; min-height: 100vh; } -.main-wrapper { +/* Resources Bar */ +#top-bar { + background: var(--nord-0); + border-bottom: 2px solid var(--nord-1); + padding: 10px; + z-index: 100; +} + +.resource-container { display: flex; - align-items: center; justify-content: center; - min-height: 100vh; - width: 100%; - padding: 20px; - box-sizing: border-box; - position: relative; - z-index: 1; + gap: 15px; + flex-wrap: wrap; } -@keyframes gradient { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% 50%; - } - 100% { - background-position: 0% 50%; - } +.resource-box { + background: rgba(0,0,0,0.5); + border: 1px solid var(--nord-3); + padding: 8px 15px; + min-width: 140px; } -.chat-container { - width: 100%; - max-width: 600px; - background: rgba(255, 255, 255, 0.85); - border: 1px solid rgba(255, 255, 255, 0.3); - border-radius: 20px; - display: flex; - flex-direction: column; - height: 85vh; - box-shadow: 0 20px 40px rgba(0,0,0,0.2); - backdrop-filter: blur(15px); - -webkit-backdrop-filter: blur(15px); - overflow: hidden; +/* Grid System */ +.galaxy-map { + display: grid; + gap: 2px; + background: var(--nord-1); + border: 2px solid var(--nord-3); } -.chat-header { - padding: 1.5rem; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); - background: rgba(255, 255, 255, 0.5); - font-weight: 700; - font-size: 1.1rem; - display: flex; - justify-content: space-between; - align-items: center; +.slot { + background: #0a0a0a; + transition: all 0.2s; } -.chat-messages { - flex: 1; - overflow-y: auto; - padding: 1.5rem; - display: flex; - flex-direction: column; - gap: 1.25rem; +.slot:hover { + background: #1a1a1a; + box-shadow: inset 0 0 10px rgba(136, 192, 208, 0.2); } -/* Custom Scrollbar */ -::-webkit-scrollbar { - width: 6px; -} - -::-webkit-scrollbar-track { - background: transparent; -} - -::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0.3); - border-radius: 10px; -} - -::-webkit-scrollbar-thumb:hover { - background: rgba(255, 255, 255, 0.5); -} - -.message { - max-width: 85%; - padding: 0.85rem 1.1rem; - border-radius: 16px; - line-height: 1.5; - font-size: 0.95rem; - box-shadow: 0 4px 15px rgba(0,0,0,0.05); - animation: fadeIn 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); -} - -@keyframes fadeIn { - from { opacity: 0; transform: translateY(20px) scale(0.95); } - to { opacity: 1; transform: translateY(0) scale(1); } -} - -.message.visitor { - align-self: flex-end; - background: linear-gradient(135deg, #212529 0%, #343a40 100%); - color: #fff; - border-bottom-right-radius: 4px; -} - -.message.bot { - align-self: flex-start; - background: #ffffff; - color: #212529; - border-bottom-left-radius: 4px; -} - -.chat-input-area { - padding: 1.25rem; - background: rgba(255, 255, 255, 0.5); - border-top: 1px solid rgba(0, 0, 0, 0.05); -} - -.chat-input-area form { - display: flex; - gap: 0.75rem; -} - -.chat-input-area input { - flex: 1; - border: 1px solid rgba(0, 0, 0, 0.1); - border-radius: 12px; - padding: 0.75rem 1rem; - outline: none; - background: rgba(255, 255, 255, 0.9); - transition: all 0.3s ease; -} - -.chat-input-area input:focus { - border-color: #23a6d5; - box-shadow: 0 0 0 3px rgba(35, 166, 213, 0.2); -} - -.chat-input-area button { - background: #212529; - color: #fff; - border: none; - padding: 0.75rem 1.5rem; - border-radius: 12px; - cursor: pointer; - font-weight: 600; - transition: all 0.3s ease; -} - -.chat-input-area button:hover { +/* Forms */ +input[type="number"], input[type="text"] { background: #000; - transform: translateY(-2px); - box-shadow: 0 5px 15px rgba(0,0,0,0.2); -} - -/* Background Animations */ -.bg-animations { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 0; - overflow: hidden; - pointer-events: none; -} - -.blob { - position: absolute; - width: 500px; - height: 500px; - background: rgba(255, 255, 255, 0.2); - border-radius: 50%; - filter: blur(80px); - animation: move 20s infinite alternate cubic-bezier(0.45, 0, 0.55, 1); -} - -.blob-1 { - top: -10%; - left: -10%; - background: rgba(238, 119, 82, 0.4); -} - -.blob-2 { - bottom: -10%; - right: -10%; - background: rgba(35, 166, 213, 0.4); - animation-delay: -7s; - width: 600px; - height: 600px; -} - -.blob-3 { - top: 40%; - left: 30%; - background: rgba(231, 60, 126, 0.3); - animation-delay: -14s; - width: 450px; - height: 450px; -} - -@keyframes move { - 0% { transform: translate(0, 0) rotate(0deg) scale(1); } - 33% { transform: translate(150px, 100px) rotate(120deg) scale(1.1); } - 66% { transform: translate(-50px, 200px) rotate(240deg) scale(0.9); } - 100% { transform: translate(0, 0) rotate(360deg) scale(1); } -} - -.admin-link { - font-size: 14px; + border: 1px solid var(--nord-3); color: #fff; - text-decoration: none; - background: rgba(0, 0, 0, 0.2); - padding: 0.5rem 1rem; - border-radius: 8px; - transition: all 0.3s ease; + padding: 5px; } -.admin-link:hover { - background: rgba(0, 0, 0, 0.4); - text-decoration: none; -} - -/* Admin Styles */ -.admin-container { - max-width: 900px; - margin: 3rem auto; - padding: 2.5rem; - background: rgba(255, 255, 255, 0.85); - backdrop-filter: blur(20px); - -webkit-backdrop-filter: blur(20px); - border-radius: 24px; - box-shadow: 0 20px 50px rgba(0,0,0,0.15); - border: 1px solid rgba(255, 255, 255, 0.4); - position: relative; - z-index: 1; -} - -.admin-container h1 { - margin-top: 0; - color: #212529; - font-weight: 800; -} - -.table { - width: 100%; - border-collapse: separate; - border-spacing: 0 8px; - margin-top: 1.5rem; -} - -.table th { - background: transparent; +button { + background: var(--nord-3); + color: #fff; border: none; - padding: 1rem; - color: #6c757d; - font-weight: 600; - text-transform: uppercase; - font-size: 0.75rem; - letter-spacing: 1px; + padding: 8px 15px; + cursor: pointer; + font-weight: bold; + transition: background 0.2s; } -.table td { - background: #fff; - padding: 1rem; - border: none; +button:hover { + background: var(--nord-10); } -.table tr td:first-child { border-radius: 12px 0 0 12px; } -.table tr td:last-child { border-radius: 0 12px 12px 0; } - -.form-group { - margin-bottom: 1.25rem; +/* Admin Console Fixes */ +.stat-card { + background: var(--nord-0); + border: 1px solid var(--nord-3); + padding: 20px; } -.form-group label { - display: block; - margin-bottom: 0.5rem; - font-weight: 600; - font-size: 0.9rem; -} - -.form-control { +table { width: 100%; - padding: 0.75rem 1rem; - border: 1px solid rgba(0, 0, 0, 0.1); - border-radius: 12px; - background: #fff; - transition: all 0.3s ease; - box-sizing: border-box; + border-collapse: collapse; } -.form-control:focus { - outline: none; - border-color: #23a6d5; - box-shadow: 0 0 0 3px rgba(35, 166, 213, 0.1); +th { + background: var(--nord-1); + color: var(--nord-8); + text-align: left; + padding: 12px; + font-size: 11px; +} + +td { + padding: 10px; + border-bottom: 1px solid var(--nord-1); } \ No newline at end of file diff --git a/assets/pasted-20260221-235039-d61e193a.png b/assets/pasted-20260221-235039-d61e193a.png new file mode 100644 index 0000000..f3f136e Binary files /dev/null and b/assets/pasted-20260221-235039-d61e193a.png differ diff --git a/assets/pasted-20260222-000144-8d808175.png b/assets/pasted-20260222-000144-8d808175.png new file mode 100644 index 0000000..8b8cb54 Binary files /dev/null and b/assets/pasted-20260222-000144-8d808175.png differ diff --git a/index.php b/index.php index 7205f3d..35a9c41 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,392 @@ ['val' => '136 053', 'max' => '1 210 000', 'prod' => '+1 980', 'icon' => 'fa-cube'], + 'Crystal' => ['val' => '127 322', 'max' => '1 010 000', 'prod' => '+1 703', 'icon' => 'fa-gem'], + 'Deuterium' => ['val' => '32 277', 'max' => '50 000', 'prod' => '+28', 'icon' => 'fa-flask'], + 'Energy' => ['val' => '2 100', 'max' => '2 100', 'prod' => '', 'icon' => 'fa-bolt'], + 'Dark Matter' => ['val' => '4 930', 'max' => '', 'prod' => '', 'icon' => 'fa-atom'] +]; + +if ($view === 'sector') { + // Fetch Objects for the current sector (6x6 grid = 36 slots) + $stmt = $db->prepare("SELECT * FROM planets WHERE galaxy_id = ? AND sector_id = ? AND slot BETWEEN 1 AND ?"); + $stmt->execute([$galaxy_id, $sector_id, $grid_size]); + $objects_raw = $stmt->fetchAll(); + + $grid = array_fill(1, $grid_size, null); + foreach ($objects_raw as $obj) { + if ($obj['slot'] >= 1 && $obj['slot'] <= $grid_size) { + $grid[$obj['slot']] = $obj; + } + } + $page_title = "Secteur $sector_id [G$galaxy_id]"; +} else { + // Galaxy View: Fetch all planets in this galaxy to build mini-maps + $stmt = $db->prepare("SELECT sector_id, slot, status, type FROM planets WHERE galaxy_id = ? ORDER BY sector_id, slot ASC"); + $stmt->execute([$galaxy_id]); + $all_planets = $stmt->fetchAll(); + + $sector_data = []; + $active_sectors = []; + foreach ($all_planets as $p) { + $sector_data[$p['sector_id']][$p['slot']] = [ + 'status' => $p['status'], + 'type' => $p['type'] + ]; + if (!in_array($p['sector_id'], $active_sectors)) { + $active_sectors[] = (int)$p['sector_id']; + } + } + $page_title = "Galaxie $galaxy_id"; +} + +function getStatusColor($status, $type = 'planet') { + if ($status == 'hostile') return '#ef4444'; // Rouge + if ($status == 'controlled' || $status == 'contested') return '#5e81ac'; // Bleu cassé + if ($status == 'allied' || $status == 'stable') return '#a3be8c'; // Vert cassé + if ($status == 'resource' || $type == 'asteroid') return '#f59e0b'; // Ressources / Orange + if ($status == 'pna') return '#d08770'; // PNA + if ($status == 'vortex' || $type == 'black_hole') return '#8b5cf6'; // Vortex / Violet + if ($status == 'empty' || $type == 'empty') return 'rgba(255,255,255,0.05)'; + if ($status == 'inhabited') return '#eceff4'; // Planète inhabitée (Blanc cassé) + return 'rgba(255,255,255,0.05)'; // Fallback to empty +} -$phpVersion = PHP_VERSION; -$now = date('Y-m-d H:i:s'); ?> - - + + - - - New Style - - - - - - - - - - - - - - - - - - - + + + <?php echo $page_title; ?> + + + -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

+
+
+
+ $res): ?> +
+
+
+
+ +
+ +
+
+ +
+ + +
+ + + + + +
+ +
+ + +
+ + +
+ + + +
+ +
+ +
+ + + + +
+ + +
+
Système vide
+
Planète inhabitée
+
Planète hostile
+
Ressources
+
Planète en PNA
+
Planète alliée / stable
+
Planète contrôlée
+
Vortex
+
+
-
- + + Console MJ - + \ No newline at end of file