/** * 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/. */ // ── Design tokens (from home/toolbar) ── $brand-dark: #0d3d78; $accent: #0ea5e9; :host { display: block; margin: 0 auto; max-width: 90rem; width: 90%; } // ── Card wrapper ── .cv-card { background: #fff !important; border-radius: 10px; overflow: hidden; border: 1px solid rgb(0 0 0 / 6%); box-shadow: 0 1px 4px rgb(0 0 0 / 4%); margin: 0; padding: 0; } // ── Blue banner (top section) ── .cv-top { display: flex; align-items: flex-start; gap: 20px; padding: 20px 24px 18px; background: linear-gradient(135deg, $brand-dark 0%, #1a5276 100%); position: relative; overflow: hidden; // Stripe overlay — matches home/toolbar &::after { content: ''; position: absolute; inset: 0; background: repeating-linear-gradient( 108deg, transparent 0, transparent 80px, rgb(255 255 255 / 2.5%) 80px, rgb(255 255 255 / 2.5%) 160px ); pointer-events: none; } /* stylelint-disable-next-line selector-max-universal */ > * { position: relative; z-index: 1; } } // ── Avatar ── .cv-avatar { display: flex; flex-direction: column; align-items: center; gap: 6px; flex-shrink: 0; &__img { width: 72px; height: 72px; border-radius: 10px; object-fit: cover; border: 2px solid rgb(255 255 255 / 25%); background: #fff; } &__actions { display: flex; gap: 3px; } &__btn { width: 26px !important; height: 26px !important; min-width: 26px !important; padding: 0 !important; border-radius: 5px !important; background: rgb(255 255 255 / 10%) !important; color: rgb(255 255 255 / 60%) !important; border: 1px solid rgb(255 255 255 / 15%) !important; display: flex !important; align-items: center; justify-content: center; cursor: pointer; transition: all 0.12s; i { font-size: 10px; } &:hover { background: rgb(255 255 255 / 20%) !important; color: #fff !important; } &--danger:hover { background: rgb(239 68 68 / 35%) !important; border-color: rgb(239 68 68 / 45%) !important; } } &__sig { font-size: 10px; color: rgb(255 255 255 / 60%); cursor: pointer; font-weight: 500; &:hover { color: #fff; text-decoration: underline; } } } // ── Info column ── .cv-info { flex: 1; min-width: 0; } // ── Name row ── .cv-name-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; } .cv-name { display: flex; align-items: center; gap: 10px; &__dot { font-size: 10px; } &__text { font-size: 20px; font-weight: 700; color: #fff; letter-spacing: -0.3px; } &__status { font-size: 9px; font-weight: 700; padding: 2px 9px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.4px; background: rgb(16 185 129 / 20%); color: #6ee7b7; border: 1px solid rgb(16 185 129 / 25%); } } .cv-menu-btn { color: rgb(255 255 255 / 70%) !important; width: 28px !important; height: 28px !important; min-width: 28px !important; padding: 0 !important; border: 1px solid rgb(255 255 255 / 15%); border-radius: 5px !important; line-height: 28px !important; &:hover { background: rgb(255 255 255 / 10%); color: #fff !important; } .actions-menu { font-size: 14px !important; width: 14px !important; height: 14px !important; line-height: 14px !important; } } // ── ID chips ── .cv-ids { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; } .cv-id { display: inline-flex; align-items: center; gap: 8px; padding: 4px 11px; background: rgb(255 255 255 / 10%); border: 1px solid rgb(255 255 255 / 13%); border-radius: 5px; &__label { font-size: 9px; font-weight: 700; color: rgb(255 255 255 / 40%); text-transform: uppercase; letter-spacing: 0.4px; } &__val { font-size: 12px; font-weight: 600; color: #fff; font-family: 'SF Mono', 'Cascadia Code', Consolas, monospace; letter-spacing: 0.3px; } } // ── Details grid (inside banner, translucent cards) ── .cv-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; padding: 0 24px 18px; background: linear-gradient(135deg, $brand-dark 0%, #1a5276 100%); position: relative; } .cv-cell { padding: 9px 13px; background: rgb(255 255 255 / 7%); border-radius: 6px; border: 1px solid rgb(255 255 255 / 8%); transition: background 0.12s; &:hover { background: rgb(255 255 255 / 12%); } &__label { font-size: 9px; font-weight: 600; color: rgb(255 255 255 / 45%); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; } &__value { font-size: 13px; font-weight: 600; color: #fff; line-height: 1.35; } } .cv-badge { font-size: 10px; font-weight: 700; padding: 2px 8px; border-radius: 10px; letter-spacing: 0.3px; &--green { background: rgb(16 185 129 / 20%); color: #6ee7b7; } &--yellow { background: rgb(245 158 11 / 20%); color: #fcd34d; } &--red { background: rgb(239 68 68 / 20%); color: #fca5a5; } } .actions-menu { color: #fff !important; } // ── Tab bar ── .cv-tabs { background: #fff; border-bottom: 1px solid rgb(0 0 0 / 6%); ::ng-deep .mat-mdc-tab-link { font-size: 12px !important; font-weight: 500 !important; letter-spacing: 0.2px; min-width: 0 !important; padding: 0 14px !important; height: 42px !important; } } .cv-tab-icon { margin-right: 5px; font-size: 12px; opacity: 0.7; } // Fix copy icons on dark background .cv-top, .cv-grid { ::ng-deep { mifosx-external-identifier, mifosx-account-number { color: #fff !important; .copy-icon, button, mat-icon, fa-icon { color: rgb(255 255 255 / 40%) !important; font-size: 11px !important; width: 16px !important; height: 16px !important; min-width: 16px !important; padding: 0 !important; line-height: 16px !important; &:hover { color: #fff !important; } } } } } // ── Client menu styling ── ::ng-deep .mat-mdc-menu-panel { border-radius: 10px !important; border: 1px solid rgb(0 0 0 / 6%) !important; box-shadow: 0 8px 30px rgb(0 0 0 / 12%) !important; min-width: 200px !important; padding: 6px 0 !important; .mat-mdc-menu-item { font-size: 13px !important; font-weight: 500 !important; height: 38px !important; min-height: 38px !important; padding: 0 16px !important; color: #333 !important; border-radius: 0 !important; margin: 0 !important; &:hover { background: #f0f7ff !important; color: $brand-dark !important; } .mat-icon, mat-icon { font-size: 15px !important; width: 18px !important; height: 18px !important; min-width: 18px !important; margin-right: 10px !important; color: $accent !important; display: inline-flex !important; align-items: center; justify-content: center; } } // Sub-menu trigger arrow .mat-mdc-menu-item-submenu-trigger::after { color: #999; } } // ── Responsive ── @media (width <= 1024px) { .cv-grid { grid-template-columns: repeat(3, 1fr); } } @media (width <= 768px) { .cv-top { flex-direction: column; align-items: center; text-align: center; } .cv-name-row { justify-content: center; } .cv-ids { justify-content: center; } .cv-grid { grid-template-columns: repeat(2, 1fr); } } @media (width <= 480px) { .cv-grid { grid-template-columns: 1fr; } }