Gebuendelt, da ueber gemeinsame lang-/Service-Dateien verschraenkt: - Kontakt-Nachrichten: contact_messages-Tabelle + Model/Enums/Factory, Admin-Queue (livewire/admin/contact-messages), ContactController persistiert das Anliegen zusaetzlich zur Brand-Mail - Page-Data-Cache (Services/Web/*PageData) + web-archive-Indizes auf press_releases - Validierungs-Feedback + Company-Portal-Restriction (Feature-Tests) - i18n-Auslagerung lang/de|en (auth, passwords, validation, static) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
126 lines
7.4 KiB
PHP
126 lines
7.4 KiB
PHP
@props([
|
|
'title' => null,
|
|
'preheader' => null,
|
|
])
|
|
|
|
@php
|
|
/**
|
|
* Zentrales CI-Layout für alle System-E-Mails (Auth, Pressemitteilungen,
|
|
* Kündigung/Widerruf, Kontakt). Absender-Marke ist immer pressekonto —
|
|
* der gemeinsame Publisher · Hub der Portale presseecho und
|
|
* businessportal24. Header und Footer erklären diese Zugehörigkeit,
|
|
* damit Empfänger die Mail sofort einordnen können.
|
|
*
|
|
* E-Mail-tauglich gebaut: Tabellen-Layout, Inline-Styles für alles
|
|
* Layout-Kritische, ergänzende Klassen im <style>-Block (werden von
|
|
* Gmail/Outlook.com/Apple Mail unterstützt; ohne sie bleibt die Mail
|
|
* trotzdem lesbar).
|
|
*/
|
|
$brand = config('domains.domains.pressekonto.brand', []);
|
|
$taglineShort = $brand['tagline_short'] ?? 'Publisher · Hub';
|
|
$footerLegal = str_replace(':year', (string) now()->year, $brand['footer_legal'] ?? '© '.now()->year.' pressekonto · Alle Rechte vorbehalten');
|
|
$hubUrl = config('domains.domain_portal_url');
|
|
$presseechoUrl = config('domains.domain_presseecho_url');
|
|
$businessportalUrl = config('domains.domain_businessportal_url');
|
|
$termsUrl = $hubUrl.'/de/agb';
|
|
$imprintUrl = $hubUrl.'/de/impressum';
|
|
$privacyUrl = $hubUrl.'/de/datenschutz';
|
|
$fontStack = "'Inter Tight', 'Segoe UI', Arial, Helvetica, sans-serif";
|
|
@endphp
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="color-scheme" content="light">
|
|
<title>{{ $title }}</title>
|
|
<style>
|
|
.email-body p { margin: 0 0 14px; }
|
|
.email-body .title { font-size: 17px; font-weight: bold; color: #1A2540; margin: 18px 0; padding-left: 14px; border-left: 3px solid #B07A3A; }
|
|
.email-body .meta { background: #f6f4ef; border-left: 3px solid #1A2540; padding: 14px 18px; margin: 18px 0; }
|
|
.email-body .meta-danger { background: #fdf2f0; border-left: 3px solid #b3401f; padding: 14px 18px; margin: 18px 0; }
|
|
.email-body .meta dt, .email-body .meta-danger dt { font-weight: bold; color: #1A2540; font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; }
|
|
.email-body .meta dd, .email-body .meta-danger dd { margin: 2px 0 10px; }
|
|
.email-body .message { white-space: pre-line; background: #f6f4ef; border: 1px solid #e8e4da; padding: 16px 18px; margin: 18px 0; }
|
|
.email-body .note { font-size: 12.5px; color: #6b7280; border-top: 1px solid #e8e4da; padding-top: 14px; margin-top: 26px; }
|
|
.email-body .note p { margin: 0 0 8px; }
|
|
.email-body a { color: #1A2540; }
|
|
</style>
|
|
</head>
|
|
<body style="margin: 0; padding: 0; background-color: #e8e4da;">
|
|
|
|
@if ($preheader)
|
|
{{-- Vorschautext im Posteingang; im Mail-Body unsichtbar. --}}
|
|
<div style="display: none; max-height: 0; overflow: hidden; mso-hide: all;">{{ $preheader }}</div>
|
|
@endif
|
|
|
|
<table role="presentation" width="100%" border="0" cellpadding="0" cellspacing="0" style="background-color: #e8e4da;">
|
|
<tr>
|
|
<td align="center" style="padding: 32px 16px;">
|
|
{{-- Ghost-Table: Outlook (Word-Engine) ignoriert max-width, braucht feste Breite. --}}
|
|
<!--[if mso]>
|
|
<table role="presentation" width="600" border="0" cellpadding="0" cellspacing="0" align="center"><tr><td>
|
|
<![endif]-->
|
|
<table role="presentation" width="100%" border="0" cellpadding="0" cellspacing="0" style="width: 100%; max-width: 600px;">
|
|
|
|
{{-- Bernstein-Akzentstreifen (CI: 3px-Streifen des Hubs) --}}
|
|
<tr>
|
|
<td style="height: 3px; background-color: #B07A3A; font-size: 0; line-height: 0;"> </td>
|
|
</tr>
|
|
|
|
{{-- Header: Wortmarke (verlinkt auf den Hub) + Publisher · Hub in Hub-Blau --}}
|
|
<tr>
|
|
<td style="background-color: #1A2540; padding: 26px 36px;">
|
|
<a href="{{ $hubUrl }}" style="font-family: {{ $fontStack }}; font-size: 22px; font-weight: bold; letter-spacing: -0.4px; line-height: 1; text-decoration: none;"><span style="color: #ffffff;">{{ $brand['name'] ?? 'presse' }}</span><span style="color: #B07A3A;">{{ $brand['accent'] ?? 'konto' }}</span></a>
|
|
<div style="font-family: {{ $fontStack }}; font-size: 10px; font-weight: bold; letter-spacing: 0.22em; text-transform: uppercase; color: #9aa3b8; margin-top: 8px;">
|
|
{{ $taglineShort }}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
|
|
{{-- Inhalt --}}
|
|
<tr>
|
|
<td class="email-body" style="background-color: #ffffff; padding: 32px 36px 28px; font-family: {{ $fontStack }}; font-size: 14.5px; line-height: 1.65; color: #2a3038;">
|
|
{{ $slot }}
|
|
</td>
|
|
</tr>
|
|
|
|
{{-- Brand-Familie: Zugehörigkeit von presseecho + businessportal24 --}}
|
|
<tr>
|
|
<td style="background-color: #ffffff; border-top: 1px solid #e8e4da; padding: 20px 36px 24px; font-family: {{ $fontStack }}; font-size: 12px; line-height: 1.7; color: #6b7280;">
|
|
<a href="{{ $hubUrl }}" style="font-weight: bold; text-decoration: none;"><span style="color: #1A2540;">presse</span><span style="color: #B07A3A;">konto</span></a>
|
|
ist der gemeinsame Publisher · Hub für
|
|
<a href="{{ $presseechoUrl }}" style="font-weight: bold; text-decoration: none;"><span style="color: #1B2417;">presse</span><span style="color: #345636;">echo</span></a>
|
|
und
|
|
<a href="{{ $businessportalUrl }}" style="font-weight: bold; text-decoration: none;"><span style="color: #232A33;">businessportal</span><span style="color: #C84A1E;">24</span></a>
|
|
— ein Konto, qualitätsgeprüft, auf beiden Portalen veröffentlichen.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
{{-- Rechtliches unterhalb der Karte --}}
|
|
<table role="presentation" width="100%" border="0" cellpadding="0" cellspacing="0" style="width: 100%; max-width: 600px;">
|
|
<tr>
|
|
<td align="center" style="padding: 18px 8px 4px; font-family: {{ $fontStack }}; font-size: 11.5px; line-height: 1.7; color: #8a8f96;">
|
|
{{ $footerLegal }}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" style="padding: 0 8px 6px; font-family: {{ $fontStack }}; font-size: 11.5px; line-height: 1.7; color: #8a8f96;">
|
|
<a href="{{ $termsUrl }}" style="color: #6b7280; text-decoration: underline;">AGB</a>
|
|
·
|
|
<a href="{{ $imprintUrl }}" style="color: #6b7280; text-decoration: underline;">Impressum</a>
|
|
·
|
|
<a href="{{ $privacyUrl }}" style="color: #6b7280; text-decoration: underline;">Datenschutz</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<!--[if mso]>
|
|
</td></tr></table>
|
|
<![endif]-->
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|