10-04-2026

This commit is contained in:
Kevin Adametz 2026-04-10 17:18:17 +02:00
parent 4d6b4930b2
commit 4bb89aad8c
836 changed files with 52961 additions and 5950 deletions

View file

@ -0,0 +1,42 @@
@if (!empty($content) && ($content['enabled'] ?? false))
<div x-data="{ dismissed: localStorage.getItem('announcement_dismissed_{{ $content['id'] ?? 'default' }}') === 'true' }"
x-show="!dismissed"
x-transition:leave="transition ease-in duration-200"
x-transition:leave-start="opacity-100 max-h-16"
x-transition:leave-end="opacity-0 max-h-0"
class="bg-secondary text-secondary-foreground overflow-hidden"
id="topbar">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="relative flex items-center justify-center gap-x-3 gap-y-1 flex-wrap min-h-10 py-2 pr-8 text-sm">
@if (isset($content['badge']))
<span class="hidden sm:inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[10px] font-bold uppercase tracking-wider bg-white/20 shrink-0">
{{ $content['badge'] }}
</span>
@endif
<span class="font-medium text-center leading-snug">
{{ $content['text'] ?? '' }}
</span>
@if (isset($content['link_text']) && isset($content['link_url']))
<a href="{{ $content['link_url'] }}"
class="inline-flex items-center gap-1 font-semibold underline underline-offset-2 decoration-white/50 hover:decoration-white transition-colors shrink-0">
{{ $content['link_text'] }}
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3" />
</svg>
</a>
@endif
<button
@click="dismissed = true; localStorage.setItem('announcement_dismissed_{{ $content['id'] ?? 'default' }}', 'true')"
class="absolute right-0 top-1/2 -translate-y-1/2 p-1.5 text-white/60 hover:text-white transition-colors"
aria-label="{{ __('ui.announcement_close') }}">
<svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
</div>
@endif

View file

