offcanvas-nav: impressum, datenschutz, agb als rechtliche unterseiten
This commit is contained in:
@@ -1876,6 +1876,23 @@ def public_frontend():
|
||||
.filter-toggle-btn.has-active .badge { display:block; }
|
||||
.filter-collapsed { display:none; }
|
||||
|
||||
/* Offcanvas navigation */
|
||||
.nav-toggle { background:none; border:none; color:#fff; font-size:1.3rem; cursor:pointer; padding:0.3rem 0.4rem; line-height:1; margin-right:0.5rem; transition:opacity 0.2s; }
|
||||
.nav-toggle:hover { opacity:0.7; }
|
||||
.offcanvas-backdrop { position:fixed; inset:0; background:rgba(0,0,0,0.4); z-index:200; opacity:0; pointer-events:none; transition:opacity 0.3s ease; }
|
||||
.offcanvas-backdrop.open { opacity:1; pointer-events:auto; }
|
||||
.offcanvas-nav { position:fixed; top:0; left:0; width:280px; height:100%; height:100dvh; background:#fff; z-index:201; transform:translateX(-100%); transition:transform 0.3s cubic-bezier(0.4,0,0.2,1); box-shadow:4px 0 24px rgba(0,0,0,0.15); display:flex; flex-direction:column; }
|
||||
.offcanvas-nav.open { transform:translateX(0); }
|
||||
.offcanvas-nav-header { background:#20228a; color:#fff; padding:1.2rem 1.5rem; display:flex; align-items:center; justify-content:space-between; }
|
||||
.offcanvas-nav-header .nav-logo { font-weight:800; font-size:1rem; }
|
||||
.offcanvas-nav-header .nav-close { background:none; border:none; color:#fff; font-size:1.4rem; cursor:pointer; line-height:1; }
|
||||
.offcanvas-nav-links { list-style:none; padding:1rem 0; flex:1; }
|
||||
.offcanvas-nav-links li { }
|
||||
.offcanvas-nav-links a { display:block; padding:0.75rem 1.5rem; color:#1a1a2e; text-decoration:none; font-size:0.95rem; font-weight:500; transition:background 0.15s; }
|
||||
.offcanvas-nav-links a:hover { background:#f0ede6; }
|
||||
.offcanvas-nav-links .nav-section { padding:0.5rem 1.5rem 0.2rem; font-size:0.7rem; font-weight:700; text-transform:uppercase; letter-spacing:0.05em; color:#888; }
|
||||
.offcanvas-nav-footer { padding:1rem 1.5rem; border-top:1px solid #e0ddd6; font-size:0.75rem; color:#888; }
|
||||
|
||||
/* Main grid — masonry (CSS columns) */
|
||||
.main-grid { max-width:1300px; margin:1.5rem auto; padding:0 1rem; column-count:4; column-gap:1.2rem; }
|
||||
|
||||
@@ -2057,6 +2074,7 @@ def public_frontend():
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<button id="navToggle" class="nav-toggle" aria-label="Menü öffnen">☰</button>
|
||||
<a href="/" class="site-logo">
|
||||
<img src="/static/logo.png" alt="Brettspiel News" style="height:38px;width:auto;display:block;">
|
||||
</a>
|
||||
@@ -2477,6 +2495,42 @@ def public_frontend():
|
||||
input.addEventListener('keydown', e => { if (e.key === 'Enter') send(); });
|
||||
})();
|
||||
</script>
|
||||
|
||||
<div class="offcanvas-backdrop" id="offcanvasBackdrop"></div>
|
||||
<nav class="offcanvas-nav" id="offcanvasNav">
|
||||
<div class="offcanvas-nav-header">
|
||||
<span class="nav-logo">BSN Community</span>
|
||||
<button class="nav-close" id="navClose" aria-label="Menü schließen">✕</button>
|
||||
</div>
|
||||
<ul class="offcanvas-nav-links">
|
||||
<li class="nav-section">Navigation</li>
|
||||
<li><a href="/">🏠 Startseite</a></li>
|
||||
<li class="nav-section">Rechtliches</li>
|
||||
<li><a href="/impressum">📋 Impressum</a></li>
|
||||
<li><a href="/datenschutz">🔒 Datenschutzerklärung</a></li>
|
||||
<li><a href="/agb">📜 AGB</a></li>
|
||||
</ul>
|
||||
<div class="offcanvas-nav-footer">
|
||||
© 2026 Brettspiel-News.de
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<script>
|
||||
(function() {
|
||||
var toggle = document.getElementById('navToggle');
|
||||
var close = document.getElementById('navClose');
|
||||
var nav = document.getElementById('offcanvasNav');
|
||||
var backdrop = document.getElementById('offcanvasBackdrop');
|
||||
|
||||
function open() { nav.classList.add('open'); backdrop.classList.add('open'); }
|
||||
function closeNav() { nav.classList.remove('open'); backdrop.classList.remove('open'); }
|
||||
|
||||
toggle.addEventListener('click', open);
|
||||
close.addEventListener('click', closeNav);
|
||||
backdrop.addEventListener('click', closeNav);
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>""").replace("{LOGO_B64}", LOGO_B64)
|
||||
|
||||
@@ -2500,6 +2554,182 @@ def generate_image_thumbnail(image_path: str, width: int = 300) -> str | None:
|
||||
return None
|
||||
|
||||
|
||||
# ── Legal pages ─────────────────────────────────────────────────────
|
||||
|
||||
def _legal_page(title, content_html):
|
||||
"""Render a legal page with BSN header/footer styling."""
|
||||
return f"""<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{title} — BSN Community</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
* {{ margin:0; padding:0; box-sizing:border-box; }}
|
||||
body {{ font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; background:#E8E4DC; color:#1a1a2e; min-height:100vh; }}
|
||||
.site-header {{ background:#20228a; padding:1rem 2rem; display:flex; align-items:center; gap:1rem; position:sticky; top:0; z-index:100; box-shadow:0 2px 12px rgba(0,0,0,0.15); }}
|
||||
.site-header a {{ color:#fff; text-decoration:none; font-weight:800; font-size:1.15rem; }}
|
||||
.legal-container {{ max-width:760px; margin:2rem auto; padding:2rem; background:#fff; border-radius:14px; box-shadow:0 4px 18px rgba(0,0,0,0.10); }}
|
||||
.legal-container h1 {{ font-size:1.8rem; font-weight:800; color:#20228a; margin-bottom:0.3rem; }}
|
||||
.legal-container .stand {{ font-size:0.78rem; color:#888; margin-bottom:2rem; }}
|
||||
.legal-container h2 {{ font-size:1.2rem; font-weight:700; color:#20228a; margin:2rem 0 0.5rem; }}
|
||||
.legal-container h3 {{ font-size:1rem; font-weight:600; margin:1.2rem 0 0.3rem; }}
|
||||
.legal-container p {{ line-height:1.7; margin-bottom:0.8rem; font-size:0.92rem; }}
|
||||
.legal-container ul, .legal-container ol {{ margin:0.5rem 0 0.8rem 1.5rem; font-size:0.92rem; line-height:1.7; }}
|
||||
.legal-container blockquote {{ border-left:3px solid #20228a; padding:0.5rem 1rem; margin:1rem 0; background:#f8f6f1; border-radius:0 8px 8px 0; font-size:0.85rem; color:#555; }}
|
||||
.legal-container hr {{ border:none; border-top:1px solid #e0ddd6; margin:1.5rem 0; }}
|
||||
.legal-container a {{ color:#20228a; text-decoration:underline; }}
|
||||
.back-link {{ display:inline-block; margin-top:2rem; color:#20228a; text-decoration:none; font-weight:600; font-size:0.9rem; }}
|
||||
.back-link:hover {{ text-decoration:underline; }}
|
||||
@media(max-width:600px) {{ .legal-container {{ margin:1rem; padding:1.2rem; }} }}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<a href="/">← BSN Community</a>
|
||||
</header>
|
||||
<main class="legal-container">
|
||||
{content_html}
|
||||
<a href="/" class="back-link">← Zurück zur Startseite</a>
|
||||
</main>
|
||||
</body>
|
||||
</html>"""
|
||||
|
||||
|
||||
@app.route("/impressum")
|
||||
def legal_impressum():
|
||||
return _legal_page("Impressum", """<h1>Impressum</h1>
|
||||
<p class="stand">Angaben gemäß § 5 DDG (Digitale-Dienste-Gesetz)</p>
|
||||
|
||||
<h2>Verantwortlich für den Inhalt</h2>
|
||||
<p>Daniel Krause<br>Brettspiel-News.de<br>Teichweg 13a<br>50374 Erftstadt<br>Deutschland</p>
|
||||
|
||||
<h2>Kontakt</h2>
|
||||
<p>Telefon: +49 152 27909535<br>E-Mail: <a href="mailto:kontakt@brettspiel-news.de">kontakt@brettspiel-news.de</a></p>
|
||||
|
||||
<h2>Umsatzsteuer-ID</h2>
|
||||
<p>USt-IdNr. gemäß § 27 a UStG: <strong>DE238244230</strong></p>
|
||||
|
||||
<h2>Redaktionell verantwortlich</h2>
|
||||
<p>Daniel Krause<br>Teichweg 13a<br>50374 Erftstadt</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Hinweis zur Streitschlichtung</h2>
|
||||
<p>Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: <a href="https://ec.europa.eu/consumers/odr/">https://ec.europa.eu/consumers/odr/</a></p>
|
||||
<p>Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.</p>
|
||||
|
||||
<h2>Haftung für Inhalte</h2>
|
||||
<p>Als Diensteanbieter sind wir gemäß § 7 Abs. 1 DDG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 DDG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.</p>
|
||||
<p>Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.</p>
|
||||
|
||||
<h2>Haftung für Links</h2>
|
||||
<p>Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich.</p>
|
||||
|
||||
<h2>Urheberrecht</h2>
|
||||
<p>Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers.</p>
|
||||
<p>Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.</p>
|
||||
|
||||
<hr>
|
||||
<p><strong>BSN-Chatsystem</strong> (chat.datenhimmel.work) ist ein Angebot von Brettspiel-News.de, betrieben durch Daniel Krause.</p>""")
|
||||
|
||||
|
||||
@app.route("/datenschutz")
|
||||
def legal_datenschutz():
|
||||
return _legal_page("Datenschutzerklärung", """<h1>Datenschutzerklärung</h1>
|
||||
<p class="stand">Stand: 17. Juni 2026 — Geltungsbereich: BSN-Chatsystem (chat.datenhimmel.work)</p>
|
||||
|
||||
<h2>1. Verantwortlicher</h2>
|
||||
<p>Daniel Krause<br>Teichweg 13a<br>50374 Erftstadt<br>Deutschland<br>E-Mail: <a href="mailto:kontakt@brettspiel-news.de">kontakt@brettspiel-news.de</a><br>Telefon: +49 152 27909535</p>
|
||||
|
||||
<h2>2. Allgemeines zur Datenverarbeitung</h2>
|
||||
<h3>2.1 Umfang</h3>
|
||||
<p>Wir verarbeiten personenbezogene Daten nur, soweit dies zur Bereitstellung des BSN-Chatsystems erforderlich ist.</p>
|
||||
<h3>2.2 Rechtsgrundlagen (Art. 6 DSGVO)</h3>
|
||||
<ul><li><strong>lit. a:</strong> Einwilligung</li><li><strong>lit. b:</strong> Vertragserfüllung</li><li><strong>lit. c:</strong> Rechtliche Verpflichtung</li><li><strong>lit. f:</strong> Berechtigtes Interesse (Betrieb, redaktionelle Berichterstattung)</li></ul>
|
||||
<h3>2.3 Speicherdauer</h3>
|
||||
<p>Daten werden gelöscht, sobald der Zweck entfällt, es sei denn gesetzliche Aufbewahrungspflichten bestehen.</p>
|
||||
|
||||
<h2>3. Datenerhebung über WhatsApp</h2>
|
||||
<p>Verarbeitet werden: WhatsApp-Telefonnummer, Profilname, Nachrichteninhalte, Medien (Bilder, Videos, Audio), Transkriptionen, KI-Zusammenfassungen.</p>
|
||||
<p><strong>Zweck:</strong> Entgegennahme von Community-Beiträgen, redaktionelle Sichtung, Veröffentlichung.</p>
|
||||
<p><strong>Empfänger:</strong> Meta Platforms, Inc. (USA) — zertifiziert unter EU-US Data Privacy Framework. DeepSeek / datenhimmel.work — zur KI-Zusammenfassung.</p>
|
||||
|
||||
<h2>4. Datenerhebung über das Web-Formular</h2>
|
||||
<p>Verarbeitet werden: Name (optional), Nachricht, hochgeladene Medien, Metadaten, KI-Zusammenfassung, Referenz-ID.</p>
|
||||
<p>Zweck und Rechtsgrundlagen wie unter Ziffer 3.</p>
|
||||
|
||||
<h2>5. Veröffentlichung von Beiträgen</h2>
|
||||
<p>Bei Veröffentlichung werden sichtbar: Ihr Name (oder "Anonyme Quelle"), Beitragsinhalt, Medien, KI-Zusammenfassung, Halle/Kategorie. <strong>Ohne Namensangabe erfolgt die Veröffentlichung als "Anonyme Quelle".</strong></p>
|
||||
|
||||
<h2>6. Chat-Assistant (KI-Chat)</h2>
|
||||
<p>Kein Zugriff auf nicht-veröffentlichte Daten. Keine Speicherung von Chat-Verläufen. Keine Verarbeitung personenbezogener Daten der Fragesteller.</p>
|
||||
|
||||
<h2>7. Cookies und Tracking</h2>
|
||||
<p>Keine Cookies, kein Tracking. Nur localStorage für Theme-Präferenz (Dark/Light).</p>
|
||||
|
||||
<h2>8. Ihre Rechte</h2>
|
||||
<ul><li><strong>Auskunft</strong> (Art. 15 DSGVO)</li><li><strong>Berichtigung</strong> (Art. 16 DSGVO)</li><li><strong>Löschung</strong> (Art. 17 DSGVO): WhatsApp: "Meine Daten löschen" senden. Web: Referenz-ID an <a href="mailto:kontakt@brettspiel-news.de">kontakt@brettspiel-news.de</a></li><li><strong>Einschränkung</strong> (Art. 18 DSGVO)</li><li><strong>Datenübertragbarkeit</strong> (Art. 20 DSGVO)</li><li><strong>Widerspruch</strong> (Art. 21 DSGVO)</li><li><strong>Widerruf</strong> (Art. 7 Abs. 3 DSGVO)</li><li><strong>Beschwerde</strong> (Art. 77 DSGVO): LDI NRW, Kavalleriestraße 2–4, 40213 Düsseldorf</li></ul>
|
||||
|
||||
<h2>9. Sicherheit (Art. 32 DSGVO)</h2>
|
||||
<p>HTTPS-Verschlüsselung, Zugriffskontrolle, Datenminimierung, Löschkonzept.</p>
|
||||
|
||||
<h2>10. Drittlandtransfer</h2>
|
||||
<p>Meta (USA): EU-US DPF-zertifiziert. DeepSeek/datenhimmel.work: Serverstandort zu prüfen; ggf. Standardvertragsklauseln nach Art. 46 DSGVO.</p>
|
||||
|
||||
<h2>11. Automatisierte Entscheidungsfindung</h2>
|
||||
<p>Kein Profiling nach Art. 22 DSGVO.</p>
|
||||
|
||||
<hr>
|
||||
<blockquote>Dieses Dokument wurde mit Sorgfalt erstellt, ersetzt jedoch keine individuelle Rechtsberatung durch einen Fachanwalt für Datenschutzrecht.</blockquote>""")
|
||||
|
||||
|
||||
@app.route("/agb")
|
||||
def legal_agb():
|
||||
return _legal_page("AGB", """<h1>Allgemeine Nutzungsbedingungen (AGB)</h1>
|
||||
<p class="stand">Geltungsbereich: BSN-Chatsystem (chat.datenhimmel.work) — Stand: 17. Juni 2026</p>
|
||||
|
||||
<h2>1. Geltungsbereich</h2>
|
||||
<p>Diese AGB regeln die Nutzung des BSN-Chatsystems, betrieben von:<br>Daniel Krause, Teichweg 13a, 50374 Erftstadt<br>E-Mail: <a href="mailto:kontakt@brettspiel-news.de">kontakt@brettspiel-news.de</a></p>
|
||||
<p>Mit der Nutzung erkennen Sie diese Bedingungen an.</p>
|
||||
|
||||
<h2>2. Nutzungsvoraussetzungen</h2>
|
||||
<p>Die Nutzung ist <strong>kostenlos</strong>. Kein Anspruch auf Veröffentlichung. Mindestalter: 16 Jahre.</p>
|
||||
|
||||
<h2>3. Einreichung von Inhalten</h2>
|
||||
<p>Sie können Texte (max. 5.000 Zeichen), Fotos, Videos und Sprachnachrichten einreichen. Sie versichern: Urheberschaft, keine Rechtsverletzungen, Einwilligung abgebildeter Personen, keine rechtswidrigen Inhalte.</p>
|
||||
|
||||
<h2>4. Rechteeinräumung</h2>
|
||||
<p>Sie räumen ein einfaches, zeitlich und räumlich unbeschränktes, unentgeltliches Nutzungsrecht ein (Speicherung, Bearbeitung, öffentliche Wiedergabe, Vervielfältigung). Sie bleiben Urheber. Das Recht erlischt bei Löschung.</p>
|
||||
|
||||
<h2>5. Veröffentlichung</h2>
|
||||
<p>Keine automatische Veröffentlichung. Redaktionelle Prüfung vorbehalten. Kein Anspruch auf Veröffentlichung. Bei Veröffentlichung: Vorname/Spitzname oder "Anonyme Quelle". Beiträge sind öffentlich einsehbar.</p>
|
||||
|
||||
<h2>6. Pflichten des Nutzers</h2>
|
||||
<p>Keine rechtswidrigen, Rechte-verletzenden Inhalte, kein Spam, keine Malware, keine Desinformation. Sie stellen den Betreiber von Ansprüchen Dritter frei.</p>
|
||||
|
||||
<h2>7. Moderation und Löschung</h2>
|
||||
<p>Der Betreiber kann Beiträge jederzeit ändern, zurücknehmen oder löschen.</p>
|
||||
<p><strong>So löschen Sie Ihre Daten:</strong><br>WhatsApp: "Meine Daten löschen" senden.<br>Web: Referenz-ID an <a href="mailto:kontakt@brettspiel-news.de">kontakt@brettspiel-news.de</a></p>
|
||||
|
||||
<h2>8. Haftung</h2>
|
||||
<p>Unbeschränkt bei Vorsatz/grober Fahrlässigkeit. Bei leichter Fahrlässigkeit nur bei Kardinalpflichtverletzung, begrenzt auf vorhersehbaren Schaden. Keine Haftung für Nutzerinhalte. §§ 8–10 DDG: Keine Überwachungspflicht, aber Entfernung bei Kenntnis.</p>
|
||||
|
||||
<h2>9. KI-Chat-Assistant</h2>
|
||||
<p>Beantwortet Fragen auf Basis veröffentlichter Beiträge (DeepSeek V4 Flash). Antworten unverbindlich, können Fehler enthalten. Keine Speicherung von Chat-Verläufen.</p>
|
||||
|
||||
<h2>10. Änderungen der AGB</h2>
|
||||
<p>Änderungen mit Wirkung für die Zukunft vorbehalten. Aktuelle Version unter <a href="/agb">chat.datenhimmel.work/agb</a>.</p>
|
||||
|
||||
<h2>11. Schlussbestimmungen</h2>
|
||||
<p>Es gilt deutsches Recht unter Ausschluss des CISG. Gerichtsstand: Erftstadt (für Kaufleute). Salvatorische Klausel.</p>
|
||||
|
||||
<hr>
|
||||
<blockquote>Diese AGB regeln ausschließlich das BSN-Chatsystem. Für brettspiel-news.de gelten die dort hinterlegten Bedingungen.<br>Die Datenschutzerklärung ist unter <a href="/datenschutz">chat.datenhimmel.work/datenschutz</a> abrufbar.</blockquote>""")
|
||||
|
||||
|
||||
@app.route('/media/<path:filename>')
|
||||
def serve_media(filename):
|
||||
"""Serve media files with aggressive caching headers."""
|
||||
|
||||
Reference in New Issue
Block a user