Web-Frontend: Umbau Spokes/Hub, Kontakt-Widget (contact-launcher)

Startseiten/Feeds/Kategorie/Rechtsseiten ueberarbeitet, Kontakt-Modal durch
schwebendes contact-launcher-Widget ersetzt, legal-language-notice ergaenzt;
Platzhalter-SVGs + Theme-CSS angepasst.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-09 15:45:58 +00:00
parent fd8e050cb7
commit d1939f6f2a
39 changed files with 1110 additions and 810 deletions

View file

@ -1,7 +1,7 @@
@extends('web.layouts.web-master')
@section('title', 'Häufig gestellte Fragen (FAQ)')
@section('meta_description', 'Antworten auf die wichtigsten Fragen rund um das Veröffentlichen von Pressemitteilungen, Konto, Abrechnung und Newsroom.')
@section('title', __('static.faq.meta_title'))
@section('meta_description', __('static.faq.meta_description'))
@php
// Host-aware Kontaktadresse: Hub (pressekonto) vs. Spokes. Betreiber-
@ -12,42 +12,43 @@
: (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24');
$faqContactEmail = config('domains.domains.'.$faqBrandKey.'.brand.contact_email') ?? 'info@businessportal24.com';
// FAQ-Inhalte als Datenstruktur (DRY). Antworten dürfen kontrolliertes
// HTML enthalten (nur eigene Literale, keine Nutzereingaben).
// FAQ-Inhalte als Datenstruktur (DRY), Texte aus lang/{de,en}/static.php.
// Antworten dürfen kontrolliertes HTML enthalten (nur eigene Literale,
// keine Nutzereingaben).
$faqCategories = [
[
'title' => 'Erste Schritte',
'title' => __('static.faq.cat_start'),
'items' => [
['q' => 'Wie veröffentliche ich meine erste Pressemitteilung?', 'a' => 'Registrieren Sie sich im zentralen Publisher-Bereich (pressekonto), legen Sie Ihr Firmenprofil an und verfassen Sie die Mitteilung im Editor — mit Text, Bildern, Anhängen und Pressekontakt. Nach dem Einreichen durchläuft sie unsere Inhaltsprüfung und erscheint anschließend auf presseecho.de und businessportal24.com.'],
['q' => 'An wen richtet sich das Angebot?', 'a' => 'Ausschließlich an Unternehmen, Selbstständige und Agenturen. Die Veröffentlichung erfolgt stets über ein Firmenprofil — ein Angebot für Verbraucher ist es nicht.'],
['q' => 'Muss ich mich registrieren, um Pressemitteilungen zu lesen?', 'a' => 'Nein, alle veröffentlichten Pressemitteilungen sind frei zugänglich. Eine Registrierung ist nur erforderlich, wenn Sie selbst veröffentlichen möchten.'],
['q' => 'Wie lange dauert die Freischaltung meiner Pressemitteilung?', 'a' => 'Die Inhaltsprüfung ist werktags in der Regel am selben Tag abgeschlossen. Nach der Freigabe geht die Mitteilung sofort online — oder automatisch zu Ihrem geplanten Wunschtermin.'],
['q' => __('static.faq.q_first_pm'), 'a' => __('static.faq.a_first_pm')],
['q' => __('static.faq.q_audience'), 'a' => __('static.faq.a_audience')],
['q' => __('static.faq.q_register_to_read'), 'a' => __('static.faq.a_register_to_read')],
['q' => __('static.faq.q_review_time'), 'a' => __('static.faq.a_review_time')],
],
],
[
'title' => 'Konto & Abrechnung',
'title' => __('static.faq.cat_account'),
'items' => [
['q' => 'Wie ändere ich meinen Tarif?', 'a' => 'In Ihrem Konto unter „Buchungen & Add-ons" können Sie jederzeit upgraden oder downgraden. Upgrades gelten sofort, Downgrades zum nächsten Abrechnungszeitraum.'],
['q' => 'Welche Zahlungsmethoden werden akzeptiert?', 'a' => 'Die Abrechnung läuft sicher über Stripe — etwa per Kreditkarte oder SEPA-Lastschrift. Bestandskunden mit laufender Vereinbarung zahlen weiterhin per Rechnung.'],
['q' => 'Kann ich meinen Tarif kündigen?', 'a' => 'Ja, alle Tarife sind monatlich kündbar — direkt im Konto oder ohne Anmeldung über die <a href="'.route('kuendigung').'">Kündigungsseite</a>. Bei jährlicher Zahlweise läuft der bereits bezahlte Zeitraum bis zum Ende der zwölf Monate.'],
['q' => 'Kann ich mein Konto löschen?', 'a' => 'Ja, jederzeit in den Einstellungen Ihres Kontos. Bereits veröffentlichte Pressemitteilungen bleiben im Archiv online, werden aber nicht mehr Ihrem Konto zugeordnet.'],
['q' => __('static.faq.q_change_plan'), 'a' => __('static.faq.a_change_plan')],
['q' => __('static.faq.q_payment_methods'), 'a' => __('static.faq.a_payment_methods')],
['q' => __('static.faq.q_cancel_plan'), 'a' => __('static.faq.a_cancel_plan', ['url' => route('kuendigung')])],
['q' => __('static.faq.q_delete_account'), 'a' => __('static.faq.a_delete_account')],
],
],
[
'title' => 'Pressemitteilungen & Inhalte',
'title' => __('static.faq.cat_content'),
'items' => [
['q' => 'Welche Dateiformate werden unterstützt?', 'a' => 'Bilder: JPG, PNG, WebP (max. 16 MB im Editor; über die API max. 8 MB). Anhänge: PDF, Word, Excel, PowerPoint, ZIP und TXT (max. 25 MB je Datei).'],
['q' => 'Kann ich eine Pressemitteilung nach Veröffentlichung korrigieren?', 'a' => 'Ja — wir korrigieren statt zu löschen: Die URL Ihrer Mitteilung bleibt erhalten, Verweise und Verlinkungen bestehen weiter. Wenden Sie sich mit Korrekturwünschen an unseren Support.'],
['q' => 'Wie optimiere ich meine Pressemitteilung für SEO?', 'a' => 'Nutzen Sie aussagekräftige Headlines, integrieren Sie relevante Keywords natürlich, hinterlegen Sie Bildtitel und strukturieren Sie den Text mit Zwischenüberschriften.'],
['q' => 'Was passiert, wenn eine Mitteilung abgelehnt wird?', 'a' => 'Sie erhalten die Ablehnung mit Begründung und können die Mitteilung überarbeiten und erneut einreichen. Ein abgelehnter Beitrag verbraucht kein Kontingent.'],
['q' => __('static.faq.q_file_formats'), 'a' => __('static.faq.a_file_formats')],
['q' => __('static.faq.q_corrections'), 'a' => __('static.faq.a_corrections')],
['q' => __('static.faq.q_seo'), 'a' => __('static.faq.a_seo')],
['q' => __('static.faq.q_rejection'), 'a' => __('static.faq.a_rejection')],
],
],
[
'title' => 'Newsroom & Funktionen',
'title' => __('static.faq.cat_newsroom'),
'items' => [
['q' => 'Was ist ein Newsroom?', 'a' => 'Ihre Unternehmensseite auf beiden Portalen, auf der alle Ihre Pressemitteilungen gebündelt sind — mit Logo, Kurzprofil und Pressekontakten.'],
['q' => 'Welche Statistiken sehe ich?', 'a' => 'Die Aufrufe jeder Mitteilung über beide Portale hinweg, direkt in Ihrem Konto. Die Zahlen werden laufend aktualisiert.'],
['q' => 'Gibt es eine API?', 'a' => 'Ja — eine Token-basierte REST-API zum Einreichen von Mitteilungen, Statusabfragen und Bild-Upload. Details finden Sie auf der <a href="'.route('api').'">API-Seite</a>; Ihre Tokens erstellen Sie direkt im Konto, sobald eine aktive Buchung vorliegt.'],
['q' => __('static.faq.q_newsroom'), 'a' => __('static.faq.a_newsroom')],
['q' => __('static.faq.q_stats'), 'a' => __('static.faq.a_stats')],
['q' => __('static.faq.q_api'), 'a' => __('static.faq.a_api', ['url' => route('api')])],
],
],
];
@ -55,10 +56,10 @@
@section('content')
<x-web.static-page
eyebrow="Hilfe"
title="Häufig gestellte Fragen"
lead="Finden Sie schnell Antworten auf die wichtigsten Fragen rund um Veröffentlichung, Konto und Newsroom."
breadcrumb="FAQ"
:eyebrow="__('static.faq.eyebrow')"
:title="__('static.faq.title')"
:lead="__('static.faq.lead')"
:breadcrumb="__('static.faq.breadcrumb')"
>
<div class="max-w-[820px] space-y-10">
@foreach ($faqCategories as $category)
@ -86,19 +87,20 @@
{{-- Abschluss-CTA: Frage nicht gefunden? --}}
<div class="max-w-[820px] mt-12 border-t border-bg-rule pt-8">
<h2 class="font-serif text-[22px] font-semibold tracking-[-0.3px] text-ink m-0">Frage nicht gefunden?</h2>
<h2 class="font-serif text-[22px] font-semibold tracking-[-0.3px] text-ink m-0">{{ __('static.faq.not_found') }}</h2>
<p class="text-[13.5px] leading-[1.6] text-ink-2 mt-2 mb-5 max-w-[560px]">
Unser Support-Team hilft Ihnen gerne weiter – per E-Mail an
<a href="mailto:{{ $faqContactEmail }}" class="underline underline-offset-2 hover:text-ink">{{ $faqContactEmail }}</a>.
{{ __('static.faq.support_intro') }}
<a href="mailto:{{ $faqContactEmail }}" class="underline underline-offset-2 hover:text-ink">{{ $faqContactEmail }}</a>
{{ __('static.faq.support_outro') }}
</p>
<div class="flex flex-wrap gap-3">
<a href="mailto:{{ $faqContactEmail }}"
class="inline-flex items-center justify-center gap-1.5 px-5 py-2.5 text-[12.5px] font-semibold text-white bg-brand hover:bg-brand-deep rounded-[2px] transition-colors">
Support anschreiben
</a>
<button type="button" x-data @click="$dispatch('open-contact-modal')"
class="inline-flex items-center justify-center gap-1.5 px-5 py-2.5 text-[12.5px] font-semibold text-white bg-brand hover:bg-brand-deep rounded-[2px] transition-colors cursor-pointer">
{{ __('static.faq.write_support') }}
</button>
<a href="{{ route('hilfe') }}"
class="inline-flex items-center justify-center gap-1.5 px-5 py-2.5 text-[12.5px] font-semibold text-ink border border-bg-rule-strong hover:bg-bg-elev rounded-[2px] transition-colors">
Hilfe-Center besuchen
{{ __('static.faq.visit_help') }}
</a>
</div>
</div>