presseportale/resources/views/components/emails/layout.blade.php
Kevin Adametz fd8e050cb7 Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n
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>
2026-07-09 15:38:11 +00:00

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;">&nbsp;</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&nbsp;·&nbsp;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>
&nbsp;·&nbsp;
<a href="{{ $imprintUrl }}" style="color: #6b7280; text-decoration: underline;">Impressum</a>
&nbsp;·&nbsp;
<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>