303 lines
10 KiB
HTML
Executable File
303 lines
10 KiB
HTML
Executable File
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Helios Server</title>
|
|
<link rel="icon" type="image/png" href="https://img.icons8.com/ios-filled/50/1793d1/sun--v1.png">
|
|
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@700&display=swap">
|
|
|
|
<style>
|
|
:root {
|
|
--text-color: #e0e0e0;
|
|
--accent-color: #1793d1;
|
|
}
|
|
/* Grundlayout */
|
|
body {
|
|
background-color: #1e1e1e;
|
|
color: #e0e0e0;
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
margin: 0;
|
|
display: flex;
|
|
justify-content: center; /* Zentriert alles horizontal */
|
|
min-height: 100vh;
|
|
}
|
|
|
|
/* Der Hauptcontainer - hält alles zusammen */
|
|
.container {
|
|
width: 90%;
|
|
max-width: 800px; /* Nicht breiter als 800px */
|
|
text-align: center;
|
|
padding-top: 20px;
|
|
}
|
|
|
|
/* Navigation oben rechts */
|
|
.top-nav {
|
|
position: absolute;
|
|
top: 20px;
|
|
right: 20px;
|
|
display: flex;
|
|
gap: 15px;
|
|
}
|
|
|
|
.nav-link {
|
|
color: var(--text-color);
|
|
font-size: 1.5rem;
|
|
padding: 10px;
|
|
border-radius: 50%;
|
|
transition: all 0.3s ease;
|
|
position: relative;
|
|
display: flex; /* Zum Zentrieren des Icons */
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 30px;
|
|
height: 30px;
|
|
background-color: rgba(255, 255, 255, 0.05);
|
|
text-decoration: none;
|
|
}
|
|
|
|
.nav-link:hover {
|
|
background-color: var(--accent-color);
|
|
color: #fff;
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 5px 15px rgba(23, 147, 209, 0.4);
|
|
}
|
|
|
|
.nav-link::after {
|
|
content: attr(data-tooltip); /* Holt Text aus HTML attribute */
|
|
position: absolute;
|
|
bottom: -35px;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
background-color: #333;
|
|
color: #fff;
|
|
padding: 5px 10px;
|
|
border-radius: 4px;
|
|
font-size: 0.8rem;
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
transition: opacity 0.3s;
|
|
white-space: nowrap;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.nav-link:hover::after {
|
|
opacity: 1;
|
|
visibility: visible;
|
|
}
|
|
|
|
/* Texte */
|
|
h1 {
|
|
font-family: 'JetBrains Mono', monospace; /* Die neue Code-Schrift */
|
|
font-size: 4rem;
|
|
margin-bottom: 10px;
|
|
color: #fff;
|
|
letter-spacing: 4px;
|
|
/* Ein leichter Leuchteffekt passend zum Blau */
|
|
text-shadow: 0 0 10px rgba(23, 147, 209, 0.3), 0 0 20px rgba(23, 147, 209, 0.2);
|
|
min-height: 1.2em; /* Verhindert das Springen des Layouts */
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
p { color: #aaa; line-height: 1.6; margin-bottom: 30px; }
|
|
|
|
/* Terminal Style */
|
|
.terminal {
|
|
background-color: #111;
|
|
border-left: 3px solid #1793d1;
|
|
padding: 20px;
|
|
font-family: 'JetBrains Mono', monospace;
|
|
text-align: left;
|
|
border-radius: 5px;
|
|
margin-bottom: 50px; /* Abstand nach unten zu den Games */
|
|
box-shadow: 0 10px 30px rgba(0,0,0,0.5);
|
|
}
|
|
/* Spezifische Farben für das Terminal-Banner */
|
|
.t-blue { color: #3498db; } /* Das Blau von ~]$ */
|
|
.t-yellow { color: #f1c40f; } /* Ein kräftiges Gelb für Symbole */
|
|
.t-white { color: #ffffff; } /* Reinweiß für den Rest */
|
|
|
|
.terminal pre {
|
|
margin: 0 0 20px 0;
|
|
font-family: 'JetBrains', monospace;
|
|
line-height: 1.2;
|
|
white-space: pre; /* Behält die Abstände der ASCII-Art bei */
|
|
}
|
|
|
|
.prompt { color: #2ecc71; }
|
|
.path { color: #3498db; }
|
|
.command { color: #e0e0e0; }
|
|
.title-cursor {
|
|
display: inline-block;
|
|
color: var(--accent-color); /* Nutzt dein Helios-Blau */
|
|
margin-left: 5px;
|
|
animation: blink 1s infinite;
|
|
font-family: 'JetBrains Mono', monospace;
|
|
font-weight: 300; /* Etwas dünner sieht oft edler aus */
|
|
}
|
|
@keyframes blink {
|
|
0%, 100% { opacity: 1; }
|
|
50% { opacity: 0; }
|
|
}
|
|
|
|
/* --- NEU: DASHBOARD GRID FÜR SPIELE --- */
|
|
.apps-title {
|
|
text-align: left;
|
|
margin-bottom: 20px;
|
|
font-weight: 300;
|
|
border-bottom: 1px solid #333;
|
|
padding-bottom: 10px;
|
|
color: #fff;
|
|
}
|
|
|
|
.dashboard-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); /* Automatische Spalten */
|
|
gap: 20px; /* Abstand zwischen den Karten */
|
|
}
|
|
|
|
/* Das Design der Karten */
|
|
.app-card {
|
|
background-color: #2a2a2a;
|
|
padding: 20px;
|
|
border-radius: 12px;
|
|
text-decoration: none;
|
|
color: white;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 15px;
|
|
transition: transform 0.2s, background-color 0.2s;
|
|
border: 1px solid #333;
|
|
}
|
|
|
|
.app-card:hover {
|
|
transform: translateY(-5px); /* Schwebe-Effekt */
|
|
background-color: #333;
|
|
border-color: #555;
|
|
}
|
|
|
|
.app-icon { font-size: 30px; }
|
|
|
|
/* Spezifische Farben für die Icons */
|
|
.icon-darts { color: #e67e22; }
|
|
.icon-games { color: #9b59b6; }
|
|
|
|
.app-info h3 { margin: 0; font-size: 18px; }
|
|
.app-info span { font-size: 12px; color: #888; }
|
|
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="top-nav">
|
|
<a href="https://code.helios.giize.com" class="nav-link" data-tooltip="Code" target="_blank">
|
|
<i class="fa-solid fa-code"></i>
|
|
</a>
|
|
<a href="https://git.helios.giize.com" class="nav-link" data-tooltip="Gitea" target="_blank">
|
|
<i class="fa-brands fa-git-alt"></i>
|
|
</a>
|
|
<a href="https://docker.helios.giize.com" class="nav-link" data-tooltip="Docker" target="_blank">
|
|
<i class="fa-brands fa-docker"></i>
|
|
</a>
|
|
<a href="https://admin.helios.giize.com" class="nav-link" data-tooltip="Admin" target="_blank">
|
|
<i class="fa-solid fa-server"></i>
|
|
</a>
|
|
</div>
|
|
<div class="container">
|
|
|
|
<h1><span id="typewriter"></span><span class="title-cursor">_</span></h1>
|
|
|
|
|
|
<div class="terminal">
|
|
<pre>
|
|
<span class="t-blue">SERVER STATS</span>
|
|
<span class="t-yellow">__ __ ___ -------------------------</span>
|
|
<span class="t-yellow">/ / / /__ / (_)___ _____</span> <span class="t-white">Users </span><span class="t-yellow">:</span> <span class="t-white" id="stat-users">0</span>
|
|
<span class="t-yellow">/ /_/ / _ \/ / / __ \/ ___/</span> <span class="t-white">Procs </span><span class="t-yellow">:</span> <span class="t-white" id="stat-procs">0</span>
|
|
<span class="t-yellow">/ __ / __/ / / /_/ (__ )</span> <span class="t-white">Load </span><span class="t-yellow">:</span> <span class="t-white" id="stat-load">0.0</span><span class="t-white">%</span>
|
|
<span class="t-yellow">/_/ /_/\___/_/_/\____/____/</span> <span class="t-white">Memory </span><span class="t-yellow">:</span> <span class="t-white" id="stat-memory">0.0</span><span class="t-white">%</span>
|
|
<span class="t-white">Disk </span><span class="t-yellow">:</span> <span class="t-white" id="stat-disk">0</span><span class="t-white">%</span></pre>
|
|
|
|
<span class="path">[</span><span class="prompt">admin@helios:</span> <span class="path">~]$</span>
|
|
<span class="command">./deploy-projects.sh --active</span>
|
|
</div>
|
|
|
|
<h2 class="apps-title">Apps & Dashboard</h2>
|
|
|
|
<div class="dashboard-grid">
|
|
|
|
<a href="/darts/" class="app-card">
|
|
<div class="app-icon icon-darts">🎯</div>
|
|
<div class="app-info">
|
|
<h3>Darts Counter</h3>
|
|
<span>Scoreboard & Stats</span>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="games/games_index.html" class="app-card">
|
|
<div class="app-icon icon-games">🕹️</div>
|
|
<div class="app-info">
|
|
<h3>Arcade</h3>
|
|
<span>Sammlung</span>
|
|
</div>
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<br><br><br>
|
|
</div>
|
|
<script>
|
|
const text = "Helios";
|
|
const speed = 150;
|
|
let i = 0;
|
|
|
|
// Funktion zum Hochzählen der Zahlen
|
|
function animateValue(id, start, end, duration, decimals = 0) {
|
|
const obj = document.getElementById(id);
|
|
const startTime = Date.now();
|
|
|
|
function update() {
|
|
const currentTime = Date.now();
|
|
const elapsed = currentTime - startTime;
|
|
const progress = Math.min(elapsed / duration, 1);
|
|
|
|
const currentVal = (progress * (end - start) + start).toFixed(decimals);
|
|
obj.innerHTML = currentVal;
|
|
|
|
if (progress < 1) {
|
|
requestAnimationFrame(update);
|
|
}
|
|
}
|
|
requestAnimationFrame(update);
|
|
}
|
|
|
|
function startStatsAnimation() {
|
|
// Hier definierst du Zielwerte, Dauer und Nachkommastellen
|
|
animateValue("stat-users", 0, 2, 1000, 0);
|
|
animateValue("stat-procs", 0, 186, 1200, 0);
|
|
animateValue("stat-load", 0, 14.3, 1500, 1);
|
|
animateValue("stat-memory", 0, 18.2, 1500, 1);
|
|
animateValue("stat-disk", 0, 6, 1500, 0);
|
|
}
|
|
|
|
function typeWriter() {
|
|
if (i < text.length) {
|
|
document.getElementById("typewriter").innerHTML += text.charAt(i);
|
|
i++;
|
|
setTimeout(typeWriter, speed);
|
|
} else {
|
|
// Wenn HELIOS fertig ist, starte die Zahlen-Animation
|
|
setTimeout(startStatsAnimation, 500); // Kurze Pause für den Effekt
|
|
}
|
|
}
|
|
|
|
// Beim Laden: Erst 800ms warten, dann Schreibmaschine starten
|
|
window.onload = () => {
|
|
setTimeout(typeWriter, 800);
|
|
};
|
|
</script>
|
|
</body>
|
|
</html> |