diff --git a/resources/js/admin/mobile/BrandingPage.tsx b/resources/js/admin/mobile/BrandingPage.tsx
index d142eba5..8a628091 100644
--- a/resources/js/admin/mobile/BrandingPage.tsx
+++ b/resources/js/admin/mobile/BrandingPage.tsx
@@ -21,8 +21,8 @@ import { useBackNavigation } from './hooks/useBackNavigation';
import { ADMIN_GRADIENTS, useAdminTheme } from './theme';
import { ContextHelpLink } from './components/ContextHelpLink';
import { extractBrandingForm, type BrandingFormValues } from '../lib/brandingForm';
-import { DEFAULT_EVENT_BRANDING } from '@/guest/context/EventBrandingContext';
-import { getContrastingTextColor, relativeLuminance } from '@/guest/lib/color';
+import { DEFAULT_EVENT_BRANDING } from '@/shared/guest/context/EventBrandingContext';
+import { getContrastingTextColor, relativeLuminance } from '@/shared/guest/lib/color';
const BRANDING_FORM_DEFAULTS = {
primary: DEFAULT_EVENT_BRANDING.primaryColor,
diff --git a/resources/js/admin/mobile/ProfileAccountPage.tsx b/resources/js/admin/mobile/ProfileAccountPage.tsx
index 50612ce9..31cb67fe 100644
--- a/resources/js/admin/mobile/ProfileAccountPage.tsx
+++ b/resources/js/admin/mobile/ProfileAccountPage.tsx
@@ -22,7 +22,7 @@ import { useBackNavigation } from './hooks/useBackNavigation';
import { useAdminTheme } from './theme';
import i18n from '../i18n';
import { extractBrandingForm, type BrandingFormValues } from '../lib/brandingForm';
-import { DEFAULT_EVENT_BRANDING } from '@/guest/context/EventBrandingContext';
+import { DEFAULT_EVENT_BRANDING } from '@/shared/guest/context/EventBrandingContext';
type ProfileFormState = {
name: string;
diff --git a/resources/js/guest-v2/App.tsx b/resources/js/guest-v2/App.tsx
index e15018b0..50e725f8 100644
--- a/resources/js/guest-v2/App.tsx
+++ b/resources/js/guest-v2/App.tsx
@@ -7,6 +7,7 @@ import { ConsentProvider } from '@/contexts/consent';
import { AppearanceProvider } from '@/hooks/use-appearance';
import { useAppearance } from '@/hooks/use-appearance';
import ToastHost from './components/ToastHost';
+import PwaManager from './components/PwaManager';
export default function App() {
return (
@@ -27,6 +28,7 @@ function AppThemeRouter() {
return (
{title}
-{copy}
- {hint ?{hint}
: null} -Lädt…
} - {!loading && items.length === 0 && ( -- {p.title || getPhotoTitle(p)} -
-- Lust auf mehr?{' '} - - Zur Galerie → - -
-- {t('consent.analytics.title')} -
-- {t('consent.analytics.body')} -
-{t('header.notifications.title', 'Updates')}
-- {center.unreadCount > 0 - ? t('header.notifications.unread', { defaultValue: '{count} neu', count: center.unreadCount }) - : t('header.notifications.allRead', 'Alles gelesen')} -
-{item.title}
- {item.body &&{item.body}
} -{message ?? t('header.notifications.empty', 'Gerade gibt es keine neuen Hinweise.')}
-- {push.error} -
- )} -- {t('share.title', 'Geteiltes Foto')} -
-- {photoId ? `#${photoId}` : ''} -
- {eventName ?{eventName}
: null} -- {url} -
- ) : null} -{emptyCopy}
- ) : ( -{t('achievements.badges.empty')}
-{badge.title}
-{badge.description}
-{t('achievements.feed.empty')}
-{item.guest || t('achievements.leaderboard.guestFallback')}
- {taskLabel &&{t('achievements.feed.taskLabel', { task: taskLabel })}
} -- {topPhoto.guest || t('achievements.leaderboard.guestFallback')} - {` – ${t('achievements.highlights.likesAmount', { count: formatNumber(topPhoto.likes) })}`} -
- {localizedTask && ( -- {t('achievements.highlights.taskLabel', { task: localizedTask })} -
- )} -{formatRelativeTime(topPhoto.createdAt)}
-{trendingEmotion.name}
-- {t('achievements.highlights.trendingCount', { count: formatNumber(trendingEmotion.count) })} -
-{t('achievements.page.subtitle')}
-- {t('home.welcomeLine').replace('{name}', displayName)} -
- {introMessage &&{introMessage}
} -- {t('home.welcomeLine').replace('{name}', displayName)} -
- {introMessage && ( -- {introMessage} -
- )} -{heroDescription}
-{progressMessage}
- {ctaHref && ctaLabel && ( - - )} -{ - if (card) { - titleRefs.current.set(card.id, node); - } - }} - data-collapsed={!isExpanded} - className={titleClasses} - style={{ ...titleFont, textShadow: '0 6px 18px rgba(15,23,42,0.28)' }} - > - {card.title} -
- ) - ) : loading ? ( -Ziehe deine erste Mission oder wähle eine Stimmung.
- )} -- {card.title} -
-{card.description}
-- Kamera öffnen oder ein Foto aus deiner Galerie wählen. Offline möglich – wir laden später hoch. -
- {requiresApproval ? ( -- Deine Fotos werden kurz geprüft und erscheinen danach in der Galerie. -
- ) : null} - {message && ( -- {message} {progress > 0 && progress < 100 ? `(${Math.round(progress)}%)` : ''} -
- )} -{t('landing.pageTitle')}
-- {t('landing.subheadline', 'Fotospiel begrüßt deine Gäste mit einem warmen Erlebnis, noch bevor die erste Aufnahme entsteht.')} -
-{feature.title}
-{feature.description}
-{t('landing.scan.headline', 'QR-Code scannen')}
-{t('landing.scan.subline', 'Nutze die Kamera deines Smartphones oder Tablets')}
-- {t('landing.hint.support', 'Du hast einen Link erhalten? Füge ihn direkt oben ein – wir erkennen den Event-Code automatisch.')} -
-- {t('landing.steps.title', 'So funktioniert Fotospiel')} -
-{label}
-{feature.description}
-- {t('landing.support.title', 'Support & Fragen')} -
-- {t('landing.support.copy', 'Frag dein Event-Team oder melde dich bei uns – wir helfen sofort weiter.')} -
-Laedt...
:{t('liveShowPlayer.loading', 'Live Show wird geladen...')}
-- {t('liveShowPlayer.error.title', 'Live Show nicht erreichbar')} -
-- {error ?? t('liveShowPlayer.error.description', 'Bitte überprüfe den Live-Link.')} -
-- {t('liveShowPlayer.empty.title', 'Noch keine Live-Fotos')} -
-{t('liveShowPlayer.empty.description', 'Warte auf die ersten Uploads...')}
-{t('notFound.description')}
-{error || t('profileSetup.error.default')}
- -{t('settings.subtitle')}
-Aufgabenbeschreibung, Dauer, Gruppengröße.
-