13-05-2026 Frontend DEV + HUB
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled

This commit is contained in:
Kevin Adametz 2026-05-13 18:11:03 +02:00
parent 5b8bdf4182
commit 092ee0e918
24 changed files with 3560 additions and 34 deletions

View file

@ -21,8 +21,8 @@
--color-bg-dark: #15201a;
--color-bg-card-warm: #ecefe3;
--color-bg-card-warm-border: #c7cfb6;
--color-topbar: #1b2a1f;
--color-topbar2: #25342a;
--color-topbar: #1a3d2e; /* moderat heller als #1b2a1f, aber dunkler als #1f4d3a */
--color-topbar2: #122d22; /* analog moderat heller als #25342a */
/* Ink */
--color-ink: #1b2417;

View file

@ -0,0 +1,319 @@
/**
* Theme für den Publisher-Hub presseportale.com (presseportale.test)
*
* Eigener Charakter zwischen den beiden Brand-Portalen:
* - Surface: warmes Buchpapier (gleiche Familie wie BP24/Presseecho)
* - Primary: Hub-Blau (#1A2540) seriös, plattform-neutral
* - Accent: gedecktes Bernstein (#B07A3A) bewusst NICHT Orange (BP24) und NICHT Grün (Presseecho)
* - Schrift: Inter Tight + JetBrains Mono, OHNE Source Serif (Hub-Bezug, weniger editorial-redaktionell als die Brand-Portale)
*
* Token-Namen folgen wo möglich der BP24/Presseecho-Konvention (bg, bg-elev, bg-rule, ink-*),
* sodass viele Utility-Klassen identisch greifen. Hub-spezifische Tokens
* (hub, hub-2, hub-soft, accent-soft, hub-line) sind zusätzlich definiert.
*/
@import "./shared-styles.css";
@theme {
/* Surfaces — warmes Buchpapier, gleiche Familie wie die Brand-Portale */
--color-bg: #f6f4ef;
--color-bg-elev: #fbfaf6;
--color-bg-rule: #e2ddd0;
--color-bg-rule-strong: #1a1f1c;
--color-bg-dark: #15201a;
--color-bg-card: #ffffff;
--color-bg-card-warm: #efeadc;
--color-bg-card-warm-border: #d6cfbb;
/* Hub-Blau — Primary, plattform-neutral */
--color-hub: #1a2540;
--color-hub-2: #243152;
--color-hub-3: #2e3d66;
--color-hub-soft: #e5e9f1;
--color-hub-soft-2: #cfd6e4;
--color-hub-line: #7b8fbf;
/* Topbar (Alias für Hub-Gradient, damit shared base-Klassen passen) */
--color-topbar: #1a2540;
--color-topbar2: #243152;
--color-topbar-deep: #0f1729;
/* Akzent — gedecktes Bernstein (zwischen Orange und Beige) */
--color-accent: #b07a3a;
--color-accent-deep: #8a5e27;
--color-accent-soft: #f1e6d3;
--color-accent-warm: #b07a3a;
/* Ink — Anthrazit-Reihe */
--color-ink: #1a1f1c;
--color-ink-2: #3a413d;
--color-ink-3: #5a6360;
--color-ink-4: #8a918d;
--color-ink-on-dark: #f6f4ef;
--color-ink-on-dark-2: #b2b9c7;
--color-ink-on-dark-3: #7b8fbf;
--color-ink-on-dark-muted: #7b8fbf;
--color-ink-on-dark-rule: #2a3550;
/* Brand-Aliase, damit Komponenten, die brand-Tokens verwenden, funktionieren */
--color-brand: #1a2540;
--color-brand-deep: #0f1729;
--color-brand-soft: #e5e9f1;
--color-live: #c84a1e;
--color-gain: #2e8540;
--color-loss: #c8341e;
--color-ok: #2e8540;
/* Editorial-Akzente (für card-warm-Sektionen) */
--color-bg-card-warm-hover: #e6deca;
--color-bg-card-warm-rule: #c8bda3;
--color-card-warm-cat: #5a6360;
--color-card-warm-title: #2a302d;
--color-feature-line: #c0c8db;
--color-feature-dot: #d8dde9;
/* Fonts Hub: Inter Tight + JetBrains Mono.
Source Serif 4 wird zusätzlich geladen, damit Markennennungen der
Tochter-Portale (presseecho, businessportal24) typografisch konsistent
erscheinen im Hub-Standardtext kommt sie aber nicht zum Einsatz. */
--font-sans: "Inter Tight", Inter, system-ui, -apple-system,
BlinkMacSystemFont, "Segoe UI", sans-serif;
--font-serif: "Source Serif 4", "Source Serif Pro", Charter,
"Iowan Old Style", Georgia, serif;
--font-mono: "JetBrains Mono", "SF Mono", ui-monospace, SFMono-Regular,
Menlo, Consolas, monospace;
/* Layout */
--container-layout: 1280px;
}
/* HSL-Variablen für Legacy-Komponenten (shared-styles) */
:root {
--font-primary: var(--font-sans);
--font-secondary: var(--font-sans);
--background: 40 30% 95%; /* #f6f4ef */
--foreground: 144 8% 11%;
--card: 0 0% 100%;
--card-foreground: 144 8% 11%;
--popover: 0 0% 100%;
--popover-foreground: 144 8% 11%;
/* Primary: #1A2540 -> hsl(222, 43%, 18%) */
--primary: 222 43% 18%;
--primary-foreground: 0 0% 100%;
--primary-50: 222 43% 96%;
--primary-100: 222 43% 92%;
--primary-200: 222 43% 85%;
--primary-300: 222 43% 75%;
--primary-400: 222 43% 60%;
--primary-500: 222 43% 45%;
--primary-600: 222 43% 36%;
--primary-700: 222 43% 28%;
--primary-800: 222 43% 22%;
--primary-900: 222 43% 18%;
--primary-950: 222 43% 12%;
--secondary: 224 30% 30%;
--secondary-foreground: 0 0% 100%;
--muted: 40 18% 90%;
--muted-foreground: 144 6% 38%;
--accent: 31 51% 46%;
--accent-foreground: 0 0% 100%;
--destructive: 0 84% 60%;
--destructive-foreground: 0 0% 100%;
--border: 38 23% 85%;
--input: 38 23% 85%;
--ring: 222 43% 18%;
--radius: 4px;
--shadow-card: 0 1px 2px 0 rgb(26 37 64 / 0.06);
--shadow-card-hover: 0 4px 12px -2px rgb(26 37 64 / 0.12);
}
@layer base {
html,
body {
margin: 0;
padding: 0;
}
body {
background-color: #e8e4da;
color: var(--color-ink);
font-family: var(--font-sans);
-webkit-font-smoothing: antialiased;
font-feature-settings: "ss01", "cv11";
}
h1,
h2,
h3,
h4 {
font-family: var(--font-sans);
color: inherit;
letter-spacing: -0.01em;
}
.font-mono {
font-family: var(--font-mono);
font-feature-settings: "tnum";
}
}
@layer components {
/* Hub-Eyebrow — sperrgesetzt, in Hub-Blau */
.eyebrow {
font-size: 11px;
font-weight: 700;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--color-hub);
}
.eyebrow.muted {
color: var(--color-ink-3);
letter-spacing: 0.16em;
font-weight: 600;
font-size: 10.5px;
}
.eyebrow.accent {
color: var(--color-accent-deep);
}
.eyebrow.on-dark {
color: var(--color-hub-line);
}
/* Section-Eyebrow mit kurzem Linien-Schwanz */
.section-eyebrow {
display: inline-flex;
align-items: center;
gap: 12px;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--color-hub);
}
.section-eyebrow::after {
content: "";
display: block;
width: 42px;
height: 1px;
background: var(--color-hub);
opacity: 0.45;
}
.section-eyebrow.on-dark {
color: var(--color-hub-line);
}
.section-eyebrow.on-dark::after {
background: var(--color-hub-line);
opacity: 0.55;
}
.rule {
height: 1px;
background: var(--color-bg-rule);
border: 0;
margin: 0;
}
.rule-strong {
height: 1px;
background: var(--color-bg-rule-strong);
border: 0;
margin: 0;
}
.rule-hub {
height: 2px;
background: var(--color-hub);
border: 0;
margin: 0;
}
/* Subtile geometrische Hintergrundlinien fürs Hero */
.hero-grid {
background-image:
linear-gradient(
to right,
rgba(26, 37, 64, 0.04) 1px,
transparent 1px
),
linear-gradient(
to bottom,
rgba(26, 37, 64, 0.04) 1px,
transparent 1px
);
background-size: 48px 48px;
background-position: -1px -1px;
}
/* Hub-Gradient-Klassen */
.bg-hub-grad {
background-image: linear-gradient(
135deg,
var(--color-hub) 0%,
var(--color-hub-2) 100%
);
}
.bg-hub-grad-2 {
background-image: linear-gradient(
180deg,
var(--color-hub) 0%,
var(--color-topbar-deep) 100%
);
}
.bg-accent-grad {
background-image: linear-gradient(
135deg,
var(--color-accent) 0%,
var(--color-accent-deep) 100%
);
}
.bg-topbar-grad {
background-image: linear-gradient(
135deg,
var(--color-topbar) 0%,
var(--color-topbar2) 100%
);
}
/* Empfohlen-Ribbon auf Tarif-Karten */
.ribbon-recommend {
position: absolute;
top: -1px;
left: -1px;
right: -1px;
background: var(--color-hub);
color: #fff;
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
text-align: center;
padding: 8px 0;
}
/* Accordion-Pfeil (FAQ) */
details > summary {
list-style: none;
cursor: pointer;
}
details > summary::-webkit-details-marker {
display: none;
}
details[open] .faq-chev {
transform: rotate(180deg);
}
.faq-chev {
transition: transform 0.2s ease;
}
}
@layer utilities {
.tabular-nums {
font-variant-numeric: tabular-nums;
}
}
[x-cloak] {
display: none !important;
}

