first commit
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled

This commit is contained in:
Kevin Adametz 2025-10-20 17:53:02 +02:00
commit 405df0a122
3083 changed files with 69203 additions and 0 deletions

View file

@ -0,0 +1,83 @@
{
"name": "B2In (Dev Container)",
// 1. DIES IST DER WICHTIGSTE TEIL:
// Wir verwenden Docker Compose für alle Services
"dockerComposeFile": [
"../docker-compose.yml"
],
"service": "laravel.test",
// 3. WIR DEFINIEREN DEN ARBEITSBEREICH:
// Das ist der Pfad, in dem Ihr Code *innerhalb* des Containers liegt.
"workspaceFolder": "/var/www/html",
// 4. WIR LEGEN DEN BENUTZER FEST:
// Laravel Sail führt Befehle standardmäßig als 'sail'-Benutzer aus, um Berechtigungsprobleme zu vermeiden.
"remoteUser": "sail",
// 5. ZUSÄTZLICHE ENTWICKLER-TOOLS (FEATURES):
// Features werden über postCreateCommand installiert um Kompatibilitätsprobleme zu vermeiden
"features": {},
// 6. BEFEHLE NACH DEM ERSTELLEN:
// Installiert nur die Tools die ohne Root-Rechte funktionieren
//"postCreateCommand": "composer install --no-interaction --prefer-dist --optimize-autoloader",
// 7. EDITOR-ANPASSUNGEN (Optional, aber sehr empfohlen):
"customizations": {
"vscode": {
"extensions": [
"bmewburn.vscode-intelephense-client",
"onecentlin.laravel-blade",
"shufo.vscode-blade-formatter",
"bradlc.vscode-tailwindcss"
]
}
},
// 8. ZU STARTENDE DIENSTE:
// Legt fest, welche Dienste aus der docker-compose.yml gestartet werden sollen.
"runServices": [
"laravel.test",
"mysql",
"redis",
"mailpit"
],
// 9. ZUSÄTZLICHE KONFIGURATION:
// Umgebungsvariablen für den DevContainer
"containerEnv": {
"WWWUSER": "501",
"WWWGROUP": "20",
"LARAVEL_SAIL": "1"
},
// 10. MOUNT-KONFIGURATION:
// Stellt sicher, dass der Code korrekt gemountet wird
"mounts": [
"source=${localWorkspaceFolder},target=/var/www/html,type=bind,consistency=cached"
],
// 11. FORWARD PORTS:
// Ports die automatisch weitergeleitet werden sollen
"forwardPorts": [
5174,
5175,
33067,
6381,
8026
],
"portsAttributes": {
"5174": {
"label": "Vite Dev Server (Portal)",
"onAutoForward": "notify"
},
"5175": {
"label": "Vite Dev Server (Web)",
"onAutoForward": "notify"
},
"33067": {
"label": "MySQL",
"onAutoForward": "silent"
},
"6381": {
"label": "Redis",
"onAutoForward": "silent"
},
"8026": {
"label": "Mailpit Dashboard",
"onAutoForward": "notify"
}
}
}

View file