@ -4,7 +4,7 @@
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 bg-[hsl(var(--hero-container))] rounded-[20px] w-[95%]">
<div class="grid lg:grid-cols-2 gap-12 items-center">
<!-- Left Side - Hero Text -->
<div class="slide-right delay-200">
<div class="">
<h1 class="text-hero mb-6 tracking-wide">
{!! $content['hero']['title'] ?? 'Send us a<br /><span class="text-secondary font-medium">message.</span>' !!}
</h1>
@ -14,18 +14,27 @@
</div>
<!-- Right Side - Contact Form -->
<div class="card-elevated p-8 slide-left delay-200">
@if (session()->has('message'))
<div class="mb-6 p-4 bg-gray-50 border border-secondary/20 rounded-lg text-secondary">
{{ session('message') }}
<div class="card-elevated p-8 ">
@if ($success)
<div class="flex flex-col items-center text-center py-8 gap-5">
<div class="flex items-center justify-center w-20 h-20 rounded-full bg-green-100">
<svg class="w-10 h-10 text-green-600" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />
</svg>
</div>
<div>
<p class="text-2xl font-semibold text-foreground">{{ __('ui.contact_form.success_title') }}</p>
<p class="text-muted-foreground mt-2 max-w-sm mx-auto">
{{ $content['form']['success_message'] ?? __('ui.contact_form.success_message') }}
</p>
</div>
</div>
@endif
@else
<form wire:submit="submit" class="space-y-6">
<div class="grid md:grid-cols-2 gap-4">
<div>
<label for="firstName" class="text-foreground mb-2 block text-sm font-medium">
{{ $content['form']['labels']['first_name'] ?? 'First name *' }}
{{ $content['form']['labels']['first_name'] ?? __('ui.contact_form.first_name') }}
</label>
<input
wire:model="firstName"
@ -38,7 +47,7 @@
</div>
<div>
<label for="lastName" class="text-foreground mb-2 block text-sm font-medium">
{{ $content['form']['labels']['last_name'] ?? 'Last name *' }}
{{ $content['form']['labels']['last_name'] ?? __('ui.contact_form.last_name') }}
</label>
<input
wire:model="lastName"
@ -53,7 +62,7 @@
<div>
<label for="company" class="text-foreground mb-2 block text-sm font-medium">
{{ $content['form']['labels']['company'] ?? 'Company' }}
{{ $content['form']['labels']['company'] ?? __('ui.contact_form.company') }}
</label>
<input
wire:model="company"
@ -67,7 +76,7 @@
<div class="grid md:grid-cols-2 gap-4">
<div>
<label for="email" class="text-foreground mb-2 block text-sm font-medium">
{{ $content['form']['labels']['email'] ?? 'Email *' }}
{{ $content['form']['labels']['email'] ?? __('ui.contact_form.email') }}
</label>
<input
wire:model="email"
@ -80,7 +89,7 @@
</div>
<div>
<label for="phone" class="text-foreground mb-2 block text-sm font-medium">
{{ $content['form']['labels']['phone'] ?? 'Phone' }}
{{ $content['form']['labels']['phone'] ?? __('ui.contact_form.phone') }}
</label>
<input
wire:model="phone"
@ -94,7 +103,7 @@
<div>
<label for="subject" class="text-foreground mb-2 block text-sm font-medium">
{{ $content['form']['labels']['subject'] ?? 'Subject *' }}
{{ $content['form']['labels']['subject'] ?? __('ui.contact_form.subject') }}
</label>
<div class="grid grid-cols-1">
<select
@ -116,34 +125,70 @@
<div>
<label for="message" class="text-foreground mb-2 block text-sm font-medium">
{{ $content['form']['labels']['message'] ?? 'Message *' }}
{{ $content['form']['labels']['message'] ?? __('ui.contact_form.message') }}
</label>
<textarea
wire:model="message"
id="message"
rows="5"
class="w-full px-3 py-2 bg-gray-50 border border-border rounded-lg outline-1 -outline-offset-1 outline-gray-300 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-gray-600 sm:text-sm/6 resize-none"
placeholder="{{ $content['form']['placeholders']['message'] ?? 'Ihre Nachricht...' }}"
placeholder="{{ $content['form']['placeholders']['message'] ?? __('ui.contact_form.message_placeholder') }}"
required
></textarea>
@error('message') <span class="text-red-500 text-xs">{{ $message }}</span> @enderror
</div>
{{-- Honeypot --}}
<div class="opacity-0 absolute top-0 left-0 h-0 w-0 -z-10 overflow-hidden" aria-hidden="true">
<label for="website">Website</label>
<input type="text" id="website" name="website" wire:model="website" tabindex="-1" autocomplete="off">
</div>
<div x-data="{ on: $wire.entangle('privacy') }">
<label class="flex items-start gap-3 cursor-pointer">
<input
x-model="on"
id="privacy"
type="checkbox"
class="sr-only"
/>
<span
role="switch"
:aria-checked="on.toString()"
:class="on ? 'bg-green-500' : 'bg-muted'"
class="relative mt-0.5 w-11 h-6 shrink-0 rounded-full transition-colors duration-200"
>
<span
:class="on ? 'translate-x-5' : 'translate-x-0'"
class="absolute top-0.5 left-0.5 h-5 w-5 rounded-full bg-white shadow-sm transition-transform duration-200 pointer-events-none"
></span>
</span>
<span class="text-sm text-muted-foreground">
{{ __('ui.contact_form.privacy_prefix') }}
<a href="{{ route('privacy') }}" target="_blank" class="text-secondary underline underline-offset-2 hover:no-underline">Datenschutzerklärung</a>
{{ __('ui.contact_form.privacy_suffix') }}
</span>
</label>
@error('privacy') <span class="text-red-500 text-xs mt-1 block">{{ $message }}</span> @enderror
</div>
<button
type="submit"
class="w-full btn-primary flex items-center justify-center"
wire:loading.attr="disabled"
>
<div class="flex items-center justify-center">
<span wire:loading.remove>{{ $content['form']['button_text'] ?? 'Senden' }}</span>
<span wire:loading>{{ $content['form']['button_loading'] ?? 'Wird gesendet...' }}</span>
<span wire:loading.remove>{{ $content['form']['button_text'] ?? __('ui.contact_form.send') }}</span>
<span wire:loading>{{ $content['form']['button_loading'] ?? __('ui.contact_form.sending') }}</span>
<svg wire:loading.remove class="ml-2 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"/>
</svg>
</div>
</button>
<p class="text-sm text-muted-foreground">{{ __('ui.required_fields') }}</p>
</form>
@endif
</div>
</div>
</div>
@ -172,7 +217,7 @@
@endif
</div>
<h3 class="text-xl mb-2 text-foreground">{{ $info['title'] }}</h3>
<div class="text-muted-foreground text-sm">
<div class="text-muted-foreground text-base">
@foreach($info['info'] as $line)
<p>{{ $line }}</p>
@endforeach
@ -184,7 +229,7 @@
</section>
<!-- Social Media Section -->
<section class="section-padding bg-accent">
{{-- <section class="section-padding bg-accent">
<div class="container-padding">
<div class="grid lg:grid-cols-2 gap-12 items-center">
<div class="slide-right delay-200">
@ -212,4 +257,5 @@
</div>
</div>
</section>
--}}
</div>

