diff --git a/app.py b/app.py index 23de0f1..327531e 100644 --- a/app.py +++ b/app.py @@ -2626,6 +2626,35 @@ def public_frontend(): """Public frontend showing published submissions β€” SPIEL Essen inspired.""" import base64 db = get_db() + user = _get_user_from_session(db) # fΓΌr Login-Dropdown in Nav + + # Hilfsfunktion: Login-Dropdown-HTML bauen + def _build_login_dropdown(u): + """Baut das Login-Dropdown + Filter-Toggle fΓΌr den Header.""" + h = '
' + h += 'brettspiel-news.de' + h += '' + if u: + name = (u.get("name") or u.get("email") or "User")[:14] + h += '
' + h += '' + h += '
' + else: + h += '
' + h += '' + h += '
' + h += '
' # close header-right + return h # Filters halle_filter = request.args.get("halle", "").strip() @@ -3119,19 +3148,72 @@ def public_frontend(): .capture-btn svg { display:block; } .capture-btn:active { transform:scale(0.92); background:#f0f0f0; border-color:#20228a; } .capture-label { font-size:0.62rem; font-weight:600; color:#888; text-transform:uppercase; letter-spacing:0.04em; text-align:center; } + + /* ── Login-Dropdown in der Navigation ─────────────────────── */ + .login-dropdown { position:relative; display:inline-block; } + .login-toggle-btn { background:rgba(255,255,255,0.12); border:1.5px solid rgba(255,255,255,0.25); border-radius:8px; color:#fff; padding:0.35rem 0.7rem; font-size:0.78rem; font-weight:600; cursor:pointer; font-family:inherit; transition:all 0.15s; white-space:nowrap; line-height:1.3; } + .login-toggle-btn:hover { background:rgba(255,255,255,0.22); border-color:rgba(255,255,255,0.5); } + .login-toggle-btn.active { background:rgba(255,255,255,0.25); border-color:#fff; } + .login-dropdown-menu { display:none; position:absolute; right:0; top:110%; background:#fff; border-radius:12px; box-shadow:0 8px 32px rgba(0,0,0,0.18); min-width:240px; z-index:300; overflow:hidden; } + .login-dropdown-menu.open { display:block; animation:fadeDown 0.2s ease; } + @keyframes fadeDown { from{opacity:0;transform:translateY(-8px);} to{opacity:1;transform:translateY(0);} } + .login-dropdown-menu a { display:block; padding:0.65rem 1.1rem; color:#1a1a2e; text-decoration:none; font-size:0.85rem; font-weight:500; transition:background 0.15s; } + .login-dropdown-menu a:hover { background:#f0ede6; } + .login-dropdown-form { padding:0.8rem 1rem 0.5rem; } + .login-dropdown-form input { width:100%; padding:0.5rem 0.7rem; margin:0.3rem 0; border:1.5px solid #ddd; border-radius:8px; font-size:0.82rem; font-family:inherit; outline:none; box-sizing:border-box; transition:border-color 0.15s; } + .login-dropdown-form input:focus { border-color:#20228a; } + .login-dropdown-form button { width:100%; padding:0.55rem; background:#20228a; color:#fff; border:none; border-radius:8px; font-size:0.82rem; font-weight:600; cursor:pointer; font-family:inherit; margin-top:0.4rem; transition:background 0.15s; } + .login-dropdown-form button:hover { background:#161e6e; } + .login-dropdown-register { border-top:1px solid #eee; font-size:0.78rem !important; color:#888 !important; text-align:center; } + .login-dropdown-register:hover { color:#20228a !important; } + .header-bsn-link { color:#aaa; text-decoration:none; font-size:0.8rem; transition:color 0.2s; } + .header-bsn-link:hover { color:#fff; } + + /* ── Welcome Overlay ──────────────────────────────────────── */ + .welcome-backdrop { position:fixed; inset:0; z-index:100000; background:rgba(0,0,0,0.4); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); display:none; } + .welcome-backdrop.open { display:flex; align-items:center; justify-content:center; padding:1rem; } + .welcome-dialog { background:#fff; border-radius:18px; box-shadow:0 16px 64px rgba(0,0,0,0.25); max-width:480px; width:100%; max-height:90vh; overflow-y:auto; animation:fadeUp 0.3s ease; } + @keyframes fadeUp { from{opacity:0;transform:translateY(20px);} to{opacity:1;transform:translateY(0);} } + .welcome-header { background:#20228a; color:#fff; padding:1.2rem 1.5rem; border-radius:18px 18px 0 0; font-weight:800; font-size:1.1rem; display:flex; align-items:center; gap:0.5rem; } + .welcome-body { padding:1.5rem; color:#333; line-height:1.7; font-size:0.88rem; } + .welcome-body strong { color:#20228a; } + .welcome-body .welcome-feature { display:flex; gap:0.6rem; align-items:flex-start; margin:0.7rem 0; } + .welcome-body .welcome-icon { font-size:1.2rem; flex-shrink:0; margin-top:0.1rem; } + .welcome-footer { padding:0.8rem 1.5rem 1.2rem; border-top:1px solid #f0ede6; display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:0.5rem; } + .welcome-footer label { font-size:0.78rem; color:#888; display:flex; align-items:center; gap:0.4rem; cursor:pointer; user-select:none; } + .welcome-footer label input { width:16px; height:16px; accent-color:#20228a; cursor:pointer; } + .welcome-footer button { background:#20228a; color:#fff; border:none; border-radius:10px; padding:0.55rem 1.4rem; font-size:0.85rem; font-weight:700; cursor:pointer; font-family:inherit; transition:background 0.15s; } + .welcome-footer button:hover { background:#161e6e; } + + +
+
+
🎲 Willkommen in der BSN Community!
+
+