View file

@ -0,0 +1,66 @@
@props([
'brand' => 'presseportale',
'variant' => 'auto',
'serif' => true,
])
@php
/**
* Zentrale Brand-Wortmarke für alle drei Marken der Verlags-Familie.
*
* Schreibweise (verbindlich):
* - presseecho "presse" + "echo" (echo ist die Akzentfarbe)
* - businessportal24 "businessportal" + "24" (24 ist orange)
* - presseportale "presse" + "portale" (portale ist Bernstein)
*
* Keine TLD-Endung (".de", ".com") direkt am Markennamen. Diese gehören
* falls überhaupt getrennt in den juristischen Bereich (Impressum, Kontakt).
*
* Schriftart:
* - Standard `font-serif` (Source Serif 4) passt zum Editorial-Charakter
* von Presseecho und BusinessPortal24. Der Hub lädt Source Serif 4
* ebenfalls mit, damit Markennennungen typografisch konsistent bleiben.
* - `:serif="false"` schaltet auf font-sans (Inter Tight) etwa für die
* Top-Utility-Bar, in der die Marken sehr klein erscheinen.
*
* Variant:
* - `auto` Akzentfarbe = Theme-Default (Orange / Grün / Bernstein)
* - `on-dark` hellere/wärmere Akzentfarbe (für dunkle Hub-Panels)
* - `mono` Akzent identisch zum Basis-Ton (z. B. wenn beides weiß sein soll)
*/
$marks = [
'presseecho' => [
'name' => 'presse',
'accent' => 'echo',
'accent_color_auto' => '#345636',
'accent_color_on_dark' => '#9BD5B2',
],
'businessportal24' => [
'name' => 'businessportal',
'accent' => '24',
'accent_color_auto' => '#C84A1E',
'accent_color_on_dark' => '#C84A1E',
],
'presseportale' => [
'name' => 'presse',
'accent' => 'portale',
'accent_color_auto' => '#B07A3A',
'accent_color_on_dark' => '#B07A3A',
],
];
$mark = $marks[$brand] ?? $marks['presseportale'];
$accentColor = match ($variant) {
'on-dark' => $mark['accent_color_on_dark'],
'mono' => 'inherit',
default => $mark['accent_color_auto'],
};
$fontClass = $serif ? 'font-serif' : 'font-sans';
$baseAttributes = $attributes->merge(['class' => $fontClass]);
@endphp
<span {{ $baseAttributes }}>{{ $mark['name'] }}<span
style="color: {{ $accentColor }};">{{ $mark['accent'] }}</span></span>

