/** * 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 { --g-navy: #1a237e; --g-blue: #1d4ed8; --g-blue-l: #eff6ff; --g-teal: #0e7e6b; --g-teal-l: #e0f4f0; --g-green: #15803d; --g-green-l: #dcfce7; --g-amber: #b45309; --g-amber-l: #fef3c7; --g-red: #c0392b; --g-red-l: #fdecea; --g-g50: #f8fafc; --g-g100: #f1f5f9; --g-g200: #e2e8f0; --g-g300: #cbd5e1; --g-g500: #64748b; --g-g700: #334155; --g-g900: #0f172a; display: block; font-family: 'DM Sans', system-ui, -apple-system, sans-serif; background: var(--g-g50); color: var(--g-g900); font-size: 14px; line-height: 1.5; } .glr-root { padding: 18px 22px; max-width: 1700px; margin: 0 auto; } /* HEADER */ .glr-head { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; margin-bottom: 14px; } .glr-head-left { display: flex; align-items: center; gap: 14px; } .glr-head-ic { font-size: 28px; color: var(--g-navy); } .glr-head-t { margin: 0; font-size: 18px; font-weight: 700; } .glr-head-s { font-size: 12px; color: var(--g-g500); } /* BUTTONS */ .glr-btn { display: inline-flex; align-items: center; gap: 8px; padding: 9px 16px; border: 1px solid var(--g-g300); background: #fff; border-radius: 8px; font-size: 13px; font-weight: 600; color: var(--g-g700); cursor: pointer; font-family: inherit; transition: all 0.15s; white-space: nowrap; &:hover:not(:disabled) { background: var(--g-g50); border-color: var(--g-g500); } &:disabled { opacity: 0.6; cursor: not-allowed; } } .glr-btn-xls { background: #16a34a; border-color: #16a34a; color: #fff; &:hover:not(:disabled) { background: #15803d; border-color: #15803d; color: #fff; } } /* FILTER BAR */ .glr-filters { background: #fff; border: 1px solid var(--g-g200); border-radius: 12px; padding: 14px; display: flex; align-items: flex-end; gap: 14px; flex-wrap: wrap; margin-bottom: 16px; box-shadow: 0 1px 3px rgb(0 0 0 / 4%); } .glr-filter { display: flex; flex-direction: column; gap: 5px; label { font-size: 11px; font-weight: 700; color: var(--g-g500); text-transform: uppercase; letter-spacing: 0.05em; } } .glr-inp { padding: 8px 12px; border: 1px solid var(--g-g200); border-radius: 8px; font-size: 13px; background: #fff; font-family: inherit; min-width: 190px; &:focus { outline: none; border-color: var(--g-navy); box-shadow: 0 0 0 3px rgb(26 35 126 / 12%); } } /* Read-only branch shown to a branch-level login in place of the selector. */ .glr-chip { display: inline-flex; align-items: center; gap: 7px; padding: 8px 14px; min-width: 190px; border: 1px solid var(--g-g200); border-radius: 8px; background: var(--g-g100); font-size: 13px; font-weight: 600; color: var(--g-g700); } /* Day / Month / Range segmented control */ .glr-seg { display: inline-flex; border: 1px solid var(--g-g200); border-radius: 8px; overflow: hidden; button { padding: 8px 14px; border: none; background: #fff; font-size: 13px; font-weight: 600; color: var(--g-g500); cursor: pointer; font-family: inherit; transition: all 0.15s; + button { border-left: 1px solid var(--g-g200); } &:hover { background: var(--g-g50); } &.active { background: var(--g-navy); color: #fff; } } } /* REPORT SELECTOR */ .glr-tabs { display: flex; gap: 4px; background: #fff; border: 1px solid var(--g-g200); border-radius: 10px; padding: 4px; margin-bottom: 16px; overflow-x: auto; } .glr-tab { display: inline-flex; align-items: center; gap: 8px; padding: 9px 14px; border: none; background: transparent; font-size: 13px; font-weight: 500; color: var(--g-g500); cursor: pointer; border-radius: 7px; white-space: nowrap; transition: all 0.15s; font-family: inherit; &:hover { color: var(--g-g900); } &.active { background: var(--g-navy); color: #fff; box-shadow: 0 2px 6px rgb(26 35 126 / 25%); } } .glr-section { display: flex; flex-direction: column; gap: 16px; } /* BALANCE BANNER */ .glr-balance { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-radius: 10px; background: var(--g-green-l); border: 1px solid #86efac; color: #14532d; font-size: 13px; &--bad { background: var(--g-red-l); border-color: #fca5a5; color: #7f1d1d; } } .glr-note { margin: 0; font-size: 12px; color: var(--g-g500); } /* KPIs */ .glr-kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; } .glr-kpi { background: #fff; border: 1px solid var(--g-g200); border-left: 4px solid var(--g-g300); border-radius: 12px; padding: 14px 18px; box-shadow: 0 1px 3px rgb(0 0 0 / 5%); &--teal { border-left-color: var(--g-teal); } &--amber { border-left-color: var(--g-amber); } &--green { border-left-color: var(--g-green); } &--red { border-left-color: var(--g-red); } } .glr-kpi-n { font-size: 20px; font-weight: 700; font-family: 'DM Mono', monospace; color: var(--g-g900); } .glr-kpi-l { font-size: 12px; color: var(--g-g700); font-weight: 600; margin-top: 2px; } .glr-kpi-sub { font-size: 11px; color: var(--g-g500); } /* TABLES */ .glr-two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: start; } .glr-tbl-wrap { background: #fff; border: 1px solid var(--g-g200); border-radius: 12px; overflow: auto; box-shadow: 0 1px 3px rgb(0 0 0 / 4%); &--tall { max-height: 70vh; } } .glr-tbl-h { background: var(--g-blue-l); color: var(--g-navy); padding: 10px 16px; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; border-bottom: 1px solid var(--g-g200); position: sticky; top: 0; z-index: 2; } .glr-tbl { width: 100%; border-collapse: collapse; th { text-align: left; padding: 9px 12px; font-size: 11px; font-weight: 700; color: var(--g-g500); text-transform: uppercase; letter-spacing: 0.04em; background: var(--g-g50); border-bottom: 1px solid var(--g-g200); white-space: nowrap; } td { padding: 8px 12px; border-bottom: 1px solid var(--g-g100); font-size: 13px; color: var(--g-g700); } tbody tr:hover td { background: var(--g-g50); } tfoot td { position: sticky; bottom: 0; } } .total-row td { background: var(--g-g100) !important; font-weight: 700; color: var(--g-g900); border-top: 2px solid var(--g-g300); } .glr-profit-row td { background: var(--g-green-l) !important; color: #14532d; } .glr-loss-row td { background: var(--g-red-l) !important; color: #7f1d1d; } .ta-c { text-align: center; } .ta-r { text-align: right; } .mono { font-family: 'DM Mono', monospace; font-size: 12px; } .muted { color: var(--g-g500); font-size: 11px; } .var-up { color: var(--g-green); font-weight: 600; } .var-down { color: var(--g-red); font-weight: 600; } .glr-empty { text-align: center; padding: 34px; color: var(--g-g500); font-style: italic; } /* A voucher whose debits and credits disagree. */ .glr-unbalanced td { background: var(--g-red-l) !important; color: #7f1d1d; font-weight: 600; } /* GL code chips on the mapping report */ .glr-gl-chip { display: inline-block; padding: 1px 8px; margin: 1px 3px 1px 0; border-radius: 999px; background: #e0f2fe; color: #075985; font-size: 11px; font-weight: 600; } /* Share bars on the distribution report */ .glr-bar-col { width: 150px; } .glr-bar { height: 9px; border-radius: 999px; background: var(--g-g100); overflow: hidden; min-width: 110px; } .glr-bar-fill { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--g-navy), var(--g-blue)); transition: width 0.25s; } /* Account-type pills on the GL Wise report */ .type-pill { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 10px; font-weight: 700; letter-spacing: 0.03em; background: var(--g-g100); color: var(--g-g700); &.type-asset { background: var(--g-blue-l); color: var(--g-blue); } &.type-liability { background: var(--g-teal-l); color: var(--g-teal); } &.type-income { background: var(--g-green-l); color: var(--g-green); } &.type-expense { background: var(--g-amber-l); color: var(--g-amber); } &.type-contingent { background: var(--g-red-l); color: var(--g-red); } } /* TOAST */ .glr-toast { position: fixed; bottom: 32px; left: 50%; transform: translateX(-50%) translateY(20px); background: var(--g-navy); color: #fff; padding: 12px 22px; border-radius: 10px; font-size: 13px; font-weight: 500; 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) { .glr-two-col { grid-template-columns: 1fr; } .glr-kpis { grid-template-columns: 1fr; } }