Issue #17 Added imprint and privacy policy page and added englisch language support to it.

imprint still unfinished
This commit is contained in:
2026-04-07 17:42:51 +02:00
parent fc94d812d2
commit 26e4d0dd27
18 changed files with 872 additions and 10 deletions
+3
View File
@@ -7,6 +7,7 @@
<title data-i18n="pageTitle">Dashboard</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/dashboard.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
</head>
<body>
@@ -226,6 +227,8 @@
</div>
</div>
{% include "partials/footer.html" %}
<aside class="sidebar settings-sidebar" id="settingsSidebar" aria-hidden="true">
<div class="sidebar-header">
<h3 id="settingsSidebarTitle" data-i18n="settingsSidebarTitle">Brett-Einstellungen</h3>
+82
View File
@@ -0,0 +1,82 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-i18n="pageTitle">Impressum</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/legal.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
</head>
<body data-legal-page="imprint">
<header class="legal-header">
<nav class="legal-nav">
<a class="brand" href="{{ url_for('main.home') }}">
<span class="brand-mark">♛</span>
<span data-i18n="navBrand">8-Damen- und 8-Türme Solver</span>
</a>
<div class="legal-nav-links">
<button class="lang-switch" id="langSwitch" type="button" aria-label="Sprache wechseln">DE</button>
<a href="{{ url_for('main.home') }}" data-i18n="navHome">Startseite</a>
{% if current_user.is_authenticated %}
<a href="{{ url_for('main.dashboard') }}" data-i18n="navDashboard">Dashboard</a>
{% else %}
<a href="{{ url_for('login.login') }}" data-i18n="navLogin">Login</a>
{% endif %}
</div>
</nav>
</header>
<main class="legal-main">
<section class="legal-hero">
<p class="legal-eyebrow" data-i18n="heroEyebrow">Rechtliche Hinweise</p>
<h1 data-i18n="heroTitle">Impressum</h1>
</section>
<section class="legal-card">
<h2 data-i18n="contactTitle">Kontakt</h2>
<p>
<strong data-i18n="contactName">Jérôme Bachmann</strong><br>
<span data-i18n="contactEmailLabel">E-Mail:</span> jerome.bachmann@bachmannj.ch<br>
</p>
</section>
<section class="legal-card">
<h2 data-i18n="projectResponsibilityTitle">Projektverantwortung</h2>
<p data-i18n="projectResponsibilityText">
Dieses Webprojekt wurde im Rahmen eines Schulprojekts zum Acht-Damen- und Acht-Türme-Problem
erstellt. Inhaltlich verantwortlich ist die jeweils oben genannte verantwortliche Stelle.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="contentLiabilityTitle">Haftung für Inhalte</h2>
<p data-i18n="contentLiabilityText">
Die Inhalte dieser Website wurden mit Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und
Aktualität der Inhalte kann jedoch keine Gewähr übernommen werden. Bei Bekanntwerden von
Rechtsverletzungen werden entsprechende Inhalte umgehend überarbeitet oder entfernt.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="linksLiabilityTitle">Haftung fuer Links</h2>
<p data-i18n="linksLiabilityText">
Diese Website kann Links zu externen Angeboten enthalten. Fuer deren Inhalte sind ausschliesslich die
jeweiligen Betreiber verantwortlich. Eine permanente inhaltliche Kontrolle verlinkter Seiten ist ohne
konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="versionTitle">Stand</h2>
<p data-i18n="versionText">Stand dieser Vorlage: April 2026</p>
</section>
</main>
{% include "partials/footer.html" %}
<script src="{{ url_for('static', filename='js/legal.js') }}" defer></script>
</body>
</html>
+4 -1
View File
@@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-i18n="meta.title">8-Damen- und 8-Tuerme Solver</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/index.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
</head>
<body>
@@ -184,10 +185,12 @@
</section>
</main>
{% include "partials/footer.html" %}
<script>
window.LANDING_INITIAL_LANGUAGE = "{{ initial_language }}";
</script>
<script src="{{ url_for('static', filename='js/index.js') }}"></script>
</body>
</html>
</html>
+3
View File
@@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/login.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
</head>
<body>
@@ -50,6 +51,8 @@
</section>
</main>
{% include "partials/footer.html" %}
<script src="{{ url_for('static', filename='js/login.js') }}" defer></script>
</body>
+3
View File
@@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-i18n="pageTitle">Login Settings</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/login.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
<script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js" defer></script>
</head>
@@ -152,6 +153,8 @@
</section>
</main>
{% include "partials/footer.html" %}
<script src="{{ url_for('static', filename='js/login.js') }}" defer></script>
</body>
+12
View File
@@ -0,0 +1,12 @@
<footer class="page-footer">
<div class="page-footer-inner">
<div class="page-footer-copy">
<p class="page-footer-text" data-i18n="footerText">Schulprojekt rund um das Acht-Damen- und Acht-Türme-Problem.</p>
</div>
<nav class="page-footer-links" data-i18n-aria-label="footerNavAria" aria-label="Rechtliche Hinweise">
<a href="{{ url_for('main.privacy_policy') }}" data-i18n="footerPrivacy">Datenschutzerklärung</a>
<a href="{{ url_for('main.imprint') }}" data-i18n="footerImprint">Impressum</a>
</nav>
</div>
</footer>
+132
View File
@@ -0,0 +1,132 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title data-i18n="pageTitle">Datenschutzerklärung</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/legal.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
</head>
<body data-legal-page="privacy">
<header class="legal-header">
<nav class="legal-nav">
<a class="brand" href="{{ url_for('main.home') }}">
<span class="brand-mark">♛</span>
<span data-i18n="navBrand">8-Damen- und 8-Türme Solver</span>
</a>
<div class="legal-nav-links">
<button class="lang-switch" id="langSwitch" type="button" aria-label="Sprache wechseln">DE</button>
<a href="{{ url_for('main.home') }}" data-i18n="navHome">Startseite</a>
{% if current_user.is_authenticated %}
<a href="{{ url_for('main.dashboard') }}" data-i18n="navDashboard">Dashboard</a>
{% else %}
<a href="{{ url_for('login.login') }}" data-i18n="navLogin">Login</a>
{% endif %}
</div>
</nav>
</header>
<main class="legal-main">
<section class="legal-hero">
<p class="legal-eyebrow" data-i18n="heroEyebrow">Rechtliche Hinweise</p>
<h1 data-i18n="heroTitle">Datenschutzerklärung</h1>
<p class="legal-lead" data-i18n="heroLead">
Diese Seite beschreibt, welche personenbezogenen Daten im Rahmen dieses Schulprojekts verarbeitet
werden.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="dataProcessedTitle">1. Welche Daten verarbeitet werden</h2>
<p data-i18n="dataProcessedText">Im Rahmen der Nutzung dieser Webanwendung können insbesondere folgende
Daten verarbeitet werden:</p>
<ul class="legal-list">
<li data-i18n="dataProcessedItem1">Benutzername und verschlüsseltes Passwort bei der Registrierung und
beim Login</li>
<li data-i18n="dataProcessedItem2">Daten zur Zwei-Faktor-Authentifizierung, falls diese freiwillig
aktiviert wird</li>
<li data-i18n="dataProcessedItem3">gespeicherte Spielstände, Notizen, Schrittzahlen, Zeiten und
Favoriten</li>
<li data-i18n="dataProcessedItem4">technische Verbindungsdaten, die durch den Server oder das Hosting
entstehen koennen</li>
</ul>
</section>
<section class="legal-card">
<h2 data-i18n="processingPurposeTitle">3. Zweck der Verarbeitung</h2>
<p data-i18n="processingPurposeText">Die Verarbeitung erfolgt, um die Funktionen dieser Anwendung
bereitzustellen. Dazu gehoeren insbesondere:
</p>
<ul class="legal-list">
<li data-i18n="processingPurposeItem1">Erstellung und Verwaltung von Benutzerkonten</li>
<li data-i18n="processingPurposeItem2">sicherer Login in das persönliche Dashboard</li>
<li data-i18n="processingPurposeItem3">optionale Absicherung des Kontos per Authenticator-App</li>
<li data-i18n="processingPurposeItem4">Speichern und Laden von Spielständen</li>
<li data-i18n="processingPurposeItem5">technischer Betrieb, Fehleranalyse und Missbrauchsschutz</li>
</ul>
</section>
<section class="legal-card">
<h2 data-i18n="legalBasisTitle">4. Rechtsgrundlage</h2>
<p data-i18n="legalBasisText">
Soweit personenbezogene Daten verarbeitet werden, erfolgt dies in der Regel zur Bereitstellung der
Anwendung und ihrer Funktionen sowie aufgrund des berechtigten Interesses an einem sicheren und
funktionsfaehigen Webangebot. Falls eine ausdrückliche Einwilligung erforderlich ist, wird diese
gesondert eingeholt.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="storageTitle">5. Speicherung und Löschung</h2>
<p data-i18n="storageText">
Personenbezogene Daten werden nur so lange gespeichert, wie sie für den jeweiligen Zweck benötigt
werden. Benutzerkonten und zugehörige Spielstände bleiben grundsätzlich gespeichert, bis sie
gelöscht oder für das Projekt nicht mehr benötigt werden.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="thirdPartyTitle">6. Weitergabe an Dritte</h2>
<p data-i18n="thirdPartyText">
Eine Weitergabe personenbezogener Daten erfolgt nur, wenn dies für den Betrieb der Anwendung
erforderlich ist, etwa durch einen Hosting-Anbieter oder technische Dienstleister. Ansonsten werden
keine Daten weitergegeben.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="rightsTitle">7. Rechte betroffener Personen</h2>
<p data-i18n="rightsText">Betroffene Personen haben im Rahmen des anwendbaren Datenschutzrechts insbesondere
das Recht auf:</p>
<ul class="legal-list">
<li data-i18n="rightsItem1">Auskunft über die verarbeiteten personenbezogenen Daten</li>
<li data-i18n="rightsItem2">Berichtigung unrichtiger Daten</li>
<li data-i18n="rightsItem3">Löschung oder Einschraenkung der Verarbeitung</li>
<li data-i18n="rightsItem4">Widerspruch gegen die Verarbeitung</li>
<li data-i18n="rightsItem5">Herausgabe der bereitgestellten Daten, soweit anwendbar</li>
</ul>
</section>
<section class="legal-card">
<h2 data-i18n="securityTitle">8. Datensicherheit</h2>
<p data-i18n="securityText">
Es werden technische und organisatorische Massnahmen getroffen, um gespeicherte Daten vor Verlust,
Missbrauch oder unberechtigtem Zugriff zu schuetzen. Dazu gehoeren insbesondere passwortgeschuetzte
Konten und die Möglichkeit, Zwei-Faktor-Authentifizierung zu aktivieren.
</p>
</section>
<section class="legal-card">
<h2 data-i18n="versionTitle">9. Stand</h2>
<p data-i18n="versionText">Stand dieser Vorlage: April 2026</p>
</section>
</main>
{% include "partials/footer.html" %}
<script src="{{ url_for('static', filename='js/legal.js') }}" defer></script>
</body>
</html>
+3
View File
@@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sign Up</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/login.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
</head>
<body>
@@ -51,6 +52,8 @@
</section>
</main>
{% include "partials/footer.html" %}
<script src="{{ url_for('static', filename='js/login.js') }}" defer></script>
</body>
+3
View File
@@ -6,6 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Verify Login</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/login.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/footer.css') }}">
</head>
<body>
@@ -48,6 +49,8 @@
</section>
</main>
{% include "partials/footer.html" %}
<script src="{{ url_for('static', filename='js/login.js') }}" defer></script>
</body>