/** * 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/. */ .dd-apply-row td { background: #f8fafc; padding: 0; } .dd-apply-panel { display: flex; align-items: flex-end; gap: 16px; flex-wrap: wrap; padding: 14px 16px; .inv-form-field { min-width: 220px; } } .dd-apply-error { color: #b42318; font-size: 12.5px; font-weight: 600; } .dd-apply-panel--wrap { align-items: flex-end; } .dd-apply-panel-title { width: 100%; font-size: 12.5px; font-weight: 700; color: #475569; } .dd-apply-panel-total { font-size: 13px; font-weight: 700; color: #0f172a; font-variant-numeric: tabular-nums; } .dd-apply-confirm { background: #2563eb; color: #fff; border-color: #2563eb; &:disabled { opacity: 0.6; } } .dd-retry-error { margin-top: 4px; color: #b42318; font-size: 12px; font-weight: 600; max-width: 240px; } .dd-badge { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; white-space: nowrap; } .dd-badge--pending { background: #fef3c7; color: #92400e; } .pg-empty-inline { color: #94a3b8; font-size: 12.5px; font-style: italic; } .dd-badge--failed { background: #fee2e2; color: #b42318; } .dd-badge--posted { background: #dcfce7; color: #166534; } .dd-badge--partial { background: #dbeafe; color: #1e40af; } /* ─── Summary stat cards ─── */ .dd-summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin-bottom: 16px; } .dd-stat-card { background: #fff; border: 1px solid #e8ecf0; border-radius: 10px; padding: 12px 14px; border-left: 3px solid #94a3b8; &--forfeited { border-left-color: #7c3aed; } } .dd-stat-label { font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; color: #64748b; } .dd-stat-value { font-size: 22px; font-weight: 700; color: #0f172a; margin-top: 4px; font-variant-numeric: tabular-nums; } .dd-stat-sub { font-size: 11.5px; color: #94a3b8; margin-top: 2px; } /* ─── Lock status filter buttons ─── */ .dd-filter-group { display: flex; gap: 6px; } .dd-filter-btn { border: 1px solid #e2e8f0; background: #fff; color: #475569; font-size: 12.5px; font-weight: 600; padding: 6px 12px; border-radius: 999px; cursor: pointer; transition: all 0.15s ease; &:hover { border-color: #94a3b8; } &--active { background: #1e293b; border-color: #1e293b; color: #fff; } } /* Which declaration a lock belongs to. The financial year leads because that is how a member asks for it ("my 2026-27 dividend"); the product and exact period sit under it for the clerk who needs to be certain, without crowding the row. */ .dd-dividend-year { font-weight: 600; font-size: 13px; color: #1e293b; white-space: nowrap; } .dd-dividend-period { font-size: 11.5px; color: #64748b; white-space: nowrap; } /* Financial-year chips. Sits below the status chips as a second, narrower axis over the same list — status is fetched from the server, year filters what came back. */ .dd-year-filter { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 0 16px 12px; &__label { font-size: 12px; font-weight: 600; color: #64748b; text-transform: uppercase; letter-spacing: 0.03em; } &__total { margin-left: auto; font-size: 12.5px; color: #475569; font-variant-numeric: tabular-nums; white-space: nowrap; } } /* The DD number just drawn. Approving refreshes the pending list, so the row it came from is gone by the time the clerk reads it — and that number is what goes on the counterfoil. */ .dd-issued-banner { display: flex; align-items: center; gap: 12px; margin: 12px 16px 0; padding: 10px 14px; border: 1px solid #86efac; border-radius: 6px; background: #f0fdf4; color: #166534; font-size: 13.5px; &__main { flex: 1; } &__close { border: none; background: none; color: #166534; font-size: 20px; line-height: 1; cursor: pointer; padding: 0 4px; &:hover { color: #14532d; } } } /* One toolbar per table: search on the left where the eye lands first, the row count next to it so a narrowed table says how much it is hiding, and Refresh pushed to the far right. */ .dd-toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 12px 16px; &__count { margin-left: auto; font-size: 12.5px; color: #475569; font-variant-numeric: tabular-nums; white-space: nowrap; } } .dd-search { position: relative; flex: 1 1 260px; max-width: 360px; &__input { width: 100%; padding: 7px 30px 7px 11px; border: 1px solid #cbd5e1; border-radius: 6px; font-size: 13px; color: #0f172a; background: #fff; &::placeholder { color: #94a3b8; } &:focus { outline: none; border-color: #2563eb; box-shadow: 0 0 0 3px rgb(37 99 235 / 12%); } /* The browser's own clear affordance would sit under ours. */ &::-webkit-search-cancel-button { appearance: none; } } /* Only rendered while there is something to clear, so it never reads as a dead control. */ &__clear { position: absolute; top: 50%; right: 6px; transform: translateY(-50%); width: 20px; height: 20px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: #64748b; font-size: 17px; line-height: 1; cursor: pointer; &:hover { background: #e2e8f0; color: #0f172a; } } } /* The share account number under the member's name — the thing a clerk matches against the passbook in front of them, so it has to be readable but must not outweigh the name. */ .dd-account-no { margin-top: 2px; font-size: 11.5px; color: #64748b; font-variant-numeric: tabular-nums; } /* Horizontal tab strip: one list on screen at a time, chosen here. Scrolls rather than wraps on a narrow window, so the strip stays one line and the tab positions a clerk has learned do not move. */ .dd-tabs { display: flex; gap: 4px; margin-bottom: 16px; padding-bottom: 2px; border-bottom: 1px solid #e2e8f0; overflow-x: auto; scrollbar-width: none; &::-webkit-scrollbar { display: none; } } .dd-tab { display: inline-flex; align-items: center; gap: 7px; flex: 0 0 auto; padding: 9px 14px; border: 0; /* The active marker is this underline, so every tab reserves the space for it — otherwise the strip would shift by 2px each time the selection moved. */ border-bottom: 2px solid transparent; background: transparent; font-size: 12.5px; font-weight: 600; color: #64748b; white-space: nowrap; cursor: pointer; &:hover { color: #1e40af; } &--active { color: #1e40af; border-bottom-color: #2563eb; } } .dd-tab__count { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 18px; padding: 0 6px; border-radius: 9999px; background: #f1f5f9; color: #475569; font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; /* A member blocked by an overdue EMI, or a claim waiting on a manager, is work outstanding — coloured so it reads as something to open rather than a neutral tally. */ &--alert { background: #fef3c7; color: #92400e; } } /* The draft number a member's dividend was paid out on. Monospaced-by-figure so a clerk reading it against the counterfoil can compare digit by digit. */ .dd-dd-number { font-size: 12.5px; font-weight: 700; color: #0f172a; font-variant-numeric: tabular-nums; letter-spacing: 0.02em; }