/* ═══════════════════════════════════════════════════════════════════════════
   web/accounting.css
   MarketPulse — Accounting Module Styles
   Add to <head>: <link rel="stylesheet" href="accounting.css">
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Colour tokens ─────────────────────────────────────────────────────────── */
/* Deliberately NOT redefining --bg/--panel/--panel-2/--border/--text/
   --muted/--green/--red/--accent here — this file used to hardcode its
   own dark-only versions of all of these, completely disconnected from
   style.css's actual theme system (light/dark/black, user-selectable
   under Settings > Appearance). That mismatch was the real cause of
   the Accounting screen looking broken/unreadable, not a stuck overlay.
   Every rule below now references the SAME --bg/--panel/etc. variables
   style.css defines at :root, so Accounting automatically follows
   whichever theme is actually active, exactly like every other screen. */
:root {
  --acct-real:      #1a6b3a;
  --acct-real-lt:   #22c55e;
  --acct-paper:     #1a4b8c;
  --acct-paper-lt:  #60a5fa;
  --acct-aiml:      #6a1a8c;
  --acct-aiml-lt:   #c084fc;
  --acct-radius:    8px;
  --acct-radius-sm: 4px;
}

/* ── Sticky header wrapper (pill-nav + KPI bar + sub-tab pills) ──────────────── */
.acct-sticky-head {
  position:   sticky;
  top:        0;
  z-index:    6;
  background: var(--panel);
}

/* ── Generic pill-nav (quick-jump strip) ──────────────────────────────────────
   Collapsed (default): one row, horizontally scrollable, overflow hidden.
   Expanded: wraps onto as many rows as needed so every pill is visible.        */
.acct-pill-nav {
  display:       flex;
  align-items:   center;
  gap:           6px;
  padding:       6px 10px;
  background:    var(--panel);
  border-bottom: 1px solid var(--border);
}

.acct-pill-scroll {
  display:         flex;
  flex-wrap:       nowrap;
  gap:             6px;
  overflow-x:      auto;
  scrollbar-width: none;
  scroll-behavior: smooth;
  flex: 1;
  min-width: 0;
}
.acct-pill-scroll::-webkit-scrollbar { display: none; }

.acct-pill-nav.expanded .acct-pill-scroll {
  flex-wrap:  wrap;
  overflow-x: visible;
}

