diff --git a/lang/de/system.php b/lang/de/system.php index f9ea54f..5bcdfe7 100644 --- a/lang/de/system.php +++ b/lang/de/system.php @@ -9,6 +9,10 @@ return [ 'https_active' => 'HTTPS aktiv', 'https_plain' => 'Klartext-HTTP', + // Section labels (redesigned 2-column layout) + 'section_config' => 'Konfiguration', + 'section_status' => 'Status & Wiederherstellung', + // Domain & TLS panel 'tls_title' => 'Domain & TLS', 'tls_subtitle' => 'Erreichbarkeit des Panels und Let\'s-Encrypt-Zertifikat', diff --git a/lang/en/system.php b/lang/en/system.php index d277cf0..64fcbc7 100644 --- a/lang/en/system.php +++ b/lang/en/system.php @@ -9,6 +9,10 @@ return [ 'https_active' => 'HTTPS active', 'https_plain' => 'Plaintext HTTP', + // Section labels (redesigned 2-column layout) + 'section_config' => 'Configuration', + 'section_status' => 'Status & recovery', + // Domain & TLS panel 'tls_title' => 'Domain & TLS', 'tls_subtitle' => 'Panel reachability and Let\'s Encrypt certificate', diff --git a/resources/views/livewire/system/index.blade.php b/resources/views/livewire/system/index.blade.php index 5f2f7b2..3a8c110 100644 --- a/resources/views/livewire/system/index.blade.php +++ b/resources/views/livewire/system/index.blade.php @@ -1,4 +1,4 @@ -
+
{{-- Header --}}
@@ -10,161 +10,186 @@

{{ __('system.subheading') }}

$hasTls, - 'border-warning/30 text-warning' => ! $hasTls, + 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1.5 font-mono text-xs', + 'border-online/30 bg-online/10 text-online' => $hasTls, + 'border-warning/30 bg-warning/10 text-warning' => ! $hasTls, ])> {{ $hasTls ? __('system.https_active') : __('system.https_plain') }}
- {{-- Domain & TLS --}} - - {{-- Current TLS state --}} - @if ($hasTls) -
- -
-

{{ __('system.tls_active_title') }}

-

{{ __('system.tls_active_body_pre') }} - {{ $panelUrl }} · - {{ __('system.tls_active_body_post') }}

-
-
- @else -
- -
-

{{ __('system.tls_bare_title') }}

-

{{ __('system.tls_bare_body') }}

-
-
- @endif - - {{-- Last-resort recovery: SSH into the host and reset admin access. --}} -
- -

{{ __('system.ssh_reset_hint') }}

-
- - {{-- Restart-required notice (shown after a successful save). One-click: the button - writes a sentinel a HOST-side watcher reacts to and restarts the stack — the - container never gets the Docker socket. No terminal needed. --}} - @if ($restartPending) -
- -
-

{{ __('system.restart_title') }}

-

{{ __('system.restart_body') }}

+ {{-- ── Critical alerts (full-width, above the grid) ───────────────────────── + Restart-required and bare-IP notices stay prominent banners — never buried + in a sidebar. --}} + {{-- Restart-required notice (shown after a successful save). One-click: the button + writes a sentinel a HOST-side watcher reacts to and restarts the stack — the + container never gets the Docker socket. No terminal needed. --}} + @if ($restartPending) +
+ +
+
+
+

{{ __('system.restart_title') }}

+

{{ __('system.restart_body') }}

+
@if ($restartRequested) -

+

{{ __('system.restart_running') }}

@else -
- - {{ __('system.restart_now') }} - + + {{ __('system.restart_now') }} + + @endif +
+

{{ __('system.restart_watcher_hint') }}

+

{{ __('system.restart_lockout_hint') }}

+
+
+ @endif + + {{-- Bare-IP warning: no domain set → plaintext HTTP. Full-width call to action. --}} + @unless ($hasTls) +
+ +
+

{{ __('system.tls_bare_title') }}

+

{{ __('system.tls_bare_body') }}

+
+
+ @endunless + + {{-- ── 2-column working area ──────────────────────────────────────────────── + LEFT (main): the actionable form — domain + Speichern, TLS-mode selector. + RIGHT (side): the status & recovery stack — access address, TLS state, SSH reset. --}} +
+ + {{-- LEFT / main column — "DO" ────────────────────────────────────────── --}} + +
+ {{-- Editable panel domain. Saving persists it and asks for a restart; on restart + app URL, the Reverb endpoint, Caddy's cert and the secure cookie re-derive from it. --}} +
+

{{ __('system.section_config') }}

+ +
+ + + {{ __('common.save') }} + +
+ @error('domainInput') +

{{ $message }}

+ @enderror +

{{ __('system.domain_help') }}

+
+ + {{-- TLS-mode selector --}} +
+

{{ __('system.tls_mode_title') }}

+ + {{-- Segmented control (mirrors the channel selector) --}} +
+ + +
+ + {{-- Per-mode description --}} +
+ +
+

+ @if ($tlsMode === 'caddy') + {{ __('system.tls_mode_caddy_desc') }} + @else + {{ __('system.tls_mode_external_desc') }} + @endif +

+
+
+ + {{-- External-proxy hint (warning tone) --}} + @if ($tlsMode === 'external') +
+ +

{{ __('system.tls_external_hint') }}

@endif - -

{{ __('system.restart_watcher_hint') }}

-

{{ __('system.restart_lockout_hint') }}

- @endif +
- {{-- Editable panel domain. Saving persists it and asks for a restart; on restart - app URL, the Reverb endpoint, Caddy's cert and the secure cookie re-derive from it. --}} -
-
- -
- - - {{ __('common.save') }} - -
- @error('domainInput') -

{{ $message }}

- @enderror -

{{ __('system.domain_help') }}

-
- - {{-- Current access address (read-only status) --}} -
-
-
{{ __('system.access_address') }}
-
+ {{-- RIGHT / side column — "KNOW / RECOVER" ──────────────────────────── --}} + +
+ {{-- Current access address (read-only status) --}} +
+

{{ __('system.access_address') }}

+

@if ($panelUrl) {{ $panelUrl }} @else {{ __('system.access_bare_ip') }} @endif -

-
-
-
- - {{-- TLS-mode selector --}} -
-

{{ __('system.tls_mode_title') }}

- - {{-- Segmented control (mirrors the channel selector) --}} -
- - -
- - {{-- Per-mode description --}} -
- -
-

- @if ($tlsMode === 'caddy') - {{ __('system.tls_mode_caddy_desc') }} - @else - {{ __('system.tls_mode_external_desc') }} - @endif

-
- {{-- External-proxy hint (warning tone) --}} - @if ($tlsMode === 'external') -
- -

{{ __('system.tls_external_hint') }}

+ {{-- Current TLS state --}} + @if ($hasTls) +
+ +
+

{{ __('system.tls_active_title') }}

+

{{ __('system.tls_active_body_pre') }} + {{ $panelUrl }} · + {{ __('system.tls_active_body_post') }}

+
+
+ @else +
+ +
+

{{ __('system.tls_bare_title') }}

+

{{ __('system.tls_bare_body') }}

+
+
+ @endif + + {{-- Last-resort recovery: SSH into the host and reset admin access. --}} +
+ +

{{ __('system.ssh_reset_hint') }}

- @endif -
- +
+ +
- {{-- Release-Kanal --}} + {{-- ── Release-Kanal (full-width band, below the grid) ──────────────────── --}}
{{-- Segmented control --}}