First commit

This commit is contained in:
Kevin Adametz 2025-10-20 17:50:35 +02:00
commit 7cf3558ba7
12933 changed files with 1180047 additions and 0 deletions

View file

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="dark">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('title', $domainName ?? 'Admin - ' . config('app.name'))</title>
<!-- Favicon -->
<link rel="icon" href="{{ asset('img/favicons/admin-favicon.ico') }}">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600,700" rel="stylesheet" />
<!-- Styles -->
@vite([
\App\Helpers\ThemeHelper::getThemeCssPath(),
'resources/js/app.js'
], 'build/' . $theme)
{{-- @vite(['resources/css/admin.css', 'resources/js/app.js']) --}}
<!-- Additional Styles -->
@stack('styles')
</head>
<body class="antialiased bg-gray-50 dark:bg-gray-900">
<div class="min-h-screen flex">
<!-- Sidebar Navigation -->
<aside class="w-64 bg-white dark:bg-gray-800 shadow-md hidden md:block">
<div class="p-6">
<a href="{{ route('admin.home') }}" class="text-xl font-bold text-gray-900 dark:text-white">
{{ $domainName ?? config('app.name') . ' Admin' }}
</a>
</div>
<nav class="mt-10 px-6">
<a href="{{ route('admin.dashboard') }}" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-100 dark:hover:bg-gray-700 {{ request()->routeIs('admin.dashboard') ? 'bg-gray-100 dark:bg-gray-700' : '' }}">
Dashboard
</a>
<a href="{{ route('admin.settings.profile') }}" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-100 dark:hover:bg-gray-700 {{ request()->routeIs('admin.settings.profile') ? 'bg-gray-100 dark:bg-gray-700' : '' }}">
Profil
</a>
<!-- Weitere Navigationspunkte hier -->
</nav>
</aside>
<div class="flex-1 flex flex-col">
<!-- Top Navigation -->
<header class="bg-white dark:bg-gray-800 shadow-sm">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between h-16">
<div class="flex items-center md:hidden">
<!-- Mobile menu button -->
<button type="button" class="text-gray-500 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500" id="mobile-menu-button">
<span class="sr-only">Menu öffnen</span>
<svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
</div>
<div class="flex items-center">
@if(app()->environment('local'))
<!-- Domain-Informationsanzeige (nur in local) -->
<div class="mr-4 text-xs px-2 py-1 rounded bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-200">
{{ Request::getHost() }}
@if(config('domains.dev_settings.simulate_domain'))
<span class="inline-flex items-center ml-1 px-1.5 py-0.5 rounded-full text-xs bg-yellow-100 text-yellow-800">
Simuliert
</span>
@endif
</div>
@endif
<!-- User Dropdown -->
<div class="ml-3 relative">
<div>
<button type="button" class="flex text-sm rounded-full focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" id="user-menu-button">
<span class="sr-only">Benutzermenü öffnen</span>
<div class="h-8 w-8 rounded-full bg-gray-200 flex items-center justify-center">
<span class="text-xs font-medium">{{ Auth::user()->name[0] ?? 'U' }}</span>
</div>
</button>
</div>
<!-- Dropdown menu -->
<div class="hidden origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white dark:bg-gray-700 ring-1 ring-black ring-opacity-5 focus:outline-none" role="menu" id="user-menu">
<a href="{{ route('admin.settings.profile') }}" class="block px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-600" role="menuitem">Profil</a>
<a href="{{ route('admin.settings.appearance') }}" class="block px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-600" role="menuitem">Einstellungen</a>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit" class="block w-full text-left px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-600" role="menuitem">Abmelden</button>
</form>
</div>
</div>
</div>
</div>
</div>
</header>
<!-- Mobile menu (off-canvas) -->
<div class="md:hidden hidden" id="mobile-menu">
<div class="px-2 pt-2 pb-3 space-y-1 bg-white dark:bg-gray-800 shadow-lg">
<a href="{{ route('admin.dashboard') }}" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700">Dashboard</a>
<a href="{{ route('admin.settings.profile') }}" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700">Profil</a>
<!-- Weitere mobile Navigationspunkte hier -->
</div>
</div>
<!-- Page Content -->
<main class="flex-1 py-10">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
@yield('content')
</div>
</main>
</div>
</div>
<!-- Scripts -->
<script>
// Toggle user dropdown
const userMenuButton = document.getElementById('user-menu-button');
const userMenu = document.getElementById('user-menu');
if (userMenuButton && userMenu) {
userMenuButton.addEventListener('click', function() {
userMenu.classList.toggle('hidden');
});
// Close the dropdown when clicked outside
document.addEventListener('click', function(event) {
if (!userMenuButton.contains(event.target) && !userMenu.contains(event.target)) {
userMenu.classList.add('hidden');
}
});
}
// Mobile menu toggle
const mobileMenuButton = document.getElementById('mobile-menu-button');
const mobileMenu = document.getElementById('mobile-menu');
if (mobileMenuButton && mobileMenu) {
mobileMenuButton.addEventListener('click', function() {
mobileMenu.classList.toggle('hidden');
});
}
</script>
<!-- Additional Scripts -->
@stack('scripts')
</body>
</html>

