diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/EnvelopeSignedResultPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/EnvelopeSignedResultPage.razor new file mode 100644 index 00000000..b90417f9 --- /dev/null +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/EnvelopeSignedResultPage.razor @@ -0,0 +1,29 @@ +@page "/envelope/signed-result" +@rendermode InteractiveWebAssembly +@using EnvelopeGenerator.Application.Resources +@using Microsoft.Extensions.Localization +@inject IStringLocalizer UiLocalizer + +
+
+ + +

@L("DocumentSuccessfullySigned", "Dokument erfolgreich unterzeichnet")

+

+ @L("DocumentSignedConfirmationMessage", "Vielen Dank. Ihre Unterschrift wurde erfolgreich gespeichert und an die beteiligten Parteien übermittelt.") +

+
+
+ +@code { + string L(string key, string fallback) + { + var value = UiLocalizer[key]; + return value.ResourceNotFound ? fallback : value.Value; + } +} diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverSignedPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverSignedPage.razor index ce311873..b1b5224f 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverSignedPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverSignedPage.razor @@ -174,7 +174,7 @@ _submitConfirmVisible = false; await InvokeAsync(StateHasChanged); await AuthService.LogoutEnvelopeReceiverAsync(EnvelopeKey!); - Navigation.NavigateTo("/", forceLoad: true); + Navigation.NavigateTo("/envelope/signed-result", forceLoad: true); } protected override async Task OnInitializedAsync() diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/wwwroot/css/app.css b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/wwwroot/css/app.css index bb082d1e..1a900dad 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/wwwroot/css/app.css +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/wwwroot/css/app.css @@ -345,6 +345,83 @@ article { font-weight: 500; } +/* Signed result page */ +.receiver-signed-result-page { + min-height: calc(100vh - 36px); + display: flex; + align-items: center; + justify-content: center; + padding: 2rem 1rem; + background: linear-gradient(160deg, #1e2e3e 0%, #2c3e50 40%, #3498db 100%); +} + +.receiver-signed-result-card { + width: min(680px, 100%); + background: rgba(255, 255, 255, 0.96); + border: 1px solid rgba(255, 255, 255, 0.7); + border-radius: 18px; + box-shadow: 0 18px 44px rgba(15, 23, 42, 0.24); + padding: 2rem 1.5rem; + text-align: center; +} + +.receiver-signed-result-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 92px; + height: 92px; + border-radius: 50%; + color: #0f8f58; + background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%); + border: 1px solid #86efac; + margin-bottom: 1rem; +} + +.receiver-signed-result-title { + margin: 0; + color: #1f2937; + font-size: 1.7rem; + font-weight: 700; + letter-spacing: -0.02em; +} + +.receiver-signed-result-message { + margin: 0.85rem auto 0; + max-width: 58ch; + color: #4b5563; + font-size: 1rem; + line-height: 1.62; +} + +[data-sf-theme="purple"] .receiver-signed-result-page { + background: linear-gradient(160deg, #1a0533 0%, #3b0764 45%, #6b21a8 100%); +} + +[data-sf-theme="blazing-dark"] .receiver-signed-result-page { + background: linear-gradient(160deg, #0a0f1e 0%, #111827 50%, #1e1b4b 100%); +} + +[data-sf-theme="blazing-dark"] .receiver-signed-result-card { + background: rgba(15, 20, 40, 0.94); + border-color: rgba(129, 140, 248, 0.28); + box-shadow: 0 20px 46px rgba(0, 0, 0, 0.45); +} + +[data-sf-theme="blazing-dark"] .receiver-signed-result-title { + color: rgba(255, 255, 255, 0.92); +} + +[data-sf-theme="blazing-dark"] .receiver-signed-result-message { + color: rgba(255, 255, 255, 0.68); +} + +[data-sf-theme="blazing-dark"] .receiver-signed-result-icon { + color: #86efac; + background: rgba(16, 185, 129, 0.16); + border-color: rgba(110, 231, 183, 0.35); +} + /* ── Logos ───────────────────────────────────────────────────────────────── */ /* Heights are controlled by inline style="height: Xpx" from appsettings.json */