129 lines
3.8 KiB
PHP
129 lines
3.8 KiB
PHP
<?php
|
|
// Simple maintenance page for FlixCooks
|
|
?>
|
|
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>FlixCooks | Wartungsmodus</title>
|
|
<style>
|
|
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600&family=Playfair+Display:wght@600&display=swap');
|
|
:root {
|
|
--bg-1: #12141c;
|
|
--bg-2: #1c1f2a;
|
|
--text: #dce1eb;
|
|
--muted: #8c93a3;
|
|
--accent: #6c7ea0;
|
|
}
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
min-height: 100vh;
|
|
display: grid;
|
|
place-items: center;
|
|
background: radial-gradient(circle at 20% 20%, rgba(255,255,255,0.05), transparent 35%),
|
|
radial-gradient(circle at 80% 0%, rgba(255,255,255,0.04), transparent 30%),
|
|
linear-gradient(135deg, var(--bg-1), var(--bg-2));
|
|
color: var(--text);
|
|
font-family: 'Montserrat', system-ui, sans-serif;
|
|
overflow: hidden;
|
|
}
|
|
.grain {
|
|
position: fixed;
|
|
inset: 0;
|
|
background-image: radial-gradient(rgba(255,255,255,0.03) 1px, transparent 0);
|
|
background-size: 22px 22px;
|
|
opacity: 0.35;
|
|
pointer-events: none;
|
|
mix-blend-mode: screen;
|
|
}
|
|
.wrap {
|
|
text-align: center;
|
|
padding: 32px 18px 48px;
|
|
}
|
|
h1 {
|
|
font-family: 'Playfair Display', serif;
|
|
font-size: clamp(42px, 6vw, 68px);
|
|
margin: 0 0 18px;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
.sub {
|
|
margin: 0 0 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.24em;
|
|
font-weight: 600;
|
|
color: var(--muted);
|
|
}
|
|
.copy { color: var(--muted); margin: 0 0 22px; }
|
|
.countdown {
|
|
margin-top: -6px;
|
|
color: var(--ink);
|
|
}
|
|
.divider { width: 90px; height: 1px; background: rgba(255,255,255,0.18); margin: 16px auto 12px; }
|
|
.dots { display: inline-flex; gap: 8px; align-items: center; justify-content: center; }
|
|
.dot {
|
|
width: 10px; height: 10px;
|
|
border-radius: 50%;
|
|
background: rgba(255,255,255,0.32);
|
|
animation: pulse 1.4s infinite ease-in-out;
|
|
}
|
|
.dot:nth-child(2) { animation-delay: 0.15s; }
|
|
.dot:nth-child(3) { animation-delay: 0.3s; }
|
|
@keyframes pulse {
|
|
0%, 80%, 100% { opacity: 0.2; transform: translateY(0); }
|
|
40% { opacity: 1; transform: translateY(-4px); }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="grain"></div>
|
|
<div class="wrap">
|
|
<h1>FlixCooks</h1>
|
|
<div class="divider"></div>
|
|
<p class="sub">Website in Bearbeitung</p>
|
|
<p class="copy">Wird in Kürze veröffentlicht</p>
|
|
<p id="countdown" class="copy countdown" aria-live="polite">Countdown lädt...</p>
|
|
<div class="dots" aria-label="Lädt">
|
|
<span class="dot"></span>
|
|
<span class="dot"></span>
|
|
<span class="dot"></span>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
<script>
|
|
function nextTarget() {
|
|
const now = new Date();
|
|
const target = new Date(now);
|
|
// Aim for today at 18:00; if already passed, roll to tomorrow.
|
|
target.setHours(18, 0, 0, 0);
|
|
if (now > target) {
|
|
target.setDate(target.getDate() + 1);
|
|
}
|
|
return target;
|
|
}
|
|
|
|
function updateCountdown() {
|
|
const el = document.getElementById('countdown');
|
|
if (!el) return;
|
|
const now = new Date();
|
|
let target = nextTarget();
|
|
if (now > target) {
|
|
target = nextTarget();
|
|
}
|
|
const diff = target - now;
|
|
if (diff <= 0) {
|
|
el.textContent = 'Live now';
|
|
return;
|
|
}
|
|
const hours = Math.floor(diff / 36e5);
|
|
const minutes = Math.floor((diff % 36e5) / 6e4);
|
|
const seconds = Math.floor((diff % 6e4) / 1000);
|
|
el.textContent = `Countdown: ${hours.toString().padStart(2,'0')}:${minutes.toString().padStart(2,'0')}:${seconds.toString().padStart(2,'0')}`;
|
|
}
|
|
|
|
updateCountdown();
|
|
setInterval(updateCountdown, 1000);
|
|
</script>
|
|
</html>
|