Hier teilen Brettspiel-Fans ihre EindrΓΌcke direkt von der SPIEL Essen β€” und darΓΌber hinaus.

+
πŸ“ΈBeitrΓ€ge durchstΓΆbern β€” Fotos, Videos, Sprachnachrichten und Texte aus der Community, sortiert nach Halle, Kategorie oder Beliebtheit.
+
βž•Selbst einreichen β€” Über den +-Button rechts unten kannst du eigene Fotos, Videos oder Texte beisteuern.
+
πŸ’¬BSN Assistent β€” Der Chat-Button rechts unten beantwortet Fragen zu Spielen und StΓ€nden β€” mit KI.
+
πŸ”Login β€” Oben rechts einloggen, um Benachrichtigungen zu erhalten und deine BeitrΓ€ge zu verwalten.
+

✨ Diese Seite ist ein Community-Projekt von brettspiel-news.de.

+
+ +
+
+
""" + filter_html + """
@@ -3613,8 +3695,7 @@ def public_frontend():
  • Startseite
  • -
  • πŸ“‹ Registrieren
  • -
  • πŸ” Login
  • +""" + ("
  • πŸ‘€ Profil
  • πŸšͺ Abmelden
  • " if user else "
  • πŸ“‹ Registrieren
  • πŸ” Login
  • ") + """
  • Impressum
  • DatenschutzerklΓ€rung
  • @@ -3656,6 +3737,49 @@ def public_frontend(): })(); + + """).replace("{LOGO_B64}", LOGO_B64) @@ -3708,17 +3832,84 @@ def _legal_page(title, content_html): .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; }} + .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 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; }} + .site-header {{ display:flex; align-items:center; gap:0.5rem; }} @media(max-width:600px) {{ .legal-container {{ margin:1rem; padding:1.2rem; }} }}
    {content_html} ← ZurΓΌck zur Startseite
    + +
    + + + + """ @@ -4495,7 +4686,21 @@ def public_detail(sub_id: int):