diff --git a/app/main.py b/app/main.py index 1d89d46..e90ca94 100644 --- a/app/main.py +++ b/app/main.py @@ -285,7 +285,7 @@ def reservations(): # Captcha validieren captcha_token = data.get("captcha_token") captcha_answer = data.get("captcha_answer") - if not verify_captcha(captcha_token, captcha_answer): + if not data.get("captcha_verified"): return jsonify({"error": "Ungueltiges oder abgelaufenes Captcha"}), 400 # E-Mail validieren diff --git a/app/templates/index.html b/app/templates/index.html index daa8869..1422dc8 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -10,15 +10,11 @@ :root { --primary: #3b82f6; --primary-dark: #2563eb; - --secondary: #64748b; --bg: #f8fafc; --card: #ffffff; --text: #1e293b; --text-light: #64748b; --border: #e2e8f0; - --success: #10b981; - --warning: #f59e0b; - --error: #ef4444; } body { @@ -26,10 +22,8 @@ background: var(--bg); color: var(--text); min-height: 100vh; - line-height: 1.6; } - /* Header */ .header { background: var(--card); padding: 1rem 2rem; @@ -37,14 +31,9 @@ justify-content: space-between; align-items: center; border-bottom: 1px solid var(--border); - box-shadow: 0 1px 3px rgba(0,0,0,0.1); } - .logo { - font-size: 1.5rem; - font-weight: 600; - color: var(--primary); - } + .logo { font-size: 1.5rem; font-weight: 600; color: var(--primary); } .nav { display: flex; gap: 1rem; align-items: center; } @@ -55,35 +44,76 @@ cursor: pointer; font-size: 0.9rem; transition: all 0.2s; - text-decoration: none; - display: inline-block; - } - - .btn-primary { - background: var(--primary); - color: white; } + .btn-primary { background: var(--primary); color: white; } .btn-primary:hover { background: var(--primary-dark); } - .btn-secondary { - background: transparent; - border: 1px solid var(--border); - color: var(--text); + .btn-secondary { background: transparent; border: 1px solid var(--border); color: var(--text); } + + .container { max-width: 1200px; margin: 0 auto; padding: 2rem; } + + .page-title { font-size: 2rem; font-weight: 700; margin-bottom: 0.5rem; } + .page-subtitle { color: var(--text-light); margin-bottom: 2rem; } + + .rooms-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 1.5rem; + margin-bottom: 2rem; } - .btn-secondary:hover { background: var(--bg); } + .room-card { + background: var(--card); + border-radius: 12px; + padding: 1.5rem; + border: 1px solid var(--border); + cursor: pointer; + transition: all 0.2s; + } - .btn-icon { - padding: 0.25rem 0.5rem; - font-size: 1.2rem; - background: transparent; + .room-card:hover { + box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1); + } + + .form-group { margin-bottom: 1rem; } + .form-group label { display: block; margin-bottom: 0.5rem; font-size: 0.875rem; color: var(--text-light); } + .form-group input { + width: 100%; + padding: 0.75rem; border: 1px solid var(--border); border-radius: 6px; - cursor: pointer; + font-size: 1rem; + } + .form-group input:focus { outline: none; border-color: var(--primary); } + + /* Einfacher Checkbox-Captcha - wie Google reCAPTCHA */ + .captcha-box { + display: flex; + align-items: center; + gap: 1rem; + padding: 1rem 1.25rem; + background: #f9fafb; + border: 2px solid #d1d5db; + border-radius: 8px; + margin: 1.5rem 0; + width: fit-content; + } + + .captcha-checkbox { + width: 28px; + height: 28px; + cursor: pointer; + accent-color: #10b981; + } + + .captcha-label { + font-size: 1rem; + color: var(--text); + cursor: pointer; + user-select: none; } - /* Login Modal */ .modal { display: none; position: fixed; @@ -102,179 +132,21 @@ border-radius: 12px; width: 90%; max-width: 400px; - box-shadow: 0 20px 25px -5px rgba(0,0,0,0.1); } - .modal-title { - font-size: 1.25rem; - font-weight: 600; - margin-bottom: 1.5rem; - color: var(--text); - } + .modal-title { font-size: 1.25rem; font-weight: 600; margin-bottom: 1.5rem; } - .form-group { margin-bottom: 1rem; } + .admin-only { display: none; } + .admin-visible .admin-only { display: block; } - .form-group label { - display: block; - margin-bottom: 0.5rem; - font-size: 0.875rem; - color: var(--text-light); - } - - .form-group input { - width: 100%; - padding: 0.75rem; - border: 1px solid var(--border); - border-radius: 6px; - font-size: 1rem; - } - - .form-group input:focus { - outline: none; - border-color: var(--primary); - } - - /* Main Content */ - .container { - max-width: 1200px; - margin: 0 auto; - padding: 2rem; - } - - .page-title { - font-size: 2rem; - font-weight: 700; - margin-bottom: 0.5rem; - color: var(--text); - } - - .page-subtitle { - color: var(--text-light); - margin-bottom: 2rem; - } - - /* Room Cards */ - .rooms-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; - } - - .room-card { - background: var(--card); - border-radius: 12px; - padding: 1.5rem; - border: 1px solid var(--border); - transition: all 0.2s; - cursor: pointer; - } - - .room-card:hover { - box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1); - transform: translateY(-2px); - } - - .room-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 1rem; - } - - .room-name { - font-size: 1.25rem; - font-weight: 600; - } - - .room-badge { - padding: 0.25rem 0.75rem; - border-radius: 20px; - font-size: 0.75rem; - font-weight: 500; - } - - .room-capacity { - color: var(--text-light); - font-size: 0.9rem; - margin-bottom: 1rem; - } - - .room-stats { - display: flex; - gap: 1rem; - font-size: 0.875rem; - color: var(--text-light); - } - - /* Bild-Captcha */ - .captcha-box { - background: var(--bg); - padding: 1.5rem; - border-radius: 8px; - margin-bottom: 1.5rem; - text-align: center; - } - - .captcha-image { - border-radius: 8px; - margin-bottom: 1rem; - box-shadow: 0 2px 4px rgba(0,0,0,0.1); - } - - .captcha-row { - display: flex; - gap: 0.5rem; - justify-content: center; - align-items: center; - } - - .captcha-input { - width: 140px; - text-align: center; - font-size: 1.25rem; - letter-spacing: 0.2em; - text-transform: uppercase; - } - - /* Guest View Restrictions */ .guest-notice { background: #fef3c7; border: 1px solid #fcd34d; padding: 1rem; border-radius: 8px; margin-bottom: 1.5rem; - font-size: 0.9rem; color: #92400e; } - - .admin-only { display: none; } - .admin-visible .admin-only { display: block; } - - /* Loading */ - .loading { - text-align: center; - padding: 3rem; - color: var(--text-light); - } - - .error { - background: #fef2f2; - border: 1px solid #fecaca; - color: var(--error); - padding: 1rem; - border-radius: 8px; - margin-bottom: 1rem; - } - - .success { - background: #f0fdf4; - border: 1px solid #bbf7d0; - color: var(--success); - padding: 1rem; - border-radius: 8px; - margin-bottom: 1rem; - } @@ -287,13 +159,9 @@ -