@php use App\Support\Bytes; use Illuminate\Support\Number; $locale = app()->getLocale(); $money = fn (int $cents, string $currency) => Number::currency($cents / 100, in: $currency, locale: $locale); @endphp
{{-- Page head. The same pill the public site uses to label a section, so a customer meets one vocabulary on both sides of the login. --}}

{{ __('dashboard.sheet', ['when' => $asOf->locale($locale)->isoFormat('LL, LT')]) }}

{{ $instance !== null ? __('dashboard.title_running') : __('dashboard.title_pending') }}

@if ($instance !== null)
$instance->status === 'active', 'border-warning-border bg-warning-bg text-warning' => $instance->status !== 'active', ])> {{ __('dashboard.instance_status.'.$instance->status) }} @if ($domain) {{ __('dashboard.cloud.open') }} @endif
@endif
{{-- Live provisioning progress (only while a run is in flight) --}} @if ($instance === null) {{-- Said plainly rather than papered over with an empty record: a page of dashes reads as broken, and "we are still setting it up" and "you have not ordered yet" are different things. --}}

{{ __('dashboard.no_instance_label') }}

{{ __('dashboard.no_instance_body') }}

{{ __('dashboard.no_instance_cta') }} {{ __('dashboard.nav.support') }}
@else {{-- ── What the customer has ───────────────────────────────────── The template's four cards, in its order and its form: label with a chevron, the figure and its unit on one line, a line of context underneath, the visual on the right or a bar across the foot. Three of the template's visuals have no source yet — storage consumption is not sampled, instance_traffic keeps one row per period rather than a daily series, and monitoring_targets records a state but no uptime figure. Those cards carry the form and state what is true instead of drawing a chart at an invented level. This is the sheet a customer forwards to their auditor. --}}
{{-- Storage. The ring appears once there is a reading; until then the card states the allowance, which is true, rather than drawing a level nobody measured. --}} @if ($disk) @elseif ($instance->quota_gb) @endif @if ($seats['total'])
{{-- R4: width is data, not decoration. --}}
@endif
@if ($traffic) @php $state = $traffic->state(); @endphp @if (count($trend) > 2) {{-- Orange because this is the metric with an action attached: when it runs out, something can be done about it. Observed figures stay grey. --}} @endif
$state === 'ok', 'bg-warning' => $state === 'warn' || $state === 'critical', 'bg-danger' => $state === 'exhausted', ]) style="width: {{ min(100, $traffic->percent()) }}%">
@if ($state !== 'ok') {{-- The offer belongs next to the warning: someone reading that they are nearly out should not have to go looking for the way to fix it. --}} {{ __('dashboard.traffic.buy') }} @endif
@endif {{-- Where the template shows availability. There is no uptime figure to show, so this card carries the thing this product is actually about and can prove: when the last backup ran and whether it was verified. --}} @php $lastBackup = collect($proofs)->firstWhere('key', 'backup'); @endphp @if ($lastBackup) @elseif ($location) @endif
{{-- ── The proof register ────────────────────────────────────── --}}

{{ __('dashboard.proofs.label') }}

{{ __('dashboard.proofs.all') }}
@if ($proofs === [])

{{ __('dashboard.proofs.empty') }}

@else
@foreach ($proofs as $proof) @endforeach
{{ __('dashboard.proofs.item.'.$proof['key']) }} {{ $proof['at']?->locale($locale)->isoFormat('DD.MM. HH:mm') ?? '—' }}@if ($proof['note']) · {{ $proof['note'] }}@endif $proof['state'] === 'ok', 'border-info-border bg-info-bg text-info' => $proof['state'] === 'planned', 'border-danger-border bg-danger-bg text-danger' => $proof['state'] === 'attention', ])> {{ __('dashboard.proofs.state.'.$proof['state']) }}
@endif
{{-- ── The contract ───────────────────────────────────────── --}}

{{ __('dashboard.master.label') }}

{{ __('dashboard.master.package') }}
{{ __('billing.plan.'.($instance->plan ?: 'team')) }} @if ($planPrice) {{ __('dashboard.master.per_'.($planPrice['term'] === 'yearly' ? 'year' : 'month'), ['amount' => $money($planPrice['cents'], $planPrice['currency'])]) }} @endif
@if ($contract?->performance)
{{ __('dashboard.master.operation') }}
{{ __('billing.perf.'.$contract->performance) }}
@endif @if ($domain)
{{ __('dashboard.master.address') }}
{{ $domain }}
@endif
@if ($nextInvoice)

{{ __('dashboard.invoice.label') }}

@if ($nextInvoice['addons'] > 0) {{-- Broken out only when there is something to break out: a "Module 0,00 €" line on every other customer's sheet is noise. --}}
{{ __('dashboard.invoice.plan') }}
{{ $money($nextInvoice['plan'], $nextInvoice['currency']) }}
{{ __('dashboard.invoice.addons') }}
{{ $money($nextInvoice['addons'], $nextInvoice['currency']) }}
@endif
{{ __('dashboard.invoice.amount') }}
{{ $money($nextInvoice['total'], $nextInvoice['currency']) }} {{ __('dashboard.invoice.net') }}
{{ __('dashboard.invoice.due') }}
{{ $nextInvoice['due']?->locale($locale)->isoFormat('LL') ?? '—' }}
{{ __('dashboard.invoice.all') }}
@endif @if ($openTasks > 0) {{-- Only while there is something outstanding. A permanently green checklist is furniture; one with work left on it is a reason to open this page. --}} @endif
{{-- ── The three things customers come here to do ─────────────────── --}}
@foreach ([ ['users', 'users', 'add_user'], ['backups', 'rotate-ccw', 'restore'], ['billing', 'plus', 'grow'], ] as [$route, $icon, $key]) {{ __('dashboard.quick.'.$key.'_title') }} {{ __('dashboard.quick.'.$key.'_body') }} @endforeach
@endif