View file

@ -0,0 +1,45 @@
@props([
'from' => null,
])
@php
$brandMap = [
'presseecho' => [
'brand' => 'presseecho',
'url' => config('domains.domain_presseecho_url'),
],
'businessportal24' => [
'brand' => 'businessportal24',
'url' => config('domains.domain_businessportal_url'),
],
];
$context = $brandMap[$from] ?? null;
@endphp
@if ($context)
<div class="bg-hub-soft border-b border-hub-soft-2">
<div class="max-w-layout mx-auto px-8 py-3 flex items-center gap-4">
<span class="inline-flex items-center justify-center w-6 h-6 rounded-full bg-hub text-white flex-shrink-0">
<svg width="11" height="11" viewBox="0 0 12 12" fill="none">
<path d="M7.5 2.5L4 6l3.5 3.5" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</span>
<div class="text-[12.5px] text-ink-2 leading-[1.45]">
Sie kommen von
<a class="font-semibold underline underline-offset-[3px] decoration-hub/30 hover:decoration-hub" href="{{ $context['url'] }}">
<x-web.brand-mark :brand="$context['brand']" />
</a>.
Ihr Konto hier funktioniert für <strong class="text-hub font-semibold">beide Portale</strong>
<x-web.brand-mark brand="presseecho" /> und <x-web.brand-mark brand="businessportal24" />.
</div>
<span class="flex-1"></span>
<a href="{{ $context['url'] }}" class="inline-flex items-center gap-1.5 text-[12px] font-medium text-ink-3 hover:text-hub transition-colors">
<svg width="10" height="10" viewBox="0 0 12 12" fill="none">
<path d="M7.5 2.5L4 6l3.5 3.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
</svg>
Zurück zu <x-web.brand-mark :brand="$context['brand']" :serif="false" class="font-medium" />
</a>
</div>
</div>
@endif

