Replaces the auto-submit-closure-request behavior with an immediate account close, in the same approval action, when a withdrawal brings shares to zero — matching the backend's new single-step close-on- approval flow. Removes the now-unneeded Share Closure Request feature entirely: dedicated create/list components (Clerk Dashboard + Approval Center), routes, nav links, and the "eligible for closure" banner on the Share Account view. Also adds a clear "this will close the account" notice wherever a withdrawal would zero out the account's shares — the standalone Share Withdrawal Request page (submit + review) and Transaction Entry's Share Redemption Transfer confirm dialog — styled as an amber warning callout rather than a plain info line. Trims that confirm dialog to just the required details (dropped the redundant ECS A/C No. line and the validation-checklist block) and compacts its overall size.
481 lines
8.1 KiB
SCSS
481 lines
8.1 KiB
SCSS
/**
|
|
* Copyright since 2025 Mifos Initiative
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
.swr-modal-backdrop {
|
|
position: fixed;
|
|
inset: 0;
|
|
background: rgb(13 27 42 / 55%);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
z-index: 1000;
|
|
}
|
|
|
|
.swr-modal {
|
|
background: #fff;
|
|
border-radius: 12px;
|
|
padding: 20px;
|
|
width: 420px;
|
|
max-width: 90vw;
|
|
max-height: 85vh;
|
|
overflow-y: auto;
|
|
box-shadow: 0 12px 32px rgb(15 23 42 / 20%);
|
|
|
|
h3 {
|
|
margin: 0 0 12px;
|
|
font-size: 16px;
|
|
color: #0d1b2a;
|
|
}
|
|
|
|
textarea {
|
|
width: 100%;
|
|
padding: 8px 10px;
|
|
border: 1px solid #e2e8f0;
|
|
border-radius: 8px;
|
|
font-family: inherit;
|
|
font-size: 13px;
|
|
resize: vertical;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
&:has(table) {
|
|
width: 560px;
|
|
}
|
|
}
|
|
|
|
.swr-check-pass {
|
|
color: #1a7f37;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.swr-check-fail {
|
|
color: #b42318;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.swr-chip {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
width: fit-content;
|
|
padding: 4px 10px;
|
|
border-radius: 999px;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
|
|
&--ok {
|
|
background: #eafaf0;
|
|
color: #1a7f37;
|
|
}
|
|
|
|
&--warn {
|
|
background: #fdecea;
|
|
color: #b42318;
|
|
}
|
|
}
|
|
|
|
/* ---------- Account-will-close notice ---------- */
|
|
.swr-close-notice {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
margin: 4px 16px 16px;
|
|
padding: 10px 16px;
|
|
background: #fffbeb;
|
|
border: 1px solid #fde68a;
|
|
border-left: 3px solid #d97706;
|
|
border-radius: 8px;
|
|
font-size: 13px;
|
|
color: #92400e;
|
|
|
|
mat-icon {
|
|
color: #d97706;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
strong {
|
|
color: #7c2d12;
|
|
}
|
|
}
|
|
|
|
.swr-close-row td {
|
|
color: #92400e;
|
|
}
|
|
|
|
.swr-close-tag {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
margin-left: 8px;
|
|
padding: 2px 8px;
|
|
border-radius: 999px;
|
|
background: #fffbeb;
|
|
color: #d97706;
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
|
|
mat-icon {
|
|
font-size: 14px;
|
|
width: 14px;
|
|
height: 14px;
|
|
}
|
|
}
|
|
|
|
/* ---------- Verification trigger card ---------- */
|
|
.swrv-trigger {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 14px;
|
|
padding: 16px;
|
|
flex-wrap: wrap;
|
|
|
|
&__icon {
|
|
width: 42px;
|
|
height: 42px;
|
|
border-radius: 12px;
|
|
background: linear-gradient(135deg, #3457d5, #6c8cff);
|
|
color: #fff;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
box-shadow: 0 4px 12px rgb(52 87 213 / 30%);
|
|
}
|
|
|
|
&__text {
|
|
flex: 1;
|
|
min-width: 200px;
|
|
}
|
|
|
|
&__title {
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
color: #0d1b2a;
|
|
}
|
|
|
|
&__sub {
|
|
font-size: 12px;
|
|
color: #64748b;
|
|
margin-top: 2px;
|
|
line-height: 1.4;
|
|
}
|
|
}
|
|
|
|
/* ---------- Validate pipeline modal ---------- */
|
|
@keyframes swrv-fade {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes swrv-zoom {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.95) translateY(8px);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1) translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes swrv-spin {
|
|
from {
|
|
transform: rotate(0deg);
|
|
}
|
|
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.swrv-spin {
|
|
animation: swrv-spin 0.9s linear infinite;
|
|
}
|
|
|
|
.swrv-modal {
|
|
position: fixed;
|
|
inset: 0;
|
|
// No backdrop-filter: it would make this element a containing block for any position:fixed
|
|
// descendant (e.g. if this modal is ever nested inside another fixed popup, or gains one of its
|
|
// own later) — see the identical fix in share-withdrawal-requests.component.scss for the bug this
|
|
// caused. Extra opacity compensates for the loss of the blur look.
|
|
background: rgb(15 25 45 / 65%);
|
|
z-index: 1200;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 20px;
|
|
animation: swrv-fade 0.2s ease-out;
|
|
|
|
&__card {
|
|
background: #fff;
|
|
border-radius: 16px;
|
|
width: 100%;
|
|
max-width: 520px;
|
|
max-height: 90vh;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
box-shadow: 0 24px 60px rgb(0 0 0 / 25%);
|
|
animation: swrv-zoom 0.25s ease-out;
|
|
}
|
|
|
|
&__header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 18px 22px;
|
|
border-bottom: 1px solid #eef1f5;
|
|
}
|
|
|
|
&__title {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
font-size: 15px;
|
|
font-weight: 700;
|
|
color: #0d1b2a;
|
|
}
|
|
|
|
&__title-icon {
|
|
width: 34px;
|
|
height: 34px;
|
|
border-radius: 10px;
|
|
background: linear-gradient(135deg, #3457d5, #6c8cff);
|
|
color: #fff;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
&__close {
|
|
width: 32px;
|
|
height: 32px;
|
|
border-radius: 8px;
|
|
border: 1px solid #e2e8f0;
|
|
background: #fff;
|
|
color: #64748b;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
transition: all 0.12s;
|
|
|
|
&:not(:disabled):hover {
|
|
color: #b42318;
|
|
border-color: #b42318;
|
|
background: #fdecea;
|
|
}
|
|
|
|
&:disabled {
|
|
opacity: 0.4;
|
|
cursor: not-allowed;
|
|
}
|
|
}
|
|
|
|
&__body {
|
|
padding: 20px 22px;
|
|
overflow-y: auto;
|
|
flex: 1;
|
|
}
|
|
|
|
&__intro {
|
|
font-size: 13px;
|
|
color: #475569;
|
|
line-height: 1.55;
|
|
margin: 0 0 16px;
|
|
|
|
strong {
|
|
color: #0d1b2a;
|
|
font-weight: 700;
|
|
}
|
|
}
|
|
|
|
&__warn {
|
|
display: flex;
|
|
gap: 10px;
|
|
padding: 12px 14px;
|
|
background: #fef3e2;
|
|
border: 1px solid rgb(217 119 6 / 30%);
|
|
border-left: 3px solid #d97706;
|
|
border-radius: 8px;
|
|
margin-bottom: 16px;
|
|
font-size: 12px;
|
|
color: #633806;
|
|
line-height: 1.5;
|
|
|
|
mat-icon {
|
|
color: #d97706;
|
|
font-size: 18px;
|
|
width: 18px;
|
|
height: 18px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
strong {
|
|
display: block;
|
|
font-weight: 700;
|
|
color: #4d2a05;
|
|
}
|
|
}
|
|
|
|
&__result {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-top: 6px;
|
|
padding: 12px 14px;
|
|
background: #eafaf0;
|
|
border: 1px solid rgb(26 127 55 / 25%);
|
|
border-radius: 8px;
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: #1a7f37;
|
|
|
|
mat-icon {
|
|
font-size: 18px;
|
|
width: 18px;
|
|
height: 18px;
|
|
}
|
|
}
|
|
|
|
&__footer {
|
|
padding: 16px 22px;
|
|
border-top: 1px solid #eef1f5;
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 10px;
|
|
background: #f8fafc;
|
|
}
|
|
}
|
|
|
|
.swrv-steps {
|
|
list-style: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.swrv-step {
|
|
display: flex;
|
|
gap: 14px;
|
|
padding: 10px 0;
|
|
position: relative;
|
|
|
|
&:not(:last-child)::after {
|
|
content: '';
|
|
position: absolute;
|
|
left: 15px;
|
|
top: 38px;
|
|
bottom: -4px;
|
|
width: 2px;
|
|
background: #e2e8f0;
|
|
}
|
|
|
|
&__indicator {
|
|
width: 32px;
|
|
height: 32px;
|
|
border-radius: 50%;
|
|
background: #fff;
|
|
border: 2px solid #e2e8f0;
|
|
color: #64748b;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
flex-shrink: 0;
|
|
position: relative;
|
|
z-index: 1;
|
|
transition: all 0.25s;
|
|
|
|
mat-icon {
|
|
font-size: 16px;
|
|
width: 16px;
|
|
height: 16px;
|
|
}
|
|
}
|
|
|
|
&__content {
|
|
padding-top: 5px;
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
&__label {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
color: #475569;
|
|
}
|
|
|
|
&__msg {
|
|
font-size: 11px;
|
|
color: #94a3b8;
|
|
margin-top: 2px;
|
|
}
|
|
|
|
&--active {
|
|
.swrv-step__indicator {
|
|
background: #3457d5;
|
|
border-color: #3457d5;
|
|
color: #fff;
|
|
box-shadow: 0 0 0 4px rgb(52 87 213 / 15%);
|
|
}
|
|
|
|
.swrv-step__label {
|
|
color: #3457d5;
|
|
}
|
|
}
|
|
|
|
&--done {
|
|
.swrv-step__indicator {
|
|
background: #1a7f37;
|
|
border-color: #1a7f37;
|
|
color: #fff;
|
|
}
|
|
|
|
&::after {
|
|
background: #1a7f37;
|
|
}
|
|
|
|
.swrv-step__label {
|
|
color: #0d1b2a;
|
|
}
|
|
}
|
|
|
|
&--failed {
|
|
.swrv-step__indicator {
|
|
background: #b42318;
|
|
border-color: #b42318;
|
|
color: #fff;
|
|
}
|
|
|
|
.swrv-step__label {
|
|
color: #b42318;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.swrv-spin {
|
|
animation: none;
|
|
}
|
|
|
|
.swrv-modal,
|
|
.swrv-modal__card {
|
|
animation: none;
|
|
}
|
|
}
|