Redesign: 503-Seite mit CluBird-Icon, Progress-Bar und Schritt-Anzeige

main v1.1.398
boban 2026-04-27 02:52:20 +02:00
parent 93bcb56605
commit 22b6a9e0f2
1 changed files with 128 additions and 71 deletions

View File

@ -4,107 +4,164 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="refresh" content="8">
<title>Wartung · CluBird</title>
<title>Update läuft · CluBird</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
height: 100%;
background: #0f1117;
color: #e2e4ea;
background: #0d0f14;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
display: flex;
align-items: center;
justify-content: center;
}
.card {
.wrap {
width: 100%;
max-width: 420px;
padding: 40px 36px;
background: #181c24;
border: 1px solid #2a2e3d;
border-radius: 16px;
max-width: 400px;
padding: 0 16px;
text-align: center;
}
.logo {
display: inline-flex;
align-items: center;
gap: 10px;
margin-bottom: 32px;
.icon-ring {
position: relative;
width: 64px;
height: 64px;
margin: 0 auto 28px;
}
.logo-icon {
width: 36px;
height: 36px;
background: linear-gradient(135deg, #6366f1, #8b5cf6);
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
.icon-ring svg.bird {
position: relative;
z-index: 1;
width: 64px;
height: 64px;
background: linear-gradient(135deg, #6366f1, #4338ca);
border-radius: 18px;
padding: 14px;
box-shadow: 0 0 28px rgba(99,102,241,.45);
}
.logo-text {
font-size: 17px;
.icon-ring::after {
content: '';
position: absolute;
inset: -6px;
border-radius: 24px;
border: 1.5px solid rgba(99,102,241,.35);
animation: ringpulse 2s ease-in-out infinite;
}
@keyframes ringpulse {
0%, 100% { opacity: .3; transform: scale(1); }
50% { opacity: 1; transform: scale(1.07); }
}
.brand {
font-size: 13px;
font-weight: 600;
color: #e2e4ea;
letter-spacing: -.3px;
letter-spacing: .4px;
color: #6b7280;
text-transform: uppercase;
margin-bottom: 12px;
}
.spinner {
width: 48px;
height: 48px;
margin: 0 auto 24px;
border-radius: 50%;
border: 3px solid #2a2e3d;
border-top-color: #6366f1;
animation: spin 1s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
.brand span { color: #6366f1; }
h1 {
font-size: 18px;
font-weight: 600;
color: #e2e4ea;
margin-bottom: 10px;
letter-spacing: -.2px;
font-size: 20px;
font-weight: 700;
color: #e8eaf0;
letter-spacing: -.3px;
margin-bottom: 8px;
}
p {
font-size: 13.5px;
color: #6b7280;
line-height: 1.6;
font-size: 13px;
color: #4b5563;
line-height: 1.65;
margin-bottom: 32px;
}
.dot-row {
.bar-track {
height: 3px;
background: #1e2130;
border-radius: 99px;
overflow: hidden;
margin-bottom: 20px;
}
.bar-fill {
height: 100%;
width: 40%;
background: linear-gradient(90deg, #4338ca, #818cf8, #4338ca);
background-size: 200% 100%;
border-radius: 99px;
animation: slide 1.6s ease-in-out infinite, shimmer 2s linear infinite;
}
@keyframes slide {
0% { transform: translateX(-200%); }
100% { transform: translateX(400%); }
}
@keyframes shimmer {
0% { background-position: 200% center; }
100% { background-position: -200% center; }
}
.steps {
display: flex;
justify-content: center;
gap: 6px;
margin-top: 28px;
flex-direction: column;
gap: 7px;
text-align: left;
background: #13151d;
border: 1px solid #1e2130;
border-radius: 12px;
padding: 14px 16px;
}
.dot {
.step {
display: flex;
align-items: center;
gap: 10px;
font-size: 12px;
color: #374151;
}
.step.active { color: #9ca3af; }
.step-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: #6366f1;
opacity: .3;
animation: pulse 1.4s ease-in-out infinite;
background: #1e2130;
flex-shrink: 0;
}
.dot:nth-child(2) { animation-delay: .2s; }
.dot:nth-child(3) { animation-delay: .4s; }
@keyframes pulse { 0%, 80%, 100% { opacity: .3; } 40% { opacity: 1; } }
.step.active .step-dot {
background: #6366f1;
box-shadow: 0 0 6px rgba(99,102,241,.6);
animation: dotpulse 1.2s ease-in-out infinite;
}
@keyframes dotpulse { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
</style>
</head>
<body>
<div class="card">
<div class="logo">
<div class="logo-icon">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="2" y="4" width="20" height="16" rx="2"/>
<path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/>
</svg>
</div>
<span class="logo-text">CluBird</span>
<div class="wrap">
<div class="icon-ring">
<svg class="bird" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 19 C5 19 8 10 15 9 C19 8 23 11 24 15" stroke="white" stroke-width="2.5" stroke-linecap="round"/>
<path d="M5 19 C6.5 22 9 23.5 12 23.5 C15 23.5 18 22 19.5 19" stroke="white" stroke-width="2.5" stroke-linecap="round"/>
<circle cx="19" cy="8" r="2" fill="white"/>
</svg>
</div>
<div class="spinner"></div>
<h1>Update wird durchgeführt</h1>
<p>Das System wird gerade aktualisiert.<br>Diese Seite lädt in wenigen Sekunden automatisch neu.</p>
<div class="dot-row">
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="brand">Clu<span>Bird</span></div>
<h1>Update läuft</h1>
<p>Das System wird aktualisiert und ist<br>gleich wieder verfügbar.</p>
<div class="bar-track">
<div class="bar-fill"></div>
</div>
<div class="steps">
<div class="step active">
<div class="step-dot"></div>
Code wird eingespielt
</div>
<div class="step active">
<div class="step-dot"></div>
Abhängigkeiten &amp; Assets werden gebaut
</div>
<div class="step">
<div class="step-dot"></div>
Dienste werden neu gestartet
</div>
<div class="step">
<div class="step-dot"></div>
Seite lädt automatisch neu
</div>
</div>
</div>
</body>