- FocusManager: SELECT-Elemente, sequentielle Nav-Navigation, Zone-basiert - Ordner-Ansicht (4. View) fuer Serien + Filme mit Quellen-Gruppierung - Login-Flow: Lade-Spinner statt Form-Flash, Auto-Login bei 1 Profil - Farbauswahl: Farbkreise statt input type=color (Samsung TV kompatibel) - Duplikat-Episoden: Orange Markierung + Badge bei gleicher Episodennummer - i18n: Neue Keys fuer Ordner-Ansicht und Duplikat-Markierung Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
63 lines
2.5 KiB
HTML
63 lines
2.5 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
<meta name="theme-color" content="#0f0f0f">
|
|
<link rel="stylesheet" href="/static/tv/css/tv.css">
|
|
<title>Login - VideoKonverter TV</title>
|
|
</head>
|
|
<body class="login-body">
|
|
<!-- Lade-Spinner (verhindert Flash des Login-Formulars) -->
|
|
<div class="login-loader" id="login-loader">
|
|
<div class="login-spinner"></div>
|
|
</div>
|
|
|
|
<div class="login-container" id="login-container" style="display:none">
|
|
<div class="login-card">
|
|
<h1 class="login-title">VideoKonverter</h1>
|
|
<p class="login-subtitle">TV-Streaming</p>
|
|
|
|
{% if error %}
|
|
<div class="login-error">{{ error }}</div>
|
|
{% endif %}
|
|
|
|
<form method="POST" action="/tv/login" class="login-form">
|
|
<div class="login-field">
|
|
<label for="username">Benutzername</label>
|
|
<input type="text" id="username" name="username"
|
|
autocomplete="username"
|
|
data-focusable required>
|
|
</div>
|
|
<div class="login-field">
|
|
<label for="password">Passwort</label>
|
|
<input type="password" id="password" name="password"
|
|
autocomplete="current-password"
|
|
data-focusable required>
|
|
</div>
|
|
<div class="login-field login-remember">
|
|
<label class="settings-check">
|
|
<input type="checkbox" name="remember" data-focusable>
|
|
Angemeldet bleiben
|
|
</label>
|
|
</div>
|
|
<button type="submit" class="login-btn" data-focusable>
|
|
Anmelden
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
// Kurz warten, dann Formular einblenden (Server hat ggf. schon Redirect gemacht)
|
|
setTimeout(function() {
|
|
document.getElementById('login-loader').style.display = 'none';
|
|
var container = document.getElementById('login-container');
|
|
container.style.display = '';
|
|
container.style.animation = 'fadeIn 0.3s ease';
|
|
var usernameInput = document.getElementById('username');
|
|
if (usernameInput) usernameInput.focus();
|
|
}, 300);
|
|
</script>
|
|
</body>
|
|
</html>
|