@ -0,0 +1,33 @@
{
"private": true,
"type": "module",
"scripts": {
"build": "vite build",
"dev": "vite",
"dev:web": "vite --config vite.web.config.js",
"build:portal": "vite build --config vite.portal.config.js",
"build:web": "npm run build:b2in && npm run build:b2a && npm run build:stileigentum && npm run build:style2own",
"build:b2in": "THEME=b2in vite build --config vite.web.config.js",
"build:b2a": "THEME=b2a vite build --config vite.web.config.js",
"build:stileigentum": "THEME=stileigentum vite build --config vite.web.config.js",
"build:style2own": "THEME=style2own vite build --config vite.web.config.js"
},
"dependencies": {
"@tailwindcss/vite": "^4.0.7",
"alpinejs": "^3.14.9",
"autoprefixer": "^10.4.20",
"axios": "^1.7.4",
"concurrently": "^9.0.1",
"laravel-vite-plugin": "^1.0",
"tailwindcss": "^4.0.7",
"vite": "^6.0",
"@fontsource/instrument-sans": "^5.0.0",
"@fontsource/inter": "^5.0.0",
"@fontsource/poppins": "^5.0.0"
},
"optionalDependencies": {
"@rollup/rollup-linux-x64-gnu": "4.9.5",
"@tailwindcss/oxide-linux-x64-gnu": "^4.0.1",
"lightningcss-linux-x64-gnu": "^1.29.1"
}
}

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,33 @@
{
"resources/css/web/shared-styles.css": {
"file": "shared-styles-BpmL0S84.css",
"src": "resources/css/web/shared-styles.css",
"isEntry": true
},
"resources/css/web/theme-b2a.css": {
"file": "theme-b2a-BVR9j-ut.css",
"src": "resources/css/web/theme-b2a.css",
"isEntry": true
},
"resources/css/web/theme-b2in.css": {
"file": "theme-b2in-oKARomDq.css",
"src": "resources/css/web/theme-b2in.css",
"isEntry": true
},
"resources/css/web/theme-stileigentum.css": {
"file": "theme-stileigentum-cxAk5yJt.css",
"src": "resources/css/web/theme-stileigentum.css",
"isEntry": true
},
"resources/css/web/theme-style2own.css": {
"file": "theme-style2own-aIcZwV5c.css",
"src": "resources/css/web/theme-style2own.css",
"isEntry": true
},
"resources/js/app.js": {
"file": "app-l0sNRNKZ.js",
"name": "app",
"src": "resources/js/app.js",
"isEntry": true
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,33 @@
{
"resources/css/web/shared-styles.css": {
"file": "shared-styles-BpmL0S84.css",
"src": "resources/css/web/shared-styles.css",
"isEntry": true
},
"resources/css/web/theme-b2a.css": {
"file": "theme-b2a-BVR9j-ut.css",
"src": "resources/css/web/theme-b2a.css",
"isEntry": true
},
"resources/css/web/theme-b2in.css": {
"file": "theme-b2in-oKARomDq.css",
"src": "resources/css/web/theme-b2in.css",
"isEntry": true
},
"resources/css/web/theme-stileigentum.css": {
"file": "theme-stileigentum-cxAk5yJt.css",
"src": "resources/css/web/theme-stileigentum.css",
"isEntry": true
},
"resources/css/web/theme-style2own.css": {
"file": "theme-style2own-aIcZwV5c.css",
"src": "resources/css/web/theme-style2own.css",
"isEntry": true
},
"resources/js/app.js": {
"file": "app-l0sNRNKZ.js",
"name": "app",
"src": "resources/js/app.js",
"isEntry": true
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,13 @@
{
"resources/css/portal.css": {
"file": "portal-CK12WEW2.css",
"src": "resources/css/portal.css",
"isEntry": true
},
"resources/js/app.js": {
"file": "app-l0sNRNKZ.js",
"name": "app",
"src": "resources/js/app.js",
"isEntry": true
}
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,33 @@
{
"resources/css/web/shared-styles.css": {
"file": "shared-styles-BpmL0S84.css",
"src": "resources/css/web/shared-styles.css",
"isEntry": true
},
"resources/css/web/theme-b2a.css": {
"file": "theme-b2a-BVR9j-ut.css",
"src": "resources/css/web/theme-b2a.css",
"isEntry": true
},
"resources/css/web/theme-b2in.css": {
"file": "theme-b2in-oKARomDq.css",
"src": "resources/css/web/theme-b2in.css",
"isEntry": true
},
"resources/css/web/theme-stileigentum.css": {
"file": "theme-stileigentum-cxAk5yJt.css",
"src": "resources/css/web/theme-stileigentum.css",
"isEntry": true
},
"resources/css/web/theme-style2own.css": {
"file": "theme-style2own-aIcZwV5c.css",
"src": "resources/css/web/theme-style2own.css",
"isEntry": true
},
"resources/js/app.js": {
"file": "app-l0sNRNKZ.js",
"name": "app",
"src": "resources/js/app.js",
"isEntry": true
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,33 @@
{
"resources/css/web/shared-styles.css": {
"file": "shared-styles-BpmL0S84.css",
"src": "resources/css/web/shared-styles.css",
"isEntry": true
},
"resources/css/web/theme-b2a.css": {
"file": "theme-b2a-BVR9j-ut.css",
"src": "resources/css/web/theme-b2a.css",
"isEntry": true
},
"resources/css/web/theme-b2in.css": {
"file": "theme-b2in-oKARomDq.css",
"src": "resources/css/web/theme-b2in.css",
"isEntry": true
},
"resources/css/web/theme-stileigentum.css": {
"file": "theme-stileigentum-cxAk5yJt.css",
"src": "resources/css/web/theme-stileigentum.css",
"isEntry": true
},
"resources/css/web/theme-style2own.css": {
"file": "theme-style2own-aIcZwV5c.css",
"src": "resources/css/web/theme-style2own.css",
"isEntry": true
},
"resources/js/app.js": {
"file": "app-l0sNRNKZ.js",
"name": "app",
"src": "resources/js/app.js",
"isEntry": true
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,66 @@
@import 'tailwindcss';
@import '../../vendor/livewire/flux/dist/flux.css';
@source '../views';
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
@source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
@source '../../vendor/livewire/flux/stubs/**/*.blade.php';
@custom-variant dark (&:where(.dark, .dark *));
@theme {
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--color-zinc-50: #fafafa;
--color-zinc-100: #f5f5f5;
--color-zinc-200: #e5e5e5;
--color-zinc-300: #d4d4d4;
--color-zinc-400: #a3a3a3;
--color-zinc-500: #737373;
--color-zinc-600: #525252;
--color-zinc-700: #404040;
--color-zinc-800: #262626;
--color-zinc-900: #171717;
--color-zinc-950: #0a0a0a;
--color-accent: var(--color-neutral-800);
--color-accent-content: var(--color-neutral-800);
--color-accent-foreground: var(--color-white);
}
@layer theme {
.dark {
--color-accent: var(--color-white);
--color-accent-content: var(--color-white);
--color-accent-foreground: var(--color-neutral-800);
}
}
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentColor);
}
}
[data-flux-field]:not(ui-radio, ui-checkbox) {
@apply grid gap-2;
}
[data-flux-label] {
@apply !mb-0 !leading-tight;
}
input:focus[data-flux-control],
textarea:focus[data-flux-control],
select:focus[data-flux-control] {
@apply outline-hidden ring-2 ring-accent ring-offset-2 ring-offset-accent-foreground;
}
/* \[:where(&)\]:size-4 {
@apply size-4;
} */

View file

@ -0,0 +1,67 @@
@import "tailwindcss";
@import "../../vendor/livewire/flux/dist/flux.css";
@source '../views';
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
@source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
@source '../../vendor/livewire/flux/stubs/**/*.blade.php';
@custom-variant dark (&:where(.dark, .dark *));
@theme {
--font-sans: "Instrument Sans", ui-sans-serif, system-ui, sans-serif,
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
"Noto Color Emoji";
--color-zinc-50: #fafafa;
--color-zinc-100: #f5f5f5;
--color-zinc-200: #e5e5e5;
--color-zinc-300: #d4d4d4;
--color-zinc-400: #a3a3a3;
--color-zinc-500: #737373;
--color-zinc-600: #525252;
--color-zinc-700: #404040;
--color-zinc-800: #262626;
--color-zinc-900: #171717;
--color-zinc-950: #0a0a0a;
--color-accent: var(--color-neutral-800);
--color-accent-content: var(--color-neutral-800);
--color-accent-foreground: var(--color-white);
}
@layer theme {
.dark {
--color-accent: var(--color-white);
--color-accent-content: var(--color-white);
--color-accent-foreground: var(--color-neutral-800);
}
}
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentColor);
}
}
[data-flux-field]:not(ui-radio, ui-checkbox) {
@apply grid gap-2;
}
[data-flux-label] {
@apply !mb-0 !leading-tight;
}
input:focus[data-flux-control],
textarea:focus[data-flux-control],
select:focus[data-flux-control] {
@apply outline-hidden ring-2 ring-accent ring-offset-2 ring-offset-accent-foreground;
}
/* \[:where(&)\]:size-4 {
@apply size-4;
} */

View file

@ -0,0 +1,437 @@
/* Shared styles for all web themes - no @apply directives */
*,
::before,
::after {
box-sizing: border-box;
border-width: 0;
border-style: solid;
border-color: hsl(var(--border));
}
body {
background-color: hsl(var(--background));
color: hsl(var(--foreground));
font-family: var(--font-primary, 'Inter'), system-ui, -apple-system, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1, h2, h3, h4, h5, h6 {
font-weight: 500;
letter-spacing: -0.025em;
font-family: var(--font-secondary, 'Inter'), var(--font-primary, 'Inter'), system-ui, -apple-system, sans-serif;
}
/* Typography scales */
.text-hero {
font-size: clamp(3rem, 4vw, 6rem);
line-height: 1.1;
font-weight: 300;
letter-spacing: -0.025em;
}
.text-section-title {
font-size: clamp(1.6rem, 3vw, 3rem);
font-weight: 300;
letter-spacing: -0.025em;
}
.text-large {
font-size: clamp(1.1rem, 2vw, 1.2rem);
line-height: 1.625;
}
/* Border utilities to override the global border-width: 0 */
.border-t {
border-top-width: 1px !important;
}
.border-b {
border-bottom-width: 1px !important;
}
.border-l {
border-left-width: 1px !important;
}
.border-r {
border-right-width: 1px !important;
}
.border {
border-width: 1px !important;
}
/* Button styles */
.btn-primary {
background-color: hsl(var(--primary));
color: hsl(var(--primary-foreground));
padding: 0.75rem 2rem;
border-radius: 0.5rem;
font-weight: 500;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
display: inline-block;
text-decoration: none;
}
.btn-primary:hover {
background-color: hsl(var(--secondary));
color: hsl(var(--secondary-foreground));
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
}
.btn-primary-accent {
background-color: hsl(var(--primary));
color: hsl(var(--primary-foreground));
border: 1px solid hsl(var(--border));
padding: 0.75rem 2rem;
border-radius: 0.5rem;
font-weight: 500;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
display: inline-block;
text-decoration: none;
}
.btn-primary-accent:hover {
background-color: hsl(var(--accent));
color: hsl(var(--accent-foreground));
box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
}
.btn-secondary {
background-color: hsl(var(--secondary));
color: hsl(var(--secondary-foreground));
border: 1px solid hsl(var(--border));
padding: 0.75rem 2rem;
border-radius: 0.5rem;
font-weight: 500;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
display: inline-block;
text-decoration: none;
}
.btn-secondary:hover {
background-color: hsl(var(--primary));
color: hsl(var(--primary-foreground));
}
.btn-secondary-accent {
background-color: hsl(var(--secondary));
color: hsl(var(--secondary-foreground));
border: 1px solid hsl(var(--border));
padding: 0.75rem 2rem;
border-radius: 0.5rem;
font-weight: 500;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: inline-block;
text-decoration: none;
}
.btn-secondary-accent:hover {
background-color: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
.btn-accent {
background-color: hsl(var(--accent));
color: hsl(var(--accent-foreground));
padding: 0.75rem 2rem;
border-radius: 0.5rem;
font-weight: 500;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
display: inline-block;
text-decoration: none;
}
.btn-accent:hover {
background-color: hsl(var(--secondary));
color: hsl(var(--secondary-foreground));
box-shadow: var(--shadow-accent-glow);
}
/* Card styles */
.card-elevated {
background-color: hsl(var(--card));
border-radius: 1rem;
box-shadow: var(--shadow-card);
border: 1px solid hsl(var(--border) / 0.5);
}
/* Section styles */
.section-padding {
padding-top: 4rem;
padding-bottom: 4rem;
}
@media (min-width: 1024px) {
.section-padding {
padding-top: 6rem;
padding-bottom: 6rem;
}
}
.section-dark {
background-color: hsl(var(--dark-bg));
color: hsl(var(--dark-text));
}
.text-dark-muted {
color: hsl(var(--dark-muted));
}
/* Container styles */
.container-padding {
max-width: 80rem;
margin-left: auto;
margin-right: auto;
padding-left: 1rem;
padding-right: 1rem;
}
@media (min-width: 640px) {
.container-padding {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
}
@media (min-width: 1024px) {
.container-padding {
padding-left: 2rem;
padding-right: 2rem;
}
}
.container-narrow {
max-width: 56rem;
margin-left: auto;
margin-right: auto;
padding-left: 1rem;
padding-right: 1rem;
}
@media (min-width: 640px) {
.container-narrow {
padding-left: 1.5rem;
padding-right: 1.5rem;
}
}
@media (min-width: 1024px) {
.container-narrow {
padding-left: 2rem;
padding-right: 2rem;
}
}
/* Spacing utilities */
.spacing-section > * + * {
margin-top: 2rem;
}
.spacing-content > * + * {
margin-top: 1.5rem;
}
.spacing-small > * + * {
margin-top: 1rem;
}
/* Additional utility classes for better consistency */
.text-muted-foreground {
color: hsl(var(--muted-foreground));
}
.bg-background {
background-color: hsl(var(--background));
}
.text-foreground {
color: hsl(var(--foreground));
}
.bg-card {
background-color: hsl(var(--card));
}
.text-card-foreground {
color: hsl(var(--card-foreground));
}
.border-border {
border-color: hsl(var(--border));
}
.text-secondary {
color: hsl(var(--secondary));
}
.bg-secondary {
background-color: hsl(var(--secondary));
}
.text-secondary-foreground {
color: hsl(var(--secondary-foreground));
}
.bg-primary {
background-color: hsl(var(--primary));
}
.text-primary-foreground {
color: hsl(var(--primary-foreground));
}
.bg-accent {
background-color: hsl(var(--accent));
}
.text-accent-foreground {
color: hsl(var(--accent-foreground));
}
.bg-muted {
background-color: hsl(var(--muted));
}
.bg-muted\/20 {
background-color: hsl(var(--muted) / 0.2);
}
.bg-secondary\/10 {
background-color: hsl(var(--secondary) / 0.1);
}
.bg-secondary\/20 {
background-color: hsl(var(--secondary) / 0.2);
}
.bg-card\/95 {
background-color: hsl(var(--card) / 0.95);
}
.border-border\/50 {
border-color: hsl(var(--border) / 0.5);
}
.border-border\/30 {
border-color: hsl(var(--border) / 0.3);
}
.text-dark-muted {
color: hsl(var(--dark-muted));
}
.border-dark-muted\/30 {
border-color: hsl(var(--dark-muted) / 0.3);
}
.text-dark-text {
color: hsl(var(--dark-text));
}
.bg-dark-bg {
background-color: hsl(var(--dark-bg));
}
.bg-hero-container {
background-color: hsl(var(--hero-container));
}
.shadow-elevated {
box-shadow: var(--shadow-elevated);
}
.shadow-card {
box-shadow: var(--shadow-card);
}
.shadow-accent-glow {
box-shadow: var(--shadow-accent-glow);
}
/* Theme-spezifische Farben für Tailwind-Kompatibilität */
.text-primary {
color: hsl(var(--primary));
}
.text-secondary {
color: hsl(var(--secondary));
}
.text-muted-foreground {
color: hsl(var(--muted-foreground));
}
.bg-primary {
background-color: hsl(var(--primary));
}
.bg-secondary {
background-color: hsl(var(--secondary));
}
.border-primary {
border-color: hsl(var(--primary));
}
.border-secondary {
border-color: hsl(var(--secondary));
}
/* Hover-Effekte für Navigation */
.hover-text-secondary:hover {
color: hsl(var(--secondary));
}
.hover-text-primary:hover {
color: hsl(var(--primary));
}
.hover-bg-primary:hover {
background-color: hsl(var(--primary));
}
.hover-bg-secondary:hover {
background-color: hsl(var(--secondary));
}
.hover-border-secondary:hover {
border-color: hsl(var(--secondary));
}
.hover-shadow-accent-glow:hover {
box-shadow: var(--shadow-accent-glow);
}
/* TopBar specific styles */
.topbar-normal {
background-color: hsl(var(--muted) / 0.2);
border-bottom: 1px solid hsl(var(--border) / 0.3);
}
/* Sticky Header Verhalten */
.header-sticky {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 50;
background-color: hsl(var(--background) / 0.8);
backdrop-filter: blur(8px);
border-bottom: 1px solid hsl(var(--border));
transition: all 0.3s ease-in-out;
}
.header-normal {
position: relative;
transition: all 0.3s ease-in-out;
}
.bg-muted\/20 {
background-color: hsl(var(--muted) / 0.2);
}
.border-border\/30 {
border-color: hsl(var(--border) / 0.3);
}

View file

@ -0,0 +1,55 @@
@import "tailwindcss";
/* B2A Domain Theme - Azur Blue & Liberty Red */
@layer base {
:root {
/* Base colors */
--background: 32 20% 97%; /* #f5f4f2 - Light Beige */
--foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
--card: 0 25% 96%; /* #hsl(0 25% 96%) - Off White */
--card-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
--popover: 0 25% 96%; /* #hsl(0 25% 96%)- Off White */
--popover-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* B2A Theme Colors */
--primary: 207 70% 26%; /* #123f6d - Azur Blue */
--primary-foreground: 30 25% 98%; /* #faf9f7 - Off White */
--secondary: 352 76% 48%; /* #ce1d2e - Liberty Red */
--secondary-foreground: 0 25% 96%; /* #hsl(0 25% 96%) - Off White */
/* Neutral colors */
--muted: 0 0% 92%; /* hsl(0 0% 92%) - Light Muted */
--muted-foreground: 199 50% 45%; /* #4a8bb5 - Muted Blue */
--accent: 210 20% 95%; /* hsl(201 20% 95%) - Light Accent */
--accent-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Dark section colors */
--dark-bg: 207 70% 26%; /* #123f6d - Azur Blue */
--dark-text: 30 25% 98%; /* #faf9f7 - Off White */
--dark-muted: 30 20% 70%; /* #b8b0a7 - Dark Muted */
/* Interactive elements */
--destructive: 0 84.2% 60.2%; /* #ef4444 - Red */
--destructive-foreground: 210 40% 98%; /* #f8fafc - Light */
--border: 0 0% 80%; /* hsl(0 0% 80%) - Light Border */
--input: 0 0% 92%; /* hsl(0 0% 92%) - Input Background */
--ring: 20 14% 16%; /* #2a2a2a - Focus Ring */
--radius: 0.75rem;
/* Hero container background */
--hero-container: 0 0% 91%; /* #e8e8e8 - Light Gray */
/* Shadows */
--shadow-warm: 0 10px 30px -15px hsl(var(--foreground) / 0.1);
--shadow-card: 0 4px 20px -8px hsl(var(--foreground) / 0.08);
--shadow-elevated: 0 20px 40px -20px hsl(var(--foreground) / 0.15);
--shadow-accent-glow: 0 0 30px hsl(var(--secondary) / 0.3);
/* Font families */
--font-primary: 'Inter', system-ui, -apple-system, sans-serif;
--font-secondary: 'Merriweather', Georgia, serif;
}
}
@import "./shared-styles.css";

View file

@ -0,0 +1,68 @@
@import "tailwindcss";
/* B2IN Domain Theme - Anthracite & Dynamic Blue */
@layer base {
:root {
/* Base colors */
--background: 32 20% 97%; /* #f5f4f2 - Light Beige */
--foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Card colors */
--card: 0 25% 96%; /* #hsl(0 25% 96%) - Off White */
--card-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
--popover: 0 25% 96%; /* #hsl(0 25% 96%)- Off White */
--popover-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* B2IN Theme Colors */
--primary: 209 32% 25%; /* #2b3f51 - Anthracite */
--primary-foreground: 0 25% 96%; /* #hsl(0 25% 96%) - Off White */
--secondary: 199 74% 49%; /* #20a0da - Dynamic Blue */
--secondary-foreground: 0 25% 96%; /* hsl(0 25% 96%) - Off White */
/* Neutral colors */
--muted: 0 0% 92%; /* hsl(0 0% 92%) - Light Muted */
--muted-foreground: 199 50% 45%; /* #4a8bb5 - Muted Blue */
--accent: 210 0% 94%; /* hsl(210 5.26% 92.55%) - Light Accent */
--accent-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Dark section colors */
--dark-bg: 209 32% 25%; /* Matching primary */
--dark-text: 0 0% 100%; /* hsl(0 0% 100%) - Off White */
--dark-muted: 0 0% 80%; /* hsl(0 0% 80%) - Dark Muted */
/* Interactive elements */
--destructive: 0 84.2% 60.2%; /* #ef4444 - Red */
--destructive-foreground: 210 40% 98%; /* #f8fafc - Light */
--border: 0 0% 80%; /* hsl(0 0% 80%) - Light Border */
--input: 0 0% 92%; /* hsl(0 0% 92%) - Input Background */
--ring: 20 14% 16%; /* #2a2a2a - Focus Ring */
--radius: 0.75rem;
/* Hero container background */
--hero-container: 0 0% 91%; /* #e8e8e8 - Light Gray */
/* Consistent shadows */
--shadow-warm: 0 10px 30px -15px hsl(var(--foreground) / 0.1);
--shadow-card: 0 4px 20px -8px hsl(var(--foreground) / 0.08);
--shadow-elevated: 0 20px 40px -20px hsl(var(--foreground) / 0.15);
--shadow-accent-glow: 0 0 30px hsl(var(--secondary) / 0.3);
/* Transitions */
--transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
--transition-bounce: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
/* Font families */
--font-primary: 'Inter', system-ui, -apple-system, sans-serif;
--font-secondary: 'IBM Plex Sans', 'Inter', system-ui, -apple-system, sans-serif;
}
}
.text-section-title {
line-height: 0.95em;
}
@import "./shared-styles.css";

View file

@ -0,0 +1,63 @@
@import "tailwindcss";
@source '../../views/web/layout.blade.php';
@custom-variant dark (&:where(.dark, .dark *));
@theme {
--font-sans: "Instrument Sans", ui-sans-serif, system-ui, sans-serif,
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
"Noto Color Emoji";
--color-zinc-50: #fafafa;
--color-zinc-100: #f5f5f5;
--color-zinc-200: #e5e5e5;
--color-zinc-300: #d4d4d4;
--color-zinc-400: #a3a3a3;
--color-zinc-500: #737373;
--color-zinc-600: #525252;
--color-zinc-700: #404040;
--color-zinc-800: #262626;
--color-zinc-900: #171717;
--color-zinc-950: #0a0a0a;
--color-accent: var(--color-neutral-800);
--color-accent-content: var(--color-neutral-800);
--color-accent-foreground: var(--color-white);
}
@layer theme {
.dark {
--color-accent: var(--color-white);
--color-accent-content: var(--color-white);
--color-accent-foreground: var(--color-neutral-800);
}
}
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentColor);
}
}
[data-flux-field]:not(ui-radio, ui-checkbox) {
@apply grid gap-2;
}
[data-flux-label] {
@apply !mb-0 !leading-tight;
}
input:focus[data-flux-control],
textarea:focus[data-flux-control],
select:focus[data-flux-control] {
@apply outline-hidden ring-2 ring-accent ring-offset-2 ring-offset-accent-foreground;
}
/* \[:where(&)\]:size-4 {
@apply size-4;
} */

View file

@ -0,0 +1,58 @@
@import "tailwindcss";
/* Stileigentum Domain Theme - Style Blue & Style Sun */
@layer base {
:root {
/* Base colors */
--background: 32 20% 97%; /* #f5f4f2 - Light Beige */
--foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
--card: 38 40% 97%; /* #hsl(60 53.33% 88.24%) - Off White */
--card-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
--popover: 0 25% 96%; /* #hsl(0 25% 96%)- Off White */
--popover-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Stileigentum Theme Colors */
--primary: 209 65% 20%; /* #123453 - Imperial Blue */
--primary-foreground: 0 25% 96%; /* #hsl(0 25% 96%) - Off White */
--secondary: 38 40% 66%; /* #c9ac84 - Sand Gold */
--secondary-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Neutral colors */
--muted: 209 35% 94%; /* #f0f2f5 - Very Light Imperial Blue */
--muted-foreground: 209 10% 40%; /* hsl(208 9.09% 32.35%) - Muted Imperial Blue */
--accent: 38 40% 88%; /* hsl(38 40% 88%) - Very Light Sand Gold */
--accent-foreground: 209 10% 40%; /* hsl(204 4.35% 22.55%) - Darker Imperial Blue */
/* Dark section colors */
--dark-bg: 209 65% 20%; /* #123453 - Imperial Blue */
--dark-text: 0 0% 100%; /* hsl(0 0% 100%) - Off White */
--dark-muted: 30 20% 70%; /* #b8b0a7 - Dark Muted */
/* Interactive elements */
--destructive: 0 84.2% 60.2%; /* #ef4444 - Red */
--destructive-foreground: 210 40% 98%; /* #f8fafc - Light */
--border: 0 0% 80%; /* hsl(0 0% 80%) - Light Border */
--input: 0 0% 92%; /* hsl(0 0% 92%) - Input Background */
--radius: 0.75rem;
/* Hero container background */
--hero-container: 0 0% 91%; /* #e8e8e8 - Light Gray */
/* Shadows */
--shadow-warm: 0 10px 30px -15px hsl(var(--foreground) / 0.1);
--shadow-card: 0 4px 20px -8px hsl(var(--foreground) / 0.08);
--shadow-elevated: 0 20px 40px -20px hsl(var(--foreground) / 0.15);
--shadow-accent-glow: 0 0 30px hsl(var(--secondary) / 0.3);
/* Font families */
--font-primary: 'Inter', system-ui, -apple-system, sans-serif;
--font-secondary: 'EB Garamond', Georgia, serif;
}
}
.text-section-title {
line-height: 0.95em;
}
@import "./shared-styles.css";

View file

@ -0,0 +1,72 @@
@import "tailwindcss";
/* Style2own Domain Theme - Imperial Blue & Sand Gold */
@layer base {
:root {
/* Base colors */
--background: 32 20% 97%; /* #f5f4f2 - Light Beige */
--foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
--card: 30 25% 98%; /* #faf9f7 - Off White */
--card-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
--popover: 0 25% 96%; /* #hsl(0 25% 96%)- Off White */
--popover-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Style2own Theme Colors */
--primary: 195 100% 34%; /* #007aab - Style Blue */
--primary-foreground: 30 25% 98%; /* #faf9f7 - Off White */
--secondary: 46 95% 56%; /* #fbaf22 - Style Sun */
--secondary-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Neutral colors */
--muted: 0 0% 92%; /* hsl(0 0% 92%) - Light Muted */
--muted-foreground: 199 50% 45%; /* #4a8bb5 - Muted Blue */
--accent: 210 20% 95%; /* #f2f5f7 - Light Accent */
--accent-foreground: 20 14% 16%; /* #2a2a2a - Dark Gray */
/* Dark section colors */
--dark-bg: 195 100% 34%; /* #007aab - Style Blue */
--dark-text: 30 25% 98%; /* #faf9f7 - Off White */
--dark-muted: 30 20% 70%; /* #b8b0a7 - Dark Muted */
/* Interactive elements */
--destructive: 0 84.2% 60.2%; /* #ef4444 - Red */
--destructive-foreground: 210 40% 98%; /* #f8fafc - Light */
--border: 32 20% 90%; /* #e6e0d8 - Light Border */
--border: 0 0% 80%; /* hsl(0 0% 80%) - Light Border */
--input: 0 0% 92%; /* hsl(0 0% 92%) - Input Background */
--radius: 0.75rem;
/* Hero container background */
--hero-container: 0 0% 91%; /* #e8e8e8 - Light Gray */
/* Shadows */
--shadow-warm: 0 10px 30px -15px hsl(var(--foreground) / 0.1);
--shadow-card: 0 4px 20px -8px hsl(var(--foreground) / 0.08);
--shadow-elevated: 0 20px 40px -20px hsl(var(--foreground) / 0.15);
--shadow-accent-glow: 0 0 30px hsl(var(--secondary) / 0.3);
/* Font families */
--font-primary: 'Inter', system-ui, -apple-system, sans-serif;
--font-secondary: 'Ephesis', cursive;
}
}
/* Font size adjustments for Ephesis font - 30% larger */
.text-hero {
font-size: clamp(3.6rem, 4.2vw, 7.8rem) !important;
}
.text-section-title {
font-size: clamp(2.1rem, 3.9vw, 3.9rem) !important;
line-height: 0.85em;
}
.text-xl {
font-size: clamp(1.3rem, 2.2vw, 2.2rem) !important;
}
@import "./shared-styles.css";

View file

View file

@ -0,0 +1 @@
// App JS ohne Alpine-Initialisierung. Alpine wird von Livewire verwaltet.

View file

@ -0,0 +1,6 @@
<?php
return [
'Willkommen bei :domain' => 'Willkommen bei :domain',
'Sprache' => 'Sprache',
];

View file

@ -0,0 +1,6 @@
<?php
return [
'Willkommen bei :domain' => 'Welcome to :domain',
'Sprache' => 'Language',
];

View file

@ -0,0 +1,6 @@
<?php
return [
'Willkommen bei :domain' => 'Bienvenido a :domain',
'Sprache' => 'Idioma',
];

View file

@ -0,0 +1,6 @@
<?php
return [
'Willkommen bei :domain' => 'Bienvenue chez :domain',
'Sprache' => 'Langue',
];

View file

@ -0,0 +1,61 @@
const defaultTheme = require("tailwindcss/defaultTheme");
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./resources/views/portal/**/*.blade.php",
"./resources/views/layouts/portal/**/*.blade.php",
"./resources/views/components/**/*.blade.php",
"./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php",
"./vendor/livewire/flux-pro/stubs/**/*.blade.php",
"./vendor/livewire/flux/stubs/**/*.blade.php",
],
theme: {
extend: {
fontFamily: {
sans: ["Instrument Sans", ...defaultTheme.fontFamily.sans],
},
colors: {
accent: {
50: "rgb(var(--color-accent-50) / <alpha-value>)",
100: "rgb(var(--color-accent-100) / <alpha-value>)",
200: "rgb(var(--color-accent-200) / <alpha-value>)",
300: "rgb(var(--color-accent-300) / <alpha-value>)",
400: "rgb(var(--color-accent-400) / <alpha-value>)",
500: "rgb(var(--color-accent-500) / <alpha-value>)",
600: "rgb(var(--color-accent-600) / <alpha-value>)",
700: "rgb(var(--color-accent-700) / <alpha-value>)",
800: "rgb(var(--color-accent-800) / <alpha-value>)",
900: "rgb(var(--color-accent-900) / <alpha-value>)",
950: "rgb(var(--color-accent-950) / <alpha-value>)",
DEFAULT: "rgb(var(--color-accent-600) / <alpha-value>)",
},
},
ringColor: {
accent: "rgb(var(--color-accent-500) / <alpha-value>)",
},
ringOffsetColor: {
accent: "rgb(var(--color-accent-100) / <alpha-value>)",
},
backgroundColor: {
accent: {
DEFAULT: "rgb(var(--color-accent-600) / <alpha-value>)",
foreground: "var(--color-white)",
},
},
textColor: {
accent: {
DEFAULT: "rgb(var(--color-accent-600) / <alpha-value>)",
foreground: "var(--color-white)",
},
},
borderColor: {
accent: {
DEFAULT: "rgb(var(--color-accent-600) / <alpha-value>)",
},
},
},
},
plugins: [],
darkMode: "class",
};

View file

@ -0,0 +1,57 @@
const defaultTheme = require("tailwindcss/defaultTheme");
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./resources/views/web/**/*.blade.php",
"./resources/views/livewire/web/**/*.blade.php",
"./resources/views/livewire/web/components/**/*.blade.php",
"./app/Livewire/Web/**/*.php",
"./app/Livewire/Web/Components/**/*.php",
],
theme: {
extend: {
fontFamily: {
sans: ["var(--font-primary)", ...defaultTheme.fontFamily.sans],
secondary: ["var(--font-secondary)", ...defaultTheme.fontFamily.serif],
},
colors: {
// Theme-spezifische Farben mit CSS-Variablen (zusätzlich zu Standard-Farben)
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
card: {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
popover: {
DEFAULT: "hsl(var(--popover))",
foreground: "hsl(var(--popover-foreground))",
},
primary: "hsl(var(--primary))",
secondary: "hsl(var(--secondary))",
muted: {
DEFAULT: "hsl(var(--muted))",
foreground: "hsl(var(--muted-foreground))",
},
accent: {
DEFAULT: "hsl(var(--accent))",
foreground: "hsl(var(--accent-foreground))",
},
destructive: {
DEFAULT: "hsl(var(--destructive))",
foreground: "hsl(var(--destructive-foreground))",
},
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
},
},
plugins: [],
darkMode: "class",
};

View file

@ -0,0 +1,48 @@
import { defineConfig } from "vite";
import laravel from "laravel-vite-plugin";
import tailwindcss from "@tailwindcss/vite";
// SSL-Konfiguration - für Entwicklung ohne echte Zertifikate
const httpsConfig =
process.env.NODE_ENV === "production"
? {
// In Produktion: echte Zertifikate verwenden
key: process.env.SSL_KEY_PATH,
cert: process.env.SSL_CERT_PATH,
}
: true; // Self-signed für Entwicklung
export default defineConfig({
plugins: [
laravel({
input: ["resources/css/portal.css", "resources/js/app.js"],
refresh: ["resources/views/portal/**/*.blade.php"],
}),
tailwindcss({
config: "./tailwind.portal.config.js",
}),
],
server: {
https: false, // Traefik übernimmt SSL, Vite läuft intern auf HTTP
cors: true,
host: "0.0.0.0",
port: 5174, // oder 5175
hmr: {
host: "assets.b2in.test", // oder assets-web.b2in.test
protocol: "wss", // Explizit wss für WebSocket Secure
// WICHTIG: Die 'port'-Angabe hier entfernen!
// Der Browser soll den Standard-Port (443) von Traefik nutzen.
},
// Das origin ist nicht mehr notwendig, da der HMR-Port wegfällt.
},
build: {
outDir: "public/build/portal",
assetsDir: "",
manifest: "manifest.json",
rollupOptions: {
output: {
manualChunks: undefined,
},
},
},
});

View file

@ -0,0 +1,52 @@
import { defineConfig } from "vite";
import laravel from "laravel-vite-plugin";
import tailwindcss from "@tailwindcss/vite";
// SSL-Konfiguration - für Entwicklung ohne echte Zertifikate
const httpsConfig =
process.env.NODE_ENV === "production"
? {
// In Produktion: echte Zertifikate verwenden
key: process.env.SSL_KEY_PATH,
cert: process.env.SSL_CERT_PATH,
}
: true; // Self-signed für Entwicklung
export default defineConfig({
plugins: [
laravel({
input: [
// Web Theme CSS Dateien
"resources/css/web/theme-businessportal24.css",
"resources/js/app.js",
],
refresh: ["resources/views/web/**/*.blade.php"],
}),
tailwindcss({
config: "./tailwind.web.config.js",
}),
],
server: {
https: false, // Traefik übernimmt SSL, Vite läuft intern auf HTTP
cors: true,
host: "0.0.0.0",
port: 5178, // Web-spezifischer Port
hmr: {
host: "assets.businessportal24.test", //
protocol: "wss", // Explizit wss für WebSocket Secure
// WICHTIG: Die 'port'-Angabe hier entfernen!
// Der Browser soll den Standard-Port (443) von Traefik nutzen.
},
// Das origin ist nicht mehr notwendig, da der HMR-Port wegfällt.
},
build: {
outDir: `public/build/web`,
assetsDir: "",
manifest: "manifest.json",
rollupOptions: {
output: {
manualChunks: undefined,
},
},
},
});