feat: add RBI circulars, CKYC, KYC, Superset analytics, passbook modules and UI updates

Add new feature modules (RBI feeds, CKYC, KYC tab, Form60, Superset analytics, passbook),
update client family members, dashboard, login page, sidenav, images, translations,
environment config, and fix RBI feeds API auth by using relative URLs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Aditya
2026-03-10 15:13:35 +05:30
co-authored by Claude Opus 4.6
parent 07f701f654
commit 73aa69ee02
84 changed files with 6256 additions and 700 deletions
@@ -0,0 +1,371 @@
/**
* 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/.
*/
.kyc-tab-container {
padding: 16px;
}
.kyc-loading {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 48px;
gap: 16px;
color: #666;
}
.kyc-tab-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
.kyc-tab-title {
display: flex;
align-items: center;
gap: 10px;
h3 {
margin: 0;
}
}
.kyc-badge {
background-color: #1976d2;
color: #fff;
font-size: 11px;
font-weight: 700;
padding: 2px 8px;
border-radius: 12px;
letter-spacing: 0.5px;
line-height: 18px;
}
.kyc-tag {
background-color: #e3f2fd;
color: #1565c0;
font-size: 10px;
font-weight: 700;
padding: 2px 7px;
border-radius: 10px;
border: 1px solid #90caf9;
letter-spacing: 0.5px;
line-height: 16px;
}
.kyc-overall-status {
font-size: 12px;
font-weight: 600;
padding: 3px 10px;
border-radius: 12px;
&.status-verified,
&.status-complete {
background-color: #e8f5e9;
color: #2e7d32;
border: 1px solid #a5d6a7;
}
&.status-pending,
&.status-initiated {
background-color: #fff8e1;
color: #f57f17;
border: 1px solid #ffe082;
}
&.status-rejected,
&.status-failed {
background-color: #ffebee;
color: #c62828;
border: 1px solid #ef9a9a;
}
}
.kyc-summary-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 16px;
margin-bottom: 16px;
}
.kyc-card {
.mat-mdc-card-content {
padding: 16px;
}
}
.kyc-card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
}
.kyc-card-label {
display: flex;
align-items: center;
gap: 6px;
font-weight: 600;
font-size: 14px;
}
.kyc-card-icon {
font-size: 18px;
height: 18px;
width: 18px;
color: #1976d2;
}
.kyc-value {
font-size: 16px;
font-weight: 500;
letter-spacing: 1px;
margin: 8px 0 4px;
font-family: monospace;
}
.kyc-meta {
font-size: 12px;
color: #888;
margin: 0 0 8px;
}
.re-verify-btn {
font-size: 12px;
padding: 0 12px;
height: 28px;
line-height: 28px;
}
.status-chip {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 12px;
font-weight: 500;
padding: 3px 8px;
border-radius: 14px;
&.verified {
background-color: #e8f5e9;
color: #2e7d32;
border: 1px solid #a5d6a7;
}
&.not-verified {
background-color: #f5f5f5;
color: #757575;
border: 1px solid #e0e0e0;
}
}
.status-chip-icon {
font-size: 14px;
height: 14px;
width: 14px;
}
.kyc-info-card {
margin-bottom: 16px;
}
.kyc-info-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 12px;
}
.kyc-info-item {
display: flex;
flex-direction: column;
gap: 2px;
&.full-span {
grid-column: 1 / -1;
}
}
.kyc-info-label {
font-size: 11px;
font-weight: 600;
color: #888;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.kyc-info-value {
font-size: 14px;
color: #333;
}
.kyc-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 64px 16px;
gap: 16px;
color: #888;
text-align: center;
}
.kyc-empty-icon {
font-size: 64px;
height: 64px;
width: 64px;
color: #bdbdbd;
}
.kyc-edit-card {
max-width: 900px;
}
.kyc-edit-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
@media (width <= 600px) {
grid-template-columns: 1fr;
}
}
.kyc-edit-field {
display: flex;
flex-direction: column;
}
.kyc-field-label-row {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
.kyc-field-title {
font-weight: 600;
font-size: 14px;
}
.kyc-input-row {
display: flex;
align-items: flex-start;
gap: 10px;
}
.kyc-input {
flex: 1;
}
.verify-btn {
margin-top: 4px;
min-width: 90px;
}
.full-span {
grid-column: 1 / -1;
}
.kyc-form-actions {
display: flex;
gap: 12px;
margin-top: 16px;
align-items: center;
}
/* OTP Section */
.otp-section {
margin-top: 8px;
padding: 10px 14px;
background-color: #f3f8ff;
border: 1px solid #bbdefb;
border-radius: 8px;
}
.otp-info {
display: flex;
align-items: center;
gap: 6px;
font-size: 12px;
color: #1565c0;
margin: 0 0 8px;
font-weight: 500;
}
.otp-info-icon {
font-size: 16px;
height: 16px;
width: 16px;
color: #1565c0;
}
.otp-inline {
display: flex;
align-items: flex-start;
gap: 8px;
}
.otp-field {
max-width: 160px;
}
.otp-verify-btn {
margin-top: 4px;
font-size: 12px;
height: 36px;
}
.otp-resend-btn {
margin-top: 4px;
font-size: 11px;
height: 36px;
}
/* Error message */
.kyc-error-msg {
display: flex;
align-items: center;
gap: 6px;
font-size: 11px;
color: #c62828;
margin-top: 6px;
padding: 5px 8px;
background-color: #ffebee;
border: 1px solid #ef9a9a;
border-radius: 6px;
}
.kyc-error-icon {
font-size: 14px;
height: 14px;
width: 14px;
color: #c62828;
}
.verification-detail-text {
display: block;
font-size: 12px;
color: #2e7d32;
font-weight: 500;
margin-top: 4px;
}
/* Status icons in edit mode */
.status-icon {
font-size: 20px;
&.verified {
color: #2e7d32;
}
&.failed {
color: #c62828;
}
}