View file

@ -0,0 +1,81 @@
@props([
'brand' => null,
])
@php
$themeKey = config('app.theme', 'presseportale');
$brand = $brand ?? config('domains.domains.' . $themeKey . '.brand', []);
$brandTagline = $brand['tagline_short'] ?? 'Publisher · Hub';
$brandTaglineLong = $brand['tagline_long'] ?? 'Der gemeinsame Publisher-Bereich für presseecho und businessportal24.';
$footerLegal = str_replace(':year', (string) now()->year, $brand['footer_legal'] ?? '© ' . now()->year . ' presseportale');
@endphp
<footer class="bg-hub-grad-2 text-ink-on-dark">
<div class="max-w-layout mx-auto px-8 py-14 grid gap-10" style="grid-template-columns:1.5fr 1fr 1fr 1fr;">
<div>
<div class="text-[24px] font-bold leading-none tracking-[-0.5px] text-white">
<x-web.brand-mark brand="presseportale" :serif="false" />
</div>
<div class="eyebrow on-dark mt-2 text-[9.5px] tracking-[0.22em]">
{{ $brandTagline }}
</div>
<p class="text-[12.5px] text-white/65 leading-[1.65] mt-4 max-w-[340px]">
{{ $brandTaglineLong }}
</p>
<div class="mt-5 pt-5 border-t border-white/15 text-[12px] text-white/65">
Brand-Familie:
<a class="font-semibold underline underline-offset-[3px] decoration-white/30 ml-1" href="{{ config('domains.domain_presseecho_url') }}">
<x-web.brand-mark brand="presseecho" variant="on-dark" />
</a>
<span class="mx-2 text-white/30">·</span>
<a class="font-semibold underline underline-offset-[3px] decoration-white/30" href="{{ config('domains.domain_businessportal_url') }}">
<x-web.brand-mark brand="businessportal24" variant="on-dark" />
</a>
</div>
</div>
<div>
<div class="eyebrow on-dark mb-3.5">Konto</div>
<ul class="space-y-2 text-[13px] text-white/75 list-none p-0 m-0">
<li><a href="{{ route('login') }}" class="hover:text-white transition-colors">Anmelden</a></li>
<li><a href="{{ route('register') }}" class="hover:text-white transition-colors">Konto erstellen</a></li>
<li><a href="#tarife" class="hover:text-white transition-colors">Tarife</a></li>
<li><a href="#" class="hover:text-white transition-colors">Vertrieb kontaktieren</a></li>
<li><a href="#" class="hover:text-white transition-colors">Status</a></li>
</ul>
</div>
<div>
<div class="eyebrow on-dark mb-3.5">Plattform</div>
<ul class="space-y-2 text-[13px] text-white/75 list-none p-0 m-0">
<li><a href="#funktion" class="hover:text-white transition-colors">So funktioniert es</a></li>
<li><a href="#" class="hover:text-white transition-colors">Redaktionsrichtlinien</a></li>
<li><a href="#" class="hover:text-white transition-colors">Dokumentation</a></li>
<li><a href="#" class="hover:text-white transition-colors">API-Referenz</a></li>
<li><a href="#" class="hover:text-white transition-colors">Changelog</a></li>
</ul>
</div>
<div>
<div class="eyebrow on-dark mb-3.5">Rechtliches</div>
<ul class="space-y-2 text-[13px] text-white/75 list-none p-0 m-0">
<li><a href="#" class="hover:text-white transition-colors">Impressum</a></li>
<li><a href="#" class="hover:text-white transition-colors">AGB</a></li>
<li><a href="#" class="hover:text-white transition-colors">Datenschutz</a></li>
<li><a href="#" class="hover:text-white transition-colors">DPA / AV</a></li>
<li><a href="#" class="hover:text-white transition-colors">Cookie-Einstellungen</a></li>
</ul>
</div>
</div>
<div class="border-t border-white/15">
<div class="max-w-layout mx-auto px-8 py-5 flex items-center justify-between gap-4 text-[11.5px] text-white/55">
<span>{{ $footerLegal }}</span>
<span class="flex items-center gap-2 font-mono text-[10.5px]">
<span class="inline-block w-1.5 h-1.5 rounded-full bg-ok"></span>
Alle Systeme betriebsbereit
</span>
</div>
</div>
</footer>

