Files
cbsnexora/src/main.scss
T
2026-07-31 15:09:18 +05:30

1836 lines
35 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/.
*/
@use 'theme/mifosx-theme';
@use 'theme/material-web' as *;
@use 'theme/pictonblue-yellowgreen' as *;
@use 'theme/indigo-pink' as *;
@use 'theme/pink-bluegrey' as *;
@use 'theme/deeppurple-amber' as *;
@use 'theme/purple-green.scss' as *;
@use 'assets/styles/helper';
@use 'lightgallery/scss/lightgallery' as *;
@use 'lightgallery/scss/lg-thumbnail' as *;
@use 'lightgallery/scss/lg-zoom' as *;
@use 'lightgallery/scss/lg-fullscreen' as *;
@use 'app/core/error-handler/error-handler.component';
// Global Imports
/* You can add global styles to this file, and also import other style files */
.custom-snackbar-top-right {
top: 48px !important;
right: 24px !important;
left: auto !important;
transform: none !important;
position: fixed !important;
z-index: 9999;
}
.snack-error .mdc-snackbar__surface {
background-color: #dc2626 !important;
color: #fff !important;
}
.snack-error .mat-mdc-snack-bar-label {
color: #fff !important;
}
.snack-error .mat-mdc-button {
color: #fecaca !important;
}
// ===== Image Preview Dialog (election candidate photo/symbol viewer) =====
.ipd-dialog .mat-mdc-dialog-container {
padding: 0;
border-radius: 20px;
overflow: hidden;
background: transparent;
box-shadow: none;
}
.ipd-dialog .mdc-dialog__surface {
border-radius: 20px !important;
background: transparent !important;
box-shadow: none !important;
}
.ipd-backdrop {
background: rgb(0 0 0 / 82%);
backdrop-filter: blur(6px);
}
// ===== Sub-menu Mega Panels (rendered in CDK overlay) =====
.deposits-mega-panel,
.hrm-mega-panel {
max-width: 700px !important;
}
.share-mega-panel,
.others-mega-panel {
max-width: 850px !important;
}
.share-grid,
.others-grid {
grid-template-columns: repeat(4, 1fr) !important;
}
.others-grid,
.npa-grid {
grid-template-columns: repeat(3, 1fr) !important;
}
.npa-mega-panel,
.advances-mega-panel {
max-width: 800px !important;
}
.advances-grid {
grid-template-columns: repeat(3, 1fr) !important;
}
.letter-mega-panel {
max-width: 850px !important;
}
.letter-grid {
grid-template-columns: repeat(4, 1fr) !important;
}
.reconciliation-mega-panel {
max-width: 1100px !important;
}
.reconciliation-grid {
grid-template-columns: repeat(5, minmax(190px, 1fr)) !important;
min-width: 1040px;
}
/* Admin Mega Menu — 3-column rectangular panel (Setup · Catalog ·
Audit & Compliance). Reuses the deposit-mega-menu grid + group chrome
and retints the group-title accent to Admin purple. */
.admin-mega-panel {
max-width: 760px !important;
}
.admin-grid {
grid-template-columns: repeat(3, minmax(220px, 1fr)) !important;
min-width: 680px;
.deposit-group-title {
color: #7c3aed !important;
border-bottom-color: #7c3aed !important;
}
}
// ===== Material Select Panel Styles (Material Design 3) =====
.mat-mdc-select-panel {
background: var(--md-sys-color-surface-container, #fff);
border-radius: 8px;
box-shadow:
0 2px 4px #00000014,
0 4px 12px #0000000f,
0 8px 24px #00000014;
.mat-mdc-option {
font-size: 0.875rem;
min-height: 48px;
padding: 0 16px;
color: var(--md-sys-color-on-surface, #1a1c1e);
transition: background-color 0.2s ease;
&:hover {
background-color: #1074b914;
}
&.mat-mdc-option-active {
background-color: #1074b91f;
}
&.mdc-list-item--selected {
background-color: #1074b91f;
color: var(--md-sys-color-primary, #1074b9);
font-weight: 500;
}
.mdc-list-item__primary-text {
color: inherit;
}
}
}
// Dark theme select panel
.dark-theme .mat-mdc-select-panel {
background: var(--md-sys-color-surface-container, #2c2f36);
.mat-mdc-option {
color: var(--md-sys-color-on-surface, #e2e2e5);
&:hover {
background-color: #5ba2ec14;
}
&.mat-mdc-option-active {
background-color: #5ba2ec1f;
}
&.mdc-list-item--selected {
background-color: #5ba2ec1f;
color: var(--md-sys-color-primary, #5ba2ec);
font-weight: 500;
}
}
}
.scrollbar-styling {
scrollbar-width: thin;
scrollbar-color: #889 #f1f1f1;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
::-webkit-scrollbar-thumb {
background: #889;
&:hover {
background: #555;
}
}
/* === Global Layout Utilities === */
.layout-row-wrap {
display: flex;
flex-flow: row wrap;
}
.layout-column {
display: flex;
flex-direction: column;
}
.layout-row {
display: flex;
flex-direction: row;
}
.align-flex-end {
justify-content: flex-end;
}
.flex-align-center {
display: flex;
align-items: center;
justify-content: center;
}
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.responsive-column {
@media (width <=768px) {
flex-direction: column;
}
}
.gap-2px {
gap: 2%;
}
.gap-5px {
gap: 5px;
}
.gap-20px {
gap: 20px;
}
.gap-25px {
gap: 25px;
}
.gap-32px {
gap: 32px;
}
.gap-40px {
gap: 40px;
}
.align-start {
justify-content: flex-start;
}
.align-end {
justify-content: flex-end;
}
.align-center-start {
justify-content: flex-start;
align-items: center;
}
.align-center {
justify-content: center;
}
.align-center-center {
justify-content: center;
align-items: center;
}
.align-between {
justify-content: space-between;
}
.align-items-center {
align-items: center;
}
.align-start-baseline {
align-items: baseline;
justify-content: flex-start;
}
.layout-align-end {
display: flex;
justify-content: flex-end;
align-items: center;
}
.align-start-center {
display: flex;
justify-content: flex-start;
align-items: center;
}
.align-start-start {
display: flex;
justify-content: flex-start;
align-items: flex-start;
}
.layout-align-center {
align-items: center;
justify-content: center;
}
.layout-gt-sm-row {
@media (width >=600px) {
flex-direction: row;
}
}
.align-gt-sm-start-center {
@media (width >=600px) {
justify-content: flex-start;
align-items: center;
}
}
.flex-auto {
flex: 0.1 0 auto;
}
.flex-3-auto {
flex: 3 0 auto;
}
.flex-4 {
flex: 0 0 4%;
}
.flex-5 {
flex: 0 0 5%;
}
.flex-8 {
flex: 0 0 8%;
}
.flex-9 {
flex: 0 0 9%;
}
.flex-10 {
flex: 0 0 10%;
}
.flex-13 {
flex: 0 0 13%;
}
.flex-14 {
flex: 0 0 12%;
}
.flex-15 {
flex: 0 0 15%;
}
.flex-16 {
flex: 0 0 16%;
}
.flex-18 {
flex: 0 0 18%;
}
.flex-20 {
flex: 0 0 20%;
}
.flex-23 {
flex: 0 0 23%;
}
.flex-24 {
flex: 0 0 24%;
}
.flex-25 {
flex: 0 0 25%;
}
.flex-28 {
flex: 0 0 28%;
}
.flex-29 {
flex: 0 0 29%;
}
.flex-30 {
flex: 0 0 30%;
}
.flex-31 {
flex: 0 0 31%;
}
.flex-32 {
flex: 0 0 32%;
}
.flex-33 {
flex: 0 0 33%;
}
.flex-34 {
flex: 0 0 34%;
}
.flex-38 {
flex: 0 0 38%;
}
.flex-40 {
//flex: 0 0 40%;
flex: 1;
width: 40%;
}
.flex-43 {
flex: 0 0 43%;
}
.flex-45 {
flex: 0 0 45%;
}
.flex-46 {
flex: 0 0 46%;
}
.flex-47 {
flex: 0 0 47%;
}
.flex-48 {
flex: 0 0 48%;
}
@media (width <=768px) {
.hide-lt-md {
display: none !important;
}
}
.flex-49 {
flex: 0 0 49%;
}
.flex-50 {
flex: 0 0 50%;
margin-bottom: 1rem;
}
.flex-53 {
flex: 0 0 53%;
}
.flex-60 {
// flex: 0 0 60%;
flex: 1;
width: 60%;
}
.flex-63 {
flex: 0 0 63%;
}
.flex-65 {
flex: 0 0 65%;
}
.flex-67 {
flex: 0 0 67%;
}
.flex-68 {
flex: 0 0 68%;
}
.flex-70 {
flex: 0 0 70%;
}
.flex-73 {
flex: 0 0 73%;
}
.flex-75 {
flex: 0 0 75%;
}
.flex-83 {
flex: 0 0 83%;
}
.flex-90 {
flex: 0 0 90%;
}
.flex-94 {
flex: 0 0 94%;
}
.flex-95 {
flex: 0 0 95%;
}
.flex-96 {
flex: 0 0 96%;
}
@media screen and (width <=599px) {
.flex-xs-15 {
flex: 0 0 15%;
max-width: 15%;
}
}
@media screen and (width >=600px) and (width <=959px) {
.flex-sm-10 {
flex: 0 0 10%;
max-width: 10%;
}
}
@media screen and (width >=960px) and (width <=1279px) {
.flex-md-5 {
flex: 0 0 5%;
max-width: 5%;
}
}
.hide-lt-sm {
@media (width <=599px) {
display: none !important;
}
}
.flex-98 {
flex: 0 0 98%;
}
.flex-100 {
flex: 0 0 100%;
width: 100%;
}
.flex-contents {
display: contents;
flex: 1;
}
.flex-fill {
display: flex;
flex: 1 1 auto;
min-width: 0;
min-height: 0;
}
.gap-8px {
gap: 8px;
}
.gap-10px {
gap: 10px;
}
.gap-12px {
gap: 12px;
}
.gap-1percent {
gap: 1%;
}
.gap-2percent {
gap: 2%;
}
.gap-3percent {
gap: 3%;
}
.gap-4percent {
gap: 4%;
}
.gap-5percent {
gap: 5%;
}
.gap-15percent {
gap: 15%;
}
.gap-20percent {
gap: 20%;
}
.gap-25percent {
gap: 25%;
}
.gap-70percent {
gap: 70%;
}
.flex {
flex: 1 1 0%;
}
.layout-row-reverse {
display: flex;
flex-direction: row-reverse;
}
.flex-gt-sm-30 {
@media (width >=600px) {
flex: 1 0 30%;
}
}
@media (width <=1199px) {
.hide-lt-lg {
display: none !important;
}
}
@media (width <=768px) {
.flex-25 {
flex: 0 0 50%;
}
}
@media (width <=599px) {
.layout-xs-column {
flex-direction: column;
}
}
.flex-50-minus-25px {
flex: 1 1 calc(50% - 25px);
}
.flex-85-minus-20px {
flex: 1 1 calc(85% - 20px);
}
.flex-90-minus-20px {
flex: 1 1 calc(90% - 20px);
}
.layout-lt-md-column {
@media (width <=768px) {
flex-direction: column;
}
}
.layout-column.lt-md {
@media (width <=599px) {
flex-direction: column !important;
}
}
.responsive-flex-full {
@media (width <=768px) {
flex: 0 0 100% !important;
}
}
.align-space-evenly-center {
justify-content: space-evenly;
align-items: center;
}
.mat-mdc-form-field {
margin-bottom: 16px;
.mat-mdc-input-element::placeholder {
font-size: 14px !important;
color: #999 !important;
}
.mdc-floating-label {
font-size: 14px !important;
}
}
mat-stepper {
::ng-deep .mat-vertical-content {
padding: 16px;
}
::ng-deep .mat-vertical-stepper-content {
padding-top: 16px;
}
}
@media (width <=768px) {
.flex-lt-md-50 {
flex: 0 0 50%;
}
}
@media (width <=768px) {
.flex-50-lt-md {
flex: 0 0 50%;
}
}
@media (width <=599px) {
.layout-column-xs {
flex-direction: column !important;
}
}
.menu-explanation {
font-size: 14px;
margin: 0;
word-wrap: break-word;
overflow-wrap: break-word;
}
.menu-list-item-content {
display: flex;
width: 100%;
overflow: hidden;
}
.menu-left-section {
display: flex;
align-items: center;
width: 100%;
gap: 10px;
min-width: 0;
flex: 1;
overflow: hidden;
}
.menu-right-section fa-icon {
z-index: 1000;
}
.menu-right-section {
margin-left: auto;
display: flex;
gap: 4px;
margin-right: 10px;
flex-shrink: 0;
}
mat-nav-list {
overflow: hidden;
mat-list-item {
overflow: hidden;
.mat-list-item-content {
overflow: hidden;
}
}
}
.content {
display: contents;
flex: 1;
}
mifosx-notifications-page td {
text-align: center;
padding: 16px;
color: #999;
}
.red {
color: red;
}
// ===== Global Delete/Trash Icon Styling =====
// Makes standalone delete icons red, but keeps them white inside warn (red) buttons
.fa-trash {
color: #f44336 !important;
}
.mat-mdc-raised-button.mat-warn .fa-trash {
color: inherit !important;
}
// ===== Global Button Icon Alignment =====
// Handles the span + mat-icon pattern used throughout the application
.mat-mdc-button,
.mat-mdc-raised-button,
.mat-mdc-outlined-button {
span {
display: inline-flex;
align-items: center;
gap: 8px;
mat-icon {
display: inline-flex;
align-items: center;
justify-content: center;
}
}
}
.full-width-flex {
display: flex;
justify-content: flex-start;
width: 100%;
}
/* Global overflow helpers to avoid repeated component overrides */
.overflow-hidden {
overflow: hidden;
}
mat-card {
overflow: hidden;
}
.layout-row.responsive-column {
overflow: hidden;
> [class] {
overflow: hidden;
}
}
.dark-theme {
.tox.tox-tinymce {
border-color: #444 !important;
}
.tox .tox-editor-header,
.tox .tox-toolbar-overlord,
.tox .tox-toolbar,
.tox .tox-toolbar__overflow,
.tox .tox-toolbar__primary {
background-color: #303135 !important;
}
.tox .tox-tbtn {
background-color: transparent !important;
color: rgb(255 255 255 / 87%) !important;
svg {
fill: rgb(255 255 255 / 87%) !important;
}
&:hover {
background-color: rgb(255 255 255 / 12%) !important;
}
&:focus {
background-color: rgb(255 255 255 / 8%) !important;
}
}
.tox .tox-tbtn--bevel {
background: transparent !important;
}
.tox .tox-tbtn--select {
background-color: transparent !important;
}
.tox .tox-split-button {
background-color: transparent !important;
&:hover {
box-shadow: none !important;
}
}
.tox .tox-edit-area {
background-color: #303135 !important;
iframe {
background-color: transparent !important;
}
}
.tox .tox-sidebar-wrap {
background-color: #303135 !important;
}
.tox .tox-menubar {
background-color: #303135 !important;
}
.tox .tox-menu {
background-color: #303135 !important;
border-color: #444 !important;
}
.tox .tox-collection__item {
color: rgb(255 255 255 / 87%) !important;
&:hover {
background-color: rgb(255 255 255 / 8%) !important;
}
}
.tox .tox-statusbar {
background-color: #303135 !important;
border-color: #444 !important;
color: rgb(255 255 255 / 60%) !important;
}
}
.app-sidenav {
.mat-mdc-nav-list .mat-mdc-list-item {
.mdc-list-item__primary-text {
display: flex;
align-items: center;
gap: 8px;
}
[matlisticon] {
flex-shrink: 0;
width: 24px;
min-width: 24px;
display: inline-flex;
align-items: center;
justify-content: center;
fa-icon {
display: inline-flex;
align-items: center;
justify-content: center;
}
.fa {
display: inline-block;
width: 1em;
text-align: center;
}
}
}
}
/* Print styles — hide app shell, show only receipt content */
@media print {
mat-sidenav,
mifosx-toolbar,
mifosx-breadcrumb,
mifosx-footer,
.sidebar-panel,
.mat-mdc-tab-header,
.mat-stepper-vertical-line,
.mat-step-header {
display: none !important;
}
mat-sidenav-content.sidenav {
margin-left: 0 !important;
}
body,
html {
background: #fff !important;
}
@page {
/* stylelint-disable-next-line unit-allowed-list */
margin: 1.5cm;
}
}
/* ─── Ensure mat-menu overlays appear above header ─── */
.cdk-overlay-container {
z-index: 1001 !important;
}
/* ─── CRR/SLR Dialog Panel ─── */
.crr-slr-dialog-panel {
.mat-mdc-dialog-container {
padding: 0;
border-radius: 16px;
overflow: hidden;
}
.mat-mdc-dialog-surface {
padding: 0 !important;
border-radius: 16px !important;
}
}
/* ─── Full-Screen Dialog Panel (e.g. FD/RD Entry) — edge-to-edge, no rounded corners ─── */
.fdrd-fullscreen-panel {
max-width: 100vw !important;
width: 100vw !important;
height: 100vh !important;
max-height: 100vh !important;
.mat-mdc-dialog-container {
border-radius: 0 !important;
}
.mat-mdc-dialog-surface {
border-radius: 0 !important;
}
}
/* ─── CIC DQR Dialog Backdrop — ensure outside clicks register ─── */
.cic-dlg-backdrop {
background: rgb(15 23 42 / 45%);
pointer-events: auto;
}
/* ─── PSL Report Dialog Backdrop ─── */
.psl-dlg-backdrop {
background: rgb(15 23 42 / 45%);
pointer-events: auto;
}
/* ─── ALM Report Dialog Backdrop ─── */
.alm-dlg-backdrop {
background: rgb(15 23 42 / 45%);
pointer-events: auto;
}
/* ─── CIMS / XBRL Returns Dialog Backdrop ─── */
.cims-dlg-backdrop {
background: rgb(15 23 42 / 45%);
pointer-events: auto;
}
/* ─── CKYC Compliance Reports Dialog Backdrop ─── */
.ckyc-rpt-dlg-backdrop {
background: rgb(15 23 42 / 45%);
pointer-events: auto;
}
/* ─── Accounting Reports Dialog Backdrop ─── */
.acct-rpt-dlg-backdrop {
background: rgb(15 23 42 / 45%);
pointer-events: auto;
}
/* ─── NEFT / RTGS Entry Dialog Panel ─── */
.nr-entry-dialog {
.mat-mdc-dialog-container {
padding: 0;
border-radius: 14px;
overflow: hidden;
}
.mat-mdc-dialog-surface {
padding: 0 !important;
border-radius: 14px !important;
box-shadow:
0 24px 48px rgb(15 23 42 / 25%),
0 12px 24px rgb(15 23 42 / 15%) !important;
}
}
/* NEFT / RTGS Entry Dialog Backdrop — darker so the report behind dims out */
.nr-entry-backdrop {
background: rgb(15 23 42 / 55%);
pointer-events: auto;
}
/* ─── Savings Account Actions Menu ───
Modern Nexora dropdown for the kebab on the savings account view hero.
Groups actions semantically (Transact · Restrict · Interest · Admin ·
Danger zone) and colour-codes each row's icon by category. */
.sav-action-menu.mat-mdc-menu-panel {
min-width: 280px !important;
max-width: 320px !important;
border-radius: 14px !important;
border: 1px solid #e2e8f0;
box-shadow:
0 12px 32px -8px rgb(15 23 42 / 18%),
0 4px 12px -4px rgb(15 23 42 / 10%) !important;
padding: 0 !important;
overflow: hidden;
}
.sav-action-menu .mat-mdc-menu-content {
padding: 0 !important;
overflow: hidden !important;
}
.sav-menu {
display: flex;
flex-direction: column;
font-family: Inter, 'DM Sans', Roboto, sans-serif;
max-height: 440px;
overflow: hidden;
}
.sav-menu__body {
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: #cbd5e1 transparent;
}
.sav-menu__body::-webkit-scrollbar {
width: 4px;
}
.sav-menu__body::-webkit-scrollbar-track {
background: transparent;
}
.sav-menu__body::-webkit-scrollbar-thumb {
background: #cbd5e1;
border-radius: 4px;
}
.sav-menu__head {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 14px;
background: linear-gradient(135deg, #1e3a8a 0%, #1e40af 45%, #4338ca 100%);
color: #fff;
}
.sav-menu__head-ico {
width: 28px;
height: 28px;
border-radius: 8px;
background: rgb(255 255 255 / 18%);
border: 1px solid rgb(255 255 255 / 28%);
display: inline-flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 12px;
flex-shrink: 0;
}
.sav-menu__head-title {
font-size: 13px;
font-weight: 800;
letter-spacing: 0.01em;
line-height: 1.1;
}
.sav-menu__head-sub {
margin-top: 1px;
font-size: 10.5px;
color: rgb(255 255 255 / 78%);
}
.sav-menu__group {
padding: 6px 0;
& + & {
border-top: 1px solid #f1f5f9;
}
&--danger {
background: #fefafa;
}
&:empty {
display: none;
}
}
.sav-menu__group-title {
font-size: 9.5px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.08em;
color: #94a3b8;
padding: 4px 14px 2px;
}
.sav-menu__item.mat-mdc-menu-item {
display: flex !important;
align-items: center;
gap: 10px;
min-height: 38px !important;
height: 38px !important;
padding: 0 14px !important;
font-size: 13px !important;
font-weight: 500 !important;
color: #0d1b2a !important;
background: transparent !important;
transition: background 0.12s ease;
/* Hide Material's default trailing chevron/state container so our
icon + label are the only visual elements. */
.mat-mdc-menu-item-text {
display: contents;
}
&:hover {
background: #f1f5f9 !important;
}
}
.sav-menu__ico {
width: 26px;
height: 26px;
border-radius: 7px;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 11.5px;
flex-shrink: 0;
background: #e0e7ff;
color: #4338ca;
border: 1px solid transparent;
transition:
transform 0.12s ease,
background 0.12s ease,
color 0.12s ease;
}
.sav-menu__label {
flex: 1 1 auto;
min-width: 0;
}
.sav-menu__item.mat-mdc-menu-item .mat-mdc-menu-item-text,
.sav-menu__item.mat-mdc-menu-item .mdc-list-item__primary-text,
.sav-menu__item.mat-mdc-menu-item .mdc-list-item__content {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 10px !important;
width: 100%;
}
/* Hover lift on the icon */
.sav-menu__item:hover .sav-menu__ico {
transform: scale(1.06);
}
/* Variant tints */
.sav-menu__item--transact .sav-menu__ico {
background: #ecfdf5;
color: #047857;
}
.sav-menu__item--block .sav-menu__ico {
background: #fff7ed;
color: #c2410c;
}
.sav-menu__item--interest .sav-menu__ico {
background: #eff6ff;
color: #1d4ed8;
}
.sav-menu__item--admin .sav-menu__ico {
background: #f5f3ff;
color: #6d28d9;
}
.sav-menu__item--danger.mat-mdc-menu-item {
color: #991b1b !important;
}
.sav-menu__item--danger .sav-menu__ico {
background: #fee2e2;
color: #b91c1c;
}
.sav-menu__item--danger:hover {
background: #fef2f2 !important;
}
/* ─── Current Account action menu (mirrors sav-action-menu styling) ─────── */
.cur-action-menu.mat-mdc-menu-panel {
min-width: 280px !important;
max-width: 320px !important;
border-radius: 14px !important;
box-shadow:
0 8px 30px -6px rgb(15 23 42 / 22%),
0 0 0 1px rgb(15 23 42 / 6%) !important;
border: none !important;
overflow: hidden;
}
.cur-action-menu .mat-mdc-menu-content {
padding: 0 !important;
overflow: hidden !important;
}
.cur-menu {
display: flex;
flex-direction: column;
font-family: Inter, 'DM Sans', Roboto, sans-serif;
max-height: 440px;
overflow: hidden;
}
.cur-menu__body {
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: #cbd5e1 transparent;
}
.cur-menu__body::-webkit-scrollbar {
width: 4px;
}
.cur-menu__body::-webkit-scrollbar-track {
background: transparent;
}
.cur-menu__body::-webkit-scrollbar-thumb {
background: #cbd5e1;
border-radius: 4px;
}
.cur-menu__head {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 14px;
background: linear-gradient(135deg, #1e3a8a 0%, #1e40af 45%, #4338ca 100%);
color: #fff;
}
.cur-menu__head-ico {
width: 28px;
height: 28px;
border-radius: 8px;
background: rgb(255 255 255 / 18%);
border: 1px solid rgb(255 255 255 / 28%);
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
flex-shrink: 0;
}
.cur-menu__head-title {
font-size: 13px;
font-weight: 800;
letter-spacing: 0.01em;
line-height: 1.1;
}
.cur-menu__head-sub {
margin-top: 1px;
font-size: 10.5px;
color: rgb(255 255 255 / 78%);
}
.cur-menu__group {
padding: 6px 0;
& + & {
border-top: 1px solid #f1f5f9;
}
&--danger {
background: #fff8f8;
& + & {
border-top-color: #fee2e2;
}
}
}
.cur-menu__group-title {
font-size: 9.5px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.08em;
color: #94a3b8;
padding: 4px 14px 2px;
}
.cur-menu__item.mat-mdc-menu-item {
display: flex !important;
align-items: center;
gap: 10px;
min-height: 38px !important;
padding: 5px 14px !important;
font-size: 13px !important;
font-weight: 600;
color: #1e293b;
transition:
background 0.12s ease,
color 0.12s ease;
}
.cur-menu__ico {
width: 26px;
height: 26px;
border-radius: 7px;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
flex-shrink: 0;
background: #f1f5f9;
color: #64748b;
transition:
transform 0.12s ease,
background 0.12s ease,
color 0.12s ease;
}
.cur-menu__label {
flex: 1 1 auto;
min-width: 0;
}
/* Material 20 wraps projected content in .mat-mdc-menu-item-text — make it
flex so the icon square and label sit side-by-side instead of stacking. */
.cur-menu__item.mat-mdc-menu-item .mat-mdc-menu-item-text,
.cur-menu__item.mat-mdc-menu-item .mdc-list-item__primary-text,
.cur-menu__item.mat-mdc-menu-item .mdc-list-item__content {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 10px !important;
width: 100%;
}
.cur-menu__item:hover .cur-menu__ico {
transform: scale(1.06);
}
/* Variant tints */
.cur-menu__item--transact .cur-menu__ico {
background: #ecfdf5;
color: #047857;
}
.cur-menu__item--block .cur-menu__ico {
background: #fff7ed;
color: #c2410c;
}
.cur-menu__item--interest .cur-menu__ico {
background: #eff6ff;
color: #1d4ed8;
}
.cur-menu__item--admin .cur-menu__ico {
background: #f5f3ff;
color: #6d28d9;
}
.cur-menu__item--danger.mat-mdc-menu-item {
color: #991b1b !important;
}
.cur-menu__item--danger .cur-menu__ico {
background: #fee2e2;
color: #b91c1c;
}
.cur-menu__item--danger:hover {
background: #fef2f2 !important;
}
/* ─── Identity-Verify Dialog Panel ───
Strip Material's default surface padding so the teal gradient header
on the Withdraw "Verify Customer Identity" pop-up reaches edge-to-edge
(no white gutter around the gradient). */
.idv-panel {
.mat-mdc-dialog-container {
padding: 0 !important;
border-radius: 14px;
overflow: hidden;
}
.mat-mdc-dialog-surface {
padding: 0 !important;
border-radius: 14px !important;
overflow: hidden;
}
.mat-mdc-dialog-content {
padding: 0 !important;
max-height: 72vh;
}
.mat-mdc-dialog-actions {
padding: 0 !important;
margin: 0 !important;
}
}
/* ─── Transaction-Confirm Dialog Panel ───
Same flush surface treatment for the Deposit/Withdraw confirmation. */
.tcd-panel {
.mat-mdc-dialog-container {
padding: 0 !important;
border-radius: 14px;
overflow: hidden;
}
.mat-mdc-dialog-surface {
padding: 0 !important;
border-radius: 14px !important;
overflow: hidden;
}
.mat-mdc-dialog-content {
padding: 0 !important;
max-height: 72vh;
}
.mat-mdc-dialog-actions {
padding: 0 !important;
margin: 0 !important;
}
}
/* ─── Add Beneficiary Dialog Panel ─── */
.abd-dialog-panel {
.mat-mdc-dialog-container {
padding: 0;
border-radius: 14px;
overflow: hidden;
}
.mat-mdc-dialog-surface {
padding: 0 !important;
border-radius: 14px !important;
}
.mat-mdc-dialog-content {
padding: 0 20px !important;
max-height: 72vh;
}
.mat-mdc-dialog-actions {
padding: 0 !important;
margin: 0 !important;
}
}
/* ─── Add Related Client Dialog Panel ─── */
.arc-dialog-panel {
.mat-mdc-dialog-container {
padding: 0;
border-radius: 14px;
overflow: hidden;
}
.mat-mdc-dialog-surface {
padding: 0 !important;
border-radius: 14px !important;
}
.mat-mdc-dialog-content {
padding: 0 20px !important;
max-height: 70vh;
}
.mat-mdc-dialog-actions {
padding: 0 !important;
margin: 0 !important;
}
}
/* ===================== Two-factor authentication dialog ===================== */
.tfa-dialog-panel {
.mat-mdc-dialog-surface {
background: linear-gradient(160deg, #0b1220 0%, #0f172a 60%, #111c33 100%) !important;
border-radius: 18px !important;
padding: 0 !important;
box-shadow: 0 30px 80px rgb(0 0 0 / 55%) !important;
overflow: hidden;
}
.mat-mdc-dialog-container {
--mdc-dialog-container-color: transparent;
padding: 0 !important;
}
}
.cdk-overlay-pane.tfa-dialog-panel {
border-radius: 18px;
}
.tfa-dialog-backdrop {
background: rgb(2 6 23 / 75%) !important;
backdrop-filter: blur(4px);
}
/* ─── DSC Enroll Dialog Panel — edge-to-edge hero ─── */
.ed-dialog-panel {
.mat-mdc-dialog-container {
padding: 0;
border-radius: 16px;
overflow: hidden;
}
.mat-mdc-dialog-surface {
padding: 0 !important;
border-radius: 16px !important;
overflow: hidden !important;
}
}
/* ═══════════════════════════════════════════════════════════════
Client stepper — disabled (read-only) form-field overrides
─── Applied GLOBALLY so they bypass component view-encapsulation.
`::ng-deep` inside a component SCSS sometimes loses specificity
battles with Material 3's MDC token cascade — a global rule scoped
to the stepper's component selectors avoids that entirely.
═══════════════════════════════════════════════════════════════ */
mifosx-client-general-step,
mifosx-client-india-address-step,
mifosx-client-address-step,
mifosx-client-kyc-step,
mifosx-client-entity-kyc-step,
mifosx-client-family-members-step,
mifosx-client-datatable-step {
/* Token-level overrides — these are the colours MDC reads when computing
disabled state. Forcing them at the host avoids fighting MDC rule by rule. */
--mdc-outlined-text-field-disabled-input-text-color: #0f172a;
--mdc-outlined-text-field-disabled-label-text-color: #64748b;
--mdc-outlined-text-field-disabled-outline-color: #cbd5e1;
--mdc-outlined-text-field-disabled-supporting-text-color: #64748b;
--mdc-outlined-text-field-disabled-leading-icon-color: #475569;
--mdc-outlined-text-field-disabled-trailing-icon-color: #475569;
--mdc-filled-text-field-disabled-input-text-color: #0f172a;
--mdc-filled-text-field-disabled-label-text-color: #64748b;
--mat-select-disabled-trigger-text-color: #0f172a;
--mat-form-field-disabled-input-text-color: #0f172a;
--mat-form-field-disabled-input-text-placeholder-color: #64748b;
.mat-mdc-form-field.mat-form-field-disabled,
.mat-mdc-form-field-disabled {
opacity: 1 !important;
.mat-mdc-input-element,
input.mat-mdc-input-element,
textarea.mat-mdc-input-element {
color: #0f172a !important;
-webkit-text-fill-color: #0f172a !important;
font-weight: 600;
caret-color: transparent;
opacity: 1 !important;
}
.mat-mdc-floating-label,
.mdc-floating-label,
.mat-mdc-form-field-required-marker {
color: #64748b !important;
opacity: 1 !important;
}
.mdc-notched-outline__leading,
.mdc-notched-outline__notch,
.mdc-notched-outline__trailing {
border-color: #cbd5e1 !important;
}
.mat-mdc-select-value,
.mat-mdc-select-value-text,
.mat-mdc-select-min-line,
.mat-mdc-select-placeholder {
color: #0f172a !important;
-webkit-text-fill-color: #0f172a !important;
font-weight: 600;
opacity: 1 !important;
}
.mat-mdc-select-arrow {
color: #94a3b8 !important;
}
.mat-mdc-form-field-icon-prefix,
.mat-mdc-form-field-icon-suffix,
.field-prefix-icon mat-icon,
.mat-mdc-form-field-icon-prefix mat-icon,
.mat-mdc-form-field-icon-suffix mat-icon {
color: #475569 !important;
opacity: 1 !important;
}
.mat-mdc-form-field-hint {
color: #64748b !important;
opacity: 1 !important;
}
}
/* The disabled mat-select element itself (sibling of mat-form-field-disabled
in some Material 3 builds) — drop the opacity drop. */
.mat-mdc-select-disabled,
.mat-mdc-select-disabled .mat-mdc-select-trigger,
.mat-mdc-select-disabled .mat-mdc-select-value,
.mat-mdc-select-disabled .mat-mdc-select-value-text,
.mat-mdc-select-disabled .mat-mdc-select-min-line {
color: #0f172a !important;
-webkit-text-fill-color: #0f172a !important;
font-weight: 600;
opacity: 1 !important;
}
/* MDC text-field root with its own disabled modifier */
.mdc-text-field--disabled {
opacity: 1 !important;
.mdc-text-field__input,
input,
textarea,
.mat-mdc-select-min-line {
color: #0f172a !important;
-webkit-text-fill-color: #0f172a !important;
opacity: 1 !important;
}
}
/* Native UA stylesheet — Chrome/Safari force `-webkit-text-fill-color: rgb(84,84,84)`
on any disabled control. This beats `color`, so reset both. */
input:disabled,
select:disabled,
textarea:disabled {
color: #0f172a !important;
-webkit-text-fill-color: #0f172a !important;
opacity: 1 !important;
}
/* Disabled checkboxes — Material 3's MDC checkbox uses `border-color` to
paint the filled box (not `background-color`), so we force BOTH and also
target the SVG path's stroke for the tick. Specificity is bumped via
chained selectors to beat MDC's own rules. */
/* Checked + disabled — solid green box, white tick */
mat-checkbox.mat-mdc-checkbox.mat-mdc-checkbox-checked.mat-mdc-checkbox-disabled
.mdc-checkbox
.mdc-checkbox__background,
.mat-mdc-checkbox.mat-mdc-checkbox-checked.mat-mdc-checkbox-disabled .mdc-checkbox__background,
.mat-mdc-checkbox.mat-mdc-checkbox-disabled.mat-mdc-checkbox-checked .mdc-checkbox__background,
.mat-mdc-checkbox-disabled .mdc-checkbox__native-control:checked ~ .mdc-checkbox__background,
.mdc-checkbox--selected.mdc-checkbox--disabled .mdc-checkbox__background {
background-color: #059669 !important;
border-color: #059669 !important;
opacity: 1 !important;
}
/* Tick (white SVG path) */
mat-checkbox.mat-mdc-checkbox-checked.mat-mdc-checkbox-disabled .mdc-checkbox__checkmark,
mat-checkbox.mat-mdc-checkbox-checked.mat-mdc-checkbox-disabled .mdc-checkbox__checkmark-path,
.mat-mdc-checkbox-disabled.mat-mdc-checkbox-checked .mdc-checkbox__checkmark-path {
color: #fff !important;
stroke: #fff !important;
opacity: 1 !important;
}
/* Unchecked + disabled — outlined slate box (visible but empty) */
.mat-mdc-checkbox-disabled:not(.mat-mdc-checkbox-checked) .mdc-checkbox__background {
background-color: transparent !important;
border-color: #94a3b8 !important;
opacity: 1 !important;
}
/* Full opacity at every layer of MDC's checkbox tree */
mat-checkbox.mat-mdc-checkbox-disabled,
.mat-mdc-checkbox-disabled,
.mat-mdc-checkbox-disabled .mdc-checkbox,
.mat-mdc-checkbox-disabled .mdc-checkbox__ripple,
.mat-mdc-checkbox-disabled .mdc-form-field {
opacity: 1 !important;
}
/* Label */
.mat-mdc-checkbox-disabled .mdc-form-field > label,
.mat-mdc-checkbox-disabled .mat-mdc-checkbox-label,
.mat-mdc-checkbox-disabled .mdc-label {
color: #0f172a !important;
opacity: 1 !important;
font-weight: 500;
}
}
/* Token-level overrides at :root so they cascade EVERYWHERE under the stepper
(MDC sometimes reads tokens at the component root, which lives outside our
`mifosx-client-*-step` host element). Limiting to a class scope to avoid
bleeding into other parts of the app. Descendant variants intentionally
use `*` so the CSS variables are picked up by Material's deeply nested
host elements. */
/* stylelint-disable selector-max-universal */
mifosx-client-general-step,
mifosx-client-india-address-step,
mifosx-client-address-step,
mifosx-client-kyc-step,
mifosx-client-entity-kyc-step,
mifosx-client-family-members-step,
mifosx-client-datatable-step,
mifosx-client-general-step *,
mifosx-client-india-address-step *,
mifosx-client-address-step *,
mifosx-client-kyc-step *,
mifosx-client-entity-kyc-step *,
mifosx-client-family-members-step *,
mifosx-client-datatable-step * {
--mdc-checkbox-disabled-selected-icon-color: #059669;
--mdc-checkbox-disabled-unselected-icon-color: #94a3b8;
--mdc-checkbox-selected-icon-color: #059669;
--mdc-checkbox-selected-focus-icon-color: #059669;
--mdc-checkbox-selected-hover-icon-color: #059669;
--mdc-checkbox-selected-pressed-icon-color: #059669;
}
/* stylelint-enable selector-max-universal */