/* =====================================================================
 * SHARED DESIGN SYSTEM — every user-side page reuses these classes so
 * the app looks consistent and per-page <style> blocks stay tiny.
 *
 * Naming convention:  ui-<component> [ui-<component>__<part>]
 * Variables you can override per-page:
 *   --ui-hero-a / --ui-hero-b   → gradient stops for .ui-hero
 *   --ui-accent                 → accent color for .ui-tile / .ui-feed-row
 * ===================================================================== */

:root {
    --ui-body:      #0f172a;
    --ui-muted:     #64748b;
    --ui-border:    #e2e8f0;
    --ui-surface:   #ffffff;
    --ui-radius-lg: 24px;
    --ui-radius-md: 16px;
    --ui-radius-sm: 12px;
    --ui-primary:   var(--brand-primary, #b8ff2e);
}
[data-bs-theme="dark"] {
    --ui-body:    #e2e8f0;
    --ui-muted:   #94a3b8;
    --ui-border:  #1f2937;
    --ui-surface: #111827;
}

/* ---------------------------------------------------------------------
 * .ui-hero — ONE brand look for every page (admin Main App Color).
 * Color variants kept as aliases so old markup still matches brand.
 * ---------------------------------------------------------------------*/
.ui-hero {
    position: relative;
    border-radius: var(--ui-radius-lg);
    padding: 1.35rem 1.35rem 1.15rem;
    color: var(--neon-ink, #fff);
    background: var(--brand-gradient-hero, linear-gradient(135deg, var(--ui-hero-a, #0b1220) 0%, var(--ui-hero-b, #1e293b) 100%));
    overflow: hidden;
    margin-bottom: 1rem;
}
.ui-hero::before {
    content: ""; position: absolute; inset: 0; pointer-events: none;
    background:
        radial-gradient(circle at 90% -10%, rgba(255,255,255,0.22) 0, transparent 45%),
        radial-gradient(circle at -10% 110%, rgba(0,0,0,0.12) 0, transparent 50%);
}
/* Aliases — all map to Main App Color so pages stay consistent */
.ui-hero.ui-hero--green,
.ui-hero.ui-hero--blue,
.ui-hero.ui-hero--amber,
.ui-hero.ui-hero--red,
.ui-hero.ui-hero--purple {
    background: var(--brand-gradient-hero);
    color: var(--neon-ink, #fff);
}
.ui-hero > *          { position: relative; }
.ui-hero .ui-trend-pill {
    background: rgba(255,255,255,0.18);
    color: inherit;
}
.ui-hero .ui-trend-pill.up,
.ui-hero .ui-trend-pill.dn,
.ui-hero .ui-trend-pill.flat {
    background: rgba(255,255,255,0.18);
    color: inherit;
}

.ui-hero__badge {
    display: inline-flex; align-items: center; gap: 0.4rem;
    padding: 0.28rem 0.75rem; border-radius: 999px;
    background: rgba(255,255,255,0.15);
    font-size: 0.7rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.06em;
}
.ui-hero__eyebrow { font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; font-weight: 700; opacity: 0.75; margin-bottom: 0.4rem; }
.ui-hero__title   { font-size: 1.15rem; font-weight: 800; margin: 0; }
.ui-hero__label   { font-size: 0.78rem; opacity: 0.85; margin-top: 0.7rem; }
.ui-hero__amount  { font-size: 2.1rem; font-weight: 800; letter-spacing: -0.02em; margin-top: 0.15rem; line-height: 1.15; }
.ui-hero__sub     { font-size: 0.78rem; opacity: 0.78; margin-top: 0.35rem; }
.ui-hero__meta    { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin-top: 0.75rem; font-size: 0.78rem; }
.ui-hero__actions { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.9rem; }
.ui-hero__actions .btn { border-radius: 999px; padding: 0.4rem 0.9rem; font-size: 0.8rem; font-weight: 600; }
.ui-hero__aside {
    position: absolute; top: 0.9rem; right: 0.9rem;
    display: inline-flex; align-items: center; gap: 0.35rem;
    padding: 0.25rem 0.7rem; border-radius: 999px;
    background: rgba(255,255,255,0.12); font-size: 0.7rem; font-weight: 700;
}
.ui-hero__back {
    position: absolute; top: 0.9rem; right: 0.9rem;
    color: #fff; text-decoration: none;
    background: rgba(255,255,255,0.12);
    border-radius: 999px;
    padding: 0.32rem 0.75rem;
    font-size: 0.78rem; font-weight: 600;
    display: inline-flex; align-items: center; gap: 0.3rem;
}

@media (max-width: 480px) {
    .ui-hero__amount { font-size: 1.75rem; }
    .ui-hero__title  { font-size: 1rem; }
}

/* ---------------------------------------------------------------------
 * .ui-trend-pill — coloured up/down/flat badge (used inside hero + tiles)
 * ---------------------------------------------------------------------*/
.ui-trend-pill {
    display: inline-flex; align-items: center; gap: 0.3rem;
    padding: 0.25rem 0.65rem; border-radius: 999px;
    font-weight: 700; font-size: 0.75rem;
}
.ui-trend-pill.up   { background: rgba(34,197,94,0.18); color: #86efac; }
.ui-trend-pill.dn   { background: rgba(239,68,68,0.2);  color: #fca5a5; }
.ui-trend-pill.flat { background: rgba(255,255,255,0.15); color: #e2e8f0; }
/* Non-hero (on light bg) variant */
.ui-trend-pill--light.up   { background: rgba(34,197,94,0.14); color: #16a34a; }
.ui-trend-pill--light.dn   { background: rgba(239,68,68,0.14); color: #dc2626; }
.ui-trend-pill--light.flat { background: rgba(100,116,139,0.14); color: #64748b; }

/* ---------------------------------------------------------------------
 * .ui-tile-grid + .ui-tile — colored stat tile grid (dashboards & sums)
 * Set --ui-accent on each tile.
 * ---------------------------------------------------------------------*/
.ui-tile-grid {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.7rem;
    margin-bottom: 1rem;
}
@media (min-width: 768px)  { .ui-tile-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1200px) { .ui-tile-grid { grid-template-columns: repeat(4, 1fr); } }
.ui-tile-grid.cols-2   { grid-template-columns: repeat(2, 1fr) !important; }
.ui-tile-grid.cols-3   { grid-template-columns: repeat(2, 1fr); }
@media (min-width: 768px) { .ui-tile-grid.cols-3 { grid-template-columns: repeat(3, 1fr) !important; } }
.ui-tile-grid.cols-5 { grid-template-columns: repeat(2, 1fr); }
@media (min-width: 768px)  { .ui-tile-grid.cols-5 { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1200px) { .ui-tile-grid.cols-5 { grid-template-columns: repeat(5, 1fr) !important; } }

.ui-tile {
    position: relative; overflow: hidden;
    background: var(--ui-surface);
    border: 1px solid var(--ui-border);
    border-radius: 20px;
    padding: 0.9rem;
    color: inherit;
    text-decoration: none;
    display: block;
    transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease;
}
.ui-tile:hover { transform: translateY(-2px); box-shadow: 0 12px 24px rgba(15,23,42,0.08); }
.ui-tile::before {
    content: ""; position: absolute; inset: 0; opacity: 0.06;
    background: radial-gradient(circle at 100% 0%, var(--ui-accent, #64748b) 0, transparent 55%);
    pointer-events: none;
}
.ui-tile__icon {
    width: 42px; height: 42px; border-radius: 14px;
    display: grid; place-items: center;
    background: color-mix(in srgb, var(--ui-accent, #64748b) 15%, transparent);
    color: var(--ui-accent, #64748b);
    font-size: 1.1rem;
}
.ui-tile__label  { margin-top: 0.55rem; font-weight: 700; font-size: 0.78rem; color: var(--ui-muted); }
.ui-tile__amount { font-weight: 800; font-size: 1.1rem; margin-top: 0.15rem; color: var(--ui-body); word-break: break-word; }
.ui-tile__footer { display: flex; justify-content: space-between; align-items: center; margin-top: 0.55rem; font-size: 0.7rem; color: var(--ui-muted); gap: 0.5rem; }
.ui-tile__bar {
    margin-top: 0.5rem; height: 4px; border-radius: 999px;
    background: color-mix(in srgb, var(--ui-accent, #64748b) 12%, transparent);
    overflow: hidden;
}
.ui-tile__bar > span { display: block; height: 100%; background: var(--ui-accent, #64748b); border-radius: 999px; width: var(--bar-w, 0%); transition: width .4s ease; }

/* ---------------------------------------------------------------------
 * .ui-chip-bar + .ui-chip — filter chips row (scrollable on mobile)
 * ---------------------------------------------------------------------*/
.ui-chip-bar {
    display: flex; gap: 0.35rem;
    overflow-x: auto; scrollbar-width: none;
    margin-bottom: 0.9rem; padding-bottom: 0.15rem;
}
.ui-chip-bar::-webkit-scrollbar { display: none; }
.ui-chip {
    display: inline-flex; align-items: center; gap: 0.35rem;
    padding: 0.42rem 0.9rem; border-radius: 999px;
    background: var(--ui-surface); border: 1px solid var(--ui-border);
    color: var(--ui-body); text-decoration: none;
    font-size: 0.78rem; font-weight: 700; white-space: nowrap;
    cursor: pointer;
}
.ui-chip .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ui-chip-color, #64748b); }
.ui-chip.active {
    background: var(--brand-primary, var(--ui-primary));
    color: var(--neon-ink, #0a1400);
    border-color: transparent;
}
.ui-chip.active .dot { background: var(--neon-ink, #0a1400); }

/* ---------------------------------------------------------------------
 * .ui-section-card — the standard content card
 * ---------------------------------------------------------------------*/
.ui-section-card {
    background: var(--ui-surface);
    border: 1px solid var(--ui-border);
    border-radius: var(--ui-radius-lg);
    padding: 1rem 1.1rem;
    margin-bottom: 1rem;
}
.ui-section-card__head {
    display: flex; justify-content: space-between; align-items: center;
    margin-bottom: 0.8rem; gap: 0.5rem;
}
.ui-section-card__title { font-weight: 800; font-size: 0.95rem; margin: 0; display: inline-flex; align-items: center; gap: 0.35rem; }
.ui-section-card__badge {
    background: color-mix(in srgb, currentColor 10%, transparent);
    color: var(--ui-muted);
    font-size: 0.7rem; font-weight: 700;
    padding: 0.15rem 0.6rem; border-radius: 999px;
}

/* ---------------------------------------------------------------------
 * .ui-feed / .ui-feed-row — timeline-style list rows
 * ---------------------------------------------------------------------*/
.ui-feed { list-style: none; margin: 0; padding: 0; }
.ui-feed-row {
    display: grid;
    grid-template-columns: 44px 1fr auto;
    align-items: center; gap: 0.9rem;
    padding: 0.75rem 0.15rem;
    border-bottom: 1px solid var(--ui-border);
    color: inherit; text-decoration: none;
}
.ui-feed-row:last-child { border-bottom: 0; }
.ui-feed-row__icon {
    width: 44px; height: 44px; border-radius: 14px;
    display: grid; place-items: center;
    background: color-mix(in srgb, var(--ui-accent, #64748b) 15%, transparent);
    color: var(--ui-accent, #64748b);
    font-size: 1.05rem;
}
.ui-feed-row__icon--solid {
    background: var(--ui-accent, #64748b);
    color: #fff;
}
.ui-feed-row__title { font-weight: 700; font-size: 0.9rem; color: var(--ui-body); }
.ui-feed-row__sub {
    font-size: 0.72rem; color: var(--ui-muted); margin-top: 0.1rem;
    display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center;
}
.ui-feed-row__sub .tag {
    background: color-mix(in srgb, var(--ui-accent, #64748b) 12%, transparent);
    color: var(--ui-accent, #64748b);
    border-radius: 999px; padding: 0.05rem 0.5rem;
    font-weight: 700; font-size: 0.65rem;
}
.ui-feed-row__amount { font-weight: 800; font-size: 1rem; text-align: right; white-space: nowrap; }
.ui-feed-row__amount.credit { color: #16a34a; }
.ui-feed-row__amount.debit  { color: #dc2626; }
.ui-feed-row__amount .sub { display: block; font-size: 0.7rem; color: var(--ui-muted); font-weight: 500; }

/* ---------------------------------------------------------------------
 * .ui-empty — friendly empty state (centered icon + text + optional CTA)
 * ---------------------------------------------------------------------*/
.ui-empty { text-align: center; padding: 2.5rem 1rem; color: var(--ui-muted); }
.ui-empty > i { font-size: 2.8rem; opacity: 0.4; display: block; margin-bottom: 0.4rem; }
.ui-empty__title { font-weight: 700; color: var(--ui-body); margin-top: 0.25rem; }
.ui-empty__sub   { font-size: 0.85rem; }
.ui-empty__cta   { margin-top: 1rem; }

/* ---------------------------------------------------------------------
 * .ui-avatar — circular initials avatar
 * ---------------------------------------------------------------------*/
.ui-avatar {
    display: inline-grid; place-items: center;
    width: 40px; height: 40px; border-radius: 50%;
    background: color-mix(in srgb, var(--ui-accent, #64748b) 18%, transparent);
    color: var(--ui-accent, #64748b);
    font-weight: 800; letter-spacing: 0.02em;
}
.ui-avatar.sm { width: 28px; height: 28px; font-size: 0.7rem; }
.ui-avatar.xs { width: 20px; height: 20px; font-size: 0.62rem; }

/* ---------------------------------------------------------------------
 * .ui-pnl-strip — thin strip showing gain/loss inside a card
 * ---------------------------------------------------------------------*/
.ui-pnl-strip {
    margin-top: 0.9rem; padding: 0.7rem 0.9rem; border-radius: 12px;
    display: flex; justify-content: space-between; align-items: center;
    font-weight: 800;
}
.ui-pnl-strip.up { background: rgba(34,197,94,0.12); color: #16a34a; }
.ui-pnl-strip.dn { background: rgba(239,68,68,0.12); color: #dc2626; }
.ui-pnl-strip.flat { background: rgba(100,116,139,0.12); color: #64748b; }

/* ---------------------------------------------------------------------
 * .ui-actions — 4-quick-action grid (used on dashboard-style pages)
 * ---------------------------------------------------------------------*/
.ui-actions {
    display: grid; grid-template-columns: repeat(4, 1fr);
    gap: 0.5rem; margin: 0.75rem 0 1rem;
}
.ui-actions a {
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.3rem;
    padding: 0.85rem 0.4rem;
    background: var(--ui-surface); border: 1px solid var(--ui-border);
    border-radius: 18px;
    color: var(--ui-body); text-decoration: none;
    font-size: 0.72rem; font-weight: 700;
    transition: transform .12s ease, border-color .12s ease;
}
.ui-actions a:hover { transform: translateY(-2px); border-color: var(--ui-primary); }
.ui-actions a i {
    width: 40px; height: 40px; border-radius: 12px;
    display: grid; place-items: center;
    background: color-mix(in srgb, var(--ui-primary) 12%, transparent);
    color: var(--ui-body);
    font-size: 1.05rem;
}

/* ---------------------------------------------------------------------
 * .ui-form-card — nice form wrapper (labels + rounded inputs)
 * ---------------------------------------------------------------------*/
.ui-form-card .form-label { font-size: 0.78rem; font-weight: 700; color: var(--ui-muted); }
.ui-form-card .form-control,
.ui-form-card .form-select {
    border-radius: 14px; padding: 0.7rem 0.9rem;
    border-color: var(--ui-border);
}
.ui-form-card .btn { border-radius: 14px; font-weight: 700; }

/* ---------------------------------------------------------------------
 * .ui-status-badge — pill badges for statuses (pending/approved/rejected)
 * ---------------------------------------------------------------------*/
.ui-status-badge {
    display: inline-flex; align-items: center; gap: 0.3rem;
    padding: 0.2rem 0.6rem; border-radius: 999px;
    font-size: 0.7rem; font-weight: 700;
}
.ui-status-badge.pending  { background: rgba(245,158,11,0.15); color: #b45309; }
.ui-status-badge.approved,
.ui-status-badge.active,
.ui-status-badge.completed,
.ui-status-badge.success  { background: rgba(34,197,94,0.15); color: #15803d; }
.ui-status-badge.rejected,
.ui-status-badge.failed,
.ui-status-badge.banned,
.ui-status-badge.error    { background: rgba(239,68,68,0.15); color: #b91c1c; }
.ui-status-badge.inactive,
.ui-status-badge.expired  { background: rgba(100,116,139,0.15); color: #475569; }
.ui-status-badge.info     { background: rgba(59,130,246,0.15); color: #1d4ed8; }
