diff --git a/backend/__pycache__/app.cpython-312.pyc b/backend/__pycache__/app.cpython-312.pyc
index 2afa598..a477905 100644
Binary files a/backend/__pycache__/app.cpython-312.pyc and b/backend/__pycache__/app.cpython-312.pyc differ
diff --git a/backend/app.py b/backend/app.py
index 881eb46..466b8f0 100644
--- a/backend/app.py
+++ b/backend/app.py
@@ -272,7 +272,7 @@ TEXTS = {
"login": "Login",
"group_name": "Benutzername",
"group_password": "Passwort",
- "login_submit": "Weiter zum Gästebereich",
+ "login_submit": "Weiter zum Eingangsbereich",
"guest_area": "Gästebereich",
"hello_guest": "Hallo {name}.",
"logout": "Abmelden",
@@ -305,6 +305,8 @@ TEXTS = {
"location_story_title": "Klostermühle in den Weinbergen",
"location_story_text": "Die Klostermühle liegt mitten in den Weinbergen und verbindet ein besonderes Weingut-Ambiente mit saisonaler Küche. Euch erwartet eine entspannte Atmosphäre zwischen Natur, gutem Essen und einem wunderschönen Rahmen für unseren Hochzeitstag.",
"route_from_current": "Route ab aktuellem Standort",
+ "route_location_denied": "Standortfreigabe abgelehnt. Es wurde keine Route mit deinem Standort erstellt.",
+ "route_location_unavailable": "Standort ist in diesem Browser derzeit nicht verfügbar.",
"maps_privacy_notice": "Zur Anzeige der Karte werden Daten an Google übertragen.",
"maps_load_button": "Google Maps anzeigen",
"privacy": "Datenschutz",
@@ -314,7 +316,8 @@ TEXTS = {
"hero_headline_with_group": "Willkommen zu unserer Hochzeit, {name}",
"hero_text_single": "Wir freuen uns riesig, diesen besonderen Tag am 04.09.26 mit dir zu feiern.",
"hero_text_group": "Wir freuen uns riesig, diesen besonderen Tag am 04.09.26 mit euch zu feiern.",
- "hero_app_hint": "In dieser Webapp könnt ihr Zu- oder Absagen, Fotos hochladen, die Galerie ansehen und alle wichtigen Infos rund um den Tag finden. Bitte gebt eure Zu- oder Absage möglichst bald ab.",
+ "hero_app_hint_single": "In dieser Webapp kannst du zu- oder absagen, Fotos hochladen, die Galerie ansehen und alle wichtigen Infos rund um den Tag finden. Bitte gib deine Zu- oder Absage möglichst bald ab.",
+ "hero_app_hint": "In dieser Webapp könnt ihr zu- oder absagen, Fotos hochladen, die Galerie ansehen und alle wichtigen Infos rund um den Tag finden. Bitte gebt eure Zu- oder Absage möglichst bald ab.",
"to_guest_area": "Zum Gästebereich",
"schedule_text": "15:00 Trauung, 17:00 Empfang, 19:00 Dinner.",
"schedule_intro": "Hier findet ihr den Ablauf für unseren Hochzeitstag.",
@@ -350,11 +353,11 @@ TEXTS = {
"hotel_weinhaus_engel_desc": "Gemütliches Weinhaus-Hotel in Rauenthal.",
"taxi_text": "An einem Taxiservice arbeiten wir noch.",
"taxi_sticker_alt": "Bauarbeiter-Sticker: Arbeit in Progress",
- "gifts_teaser": "Wir würden uns über Geschenke sehr freuen...",
+ "gifts_teaser": "Wir würden uns über diese Geschenke sehr freuen...",
"gifts_reveal_button": "Wunsch aufdecken",
"gifts_image_alt": "Ein großer Haufen Geldscheine",
"gifts_caption": "Trommelwirbel... in unserer 70-Quadratmeter-Wohnung ist leider kein Platz mehr für Materielles.",
- "gifts_text": "Also: Money! Wir freuen uns über einen finanziellen Beitrag zu unserer Reise nach der Hochzeit.",
+ "gifts_text": "Also: Money! Ein finanzieller Beitrag zu unserer Reise nach der Hochzeit ist herzlich willkommen.",
"gallery_uploaded_by": "von {name}",
"gallery_empty": "Noch keine Bilder vorhanden.",
"gallery_image_alt": "Upload von {name}",
@@ -408,7 +411,7 @@ TEXTS = {
"login": "Login",
"group_name": "Username",
"group_password": "Password",
- "login_submit": "Open guest area",
+ "login_submit": "Continue to entrance area",
"guest_area": "Guest Area",
"hello_guest": "Hello {name}.",
"logout": "Logout",
@@ -441,6 +444,8 @@ TEXTS = {
"location_story_title": "Klostermuehle in the vineyards",
"location_story_text": "Klostermuehle is surrounded by vineyards and combines a unique winery atmosphere with seasonal cuisine. Expect a relaxed setting with nature, great food, and a beautiful backdrop for our wedding day.",
"route_from_current": "Route from current location",
+ "route_location_denied": "Location access was denied. No route with your location was created.",
+ "route_location_unavailable": "Location is currently unavailable in this browser.",
"maps_privacy_notice": "To display the map, data will be transferred to Google.",
"maps_load_button": "Show Google Maps",
"privacy": "Privacy",
@@ -450,6 +455,7 @@ TEXTS = {
"hero_headline_with_group": "Welcome to our wedding, {name}",
"hero_text_single": "We are incredibly excited to celebrate this special day on 09/04/26 with you.",
"hero_text_group": "We are incredibly excited to celebrate this special day on 09/04/26 with all of you.",
+ "hero_app_hint_single": "In this web app, you can send your RSVP, upload photos, view the gallery, and find all important details for the day. Please submit your RSVP soon.",
"hero_app_hint": "In this web app, you can send your RSVP, upload photos, view the gallery, and find all important details for the day. Please submit your RSVP soon.",
"to_guest_area": "Open guest area",
"schedule_text": "3:00 PM ceremony, 5:00 PM reception, 7:00 PM dinner.",
@@ -486,11 +492,11 @@ TEXTS = {
"hotel_weinhaus_engel_desc": "Cozy winehouse hotel in Rauenthal.",
"taxi_text": "We are still working on a taxi service.",
"taxi_sticker_alt": "Construction worker sticker: Work in progress",
- "gifts_teaser": "We would be very happy to receive gifts...",
+ "gifts_teaser": "We would be very happy to receive these gifts...",
"gifts_reveal_button": "Reveal wish",
"gifts_image_alt": "A big pile of cash",
"gifts_caption": "Drum roll... in our 70-square-meter apartment, we sadly have no room left for material things.",
- "gifts_text": "So: Money! We would be very happy about a financial contribution to our trip after the wedding.",
+ "gifts_text": "So: Money! A financial contribution to our trip after the wedding is very welcome.",
"gallery_uploaded_by": "by {name}",
"gallery_empty": "No photos available yet.",
"gallery_image_alt": "Uploaded by {name}",
@@ -526,7 +532,7 @@ TEXTS = {
"dashboard": "Dashboard",
"back": "Back",
"countdown_button_label": "Wedding countdown",
- "countdown_until": "Starts in",
+ "countdown_until": "Countdown",
"countdown_started": "The celebration has started",
"countdown_days": "Days",
"countdown_hours": "Hrs",
@@ -905,7 +911,7 @@ def welcome():
"welcome.html",
welcome_headline=welcome_headline,
welcome_text=welcome_text,
- welcome_hint=t("hero_app_hint"),
+ welcome_hint=t("hero_app_hint_single") if is_single_guest else t("hero_app_hint"),
)
diff --git a/backend/pyproject.toml b/backend/pyproject.toml
index 0be2c9c..9f82ac2 100644
--- a/backend/pyproject.toml
+++ b/backend/pyproject.toml
@@ -7,4 +7,5 @@ requires-python = ">=3.12"
dependencies = [
"flask>=3.1.2",
"gunicorn>=23.0.0",
+ "pillow>=12.1.1",
]
diff --git a/backend/static/styles.css b/backend/static/styles.css
index cb64da8..086d08f 100644
--- a/backend/static/styles.css
+++ b/backend/static/styles.css
@@ -335,6 +335,7 @@ section.card > p {
background: rgba(255, 252, 247, 0.98);
box-shadow: 0 14px 34px rgba(0, 0, 0, 0.22);
backdrop-filter: blur(4px);
+ text-align: center;
}
.login-privacy-title {
@@ -642,9 +643,10 @@ input[type="file"]:focus {
}
.toolbar-timer-popover {
- position: absolute;
- top: calc(100% + 0.38rem);
- right: 0;
+ position: fixed;
+ top: 4.4rem;
+ left: 50%;
+ transform: translateX(-50%);
min-width: 12.4rem;
padding: 0.62rem 0.7rem;
border-radius: 12px;
@@ -658,6 +660,7 @@ input[type="file"]:focus {
margin: 0 0 0.35rem;
color: rgba(31, 31, 31, 0.72);
font-size: 0.76rem;
+ text-align: center;
}
.toolbar-timer-grid {
@@ -701,6 +704,7 @@ input[type="file"]:focus {
margin: 0.42rem 0 0;
color: rgba(31, 31, 31, 0.74);
font-size: 0.74rem;
+ text-align: center;
}
@keyframes countdown-pop {
@@ -1191,6 +1195,7 @@ body.has-route-modal {
border: 1px solid rgba(31, 58, 47, 0.12);
padding: 1rem;
background: linear-gradient(155deg, #fff8eb 0%, #f3e6cc 100%);
+ text-align: center;
}
.gift-lead {
@@ -1235,6 +1240,7 @@ body.has-route-modal {
margin: 0.8rem 0 0;
font-weight: 700;
color: var(--forest);
+ text-align: center;
}
.money-rain {
@@ -1490,12 +1496,17 @@ body.has-route-modal {
.hero-overlay {
max-width: 54ch;
padding: 2rem;
+ margin-inline: auto;
}
.hero-banner {
min-height: 78vh;
background-position: center 24%;
}
+
+ .hero-hint-below {
+ margin-inline: auto;
+ }
}
@media (max-width: 640px) {
diff --git a/backend/templates/info.html b/backend/templates/info.html
index 6613115..fbe1144 100644
--- a/backend/templates/info.html
+++ b/backend/templates/info.html
@@ -191,7 +191,12 @@
{% elif page == 'location' %}