View file

@ -5,14 +5,16 @@
<div class="spacing-section">
<div class="flex items-center justify-center">
<img src="{{ asset(\App\Helpers\ThemeHelper::getLogoPath('negative')) }}"
alt="{{ $domainName ?? 'B2In' }} Logo" class="h-14 w-auto" />
alt="{{ $domainName ?? 'B2in' }} Logo" class="h-14 w-auto"
width="120" height="56"
loading="lazy" />
</div>
<div class="container-narrow spacing-content">
<h2 class="text-section-title text-dark-text leading-tight">
Connecting Design and <span class="text-secondary">Property</span>
</h2>
<p class="text-dark-muted text-sm mt-4">Marcel Scheibe {{ __('ui.founder_ceo') }}</p>
</div>
<hr class="border-t border-dark-muted/30 mt-12 pt-4">
@ -21,21 +23,19 @@
{{-- Links --}}
<div class="grid grid-cols-2 md:grid-cols-4 gap-8 text-left max-w-4xl mx-auto">
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Privacy Policy</a>
<a href="{{ route('privacy') }}" class="block hover-text-secondary transition-colors">Privacy Policy</a>
</div>
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Terms of Service</a>
<a href="{{ route('terms') }}" class="block hover-text-secondary transition-colors">Terms of Service</a>
</div>
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Cookie Policy</a>
<a href="{{ route('cookie-policy') }}" class="block hover-text-secondary transition-colors">Cookie Policy</a>
</div>
<div class="spacing-small text-center">
<a href="#" class="block hover-text-secondary transition-colors">Impressum</a>
<a href="{{ route('impressum') }}" class="block hover-text-secondary transition-colors">{{ __('ui.legal_notice') }}</a>
</div>
</div>
</div>
@ -43,25 +43,18 @@
{{-- Bottom Bar --}}
<div class="border-t border-dark-muted/30 mt-12 pt-8">
<div class="flex flex-col md:flex-row justify-between items-center spacing-small md:space-y-0">
<div class="text-dark-muted text-sm">
© {{ date('Y') }} B2In. All rights reserved.
<div class="text-dark-muted text-sm flex flex-col sm:flex-row items-center gap-2 sm:gap-4">
<span>© {{ date('Y') }} B2in. All rights reserved.</span>
<a href="#" onclick="window.dispatchEvent(new CustomEvent('open-cookie-settings')); return false;"
class="hover-text-secondary transition-colors">
{{ __('ui.cookie_settings') }}
</a>
</div>
<div class="flex items-center space-x-6 text-dark-muted text-sm">
<div class="flex space-x-4">
<a href="#" class="hover-text-secondary transition-colors" aria-label="Facebook">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path
d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" />
</svg>
</a>
<a href="#" class="hover-text-secondary transition-colors" aria-label="Instagram">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<path
d="M12.017 0C5.396 0 .029 5.367.029 11.987c0 6.62 5.367 11.987 11.988 11.987s11.987-5.367 11.987-11.987C24.004 5.367 18.637.001 12.017.001zM8.449 16.988c-1.297 0-2.448-.49-3.323-1.297C4.198 14.895 3.708 13.744 3.708 12.447s.49-2.448 1.418-3.323c.875-.807 2.026-1.297 3.323-1.297s2.448.49 3.323 1.297c.928.875 1.418 2.026 1.418 3.323s-.49 2.448-1.418 3.244c-.875.807-2.026 1.297-3.323 1.297zm7.83-9.281c-.49 0-.928-.175-1.297-.49-.368-.315-.49-.753-.49-1.243s.122-.928.49-1.243c.369-.315.807-.49 1.297-.49s.928.175 1.297.49c.368.315.49.753.49 1.243s-.122.928-.49 1.243c-.369.315-.807.49-1.297.49z" />
</svg>
</a>
<a href="#" class="hover-text-secondary transition-colors" aria-label="LinkedIn">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
<a href="https://www.linkedin.com/in/marcel-scheibe/" target="_blank" class="hover-text-secondary transition-colors" aria-label="LinkedIn">
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
<path
d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
</svg>