.acct-pill {
  flex-shrink:   0;
  padding:       6px 13px;
  border-radius: 20px;
  border:        1px solid var(--border);
  background:    var(--panel-2);
  color:         var(--muted);
  font-size:     0.8rem;
  cursor:        pointer;
  white-space:   nowrap;
  transition:    all 0.15s;
}
.acct-pill:hover { color: var(--text); border-color: var(--accent, #3ddc97); }

.acct-pill-toggle {
  flex-shrink:   0;
  padding:       6px 10px;
  border-radius: 20px;
  border:        1px solid var(--border);
  background:    var(--panel-2);
  color:         var(--muted);
  cursor:        pointer;
  font-size:     0.9rem;
  display:       none;              /* shown via JS only when content overflows */
}
.acct-pill-toggle:hover { color: var(--text); }
.acct-pill-nav.has-overflow .acct-pill-toggle { display: inline-block; }
.acct-pill-nav.expanded .acct-pill-toggle { background: var(--accent, #3ddc97); color: var(--panel, #06231a); border-color: var(--accent, #3ddc97); }

/* Brief highlight flash when a KPI card is jumped to via its pill */
.acct-kpi-card.pill-jump-flash,
.acct-panel.pill-jump-flash {
  animation: acctPillFlash 1s ease-out;
}
@keyframes acctPillFlash {
  0%   { box-shadow: 0 0 0 2px var(--accent, #3ddc97); }
  100% { box-shadow: 0 0 0 0 transparent; }
}

/* ── KPI bar ───────────────────────────────────────────────────────────────── */
.acct-kpi-bar {
  display:         flex;
  align-items:     center;
  gap:             10px;
  padding:         14px 18px;
  background:      var(--panel);
  border-bottom:   1px solid var(--border);
  flex-wrap:       nowrap;
  overflow-x:      auto;
  scrollbar-width: none;
}
.acct-kpi-bar::-webkit-scrollbar { display: none; }

.acct-kpi-card {
  display:        flex;
  flex-direction: column;
  gap:            2px;
  padding:        8px 14px;
  background:     var(--panel-2);
  border:         1px solid var(--border);
  border-radius:  var(--acct-radius-sm);
  min-width:      120px;
  flex-shrink:    0;
  scroll-margin-left: 10px;
}

.kpi-label {
  font-size:   0.68rem;
  color:       var(--muted);
  white-space: nowrap;
}

.kpi-value {
  font-size:   1.05rem;
  font-weight: 700;
  color:       var(--text);
}
.kpi-value.pos { color: var(--green); }
.kpi-value.neg { color: var(--red); }

.acct-kpi-actions {
  margin-left: auto;
  display:     flex;
  gap:         8px;
  align-items: center;
  flex-shrink: 0;
}

.btn-export {
  padding:       6px 12px;
  border:        1px solid var(--border);
  border-radius: var(--acct-radius-sm);
  background:    var(--panel-2);
  color:         var(--text);
  font-size:     0.78rem;
  cursor:        pointer;
  text-decoration: none;
  white-space:   nowrap;
}
.btn-export:hover { background: var(--accent); border-color: var(--accent); }

.btn-icon {
  background: none;
  border:     none;
  color:      var(--muted);
  cursor:     pointer;
  font-size:  1rem;
  padding:    4px 6px;
  border-radius: var(--acct-radius-sm);
}
.btn-icon:hover { color: var(--text); background: var(--panel-2); }

/* ── Sub-tab strip ─────────────────────────────────────────────────────────── *
 * Sub-tabs now reuse the generic .acct-pill styling above; this just adds     *
 * the "active" state on top of it and a touch more horizontal padding.       */
.acct-tab {
  padding: 7px 14px;
}
.acct-tab.active,
.acct-tab:hover {
  background: var(--accent, #3ddc97);
  color: var(--panel, #06231a);
  border-color: var(--accent, #3ddc97);
  font-weight: 700;
}

/* ── Panel / filter row ────────────────────────────────────────────────────── */
.acct-panel {
  padding: 18px;
}

.acct-card-block {
  background:    var(--panel-2, rgba(255,255,255,0.03));
  border:        1px solid var(--border);
  border-radius: var(--acct-radius-sm, 8px);
  padding:       14px;
  margin-bottom: 16px;
}
.acct-card-block h3 {
  margin: 0 0 10px; font-size: 0.85rem; display: flex; align-items: baseline; gap: 8px;
}
.acct-perf-stats {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 8px 14px; margin-top: 12px;
}
.acct-perf-stat {
  display: flex; flex-direction: column; gap: 2px; font-size: 0.85rem;
}
.acct-perf-stat .muted { font-size: 0.72rem; }

.acct-filter-row {
  display:     flex;
  flex-wrap:   wrap;
  gap:         10px;
  align-items: center;
  margin-bottom: 14px;
}

.acct-filter-row label {
  display:        flex;
  flex-direction: column;
  gap:            3px;
  font-size:      0.72rem;
  color:          var(--muted);
}

.acct-filter-row input,
.acct-filter-row select {
  background:    var(--panel-2);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius-sm);
  color:         var(--text);
  padding:       5px 9px;
  font-size:     0.82rem;
}

.acct-filter-row button {
  padding:       6px 14px;
  background:    var(--accent);
  border:        none;
  border-radius: var(--acct-radius-sm);
  color:         #fff;
  cursor:        pointer;
  font-size:     0.82rem;
}
.acct-filter-row button:hover { opacity: 0.85; }

.acct-section-head {
  font-size:     0.78rem;
  font-weight:   700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color:         var(--muted);
  margin:        22px 0 10px;
  border-bottom: 1px solid var(--border);
  padding-bottom: 5px;
}

/* ── Tables ────────────────────────────────────────────────────────────────── */
.acct-table-wrap {
  max-height: 420px;
  overflow-y: auto;
  overflow-x: auto;
  border: 1px solid var(--border);
  border-radius: 8px;
}
.acct-table-wrap .acct-table th {
  position: sticky;
  top: 0;
  z-index: 1;
}

.acct-table {
  width:           100%;
  border-collapse: collapse;
  font-size:       0.82rem;
}

.acct-table th {
  text-align:     left;
  padding:        8px 10px;
  background:     var(--panel-2);
  color:          var(--muted);
  font-weight:    600;
  font-size:      0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  border-bottom:  1px solid var(--border);
  white-space:    nowrap;
}
.acct-table th.num { text-align: right; }

.acct-table td {
  padding:    7px 10px;
  border-bottom: 1px solid var(--border);
  color:      var(--text);
  vertical-align: middle;
}
.acct-table td.num   { text-align: right; font-variant-numeric: tabular-nums; }
.acct-table td.pos   { color: var(--green); }
.acct-table td.neg   { color: var(--red); }

.acct-table tr:hover td { background: var(--panel-2); }

.acct-table tr.pnl-bold td { font-weight: 700; }
.acct-table tr.tb-group-header td {
  background:    var(--panel);
  color:         var(--muted);
  font-size:     0.70rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding:       5px 10px;
}
.acct-table td.indent { padding-left: 22px; }
.acct-table tr.zero-balance td { opacity: 0.45; }

.empty-cell { text-align: center; color: var(--muted); padding: 24px !important; }
.empty-cell.err { color: var(--red); }

/* ── P&L comparison grid ──────────────────────────────────────────────────── */
.pnl-comparison-grid {
  display:     grid;
  grid-template-columns: repeat(3, 1fr);
  gap:         14px;
  margin-bottom: 24px;
}

@media (max-width: 900px) {
  .pnl-comparison-grid { grid-template-columns: 1fr; }
}

.pnl-col {
  background:    var(--panel-2);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius);
  overflow:      hidden;
}

.pnl-col-header {
  padding:       10px 12px;
  border-bottom: 3px solid;
  display:       flex;
  align-items:   center;
  gap:           8px;
}

.pnl-mini-table {
  width:           100%;
  border-collapse: collapse;
  font-size:       0.82rem;
}
.pnl-mini-table td { padding: 5px 12px; border-bottom: 1px solid var(--border); }
.pnl-mini-table td.num { text-align: right; font-variant-numeric: tabular-nums; }
.pnl-mini-table tr.pnl-bold td { font-weight: 700; }
.pnl-mini-table hr { border: none; border-top: 1px solid var(--border); margin: 2px 0; }

/* ── Source / type badges ──────────────────────────────────────────────────── */
.src-badge {
  display:       inline-block;
  padding:       2px 7px;
  border-radius: 10px;
  font-size:     0.68rem;
  font-weight:   700;
  letter-spacing: 0.04em;
}
.src-green  { background: #064e2b; color: #22c55e; }
.src-blue   { background: #1e3a5f; color: #60a5fa; }
.src-purple { background: #3b1a5f; color: #c084fc; }
.src-teal   { background: #0f3a3a; color: #2dd4bf; }
.src-orange { background: #4a2210; color: #fb923c; }
.src-cyan   { background: #0c2e3a; color: #22d3ee; }
.src-grey   { background: #2a2f3a; color: #94a3b8; }

.badge        { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 0.75rem; font-weight: 700; }
.badge-green  { background: #064e2b; color: #22c55e; }
.badge-red    { background: #4a0f0f; color: #ef4444; }
.badge-blue   { background: #1e3a5f; color: #60a5fa; }

.acct-type-badge {
  display:    inline-block;
  padding:    1px 5px;
  border:     1px solid var(--border);
  border-radius: 3px;
  font-size:  0.68rem;
  color:      var(--muted);
}

.dc-badge      { font-weight: 700; padding: 1px 6px; border-radius: 3px; font-size: 0.78rem; }
.dc-DR         { color: #fb923c; background: #4a2210; }
.dc-CR         { color: #22c55e; background: #064e2b; }

/* ── Trial Balance totals ──────────────────────────────────────────────────── */
.tb-totals {
  display:    flex;
  gap:        24px;
  padding:    10px 0;
  font-size:  0.85rem;
  font-weight: 600;
  border-top: 2px solid var(--border);
  margin-top: 4px;
}
.tb-totals .pos { color: var(--green); }
.tb-totals .neg { color: var(--red); }

/* ── Pagination ────────────────────────────────────────────────────────────── */
.acct-pagination {
  display:     flex;
  align-items: center;
  gap:         12px;
  padding:     12px 0;
  font-size:   0.82rem;
  color:       var(--muted);
}
.acct-pagination button {
  padding:       5px 12px;
  background:    var(--panel-2);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius-sm);
  color:         var(--text);
  cursor:        pointer;
}
.acct-pagination button:hover { border-color: var(--accent); }
.pager-page { font-weight: 600; color: var(--text); }

/* ── Journal entries ───────────────────────────────────────────────────────── */
.je-desc   { max-width: 340px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.memo-cell { color: var(--muted); font-size: 0.78rem; }

/* ── Capital forms ─────────────────────────────────────────────────────────── */
.capital-grid {
  display:               grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap:                   16px;
}

.capital-card {
  background:    var(--panel-2);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius);
  padding:       18px;
  display:       flex;
  flex-direction: column;
  gap:           10px;
}
.capital-card-wide { grid-column: span 2; }

.capital-card-title {
  font-size:   0.9rem;
  font-weight: 700;
  color:       var(--text);
  margin-bottom: 4px;
}

.capital-card label {
  display:        flex;
  flex-direction: column;
  gap:            4px;
  font-size:      0.75rem;
  color:          var(--muted);
}

.capital-card input,
.capital-card select {
  background:    var(--panel);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius-sm);
  color:         var(--text);
  padding:       6px 10px;
  font-size:     0.85rem;
  width:         100%;
  box-sizing:    border-box;
}

.capital-card button.btn-green  { background: #1a6b3a; color: #fff; }
.capital-card button.btn-red    { background: #7f1d1d; color: #fff; }
.capital-card button.btn-blue   { background: #1e3a5f; color: #fff; }
.capital-card button.btn-purple { background: #3b1a5f; color: #fff; }

.capital-card button {
  padding:       8px 14px;
  border:        none;
  border-radius: var(--acct-radius-sm);
  cursor:        pointer;
  font-size:     0.85rem;
  font-weight:   600;
  transition:    opacity 0.15s;
}
.capital-card button:hover { opacity: 0.8; }

.card-hint {
  font-size: 0.75rem;
  color:     var(--muted);
  margin:    0;
  line-height: 1.5;
}

/* Manual JE lines */
.je-line {
  display:     flex;
  gap:         6px;
  align-items: center;
  margin-bottom: 6px;
}
.je-line input, .je-line select {
  background:    var(--panel);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius-sm);
  color:         var(--text);
  padding:       5px 8px;
  font-size:     0.8rem;
}
.je-account { flex: 2; }
.je-dc      { flex: 0 0 60px; }
.je-amount  { flex: 1; }
.je-memo    { flex: 2; }
.je-line button { background: #7f1d1d; color: #fff; border: none; border-radius: 3px;
                  cursor: pointer; padding: 4px 8px; font-size: 0.8rem; }

.je-balance-check {
  font-size:   0.82rem;
  font-weight: 600;
  padding:     6px 0;
}
.je-balance-check.pos { color: var(--green); }
.je-balance-check.neg { color: var(--red); }

.form-msg {
  font-size:   0.8rem;
  padding:     4px 0;
  min-height:  18px;
}
.form-msg.ok  { color: var(--green); }
.form-msg.err { color: var(--red); }

/* ── Tax tab ───────────────────────────────────────────────────────────────── */
.tax-result-box {
  margin-top: 12px;
}

.tax-grid {
  display:               grid;
  grid-template-columns: 1fr 1fr auto;
  gap:                   16px;
  align-items:           start;
}
@media (max-width: 800px) { .tax-grid { grid-template-columns: 1fr; } }

.tax-section {
  background:    var(--panel-2);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius);
  padding:       14px;
}

.tax-section-title {
  font-size:   0.78rem;
  font-weight: 700;
  color:       var(--muted);
  margin-bottom: 10px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.tax-total {
  background:    var(--panel-2);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius);
  padding:       18px;
  display:       flex;
  flex-direction: column;
  gap:           8px;
  align-items:   center;
  justify-content: center;
  text-align:    center;
  font-weight:   700;
  font-size:     0.9rem;
}
.tax-period {
  font-size:   0.72rem;
  color:       var(--muted);
  font-weight: 400;
}

.tax-disclaimer {
  margin-top: 16px;
  font-size:  0.75rem;
  color:      var(--muted);
  background: #2a2010;
  border:     1px solid #4a3010;
  border-radius: var(--acct-radius-sm);
  padding:    10px 14px;
}

/* ── Modal ─────────────────────────────────────────────────────────────────── */
.modal-overlay {
  position:        fixed;
  inset:           0;
  background:      rgba(0,0,0,0.65);
  display:         flex;
  align-items:     center;
  justify-content: center;
  z-index:         9999;
}

.modal-box {
  background:    var(--panel);
  border:        1px solid var(--border);
  border-radius: var(--acct-radius);
  padding:       0;
  width:         min(700px, 95vw);
  max-height:    80vh;
  overflow-y:    auto;
  display:       flex;
  flex-direction: column;
}

.modal-header {
  display:         flex;
  justify-content: space-between;
  align-items:     center;
  padding:         14px 18px;
  border-bottom:   1px solid var(--border);
  font-weight:     700;
  font-size:       0.95rem;
  position:        sticky;
  top:             0;
  background:      var(--panel);
  z-index:         1;
}

.modal-close {
  background: none;
  border:     none;
  color:      var(--muted);
  cursor:     pointer;
  font-size:  1.1rem;
}
.modal-close:hover { color: var(--text); }

.modal-meta {
  padding:   8px 18px;
  font-size: 0.8rem;
  color:     var(--muted);
}

.je-detail-table { margin: 0 18px 14px; width: calc(100% - 36px); }

.je-modal-totals {
  display:     flex;
  gap:         24px;
  padding:     10px 18px;
  font-size:   0.85rem;
  font-weight: 600;
  border-top:  1px solid var(--border);
  position:    sticky;
  bottom:      0;
  background:  var(--panel);
}
.je-modal-totals .pos { color: var(--green); }
.je-modal-totals .neg { color: var(--red); }

/* ── Utility ───────────────────────────────────────────────────────────────── */
.pos { color: var(--green); }
.neg { color: var(--red); }
.num { text-align: right; font-variant-numeric: tabular-nums; }

/* ── Shared status-chip component (design plan §1.2) ────────────────────────
   Generic, reusable across every module — not tied to Foreign Advice's own
   fa-chip (kept as-is to avoid touching already-shipped, tested code).
   New work in any module should reach for this one. ─────────────────────── */
.status-chip {
  display: inline-flex; align-items: center; gap: 5px;
  border-radius: 999px; padding: 2px 10px;
  font-size: 0.74em; font-weight: 600; white-space: nowrap; line-height: 1.6;
}
.status-chip .status-chip-dot {
  width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex: none;
}
.status-chip.status-chip-green   { background: var(--fa-green-soft, rgba(34,197,94,0.12));  color: var(--fa-green, #22c55e); }
.status-chip.status-chip-red     { background: var(--fa-red-soft, rgba(239,68,68,0.12));    color: var(--fa-red, #ef4444); }
.status-chip.status-chip-gold    { background: var(--fa-gold-soft, rgba(246,166,35,0.12));  color: var(--fa-gold, #f6a623); }
.status-chip.status-chip-neutral { background: rgba(136,146,164,0.14); color: var(--fa-neutral, #8892a4); }

/* ── Dashboard: compact recent-activity list (plan §2.1) — a short list,
   not a full table, for "last 5 trades/signals" ──────────────────────────── */
.adash-recent-list { display: flex; flex-direction: column; }
.adash-recent-row {
  display: flex; align-items: center; gap: 10px; padding: 9px 0;
  border-bottom: 1px solid var(--border);
}
.adash-recent-row:last-child { border-bottom: none; }
.adash-recent-row .adash-recent-symbol { font-weight: 600; min-width: 84px; }
.adash-recent-row .adash-recent-time { color: var(--muted); font-size: 0.78em; flex: 1; }
.adash-recent-row .adash-recent-pnl { font-weight: 600; font-variant-numeric: tabular-nums; }

/* ═══════════════════════════════════════════════════════════════════════════
   Foreign Advice — module-scoped design system
   Deliberately namespaced (fa-*) rather than redefining global .pos/.neg/
   .card, etc. — this app's existing color tokens are inconsistent across
   files (style.css defines .pos as both accent-coupled AND a hardcoded
   #3ddc97 later in the cascade; accounting.css redefines it again as
   #22c55e, which is the one that actually wins today). Rather than change
   what every other already-shipped module currently renders, Foreign
   Advice gets its own fixed, non-accent-coupled semantic tokens — gain/
   loss color here can never accidentally shift because someone picked a
   red or orange accent theme in Settings → Appearance.
   ═══════════════════════════════════════════════════════════════════════════ */
:root {
  --fa-green:      #22c55e;
  --fa-green-soft: rgba(34,197,94,0.12);
  --fa-red:        #ef4444;
  --fa-red-soft:   rgba(239,68,68,0.12);
  --fa-gold:       #f6a623;
  --fa-gold-soft:  rgba(246,166,35,0.12);
  --fa-neutral:    #8892a4;
}

/* ── Hero metrics row — one glanceable strip, dominant number first ────────── */
.fa-hero-row {
  display: flex; gap: 20px; flex-wrap: wrap;
  padding: 14px 4px 18px;
  margin-bottom: 4px;
  border-bottom: 1px solid var(--border);
}
.fa-hero-metric { display: flex; flex-direction: column; gap: 2px; }
.fa-hero-metric.is-primary .fa-hero-value { font-size: 1.9em; }
.fa-hero-value { font-size: 1.3em; font-weight: 700; font-variant-numeric: tabular-nums; }
.fa-hero-label { font-size: 0.72em; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); }
.fa-hero-value.pos { color: var(--fa-green); }
.fa-hero-value.neg { color: var(--fa-red); }
.fa-hero-value.fa-stale-gold { color: var(--fa-gold); }

/* ── Status chips — replaces plain colored text for any discrete state ─────── */
.fa-chip {
  display: inline-block; border-radius: 999px; padding: 2px 10px;
  font-size: 0.74em; font-weight: 600; white-space: nowrap; line-height: 1.6;
}
.fa-chip.fa-chip-green  { background: var(--fa-green-soft); color: var(--fa-green); }
.fa-chip.fa-chip-red    { background: var(--fa-red-soft);   color: var(--fa-red); }
.fa-chip.fa-chip-gold   { background: var(--fa-gold-soft);  color: var(--fa-gold); }
.fa-chip.fa-chip-neutral{ background: rgba(136,146,164,0.14); color: var(--fa-neutral); }
.fa-chip.fa-chip-live   { background: var(--fa-red-soft); color: var(--fa-red); font-weight: 700; }

/* ── Empty states — icon + message + action, never bare text ───────────────── */
.fa-empty-state {
  text-align: center; padding: 36px 20px; color: var(--muted);
}
.fa-empty-state .fa-empty-icon { font-size: 2em; margin-bottom: 8px; opacity: 0.6; }
.fa-empty-state p { margin: 0 0 12px; max-width: 40em; margin-left: auto; margin-right: auto; }

/* ── Inline P&L bar — quick relative-scan column in the leaderboard ─────────── */
.fa-bar-track {
  position: relative; width: 64px; height: 8px; border-radius: 4px;
  background: rgba(136,146,164,0.18); overflow: hidden; display: inline-block; vertical-align: middle;
}
.fa-bar-fill { position: absolute; top: 0; left: 0; bottom: 0; border-radius: 4px; }
.fa-bar-fill.pos { background: var(--fa-green); }
.fa-bar-fill.neg { background: var(--fa-red); }

/* ── Search / filter toolbar — consistent across Recent Calls & Leaderboard ── */
.fa-toolbar {
  display: flex; gap: 8px; flex-wrap: wrap; align-items: center;
  margin-bottom: 10px;
}
.fa-toolbar input[type="text"], .fa-toolbar select {
  padding: 7px 10px; border-radius: 6px; border: 1px solid var(--border);
  background: var(--panel-2); color: var(--text); font-size: 0.85em;
}
.fa-toolbar .fa-count { color: var(--muted); font-size: 0.78em; margin-left: auto; }

/* ── Grade badge — reuses chip but keyed off the emoji-prefixed grade text ──── */
.fa-grade-badge.fa-grade-excellent { color: var(--fa-green); font-weight: 700; }
.fa-grade-badge.fa-grade-good      { color: var(--fa-green); }
.fa-grade-badge.fa-grade-average   { color: var(--fa-gold); }
.fa-grade-badge.fa-grade-poor      { color: var(--fa-red); }
.fa-grade-badge.fa-grade-new       { color: var(--fa-neutral); }

/* ── Equity curve container ─────────────────────────────────────────────────── */
.fa-equity-chart { height: 160px; margin: 10px 0 16px; border-radius: 8px; overflow: hidden; }

/* ── Settings form ───────────────────────────────────────────────────────────── */
.fa-settings-section { margin-bottom: 18px; }
.fa-settings-section h4 {
  margin: 0 0 8px; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted);
}
.fa-settings-note { font-size: 0.8em; color: var(--muted); margin: 0 0 10px; max-width: 52em; }
.fa-settings-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 6px 0; border-bottom: 1px solid var(--border);
}
.fa-settings-row label { font-size: 0.88em; }
.fa-settings-row input {
  width: 110px; text-align: right; padding: 6px 8px; border-radius: 6px;
  border: 1px solid var(--border); background: var(--panel-2); color: var(--text);
}
.fa-settings-row input.fa-settings-text { width: 240px; text-align: left; }

/* ── Retroactive real-trading action — visually distinct, it's live money ──── */
.fa-send-real-btn {
  background: var(--fa-red-soft); color: var(--fa-red); border: 1px solid var(--fa-red);
  border-radius: 6px; padding: 4px 9px; font-size: 0.78em; font-weight: 600; cursor: pointer;
}
.fa-send-real-btn:disabled { opacity: 0.5; cursor: default; }

/* ── Live SL/Target preview under the Add Call notes field ──────────────────── */
.fa-add-preview { font-size: 0.8em; color: var(--muted); margin-top: 6px; min-height: 1.4em; }

/* ── Sortable table headers ──────────────────────────────────────────────────── */
.fa-sortable th { cursor: pointer; user-select: none; white-space: nowrap; }
.fa-sortable th:hover { color: var(--text); }
.fa-sortable th.fa-sort-active::after { content: " " attr(data-sort-dir); font-size: 0.85em; opacity: 0.7; }

/* ── Export button ────────────────────────────────────────────────────────────── */
.fa-export-btn {
  background: var(--panel-2); color: var(--text); border: 1px solid var(--border);
  border-radius: 6px; padding: 6px 10px; font-size: 0.8em; cursor: pointer;
}
.fa-export-btn:hover { border-color: var(--muted); }

