/** * 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/. */ :host { --fd-navy: #101723; --fd-accent: #1b4d8f; --fd-accent-dark: #123c70; --fd-ground: #f7f8fa; --fd-border: #dfe4eb; --fd-border-soft: #edf0f4; --fd-muted: #5b6676; --fd-text: #3c4757; --fd-amber: #6b4600; --fd-amber-dark: #5a3b00; --fd-amber-tint: #fdf3dc; --fd-amber-border: #efd9a3; --fd-amber-wash: #fffcf4; --fd-green: #185e38; --fd-green-dark: #1d6f42; --fd-green-tint: #e2f3e8; --fd-green-wash: #f3faf5; --fd-blue-tint: #e6eef8; --fd-slate-tint: #edf0f4; display: block; font-family: 'IBM Plex Sans', system-ui, sans-serif; color: var(--fd-navy); } .fd { max-width: 1320px; margin: 0 auto; padding: 20px 4px 56px; } // ── Header ────────────────────────────────────────────────────────────── .fd-head { display: flex; flex-wrap: wrap; gap: 24px; align-items: flex-end; justify-content: space-between; margin-bottom: 22px; } .fd-head-t { margin: 0; font-family: 'IBM Plex Serif', serif; font-weight: 600; font-size: 26px; letter-spacing: -0.01em; display: flex; align-items: center; gap: 10px; fa-icon { color: var(--fd-accent); font-size: 20px; } } .fd-head-s { max-width: 720px; margin-top: 8px; font-size: 13.5px; line-height: 1.6; color: var(--fd-muted); } .fd-head-a { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; } .fd-date { display: flex; flex-direction: column; gap: 5px; font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--fd-muted); input { font-family: 'IBM Plex Mono', monospace; font-size: 13px; padding: 9px 11px; min-height: 44px; border: 1px solid #cdd5df; border-radius: 7px; background: #fff; color: var(--fd-navy); } } // ── Buttons ───────────────────────────────────────────────────────────── .fd-btn { font-family: inherit; font-size: 12.5px; font-weight: 500; padding: 8px 14px; min-height: 44px; border-radius: 7px; border: 1px solid #cdd5df; background: #fff; color: var(--fd-navy); cursor: pointer; white-space: nowrap; fa-icon { margin-right: 6px; } &:hover:not([disabled]) { background: #f2f5f9; } &[disabled] { opacity: 0.5; cursor: not-allowed; } &--primary { background: var(--fd-accent); border-color: var(--fd-accent); color: #fff; &:hover:not([disabled]) { background: var(--fd-accent-dark); } } &--slim { min-height: 34px; padding: 6px 11px; font-size: 12px; } } // ── Tabs ──────────────────────────────────────────────────────────────── .fd-tabs { display: flex; gap: 4px; margin-bottom: 20px; border-bottom: 1px solid var(--fd-border); } .fd-tab { font-family: inherit; font-size: 13px; font-weight: 500; padding: 10px 6px; min-height: 44px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--fd-muted); cursor: pointer; fa-icon { margin-right: 7px; } &.is-active { border-bottom-color: var(--fd-accent); color: var(--fd-accent); font-weight: 600; } & + .fd-tab { margin-left: 18px; } } // ── Alerts ────────────────────────────────────────────────────────────── .fd-alert { display: flex; gap: 12px; align-items: flex-start; margin-bottom: 18px; padding: 14px 18px; border-radius: 10px; font-size: 13px; line-height: 1.6; fa-icon { margin-top: 2px; flex-shrink: 0; } &--info { background: #eef3fa; border: 1px solid #c8d8ec; color: #1f3a5c; } &--warn { background: var(--fd-amber-tint); border: 1px solid var(--fd-amber-border); color: var(--fd-amber-dark); strong { color: var(--fd-amber-dark); } } &--ok { background: var(--fd-green-wash); border: 1px solid #bfe3cc; color: var(--fd-green); } &--error { background: #fdecea; border: 1px solid #f3b8b1; color: #8a2b22; } } .fd-due-body { display: flex; flex-direction: column; gap: 10px; width: 100%; } .fd-due-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 8px 0; & + .fd-due-row { border-top: 1px dashed var(--fd-amber-border); } } .fd-blocked { font-size: 11.5px; color: var(--fd-muted); } // ── Summary strip ─────────────────────────────────────────────────────── .fd-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; margin-bottom: 20px; @media (width <= 860px) { grid-template-columns: repeat(2, minmax(0, 1fr)); } } .fd-stat { background: #fff; border: 1px solid var(--fd-border); border-radius: 12px; padding: 18px 20px; &__label { font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--fd-muted); } &__value { font-family: 'IBM Plex Mono', monospace; font-variant-numeric: tabular-nums; font-size: 25px; font-weight: 500; letter-spacing: -0.02em; margin-top: 9px; } &__sub { font-size: 11.5px; color: var(--fd-muted); margin-top: 4px; } &--warn { border-color: var(--fd-amber-border); .fd-stat__label, .fd-stat__sub { color: var(--fd-amber); } .fd-stat__value { color: var(--fd-amber-dark); } } &--ok { .fd-stat__label { color: var(--fd-green); } .fd-stat__value { color: var(--fd-green); } } &--posted { .fd-stat__label { color: var(--fd-accent); } .fd-stat__value { color: var(--fd-accent); } } } // ── Cards ─────────────────────────────────────────────────────────────── .fd-card { background: #fff; border: 1px solid var(--fd-border); border-radius: 12px; margin-bottom: 20px; overflow: hidden; } .fd-card-h { display: flex; flex-wrap: wrap; gap: 10px; align-items: baseline; padding: 16px 20px; border-bottom: 1px solid var(--fd-border); h2, h3 { margin: 0; font-size: 15px; font-weight: 600; } } .fd-card-sub { font-size: 12px; color: var(--fd-muted); } // ── Tables ────────────────────────────────────────────────────────────── .fd-table-wrap { overflow-x: auto; } .fd-table { border-collapse: collapse; width: 100%; th { font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--fd-muted); text-align: left; padding: 10px 14px; border-bottom: 1px solid var(--fd-border); white-space: nowrap; } td { font-size: 13px; padding: 12px 14px; border-bottom: 1px solid var(--fd-border-soft); vertical-align: top; } tbody tr:last-child td { border-bottom: 0; } tbody tr.is-clickable { cursor: pointer; &:hover td { background: #fafbfd; } } tbody tr.is-selected td { background: var(--fd-blue-tint); } tfoot tr { background: var(--fd-ground); } .num { text-align: right; font-family: 'IBM Plex Mono', monospace; font-variant-numeric: tabular-nums; white-space: nowrap; } } .fd-mono { font-family: 'IBM Plex Mono', monospace; font-variant-numeric: tabular-nums; } .fd-sub { font-size: 11.5px; color: var(--fd-muted); margin-top: 3px; } .fd-empty { text-align: center; padding: 30px 16px; color: var(--fd-muted); font-size: 13px; } // ── Chips & badges ────────────────────────────────────────────────────── .fd-chip { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 11px; font-weight: 600; letter-spacing: 0.02em; white-space: nowrap; &--single { background: var(--fd-slate-tint); color: var(--fd-text); } &--double { background: var(--fd-blue-tint); color: var(--fd-accent); } &--special { background: var(--fd-amber-tint); color: var(--fd-amber); } } .fd-badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 11px; font-weight: 700; letter-spacing: 0.02em; white-space: nowrap; &--pending { background: var(--fd-amber-tint); color: var(--fd-amber); } &--approved { background: var(--fd-green-tint); color: var(--fd-green); } &--posted { background: var(--fd-blue-tint); color: var(--fd-accent); } &--muted { background: var(--fd-slate-tint); color: var(--fd-muted); } } .fd-behalf { font-size: 10.5px; font-weight: 700; color: var(--fd-accent); margin-left: 4px; } .fd-fail { margin-top: 4px; font-size: 11px; color: #a32b22; } // ── Detail panel ──────────────────────────────────────────────────────── .fd-detail-head { display: flex; flex-wrap: wrap; gap: 20px; justify-content: space-between; align-items: flex-start; padding: 22px 20px; border-bottom: 1px solid var(--fd-border-soft); background: #fbfcfd; h3 { margin: 0; font-family: 'IBM Plex Serif', serif; font-weight: 600; font-size: 19px; display: flex; flex-wrap: wrap; align-items: center; gap: 9px; } } .fd-total { text-align: right; span:first-child { display: block; font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--fd-muted); } strong { display: block; font-family: 'IBM Plex Mono', monospace; font-variant-numeric: tabular-nums; font-size: 26px; font-weight: 500; margin-top: 6px; letter-spacing: -0.02em; } } .muted { color: var(--fd-muted); font-size: 12.5px; margin-top: 4px; }