View file

@ -6,7 +6,7 @@
alt="{{ $domainName ?? 'B2IN' }} Logo" class="h-10 w-auto" />
</a>
<nav class="hidden md:flex items-center space-x-8">
<nav class="hidden md:flex items-center space-x-8" aria-label="{{ __('ui.main_navigation') }}">
@if(isset($content['navigation']) && is_array($content['navigation']))
@foreach ($content['navigation'] as $navItem)
<a href="{{ $navItem['url'] }}"
@ -21,19 +21,38 @@
</nav>
<div class="flex items-center space-x-4">
<a href="{{ config('domains.domain_portal_url') }}"
class=" md:block rounded-md px-3 py-2 text-sm font-medium bg-secondary hover-bg-primary glow-medium text-white transition-all duration-200">
{{ $content['portal_login'] ?? 'Portal Login' }}
</a>
{{-- Language Switcher --}}
<div class="hidden md:flex items-center space-x-1 text-sm" role="group" aria-label="Language">
@foreach ($availableLocales as $locale => $label)
<button wire:click="switchLanguage('{{ $locale }}')"
class="px-2 py-1 rounded transition-colors duration-200
{{ $currentLocale === $locale
? 'text-secondary font-semibold'
: 'text-muted-foreground hover:text-foreground' }}"
@if($currentLocale === $locale) aria-current="true" @endif>
{{ $label }}
</button>
@if (!$loop->last)
<span class="text-border">|</span>
@endif
@endforeach
</div>
<a href="{{ route('contact') }}"
class="hidden md:block rounded-md px-5 py-2.5 text-sm font-medium bg-secondary hover-bg-primary glow-medium text-white transition-all duration-200">
{{ __('ui.contact') }}
</a>
<button wire:click="toggleMobileMenu"
class="md:hidden w-5 h-5 text-muted-foreground hover:text-foreground transition-colors">
class="md:hidden w-5 h-5 text-muted-foreground hover:text-foreground transition-colors"
aria-label="{{ $this->isMobileMenuOpen ? __('ui.menu_close') : __('ui.menu_open') }}"
aria-expanded="{{ $this->isMobileMenuOpen ? 'true' : 'false' }}">
@if ($this->isMobileMenuOpen)
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M6 18L18 6M6 6l12 12"></path>
</svg>
@else
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
@ -45,7 +64,7 @@
{{-- Mobile Menu --}}
@if ($this->isMobileMenuOpen)
<div class="md:hidden border-t border-border bg-background/95 backdrop-blur-sm">
<nav class="px-4 py-6 space-y-4">
<nav class="px-4 py-6 space-y-4" aria-label="{{ __('ui.mobile_navigation') }}">
@if(isset($content['navigation']) && is_array($content['navigation']))
@foreach ($content['navigation'] as $navItem)
<a href="{{ $navItem['url'] }}"
@ -58,10 +77,27 @@
</a>
@endforeach
@endif
<div class="pt-4 border-t border-border">
<a href="{{ config('domains.domain_portal_url') }}"
class="block w-full btn-secondary-accent text-center">
{{ $content['portal_login'] ?? 'Portal Login' }}
<div class="pt-4 border-t border-border space-y-3">
{{-- Mobile Language Switcher --}}
<div class="flex items-center space-x-1 text-sm px-3" role="group" aria-label="Language">
@foreach ($availableLocales as $locale => $label)
<button wire:click="switchLanguage('{{ $locale }}')"
class="px-3 py-1.5 rounded transition-colors duration-200
{{ $currentLocale === $locale
? 'text-secondary font-semibold bg-secondary/10'
: 'text-muted-foreground hover:text-foreground' }}"
@if($currentLocale === $locale) aria-current="true" @endif>
{{ $label }}
</button>
@if (!$loop->last)
<span class="text-border">|</span>
@endif
@endforeach
</div>
<a href="{{ route('contact') }}"
class="block rounded-md px-5 py-2.5 text-sm font-medium bg-secondary hover-bg-primary glow-medium text-white transition-all duration-200 text-center">
{{ __('ui.contact') }}
</a>
</div>
</nav>