View file

@ -0,0 +1,126 @@
<footer class="bg-white">
<div class="mx-auto max-w-7xl px-6 pt-12 pb-8 sm:pt-16 lg:px-8 lg:pt-16">
<div class="xl:grid xl:grid-cols-3 xl:gap-8">
<img class="h-9" src="https://tailwindcss.com/plus-assets/img/logos/mark.svg?color=indigo&shade=600" alt="Company name">
<div class="mt-16 grid grid-cols-2 gap-8 xl:col-span-2 xl:mt-0">
<div class="md:grid md:grid-cols-2 md:gap-8">
<div>
<h3 class="text-sm/6 font-semibold text-gray-900">Solutions</h3>
<ul role="list" class="mt-6 space-y-4">
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Marketing</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Analytics</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Automation</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Commerce</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Insights</a>
</li>
</ul>
</div>
<div class="mt-10 md:mt-0">
<h3 class="text-sm/6 font-semibold text-gray-900">Support</h3>
<ul role="list" class="mt-6 space-y-4">
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Submit ticket</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Documentation</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Guides</a>
</li>
</ul>
</div>
</div>
<div class="md:grid md:grid-cols-2 md:gap-8">
<div>
<h3 class="text-sm/6 font-semibold text-gray-900">Company</h3>
<ul role="list" class="mt-6 space-y-4">
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">About</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Blog</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Jobs</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Press</a>
</li>
</ul>
</div>
<div class="mt-10 md:mt-0">
<h3 class="text-sm/6 font-semibold text-gray-900">Legal</h3>
<ul role="list" class="mt-6 space-y-4">
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Terms of service</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">Privacy policy</a>
</li>
<li>
<a href="#" class="text-sm/6 text-gray-600 hover:text-gray-900">License</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="mt-16 border-t border-gray-900/10 pt-8 sm:mt-20 lg:mt-24 lg:flex lg:items-center lg:justify-between">
<div>
<h3 class="text-sm/6 font-semibold text-gray-900">Subscribe to our newsletter</h3>
<p class="mt-2 text-sm/6 text-gray-600">The latest news, articles, and resources, sent to your inbox weekly.</p>
</div>
<form class="mt-6 sm:flex sm:max-w-md lg:mt-0">
<label for="email-address" class="sr-only">Email address</label>
<input type="email" name="email-address" id="email-address" autocomplete="email" required class="w-full min-w-0 rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline-2 focus:-outline-offset-2 focus:outline-indigo-600 sm:w-56 sm:text-sm/6" placeholder="Enter your email">
<div class="mt-4 sm:mt-0 sm:ml-4 sm:shrink-0">
<button type="submit" class="flex w-full items-center justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-xs hover:bg-indigo-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">Subscribe</button>
</div>
</form>
</div>
<div class="mt-8 border-t border-gray-900/10 pt-8 md:flex md:items-center md:justify-between">
<div class="flex gap-x-6 md:order-2">
<a href="#" class="text-gray-600 hover:text-gray-800">
<span class="sr-only">Facebook</span>
<svg class="size-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd" d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.988C18.343 21.128 22 16.991 22 12z" clip-rule="evenodd" />
</svg>
</a>
<a href="#" class="text-gray-600 hover:text-gray-800">
<span class="sr-only">Instagram</span>
<svg class="size-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd" d="M12.315 2c2.43 0 2.784.013 3.808.06 1.064.049 1.791.218 2.427.465a4.902 4.902 0 011.772 1.153 4.902 4.902 0 011.153 1.772c.247.636.416 1.363.465 2.427.048 1.067.06 1.407.06 4.123v.08c0 2.643-.012 2.987-.06 4.043-.049 1.064-.218 1.791-.465 2.427a4.902 4.902 0 01-1.153 1.772 4.902 4.902 0 01-1.772 1.153c-.636.247-1.363.416-2.427.465-1.067.048-1.407.06-4.123.06h-.08c-2.643 0-2.987-.012-4.043-.06-1.064-.049-1.791-.218-2.427-.465a4.902 4.902 0 01-1.772-1.153 4.902 4.902 0 01-1.153-1.772c-.247-.636-.416-1.363-.465-2.427-.047-1.024-.06-1.379-.06-3.808v-.63c0-2.43.013-2.784.06-3.808.049-1.064.218-1.791.465-2.427a4.902 4.902 0 011.153-1.772A4.902 4.902 0 015.45 2.525c.636-.247 1.363-.416 2.427-.465C8.901 2.013 9.256 2 11.685 2h.63zm-.081 1.802h-.468c-2.456 0-2.784.011-3.807.058-.975.045-1.504.207-1.857.344-.467.182-.8.398-1.15.748-.35.35-.566.683-.748 1.15-.137.353-.3.882-.344 1.857-.047 1.023-.058 1.351-.058 3.807v.468c0 2.456.011 2.784.058 3.807.045.975.207 1.504.344 1.857.182.466.399.8.748 1.15.35.35.683.566 1.15.748.353.137.882.3 1.857.344 1.054.048 1.37.058 4.041.058h.08c2.597 0 2.917-.01 3.96-.058.976-.045 1.505-.207 1.858-.344.466-.182.8-.398 1.15-.748.35-.35.566-.683.748-1.15.137-.353.3-.882.344-1.857.048-1.055.058-1.37.058-4.041v-.08c0-2.597-.01-2.917-.058-3.96-.045-.976-.207-1.505-.344-1.858a3.097 3.097 0 00-.748-1.15 3.098 3.098 0 00-1.15-.748c-.353-.137-.882-.3-1.857-.344-1.023-.047-1.351-.058-3.807-.058zM12 6.865a5.135 5.135 0 110 10.27 5.135 5.135 0 010-10.27zm0 1.802a3.333 3.333 0 100 6.666 3.333 3.333 0 000-6.666zm5.338-3.205a1.2 1.2 0 110 2.4 1.2 1.2 0 010-2.4z" clip-rule="evenodd" />
</svg>
</a>
<a href="#" class="text-gray-600 hover:text-gray-800">
<span class="sr-only">X</span>
<svg class="size-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path d="M13.6823 10.6218L20.2391 3H18.6854L12.9921 9.61788L8.44486 3H3.2002L10.0765 13.0074L3.2002 21H4.75404L10.7663 14.0113L15.5685 21H20.8131L13.6819 10.6218H13.6823ZM11.5541 13.0956L10.8574 12.0991L5.31391 4.16971H7.70053L12.1742 10.5689L12.8709 11.5655L18.6861 19.8835H16.2995L11.5541 13.096V13.0956Z" />
</svg>
</a>
<a href="#" class="text-gray-600 hover:text-gray-800">
<span class="sr-only">GitHub</span>
<svg class="size-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" />
</svg>
</a>
<a href="#" class="text-gray-600 hover:text-gray-800">
<span class="sr-only">YouTube</span>
<svg class="size-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path fill-rule="evenodd" d="M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z" clip-rule="evenodd" />
</svg>
</a>
</div>
<p class="mt-8 text-sm/6 text-gray-600 md:order-1 md:mt-0">&copy; 2024 Your Company, Inc. All rights reserved.</p>
</div>
</div>
</footer>

