/** * 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/. */ /* One DDS account's page, laid out the way the savings account page is: a banner, tabs, cards. */ .dav-page { display: flex; flex-direction: column; gap: 16px; padding: 24px 32px; } .dav-mono { font-family: ui-monospace, 'SF Mono', 'Cascadia Mono', monospace; font-style: normal; } .dav-cr { color: #047857; } .dav-dr { color: #b91c1c; } .dav-right { text-align: right !important; } /* ── Banner ───────────────────────────────────────────────────────────── */ .dav-banner { display: flex; align-items: center; flex-wrap: wrap; gap: 16px; padding: 16px 24px; border-radius: 16px; color: #fff; background: linear-gradient(90deg, #1e3a8a 0%, #2d3fb4 55%, #5b47d6 100%); box-shadow: 0 8px 24px rgb(30 58 138 / 25%); } .dav-banner__icon { width: 48px; height: 48px; border-radius: 12px; display: grid; place-items: center; font-size: 1.3rem; background: rgb(255 255 255 / 16%); border: 1px solid rgb(255 255 255 / 25%); } .dav-banner__text { display: flex; flex-direction: column; gap: 4px; min-width: 0; } .dav-pill { align-self: flex-start; padding: 2px 10px; border-radius: 999px; font-size: 0.7rem; font-weight: 700; letter-spacing: 0.04em; background: rgb(16 185 129 / 25%); color: #a7f3d0; border: 1px solid rgb(167 243 208 / 40%); } .dav-pill--closed { background: rgb(148 163 184 / 25%); color: #e2e8f0; border-color: rgb(226 232 240 / 40%); } .dav-pill--matured { background: rgb(245 158 11 / 25%); color: #fde68a; border-color: rgb(253 230 138 / 40%); } .dav-pill--premature_closed { background: rgb(239 68 68 / 25%); color: #fecaca; border-color: rgb(254 202 202 / 40%); } .dav-banner__title { margin: 0; font-size: 1.25rem; font-weight: 700; } .dav-banner__meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; } .dav-banner__label { font-size: 0.7rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: rgb(255 255 255 / 60%); } .dav-banner__value { font-size: 0.9rem; font-weight: 600; } .dav-banner__boxes { margin-left: auto; display: flex; gap: 12px; } .dav-box { display: flex; flex-direction: column; gap: 4px; padding: 10px 18px; border-radius: 12px; background: rgb(255 255 255 / 12%); border: 1px solid rgb(255 255 255 / 25%); } .dav-box__label { font-size: 0.68rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: rgb(255 255 255 / 70%); } .dav-box__value { font-size: 1.15rem; font-weight: 700; font-variant-numeric: tabular-nums; } .dav-banner__actions { display: flex; gap: 8px; } .dav-icon-btn { width: 38px; height: 38px; border-radius: 50%; border: 1px solid rgb(255 255 255 / 35%); background: rgb(255 255 255 / 12%); color: #fff; cursor: pointer; &:hover { background: rgb(255 255 255 / 22%); } } /* ── Tabs: the savings account page's pill tabs ───────────────────────── */ $tab-navy: #0d1b2a; $tab-blue: #1e88e5; $tab-blue-d: #1e40af; $tab-border: #e2e8f0; .dav-tabs { background: #fff; border: 1px solid $tab-border; border-radius: 14px; padding: 6px; box-shadow: 0 1px 3px rgb(15 23 42 / 4%); overflow: hidden; ::ng-deep { .mat-mdc-tab-link-container { border-bottom: none !important; } .mat-mdc-tab-links { gap: 4px; flex-wrap: wrap; } .mdc-tab-indicator__content--underline, .mat-mdc-tab-header-pagination-controls-enabled .mdc-tab-indicator__content--underline { display: none !important; } } } .dav-tab { display: inline-flex !important; align-items: center; gap: 8px; height: 38px !important; min-width: 0 !important; padding: 0 16px !important; border-radius: 10px !important; font-family: Inter, 'DM Sans', Roboto, sans-serif !important; font-size: 13px !important; font-weight: 600 !important; letter-spacing: 0.01em !important; color: #64748b !important; background: transparent !important; transition: all 0.15s ease; white-space: nowrap; border: 1px solid transparent !important; opacity: 1 !important; cursor: pointer; &__ic { font-size: 12px; color: inherit; } &:hover:not(.mdc-tab--active) { background: #f1f5f9 !important; color: $tab-navy !important; } &.mdc-tab--active, &.mat-mdc-tab-link-active { background: linear-gradient(135deg, $tab-blue 0%, $tab-blue-d 100%) !important; color: #fff !important; box-shadow: 0 2px 6px -1px rgb(30 64 175 / 35%); border-color: $tab-blue-d !important; ::ng-deep .mdc-tab__text-label, ::ng-deep .mat-mdc-tab-link-content, ::ng-deep span, .dav-tab__ic { color: #fff !important; opacity: 1 !important; } } } .dav-body { display: flex; flex-direction: column; gap: 16px; } /* ── Cards ────────────────────────────────────────────────────────────── */ .dav-columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); gap: 16px; align-items: start; } .dav-column { display: flex; flex-direction: column; gap: 16px; } .dav-card { border-radius: 14px; background: #fff; border: 1px solid rgb(0 0 0 / 7%); overflow: hidden; } .dav-card__head { display: flex; align-items: center; gap: 12px; padding: 14px 20px; font-size: 1rem; font-weight: 700; background: #f8fafc; border-bottom: 1px solid rgb(0 0 0 / 7%); } .dav-card__dot { width: 30px; height: 30px; border-radius: 8px; background: linear-gradient(135deg, #2563eb, #1e40af); } .dav-row { display: flex; justify-content: space-between; gap: 16px; padding: 12px 20px; border-bottom: 1px dashed rgb(0 0 0 / 7%); font-size: 0.92rem; &:last-child { border-bottom: 0; } span { color: #334155; } strong { text-align: right; font-weight: 600; } } .dav-state { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 48px 16px; color: rgb(0 0 0 / 50%); } /* ── Shared tables and buttons (nominees, not-found state) ─────────── */ .dav-btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 14px; border-radius: 8px; border: 1px solid rgb(0 0 0 / 15%); background: #fff; font-weight: 600; cursor: pointer; &:disabled { opacity: 0.5; cursor: default; } } .dav-table-wrap { overflow-x: auto; } .dav-table { width: 100%; border-collapse: collapse; font-size: 0.92rem; th { padding: 14px 16px; text-align: left; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: #475569; border-bottom: 1px solid rgb(0 0 0 / 8%); white-space: nowrap; } td { padding: 16px; border-bottom: 1px solid rgb(0 0 0 / 5%); font-variant-numeric: tabular-nums; } tbody tr:nth-child(odd) { background: #f8fafc; } } @media (width <= 720px) { .dav-page { padding: 16px; } .dav-banner__boxes { margin-left: 0; width: 100%; } .dav-tab { padding: 0 12px !important; font-size: 12px !important; } } /* Closure tab */ .dav-closure-tag { margin-left: 8px; padding: 1px 8px; border-radius: 999px; background: #fff3e0; color: #e65100; font-size: 0.75rem; font-style: normal; } .dav-closure-total { border-top: 1px solid rgb(0 0 0 / 10%); font-weight: 600; } /* ── Transactions: the savings account's Transactions tab ─────────────── */ $txn-navy: #0d1b2a; $txn-slate: #475569; $txn-muted: #64748b; $txn-border: #e2e8f0; $txn-soft: #f8fafc; $txn-blue: #1e40af; .txn-tab { width: 100%; table { width: 100%; } } .txn-tab__card { background: #fff; border: 1px solid $txn-border; border-radius: 14px; box-shadow: 0 1px 3px rgb(15 23 42 / 4%); overflow: hidden; } .txn-tab__toolbar { display: flex; align-items: center; gap: 18px; padding: 12px 18px; background: $txn-soft; border-bottom: 1px solid $txn-border; flex-wrap: wrap; } .txn-tab__date { display: flex; align-items: center; gap: 8px; font-size: 13px; color: $txn-slate; font-weight: 500; input { height: 34px; padding: 0 10px; border-radius: 8px; border: 1px solid $txn-border; background: #fff; font: inherit; color: $txn-navy; } } .txn-tab__btn { height: 34px !important; border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; fa-icon { margin-right: 4px; } } .txn-tab__spacer { flex: 1; } .txn-tab__total { font-size: 13px; font-weight: 700; font-variant-numeric: tabular-nums; } .txn-tab__total--cr { color: #1a7a3f; } .txn-tab__total--dr { color: #c0392b; } .txn-tab__export { height: 36px !important; border-radius: 8px !important; font-weight: 600 !important; font-size: 13px !important; padding: 0 16px !important; background: linear-gradient(135deg, #1e88e5 0%, $txn-blue 100%) !important; color: #fff !important; &:disabled { opacity: 0.5; } } ::ng-deep .txn-tab__card { .mat-mdc-header-row { background: $txn-soft; } .mat-mdc-header-cell { font-size: 11.5px; font-weight: 800; color: $txn-slate; text-transform: uppercase; letter-spacing: 0.06em; padding: 12px 14px; border-bottom: 1px solid $txn-border; } .mat-mdc-cell { font-size: 13px; color: $txn-navy; padding: 11px 14px; border-bottom: 1px solid #f1f5f9; } .mat-mdc-row:hover { background: #f8fafc; } .mat-column-debit, .mat-column-credit, .mat-column-balance { text-align: right; font-variant-numeric: tabular-nums; } .mat-mdc-paginator { border-top: 1px solid $txn-border; background: $txn-soft; min-height: 48px; } .transfer { color: #6d28d9; } .txn-tab__nodata { padding: 32px 14px; text-align: center; color: $txn-muted; } } .txn-tab__empty { background: #fff; border: 1px solid $txn-border; border-radius: 14px; box-shadow: 0 1px 3px rgb(15 23 42 / 4%); padding: 56px 24px; text-align: center; color: $txn-muted; } .txn-tab__empty-ico { font-size: 34px; color: #cbd5e1; margin-bottom: 8px; } .txn-tab__empty-title { font-size: 14.5px; font-weight: 700; color: $txn-slate; margin-top: 6px; } .txn-tab__empty-sub { font-size: 12.5px; color: $txn-muted; margin-top: 2px; } /* ── Passbook: the savings account's Passbook tab ─────────────────────── */ $bank-primary: #1a3a6b; $bank-accent: #c8a951; $debit-color: #c0392b; $credit-color: #1a7a3f; $balance-color: #1a3a6b; $border-color: #d0d7e3; $row-alt: #f4f7fb; .passbook-container { padding: 16px; background: #eef1f7; border-radius: 14px; min-height: 100%; } .passbook-filter-bar { margin-bottom: 16px; background: #fff; border-radius: 8px; padding: 12px 16px; border: 1px solid $border-color; } .passbook-filter-form { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .passbook-date-field { width: 180px; } .passbook-filter-spacer { flex: 1; } .statement-wrapper { background: #fff; border: 1px solid $border-color; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 12px rgb(0 0 0 / 8%); font-family: 'Segoe UI', Arial, sans-serif; } .bank-header { background: $bank-primary; padding: 18px 24px; display: flex; justify-content: space-between; align-items: center; border-bottom: 4px solid $bank-accent; } .bank-logo-area { display: flex; align-items: center; gap: 14px; } .bank-logo-circle { width: 52px; height: 52px; border-radius: 50%; background: $bank-accent; display: flex; align-items: center; justify-content: center; mat-icon { color: $bank-primary; font-size: 28px; width: 28px; height: 28px; } } .bank-name-block { .bank-title { color: #fff; font-size: 18px; font-weight: 700; letter-spacing: 0.3px; } .bank-subtitle { color: $bank-accent; font-size: 11px; font-weight: 500; letter-spacing: 1.5px; text-transform: uppercase; margin-top: 2px; } } .statement-label { text-align: right; .stmt-label-text { color: $bank-accent; font-size: 13px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; } .stmt-period { color: rgb(255 255 255 / 75%); font-size: 11px; margin-top: 4px; } } .branch-line { background: #e8edf5; border-bottom: 1px solid $border-color; padding: 6px 24px; display: flex; flex-wrap: wrap; gap: 4px 18px; font-size: 11px; color: #4a5a7a; } .account-details-band { background: #f0f3f9; border-bottom: 1px solid $border-color; padding: 14px 24px; } .account-details-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px 24px; } .detail-block { .detail-label { font-size: 9px; font-weight: 700; color: #7a8aaa; text-transform: uppercase; letter-spacing: 0.8px; margin-bottom: 3px; } .detail-value { font-size: 13px; color: #222; &.bold { font-weight: 600; } &.mono { font-family: 'Courier New', monospace; letter-spacing: 1px; } &.status-badge { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 11px; font-weight: 600; background: #eee; color: #555; &.active { background: #d4edda; color: #155724; } } } } .balance-summary-strip { display: flex; align-items: stretch; background: $bank-primary; padding: 0; } .balance-box { flex: 1; padding: 12px 20px; text-align: center; .balance-box-label { font-size: 10px; font-weight: 600; color: rgb(255 255 255 / 65%); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 4px; } .balance-box-value { font-size: 16px; font-weight: 700; color: $bank-accent; } } .balance-divider { width: 1px; background: rgb(255 255 255 / 15%); margin: 8px 0; } .statement-table { width: 100%; border-collapse: collapse; font-size: 12.5px; thead tr { background: #e8edf5; border-top: 1px solid $border-color; border-bottom: 2px solid $bank-primary; } thead th { padding: 9px 10px; font-size: 11px; font-weight: 700; color: $bank-primary; text-transform: uppercase; letter-spacing: 0.4px; white-space: nowrap; } tbody tr { border-bottom: 1px solid #e8ecf3; transition: background 0.1s; &:nth-child(even) { background: $row-alt; } &:hover { background: #dce6f5; } } tbody td { padding: 7px 10px; vertical-align: middle; color: #333; } tfoot .total-row { background: #e8edf5; border-top: 2px solid $bank-primary; td { padding: 9px 10px; } } } .col-sr { width: 38px; } .col-date { width: 110px; white-space: nowrap; } .col-desc { min-width: 160px; } .col-ref { width: 100px; } .col-amount { width: 110px; } .col-balance { width: 120px; } .debit-amount { color: $debit-color; font-weight: 500; } .credit-amount { color: $credit-color; font-weight: 500; } .balance-amount { color: $balance-color; font-weight: 600; font-family: 'Courier New', monospace; } .total-label { font-size: 12px; font-weight: 700; color: $bank-primary; text-transform: uppercase; letter-spacing: 0.5px; } .closing-balance { font-size: 14px; font-weight: 700; color: $bank-primary; font-family: 'Courier New', monospace; } .txn-desc { font-weight: 500; } .text-right { text-align: right; } .text-center { text-align: center; } .text-muted { color: #999; } .mono { font-family: 'Courier New', monospace; font-size: 11px; } .no-data-block { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48px; color: #aaa; mat-icon { font-size: 48px; width: 48px; height: 48px; margin-bottom: 12px; } p { font-size: 14px; margin: 0; } } .statement-footer { background: #f0f3f9; border-top: 1px solid $border-color; padding: 12px 24px; text-align: center; .footer-note { font-size: 10px; color: #888; margin-bottom: 4px; font-style: italic; } .footer-meta { font-size: 10px; color: #aaa; letter-spacing: 0.3px; } } @media (width <= 768px) { .account-details-grid { grid-template-columns: 1fr 1fr; } .bank-header { flex-direction: column; gap: 12px; align-items: flex-start; } .statement-label { text-align: left; } .balance-summary-strip { flex-direction: column; } .balance-divider { width: auto; height: 1px; margin: 0 20px; } .passbook-filter-form { flex-direction: column; align-items: stretch; } .passbook-date-field { width: 100%; } .passbook-filter-spacer { display: none; } } @media (width <= 480px) { .account-details-grid { grid-template-columns: 1fr; } } @media print { .no-print { display: none !important; } .passbook-container { background: #fff; padding: 0; } .statement-wrapper { border: none; box-shadow: none; border-radius: 0; } .bank-header, .balance-summary-strip { -webkit-print-color-adjust: exact; print-color-adjust: exact; } }