/** * 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 { --f-navy: #1a237e; --f-blue: #1d4ed8; --f-blue-l: #eff6ff; --f-green: #15803d; --f-green-l: #dcfce7; --f-amber: #b45309; --f-amber-l: #fef3c7; --f-red: #c0392b; --f-red-l: #fdecea; --f-g50: #f8fafc; --f-g100: #f1f5f9; --f-g200: #e2e8f0; --f-g300: #cbd5e1; --f-g500: #64748b; --f-g700: #334155; --f-g900: #0f172a; display: block; font-family: 'DM Sans', system-ui, sans-serif; background: var(--f-g50); color: var(--f-g900); font-size: 14px; line-height: 1.5; } .fd-root { padding: 18px 22px; max-width: 1700px; margin: 0 auto; } /* HEADER */ .fd-head { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; margin-bottom: 14px; } .fd-head-left { display: flex; align-items: flex-start; gap: 14px; } .fd-head-ic { font-size: 26px; color: var(--f-navy); margin-top: 3px; } .fd-head-t { margin: 0; font-size: 18px; font-weight: 700; } .fd-head-s { font-size: 12px; color: var(--f-g500); max-width: 820px; } /* BUTTONS */ .fd-btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 15px; border: 1px solid var(--f-g300); background: #fff; border-radius: 8px; font-size: 12.5px; font-weight: 600; color: var(--f-g700); cursor: pointer; font-family: inherit; transition: all 0.15s; &:hover:not(:disabled) { background: var(--f-g50); border-color: var(--f-g500); } &:disabled { opacity: 0.55; cursor: not-allowed; } &--primary { background: var(--f-green); border-color: var(--f-green); color: #fff; &:hover:not(:disabled) { background: #12692f; border-color: #12692f; color: #fff; } } } /* FILTERS */ .fd-filters { background: #fff; border: 1px solid var(--f-g200); border-radius: 11px; padding: 12px 16px; margin-bottom: 14px; display: flex; flex-direction: column; gap: 10px; } .fd-filter-row { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; } .fd-modes { display: flex; gap: 6px; flex-wrap: wrap; } .fd-chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border: 1px solid var(--f-g300); background: #fff; border-radius: 999px; font-size: 12.5px; font-weight: 600; color: var(--f-g700); cursor: pointer; font-family: inherit; &:hover { border-color: var(--f-navy); } &.active { background: var(--f-navy); border-color: var(--f-navy); color: #fff; } } .fd-field { display: flex; flex-direction: column; gap: 3px; span { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--f-g500); } input, select { padding: 7px 10px; border: 1px solid var(--f-g300); border-radius: 7px; font-size: 13px; font-family: inherit; background: #fff; color: var(--f-g900); &:focus { outline: none; border-color: var(--f-navy); } &:disabled { background: var(--f-g100); color: var(--f-g500); } } &--grow { flex: 1; min-width: 240px; input { width: 100%; } } } .fd-resolved { font-size: 12px; color: var(--f-g500); padding-bottom: 8px; } .fd-check { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: var(--f-g700); padding-bottom: 8px; cursor: pointer; } .fd-scope-note { display: flex; align-items: center; gap: 7px; font-size: 12px; color: var(--f-amber); background: var(--f-amber-l); border: 1px solid #fcd34d; border-radius: 7px; padding: 6px 11px; } /* KPIs */ .fd-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 14px; } .fd-kpi { background: #fff; border: 1px solid var(--f-g200); border-left: 4px solid var(--f-navy); border-radius: 11px; padding: 12px 16px; &--blue { border-left-color: var(--f-blue); } &--amber { border-left-color: var(--f-amber); } &--red { border-left-color: var(--f-red); } } .fd-kpi-n { font-size: 22px; font-weight: 700; font-family: 'DM Mono', monospace; } .fd-kpi-l { font-size: 12px; font-weight: 600; color: var(--f-g700); } .fd-kpi-sub { font-size: 11px; color: var(--f-g500); } /* VIEW SWITCH */ .fd-views { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; } .fd-spacer { flex: 1; } .fd-count { font-size: 12px; color: var(--f-g500); font-weight: 600; } /* TABLE */ .fd-table-wrap { background: #fff; border: 1px solid var(--f-g200); border-radius: 11px; overflow-x: auto; } .fd-table { width: 100%; border-collapse: collapse; font-size: 12.5px; th { text-align: left; padding: 9px 10px; background: var(--f-g100); font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--f-g700); white-space: nowrap; border-bottom: 1px solid var(--f-g200); } td { padding: 8px 10px; border-bottom: 1px solid var(--f-g100); vertical-align: top; } .num { text-align: right; font-family: 'DM Mono', monospace; } .strong { font-weight: 700; } tbody tr:hover:not(.fd-detail) { background: var(--f-g50); } } .fd-person { cursor: pointer; &.open { background: var(--f-blue-l); } } .fd-row--ctr { background: var(--f-red-l); } .fd-detail { background: #fcfcfe; td { padding: 12px 16px 16px; } } .fd-decl { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px 18px; margin-bottom: 12px; padding: 10px 14px; background: #fff; border: 1px solid var(--f-g200); border-radius: 8px; > div { display: flex; flex-direction: column; } .wide { grid-column: span 2; } label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--f-g500); } span { font-size: 12.5px; } } .fd-subtable { width: 100%; border-collapse: collapse; font-size: 12px; background: #fff; border: 1px solid var(--f-g200); border-radius: 8px; overflow: hidden; th { text-align: left; padding: 7px 10px; background: var(--f-g50); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--f-g500); white-space: nowrap; } td { padding: 6px 10px; border-top: 1px solid var(--f-g100); } .num { text-align: right; font-family: 'DM Mono', monospace; } .strong { font-weight: 700; } } /* Badges */ .fd-form { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 10.5px; font-weight: 700; background: var(--f-blue-l); color: var(--f-blue); white-space: nowrap; &--61 { background: var(--f-green-l); color: var(--f-green); } } .fd-mode { display: inline-block; padding: 1px 7px; border-radius: 5px; font-size: 10.5px; font-weight: 700; background: var(--f-g100); color: var(--f-g700); } .fd-group { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 10.5px; font-weight: 600; background: #fff; border: 1px solid var(--f-g300); color: var(--f-g700); white-space: nowrap; } /* Category mix — doubles as a one-click filter. */ .fd-mix { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; margin-bottom: 12px; } .fd-mix-t { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--f-g500); margin-right: 2px; } .fd-mix-item { display: inline-flex; align-items: center; gap: 6px; padding: 4px 11px; border: 1px solid var(--f-g200); background: #fff; border-radius: 7px; font-size: 11.5px; font-weight: 600; color: var(--f-g700); cursor: pointer; font-family: inherit; strong { font-family: 'DM Mono', monospace; color: var(--f-navy); } &:hover { border-color: var(--f-navy); } &.active { background: var(--f-navy); border-color: var(--f-navy); color: #fff; strong { color: #fff; } } } .fd-tag { display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px; font-size: 10px; font-weight: 700; background: var(--f-amber-l); color: var(--f-amber); white-space: nowrap; &--ctr { background: var(--f-red-l); color: var(--f-red); } } .fd-ratio { font-weight: 600; &--mid { color: var(--f-amber); } &--high { color: var(--f-red); font-weight: 700; } } .cr { color: var(--f-green); font-weight: 700; } .dr { color: var(--f-red); font-weight: 700; } .mono { font-family: 'DM Mono', monospace; font-size: 11.5px; } .fd-empty { padding: 44px; text-align: center; color: var(--f-g500); font-size: 13px; } /* TOAST */ .fd-toast { position: fixed; bottom: 32px; left: 50%; transform: translateX(-50%) translateY(20px); background: var(--f-navy); color: #fff; padding: 12px 22px; border-radius: 10px; font-size: 13px; box-shadow: 0 6px 20px rgb(0 0 0 / 25%); opacity: 0; pointer-events: none; transition: all 0.25s; z-index: 1500; &.show { opacity: 1; transform: translateX(-50%) translateY(0); } } @media (width <= 1200px) { .fd-kpis { grid-template-columns: 1fr 1fr; } .fd-decl { grid-template-columns: 1fr 1fr; } }