View file

@ -0,0 +1,232 @@
<!--
Mobile menu
Off-canvas menu for mobile, show/hide based on off-canvas menu state.
-->
<div class="relative z-40 lg:hidden" role="dialog" aria-modal="true" x-show="mobileMenuOpen" x-cloak>
<!--
Off-canvas menu backdrop, show/hide based on off-canvas menu state.
Entering: "transition-opacity ease-linear duration-300"
From: "opacity-0"
To: "opacity-100"
Leaving: "transition-opacity ease-linear duration-300"
From: "opacity-100"
To: "opacity-0"
-->
<div class="fixed inset-0 bg-black/50" aria-hidden="true"
x-show="mobileMenuOpen"
@click.stop="mobileMenuOpen = false"
x-transition:enter="transition-opacity ease-linear duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition-opacity ease-linear duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"></div>
<div class="fixed inset-0 z-40 flex" x-show="mobileMenuOpen" @mousedown.away="mobileMenuOpen = false">
<!--
Off-canvas menu, show/hide based on off-canvas menu state.
Entering: "transition ease-in-out duration-300 transform"
From: "-translate-x-full"
To: "translate-x-0"
Leaving: "transition ease-in-out duration-300 transform"
From: "translate-x-0"
To: "-translate-x-full"
-->
<div class="relative flex w-full max-w-xs flex-col overflow-y-auto bg-white pb-12 shadow-xl"
x-show="mobileMenuOpen"
@click.away="mobileMenuOpen = false"
x-transition:enter="transition ease-in-out duration-300 transform"
x-transition:enter-start="-translate-x-full"
x-transition:enter-end="translate-x-0"
x-transition:leave="transition ease-in-out duration-300 transform"
x-transition:leave-start="translate-x-0"
x-transition:leave-end="-translate-x-full">
<div class="flex px-4 pt-5 pb-2">
<button type="button" class="-m-2 inline-flex items-center justify-center rounded-md p-2 text-gray-400 pointer-events-auto cursor-pointer" @click="mobileMenuOpen = false">
<span class="sr-only">Close menu</span>
<svg class="size-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" />
</svg>
</button>
</div>
<!-- Links -->
<div class="space-y-6 border-t border-gray-200 px-4 py-4">
<div class="flow-root">
<a href="#" class="-m-2 block p-3 font-medium text-gray-900 hover:text-gray-900 hover:bg-gray-100 rounded-md">Start</a>
</div>
<div class="flow-root">
<a href="#" class="-m-2 block p-3 font-medium text-gray-900 hover:text-gray-900 hover:bg-gray-100 rounded-md">About</a>
</div>
<div class="flow-root">
<a href="#" class="-m-2 block p-3 font-medium text-gray-900 hover:text-gray-900 hover:bg-gray-100 rounded-md">Company</a>
</div>
<div class="flow-root">
<a href="#" class="-m-2 block p-3 font-medium text-gray-900 hover:text-gray-900 hover:bg-gray-100 rounded-md">Stores</a>
</div>
<div class="flow-root">
<a href="#" class="-m-2 block p-3 font-medium text-gray-900 hover:text-gray-900 hover:bg-gray-100 rounded-md">Contact</a>
</div>
</div>
<div class="space-y-6 border-t border-gray-200 px-4 py-6">
<div class="flow-root">
<a href="#" class="-m-2 block p-2 font-semibold text-white rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm shadow-xs hover:bg-indigo-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">Create an account</a>
</div>
<div class="flow-root">
<a href="{{ config('domains.domain_admin_url') }}/login" class="-m-2 block p-2 font-semibold text-white rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm shadow-xs hover:bg-indigo-500 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">Sign in</a>
</div>
</div>
<div class="space-y-6 border-t border-gray-200 px-4 py-6">
<!-- Currency selector -->
<form>
<div class="-ml-2 inline-grid grid-cols-1">
<div class="flex items-center">
<svg class="size-6 text-gray-500 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<select id="mobile-currency" name="currency" aria-label="Currency" class="w-full appearance-none rounded-md bg-white py-0.5 pr-7 pl-2 text-base font-medium text-gray-700 group-hover:text-gray-800 focus:outline-2 sm:text-sm/6">
<option>DE</option>
<option>EN</option>
</select>
<svg class="pointer-events-none -ml-6 size-5 fill-gray-500" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
</svg>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<header class="relative z-10">
<nav aria-label="Top">
<!-- Top navigation -->
<div class="bg-gray-900">
<div class="mx-auto flex h-10 max-w-7xl items-center justify-between px-4 sm:px-6 lg:px-8">
<!-- Currency selector -->
<form class="hidden lg:block lg:flex-1">
<div class="-ml-2 inline-grid grid-cols-1">
<div class="flex items-center">
<svg class="size-6 text-gray-300 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<select id="desktop-currency" name="currency" aria-label="Currency" class="w-full appearance-none rounded-md bg-gray-900 py-0.5 pr-7 pl-2 text-left text-base font-medium text-white focus:outline-2 focus:-outline-offset-1 focus:outline-white sm:text-sm/6">
<option>DE</option>
<option>EN</option>
</select>
<svg class="pointer-events-none -ml-6 size-5 fill-gray-300" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
<path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
</svg>
</div>
</div>
</form>
<p class="flex-1 text-center text-sm font-medium text-white lg:flex-none">Get free delivery on orders over $100</p>
<div class="hidden lg:flex lg:flex-1 lg:items-center lg:justify-end lg:space-x-6">
<a href="#" class="text-sm font-medium text-white hover:text-gray-100">Create an account</a>
<span class="h-6 w-px bg-gray-600" aria-hidden="true"></span>
<a href="{{ config('domains.domain_admin_url') }}" class="text-sm font-medium text-white hover:text-gray-100">Sign in</a>
</div>
</div>
</div>
<!-- Secondary navigation -->
<div class="bg-white">
<div class="border-b border-gray-200">
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div class="flex h-16 items-center justify-between">
<!-- Logo (lg+) -->
<div class="hidden lg:flex lg:items-center">
<a href="#">
<span class="sr-only">Your Company</span>
<img class="h-8 w-auto" src="https://tailwindcss.com/plus-assets/img/logos/mark.svg?color=indigo&shade=600" alt="">
</a>
</div>
<div class="hidden h-full lg:flex">
<!-- Mega menus -->
<div class="ml-8 my-2">
<div class="flex h-full justify-center space-x-8">
<a href="#" class="flex items-center text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-100 rounded-md px-2 py-1">Start</a>
<a href="#" class="flex items-center text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-100 rounded-md px-2 py-1">About</a>
<a href="#" class="flex items-center text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-100 rounded-md px-2 py-1">Company</a>
<a href="#" class="flex items-center text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-100 rounded-md px-2 py-1">Stores</a>
<a href="#" class="flex items-center text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-100 rounded-md px-2 py-1">Contact</a>
</div>
</div>
</div>
<!-- Mobile menu and search (lg-) -->
<div class="flex flex-1 items-center lg:hidden">
<!-- Mobile menu toggle, controls the 'mobileMenuOpen' state. -->
<button type="button" class="-ml-2 rounded-md bg-white p-2 text-gray-400 pointer-events-auto cursor-pointer" @click="mobileMenuOpen = true">
<span class="sr-only">Open menu</span>
<svg class="size-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" />
</svg>
</button>
<!-- Search -->
<a href="#" class="ml-2 p-2 text-gray-400 hover:text-gray-500">
<span class="sr-only">Search</span>
<svg class="size-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
</svg>
</a>
</div>
<!-- Logo (lg-) -->
<a href="#" class="lg:hidden">
<span class="sr-only">Your Company</span>
<img src="https://tailwindcss.com/plus-assets/img/logos/mark.svg?color=indigo&shade=600" alt="" class="h-8 w-auto">
</a>
<div class="flex flex-1 items-center justify-end">
<div class="flex items-center lg:ml-8">
<div class="flex space-x-8">
<div class="hidden lg:flex">
<a href="#" class="-m-2 p-2 text-gray-400 hover:text-gray-500">
<span class="sr-only">Search</span>
<svg class="size-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
</svg>
</a>
</div>
<div class="flex">
<a href="#" class="-m-2 p-2 text-gray-400 hover:text-gray-500">
<span class="sr-only">Account</span>
<svg class="size-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z" />
</svg>
</a>
</div>
</div>
<span class="mx-4 h-6 w-px bg-gray-200 lg:mx-6" aria-hidden="true"></span>
<div class="flow-root">
<a href="#" class="group -m-2 flex items-center p-2">
<svg class="size-6 shrink-0 text-gray-400 group-hover:text-gray-500" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon">
<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 0 0-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 0 0-16.536-1.84M7.5 14.25 5.106 5.272M6 20.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Zm12.75 0a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z" />
</svg>
<span class="ml-2 text-sm font-medium text-gray-700 group-hover:text-gray-800">0</span>
<span class="sr-only">items in cart, view bag</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>