View file

@ -0,0 +1,60 @@
@props([
'navigation' => null,
'brand' => null,
])
@php
$themeKey = config('app.theme', 'presseportale');
$brand =
$brand ??
config('domains.domains.' . $themeKey . '.brand', [
'name' => 'presse',
'accent' => 'portale',
'tagline_short' => 'Publisher · Hub',
]);
$brandTagline = $brand['tagline_short'] ?? 'Publisher · Hub';
$navigation = $navigation ?? [
['label' => 'Tarife', 'href' => '#tarife'],
['label' => 'So funktioniert es', 'href' => '#funktion'],
['label' => 'Plattform-Familie', 'href' => '#familie'],
['label' => 'FAQ', 'href' => '#faq'],
['label' => 'Dokumentation', 'href' => '#'],
];
@endphp
<header class="bg-bg-elev border-b border-bg-rule">
<div class="max-w-layout mx-auto px-8 py-[18px] grid items-center gap-6" style="grid-template-columns:auto 1fr auto;">
<a href="{{ route('home') }}" class="flex items-baseline gap-2.5 cursor-pointer group"
aria-label="presseportale Startseite">
<span class="text-[24px] font-bold tracking-[-0.5px] leading-none text-hub">
<x-web.brand-mark brand="presseportale" :serif="false" />
</span>
<span class="hidden md:inline-block w-px h-[18px] bg-bg-rule"></span>
<span class="eyebrow muted text-[9.5px] tracking-[0.22em]">{{ $brandTagline }}</span>
</a>
<nav class="hidden lg:flex items-center justify-center gap-1 text-[13.5px] font-medium">
@foreach ($navigation as $item)
<a href="{{ $item['href'] }}"
class="px-3.5 py-2 text-ink-2 hover:text-hub transition-colors">{{ $item['label'] }}</a>
@endforeach
</nav>
<div class="flex items-center gap-2">
<a href="{{ route('login') }}"
class="inline-flex items-center gap-2 px-4 py-2.5 text-[13px] font-semibold text-ink rounded-[4px] hover:bg-bg transition-colors">
Anmelden
</a>
<a href="{{ route('register') }}"
class="inline-flex items-center gap-2 px-[18px] py-2.5 text-[13px] font-semibold text-white bg-hub hover:bg-hub-2 rounded-[4px] transition-colors">
Konto erstellen
<svg width="11" height="11" viewBox="0 0 12 12" fill="none">
<path d="M3 9L9 3M9 3H4M9 3v5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"
stroke-linejoin="round" />
</svg>
</a>
</div>
</div>
</header>

