Files
mindflux/src/main/resources/templates/index.html
T

166 lines
7.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de" data-theme="dark" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mindflux – Deine Zukunft beginnt hier</title>
<link rel="stylesheet" href="/css/theme.css">
<script src="/js/theme.js"></script>
<link rel="stylesheet" href="/css/auth.css">
</head>
<body>
<div class="mf-theme-float"><button class="mf-theme"></button></div>
<div class="mf-center">
<div class="auth-stage">
<div class="auth-container" id="authContainer">
<!-- ===== Sign In ===== -->
<div class="form-box login">
<div class="inner">
<div class="auth-head">
<span class="mark"></span>
<b>MINDFLUX</b>
<h2>Willkommen zurück</h2>
<span class="sub">Melde dich an, um weiterzulernen.</span>
</div>
<div th:if="${param.error}" class="mf-alert err">Benutzername oder Passwort sind falsch.</div>
<div th:if="${param.logout}" class="mf-alert ok">Du hast dich erfolgreich abgemeldet.</div>
<div th:if="${param.registerSuccess}" class="mf-alert ok">Registrierung erfolgreich! Du kannst dich jetzt einloggen.</div>
<form th:action="@{/login}" method="post">
<div class="mf-field">
<label class="mf-label" for="login-username">Benutzername</label>
<input id="login-username" class="mf-input" type="text" name="username" placeholder="Benutzername" required th:value="${param.username}">
</div>
<div class="mf-field">
<label class="mf-label" for="login-password">Passwort</label>
<input id="login-password" class="mf-input" type="password" name="password" placeholder="Passwort" required>
</div>
<button class="neon-btn" type="submit"><span class="lock">🔒</span> Login</button>
</form>
<p class="mobile-switch">Noch keinen Account? <a data-goto="signup">Jetzt registrieren</a></p>
</div>
</div>
<!-- ===== Sign Up ===== -->
<div class="form-box signup">
<div class="inner">
<div class="auth-head">
<span class="mark"></span>
<b>MINDFLUX</b>
<h2>Account erstellen</h2>
<span class="sub">Kostenlos – und in 30 Sekunden startklar.</span>
</div>
<div th:if="${param.registerError}" class="mf-alert err">Benutzername bereits vergeben.</div>
<div th:if="${param.passwordMismatch}" class="mf-alert err">Die Passwörter stimmen nicht überein. Bitte erneut eingeben.</div>
<form th:action="@{/register}" method="post">
<div class="mf-field">
<label class="mf-label" for="reg-username">Benutzername</label>
<input id="reg-username" class="mf-input" type="text" name="username" placeholder="Benutzername" required>
</div>
<div class="mf-field">
<label class="mf-label" for="reg-email">E-Mail</label>
<input id="reg-email" class="mf-input" type="email" name="email" placeholder="E-Mail" required>
</div>
<div class="mf-field">
<label class="mf-label" for="reg-password">Passwort</label>
<input id="reg-password" class="mf-input" type="password" name="password" placeholder="Passwort" required>
</div>
<div class="mf-field">
<label class="mf-label" for="reg-password2">Passwort wiederholen</label>
<input id="reg-password2" class="mf-input" type="password" name="confirmPassword" placeholder="Passwort wiederholen" required>
</div>
<p id="reg-pw-msg" class="mf-alert err" style="display:none">Die Passwörter stimmen nicht überein.</p>
<button class="neon-btn" type="submit"><span class="lock">🚀</span> Account erstellen</button>
</form>
<p class="mobile-switch">Schon dabei? <a data-goto="login">Zum Login</a></p>
</div>
</div>
<!-- ===== Overlay ===== -->
<div class="overlay-container">
<div class="overlay">
<!-- sichtbar im Signup-Modus -> zurück zum Login -->
<div class="overlay-panel overlay-left">
<span class="o-emblem"></span>
<h3>Schon dabei?</h3>
<p>Melde dich an und mach bei 88 Meilen pro Stunde weiter. 🚀</p>
<button type="button" class="ghost-btn" id="toLogin">Zum Login</button>
</div>
<!-- sichtbar im Login-Modus -> zum Signup -->
<div class="overlay-panel overlay-right">
<span class="o-emblem"></span>
<h3>Neu bei Mindflux?</h3>
<p>Erstelle deinen kostenlosen Account und schalte die volle Lernplattform frei.</p>
<button type="button" class="ghost-btn" id="toSignup">Account erstellen</button>
</div>
</div>
</div>
</div>
<footer class="mf-footer">
<a href="#">Support</a>
<a href="#">Feedback</a>
<a href="/nutzungsbedingungen">Nutzungsbedingungen</a>
<a href="/richtlinien">Richtlinien</a>
<a href="/datenschutz">Datenschutz</a>
<a href="/impressum">Impressum</a>
</footer>
</div>
</div>
<script>
(function () {
var c = document.getElementById('authContainer');
var toSignup = document.getElementById('toSignup');
var toLogin = document.getElementById('toLogin');
if (toSignup) toSignup.addEventListener('click', function () { c.classList.add('active'); });
if (toLogin) toLogin.addEventListener('click', function () { c.classList.remove('active'); });
document.querySelectorAll('[data-goto="signup"]').forEach(function (el) {
el.addEventListener('click', function (e) { e.preventDefault(); c.classList.add('active'); });
});
document.querySelectorAll('[data-goto="login"]').forEach(function (el) {
el.addEventListener('click', function (e) { e.preventDefault(); c.classList.remove('active'); });
});
// Bei Registrierungs-/Passwortfehler direkt das Signup-Panel öffnen
var qp = new URLSearchParams(window.location.search);
if (qp.has('registerError') || qp.has('passwordMismatch')) {
c.classList.add('active');
}
// Client-seitiger Passwort-Abgleich (sofortiges Feedback; der Server prüft zusätzlich)
var pw = document.getElementById('reg-password');
var pw2 = document.getElementById('reg-password2');
var pwMsg = document.getElementById('reg-pw-msg');
var signupForm = pw2 ? pw2.closest('form') : null;
function pwCheck() {
var mismatch = pw2.value.length > 0 && pw.value !== pw2.value;
if (pwMsg) pwMsg.style.display = mismatch ? 'block' : 'none';
pw2.setCustomValidity(pw.value !== pw2.value ? 'Passwörter stimmen nicht überein' : '');
return !mismatch;
}
if (pw && pw2) {
pw.addEventListener('input', pwCheck);
pw2.addEventListener('input', pwCheck);
if (signupForm) signupForm.addEventListener('submit', function (e) {
if (pw.value !== pw2.value) { e.preventDefault(); pwCheck(); c.classList.add('active'); }
});
}
})();
</script>
</body>
</html>