/** * 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/. */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap'); :host { /* Colors — matches denomination-master's palette for visual consistency across /system */ --bg-page: #faf8f4; --bg-card: #fff; --bg-soft: #f2ede0; --border: #ece6d8; --border-strong: #e5e0d6; --text-primary: #1a1a1a; --text-secondary: #5f5c57; --text-muted: #8a867f; --accent-dark: #1a1a1a; --accent-eyebrow: #0f4f3c; --status-active-bg: #e8f3e8; --status-active-text: #1f6f3d; --status-inactive-bg: #f4ede0; --status-inactive-text: #8a6a2e; --r-sm: 8px; --r-md: 10px; --r-lg: 14px; --r-xl: 16px; --r-pill: 999px; display: block; font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: var(--text-primary); -webkit-font-smoothing: antialiased; } .ua-page { position: relative; min-height: 100%; background: var(--bg-page); padding: 36px 40px; overflow-x: clip; } .ua-content { width: 100%; } /* ---------- HERO ---------- */ .hero { margin-bottom: 32px; display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; } .hero-text { min-width: 0; } .hero-add-btn { flex: 0 0 auto; align-self: flex-start; width: auto; height: 38px; margin-top: 4px; padding: 0 16px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; font-family: inherit; font-size: 13px; font-weight: 600; letter-spacing: 0.01em; white-space: nowrap; border: none; border-radius: var(--r-pill); cursor: pointer; color: #fff; background: linear-gradient(135deg, #1f7a4d 0%, #0f4f3c 100%); box-shadow: 0 4px 14px -4px rgb(15 79 60 / 45%); transition: transform 0.15s ease, box-shadow 0.15s ease, filter 0.15s ease; } .hero-add-btn:hover { transform: translateY(-1px); box-shadow: 0 8px 22px -6px rgb(15 79 60 / 55%); filter: brightness(1.06); } .hero-add-btn mat-icon { font-size: 17px; width: 17px; height: 17px; line-height: 17px; } .eyebrow { font-size: 11px; font-weight: 600; letter-spacing: 0.12em; color: var(--accent-eyebrow); margin-bottom: 12px; } .hero-title { font-size: 34px; font-weight: 600; letter-spacing: -0.02em; color: var(--text-primary); margin: 0 0 12px; line-height: 1.1; } .hero-sub { font-size: 15px; color: var(--text-secondary); max-width: 560px; line-height: 1.5; margin: 0; } /* ---------- LOADING / EMPTY ---------- */ .ua-loading, .ua-empty { display: flex; align-items: center; gap: 10px; padding: 40px; color: var(--text-muted); font-size: 14px; background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--r-xl); } /* ---------- TABLE ---------- */ .ua-section { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--r-xl); overflow: hidden; } .ua-table { display: flex; flex-direction: column; } .ua-row { display: grid; grid-template-columns: 90px 2fr 1fr 1fr 130px; align-items: center; gap: 12px; padding: 14px 20px; border-bottom: 1px solid var(--border); &:last-child { border-bottom: none; } &--head { background: var(--bg-soft); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); } } .ua-col { min-width: 0; font-size: 13.5px; color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; &--version { font-weight: 700; font-variant-numeric: tabular-nums; } &--title { font-weight: 500; } &--author, &--date { color: var(--text-secondary); } } .status-pill { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 600; padding: 3px 9px; border-radius: var(--r-pill); line-height: 1.4; } .status-pill.is-active { background: var(--status-active-bg); color: var(--status-active-text); } .status-pill.is-inactive { background: var(--status-inactive-bg); color: var(--status-inactive-text); } .status-dot { width: 6px; height: 6px; border-radius: 50%; background: currentcolor; display: inline-block; flex: 0 0 auto; } /* ---------- DRAWER ---------- */ .drawer-backdrop { position: fixed; inset: 0; background: rgb(26 26 26 / 18%); z-index: 1000; animation: fade-in 0.18s ease; } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } .drawer { position: fixed; top: 0; right: 0; bottom: 0; width: 460px; background: var(--bg-card); border-left: 1px solid var(--border); padding: 32px 28px; box-shadow: -20px 0 40px -20px rgb(0 0 0 / 18%); overflow-y: auto; z-index: 1001; transform: translateX(100%); transition: transform 0.24s cubic-bezier(0.4, 0, 0.2, 1); } .drawer.open { transform: translateX(0); } .drawer-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } .drawer-title { font-size: 18px; font-weight: 600; margin: 0; } .drawer-sub { font-size: 13px; color: var(--text-secondary); margin: 4px 0 0; } .icon-btn { width: 32px; height: 32px; border: 1px solid var(--border); background: var(--bg-page); color: var(--text-secondary); border-radius: var(--r-sm); display: inline-flex; align-items: center; justify-content: center; font-size: 13px; cursor: pointer; padding: 0; transition: background 0.12s ease, color 0.12s ease; } .icon-btn:hover { background: var(--bg-soft); color: var(--text-primary); } .icon-btn mat-icon { font-size: 16px; width: 16px; height: 16px; line-height: 16px; } .drawer-form { display: flex; flex-direction: column; gap: 16px; margin-top: 24px; } .field { display: flex; flex-direction: column; gap: 6px; } .field-label { font-size: 12px; font-weight: 500; color: var(--text-secondary); } .text-input, .text-area { box-sizing: border-box; padding: 0 14px; border: 1px solid var(--border-strong); border-radius: var(--r-md); background: var(--bg-page); font-size: 14px; color: var(--text-primary); font-family: inherit; width: 100%; } .text-input { height: 42px; } .text-area { padding: 12px 14px; resize: vertical; min-height: 160px; line-height: 1.5; } .text-input:focus, .text-area:focus { outline: none; border-color: var(--accent-dark); background: var(--bg-card); } .text-input::placeholder, .text-area::placeholder { color: var(--text-muted); } /* drawer actions */ .drawer-actions { display: flex; gap: 10px; margin-top: 8px; } .btn { flex: 1; height: 42px; padding: 0 18px; border-radius: var(--r-pill); font-size: 14px; font-weight: 500; font-family: inherit; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: none; } .btn-cancel { background: var(--bg-card); border: 1px solid var(--border-strong); color: var(--text-primary); } .btn-save { background: var(--accent-dark); border: 1px solid var(--accent-dark); color: var(--bg-page); } .btn-save:disabled { opacity: 0.45; cursor: not-allowed; } /* ---------- RESPONSIVE ---------- */ @media (width <= 1100px) { .drawer { width: min(460px, 90vw); } } @media (width <= 820px) { .hero { flex-direction: column; } .ua-row { grid-template-columns: 70px 2fr 1fr 110px; } .ua-col--author { display: none; } }