Add Blazor receiver UI and error page CSS styles

Introduced new CSS files for the Blazor receiver UI, including card layouts, logo styles, and a custom error/404 page with illustrations. Added responsive and modernized styles for buttons, footers, language dropdowns, and signature pad. These changes enhance the UI without affecting legacy MVC CSS.
This commit is contained in:
2026-05-13 22:46:33 +02:00
parent bb371ad6af
commit d30a42238f
5 changed files with 1267 additions and 0 deletions

View File

@@ -0,0 +1,126 @@
@import url('https://fonts.googleapis.com/css?family=Muli&display=swap');
* {
box-sizing: border-box;
}
.dd-cards-container {
font-family: 'Muli', sans-serif;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.dd-card {
background-color: #fff;
display: flex;
max-width: 100%;
margin: 0;
overflow: hidden;
width: 100%;
}
.dd-card h6 {
opacity: 0.6;
margin: 0;
letter-spacing: 0.0625rem;
font-size: clamp(0.6rem, 1.33vw, 0.8rem);
}
.dd-card h2 {
letter-spacing: 0.0625rem;
margin: 0;
font-size: clamp(1rem, 2.67vw, 1.67rem);
}
.uppercase {
text-transform: uppercase;
}
.dd-card-preview {
background-color: #2A265F;
color: #fff;
padding: 0.1rem 1rem 1rem 1rem;
margin:0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.dd-card-preview a {
color: #fff;
opacity: 0.6;
}
.dd-card-preview button {
border-width: 0;
align-items: center;
background-color: transparent;
color: white;
margin: 15% 0 0 0;
transition: color 0.25s ease;
}
.dd-card-preview button:hover {
color: #bebebe;
}
.dd-card-preview span {
}
.dd-card-info {
padding: clamp(0.55rem, 2vw, .875rem) 0 0 clamp(0.55rem, 2.5vw, 1.7rem);
margin: 0;
position: relative;
width: 100%;
}
.dd-card-info p, .dd-card-info a, .dd-card-info small, .dd-card-info span {
opacity: 0.65;
font-size: clamp(0.55rem, 1.23vw, 0.75rem);
margin: clamp(0.55rem, 2vw, .875rem) 0 clamp(0.55rem, 2vw, .875rem) 0;
text-decoration: none;
padding: 0;
}
.app-logo {
width: clamp(4rem, 10vw, 5rem);
margin: 1rem 0 0 0;
}
.progress-container {
text-align: right;
width: 100%;
margin: clamp(0.8rem, 2vw, 1rem) 0 0 0;
}
.progress {
background-color: #ddd;
border-radius: 0.1875rem;
height: clamp(0.25rem, 1vw, 0.3125rem);
width: clamp(6rem, 20vw, 10rem);
position: relative;
}
.progress::after {
background-color: #2A265F;
content: '';
position: absolute;
top: 0;
left: 0;
height: clamp(0.25rem, 1vw, 0.3125rem);
width: var(--progress-width, 1%);
transition: width 1s ease;
opacity: 0.85;
}
.progress-text {
font-size: clamp(0.5rem, 1.5vw, 0.625rem);
opacity: 0.6;
letter-spacing: clamp(0.05rem, 0.5vw, 0.0625rem);
text-align: left;
}

View File

@@ -0,0 +1,391 @@
html,
body {
height: 100%;
width: 100%;
margin: 0px;
background: linear-gradient(90deg, rgba(47, 54, 64, 1) 23%, rgba(24, 27, 32, 1) 100%);
}
:root {
--moon-left-position: 0px;
}
.moon {
background: linear-gradient(90deg, rgba(208, 208, 208, 1) 48%, rgba(145, 145, 145, 1) 100%);
position: absolute;
top: -100px;
left: var(--moon-left-position);
width: 900px;
height: 900px;
content: '';
border-radius: 100%;
box-shadow: 0px 0px 30px -4px rgba(0, 0, 0, 0.5);
}
.moon__crater {
position: absolute;
content: '';
border-radius: 100%;
background: linear-gradient(90deg, rgba(122, 122, 122, 1) 38%, rgba(195, 195, 195, 1) 100%);
opacity: 0.6;
}
.moon__crater1 {
top: 250px;
left: calc(var(--moon-left-position) + 800px);
width: 60px;
height: 180px;
}
.moon__crater2 {
top: 650px;
left: calc(var(--moon-left-position) + 640px);
width: 40px;
height: 80px;
transform: rotate(55deg);
}
.moon__crater3 {
top: -20px;
left: calc(var(--moon-left-position) + 340px);
width: 65px;
height: 120px;
transform: rotate(250deg);
}
.star {
background: grey;
position: absolute;
width: 5px;
height: 5px;
content: '';
border-radius: 100%;
transform: rotate(250deg);
opacity: 0.4;
animation-name: shimmer;
animation-duration: 1.5s;
animation-iteration-count: infinite;
animation-direction: alternate;
}
@keyframes shimmer {
from {
opacity: 0;
}
to {
opacity: 0.7;
}
}
.star1 {
top: 40%;
left: 50%;
animation-delay: 1s;
}
.star2 {
top: 60%;
left: 90%;
animation-delay: 3s;
}
.star3 {
top: 10%;
left: 70%;
animation-delay: 2s;
}
.star4 {
top: 90%;
left: 40%;
}
.star5 {
top: 20%;
left: 30%;
animation-delay: 0.5s;
}
.error {
position: absolute;
left: 100px;
top: 400px;
transform: translateY(-60%);
font-family: 'Montserrat', sans-serif;
color: #363e49;
}
.error__title {
font-size: 10em;
}
.error__subtitle {
font-size: 2em;
}
.error__description {
opacity: 0.5;
}
.error__button {
display: inline-block;
margin-top: 3em;
margin-right: 0.5em;
padding: 0.5em 2em;
outline: none;
border: 2px solid #2f3640;
background-color: transparent;
border-radius: 8em;
color: #576375;
cursor: pointer;
transition-duration: 0.2s;
font-size: 0.75em;
font-family: 'Montserrat', sans-serif;
text-decoration: none;
}
.error__button:hover {
color: #21252c;
}
.error__button--active {
background-color: #e67e22;
border: 2px solid #e67e22;
color: white;
}
.error__button--active:hover {
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.5);
color: white;
}
.astronaut {
position: absolute;
width: 185px;
height: 300px;
left: 70%;
top: 50%;
transform: translate(-50%, -50%) rotate(20deg) scale(1.2);
}
.astronaut__head {
background-color: white;
position: absolute;
top: 60px;
left: 60px;
width: 60px;
height: 60px;
content: '';
border-radius: 2em;
}
.astronaut__head-visor-flare1 {
background-color: #7f8fa6;
position: absolute;
top: 28px;
left: 40px;
width: 10px;
height: 10px;
content: '';
border-radius: 2em;
opacity: 0.5;
}
.astronaut__head-visor-flare2 {
background-color: #718093;
position: absolute;
top: 40px;
left: 38px;
width: 5px;
height: 5px;
content: '';
border-radius: 2em;
opacity: 0.3;
}
.astronaut__backpack {
background-color: #bfbfbf;
position: absolute;
top: 90px;
left: 47px;
width: 86px;
height: 90px;
content: '';
border-radius: 8px;
}
.astronaut__body {
background-color: #e6e6e6;
position: absolute;
top: 115px;
left: 55px;
width: 70px;
height: 80px;
content: '';
border-radius: 8px;
}
.astronaut__body__chest {
background-color: #d9d9d9;
position: absolute;
top: 140px;
left: 68px;
width: 45px;
height: 25px;
content: '';
border-radius: 6px;
}
.astronaut__arm-left1 {
background-color: #e6e6e6;
position: absolute;
top: 127px;
left: 9px;
width: 65px;
height: 20px;
content: '';
border-radius: 8px;
transform: rotate(-30deg);
}
.astronaut__arm-left2 {
background-color: #e6e6e6;
position: absolute;
top: 102px;
left: 7px;
width: 20px;
height: 45px;
content: '';
border-radius: 8px;
transform: rotate(-12deg);
border-top-left-radius: 8em;
border-top-right-radius: 8em;
}
.astronaut__arm-right1 {
background-color: #e6e6e6;
position: absolute;
top: 113px;
left: 100px;
width: 65px;
height: 20px;
content: '';
border-radius: 8px;
transform: rotate(-10deg);
}
.astronaut__arm-right2 {
background-color: #e6e6e6;
position: absolute;
top: 78px;
left: 141px;
width: 20px;
height: 45px;
content: '';
border-radius: 8px;
transform: rotate(-10deg);
border-top-left-radius: 8em;
border-top-right-radius: 8em;
}
.astronaut__arm-thumb-left {
background-color: #e6e6e6;
position: absolute;
top: 110px;
left: 21px;
width: 10px;
height: 6px;
content: '';
border-radius: 8em;
transform: rotate(-35deg);
}
.astronaut__arm-thumb-right {
background-color: #e6e6e6;
position: absolute;
top: 90px;
left: 133px;
width: 10px;
height: 6px;
content: '';
border-radius: 8em;
transform: rotate(20deg);
}
.astronaut__wrist-left {
background-color: #e67e22;
position: absolute;
top: 122px;
left: 6.5px;
width: 21px;
height: 4px;
content: '';
border-radius: 8em;
transform: rotate(-15deg);
}
.astronaut__wrist-right {
background-color: #e67e22;
position: absolute;
top: 98px;
left: 141px;
width: 21px;
height: 4px;
content: '';
border-radius: 8em;
transform: rotate(-10deg);
}
.astronaut__leg-left {
background-color: #e6e6e6;
position: absolute;
top: 188px;
left: 50px;
width: 23px;
height: 75px;
content: '';
transform: rotate(10deg);
}
.astronaut__leg-right {
background-color: #e6e6e6;
position: absolute;
top: 188px;
left: 108px;
width: 23px;
height: 75px;
content: '';
transform: rotate(-10deg);
}
.astronaut__foot-left {
background-color: white;
position: absolute;
top: 240px;
left: 43px;
width: 28px;
height: 20px;
content: '';
transform: rotate(10deg);
border-radius: 3px;
border-top-left-radius: 8em;
border-top-right-radius: 8em;
border-bottom: 4px solid #e67e22;
}
.astronaut__foot-right {
background-color: white;
position: absolute;
top: 240px;
left: 111px;
width: 28px;
height: 20px;
content: '';
transform: rotate(-10deg);
border-radius: 3px;
border-top-left-radius: 8em;
border-top-right-radius: 8em;
border-bottom: 4px solid #e67e22;
}

View File

@@ -0,0 +1,37 @@
.dd-locked-logo {
width: 13rem;
padding-top: 1rem;
}
.dd-show-logo {
width: 9rem;
position: absolute;
right: 0;
margin: 0 2rem 0 0;
padding: 0;
top:0;
}
.cursor-locked-logo {
width: 9rem;
padding-top: 1rem;
}
.cursor-show-logo {
width: 6rem;
}
@media (max-width: 767px) {
.dd-show-logo {
width: 5rem;
margin-right: 0rem;
}
.cursor-show-logo {
width: 3rem;
}
}
.signFlow-logo {
width: 9rem;
}

View File

@@ -0,0 +1,88 @@
/* Phase 56 additions for the Blazor receiver UI.
Lives next to receiver-site.css so the legacy MVC CSS stays untouched
and any tweaks specific to the Blazor flow are easy to spot. */
.signature-pad-container {
display: flex;
flex-direction: column;
}
.signature-pad-canvas {
cursor: crosshair;
}
.signature-list {
margin: 0;
padding: 0;
}
.signature-item {
background-color: #fff;
transition: background-color 0.2s ease;
}
.signature-item.bg-success-subtle {
background-color: #d1e7dd !important;
}
/* Receiver-shell wraps every page that uses ReceiverLayout. */
.receiver-shell {
min-height: 100vh;
display: flex;
flex-direction: column;
}
.receiver-shell > * {
flex: 1 0 auto;
}
.envelope-content {
flex-grow: 1;
}
/* Footer override for Blazor — the legacy CSS uses position:fixed,
which collides with the WebAssembly app shell. Keep it sticky but
not absolutely positioned so the page content remains scrollable. */
footer.receiver-footer {
background-color: #001F61;
color: #fff;
font-family: 'Muli';
border-radius: 10px 10px 0 0;
padding: 0.5rem 1rem;
font-size: clamp(0.58rem, 1.5vw, 1rem);
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
gap: 0.5rem;
}
footer.receiver-footer a {
color: #FF7500;
text-decoration: none;
}
footer.receiver-footer .language-switcher {
background: transparent;
color: #fff;
border: 1px solid rgba(255, 255, 255, 0.4);
border-radius: 0.25rem;
padding: 0.15rem 0.5rem;
}
/* Cookie consent banner (Blazor counterpart of _CookieConsentPartial). */
.receiver-cookie-banner {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 1100;
background-color: #f8f9fa;
border-top: 1px solid #ced4da;
padding: 0.75rem 1rem;
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
}

View File

@@ -0,0 +1,625 @@
/*
Colors taken from:
https://tailwindcss.com/docs/customizing-colors#default-color-palette
*/
/* Toolbar Buttons */
.navbar-toggler {
border: 0;
}
.material-symbols-outlined {
align-content: center;
}
.btn-group {
margin-right: 10vw;
margin-bottom: 10vh;
}
.btn_refresh, .btn_reject, .btn_complete {
height:2.5rem;
}
.btn_complete .icon, .btn_reject .icon, .btn_refresh .icon {
width: 1.1rem;
}
.btn_complete span, .btn_reject span, .btn_refresh span {
vertical-align: middle;
}
.button-finish {
color: #fff;
background-color: #0d6efd;
border-color: #0d6efd;
}
.button-finish:hover {
color: #fff;
background-color: #0b5ed7;
border-color: #0a58ca;
}
.button-finish:focus {
box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);
}
.button-finish:active {
color: #fff;
background-color: #0a58ca;
border-color: #0a53be;
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.button-finish:disabled {
color: #fff;
background-color: #0d6efd;
border-color: #0d6efd;
}
.button-reject {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.button-reject:hover {
color: #fff;
background-color: #bb2d3b;
border-color: #b02a37;
}
.button-reject:focus {
box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);
}
.button-reject:active {
color: #fff;
background-color: #b02a37;
border-color: #a52834;
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.button-reject:disabled {
color: #fff;
background-color: #dc3545;
border-color: #dc3545;
}
.button-reset {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
.button-reset:hover {
color: #fff;
background-color: #5c636a;
border-color: #565e64;
}
.button-reset:focus {
box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);
}
.button-reset:active {
color: #fff;
background-color: #565e64;
border-color: #51585e;
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.button-reset:disabled {
color: #fff;
background-color: #6c757d;
border-color: #6c757d;
}
body {
background: #f8fcfc;
display: flex;
flex-direction: column;
height: 100vh;
margin: 0;
}
main {
display:flex;
margin: 0 0 0.5vh 0;
}
.home-description {
text-align: justify;
font-family: Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New;
font-weight: 500;
font-size: .95em;
letter-spacing: -1px;
word-spacing: -2px;
}
.envelope-view {
display: flex; /* d-flex */
flex-direction: column; /* flex-column */
width: 100vw;
height: 95.9vh;
}
#app {
background: gray;
width: 100vw;
height: 100%;
flex-grow: 1;
border-width: 0;
}
footer {
height: 4vh;
min-height: 1.5rem;
background-color: #001F61;
border-radius: 10px 10px 0 0;
color: #fff;
font-family: 'Muli';
padding: 0.5vh 0;
position: fixed;
bottom: 0;
width: 100%;
z-index: 998;
border-width: 0;
font-size: clamp(0.58rem, 1.5vw, 1rem);
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
}
footer * {
margin-left: clamp(0.5rem, 2vw, 1rem);
}
footer a {
color: #FF7500;
text-decoration: none;
}
footer .dropdown-toggle, footer .flag-dropdown, footer li {
margin: 0;
padding: 0;
border-width: 0;
}
footer .dropdown-menu a {
padding: 0.25rem 1rem 0.25rem 1rem;
margin-left: 0;
user-select: none;
}
.page {
margin-top: 3rem;
background: white;
border-radius: 0.313rem;
box-shadow: rgba(9, 30, 66, 0.25) 0rem 0.25rem 0.5rem -0.125rem, rgba(9, 30, 66, 0.08) 0rem 0rem 0rem 0.063rem;
max-width: 40rem;
}
.page section {
max-width: 30rem;
margin: 0 auto;
}
.page header .icon {
display: inline-block;
border-radius: 6.25rem;
padding: 0.938rem;
margin-bottom: 2rem;
}
.page header .icon.admin {
background-color: #331904;
color: #fecba1;
}
.page header .icon.locked {
background-color: #ffa407;
color: #000;
}
.page header .icon.locked.tfa {
background-color: #ff7207;
color: #000;
}
.page header .icon.signed {
background-color: #146c43;
color: #fff;
}
.page header .icon.rejected {
background-color: #e4d8d5;
color: #fff;
}
.page header .icon.expired {
background-color: rgba(228, 216, 213, 0.5);
color: #fff;
}
.page .form {
max-width: 30rem;
margin: 2rem auto;
display: flex;
gap: 1rem;
}
#form-access-code > .input,
#form-admin-password > .input {
flex-grow: 1;
}
#page-admin header .icon {
background-color: #331904;
color: #fecba1;
}
.envelope {
display: block;
border: 0.063rem solid #eee;
margin-bottom: 1rem;
padding: 0.5rem;
}
footer#page-footer {
color: #333;
max-width: 40rem;
margin-top: 1rem;
font-size: 0.85rem;
}
footer#page-footer a,
footer#page-footer a:link,
footer#page-footer a:hover,
footer#page-footer a:visited,
footer#page-footer a:focus {
color: #444;
}
.sender-card {
background-color: transparent;
border: none;
}
.sender-card .row {
height: 7vh;
}
.sender-card img {
height: 7vh;
background-color: rgb(209, 207, 207);
border-radius: 3.125rem;
}
.navbar .container {
display: flex;
padding: 0;
margin: 0;
}
.navbar-toggler {
padding: 0;
margin: 0;
width: 4rem;
left: 0;
}
.envelope-message {
position: absolute;
display: flex;
width: calc(100% - 8rem);
align-items: center;
justify-content: start;
margin-left: 4rem;
}
.envelope-message .icon {
margin-right: 0.5rem;
}
.envelope-message .message {
font-family: 'Roboto', sans-serif;
font-size: 16px;
font-weight: 550;
}
.logo {
width: 9rem;
position: absolute;
right: 0;
margin-right:2rem;
}
.none-display {
display: none
}
.dropdown-flag img, .img-flag {
width: 30%;
height: 70%;
}
.dropdown-flag {
height: 75%;
width: 75%;
}
/* CSS for custom class to increase dropdown height */
.increase-dropdown-height {
min-height: 25rem; /* Optional, larger value for increased height */
}
/* Adjusting select2 width to fit within a specific form size */
.dropdown-flag .select2-container {
width: 100% !important; /* Makes the container full width */
max-width: 11.25rem; /* Suitable maximum width for the form */
}
.lang-item {
font-size: 0.85rem;
}
#langDropdownMenuButton {
min-width: 4vw;
}
.highlight {
font-weight: 700;
font-size: 0.85rem;
}
.signature-process-title, .signature-process-name {
font-size: 1.125rem;
}
.mail-link {
color: black;
text-decoration: none;
}
.mail-link:hover {
text-decoration: underline;
}
#flex-action-panel {
z-index: 1050;
}
#form-access-code {
justify-content: space-evenly;
}
.access-code-form-floating {
display: flex;
justify-content: space-between;
flex-direction: row;
align-items: center;
}
.access-code-form-floating button {
align-content: center;
border-bottom-left-radius: 0;
border-top-left-radius: 0;
margin:0;
height: 100%;
}
.access-code-form-floating input {
align-content: center;
border-bottom-right-radius: 0;
border-top-right-radius: 0;
border-right-width: 0;
width: 7rem;
}
#access-code-error-message {
justify-content: center;
align-content: center;
margin: 1.5rem 7rem 0 7rem;
height: 2.5rem;
}
#sms-timer {
height: 3rem;
display: flex;
align-items: center;
font-family: 'Arial', sans-serif;
font-weight: bold;
color: #ffffff;
background-color: #007bff;
margin: 0 0 0 2rem;
border-radius: 8px;
text-align: center;
}
#sms-timer:hover {
background-color: #0056b3;
cursor: pointer;
}
.form-check.tfa-sms {
margin-left: 2rem;
}
.form-check.tfa-sms .form-check-label {
font-size: 0.875rem;
font-weight: 500;
margin-left: -.1rem;
}
/*.flag-dropdown button {
height: 100%;
}*/
.header-1 {
align-items: center;
justify-content: space-between;
margin-top: 0;
padding-top: 0;
}
.header-1 .text {
text-align: center;
margin-left: 1.5vw;
margin-top:0;
padding-top: 0;
}
.no-receiver-explanation {
padding: 2.5rem;
}
.ajs-message.ajs-custom {
margin: 0rem 0rem 0rem 0rem;
padding: 0rem 0rem 0rem 0rem;
width:50rem;
}
.ajs-message.ajs-custom .alert {
display: flex;
flex-direction: row;
}
.ajs-message.ajs-custom span {
margin: 0 1rem 0 0;
}
.ajs-message.ajs-custom p {
margin: 0;
padding: 0;
}
/* styles for mobile responsiveness */
@media (max-height: 850px) {
.navbar .container {
display: flex;
padding: 0;
margin: 0;
}
.navbar-toggler {
padding: 0;
margin: 0;
width: 4rem;
left: 0;
}
.envelope-message {
width: calc(100% - 4rem -9rem);
}
.envelope-message .message {
font-size: 14px;
font-weight: 550;
}
.logo {
width: 9rem;
position: absolute;
right: 0;
}
.card-text, .card-text {
font-size: 0.6rem; /* Font size reduced */
margin: 0rem;
padding: 0rem;
}
.highlight {
font-weight: 700;
font-size: 0.5rem;
}
.signature-process-title, .signature-process-name {
font-size: 0.7rem;
}
}
@media (max-width: 767px) {
.navbar {
flex-direction: column;
align-items: flex-start;
}
.navbar-brand {
font-size: 0.5rem;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
}
.envelope-message {
width: calc(100% - 4rem - 4.5rem);
margin-left: 3rem;
}
.envelope-message .message {
font-size: 12px;
font-weight: 550;
}
.envelope-message .icon {
margin-right: 0.1rem;
font-size: 1rem
}
.logo {
width: 5rem;
right: 0;
margin-right: 1rem;
}
.btn_group {
position: fixed;
flex-direction: row;
bottom: 0.5rem;
right: 0.5rem;
}
.img-fluid {
width: 1.2rem;
height: 100%;
display: none;
}
.page {
margin-top: 1rem;
max-width: 90%;
padding: 0.5rem;
}
.page section {
max-width: 90%;
}
#form-access-code {
margin-left: 0;
}
}
@media (max-width: 1024px) {
#flex-action-panel, .btn-desktop {
display: none;
}
}
@media (max-height: 600px) {
.collapse {
height: 4rem;
}
}
#tfaRegStep .tfaQrCode {
width: 7rem;
}