View file

@ -0,0 +1,55 @@
@props([
'date' => null,
'siblingPortals' => [
['brand' => 'presseecho', 'url' => null],
['brand' => 'businessportal24', 'url' => null],
],
])
@php
$displayDate = $date ?? now()->locale('de')->isoFormat('dddd, D. MMMM YYYY');
$defaultUrls = [
'presseecho' => config('domains.domain_presseecho_url'),
'businessportal24' => config('domains.domain_businessportal_url'),
];
@endphp
<div class="bg-hub-grad text-ink-on-dark-2 border-b border-black/40">
<div class="max-w-layout mx-auto px-8 flex items-stretch text-[11.5px] tracking-wide">
<span class="flex items-center pr-4 py-2.5 whitespace-nowrap border-r border-white/10">
{{ $displayDate }}
</span>
<span class="flex items-center gap-2.5 px-4 py-2.5 whitespace-nowrap text-white/70">
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" class="opacity-65">
<rect x="2" y="2" width="5.5" height="5.5" stroke="currentColor" stroke-width="1.2" />
<rect x="8.5" y="2" width="5.5" height="5.5" stroke="currentColor" stroke-width="1.2" />
<rect x="2" y="8.5" width="12" height="5.5" stroke="currentColor" stroke-width="1.2" />
</svg>
<span>Publisher-Hub für</span>
@foreach ($siblingPortals as $index => $portal)
@php
$brandKey = $portal['brand'] ?? 'presseecho';
$portalUrl = $portal['url'] ?? ($defaultUrls[$brandKey] ?? '#');
@endphp
<a href="{{ $portalUrl }}" class="text-white font-semibold hover:underline">
<x-web.brand-mark :brand="$brandKey" variant="on-dark" :serif="false" />
</a>
@if (! $loop->last)
<span class="text-white/30">·</span>
@endif
@endforeach
</span>
<span class="flex-1"></span>
<span class="flex items-center gap-4 py-2.5 whitespace-nowrap text-white/65">
<a href="#" class="hover:text-white">Status</a>
<a href="#" class="hover:text-white">Dokumentation</a>
<a href="#" class="hover:text-white">Kontakt</a>
</span>
</div>
</div>

View file

@ -9,7 +9,7 @@
'accent' => '24',
'tagline_short' => 'Pressemitteilungen · DACH',
'tagline_long' => 'Veröffentlichungs-Portal für redaktionell geprüfte Pressemitteilungen aus Deutschland, Österreich und der Schweiz.',
'footer_legal' => '© :year businessportal24.com · Alle Rechte vorbehalten',
'footer_legal' => '© :year businessportal24 · Alle Rechte vorbehalten',
'about_label' => 'Über businessportal24',
]);

View file

@ -27,7 +27,7 @@
<!-- 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">
<a href="{{ route('dashboard') }}" class="text-xl font-bold text-gray-900 dark:text-white">
{{ $domainName ?? config('app.name') . ' Admin' }}
</a>
</div>

View file

View file

@ -22,7 +22,7 @@
@vite([\App\Helpers\ThemeHelper::getThemeCssPath(), 'resources/js/app.js'], $domainConfig['assets_dir'] ?? 'build/web')
@if (($theme ?? null) === 'businessportal24')
@if (in_array(($theme ?? null), ['businessportal24', 'presseecho', 'presseportale'], true))
<link rel="preconnect" href="https://fonts.bunny.net" crossorigin>
<link href="https://fonts.bunny.net/css?family=inter-tight:400,500,600,700|source-serif-4:400,500,600,700|jetbrains-mono:400,500,600" rel="stylesheet" />
@endif
@ -72,7 +72,7 @@
@stack('styles')
<!-- Domain-spezifische Fonts -->
@if (($theme ?? null) !== 'businessportal24')
@if (! in_array(($theme ?? null), ['businessportal24', 'presseecho', 'presseportale'], true))
<link href="https://fonts.bunny.net/css?family=montserrat:400,500,600,700" rel="stylesheet" />
@endif
</head>

File diff suppressed because it is too large Load diff