@php $fmtBytes = function (int $n): string { $u = ['B', 'KB', 'MB', 'GB', 'TB']; $i = 0; $v = (float) $n; while ($v >= 1024 && $i < count($u) - 1) { $v /= 1024; $i++; } return ($i === 0 ? (string) $n : number_format($v, 1)).' '.$u[$i]; }; $ago = function (int $ts): string { if ($ts <= 0) return __('wireguard.never'); $d = max(0, time() - $ts); if ($d < 60) return $d.'s'; if ($d < 3600) return intdiv($d, 60).'m'; if ($d < 86400) return intdiv($d, 3600).'h'; return intdiv($d, 86400).'d'; }; @endphp
{{ __('wireguard.eyebrow') }}
{{ __('wireguard.subtitle') }}
{{ __('wireguard.setup_intro') }}
{{ __('wireguard.no_traffic') }}
@endif{{ __('wireguard.no_peers') }}
@endforelse{{ __('wireguard.gate_escape') }}
{{ __('wireguard.port_hint') }}
@error('newPort') {{ $message }} @enderror{{ __('wireguard.subnet_hint') }}
@error('newSubnet') {{ $message }} @enderror{{ __('wireguard.new_peer_once') }}
{{ __('wireguard.import_hint') }}
@if ($resultQr) {{-- White frame + crispEdges: a WireGuard config QR is dense (~57 modules); too small or anti-aliased and a phone camera misreads it. --}}{{ $resultConfig }}