View file

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('title', $domainName ?? config('app.name', 'Laravel'))</title>
<!-- Domain-spezifisches Favicon -->
<link rel="icon" href="{{ asset(\App\Helpers\ThemeHelper::getFaviconPath()) }}">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.bunny.net">
@php
$primaryFont = \App\Helpers\ThemeHelper::getPrimaryFont();
$secondaryFont = \App\Helpers\ThemeHelper::getSecondaryFont();
$theme = config('app.theme', 'b2in');
@endphp
@vite([
\App\Helpers\ThemeHelper::getThemeCssPath(),
'resources/js/app.js'
], 'build/' . $theme)
<!-- Sticky Header Script -->
<script>
document.addEventListener('DOMContentLoaded', function() {
const topbar = document.getElementById('topbar');
const header = document.getElementById('header');
if (!topbar || !header) return;
let topbarHeight = topbar.offsetHeight;
let isHeaderSticky = false;
function updateHeaderPosition() {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
if (scrollTop >= topbarHeight && !isHeaderSticky) {
// TopBar ist nicht mehr sichtbar - Header wird sticky
header.classList.remove('header-normal');
header.classList.add('header-sticky');
isHeaderSticky = true;
} else if (scrollTop < topbarHeight && isHeaderSticky) {
// TopBar ist wieder sichtbar - Header wird normal
header.classList.remove('header-sticky');
header.classList.add('header-normal');
isHeaderSticky = false;
}
}
// Initial check
updateHeaderPosition();
// Listen for scroll events
window.addEventListener('scroll', updateHeaderPosition);
// Listen for resize events (in case topbar height changes)
window.addEventListener('resize', function() {
topbarHeight = topbar.offsetHeight;
updateHeaderPosition();
});
});
</script>
<!-- Additional Styles -->
@stack('styles')
<!-- Domain-spezifische Fonts -->
@if ($primaryFont === 'Inter' && $secondaryFont === 'IBM Plex Sans')
<link href="https://fonts.bunny.net/css?family=inter:400,500,600,700|ibm-plex-sans:400,500,600,700"
rel="stylesheet" />
@elseif($primaryFont === 'Inter' && $secondaryFont === 'Merriweather')
<link href="https://fonts.bunny.net/css?family=inter:400,500,600,700|merriweather:400,700" rel="stylesheet" />
@elseif($primaryFont === 'Inter' && $secondaryFont === 'Ephesis')
<link href="https://fonts.bunny.net/css?family=inter:400,500,600,700|ephesis:400" rel="stylesheet" />
@elseif($primaryFont === 'Inter' && $secondaryFont === 'EB Garamond')
<link href="https://fonts.bunny.net/css?family=inter:400,500,600,700|eb-garamond:400,500,600,700"
rel="stylesheet" />
@else
<link href="https://fonts.bunny.net/css?family=inter:400,500,600,700|ibm-plex-sans:400,500,600,700"
rel="stylesheet" />
@endif
</head>
<body class="antialiased bg-background text-foreground">
<!-- TopBar - statisch oben -->
<livewire:web.components.ui.top-bar />
@yield('content')
<!-- Additional Scripts -->
@stack('scripts')
</body>
</html>