feat: edit client — save per tab, DOB re-KYC alert, audit logs, KYC improvements

- Edit button per tab with Save & Next confirmation dialog
- DOB change triggers re-KYC alert, resets PAN verification, auto-fills remarks
- Mobile/email changes logged as audit notes via client notes API
- Redesigned confirmation dialog with icon + title, type-based theming
- KYC re-edit flow: remarks mandatory for VERIFIED records, re-edit API command
- Load existing photo & signature in edit KYC, immediate upload on change
- Populate all KYC fields (document, AML, form60/15) from API on edit
- Non-individual PAN verification uses same flow as individual
- Fix table overflow when sidebar panel is open
- Add fr unit to stylelint allowed-list

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aditya
2026-04-07 15:08:07 +05:30
co-authored by Claude Opus 4.6
parent b890d24bb7
commit 79e455c4ed
14 changed files with 1699 additions and 398 deletions
@@ -17,7 +17,7 @@
font-size: 15px;
font-weight: 600;
color: #333;
margin: 0 0 16px 0;
margin: 0 0 16px;
.section-icon {
color: var(--md-sys-color-primary, #1074b9);
@@ -119,7 +119,7 @@
&.active {
border-color: #1353a0;
background: #eff6ff;
box-shadow: 0 0 0 2px rgba(19, 83, 160, 0.12);
box-shadow: 0 0 0 2px rgb(19 83 160 / 12%);
}
&__dot {
@@ -128,9 +128,17 @@
border-radius: 50%;
flex-shrink: 0;
&.green { background: #10b981; }
&.amber { background: #f59e0b; }
&.red { background: #ef4444; }
&.green {
background: #10b981;
}
&.amber {
background: #f59e0b;
}
&.red {
background: #ef4444;
}
}
&__info {
@@ -186,7 +194,9 @@
color: #065f46;
border: 1px solid #a7f3d0;
.kyc-expiry-alert__icon { color: #10b981; }
.kyc-expiry-alert__icon {
color: #10b981;
}
}
&--medium {
@@ -194,7 +204,9 @@
color: #92400e;
border: 1px solid #fde68a;
.kyc-expiry-alert__icon { color: #f59e0b; }
.kyc-expiry-alert__icon {
color: #f59e0b;
}
}
&--high {
@@ -202,11 +214,13 @@
color: #991b1b;
border: 1px solid #fecaca;
.kyc-expiry-alert__icon { color: #ef4444; }
.kyc-expiry-alert__icon {
color: #ef4444;
}
}
}
@media (max-width: 768px) {
@media (width <= 768px) {
.kyc-expiry-cards {
grid-template-columns: 1fr;
}
@@ -451,7 +465,7 @@
border: 1px solid #e0e7ff;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 8px rgba(99, 102, 241, 0.08);
box-shadow: 0 2px 8px rgb(99 102 241 / 8%);
margin-bottom: 8px;
}
@@ -475,7 +489,11 @@
color: #fff;
flex-shrink: 0;
mat-icon { font-size: 16px; width: 16px; height: 16px; }
mat-icon {
font-size: 16px;
width: 16px;
height: 16px;
}
}
.otp-card__header-text {
@@ -536,7 +554,7 @@
&:focus {
border-color: #1074b9;
background: #fff;
box-shadow: 0 0 0 2px rgba(16, 116, 185, 0.12);
box-shadow: 0 0 0 2px rgb(16 116 185 / 12%);
}
&.filled {
@@ -652,8 +670,10 @@
color: #065f46;
}
@media (max-width: 480px) {
.otp-digits { gap: 6px; }
@media (width <= 480px) {
.otp-digits {
gap: 6px;
}
.otp-digit-box {
width: 40px;
@@ -662,8 +682,13 @@
border-radius: 8px;
}
.otp-card__header { padding: 12px 14px; }
.otp-card__body { padding: 20px 14px; }
.otp-card__header {
padding: 12px 14px;
}
.otp-card__body {
padding: 20px 14px;
}
}
/* PAN-Aadhaar Link Status (read-only) */
@@ -683,22 +708,40 @@
&.linked {
border-color: #a7f3d0;
background: #ecfdf5;
.pan-link-value { color: #059669; }
.pan-link-icon { color: #059669; }
.pan-link-value {
color: #059669;
}
.pan-link-icon {
color: #059669;
}
}
&.not-linked {
border-color: #fecaca;
background: #fef2f2;
.pan-link-value { color: #dc2626; }
.pan-link-icon { color: #dc2626; }
.pan-link-value {
color: #dc2626;
}
.pan-link-icon {
color: #dc2626;
}
}
&.exempt {
border-color: #bfdbfe;
background: #eff6ff;
.pan-link-value { color: #2563eb; }
.pan-link-icon { color: #2563eb; }
.pan-link-value {
color: #2563eb;
}
.pan-link-icon {
color: #2563eb;
}
}
}
@@ -1037,7 +1080,7 @@
}
}
@media (max-width: 768px) {
@media (width <= 768px) {
.form-grid {
grid-template-columns: 1fr;
}
@@ -1073,7 +1116,7 @@
&__sub {
font-size: 11px;
color: rgba(255, 255, 255, 0.5);
color: rgb(255 255 255 / 50%);
margin: 2px 0 0;
}
}
@@ -1092,9 +1135,20 @@
border-radius: 50%;
flex-shrink: 0;
&.risk-low { background: #22c55e; box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.2); }
&.risk-medium { background: #f59e0b; box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.2); }
&.risk-high { background: #ef4444; box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2); }
&.risk-low {
background: #22c55e;
box-shadow: 0 0 0 3px rgb(34 197 94 / 20%);
}
&.risk-medium {
background: #f59e0b;
box-shadow: 0 0 0 3px rgb(245 158 11 / 20%);
}
&.risk-high {
background: #ef4444;
box-shadow: 0 0 0 3px rgb(239 68 68 / 20%);
}
}
.risk-hint {
@@ -1133,3 +1187,30 @@
}
}
/* ─── Re-edit Info Alert ─── */
.kyc-reedit-alert {
display: flex;
align-items: flex-start;
gap: 10px;
padding: 12px 16px;
margin-top: 8px;
background: #eff6ff;
border: 1px solid #93c5fd;
border-radius: 8px;
font-size: 13px;
line-height: 1.5;
color: #1e40af;
&__icon {
color: #3b82f6;
font-size: 20px;
width: 20px;
height: 20px;
margin-top: 1px;
flex-shrink: 0;
}
strong {
font-weight: 600;
}
}