@extends('web.layouts.web-master') {{-- Öffentliche Preise-/Tarifseite (Editorial-Design). Reihenfolge laut Vorgabe: 1) Abo-Tarife 2) Einzel-Pressemitteilung 3) Add-ons. Datenquellen (alles aus dem System, nichts hartkodiert): - Abos: Plan::active() -> $plans - Einzel-PM: config('billing.single_pm_price_cents') -> $singlePmPriceCents - Add-ons: config('credits.*') -> $extraPm, $boost, $proofPdf, $creditPacks, $morePaths Inhalte/Texte: lang/de/pricing.php + lang/en/pricing.php (Schlüssel pricing.*). HINWEIS (bewusst teilweise mit Kommentaren): Die korrespondierende In-App-Buchungs- seite (resources/views/livewire/customer/bookings.blade.php) wird gerade überarbeitet. Buchungs-CTAs verlinken vorerst auf den Veröffentlichen-Funnel; die Deep-Links in den Checkout/zur Registrierung mit Tarif-Vorauswahl folgen, sobald der Flow final ist. --}} @section('title', __('pricing.meta_title')) @section('meta_description', __('pricing.meta_description')) @section('hreflang') @endsection @php // 1 Credit = 1 €. Preise sind ganzzahlige Euro -> ohne Nachkommastellen, // sonst mit zwei Stellen (deutsche Schreibweise). $euro = static fn (int $cents): string => number_format($cents / 100, $cents % 100 === 0 ? 0 : 2, ',', '.'); $popularPlan = 'business'; $submitHref = route('veroeffentlichen'); @endphp @section('content')
{{-- ============================================================ MASTHEAD ============================================================ --}}
{{ __('pricing.eyebrow') }}

{{ __('pricing.headline') }}

{{ __('pricing.intro') }}

{{-- ============================================================ 1) ABO-TARIFE (Daten: Plan::active()) ============================================================ --}}
{{ __('pricing.plans.eyebrow') }}

{{ __('pricing.plans.title') }}

{{ __('pricing.plans.subtitle') }}


@if ($plans->isNotEmpty())
@foreach ($plans as $plan) @php $isPopular = $plan->slug === $popularPlan; $hasMonthly = (int) $plan->monthly_price_cents > 0; @endphp
@if ($isPopular) {{ __('pricing.plans.popular') }} @endif
{{ $plan->name }}
{{ $euro((int) $plan->monthly_price_cents) }} € @if ($hasMonthly) {{ __('pricing.plans.per_month') }} @endif
@if ($hasMonthly && (int) $plan->yearly_price_cents > 0)
{{ __('pricing.plans.yearly_hint', ['price' => $euro((int) $plan->yearly_price_cents)]) }}
@else
@endif
  • {{ $plan->press_release_quota }} {{ __('pricing.plans.quota', ['count' => $plan->press_release_quota]) }}
  • @if ($plan->daily_limit !== null) {{ $plan->daily_limit }} {{ __('pricing.plans.daily_limit', ['count' => $plan->daily_limit]) }} @else {{ __('pricing.plans.no_daily_limit') }} @endif
  • {{ __('pricing.plans.included') }}
{{-- TODO: Deep-Link zu Checkout/Registrierung mit Tarif-Vorauswahl, sobald der Buchungs-Flow (bookings.blade.php) final ist. --}} {{ __('pricing.plans.cta') }}
@endforeach

{{ __('pricing.plans.enterprise') }}

@else

{{ __('pricing.plans.empty') }}

@endif
{{-- ============================================================ 2) EINZEL-PRESSEMITTEILUNG (Daten: config('billing')) ============================================================ --}}
{{ __('pricing.single.eyebrow') }}

{{ __('pricing.single.title') }}


{{ __('pricing.single.description') }}

{{ $euro($singlePmPriceCents) }} €
{{ __('pricing.single.price_suffix') }} · {{ __('pricing.single.net') }}
{{ __('pricing.single.cta') }}
{{-- ============================================================ 3) ADD-ONS & EINZELKOSTEN (Daten: config('credits')) Spiegelt die In-App-Buchungsseite (bookings.blade.php), die noch überarbeitet wird — daher Lineup/Preise hier als „teilweise final". ============================================================ --}}
{{ __('pricing.addons.eyebrow') }}

{{ __('pricing.addons.title') }}

{{ __('pricing.addons.subtitle') }}


{{-- Extra-PM (tier-gestaffelt) --}}

{{ __('pricing.addons.extra_pm.title') }}

{{ __('pricing.addons.extra_pm.description') }}

@foreach ($extraPm as $row) @endforeach
{{ __('pricing.addons.extra_pm.tier_label') }} {{ __('pricing.addons.extra_pm.price_label') }}
{{ $row['tier'] }} {{ $row['credits'] }} {{ __('pricing.addons.credits_unit') }}
{{-- Boost-Platzierung (nach Dauer) --}}

{{ __('pricing.addons.boost.title') }}

{{ __('pricing.addons.boost.description') }}

    @foreach ($boost as $row)
  • {{ __('pricing.addons.boost.days', ['count' => $row['days']]) }} {{ $row['credits'] }} {{ __('pricing.addons.credits_unit') }}
  • @endforeach
{{-- Veröffentlichungsnachweis-PDF --}}

{{ __('pricing.addons.proof_pdf.title') }}

{{ __('pricing.addons.proof_pdf.description') }}

{{ $proofPdf }} {{ __('pricing.addons.credits_unit') }} · {{ __('pricing.addons.proof_pdf.unit') }}
{{-- Credit-Pakete --}}

{{ __('pricing.addons.packs.title') }}

{{ __('pricing.addons.packs.description') }}

@foreach ($creditPacks as $pack) @php $bonus = (int) $pack['credits'] - intdiv((int) $pack['price_cents'], 100); @endphp
{{ __('pricing.addons.packs.credits', ['count' => $pack['credits']]) }}
{{ $euro((int) $pack['price_cents']) }} € {{ __('pricing.addons.packs.net') }}
@if ($bonus > 0) {{ __('pricing.addons.packs.bonus', ['count' => $bonus]) }} @endif
@endforeach
{{-- Weitere Leistungen — TODO: hängt am Bookings-/Magic-Link-Rework, Lineup und Preise final abstimmen, sobald die In-App-Seite steht. --}}
{{ __('pricing.addons.more.title') }}
{{ __('pricing.addons.more.correction') }} {{ $morePaths['correction'] }} {{ __('pricing.addons.credits_unit') }} {{ __('pricing.addons.more.update') }} {{ $morePaths['update'] }} {{ __('pricing.addons.credits_unit') }} {{ __('pricing.addons.more.depublish') }} {{ $morePaths['depublish'] }} {{ __('pricing.addons.credits_unit') }}

{{ __('pricing.vat_note') }}

{{-- Abschluss mit vorhandener Editorial-Komponente. --}}
@endsection