/* Prevent display:flex/grid from overriding [hidden] attribute */
[hidden] { display: none !important; }

html:has(body.ledger-page) {
  overflow: hidden;
  height: 100%;
}
.ledger-page {
  height: 100vh;
  overflow: hidden;
  background: var(--ll-bg);
}

.ledger-shell {
  /* Full-width scroll container so the vertical scrollbar rides the window's
     right edge like a normal page, NOT the centered content's right edge.
     Content is still capped at 1180px and centered via auto side gutters
     (padding-inline), instead of max-width + margin:auto which would drag
     the scrollbar inward with the content box. */
  width: 100%;
  padding-top: 4.25rem;
  padding-bottom: 1rem;
  padding-inline: max(1rem, calc((100% - 1180px) / 2));
  overflow-x: hidden;
  height: 100%;
  overflow-y: auto;
  box-sizing: border-box;
  /* Subtle thin scrollbar — previously hidden entirely, which left
     users unable to tell the page was still scrollable after jumping
     to a schedule section (the page would "lock" visually because
     header content scrolled off and no scroll indicator was visible).
     Thin pill thumb that brightens on hover, matches the signals/v2
     and inbox-drawer scrollbar treatment. */
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.14) transparent;
}
.ledger-shell::-webkit-scrollbar {
  width: 8px;
}
.ledger-shell::-webkit-scrollbar-track {
  background: transparent;
}
.ledger-shell::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.12);
  background-clip: content-box;
  border: 2px solid transparent;
  border-radius: 8px;
  transition: background-color 0.15s;
}
.ledger-shell::-webkit-scrollbar-thumb:hover {
  background: rgba(255, 255, 255, 0.24);
  background-clip: content-box;
}
[data-theme="app"] .ledger-shell {
  scrollbar-color: rgba(0, 0, 0, 0.18) transparent;
}
[data-theme="app"] .ledger-shell::-webkit-scrollbar-thumb {
  background: rgba(0, 0, 0, 0.18);
  background-clip: content-box;
}
[data-theme="app"] .ledger-shell::-webkit-scrollbar-thumb:hover {
  background: rgba(0, 0, 0, 0.32);
  background-clip: content-box;
}

/* "You jumped here" focal cue applied by the schedule-jump handler so
   the user can see which group they landed on, even when no scroll was
   needed (all sections already visible). Replaces the old solid-bg
   flash with a focal left-edge bar + soft outward glow that's
   color-keyed per group (overdue=warm amber, this-week=accent,
   later=muted). Total runtime 0.9s — matches the JS setTimeout. */
.ledger-group--flash {
  position: relative;
  animation: ledger-group-flash-glow 0.9s ease-out;
}
.ledger-group--flash::before {
  content: '';
  position: absolute;
  left: -10px;
  top: 0.1rem;
  bottom: 0.1rem;
  width: 3px;
  border-radius: 2px;
  background: var(--ll-accent);
  transform-origin: center;
  animation: ledger-group-flash-bar 0.9s ease-out;
  pointer-events: none;
}
@keyframes ledger-group-flash-glow {
  0%   { box-shadow: 0 0 0 0 rgba(var(--ll-accent-rgb), 0.22); background-color: rgba(var(--ll-accent-rgb), 0.06); }
  40%  { box-shadow: 0 0 0 8px rgba(var(--ll-accent-rgb), 0);   background-color: rgba(var(--ll-accent-rgb), 0.10); }
  100% { box-shadow: 0 0 0 0 transparent;                       background-color: transparent; }
}
@keyframes ledger-group-flash-bar {
  0%   { opacity: 0; transform: scaleY(0.55); }
  25%  { opacity: 1; transform: scaleY(1); }
  100% { opacity: 0; transform: scaleY(1); }
}
/* Overdue group: warmer/urgent color so the eye reads it as
   "attention required" rather than "ok, here it is". */
.ledger-group--flash[data-agenda-group="overdue"] {
  animation-name: ledger-group-flash-glow-overdue;
}
.ledger-group--flash[data-agenda-group="overdue"]::before {
  background: #e0883e;
}
@keyframes ledger-group-flash-glow-overdue {
  0%   { box-shadow: 0 0 0 0 rgba(224, 136, 62, 0.26); background-color: rgba(224, 136, 62, 0.07); }
  40%  { box-shadow: 0 0 0 8px rgba(224, 136, 62, 0);  background-color: rgba(224, 136, 62, 0.12); }
  100% { box-shadow: 0 0 0 0 transparent;              background-color: transparent; }
}
/* Later group: muted gray so jumping there isn't louder than the
   content. The eye still sees the bar; it just doesn't shout. */
.ledger-group--flash[data-agenda-group="later"]::before {
  background: var(--ll-text-muted);
  opacity: 0.65;
}
@media (prefers-reduced-motion: reduce) {
  .ledger-group--flash,
  .ledger-group--flash::before { animation: none; }
}

.ledger-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: end;
  gap: 1rem;
  padding: 0.25rem 0 0.75rem;
  border-bottom: 1px solid var(--ll-border-subtle);
  flex-shrink: 0;
}

/* Bare variant — used when the page chrome is intentionally minimal
   (no kicker, no title, no subtitle). Just a right-aligned controls
   strip so the workspace starts immediately. Matches signals-v2's
   "no banner" lesson. */
.ledger-hero--bare {
  grid-template-columns: 1fr;
  padding: 0 0 0.6rem;
  border-bottom: 1px solid var(--ll-border-subtle);
}
.ledger-hero--bare .ledger-hero__controls {
  justify-self: end;
}

.ledger-summary { flex-shrink: 0; }
.ledger-tabs { flex-shrink: 0; }

.ledger-kicker {
  margin: 0 0 0.35rem;
  color: var(--ll-text-muted);
  font-size: 0.78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.ledger-title {
  margin: 0;
  color: var(--ll-text);
  font-size: 2rem;
  line-height: 1.1;
  letter-spacing: 0;
}

.ledger-subtitle {
  max-width: 48rem;
  margin: 0.25rem 0 0;
  color: var(--ll-text-muted);
  font-size: 0.88rem;
  line-height: 1.4;
}

.ledger-status {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2rem;
  max-width: 100%;
  padding: 0.28rem 0.6rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  color: var(--ll-text-muted);
  background: var(--ll-bg-soft);
  font-size: 0.75rem;
  font-weight: 700;
  white-space: nowrap;
}

.ledger-status--ok {
  color: #15803d;
  border-color: rgba(21, 128, 61, 0.24);
  background: rgba(21, 128, 61, 0.08);
}

.ledger-status--error {
  color: #b91c1c;
  border-color: rgba(185, 28, 28, 0.28);
  background: rgba(185, 28, 28, 0.08);
}

.ledger-summary {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.5rem;
  margin: 0.6rem 0;
}

.ledger-metric {
  min-width: 0;
  padding: 0.6rem 0.85rem;
  border: 1px solid var(--ll-border-subtle);
  border-top: 2px solid rgba(var(--ll-accent-rgb), 0.4);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  transition: box-shadow 120ms;
}
.ledger-metric--money { border-top-color: rgba(var(--ll-accent-rgb), 0.65); }
.ledger-metric--repaid { border-top-color: rgba(78, 195, 138, 0.65); }
.ledger-metric--outstanding { border-top-color: rgba(var(--ll-accent-rgb), 1); }
.ledger-metric--rate { border-top-color: rgba(224, 179, 65, 0.7); }
.ledger-metric--danger { border-top-color: rgba(211, 106, 106, 0.85); }
.ledger-metric--warn { border-top-color: rgba(224, 179, 65, 0.85); }
.ledger-metric--count { border-top-color: rgba(var(--ll-accent-rgb), 0.2); }

.ledger-metric__label {
  margin: 0 0 0.35rem;
  color: var(--ll-text-muted);
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.ledger-metric__value {
  margin: 0;
  color: var(--ll-text);
  font-size: 1.2rem;
  font-weight: 700;
  line-height: 1.15;
}
.ledger-metric__sub {
  display: block;
  font-size: 0.7rem;
  font-weight: 500;
  color: var(--ll-text-muted);
  margin-top: 0.1rem;
}
.ledger-metric__sub--warn { color: #d36a6a; }

.ledger-tabs {
  display: flex;
  gap: 0.4rem;
  margin: 0.5rem 0 0.4rem;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scrollbar-width: thin;
  border-bottom: 1px solid var(--ll-border-subtle);
}

.ledger-tab {
  flex: 0 0 auto;
  min-height: 2.1rem;
  min-width: 5.25rem;
  padding: 0.3rem 0.75rem;
  border: 0;
  border-bottom: 2px solid transparent;
  background: transparent;
  color: var(--ll-text-muted);
  font: inherit;
  font-size: 0.86rem;
  font-weight: 700;
  text-align: center;
  white-space: nowrap;
  cursor: pointer;
}

.ledger-tab:hover,
.ledger-tab:focus-visible {
  color: var(--ll-text);
  outline: none;
  border-bottom-color: rgba(var(--ll-accent-rgb), 0.35);
}

/* Pushes everything after it to the far right of the tab row, so the
   settings cog sits at the trailing edge without looking like a 7th tab. */
.ledger-tabs__spacer {
  flex: 1 1 auto;
  min-width: 0;
}

/* Settings cog action — icon-only ghost button that lives in the tab row.
   Visually distinct from tabs (no underline-on-active, circular hover bg)
   so it doesn't read as "click to switch panels." */
.ledger-tabs__action {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.1rem;
  height: 2.1rem;
  margin-bottom: -1px; /* align with tabs' baseline border */
  padding: 0;
  border: 1px solid transparent;
  border-radius: 50%;
  background: transparent;
  color: var(--ll-text-muted);
  cursor: pointer;
  transition: color 0.12s, background-color 0.12s, border-color 0.12s;
}
.ledger-tabs__action:hover,
.ledger-tabs__action:focus-visible {
  color: var(--ll-accent);
  background: rgba(var(--ll-accent-rgb), 0.08);
  border-color: rgba(var(--ll-accent-rgb), 0.25);
  outline: none;
}
/* Rotate the SVG inside, NOT the whole button. The button's bounding
   box stays the same width/height; only the icon spins. This prevents
   the tab row's overflow-x: auto from inserting a scrollbar on hover. */
.ledger-tabs__action svg {
  transition: transform 0.25s ease-out;
}
.ledger-tabs__action:hover svg,
.ledger-tabs__action:focus-visible svg {
  transform: rotate(45deg);
}

.ledger-tab.is-active {
  color: var(--ll-text);
  background: rgba(var(--ll-accent-rgb), 0.07);
  border-bottom-color: var(--ll-accent);
}
.ledger-tab__badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 0.3rem;
  padding: 0.05em 0.45em;
  border-radius: 99px;
  font-size: 0.68rem;
  font-weight: 700;
  line-height: 1.5;
  background: var(--ll-bg-soft);
  color: var(--ll-text-muted);
  border: 1px solid var(--ll-border-subtle);
  vertical-align: middle;
  letter-spacing: 0;
}
.ledger-tab.is-active .ledger-tab__badge {
  background: rgba(var(--ll-accent-rgb), 0.12);
  color: var(--ll-accent);
  border-color: rgba(var(--ll-accent-rgb), 0.2);
}

.ledger-panel {
  display: none;
  padding-top: 0.55rem;
}

.ledger-panel.is-active {
  display: block;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  scrollbar-width: none;
}
.ledger-panel.is-active::-webkit-scrollbar {
  display: none;
}

.ledger-panel__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 0.7rem;
}

.ledger-panel__title {
  margin: 0;
  color: var(--ll-text);
  font-size: 1rem;
  line-height: 1.3;
}

.ledger-panel__meta {
  margin: 0;
  color: var(--ll-text-muted);
  font-size: 0.78rem;
  white-space: nowrap;
}

.ledger-list {
  display: grid;
  gap: 0.55rem;
}

.ledger-mobile-capture-actions {
  display: none;
}

.ledger-capture {
  min-width: 0;
}

.ledger-borrowers-layout,
.ledger-quick-grid,
.ledger-borrower-workspace,
.ledger-stats-layout,
.ledger-stats-grid {
  display: grid;
  gap: 0.75rem;
}

.ledger-quick-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  margin-bottom: 0.85rem;
}

.ledger-borrower-workspace {
  grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.75fr);
  align-items: start;
}

.ledger-stats-grid {
  /* U10 desktop parity: 3x3 grid of tiles (totals / averages / counts). */
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin-bottom: 0.75rem;
}

.ledger-stats-layout {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: start;
}

.ledger-stats-charts {
  display: grid;
  grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
  gap: 0.75rem;
  margin-bottom: 0.75rem;
  /* Don't stretch cards to a common row height — the Portfolio Outstanding
     card is naturally shorter than the Funding pie next to it, and stretching
     was leaving a large empty gap below the portfolio chart. */
  align-items: start;
}

.ledger-chart-card {
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
  padding: 0.85rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
}

.ledger-chart-card__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.5rem;
  flex-wrap: wrap;
  padding-bottom: 0.55rem;
  border-bottom: 1px solid var(--ll-border-subtle);
  margin-bottom: 0.55rem;
}

.ledger-chart-card__title {
  margin: 0;
  color: var(--ll-text-muted);
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.07em;
}

.ledger-chart-card__sub {
  margin: 0;
  color: var(--ll-text);
  font-size: 0.82rem;
  font-weight: 600;
}

.ledger-chart-card__legend {
  display: flex;
  gap: 0.8rem;
  font-size: 0.72rem;
  color: var(--ll-text-muted);
}

.ledger-chart-legend {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}

.ledger-chart-legend__swatch {
  display: inline-block;
  width: 0.72rem;
  height: 0.72rem;
  border-radius: 0.18rem;
  background: var(--ll-text-muted);
}

.ledger-chart-legend__swatch--lent {
  /* Navy per claude.ai design ref (2026-05-31). Matches Status Snapshot Active. */
  background: #2e4d7a;
}

.ledger-chart-legend__swatch--repaid {
  /* Amber companion per claude.ai design ref. */
  background: #e0b341;
}

.ledger-chart-card__body {
  display: block;
  width: 100%;
  min-height: 7.5rem;
}

.ledger-chart-card__body svg {
  display: block;
  width: 100%;
  height: 8.5rem;
}

.ledger-trend-chart {
  display: grid;
  grid-template-columns: 2.4rem 1fr;
  gap: 0.35rem;
  align-items: stretch;
}

.ledger-trend-chart__yaxis {
  position: relative;
  height: 7.6rem;
  font-variant-numeric: tabular-nums;
}

.ledger-trend-chart__ytick {
  position: absolute;
  right: 0;
  transform: translateY(-50%);
  font-size: 0.68rem;
  color: var(--ll-text-muted);
  opacity: 0.85;
  white-space: nowrap;
}

.ledger-trend-chart__plot {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  min-width: 0;
}

.ledger-trend-chart__plot-area {
  position: relative;
  min-width: 0;
}

.ledger-trend-chart__svg {
  display: block;
  width: 100%;
  height: 7.6rem;
  color: var(--ll-text); /* used by dotted gridlines via currentColor */
}

.ledger-trend-chart__axis {
  display: flex;
  justify-content: space-between;
  font-size: 0.7rem;
  color: var(--ll-text-muted);
  letter-spacing: 0.01em;
}

/* PO-1: hover scrubber. Overlay sits on top of the chart SVG inside the
   plot-area wrapper; dots + leader live in a sibling SVG using the same
   viewBox so geometry stays in lockstep with the chart's preserveAspectRatio
   stretch. Hidden until a mousemove arrives; revealed via .is-active. */
.ledger-trend-chart__scrubber {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0;
  transition: opacity 90ms ease-out;
}
.ledger-trend-chart__scrubber.is-active { opacity: 1; }
.ledger-trend-chart__scrubber-svg {
  display: block;
  width: 100%;
  height: 100%;
  color: var(--ll-text);
}
.ledger-trend-chart__scrubber-tip {
  position: absolute;
  top: 0.35rem;
  display: flex;
  flex-direction: column;
  gap: 0.18rem;
  padding: 0.4rem 0.55rem;
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  box-shadow: 0 4px 12px rgba(0,0,0,0.28);
  font-size: 0.7rem;
  color: var(--ll-text-muted);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.ledger-trend-chart__scrubber-tip .lts-date {
  font-weight: 600;
  color: var(--ll-text);
  font-size: 0.72rem;
}
.ledger-trend-chart__scrubber-tip .lts-row {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}
.ledger-trend-chart__scrubber-tip .lts-swatch {
  display: inline-block;
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 50%;
  flex-shrink: 0;
}
.ledger-trend-chart__scrubber-tip strong {
  color: var(--ll-text);
  font-weight: 600;
}

/* Peak callout — positioned over the plot-area in HTML so its text stays crisp
   (the SVG uses preserveAspectRatio="none" which would distort SVG <text>). */
.ledger-trend-chart__peak {
  position: absolute;
  font-size: 0.7rem;
  font-weight: 600;
  color: var(--ll-text);
  white-space: nowrap;
  pointer-events: none;
  font-variant-numeric: tabular-nums;
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  padding: 0.05rem 0.3rem;
  border-radius: 0.2rem;
}
.ledger-trend-chart__peak--center {
  transform: translate(-50%, calc(-100% - 0.55rem));
}
.ledger-trend-chart__peak--right {
  transform: translate(-100%, calc(-100% - 0.55rem));
}

/* U16 stats toolbar: time range + actions */
.ledger-stats-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.55rem 0.85rem;
  margin: 0 0 0.7rem;
  padding: 0.5rem 0.65rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
}

.ledger-range {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 0.3rem;
}

.ledger-range__chip {
  appearance: none;
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  color: var(--ll-text-muted);
  font: inherit;
  font-size: 0.78rem;
  font-weight: 600;
  padding: 0.3rem 0.75rem;
  border-radius: 999px;
  cursor: pointer;
  min-height: 1.9rem;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  transition: border-color 100ms, color 100ms, background 100ms, box-shadow 100ms;
}

.ledger-range__chip:hover,
.ledger-range__chip:focus-visible {
  color: var(--ll-text);
  border-color: rgba(var(--ll-accent-rgb), 0.5);
  outline: none;
}

.ledger-range__chip.is-active {
  color: var(--ll-accent);
  background: rgba(var(--ll-accent-rgb), 0.1);
  border-color: rgba(var(--ll-accent-rgb), 0.4);
  box-shadow: 0 1px 3px rgba(var(--ll-accent-rgb), 0.15);
}

.ledger-range__custom {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 0.45rem 0.7rem;
}

.ledger-range__custom .ledger-field { min-width: 0; }

.ledger-stats-actions {
  margin-left: auto;
  display: inline-flex;
  gap: 0.4rem;
  flex-wrap: wrap;
}

/* U16 pie chart */
.ledger-pie {
  width: 100%;
  max-width: 13rem;
  margin: 0 auto;
}

.ledger-pie svg {
  display: block;
  width: 100%;
  height: auto;
}

.ledger-pie-legend {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.3rem 0.6rem;
  margin: 0.5rem 0 0;
  padding: 0;
  list-style: none;
  font-size: 0.74rem;
  color: var(--ll-text-muted);
}

.ledger-pie-legend__item {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  min-width: 0;
}

.ledger-pie-legend__swatch {
  width: 0.66rem;
  height: 0.66rem;
  border-radius: 0.16rem;
  flex-shrink: 0;
}

.ledger-pie-legend__name { color: var(--ll-text); font-weight: 600; }
.ledger-pie-legend__amount { margin-left: auto; }

@media (max-width: 760px) {
  .ledger-stats-actions { margin-left: 0; width: 100%; }
  .ledger-stats-actions .ledger-action { flex: 1 1 auto; }
  .ledger-pie { max-width: 11rem; }
  .ledger-pie-legend { grid-template-columns: 1fr; }
}

.ledger-chart-empty {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 8rem;
  color: var(--ll-text-muted);
  font-size: 0.82rem;
}

.ledger-status-bar {
  display: flex;
  width: 100%;
  height: 0.85rem;
  overflow: hidden;
  border-radius: 999px;
  background: rgba(var(--ll-accent-rgb), 0.08);
  margin-bottom: 0.4rem;
}

.ledger-status-bar__seg {
  height: 100%;
  transition: flex-basis 220ms ease;
}

/* Status palette per claude.ai design ref (2026-05-31). Scoped to this card —
   the rest of the ledger still uses the older mint/red palette via #4ec38a /
   #d36a6a / #e0b341 in dozens of places (loan-table dividers, agendas, P&L);
   broader unification is a follow-up if/when we want full visual consistency. */
.ledger-status-bar__seg--active    { background: #2e4d7a; }
.ledger-status-bar__seg--late      { background: #e0b341; }
.ledger-status-bar__seg--repaid    { background: #1f9968; }
.ledger-status-bar__seg--defaulted { background: #cc4d33; }

/* Legend rows: dot · label · proportional mini-bar · count.
   Single-column grid (rows stack) so each bar gets full horizontal headroom and
   the visual distribution lens reads clearly without crowding the count. */
.ledger-status-legend {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.45rem;
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: 0.78rem;
  color: var(--ll-text-muted);
}

.ledger-status-legend__item {
  display: grid;
  grid-template-columns: auto auto 1fr auto;
  align-items: center;
  gap: 0.55rem;
  min-width: 0;
}

.ledger-status-legend__dot {
  display: inline-block;
  width: 0.6rem;
  height: 0.6rem;
  border-radius: 50%;
  flex-shrink: 0;
}

.ledger-status-legend__label {
  color: var(--ll-text);
  font-weight: 500;
  white-space: nowrap;
}

.ledger-status-legend__bar {
  position: relative;
  display: block;
  height: 0.32rem;
  border-radius: 999px;
  background: rgba(var(--ll-accent-rgb), 0.08);
  overflow: hidden;
  min-width: 0;
}

.ledger-status-legend__bar-fill {
  position: absolute;
  inset: 0 auto 0 0;
  border-radius: 999px;
  transition: width 220ms ease;
}

.ledger-status-legend__count {
  color: var(--ll-text);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  min-width: 1.5rem;
  text-align: right;
}

.ledger-status-footer {
  margin: 0.9rem 0 0;
  padding-top: 0.7rem;
  border-top: 1px solid var(--ll-border-subtle);
  font-size: 0.74rem;
  color: var(--ll-text-muted);
  letter-spacing: 0.01em;
}

.ledger-status-footer strong {
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

/* U11 Borrowers — quick add, toolbar, profile drilldown. */
.ledger-borrower-quickadd {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) auto;
  gap: 0.5rem;
  align-items: end;
  margin-bottom: 0.6rem;
  padding: 0.6rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
}

.ledger-borrower-quickadd__field {
  min-width: 0;
}

.ledger-borrower-quickadd__more {
  grid-column: 1 / -1;
  font-size: 0.8rem;
}

.ledger-borrower-quickadd__more summary {
  cursor: pointer;
  color: var(--ll-text-muted);
  list-style: none;
  padding: 0.2rem 0;
}

.ledger-borrower-quickadd__more summary::-webkit-details-marker { display: none; }
.ledger-borrower-quickadd__more summary::before {
  content: "+ ";
  color: var(--ll-accent);
  font-weight: 700;
}

.ledger-borrower-quickadd__more[open] summary::before { content: "− "; }

.ledger-borrower-quickadd__actions {
  display: flex;
  align-items: end;
}

.ledger-borrower-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.8rem;
  align-items: center;
  margin-bottom: 0.6rem;
}

.ledger-search {
  flex: 1 1 14rem;
  min-width: 0;
  height: 2.4rem;
  padding: 0 0.7rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  color: var(--ll-text);
  font: inherit;
}

.ledger-search:focus-visible {
  outline: 2px solid rgba(var(--ll-accent-rgb), 0.5);
  outline-offset: 1px;
}

.ledger-toggle {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 0.82rem;
  color: var(--ll-text-muted);
  cursor: pointer;
  user-select: none;
}

.ledger-toggle input { accent-color: var(--ll-accent); }

.ledger-borrower-summary {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(7rem, 1fr));
  gap: 0.4rem;
  margin: 0.45rem 0 0.7rem;
}
.ledger-borrower-summary .ledger-metric--pl {
  grid-column: 1 / -1;
  min-height: 0;
  padding: 0.4rem 0.5rem;
  display: flex;
  align-items: center;
  gap: 0.75rem;
}
.ledger-borrower-summary .ledger-metric--pl .ledger-metric__label { margin: 0; }
.ledger-borrower-summary .ledger-metric--pl .ledger-metric__value { font-size: 1rem; }

.ledger-borrower-summary .ledger-metric {
  min-height: 4.2rem;
  padding: 0.55rem 0.5rem;
}

.ledger-borrower-summary .ledger-metric__label {
  font-size: 0.62rem;
}

.ledger-borrower-summary .ledger-metric__value {
  font-size: 0.95rem;
}

.ledger-borrower-section {
  margin-top: 0.85rem;
}

.ledger-borrower-section__title {
  margin: 0 0 0.4rem;
  font-size: 0.78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ll-text-muted);
}

.ledger-loan-mini {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.2rem 0.6rem;
  padding: 0.55rem 0.6rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  margin-bottom: 0.35rem;
}

.ledger-loan-mini__title {
  margin: 0;
  font-size: 0.86rem;
  font-weight: 600;
  color: var(--ll-text);
}

.ledger-loan-mini__meta {
  margin: 0;
  font-size: 0.72rem;
  color: var(--ll-text-muted);
}

/* Notes attached to a loan — rendered as an indented block under the loan row */
.ledger-loan-mini__notecount { color: var(--ll-accent); font-weight: 600; }
.ledger-loan-notes {
  margin: -0.15rem 0 0.45rem 0.6rem;
  padding-left: 0.6rem;
  border-left: 2px solid var(--ll-border-subtle);
}
.ledger-loan-note {
  margin: 0.15rem 0;
  font-size: 0.74rem;
  color: var(--ll-text-muted);
}
.ledger-loan-note::before { content: "📝 "; }

.ledger-loan-mini__amount {
  text-align: right;
  font-weight: 700;
  color: var(--ll-text);
}

.ledger-loan-mini__amount small {
  display: block;
  font-weight: 400;
  font-size: 0.66rem;
  color: var(--ll-text-muted);
}

.ledger-activity-mini {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.ledger-activity-mini__row {
  display: flex;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.35rem 0.45rem;
  font-size: 0.78rem;
  color: var(--ll-text);
  border-left: 2px solid var(--ll-border-subtle);
}

.ledger-activity-mini__when {
  color: var(--ll-text-muted);
  font-size: 0.7rem;
  white-space: nowrap;
}

/* U15 nickname surface */
.ledger-row__secondary {
  display: inline-block;
  margin-left: 0.35rem;
  color: var(--ll-text-muted);
  font-weight: 400;
  font-size: 0.78rem;
}

.ledger-detail__sub {
  margin: -0.15rem 0 0.25rem;
  color: var(--ll-text-muted);
  font-size: 0.82rem;
}

.ledger-nickname-form {
  display: flex;
  align-items: end;
  gap: 0.5rem;
  margin: 0.5rem 0 0.6rem;
}

.ledger-nickname-form .ledger-field { flex: 1 1 auto; min-width: 0; }
.ledger-nickname-form .ledger-action { flex: 0 0 auto; }

.ledger-field__hint {
  display: inline-block;
  margin-left: 0.45rem;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--ll-text-muted);
}

.ledger-field__hint--positive { color: #4ec38a; }
.ledger-field__hint--negative { color: #d36a6a; }

/* Loan status chip tints */
.ledger-chip--status-active {
  background: rgba(94, 148, 255, 0.13);
  color: rgba(94, 148, 255, 0.95);
  border-color: rgba(94, 148, 255, 0.2);
}
.ledger-chip--status-defaulted {
  background: rgba(211, 106, 106, 0.14);
  color: #d36a6a;
  border-color: rgba(211, 106, 106, 0.22);
}
.ledger-chip--status-paid {
  background: rgba(78, 195, 138, 0.13);
  color: #4ec38a;
  border-color: rgba(78, 195, 138, 0.22);
}
.ledger-chip--status-overdue {
  background: rgba(224, 179, 65, 0.14);
  color: #e0b341;
  border-color: rgba(224, 179, 65, 0.25);
}
.ledger-chip--status-due {
  background: rgba(224, 179, 65, 0.14);
  color: #e0b341;
  border-color: rgba(224, 179, 65, 0.25);
}
.ledger-chip--status-recovered {
  background: rgba(32, 178, 170, 0.13);
  color: #20b2aa;
  border-color: rgba(32, 178, 170, 0.22);
}
.ledger-chip--status-closed,
.ledger-chip--status-archived {
  background: rgba(141, 153, 175, 0.12);
  color: var(--ll-text-muted);
  border-color: rgba(141, 153, 175, 0.18);
}

@media (max-width: 760px) {
  .ledger-nickname-form { flex-direction: column; align-items: stretch; }
  .ledger-nickname-form .ledger-action { width: 100%; }
}

.ledger-calendar {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 0.3rem;
  margin-bottom: 0.4rem;
}

.ledger-calendar__cell {
  min-width: 0;
  min-height: 4.1rem;
  padding: 0.4rem 0.35rem 0.3rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.ledger-calendar__cell--blank {
  opacity: 0.35;
}

.ledger-calendar__cell--today {
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 1px rgba(var(--ll-accent-rgb), 0.35) inset;
}

.ledger-calendar__cell--selected {
  background: rgba(var(--ll-accent-rgb), 0.16);
  border-color: var(--ll-accent);
}

[data-ledger-cal-day] { cursor: pointer; }
[data-ledger-cal-day]:focus-visible {
  outline: 2px solid var(--ll-accent);
  outline-offset: -2px;
}

/* U12 schedule overhaul: summary pills, calendar card, agenda layout. */
.ledger-schedule-summary {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.5rem;
  margin-bottom: 0.7rem;
}

.ledger-schedule-pill {
  appearance: none;
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  color: var(--ll-text);
  border-radius: var(--ll-radius-md);
  padding: 0.55rem 0.7rem;
  cursor: pointer;
  text-align: left;
  font: inherit;
  display: grid;
  gap: 0.1rem;
  min-height: 3.6rem;
}

.ledger-schedule-pill:hover,
.ledger-schedule-pill:focus-visible {
  outline: none;
  border-color: var(--ll-accent);
}

.ledger-schedule-pill__count {
  font-size: 1.15rem;
  font-weight: 700;
  line-height: 1.05;
}

.ledger-schedule-pill__label {
  font-size: 0.72rem;
  color: var(--ll-text-muted);
  letter-spacing: 0.02em;
}

.ledger-schedule-pill--overdue {
  border-color: rgba(211, 106, 106, 0.55);
}

.ledger-schedule-pill--overdue .ledger-schedule-pill__count {
  color: #d36a6a;
}

.ledger-schedule-pill--week {
  border-color: rgba(224, 179, 65, 0.55);
}

.ledger-schedule-pill--week .ledger-schedule-pill__count {
  color: #e0b341;
}

.ledger-schedule-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
  gap: 0.75rem;
  align-items: start;
}

.ledger-calendar-card,
.ledger-agenda {
  min-width: 0;
  padding: 0.7rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
}

.ledger-calendar-card__head {
  display: grid;
  grid-template-columns: auto 1fr auto auto;
  align-items: center;
  gap: 0.4rem;
  margin-bottom: 0.55rem;
}

.ledger-calendar-card__title {
  margin: 0;
  font-size: 0.95rem;
  font-weight: 700;
  text-align: center;
}

.ledger-calendar-nav,
.ledger-calendar-today {
  min-width: 2.2rem;
  padding: 0.3rem 0.55rem;
  font-size: 0.78rem;
}

.ledger-calendar-weekdays {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 0.3rem;
  margin-bottom: 0.3rem;
  font-size: 0.66rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ll-text-muted);
  text-align: center;
}

.ledger-agenda .ledger-list { display: grid; gap: 0.4rem; }

/* Schedule items as layered cards within the agenda panel */
.ledger-agenda .ledger-row {
  background: var(--ll-surface-1);
  border-color: var(--ll-border-subtle);
  padding: 0.6rem 0.75rem;
}

.ledger-agenda-row__meta--days {
  font-weight: 700;
}

.ledger-agenda-row__meta--overdue { color: #d36a6a; }
.ledger-agenda-row__meta--soon { color: #e0b341; }

@media (max-width: 760px) {
  .ledger-schedule-layout { grid-template-columns: 1fr; }
  .ledger-schedule-summary { gap: 0.4rem; }
  .ledger-schedule-pill { min-height: 3.1rem; padding: 0.45rem 0.55rem; }
  .ledger-schedule-pill__count { font-size: 1rem; }
  .ledger-schedule-pill__label { font-size: 0.66rem; }
  .ledger-calendar-card__head { grid-template-columns: auto 1fr auto auto; gap: 0.3rem; }
  .ledger-calendar-card__title { font-size: 0.85rem; }
  .ledger-calendar-weekdays { font-size: 0.58rem; gap: 0.25rem; }
  .ledger-calendar { gap: 0.25rem; }
  .ledger-calendar__cell { min-height: 3.2rem; padding: 0.3rem 0.25rem; }
  .ledger-calendar__day { font-size: 0.7rem; }
}

.ledger-calendar__day {
  color: var(--ll-text);
  font-size: 0.78rem;
  font-weight: 700;
}

.ledger-calendar__count {
  display: inline-flex;
  align-items: center;
  min-height: 1.35rem;
  margin-top: 0.45rem;
  padding: 0.1rem 0.38rem;
  border-radius: var(--ll-radius-sm);
  background: rgba(var(--ll-accent-rgb), 0.12);
  color: var(--ll-text);
  font-size: 0.68rem;
  font-weight: 700;
}

.ledger-calendar__count--overdue {
  background: rgba(185, 28, 28, 0.1);
  color: #b91c1c;
}

.ledger-stats-bottom {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  margin-top: 1.5rem;
}
.ledger-stats-bottom--aux {
  margin-top: 1rem;
}
@media (max-width: 640px) {
  .ledger-stats-bottom { grid-template-columns: 1fr; }
}

.ledger-stat-section {
  background: var(--ll-bg-panel);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 10px;
  padding: 1rem 1.1rem 1.25rem;
  min-width: 0;
}

.ledger-section-title {
  margin: 0 0 0.65rem;
  color: var(--ll-text-muted);
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  padding-bottom: 0.45rem;
  border-bottom: 1px solid var(--ll-border-subtle);
  line-height: 1.3;
}
.ledger-section-title__sub {
  font-size: 0.62rem;
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  opacity: 0.7;
  margin-left: 0.4rem;
}
.ledger-lb-toggle {
  font-size: 0.6rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 0.15rem 0.5rem;
  border-radius: 999px;
  border: 1px solid rgba(94, 148, 255, 0.35);
  background: transparent;
  color: rgba(94, 148, 255, 0.8);
  cursor: pointer;
  margin-left: 0.5rem;
  vertical-align: middle;
  transition: background 0.15s, color 0.15s;
}
.ledger-lb-toggle:hover { background: rgba(94, 148, 255, 0.12); color: #5e94ff; }
.ledger-lb-toggle.is-active { background: rgba(94, 148, 255, 0.15); color: #5e94ff; border-color: #5e94ff; }
.ledger-loan-analytics {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.5rem;
}
.ledger-metric--analytics {
  padding: 0.6rem 0.75rem;
  background: var(--ll-surface-2, rgba(255,255,255,0.04));
  border-radius: 6px;
  border: 1px solid var(--ll-border, rgba(255,255,255,0.07));
}

.ledger-group {
  display: grid;
  gap: 0.5rem;
}

.ledger-group + .ledger-group {
  margin-top: 0.85rem;
}

.ledger-group__title {
  margin: 0;
  display: flex;
  align-items: center;
  gap: 0.45rem;
  color: var(--ll-text-muted);
  font-size: 0.74rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.ledger-group__count {
  font-size: 0.65rem;
  font-weight: 700;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 99px;
  padding: 0.05rem 0.4rem;
  color: var(--ll-text-muted);
  letter-spacing: 0;
  text-transform: none;
}
.ledger-agenda-show-more {
  display: block;
  width: 100%;
  padding: 0.35rem 0.6rem;
  background: transparent;
  border: 1px dashed var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  color: var(--ll-text-muted);
  font-size: 0.75rem;
  font-weight: 500;
  cursor: pointer;
  text-align: center;
  transition: background 0.1s, color 0.1s;
}
.ledger-agenda-show-more:hover {
  background: var(--ll-bg-soft);
  color: var(--ll-text);
}

.ledger-form,
.ledger-detail {
  padding: 0.85rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
}

.ledger-form__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.75fr);
  gap: 0.75rem;
}

.ledger-field {
  display: grid;
  gap: 0.35rem;
  color: var(--ll-text-muted);
  font-size: 0.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.ledger-field input,
.ledger-field select,
.ledger-field textarea {
  width: 100%;
  min-width: 0;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  color: var(--ll-text);
  font: inherit;
  font-size: 0.9rem;
  font-weight: 500;
  letter-spacing: 0;
  text-transform: none;
  transition: border-color 100ms, box-shadow 100ms;
}
.ledger-field input:focus-visible,
.ledger-field select:focus-visible,
.ledger-field textarea:focus-visible {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 3px rgba(var(--ll-accent-rgb), 0.14);
}

.ledger-field input,
.ledger-field select {
  min-height: 2.5rem;
  padding: 0.5rem 0.65rem;
}

.ledger-field textarea {
  resize: vertical;
  min-height: 5.25rem;
  margin-top: 0.75rem;
  padding: 0.65rem;
}

.ledger-form__actions,
.ledger-row__actions,
.ledger-detail__actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.45rem;
  margin-top: 0.75rem;
}

.ledger-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.1em;
  flex-shrink: 0;
}

.ledger-action {
  min-height: 2.25rem;
  max-width: 100%;
  padding: 0.45rem 0.7rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  color: var(--ll-text);
  font: inherit;
  font-size: 0.8rem;
  font-weight: 600;
  line-height: 1.2;
  overflow-wrap: anywhere;
  cursor: pointer;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06);
  transition: border-color 100ms, box-shadow 100ms, background 100ms;
}

.ledger-action:hover,
.ledger-action:focus-visible {
  border-color: rgba(var(--ll-accent-rgb), 0.5);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
  outline: none;
}

.ledger-action--primary {
  border-color: var(--ll-accent);
  background: var(--ll-accent);
  color: var(--ll-btn-on-accent, #fff);
  box-shadow: 0 1px 4px rgba(var(--ll-accent-rgb), 0.28);
}

.ledger-action--primary:hover {
  box-shadow: 0 2px 8px rgba(var(--ll-accent-rgb), 0.38);
}

.ledger-action--danger {
  color: #b91c1c;
  border-color: rgba(185, 28, 28, 0.28);
  background: transparent;
  box-shadow: none;
}

.ledger-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.75rem;
  align-items: center;
  min-height: 3.5rem;
  padding: 0.65rem 0.85rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  transition: box-shadow 120ms;
}
.ledger-row:hover {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.07);
}

/* Borrower rows get a status left border */
.ledger-row--borrower {
  border-left: 3px solid var(--ll-border-subtle);
}
.ledger-row--status-active { border-left-color: rgba(94, 148, 255, 0.6); }
.ledger-row--status-overdue { border-left-color: rgba(224, 179, 65, 0.7); }
.ledger-row--status-defaulted { border-left-color: rgba(211, 106, 106, 0.6); }
.ledger-row--status-archived { border-left-color: var(--ll-border-subtle); opacity: 0.65; }

.ledger-row__side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.3rem;
}

.ledger-borrower-outstanding {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--ll-accent);
  white-space: nowrap;
}

.ledger-row__title {
  margin: 0 0 0.22rem;
  color: var(--ll-text);
  font-size: 0.92rem;
  font-weight: 700;
  line-height: 1.3;
  overflow-wrap: anywhere;
}

.ledger-row__meta {
  margin: 0;
  color: var(--ll-text-muted);
  font-size: 0.78rem;
  line-height: 1.45;
  overflow-wrap: anywhere;
}

.ledger-row__amount {
  color: var(--ll-text);
  font-size: 0.95rem;
  font-weight: 700;
  text-align: right;
  white-space: nowrap;
}

.ledger-row__amount small {
  display: block;
  margin-top: 0.15rem;
  color: var(--ll-text-muted);
  font-size: 0.72rem;
  font-weight: 700;
}

.ledger-detail__title {
  margin: 0 0 0.35rem;
  color: var(--ll-text);
  font-size: 1rem;
  line-height: 1.3;
  overflow-wrap: anywhere;
}

.ledger-detail__meta,
.ledger-detail__notes {
  margin: 0.45rem 0 0;
  color: var(--ll-text-muted);
  font-size: 0.85rem;
  line-height: 1.5;
}

.ledger-note-panel {
  margin-top: 0.65rem;
  border: 1px solid rgba(var(--ll-text-rgb), 0.08);
  border-radius: var(--ll-radius-sm);
  background: rgba(var(--ll-bg-rgb), 0.28);
}

.ledger-note-panel summary {
  display: grid;
  gap: 0.25rem;
  padding: 0.65rem;
  color: var(--ll-text);
  cursor: pointer;
}

.ledger-note-panel summary span {
  font-size: 0.76rem;
  font-weight: 800;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.ledger-note-panel summary small {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  color: var(--ll-text-muted);
  font-size: 0.78rem;
  line-height: 1.45;
}

.ledger-note-form {
  display: grid;
  gap: 0.65rem;
  border-top: 1px solid rgba(var(--ll-text-rgb), 0.08);
  padding: 0.65rem;
}

.ledger-tag-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-top: 0.65rem;
}

.ledger-chip {
  display: inline-flex;
  align-items: center;
  min-height: 1.3rem;
  padding: 0.1rem 0.5rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: 999px;
  color: var(--ll-text-muted);
  background: var(--ll-bg-soft);
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: none;
  letter-spacing: 0;
}

/* Entity-type chips for activity feed */
.ledger-chip--type-loan { background: rgba(94, 148, 255, 0.12); color: rgba(94, 148, 255, 0.9); border-color: transparent; }
.ledger-chip--type-repayment { background: rgba(78, 195, 138, 0.12); color: #4ec38a; border-color: transparent; }
.ledger-chip--type-borrower { background: rgba(160, 124, 220, 0.12); color: #a07cdc; border-color: transparent; }
.ledger-chip--type-due_date,
.ledger-chip--type-allocation { background: rgba(224, 179, 65, 0.12); color: #e0b341; border-color: transparent; }

.ledger-empty {
  padding: 1rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  color: var(--ll-text-muted);
  font-size: 0.9rem;
  line-height: 1.5;
}

/* ── Ledger message — floating banner ─────────────────────────────
   OVERLAYS content instead of pushing it down. Top-center, drops in
   with a spring curve, auto-fades. Treated as ephemeral status, not
   a permanent layout element. */
.ledger-message {
  position: fixed;
  top: 5rem;                  /* clear the sticky nav */
  left: 50%;
  z-index: 250;               /* above content, below modals/drawers */
  padding: 0.7rem 1.1rem;
  min-width: 14rem;
  max-width: min(28rem, 90vw);
  border: 1px solid rgba(var(--ll-accent-rgb), 0.35);
  border-radius: var(--ll-radius-md);
  /* Translucent + blur so it floats elegantly over busy panels. */
  background: rgba(20, 26, 36, 0.94);
  -webkit-backdrop-filter: blur(12px) saturate(1.15);
  backdrop-filter: blur(12px) saturate(1.15);
  color: var(--ll-text);
  font-size: 0.88rem;
  font-weight: 500;
  line-height: 1.4;
  margin: 0;
  display: flex;
  align-items: center;
  gap: 0.55rem;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4);
  /* Resting position; entrance/exit animations override this. */
  transform: translateX(-50%);
}
[data-theme="app"] .ledger-message {
  background: rgba(255, 255, 255, 0.96);
  box-shadow: 0 12px 32px rgba(15, 30, 60, 0.18);
}
.ledger-message[hidden] { display: none; }

/* Entrance: drop in from above with a spring. */
.ledger-message.is-shown {
  animation: ledger-msg-in 0.38s cubic-bezier(0.34, 1.4, 0.64, 1) backwards;
}
/* Exit: lift up + fade. */
.ledger-message.is-leaving {
  animation: ledger-msg-out 0.26s ease-out forwards;
  pointer-events: none;
}

.ledger-message::before {
  content: '✓';
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--ll-accent);
  flex-shrink: 0;
}
.ledger-message--error {
  border-color: rgba(239, 68, 68, 0.4);
  background: rgba(40, 14, 14, 0.95);
}
[data-theme="app"] .ledger-message--error {
  background: rgba(255, 245, 245, 0.96);
  border-color: rgba(239, 68, 68, 0.4);
}
.ledger-message--error::before {
  content: '✕';
  color: #ef4444;
}

@keyframes ledger-msg-in {
  from { opacity: 0; transform: translate(-50%, -16px) scale(0.96); }
  to   { opacity: 1; transform: translate(-50%, 0)     scale(1); }
}
@keyframes ledger-msg-out {
  from { opacity: 1; transform: translate(-50%, 0)     scale(1); }
  to   { opacity: 0; transform: translate(-50%, -12px) scale(0.97); }
}
@media (prefers-reduced-motion: reduce) {
  .ledger-message.is-shown,
  .ledger-message.is-leaving { animation: none; }
}

@media (max-width: 760px) {
  .ledger-shell {
    padding: 1.25rem 0.85rem 2rem;
  }

  .ledger-hero {
    grid-template-columns: 1fr;
    align-items: start;
  }

  .ledger-status {
    justify-self: start;
    white-space: normal;
  }

  .ledger-title {
    font-size: 1.55rem;
  }

  .ledger-subtitle {
    font-size: 0.92rem;
  }

  .ledger-summary {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.55rem;
  }

  .ledger-metric {
    min-height: 5.35rem;
    padding: 0.75rem;
  }

  .ledger-metric__label {
    font-size: 0.68rem;
  }

  .ledger-metric__value {
    font-size: 1.12rem;
    overflow-wrap: anywhere;
  }

  .ledger-tabs {
    position: sticky;
    top: 0;
    z-index: 4;
    margin-right: -0.85rem;
    margin-left: -0.85rem;
    padding: 0.25rem 0.85rem 0;
    background: var(--ll-bg);
    /* Wrap all tabs onto multiple rows instead of horizontal scrolling.
       Fixes the "gray bar starts off-left, stops halfway under Borrowers"
       artifact that horizontal scroll created. */
    overflow-x: visible;
    flex-wrap: wrap;
    gap: 0.25rem 0.3rem;
    border-bottom-width: 0;
  }

  .ledger-tab {
    flex: 1 1 calc(33.333% - 0.3rem);
    min-width: 0;
    min-height: 2.5rem;
    padding: 0.45rem 0.4rem;
    font-size: 0.8rem;
    border: 1px solid transparent;
    border-radius: var(--ll-radius-sm);
  }

  .ledger-tab.is-active {
    border-color: var(--ll-accent);
    background: rgba(var(--ll-accent-rgb), 0.08);
  }

  .ledger-panel__head {
    align-items: start;
    flex-direction: column;
    gap: 0.2rem;
  }

  .ledger-panel__meta {
    white-space: normal;
  }

  .ledger-panel.is-active {
    display: flex;
    flex-direction: column;
  }

  .ledger-panel__head {
    order: 1;
  }

  .ledger-panel > .ledger-list,
  .ledger-panel > .ledger-calendar,
  .ledger-panel > .ledger-borrowers-layout,
  .ledger-panel > .ledger-stats-grid,
  .ledger-panel > .ledger-stats-layout {
    order: 2;
  }

  .ledger-panel > .ledger-mobile-capture-actions,
  .ledger-borrowers-layout > .ledger-mobile-capture-actions {
    order: 3;
  }

  .ledger-panel > .ledger-quick-grid,
  .ledger-borrowers-layout > .ledger-capture {
    order: 4;
  }

  .ledger-borrowers-layout {
    display: flex;
    flex-direction: column;
  }

  .ledger-borrower-workspace {
    order: 1;
  }

  .ledger-borrowers-layout > .ledger-mobile-capture-actions {
    order: 2;
  }

  .ledger-borrowers-layout > .ledger-capture {
    order: 3;
  }

  .ledger-mobile-capture-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.45rem;
    margin: 0.75rem 0;
  }

  .ledger-quick-grid,
  .ledger-capture {
    margin-bottom: 0;
  }

  .ledger-capture {
    display: none;
  }

  .ledger-capture.is-open {
    display: block;
  }

  .ledger-row {
    grid-template-columns: 1fr;
    min-height: 4.75rem;
    gap: 0.6rem;
  }

  .ledger-borrower-workspace,
  .ledger-quick-grid,
  .ledger-stats-layout,
  .ledger-form__grid {
    grid-template-columns: 1fr;
  }

  /* Keep the 9 stat tiles in a 3x3 on phone so the eye can scan totals,
     averages, and counts as rows rather than a long vertical stack. */
  .ledger-stats-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.4rem;
  }

  .ledger-stats-grid .ledger-metric {
    min-height: 4.6rem;
    padding: 0.55rem 0.5rem;
  }

  .ledger-stats-grid .ledger-metric__label {
    font-size: 0.6rem;
  }

  .ledger-stats-grid .ledger-metric__value {
    font-size: 0.92rem;
  }

  /* Stack chart cards on phone. */
  .ledger-stats-charts {
    grid-template-columns: 1fr;
    gap: 0.6rem;
  }

  .ledger-status-legend {
    /* Keep single column even on narrow screens — each row now contains a
       proportional mini-bar that needs horizontal headroom. */
    grid-template-columns: 1fr;
  }

  /* U11 mobile: stack quick-add fields, full-width button, 2x2 summary tiles. */
  .ledger-borrower-quickadd {
    grid-template-columns: 1fr;
    gap: 0.45rem;
  }

  .ledger-borrower-quickadd__actions .ledger-action--primary {
    width: 100%;
  }

  .ledger-borrower-summary {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .ledger-borrower-toolbar {
    flex-direction: column;
    align-items: stretch;
    gap: 0.4rem;
  }

  .ledger-search { flex: 1 1 auto; }

  /* U12: phone calendar stays inside the layout — no horizontal scroll. The
     base mobile rules above already shrink the cell sizes; this block keeps
     the count badge compact. */
  .ledger-calendar__count {
    min-height: 1.15rem;
    margin-top: 0.3rem;
    padding: 0.05rem 0.28rem;
  }

  .ledger-form__actions,
  .ledger-row__actions,
  .ledger-detail__actions {
    justify-content: stretch;
  }

  .ledger-action {
    flex: 1 1 8rem;
    min-height: 2.75rem;
    padding: 0.55rem 0.7rem;
  }

  .ledger-row__amount {
    text-align: left;
  }
}

@media (max-width: 420px) {
  .ledger-summary {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .ledger-shell {
    padding-inline: 0.7rem;
  }

  .ledger-tabs {
    margin-right: -0.7rem;
    margin-left: -0.7rem;
    padding-inline: 0.7rem;
  }

  .ledger-form,
  .ledger-detail,
  .ledger-row,
  .ledger-empty,
  .ledger-message {
    padding: 0.75rem;
  }

  .ledger-action {
    flex-basis: 100%;
  }
}

/* ── Tools tab ─────────────────────────────────────────────────────────── */

.ledger-tools-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  padding: 0 0 0.65rem;
  border-bottom: 1px solid var(--ll-border-subtle);
  margin-bottom: 0.85rem;
}

.ledger-tools-tab {
  padding: 0.45rem 1.1rem;
  border-radius: 8px;
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-surface-1);
  color: var(--ll-text-muted);
  font-size: 0.82rem;
  font-weight: 600;
  cursor: pointer;
  font-family: inherit;
  transition: background 0.12s, color 0.12s, border-color 0.12s;
}

.ledger-tools-tab:hover {
  background: var(--ll-surface-2);
  color: var(--ll-text);
  border-color: var(--ll-border);
}

.ledger-tools-tab.is-active {
  background: var(--ll-accent);
  border-color: transparent;
  color: var(--ll-btn-on-accent, #fff);
}

.ledger-tools-section {
  display: none;
}

.ledger-tools-section.is-active {
  display: block;
}

.ledger-tools-coming {
  padding: 2.5rem 1rem;
  color: var(--ll-text-muted);
  text-align: center;
  font-size: 0.9rem;
}

/* ── Notes panel ───────────────────────────────────────────────────────── */

.ledger-notes-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 1rem;
}

.ledger-notes-filters {
  display: flex;
  gap: 0.25rem;
  flex-wrap: wrap;
}

/* Note compose form */
.ledger-note-compose {
  background: var(--ll-surface-2, rgba(255,255,255,0.05));
  border: 1px solid var(--ll-border-subtle);
  border-radius: 0.75rem;
  padding: 0.875rem;
  margin-bottom: 1.25rem;
}

.ledger-note-compose__body {
  width: 100%;
  min-height: 4.5rem;
  resize: vertical;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 0.5rem;
  padding: 0.5rem 0.625rem;
  color: var(--ll-text);
  font-family: inherit;
  font-size: 0.9rem;
  line-height: 1.5;
  box-sizing: border-box;
}

.ledger-note-compose__body:focus {
  outline: 2px solid var(--ll-accent, #5e94ff);
  outline-offset: -1px;
}

.ledger-note-compose__meta {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-top: 0.5rem;
}

.ledger-note-compose__tags {
  flex: 1;
  min-width: 0;
}

.ledger-note-compose__tags input {
  width: 100%;
}

/* Attach-to-loan + template selectors in the note compose row */
.ledger-note-compose__loan,
.ledger-note-compose__template {
  font: inherit;
  font-size: 0.75rem;
  padding: 0.2rem 0.4rem;
  border-radius: var(--ll-radius-sm);
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-bg);
  color: var(--ll-text);
  max-width: 11rem;
}
.ledger-note-card__loan {
  font-size: 0.7rem;
  font-weight: 600;
  color: var(--ll-accent);
  margin-left: 0.5rem;
}
/* Markdown rendered in note bodies */
.ledger-note-card__body code {
  font-family: ui-monospace, "SF Mono", Menlo, monospace;
  font-size: 0.85em;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 3px;
  padding: 0.05rem 0.3rem;
}
.ledger-note-card__body a { color: var(--ll-accent); text-decoration: underline; }

/* Note cards */
.ledger-note-card {
  background: var(--ll-surface-1, var(--ll-bg-soft, rgba(255,255,255,0.05)));
  border: 1px solid var(--ll-border-subtle);
  border-radius: 0.75rem;
  padding: 0.875rem 1rem;
  margin-bottom: 0.625rem;
  position: relative;
}

.ledger-note-card--pinned {
  border-left: 3px solid var(--ll-accent, #5e94ff);
}

.ledger-note-card--archived {
  opacity: 0.6;
}

.ledger-note-card__body {
  white-space: pre-wrap;
  word-break: break-word;
  color: var(--ll-text);
  font-size: 0.9rem;
  line-height: 1.6;
  margin: 0 0 0.5rem;
}

.ledger-note-card__meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.375rem 0.75rem;
  font-size: 0.78rem;
  color: var(--ll-text-muted);
}

.ledger-note-card__tag {
  background: var(--ll-surface-2, rgba(255,255,255,0.08));
  border-radius: 2rem;
  padding: 0.1rem 0.5rem;
  font-size: 0.72rem;
  color: var(--ll-text-muted);
}

.ledger-note-card__actions {
  display: flex;
  gap: 0.375rem;
  flex-wrap: wrap;
  margin-top: 0.625rem;
  padding-top: 0.5rem;
  border-top: 1px solid var(--ll-border-subtle);
}

/* Note edit inline */
.ledger-note-edit {
  margin-top: 0.5rem;
}

.ledger-note-edit textarea {
  width: 100%;
  min-height: 3rem;
  resize: vertical;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 0.5rem;
  padding: 0.4rem 0.6rem;
  color: var(--ll-text);
  font-family: inherit;
  font-size: 0.9rem;
  line-height: 1.5;
  box-sizing: border-box;
}

.ledger-note-edit__actions {
  display: flex;
  gap: 0.375rem;
  margin-top: 0.375rem;
}

@media (max-width: 520px) {
  .ledger-note-compose__meta {
    flex-direction: column;
    align-items: stretch;
  }

  .ledger-note-compose__meta .ledger-action {
    width: 100%;
    justify-content: center;
  }
}

/* ── Currency converter (U22) ─────────────────────────────────────────── */

/* ── Currency Converter (redesigned) ────────────────────────────────────── */

.ledger-cc {
  display: grid;
  grid-template-columns: 1fr 2.75rem 1fr;
  grid-template-rows: auto auto;
  column-gap: 0.75rem;
  align-items: center;
  max-width: 500px;
  margin-bottom: 1.5rem;
}
.ledger-cc__card {
  background: var(--ll-bg-panel);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 12px;
  padding: 1rem 1.25rem 0.9rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.ledger-cc__label {
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
}
.ledger-cc__input {
  font-size: 1.85rem;
  font-weight: 300;
  color: var(--ll-text);
  background: none;
  border: none;
  outline: none;
  width: 100%;
  padding: 0;
  font-variant-numeric: tabular-nums;
  -moz-appearance: textfield;
}
.ledger-cc__input::-webkit-outer-spin-button,
.ledger-cc__input::-webkit-inner-spin-button { -webkit-appearance: none; }
.ledger-cc__output {
  font-size: 1.85rem;
  font-weight: 300;
  color: var(--ll-accent);
  font-variant-numeric: tabular-nums;
  min-height: 2.6rem;
  display: flex;
  align-items: center;
  word-break: break-all;
}
.ledger-cc__pick {
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--ll-text);
  background: var(--ll-surface-1);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 6px;
  padding: 0.3rem 0.5rem;
  cursor: pointer;
  width: fit-content;
}
.ledger-cc__swap {
  font-size: 1.25rem;
  background: var(--ll-surface-2);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 50%;
  width: 2.75rem;
  height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--ll-accent);
  transition: background 0.1s;
  flex-shrink: 0;
  align-self: center;
}
.ledger-cc__swap:hover { background: rgba(var(--ll-accent-rgb), 0.12); }
.ledger-cc__meta {
  grid-column: 1 / -1;
  font-size: 0.78rem;
  color: var(--ll-text-muted);
  text-align: center;
  padding: 0.5rem 0 0;
  min-height: 1.8rem;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  flex-wrap: wrap;
}
.ledger-cc__warning {
  color: var(--ll-danger, #e05252);
  font-size: 0.78rem;
}
.ledger-cc__loading { opacity: 0.6; }
/* Rate reference table */
.ledger-cc { max-width: none; }
.ledger-cc-table { margin-top: 1.5rem; }
.ledger-cc-table__heading {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ll-text-muted);
  margin: 0 0 0.6rem;
}
.ledger-cc-table__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
  gap: 0.4rem;
}
.ledger-cc-table__row {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  padding: 0.5rem 0.65rem;
  background: var(--ll-surface-2, rgba(255,255,255,0.04));
  border: 1px solid var(--ll-border-subtle);
  border-radius: 8px;
  cursor: pointer;
  text-align: left;
  transition: border-color 0.1s, background 0.1s;
}
.ledger-cc-table__row:hover {
  border-color: var(--ll-accent, #5e94ff);
  background: rgba(var(--ll-accent-rgb, 94,148,255), 0.07);
}
.ledger-cc-table__cur {
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--ll-text);
}
.ledger-cc-table__rate {
  font-size: 0.78rem;
  color: var(--ll-accent, #5e94ff);
  font-variant-numeric: tabular-nums;
}
.ledger-cc-table__source {
  font-size: 0.68rem;
  color: var(--ll-text-muted);
  margin: 0.6rem 0 0;
  opacity: 0.6;
}
@media (max-width: 420px) {
  .ledger-cc {
    grid-template-columns: 1fr 2.25rem 1fr;
    column-gap: 0.5rem;
  }
  .ledger-cc__input,
  .ledger-cc__output { font-size: 1.4rem; }
}

.ledger-currency-section { margin-bottom: 2rem; }
.ledger-currency-hint {
  margin: 0 0 0.875rem;
  font-size: 0.85rem;
  color: var(--ll-text-muted);
  line-height: 1.5;
}

.ledger-currency-rate-form {
  margin-bottom: 1rem;
}

.ledger-currency-rate-row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 0.5rem;
  margin-bottom: 0.5rem;
}

.ledger-currency-rate-select {
  padding: 0.45rem 0.6rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: 0.45rem;
  background: var(--ll-bg);
  color: var(--ll-text);
  font-size: 0.875rem;
  min-width: 5.5rem;
}

.ledger-currency-rate-field {
  flex: 1 1 7rem;
  min-width: 7rem;
}

.ledger-currency-rate-actions {
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}

.ledger-currency-rate-card {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 0.625rem 0.875rem;
  background: var(--ll-surface-1, #fff);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 0.625rem;
  margin-bottom: 0.5rem;
}

.ledger-currency-rate-card__label {
  font-size: 0.9rem;
  font-weight: 500;
  color: var(--ll-text);
  font-variant-numeric: tabular-nums;
}

.ledger-currency-rate-card__updated {
  font-size: 0.75rem;
  color: var(--ll-text-muted);
}

.ledger-currency-rate-card__actions {
  display: flex;
  gap: 0.375rem;
  flex-shrink: 0;
}

.ledger-currency-rate-card__btn {
  padding: 0.2rem 0.55rem;
  font-size: 0.78rem;
  border-radius: 0.3rem;
  border: 1px solid var(--ll-border-subtle);
  background: transparent;
  color: var(--ll-text-muted);
  cursor: pointer;
  transition: color 0.12s, background 0.12s;
}

.ledger-currency-rate-card__btn:hover {
  background: var(--ll-surface-2);
  color: var(--ll-text);
}

.ledger-currency-rate-card__btn--danger:hover {
  background: #fee2e2;
  color: #b91c1c;
  border-color: #fca5a5;
}

@media (max-width: 520px) {
  .ledger-currency-rate-row {
    flex-direction: column;
    align-items: stretch;
  }
  .ledger-currency-rate-select {
    width: 100%;
  }
  .ledger-currency-arrow,
  .ledger-currency-eq {
    display: none;
  }
}

/* ── Standard Calculator (U21 v2) ───────────────────────────────────────── */

.ledger-stdcalc {
  background: var(--ll-bg-panel);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 12px;
  overflow: hidden;
  max-width: 300px;
  user-select: none;
}

.ledger-stdcalc__display {
  background: var(--ll-surface-1);
  padding: 0.85rem 1.1rem 0.75rem;
  text-align: right;
  min-height: 4.5rem;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 0.1rem;
}

.ledger-stdcalc__expr {
  font-size: 0.75rem;
  color: var(--ll-text-muted);
  min-height: 1em;
  font-variant-numeric: tabular-nums;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ledger-stdcalc__val {
  font-size: 2.2rem;
  font-weight: 300;
  color: var(--ll-text);
  line-height: 1;
  font-variant-numeric: tabular-nums;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ledger-stdcalc__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1px;
  background: var(--ll-border-subtle);
}

.ledger-stdcalc__key {
  padding: 1rem 0;
  border: none;
  background: var(--ll-bg-panel);
  color: var(--ll-text);
  font-size: 1.05rem;
  font-weight: 400;
  cursor: pointer;
  font-family: inherit;
  transition: background 0.07s;
  line-height: 1;
}

.ledger-stdcalc__key:hover  { background: var(--ll-surface-2); }
.ledger-stdcalc__key:active { opacity: 0.7; }

.ledger-stdcalc__key--fn {
  background: var(--ll-surface-2);
  color: var(--ll-text);
  font-size: 0.88rem;
  font-weight: 500;
}
.ledger-stdcalc__key--fn:hover { background: var(--ll-border-subtle); }

.ledger-stdcalc__key--op {
  background: rgba(var(--ll-accent-rgb), 0.12);
  color: var(--ll-accent);
  font-size: 1.2rem;
  font-weight: 500;
}
.ledger-stdcalc__key--op:hover  { background: rgba(var(--ll-accent-rgb), 0.2); }
.ledger-stdcalc__key--op.is-active {
  background: var(--ll-accent);
  color: var(--ll-btn-on-accent, #fff);
}

.ledger-stdcalc__key--zero {
  grid-column: span 2;
  text-align: left;
  padding-left: 1.4rem;
}

.ledger-stdcalc__key--eq {
  background: var(--ll-accent);
  color: var(--ll-btn-on-accent, #fff);
  font-size: 1.4rem;
  font-weight: 400;
}
.ledger-stdcalc__key--eq:hover { opacity: 0.88; background: var(--ll-accent); }

/* ── Loan calculator (collapsible below standard calc) ──────────────────── */

.ledger-loancalc {
  margin-top: 1rem;
  max-width: 300px;
}

.ledger-loancalc__toggle {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--ll-text-muted);
  padding: 0.55rem 0.75rem;
  background: var(--ll-surface-1);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 8px;
  user-select: none;
  transition: color 0.12s, background 0.12s;
}
.ledger-loancalc__toggle:hover { color: var(--ll-text); background: var(--ll-surface-2); }
.ledger-loancalc__toggle::-webkit-details-marker { display: none; }
.ledger-loancalc__toggle::after { content: '▾'; font-size: 0.65rem; }
details[open] .ledger-loancalc__toggle::after { content: '▴'; }

.ledger-loancalc__body {
  padding-top: 0.75rem;
  display: flex;
  flex-direction: column;
  gap: 0.65rem;
}

.ledger-loancalc__modes {
  display: flex;
  gap: 0.3rem;
}

.ledger-loancalc__mode {
  flex: 1;
  padding: 0.38rem 0;
  border-radius: 6px;
  border: 1px solid var(--ll-border-subtle);
  background: none;
  color: var(--ll-text-muted);
  font-size: 0.78rem;
  font-weight: 600;
  cursor: pointer;
  font-family: inherit;
  transition: background 0.1s, color 0.1s;
}
.ledger-loancalc__mode:hover { background: var(--ll-surface-2); color: var(--ll-text); }
.ledger-loancalc__mode.is-active {
  background: var(--ll-accent);
  border-color: transparent;
  color: var(--ll-btn-on-accent, #fff);
}

.ledger-loancalc__panel { display: none; }
.ledger-loancalc__panel.is-active { display: flex; flex-direction: column; gap: 0.6rem; }

.ledger-loancalc__desc {
  margin: 0;
  font-size: 0.73rem;
  color: var(--ll-text-muted);
}

.ledger-loancalc__fields {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  gap: 0.45rem;
}

.ledger-loancalc__form { display: contents; }

.ledger-loancalc__result {
  padding: 0.7rem 0.85rem;
  background: var(--ll-surface-1);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 8px;
}

/* Shared result rows (reused by loan calc results) */
.ledger-calc-result__row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 0.25rem 0;
  font-size: 0.88rem;
  color: var(--ll-text-muted);
  border-bottom: 1px solid var(--ll-border-subtle);
}
.ledger-calc-result__row:last-of-type { border-bottom: none; }
.ledger-calc-result__row--primary {
  color: var(--ll-accent);
  font-weight: 700;
  font-size: 1.1rem;
  padding: 0.4rem 0;
}
.ledger-calc-result__row--primary .ledger-calc-result__label {
  color: var(--ll-text);
  font-size: 0.88rem;
}
.ledger-calc-result__label { margin-right: 1rem; }
.ledger-calc-result__value { font-variant-numeric: tabular-nums; }
.ledger-calc-result__apply {
  margin-top: 0.75rem;
  padding-top: 0.75rem;
  border-top: 1px solid var(--ll-border-subtle);
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}

/* U26 — Settings drawer */
.ledger-hero__controls {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.ledger-settings-btn {
  background: none;
  border: 1px solid var(--ll-border-subtle, rgba(255,255,255,0.12));
  color: var(--ll-text-secondary, #aaa);
  cursor: pointer;
  border-radius: 50%;
  width: 2rem;
  height: 2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.1rem;
  line-height: 1;
  padding: 0;
  transition: color 0.15s, border-color 0.15s;
  flex-shrink: 0;
}
.ledger-settings-btn:hover {
  color: var(--ll-accent);
  border-color: var(--ll-accent);
}

.ledger-settings-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 200;
}

/* ── Settings drawer — quality redesign ──────────────────────────
   Shares chassis with .ledger-inbox-drawer (header/close/title).
   Same surface contrast, light-theme support, polished toggle +
   select controls, breathing-room layout. */
.ledger-settings-drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(420px, 96vw);
  /* Lift surface above the page (matches inbox drawer). */
  background: var(--ll-bg-soft);
  border-left: 1px solid var(--ll-border-subtle);
  z-index: 201;
  display: flex;
  flex-direction: column;
  box-shadow: -8px 0 32px rgba(0, 0, 0, 0.45);
  overflow-y: auto;
}
[data-theme="app"] .ledger-settings-drawer {
  background: #ffffff;
  box-shadow: -8px 0 32px rgba(15, 30, 60, 0.18);
}
.ledger-settings-drawer[hidden] {
  display: none;
}

.ledger-settings-drawer__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.1rem 1.25rem 0.85rem;
  border-bottom: 1px solid var(--ll-border-subtle);
  flex-shrink: 0;
}

.ledger-settings-drawer__title {
  font-size: 1.05rem;
  font-weight: 600;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--ll-text);
}

/* Circular close button — matches the bell/cog visual rhythm. */
.ledger-settings-drawer__close {
  background: transparent;
  border: 1px solid transparent;
  color: var(--ll-text-muted);
  cursor: pointer;
  font-size: 1.25rem;
  line-height: 1;
  width: 2rem;
  height: 2rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  transition: background-color 0.12s, color 0.12s, border-color 0.12s;
}
.ledger-settings-drawer__close:hover,
.ledger-settings-drawer__close:focus-visible {
  background: rgba(var(--ll-accent-rgb), 0.08);
  color: var(--ll-accent);
  border-color: rgba(var(--ll-accent-rgb), 0.25);
  outline: none;
}

.ledger-settings-form {
  padding: 1.1rem 1.25rem 1.5rem;
  display: flex;
  flex-direction: column;
  gap: 1.1rem;
}

/* Each row is now its own visual unit — a subtle card so toggles
   and selects feel grouped with their label/description. */
.ledger-settings-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.85rem 1rem;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  transition: border-color 0.12s;
}
[data-theme="app"] .ledger-settings-row { background: #fbfcfe; }
.ledger-settings-row:hover {
  border-color: rgba(var(--ll-accent-rgb), 0.35);
}

.ledger-settings-row__text {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  flex: 1;
  min-width: 0;
}

.ledger-settings-row__label {
  font-size: 0.92rem;
  font-weight: 600;
  color: var(--ll-text);
  letter-spacing: -0.005em;
}

.ledger-settings-row__desc {
  font-size: 0.8rem;
  color: var(--ll-text);
  opacity: 0.7;
  line-height: 1.45;
}

/* Toggle switch — bigger, smoother, hover affordance on the track */
.ledger-settings-toggle {
  position: relative;
  flex-shrink: 0;
  width: 2.85rem;
  height: 1.55rem;
  cursor: pointer;
  margin-top: 0.15rem;
}
.ledger-settings-toggle input {
  opacity: 0;
  width: 0;
  height: 0;
  position: absolute;
}
.ledger-settings-toggle__track {
  position: absolute;
  inset: 0;
  background: var(--ll-border-subtle);
  border: 1px solid transparent;
  border-radius: 9999px;
  transition: background-color 0.2s, border-color 0.15s;
}
.ledger-settings-toggle:hover .ledger-settings-toggle__track {
  border-color: rgba(var(--ll-accent-rgb), 0.35);
}
.ledger-settings-toggle__track::after {
  content: '';
  position: absolute;
  left: 0.2rem;
  top: 50%;
  transform: translateY(-50%);
  width: 1.05rem;
  height: 1.05rem;
  background: #fff;
  border-radius: 50%;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
  transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.ledger-settings-toggle input:checked + .ledger-settings-toggle__track {
  background: var(--ll-accent);
}
.ledger-settings-toggle input:checked + .ledger-settings-toggle__track::after {
  transform: translate(1.25rem, -50%);
}
.ledger-settings-toggle input:focus-visible + .ledger-settings-toggle__track {
  box-shadow: 0 0 0 3px rgba(var(--ll-accent-rgb), 0.22);
}

.ledger-settings-select {
  min-width: 7rem;
  max-width: 12rem;
  flex-shrink: 0;
  padding: 0.45rem 0.65rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  background: var(--ll-bg-soft);
  color: var(--ll-text);
  font-size: 0.86rem;
  font-family: inherit;
  cursor: pointer;
  transition: border-color 0.12s, box-shadow 0.12s;
}
[data-theme="app"] .ledger-settings-select { background: #ffffff; }
.ledger-settings-select:hover { border-color: rgba(var(--ll-accent-rgb), 0.45); }
.ledger-settings-select:focus-visible {
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 3px rgba(var(--ll-accent-rgb), 0.18);
  outline: none;
}

.ledger-settings-form__actions {
  padding-top: 1rem;
  margin-top: 0.25rem;
  border-top: 1px solid var(--ll-border-subtle);
  display: flex;
  justify-content: flex-end;
}

/* ── Privacy blur — verified against actual rendered DOM ────────
   Selectors target classes that the JS renderers ACTUALLY emit
   (loan-table__cell--num, ledger-activity-row__when, etc.),
   verified by grepping the rendered output in app.js. Borrower
   NAMES are intentionally not blurred — you usually need to see
   who you're looking at; only their financial data is private. */
.ledger-app--blur .ledger-metric__value,
.ledger-app--blur .ledger-row__amount,
.ledger-app--blur .ledger-loan-mini__amount,
.ledger-app--blur .ledger-loan-mini__pl,
.ledger-app--blur .ledger-loan-mini__meta,
.ledger-app--blur .ledger-row__meta,
.ledger-app--blur .ledger-currency-result__amount,
/* Loans TABLE — the bulk of the ledger view that was being missed.
   Numeric cells (principal/repayment/balance) + date cells (issued/
   due/repaid). Borrower-name cell intentionally excluded. */
.ledger-app--blur .loan-table__cell--num,
.ledger-app--blur .loan-table__cell--date,
.ledger-app--blur .loan-table__cell--balance,
.ledger-app--blur .loan-table__cell--principal,
.ledger-app--blur .loan-table__col--repayment,
.ledger-app--blur .loan-table__col--balance,
.ledger-app--blur .loan-table__col--issued,
.ledger-app--blur .loan-table__col--due,
.ledger-app--blur .loan-table__col--repaid,
/* Activity log entries — when/summary/detail all contain dates
   and amounts. */
.ledger-app--blur .ledger-activity-row__when,
.ledger-app--blur .ledger-activity-row__summary,
.ledger-app--blur .ledger-activity-row__detail,
.ledger-app--blur .ledger-activity-mini__when,
.ledger-app--blur .ledger-activity-mini__row,
/* Schedule pills (overdue/this-week/later) — counts */
.ledger-app--blur .ledger-schedule-pill__count,
/* Stats panel: legend counts + grid values */
.ledger-app--blur .ledger-status-legend__count,
.ledger-app--blur .ledger-stats-grid .ledger-metric__value,
/* Loans-count badge in the filter toolbar */
.ledger-app--blur .ledger-loans-count,
.ledger-app--blur .ledger-loans-divider__count,
/* Calendar cell day-counts ("3 due") */
.ledger-app--blur .ledger-calendar__count,
/* Color-tokened amount spans (when used inline) */
.ledger-app--blur .ledger-amount--principal,
.ledger-app--blur .ledger-amount--repaid,
.ledger-app--blur .ledger-amount--balance,
.ledger-app--blur .ledger-amount--balance-left,
/* Borrower summary in detail panel — counts + totals */
.ledger-app--blur .ledger-borrower-summary,
/* Borrowers panel rows: outstanding amount + sub-line (active count,
   "overdue" indicator). Display name is intentionally NOT blurred so
   you can still navigate. */
.ledger-app--blur .ll-brow__outstanding,
.ledger-app--blur .ll-brow__sub,
/* Generic catch-all: anything explicitly tagged sensitive */
.ledger-app--blur [data-privacy-blur] {
  filter: blur(8px);
  cursor: pointer;
  transition: filter 0.18s ease-out;
  user-select: none;
}

/* Reveal individual element on hover/focus. */
.ledger-app--blur .ledger-metric__value:hover,
.ledger-app--blur .ledger-row__amount:hover,
.ledger-app--blur .ledger-loan-mini__amount:hover,
.ledger-app--blur .ledger-loan-mini__pl:hover,
.ledger-app--blur .ledger-loan-mini__meta:hover,
.ledger-app--blur .ledger-row__meta:hover,
.ledger-app--blur .ledger-currency-result__amount:hover,
.ledger-app--blur .loan-table__cell--num:hover,
.ledger-app--blur .loan-table__cell--date:hover,
.ledger-app--blur .loan-table__cell--balance:hover,
.ledger-app--blur .loan-table__cell--principal:hover,
.ledger-app--blur .loan-table__col--repayment:hover,
.ledger-app--blur .loan-table__col--balance:hover,
.ledger-app--blur .loan-table__col--issued:hover,
.ledger-app--blur .loan-table__col--due:hover,
.ledger-app--blur .loan-table__col--repaid:hover,
.ledger-app--blur .ledger-activity-row__when:hover,
.ledger-app--blur .ledger-activity-row__summary:hover,
.ledger-app--blur .ledger-activity-row__detail:hover,
.ledger-app--blur .ledger-activity-mini__when:hover,
.ledger-app--blur .ledger-activity-mini__row:hover,
.ledger-app--blur .ledger-schedule-pill__count:hover,
.ledger-app--blur .ledger-status-legend__count:hover,
.ledger-app--blur .ledger-stats-grid .ledger-metric__value:hover,
.ledger-app--blur .ledger-loans-count:hover,
.ledger-app--blur .ledger-loans-divider__count:hover,
.ledger-app--blur .ledger-calendar__count:hover,
.ledger-app--blur .ledger-amount--principal:hover,
.ledger-app--blur .ledger-amount--repaid:hover,
.ledger-app--blur .ledger-amount--balance:hover,
.ledger-app--blur .ledger-amount--balance-left:hover,
.ledger-app--blur .ledger-borrower-summary:hover,
.ledger-app--blur .ll-brow__outstanding:hover,
.ledger-app--blur .ll-brow__sub:hover,
/* Hovering the borrower row reveals both outstanding + sub at once. */
.ledger-app--blur .ll-brow:hover .ll-brow__outstanding,
.ledger-app--blur .ll-brow:hover .ll-brow__sub,
.ledger-app--blur [data-privacy-blur]:hover,
.ledger-app--blur [data-privacy-blur]:focus-within {
  filter: none;
}

/* Hovering the ENTIRE loan row reveals all its cells at once — much
   smoother than hovering each cell individually when you actually
   want to read the row. Apply to <tr> when blur mode is on. */
.ledger-app--blur tr.loan-table__row:hover .loan-table__cell--num,
.ledger-app--blur tr.loan-table__row:hover .loan-table__cell--date,
.ledger-app--blur tr.loan-table__row:hover .loan-table__cell--balance,
.ledger-app--blur tr.loan-table__row:hover .loan-table__cell--principal,
.ledger-app--blur tr.loan-table__row:hover .loan-table__col--repayment,
.ledger-app--blur tr.loan-table__row:hover .loan-table__col--balance,
.ledger-app--blur tr.loan-table__row:hover .loan-table__col--issued,
.ledger-app--blur tr.loan-table__row:hover .loan-table__col--due,
.ledger-app--blur tr.loan-table__row:hover .loan-table__col--repaid {
  filter: none;
}
/* And hovering an activity row reveals its when + summary + detail
   together (otherwise you'd have to hover each piece individually). */
.ledger-app--blur .ledger-activity-row:hover .ledger-activity-row__when,
.ledger-app--blur .ledger-activity-row:hover .ledger-activity-row__summary,
.ledger-app--blur .ledger-activity-row:hover .ledger-activity-row__detail {
  filter: none;
}

/* U25 — Borrower notes section */
.ledger-borrower-notes__empty {
  font-size: 0.85rem;
  margin-bottom: 0.5rem;
}

.ledger-borrower-note-compose {
  margin-top: 0.75rem;
}

.ledger-borrower-notes .ledger-note-card {
  margin-bottom: 0.5rem;
}

/* U24 — Borrower contacts */
.ledger-contact-card {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  padding: 0.4rem 0;
  border-bottom: 1px solid var(--ll-border-subtle);
}

.ledger-contact-card__kind {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ll-accent);
  min-width: 4.5rem;
  flex-shrink: 0;
}

.ledger-contact-card__label {
  font-size: 0.8rem;
  color: var(--ll-text-secondary, #888);
}

.ledger-contact-card__value {
  flex: 1;
  font-size: 0.9rem;
  word-break: break-all;
}

.ledger-contact-card__del {
  margin-left: auto;
  flex-shrink: 0;
  padding: 0.1rem 0.4rem;
  font-size: 0.85rem;
  line-height: 1;
}

.ledger-contact-form {
  margin-top: 0.75rem;
}

/* BID-3 borrower reddit handles */
.ledger-handle-card {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-wrap: wrap;
  padding: 0.4rem 0;
  border-bottom: 1px solid var(--ll-border-subtle);
}
.ledger-handle-card.is-primary .ledger-handle-card__name { font-weight: 600; }
.ledger-handle-card__name { font-size: 0.9rem; word-break: break-all; }
.ledger-handle-card__badge {
  font-size: 0.68rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ll-accent);
  border: 1px solid var(--ll-accent);
  border-radius: 999px;
  padding: 0.05rem 0.45rem;
}
.ledger-handle-card__btn { padding: 0.1rem 0.45rem; font-size: 0.78rem; }
.ledger-handle-card__del {
  margin-left: auto;
  flex-shrink: 0;
  padding: 0.1rem 0.4rem;
  font-size: 0.85rem;
  line-height: 1;
}
.ledger-handle-edit {
  flex-basis: 100%;
  display: flex;
  gap: 0.4rem;
  margin-top: 0.3rem;
}
.ledger-handle-edit input { flex: 1; }
.ledger-handle-form {
  display: flex;
  gap: 0.4rem;
  margin-top: 0.75rem;
}
.ledger-handle-form input { flex: 1; }
.ledger-handles-empty,
.ledger-borrower-section__hint {
  font-size: 0.8rem;
  color: var(--ll-text-secondary, #888);
  margin: 0.2rem 0 0.4rem;
}

.ledger-contact-kind-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  border: none;
  padding: 0;
  margin: 0 0 0.6rem;
}

.ledger-contact-kind-chip {
  cursor: pointer;
}

.ledger-contact-kind-chip input[type="radio"] {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.ledger-contact-kind-chip span {
  display: inline-block;
  padding: 0.22rem 0.65rem;
  border-radius: 999px;
  border: 1px solid var(--ll-border-subtle);
  font-size: 0.72rem;
  font-weight: 500;
  color: var(--ll-text-muted);
  background: transparent;
  cursor: pointer;
  transition: background 0.12s, color 0.12s, border-color 0.12s;
  user-select: none;
  line-height: 1.6;
}

.ledger-contact-kind-chip input[type="radio"]:checked + span {
  background: var(--ll-accent);
  color: #fff;
  border-color: var(--ll-accent);
}

.ledger-contact-kind-chip:hover span {
  border-color: var(--ll-accent);
  color: var(--ll-accent);
}

.ledger-contact-kind-chip input[type="radio"]:checked + span:hover {
  color: #fff;
}

.ledger-contact-form__fields {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
}

.ledger-contact-form__value {
  flex: 1 1 10rem;
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--ll-border);
  border-radius: 6px;
  background: var(--ll-surface);
  color: var(--ll-text);
  font-size: 0.85rem;
  min-width: 0;
}

.ledger-contact-form__label {
  flex: 0 1 8rem;
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--ll-border);
  border-radius: 6px;
  background: var(--ll-surface);
  color: var(--ll-text);
  font-size: 0.85rem;
  min-width: 0;
}

@media (max-width: 520px) {
  .ledger-contact-form__fields {
    flex-direction: column;
    align-items: stretch;
  }
  .ledger-contact-form__value,
  .ledger-contact-form__label {
    width: 100%;
    flex: none;
  }
}

/* U29 — Connections */
.ledger-metric--clickable {
  cursor: pointer;
  transition: border-color 0.12s, box-shadow 0.12s;
}
.ledger-metric--clickable:hover {
  border-color: var(--ll-accent, #5e94ff);
  box-shadow: 0 0 0 2px rgba(94, 148, 255, 0.18);
}

.ledger-status-legend__item--clickable {
  cursor: pointer;
  border-radius: 4px;
  padding: 0.1rem 0.2rem;
  transition: background 0.1s;
}
.ledger-status-legend__item--clickable:hover {
  background: var(--ll-bg-hover, rgba(94, 148, 255, 0.1));
}

.ledger-filter-bar {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.4rem 0.75rem;
  margin-bottom: 0.5rem;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  font-size: 0.8rem;
  color: var(--ll-text-muted);
  text-transform: capitalize;
}

/* ── Loans filter toolbar ─────────────────────────────────────────
   Hosts the borrower-filter dropdown + show-closed toggle + clear.
   Toolbar now sits in a subtle panel-y strip so the controls feel
   grouped rather than free-floating. */
.ledger-loans-filter-toolbar {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 0.75rem;
  flex-wrap: wrap;
  padding: 0.5rem 0.75rem;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
}
[data-theme="app"] .ledger-loans-filter-toolbar {
  background: #fbfcfe;
}
.ledger-loans-count {
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--ll-text-muted);
  white-space: nowrap;
  margin-right: auto;
  letter-spacing: 0.02em;
}

/* Borrower filter dropdown — upgraded from the default <select> look.
   Wider, taller hit area, custom chevron, focus ring, hover state.
   The native <select> can't be fully styled (especially the open
   menu in some browsers) but the rest button presentation now feels
   intentional. */
.ledger-filter-select {
  flex: 0 1 14rem;
  min-width: 9rem;
  padding: 0.45rem 2rem 0.45rem 0.85rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background-color: var(--ll-bg);
  color: var(--ll-text);
  font-size: 0.86rem;
  font-weight: 500;
  font-family: inherit;
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  /* Custom chevron — uses currentColor so it tracks theme/text color. */
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat: no-repeat;
  background-position: right 0.7rem center;
  background-size: 0.75rem;
  transition: border-color 0.12s, box-shadow 0.12s, background-color 0.12s;
}
[data-theme="app"] .ledger-filter-select {
  background-color: #ffffff;
}
.ledger-filter-select:hover {
  border-color: rgba(var(--ll-accent-rgb), 0.45);
}
.ledger-filter-select:focus,
.ledger-filter-select:focus-visible {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 3px rgba(var(--ll-accent-rgb), 0.2);
}
/* Better-looking option list in dropdowns where the browser supports
   styling them (Chrome/Edge honor this; Firefox falls back to native). */
.ledger-filter-select option {
  background: var(--ll-bg-soft);
  color: var(--ll-text);
  padding: 0.4rem 0.6rem;
}
[data-theme="app"] .ledger-filter-select option {
  background: #ffffff;
}

.ledger-filter-bar__clear {
  margin-left: auto;
  padding: 0.15rem 0.5rem;
  border: none;
  border-radius: 4px;
  background: transparent;
  color: var(--ll-text-muted);
  font-size: 0.8rem;
  cursor: pointer;
}
.ledger-filter-bar__clear:hover:not(:disabled) {
  background: var(--ll-bg-hover, rgba(94, 148, 255, 0.1));
  color: var(--ll-text);
}
.ledger-filter-bar__clear:disabled {
  opacity: 0.35;
  cursor: default;
}

/* U47 — active-first loans: divider + desaturated closed rows */
.ledger-loans-divider {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.45rem 0.1rem;
  margin-top: 0.6rem;
  border-top: 1px solid var(--ll-border-subtle);
}
.ledger-loans-divider__dot {
  width: 0.48rem;
  height: 0.48rem;
  border-radius: 50%;
  flex-shrink: 0;
  background: var(--ll-border-subtle);
}
.ledger-loans-divider__label {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--ll-text-muted);
}
.ledger-loans-divider__count {
  font-size: 0.65rem;
  font-weight: 700;
  color: var(--ll-text-muted);
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 99px;
  padding: 0.05rem 0.38rem;
}
.ledger-loans-divider--defaulted .ledger-loans-divider__dot { background: #d36a6a; }
.ledger-loans-divider--paid .ledger-loans-divider__dot { background: #4ec38a; }
.ledger-loans-divider--closed .ledger-loans-divider__dot { background: var(--ll-text-muted); opacity: 0.45; }

.ledger-row--closed {
  opacity: 0.55;
  filter: saturate(0.35);
}

/* Overdue active loan — red left border + faint bg tint */
.ledger-row--loan-overdue.ledger-row--loan-status-active {
  border-left-color: #d36a6a;
  background: rgba(211, 106, 106, 0.03);
}

/* Overdue indicator in loan card meta */
.ledger-loan__overdue-label {
  color: #d36a6a;
  font-weight: 700;
}

/* Balance remaining in amounts column */
.ledger-amount--balance-left {
  font-size: 0.72rem;
  color: var(--ll-text-muted);
  font-variant-numeric: tabular-nums;
}

.ledger-action--sm {
  padding: 0.2rem 0.55rem;
  font-size: 0.72rem;
}

/* U31 — Repayment allocation panel */
.ledger-alloc-panel {
  margin: 0.35rem 0 0;
  font-size: 0.78rem;
}
.ledger-alloc-panel__summary {
  cursor: pointer;
  color: var(--ll-text-muted);
  user-select: none;
  list-style: none;
  display: flex;
  align-items: center;
  gap: 0.3rem;
}
.ledger-alloc-panel__summary::before {
  content: '▸';
  font-size: 0.65rem;
  transition: transform 0.15s;
}
.ledger-alloc-panel[open] .ledger-alloc-panel__summary::before {
  transform: rotate(90deg);
}
.ledger-alloc-panel__body {
  margin-top: 0.35rem;
  padding: 0.4rem 0.5rem;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 6px;
}
.ledger-alloc-panel__loading,
.ledger-alloc-panel__empty {
  color: var(--ll-text-muted);
  font-size: 0.76rem;
}
.ledger-alloc-row {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.2rem 0;
}
.ledger-alloc-row + .ledger-alloc-row {
  border-top: 1px solid var(--ll-border-subtle);
}
.ledger-alloc-row__due {
  flex: 1;
  color: var(--ll-text-muted);
}
.ledger-alloc-row__amount {
  font-weight: 600;
  color: var(--ll-text);
}

/* U31/U32 — Repayments panel head with export button */
.ledger-panel__head-actions {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  flex-wrap: wrap;
}

/* U33 — Year view + iCal */
.ledger-view-toggle {
  display: inline-flex;
  border: 1px solid var(--ll-border);
  border-radius: 6px;
  overflow: hidden;
}
.ledger-view-toggle__btn {
  padding: 0.2rem 0.6rem;
  font-size: 0.75rem;
  border: none;
  background: transparent;
  color: var(--ll-text-muted);
  cursor: pointer;
  transition: background 0.1s, color 0.1s;
}
.ledger-view-toggle__btn + .ledger-view-toggle__btn {
  border-left: 1px solid var(--ll-border);
}
.ledger-view-toggle__btn.is-active {
  background: var(--ll-accent, #5e94ff);
  color: #fff;
}

.ledger-year-view {
  padding: 0.5rem 0;
}
.ledger-year-view__title {
  margin: 0 0 0.75rem;
  font-size: 1rem;
  font-weight: 700;
  color: var(--ll-text-muted);
  text-align: center;
}
.ledger-year-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.5rem;
}
.ledger-year-tile {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  padding: 0.55rem 0.65rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  cursor: pointer;
  text-align: left;
  transition: border-color 0.12s;
}
.ledger-year-tile:hover {
  border-color: var(--ll-accent, #5e94ff);
}
.ledger-year-tile--overdue {
  border-color: var(--ll-danger, #d36a6a);
}
.ledger-year-tile__name {
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--ll-text);
  margin-bottom: 0.25rem;
}
.ledger-year-tile__counts {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
}
.ledger-year-tile__count {
  font-size: 0.68rem;
  color: var(--ll-text-muted);
}
.ledger-year-tile__count--overdue {
  color: var(--ll-danger, #d36a6a);
  font-weight: 600;
}
.ledger-year-tile__count--empty {
  opacity: 0.4;
}

@media (min-width: 600px) {
  .ledger-year-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

/* U34 — Installment templates */
.ledger-instl-section {
  margin-bottom: 1.5rem;
}
.ledger-instl-section__title {
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
  margin-bottom: 0.75rem;
}
.ledger-instl-form .ledger-field--wide {
  grid-column: 1 / -1;
}
.ledger-instl-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 0.6rem 0.75rem;
  border-radius: 6px;
  background: var(--ll-surface-2, rgba(255,255,255,0.04));
  margin-bottom: 0.4rem;
}
.ledger-instl-row__info {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-width: 0;
}
.ledger-instl-row__name {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--ll-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ledger-instl-row__meta {
  font-size: 0.72rem;
  color: var(--ll-text-muted);
}
.ledger-action--danger {
  color: var(--ll-danger, #d36a6a);
  border-color: currentColor;
}
.ledger-action--danger:hover {
  background: rgba(211,106,106,0.12);
}

.ledger-tools-divider {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin: 1.25rem 0 0.75rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--ll-border, rgba(255,255,255,0.1));
}
.ledger-tools-divider__label {
  font-size: 0.65rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--ll-text-muted);
  white-space: nowrap;
}

/* U27 — Snippets */
.ledger-snippet-compose {
  margin-bottom: 1.25rem;
}
.ledger-snippet-compose__title,
.ledger-snippet-compose__body {
  width: 100%;
  margin-bottom: 0.4rem;
  font-size: 0.85rem;
  padding: 0.45rem 0.6rem;
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  color: var(--ll-text);
  font-family: inherit;
  transition: border-color 100ms, box-shadow 100ms;
}
.ledger-snippet-compose__title:focus-visible,
.ledger-snippet-compose__body:focus-visible {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 3px rgba(var(--ll-accent-rgb), 0.14);
}
.ledger-snippet-compose__body { resize: vertical; }
.ledger-snippet-compose__actions {
  display: flex;
  justify-content: flex-end;
}
#ledger-snippets-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 0.65rem;
}

.ledger-snippet-row {
  border-radius: 6px;
  background: var(--ll-surface-2, rgba(255,255,255,0.04));
  border: 1px solid var(--ll-border-subtle);
  overflow: hidden;
}
.ledger-snippet-row__view {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 0.65rem 0.75rem;
}
.ledger-snippet-row__info {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  min-width: 0;
  flex: 1;
}
.ledger-snippet-row__title {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--ll-text);
}
.ledger-snippet-row__body {
  font-size: 0.75rem;
  color: var(--ll-text-muted);
  white-space: pre-wrap;
  word-break: break-word;
}
.ledger-snippet-row__actions {
  display: flex;
  gap: 0.35rem;
  flex-shrink: 0;
}
.ledger-snippet-row__edit-form {
  padding: 0.65rem 0.75rem;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  background: var(--ll-surface-2, rgba(255,255,255,0.04));
}
.ledger-snippet-row__edit-form[hidden] { display: none; }
.ledger-snippet-edit__title,
.ledger-snippet-edit__body {
  width: 100%;
  font-size: 0.85rem;
  padding: 0.4rem 0.5rem;
  background: var(--ll-input-bg, rgba(255,255,255,0.07));
  border: 1px solid var(--ll-border, rgba(255,255,255,0.12));
  border-radius: 5px;
  color: var(--ll-text);
  font-family: inherit;
  resize: vertical;
}
.ledger-snippet-row__edit-actions {
  display: flex;
  gap: 0.4rem;
  justify-content: flex-end;
}
/* Snippet insert bar (in Notes compose) */
.ledger-snippet-insert-bar {
  margin-bottom: 0.4rem;
}
.ledger-snippet-insert-toggle {
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  color: var(--ll-text-muted);
  font-size: 0.72rem;
  font-weight: 600;
  font-family: inherit;
  padding: 0.2rem 0.55rem;
  min-height: 1.8rem;
  cursor: pointer;
  transition: border-color 100ms, color 100ms;
}
.ledger-snippet-insert-toggle:hover {
  color: var(--ll-text);
  border-color: rgba(var(--ll-accent-rgb), 0.5);
}
.ledger-snippet-insert-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  margin-top: 0.4rem;
}
.ledger-snippet-insert-list[hidden] { display: none; }
.ledger-snippet-insert-item {
  font-size: 0.75rem;
  font-weight: 500;
  padding: 0.2rem 0.55rem;
  border-radius: var(--ll-radius-sm);
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  color: var(--ll-text-muted);
  cursor: pointer;
  text-align: left;
  transition: border-color 100ms, color 100ms;
}
.ledger-snippet-insert-item:hover {
  color: var(--ll-text);
  border-color: rgba(var(--ll-accent-rgb), 0.5);
}
.ledger-snippet-insert-item__title {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 140px;
  display: block;
}
.ledger-snippet-insert-empty {
  font-size: 0.78rem;
  color: var(--ll-text-muted);
  padding: 0.25rem 0;
}

/* ── Payment methods manager (settings drawer) ────────────────────
   Compact list of saved methods with kind badge, label, handle, and
   star/edit/delete actions. Matches the inbox-drawer card visual. */
.ledger-pm-manager {
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
  margin-top: 0.25rem;
}
.ledger-pm-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.45rem;
}
.ledger-pm-empty {
  font-size: 0.82rem;
  color: var(--ll-text-muted);
  padding: 0.85rem 1rem;
  text-align: center;
  background: var(--ll-bg);
  border: 1px dashed var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
}
[data-theme="app"] .ledger-pm-empty { background: #fbfcfe; }
.ledger-pm-item {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.65rem 0.8rem;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  transition: border-color 0.12s;
}
[data-theme="app"] .ledger-pm-item { background: #fbfcfe; }
.ledger-pm-item:hover { border-color: rgba(var(--ll-accent-rgb), 0.45); }
.ledger-pm-item.is-default {
  border-color: rgba(var(--ll-accent-rgb), 0.5);
  background: rgba(var(--ll-accent-rgb), 0.05);
}
.ledger-pm-item__body { flex: 1; min-width: 0; }
.ledger-pm-item__label {
  font-size: 0.92rem;
  font-weight: 500;
  color: var(--ll-text);
  line-height: 1.25;
  margin: 0;
}
.ledger-pm-item__actions {
  display: flex;
  gap: 0.25rem;
  flex-shrink: 0;
}
.ledger-pm-item__btn {
  background: transparent;
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text-muted);
  border-radius: 50%;
  width: 1.7rem;
  height: 1.7rem;
  padding: 0;
  font-size: 0.85rem;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background-color 0.12s, color 0.12s, border-color 0.12s;
}
.ledger-pm-item__btn:hover,
.ledger-pm-item__btn:focus-visible {
  border-color: var(--ll-accent);
  color: var(--ll-accent);
  background: rgba(var(--ll-accent-rgb), 0.08);
  outline: none;
}
.ledger-pm-item__btn--star.is-active {
  background: rgba(var(--ll-accent-rgb), 0.18);
  color: var(--ll-accent);
  border-color: rgba(var(--ll-accent-rgb), 0.5);
}
.ledger-pm-item__btn--danger:hover {
  border-color: #ef4444;
  color: #ef4444;
  background: rgba(239, 68, 68, 0.08);
}
.ledger-pm-hint {
  margin: 0;
  font-size: 0.75rem;
  color: var(--ll-text-muted);
  font-style: italic;
}

/* U28 — Notification preferences */
.ledger-settings-section-label {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
  margin: 0.5rem 0 0;
  padding: 0;
}
/* Sub-row: visually indented as a child of the row above, less */
/* card weight so the parent setting feels primary. */
.ledger-settings-row--sub {
  margin-left: 1.25rem;
  background: transparent;
  border: 1px dashed var(--ll-border-subtle);
  opacity: 0.9;
}
.ledger-settings-row--sub:hover {
  border-style: solid;
  opacity: 1;
}

/* U35 — Multi-currency roll-up + stats snapshots */
.ledger-rollup-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr));
  gap: 0.5rem;
  margin-bottom: 0.6rem;
}
.ledger-rollup-card {
  padding: 0.65rem 0.85rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
}
.ledger-rollup-card__cur {
  margin: 0 0 0.3rem;
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
}
.ledger-rollup-card__outstanding {
  margin: 0;
  font-size: 1.1rem;
  font-weight: 700;
  color: var(--ll-accent);
  font-variant-numeric: tabular-nums;
}
.ledger-rollup-card__lent {
  margin: 0.12rem 0 0;
  font-size: 0.73rem;
  color: var(--ll-text-muted);
}
.ledger-rollup-card__converted {
  display: block;
  margin-top: 0.3rem;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--ll-text);
}
.ledger-rollup-card__converted--missing {
  color: var(--ll-text-muted);
  font-weight: 400;
}
.ledger-rollup-card__rate {
  display: block;
  margin-top: 0.06rem;
  font-size: 0.65rem;
  color: var(--ll-text-muted);
}
.ledger-rollup-total {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.5rem 0.1rem;
  border-top: 1px solid var(--ll-border-subtle);
}
.ledger-rollup-total__label {
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ll-text-muted);
}
.ledger-rollup-total__amount {
  font-size: 1.1rem;
  font-weight: 700;
  color: var(--ll-text);
  font-variant-numeric: tabular-nums;
}
.ledger-rollup__note {
  font-size: 0.72rem;
  color: var(--ll-text-muted);
  margin-top: 0.5rem;
}

/* --- U39: Borrower Research --- */
.ledger-research-idle { display: flex; flex-direction: column; gap: 1.25rem; margin-top: 1rem; }
.ledger-research-idle__section { display: flex; flex-direction: column; gap: 0.5rem; }
.ledger-research-idle__label {
  font-size: 0.68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ll-text-muted);
  margin: 0;
}
.ledger-research-idle__chips { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.ledger-research-quick { cursor: pointer; }
.ledger-research-quick:hover { border-color: var(--ll-accent); }
.ledger-research-intro {
  font-size: 0.82rem;
  color: var(--ll-text-muted);
  margin: 0 0 0.75rem;
}
.ledger-research-form { margin-bottom: 1.25rem; }
.ledger-research-input-row { display: flex; gap: 0.5rem; align-items: center; }
.ledger-research-input {
  flex: 1;
  padding: 0.45rem 0.65rem;
  font-size: 0.9rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  background: var(--ll-bg-soft);
  color: var(--ll-text);
  font-family: monospace;
}
.ledger-research-input:focus {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.15);
}

/* Results */
.ledger-research-result { display: flex; flex-direction: column; gap: 0.65rem; }

/* Identity header */
.ledger-research-header {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  padding: 0.75rem 0.85rem;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
}
.ledger-research-header__avatar {
  flex-shrink: 0;
  width: 2.25rem;
  height: 2.25rem;
  border-radius: 50%;
  background: rgba(var(--ll-accent-rgb), 0.1);
  border: 1px solid rgba(var(--ll-accent-rgb), 0.25);
  color: var(--ll-accent);
  font-size: 1rem;
  font-weight: 700;
  font-family: monospace;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 0.05rem;
}
.ledger-research-header__body {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}
.ledger-research-username {
  font-size: 1rem;
  font-weight: 700;
  margin: 0;
  font-family: monospace;
  color: var(--ll-text);
}

/* In-ledger bar */
.ledger-research-in-ledger {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4rem 0.75rem;
  font-size: 0.8rem;
  padding: 0.35rem 0.65rem;
  background: rgba(var(--ll-accent-rgb), 0.06);
  border-left: 2px solid rgba(var(--ll-accent-rgb), 0.4);
  border-radius: 0 var(--ll-radius-sm) var(--ll-radius-sm) 0;
}
.ledger-research-in-ledger__loans { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }

/* Account info card */
.ledger-research-account {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.45rem 0.85rem;
  padding: 0.6rem 0.85rem;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  font-size: 0.82rem;
  color: var(--ll-text-muted);
}
.ledger-research-account--suspended {
  border-color: rgba(211, 106, 106, 0.45);
  background: rgba(211, 106, 106, 0.04);
}
.ledger-research-account__item { display: inline-flex; align-items: baseline; gap: 0.3rem; }
.ledger-research-account__item strong { color: var(--ll-text); font-weight: 600; }
.ledger-research-account__item small { font-size: 0.72rem; opacity: 0.7; }
.ledger-research-account__badge {
  display: inline-flex;
  align-items: center;
  padding: 0.12rem 0.5rem;
  border-radius: 999px;
  font-size: 0.67rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  border: 1px solid transparent;
}
.ledger-research-account__badge--suspended {
  background: rgba(211, 106, 106, 0.15);
  color: #d36a6a;
  border-color: rgba(211, 106, 106, 0.35);
}
.ledger-research-account__badge--ok {
  background: rgba(78, 195, 138, 0.1);
  color: #4ec38a;
  border-color: rgba(78, 195, 138, 0.2);
}
.ledger-research-account__bio {
  width: 100%;
  font-size: 0.78rem;
  font-style: italic;
  opacity: 0.8;
}
.ledger-research-account__source {
  margin-left: auto;
  font-size: 0.67rem;
  opacity: 0.45;
  letter-spacing: 0.02em;
}

/* Section blocks */
.ledger-research-block {
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  padding: 0.75rem 0.85rem;
}
.ledger-research-block__title {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--ll-text-muted);
  margin: 0 0 0.6rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.ledger-research-block__title small {
  font-weight: 400;
  text-transform: none;
  letter-spacing: 0;
  opacity: 0.7;
}
.ledger-research-summary {
  font-size: 0.82rem;
  color: var(--ll-text-muted);
  margin: 0.35rem 0 0;
}
.ledger-research-block--signals { border-color: rgba(var(--ll-accent-rgb), 0.3); }

/* ── Decision Recorder (Research panel) ─────────────────────────────────
   The lender's private notes on a borrower. The form is the primary
   action — keep it dominant and frictionless. The history list is
   secondary context above. */
.ledger-research-decisions {
  /* No accent left-border — clean block. */
}

/* Read-only decision-log mirror inside a borrower's Notes section. Reuses the
   .ledger-decision-* item styles; only the wrapper + heading are new. Hidden
   entirely when the borrower has no recorded decisions (:empty). */
.ledger-borrower-decisions:empty { display: none; }
.ledger-borrower-decisions {
  margin-bottom: 0.85rem;
  padding-bottom: 0.85rem;
  border-bottom: 1px solid var(--ll-border-subtle);
}
.ledger-borrower-decisions__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 0.4rem;
}
.ledger-borrower-decisions__title {
  font-size: 0.7rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--ll-text-muted);
}
.ledger-borrower-decisions__past { margin-top: 0.5rem; }
.ledger-borrower-decisions__past > summary {
  cursor: pointer;
  font-size: 0.75rem;
  color: var(--ll-text-muted);
  list-style: none;
}
.ledger-borrower-decisions__past > summary:hover { color: var(--ll-accent); }

/* Quick-record row — outcome pills (the active outcome filled) + optional note */
.ledger-borrower-decisions__record {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-top: 0.5rem;
}
.ledger-borrower-decisions__record-label {
  font-size: 0.72rem;
  color: var(--ll-text-muted);
}
.ledger-decision-quick {
  font: inherit;
  font-size: 0.72rem;
  font-weight: 600;
  padding: 0.2rem 0.55rem;
  border-radius: var(--ll-radius-pill, 999px);
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-bg);
  color: var(--ll-text-muted);
  cursor: pointer;
  transition: border-color 0.12s, color 0.12s, background 0.12s;
}
.ledger-decision-quick:hover { border-color: rgba(var(--ll-accent-rgb), 0.5); color: var(--ll-text); }
.ledger-decision-quick--lent.is-current     { background: rgba(74, 222, 128, 0.16); border-color: #4ade80; color: #4ade80; }
.ledger-decision-quick--declined.is-current { background: rgba(239, 108, 108, 0.16); border-color: #ef6c6c; color: #ef6c6c; }
.ledger-decision-quick--deferred.is-current { background: rgba(250, 204, 21, 0.16); border-color: #facc15; color: #facc15; }
.ledger-borrower-decisions__note-input {
  flex: 1 1 8rem;
  min-width: 6rem;
  font: inherit;
  font-size: 0.75rem;
  padding: 0.2rem 0.5rem;
  border-radius: var(--ll-radius-sm);
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-bg);
  color: var(--ll-text);
}
.ledger-borrower-decisions__note-input::placeholder { color: var(--ll-text-muted); opacity: 0.6; }

/* History list — past decisions on this borrower */
.ledger-decision-list {
  list-style: none;
  margin: 0.4rem 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
}
.ledger-decision-list--past {
  margin-top: 0.55rem;
  opacity: 0.75;
}
.ledger-decision-item {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
  padding: 0.65rem 0.8rem;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  transition: border-color 0.12s;
}
.ledger-decision-item:hover { border-color: rgba(var(--ll-accent-rgb), 0.4); }
.ledger-decision-item--past { background: transparent; }
.ledger-decision-item--lent     { border-left: 3px solid #4ade80; }
.ledger-decision-item--declined { border-left: 3px solid #ef6c6c; }
.ledger-decision-item--deferred { border-left: 3px solid #facc15; }

.ledger-decision-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.5rem 0.75rem;
  font-size: 0.85rem;
}
.ledger-decision-date {
  font-variant-numeric: tabular-nums;
  color: var(--ll-text-muted);
  font-size: 0.78rem;
  letter-spacing: -0.005em;
}
.ledger-decision-reason {
  font-size: 0.78rem;
  color: var(--ll-text-muted);
}
.ledger-decision-reason::before { content: '· '; opacity: 0.6; }
.ledger-decision-note {
  display: block;
  font-size: 0.88rem;
  color: var(--ll-text);
  background: rgba(var(--ll-accent-rgb), 0.05);
  border-left: 2px solid rgba(var(--ll-accent-rgb), 0.4);
  padding: 0.45rem 0.7rem;
  border-radius: 0 var(--ll-radius-sm) var(--ll-radius-sm) 0;
  line-height: 1.45;
  margin: 0;
}
.ledger-decision-superseded {
  font-size: 0.66rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--ll-text-muted);
  background: rgba(255,255,255,0.05);
  padding: 0.1rem 0.45rem;
  border-radius: var(--ll-radius-pill);
}
[data-theme="app"] .ledger-decision-superseded { background: rgba(0,0,0,0.05); }
.ledger-decision-actions {
  display: flex;
  gap: 0.4rem;
  margin-top: 0.35rem;
  /* Hide actions until the row is hovered/focused — cleaner default state. */
  opacity: 0;
  transition: opacity 0.15s;
}
.ledger-decision-item:hover .ledger-decision-actions,
.ledger-decision-item:focus-within .ledger-decision-actions {
  opacity: 1;
}
@media (hover: none) {
  /* Touch devices have no hover — always show. */
  .ledger-decision-actions { opacity: 1; }
}
.ledger-decision-actions .ledger-decision-btn {
  background: transparent;
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text-muted);
  font: inherit;
  font-family: inherit;
  font-size: 0.74rem;
  padding: 0.3rem 0.65rem;
  border-radius: var(--ll-radius-pill);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  line-height: 1;
  transition: color 0.12s, border-color 0.12s, background 0.12s;
}
.ledger-decision-actions .ledger-decision-btn:hover {
  color: var(--ll-text);
  border-color: rgba(var(--ll-accent-rgb), 0.5);
  background: rgba(var(--ll-accent-rgb), 0.06);
}
.ledger-decision-actions .ledger-decision-btn--danger:hover {
  color: #ef6c6c;
  border-color: rgba(239, 108, 108, 0.5);
  background: rgba(239, 108, 108, 0.08);
}
[data-theme="app"] .ledger-decision-actions .ledger-decision-btn--danger:hover {
  color: #b91c1c;
  border-color: #fecaca;
  background: #fff5f5;
}
.ledger-link--danger { color: #ef6c6c; }
.ledger-decision-past {
  margin-top: 0.7rem;
  font-size: 0.78rem;
}
.ledger-decision-past summary {
  color: var(--ll-text-muted);
  cursor: pointer;
  user-select: none;
  padding: 0.2rem 0;
}

/* ─── New record form — note field is the focal point, not a buried detail */
.ledger-decision-form {
  margin-top: 0.95rem;
  padding: 0.85rem 0.9rem;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  display: grid;
  gap: 0.65rem;
}
[data-theme="app"] .ledger-decision-form { background: #fff; }
.ledger-decision-form__head {
  font-size: 0.68rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--ll-accent);
}
.ledger-decision-form__note {
  width: 100%;
  min-height: 64px;
  resize: vertical;
  background: var(--ll-bg-soft);
  color: var(--ll-text);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  padding: 0.55rem 0.7rem;
  font: inherit;
  font-family: inherit;
  font-size: 0.9rem;
  line-height: 1.45;
  transition: border-color 0.12s, box-shadow 0.12s;
}
.ledger-decision-form__note:focus {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 3px rgba(var(--ll-accent-rgb), 0.18);
}
[data-theme="app"] .ledger-decision-form__note { background: #f6f8fa; }
.ledger-decision-form__row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
}
.ledger-decision-form__reason {
  flex: 1 1 160px;
  min-width: 0;
  background: var(--ll-bg-soft);
  color: var(--ll-text);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  padding: 0.4rem 0.6rem;
  font: inherit;
  font-family: inherit;
  font-size: 0.85rem;
}
.ledger-decision-form__reason:focus {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.15);
}
.ledger-decision-form__outcomes {
  display: flex;
  gap: 0.4rem;
  flex-wrap: wrap;
  margin-left: auto;
}
.ledger-decision-form__outcomes button {
  font-size: 0.85rem;
  padding: 0.45rem 0.9rem;
  font-weight: 500;
}

/* Reason wrapper: dropdown + manage link */
.ledger-decision-form__reason-wrap {
  display: flex;
  gap: 0.3rem;
  align-items: center;
  flex: 1 1 200px;
  min-width: 0;
}
.ledger-decision-form__reason {
  flex: 1;
  min-width: 0;
}
.ledger-decision-form__manage {
  background: transparent;
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text-muted);
  font: inherit;
  font-family: inherit;
  font-size: 0.74rem;
  padding: 0.35rem 0.6rem;
  border-radius: var(--ll-radius-sm);
  cursor: pointer;
  transition: color 0.12s, border-color 0.12s;
  flex-shrink: 0;
}
.ledger-decision-form__manage:hover {
  color: var(--ll-accent);
  border-color: var(--ll-accent);
}

/* Reason manager — small inline panel that slides down beneath the form */
.ledger-decision-reasons {
  margin-top: 0.55rem;
  padding: 0.75rem 0.85rem;
  background: var(--ll-bg-soft);
  border: 1px solid rgba(var(--ll-accent-rgb), 0.35);
  border-radius: var(--ll-radius-sm);
  display: grid;
  gap: 0.6rem;
  animation: ll-reasons-in 0.16s ease-out;
}
@keyframes ll-reasons-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.ledger-decision-reasons__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
}
.ledger-decision-reasons__title {
  font-size: 0.68rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--ll-accent);
}
.ledger-decision-reasons__close {
  background: transparent;
  border: none;
  color: var(--ll-text-muted);
  font: inherit;
  font-size: 1rem;
  cursor: pointer;
  padding: 0 0.3rem;
  line-height: 1;
  opacity: 0.6;
  transition: opacity 0.12s;
}
.ledger-decision-reasons__close:hover { opacity: 1; }
.ledger-decision-reasons__section-title {
  font-size: 0.7rem;
  color: var(--ll-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 0;
}
.ledger-decision-reasons__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}
.ledger-decision-reasons__chip {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  font-size: 0.78rem;
  padding: 0.25rem 0.6rem;
  border-radius: var(--ll-radius-pill);
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text);
}
.ledger-decision-reasons__chip--builtin {
  color: var(--ll-text-muted);
  background: transparent;
}
.ledger-decision-reasons__chip-del {
  background: transparent;
  border: none;
  color: var(--ll-text-muted);
  cursor: pointer;
  padding: 0;
  font: inherit;
  font-size: 0.9rem;
  line-height: 1;
  opacity: 0.6;
  transition: opacity 0.12s, color 0.12s;
}
.ledger-decision-reasons__chip-del:hover {
  opacity: 1;
  color: #ef6c6c;
}
.ledger-decision-reasons__add {
  display: flex;
  gap: 0.4rem;
  align-items: center;
}
.ledger-decision-reasons__input {
  flex: 1;
  min-width: 0;
  background: var(--ll-bg);
  color: var(--ll-text);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  padding: 0.4rem 0.6rem;
  font: inherit;
  font-family: inherit;
  font-size: 0.85rem;
}
.ledger-decision-reasons__input:focus {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.15);
}
[data-theme="app"] .ledger-decision-reasons { background: #fff; }
[data-theme="app"] .ledger-decision-reasons__chip { background: #f6f8fa; }
.ledger-action--ghost {
  background: transparent;
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text);
}
.ledger-action--danger {
  background: rgba(239, 108, 108, 0.08);
  color: #ef6c6c;
  border: 1px solid rgba(239, 108, 108, 0.35);
}
.ledger-action--danger:hover { background: rgba(239, 108, 108, 0.15); }

/* Inline supersede editor (replaces prompt() popup chain) */
.ledger-decision-edit {
  margin-top: 0.55rem;
  padding: 0.65rem 0.75rem;
  background: var(--ll-bg-soft);
  border: 1px solid rgba(var(--ll-accent-rgb), 0.35);
  border-radius: var(--ll-radius-sm);
  display: grid;
  gap: 0.5rem;
  animation: ll-decision-edit-in 0.16s ease-out;
}
@keyframes ll-decision-edit-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.ledger-decision-edit__head {
  font-size: 0.68rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: var(--ll-accent);
}
.ledger-decision-edit__outcomes {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.4rem;
}
.ledger-decision-edit__outcome {
  font: inherit; font-family: inherit;
  cursor: pointer;
  padding: 0.45rem 0.7rem;
  border-radius: var(--ll-radius-sm);
  border: 1px solid var(--ll-border-subtle);
  background: var(--ll-bg);
  color: var(--ll-text);
  font-weight: 500;
  font-size: 0.85rem;
  transition: border-color 0.12s, color 0.12s, background 0.12s;
}
.ledger-decision-edit__outcome:hover { border-color: rgba(var(--ll-accent-rgb), 0.5); }
.ledger-decision-edit__outcome.selected--lent     { border-color: #4ade80; color: #4ade80; background: rgba(74,222,128,0.08); }
.ledger-decision-edit__outcome.selected--declined { border-color: #ef6c6c; color: #ef6c6c; background: rgba(239,108,108,0.08); }
.ledger-decision-edit__outcome.selected--deferred { border-color: #facc15; color: #facc15; background: rgba(250,204,21,0.08); }
.ledger-decision-edit__note {
  background: var(--ll-bg);
  color: var(--ll-text);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  padding: 0.4rem 0.6rem;
  font: inherit;
  font-family: inherit;
  font-size: 0.85rem;
}
.ledger-decision-edit__note:focus {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.18);
}
.ledger-decision-edit__actions {
  display: flex;
  justify-content: flex-end;
  gap: 0.4rem;
}

[data-theme="app"] .ledger-decision-item { background: #fff; }
[data-theme="app"] .ledger-link--danger  { color: #b91c1c; }
[data-theme="app"] .ledger-action--danger {
  color: #b91c1c;
  background: #fef2f2;
  border-color: #fecaca;
}
[data-theme="app"] .ledger-action--danger:hover { background: #fee2e2; }
[data-theme="app"] .ledger-decision-edit { background: #fff; }

/* Activity tables */
.ledger-research-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.79rem;
  margin-top: 0.65rem;
}
.ledger-research-table th {
  text-align: left;
  font-size: 0.67rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ll-text-muted);
  border-bottom: 1px solid var(--ll-border-subtle);
  padding: 0 6px 5px;
}
.ledger-research-table td {
  padding: 5px 6px;
  border-bottom: 1px solid var(--ll-border-subtle);
  vertical-align: top;
}
.ledger-research-table tr:last-child td { border-bottom: none; }
.ledger-research-table tbody tr:hover td { background: rgba(255, 255, 255, 0.025); }
.ledger-research-table td:first-child {
  font-family: monospace;
  font-size: 0.76rem;
  white-space: nowrap;
  color: var(--ll-text-muted);
  opacity: 0.85;
}
.ledger-research-text { max-width: 28rem; word-break: break-word; line-height: 1.45; }
.ledger-research-link { color: var(--ll-accent); text-decoration: none; font-size: 0.75rem; opacity: 0.75; }
.ledger-research-link:hover { text-decoration: underline; opacity: 1; }
.ledger-research-risk--high { background: rgba(220, 38, 38, 0.12); color: #f87171; }
.ledger-research-risk--low  { background: rgba(22, 163, 74, 0.12); color: #4ade80; }
.ledger-chip--neutral { background: rgba(255,255,255,0.07); color: var(--ll-text-muted); }
.ledger-research-communities { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.35rem 0 0.25rem; }

/* Collapsible summary (lending activity + other activity) */
.ledger-research-collapsible__summary,
.ledger-research-other__summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--ll-text-muted);
  user-select: none;
}
.ledger-research-collapsible__summary::-webkit-details-marker,
.ledger-research-other__summary::-webkit-details-marker { display: none; }
.ledger-research-collapsible__summary::before,
.ledger-research-other__summary::before { content: '▶'; font-size: 0.6em; opacity: 0.55; }
details[open] .ledger-research-collapsible__summary::before,
details[open] .ledger-research-other__summary::before { content: '▼'; }
.ledger-research-collapsible__count,
.ledger-research-other__summary small {
  font-weight: 400;
  text-transform: none;
  letter-spacing: 0;
  font-size: 0.72rem;
  opacity: 0.65;
}
.ledger-research-other { cursor: default; }

/* Sub-filter panel */
.ledger-research-sub-filter-wrap {
  margin: 0.5rem 0 0.75rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-soft);
}
.ledger-research-sub-filter-toggle {
  cursor: pointer;
  list-style: none;
  padding: 0.55rem 0.85rem;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
  user-select: none;
  display: flex;
  align-items: center;
  gap: 0.4rem;
}
.ledger-research-sub-filter-toggle::-webkit-details-marker { display: none; }
.ledger-research-sub-filter-toggle::before { content: '▶'; font-size: 0.6em; opacity: 0.55; }
details[open] .ledger-research-sub-filter-toggle::before { content: '▼'; }
.ledger-research-sub-filters {
  padding: 0.5rem 0.85rem 0.75rem;
  border-top: 1px solid var(--ll-border-subtle);
}
.ledger-sub-filter__checkboxes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.75rem;
  margin-bottom: 0.5rem;
}
.ledger-sub-filter__label {
  display: flex;
  align-items: center;
  gap: 0.3rem;
  font-size: 0.8rem;
  color: var(--ll-text-muted);
  cursor: pointer;
}
.ledger-sub-filter__label input { accent-color: var(--ll-accent); cursor: pointer; }
.ledger-sub-filter__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1rem;
  margin-top: 0.35rem;
  font-size: 0.78rem;
}
.ledger-sub-filter__global-editor {
  margin-top: 0.75rem;
  padding-top: 0.75rem;
  border-top: 1px solid var(--ll-border-subtle);
}
.ledger-sub-filter__global-label {
  display: block;
  font-size: 0.75rem;
  color: var(--ll-text-muted);
  margin-bottom: 0.35rem;
}
.ledger-sub-filter__global-textarea {
  width: 100%;
  background: var(--ll-bg, #16181d);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 4px;
  color: inherit;
  font-size: 0.82rem;
  padding: 0.4rem 0.55rem;
  resize: vertical;
  box-sizing: border-box;
}
.ledger-sub-filter__global-actions {
  display: flex;
  gap: 0.75rem;
  align-items: center;
  margin-top: 0.4rem;
  font-size: 0.8rem;
}

/* Misc */
.ledger-link {
  background: none;
  border: none;
  padding: 0;
  color: var(--ll-accent);
  cursor: pointer;
  font-size: inherit;
  text-decoration: underline;
}

/* ── U40 Inbox drawer ─────────────────────────────────────────────────────── */
/* ── Inbox drawer — quality redesign ──────────────────────────────
   Goals: more visible surface contrast, proper card treatment for
   each notification, polished header/filter chips, accessible focus
   states, and breathing room so a single message doesn't read as
   "empty drawer". */
.ledger-inbox-drawer {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  width: min(440px, 96vw);
  /* Lift the surface a notch above the page bg so the drawer reads
     as a distinct layer instead of merging into the dark backdrop. */
  background: var(--ll-bg-soft);
  border-left: 1px solid var(--ll-border-subtle);
  z-index: 201;
  display: flex;
  flex-direction: column;
  box-shadow: -8px 0 32px rgba(0, 0, 0, 0.45);
  overflow: hidden;
}
[data-theme="app"] .ledger-inbox-drawer {
  background: #ffffff;
  box-shadow: -8px 0 32px rgba(15, 30, 60, 0.18);
}
.ledger-inbox-drawer[hidden] { display: none; }

.ledger-inbox-drawer__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1.1rem 1.25rem 0.85rem;
  border-bottom: 1px solid var(--ll-border-subtle);
  flex-shrink: 0;
}
/* Drawer title sits beside an inbox icon to anchor the surface. */
.ledger-inbox-drawer .ledger-settings-drawer__title {
  font-size: 1.05rem;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--ll-text);
}
.ledger-inbox-drawer__head-actions {
  display: flex;
  align-items: center;
  gap: 0.45rem;
}
.ledger-inbox-mark-all {
  background: transparent;
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text);
  border-radius: 999px;
  padding: 0.32rem 0.75rem;
  font-size: 0.74rem;
  font-weight: 500;
  cursor: pointer;
  font-family: inherit;
  white-space: nowrap;
  transition: border-color 0.12s, color 0.12s, background-color 0.12s;
}
.ledger-inbox-mark-all:hover,
.ledger-inbox-mark-all:focus-visible {
  border-color: var(--ll-accent);
  color: var(--ll-accent);
  background: rgba(var(--ll-accent-rgb), 0.06);
  outline: none;
}

.ledger-inbox-filters {
  display: flex;
  gap: 0.3rem;
  padding: 0.85rem 1.25rem 0;
  flex-wrap: wrap;
  flex-shrink: 0;
}
.ledger-inbox-filter {
  background: transparent;
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text-muted);
  border-radius: 999px;
  padding: 0.3rem 0.78rem;
  font-size: 0.74rem;
  font-weight: 500;
  font-family: inherit;
  cursor: pointer;
  transition: background-color 0.12s, color 0.12s, border-color 0.12s;
}
.ledger-inbox-filter:hover,
.ledger-inbox-filter:focus-visible {
  color: var(--ll-text);
  border-color: rgba(var(--ll-accent-rgb), 0.5);
  outline: none;
}
.ledger-inbox-filter--active {
  background: rgba(var(--ll-accent-rgb), 0.14);
  border-color: rgba(var(--ll-accent-rgb), 0.55);
  color: var(--ll-accent);
  font-weight: 600;
}

.ledger-inbox-count {
  padding: 0.85rem 1.25rem 0.35rem;
  font-size: 0.72rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--ll-text-muted);
  flex-shrink: 0;
  margin: 0;
  min-height: 1.4em;
}

.ledger-inbox-list {
  list-style: none;
  padding: 0.25rem 1.25rem 1.5rem;
  margin: 0;
  overflow-y: auto;
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
}

/* Each notification is now a proper CARD with its own surface, not
   a flat row separated by hairlines. Easier on the eye, clearer
   tap target, and gives unread items somewhere to glow. */
.ledger-inbox-item {
  position: relative;
  display: flex;
  align-items: flex-start;
  gap: 0.65rem;
  padding: 0.85rem 0.95rem 0.85rem 1rem;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  transition: border-color 0.12s, background-color 0.12s, transform 0.12s;
}
[data-theme="app"] .ledger-inbox-item { background: #fbfcfe; }
.ledger-inbox-item:hover {
  border-color: rgba(var(--ll-accent-rgb), 0.45);
  transform: translateY(-1px);
}
/* Unread state: subtle accent tint + a category-colored vertical
   bar pinned to the left edge of the card. Reads at a glance. */
.ledger-inbox-item--unread {
  background: rgba(var(--ll-accent-rgb), 0.04);
}
[data-theme="app"] .ledger-inbox-item--unread {
  background: rgba(var(--ll-accent-rgb), 0.06);
}
.ledger-inbox-item--unread::before {
  content: '';
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  border-top-left-radius: var(--ll-radius-md);
  border-bottom-left-radius: var(--ll-radius-md);
  background: var(--ll-accent);
}
.ledger-inbox-item--subscription.ledger-inbox-item--unread::before { background: #fbbf24; }
.ledger-inbox-item--account.ledger-inbox-item--unread::before      { background: #f87171; }
.ledger-inbox-item--product.ledger-inbox-item--unread::before      { background: #4ade80; }

.ledger-inbox-item__content { flex: 1; min-width: 0; }
.ledger-inbox-item__title {
  font-size: 0.92rem;
  font-weight: 600;
  color: var(--ll-text);
  margin: 0 0 0.3rem;
  line-height: 1.3;
  letter-spacing: -0.005em;
}
.ledger-inbox-item--unread .ledger-inbox-item__title { font-weight: 700; }
/* Body copy gets full text color (not muted) for readability —
   muted was washing out against the dark bg. */
.ledger-inbox-item__body {
  font-size: 0.84rem;
  color: var(--ll-text);
  opacity: 0.82;
  margin: 0 0 0.55rem;
  line-height: 1.5;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
}
.ledger-inbox-item__meta {
  display: flex;
  align-items: center;
  gap: 0.55rem;
  font-size: 0.72rem;
  color: var(--ll-text-muted);
  font-variant-numeric: tabular-nums;
}
/* Category pill — bigger, bolder, with bg AND accent text per
   category. Matches the inbox-page rich-message visual rhythm. */
.ledger-inbox-item__cat {
  display: inline-block;
  padding: 0.18rem 0.55rem;
  border-radius: 999px;
  font-size: 0.62rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid transparent;
}
[data-theme="app"] .ledger-inbox-item__cat { background: rgba(0, 0, 0, 0.05); }
.ledger-inbox-item__cat--system {
  color: var(--ll-accent);
  background: rgba(var(--ll-accent-rgb), 0.1);
  border-color: rgba(var(--ll-accent-rgb), 0.25);
}
.ledger-inbox-item__cat--subscription {
  color: #fbbf24;
  background: rgba(251, 191, 36, 0.1);
  border-color: rgba(251, 191, 36, 0.3);
}
.ledger-inbox-item__cat--account {
  color: #f87171;
  background: rgba(248, 113, 113, 0.1);
  border-color: rgba(248, 113, 113, 0.3);
}
.ledger-inbox-item__cat--product {
  color: #4ade80;
  background: rgba(74, 222, 128, 0.1);
  border-color: rgba(74, 222, 128, 0.3);
}

/* Mark-read button: hidden by default, revealed on hover. Cleaner
   default view; the affordance is still discoverable via hover. */
.ledger-inbox-item__mark {
  background: transparent;
  border: 1px solid var(--ll-border-subtle);
  color: var(--ll-text-muted);
  border-radius: 50%;
  width: 1.7rem;
  height: 1.7rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.85rem;
  cursor: pointer;
  flex-shrink: 0;
  margin-top: 0.05rem;
  opacity: 0;
  transition: opacity 0.15s, border-color 0.12s, color 0.12s, background-color 0.12s;
}
.ledger-inbox-item:hover .ledger-inbox-item__mark,
.ledger-inbox-item:focus-within .ledger-inbox-item__mark {
  opacity: 1;
}
.ledger-inbox-item__mark:hover,
.ledger-inbox-item__mark:focus-visible {
  border-color: var(--ll-accent);
  color: var(--ll-accent);
  background: rgba(var(--ll-accent-rgb), 0.08);
  outline: none;
}

/* CTA click-through (U60): accent pill link in the item meta row. The whole
   row is navigable when it carries a CTA, so give it a pointer + slightly
   stronger hover tint to signal it. */
.ledger-inbox-item__cta {
  color: var(--ll-accent);
  font-size: 0.7rem;
  font-weight: 700;
  text-decoration: none;
  padding: 0.16rem 0.6rem;
  border: 1px solid rgba(var(--ll-accent-rgb), 0.35);
  border-radius: var(--ll-radius-pill, 999px);
  background: rgba(var(--ll-accent-rgb), 0.08);
  transition: border-color 0.12s, background-color 0.12s;
}
.ledger-inbox-item__cta:hover,
.ledger-inbox-item__cta:focus-visible {
  border-color: rgba(var(--ll-accent-rgb), 0.6);
  background: rgba(var(--ll-accent-rgb), 0.16);
  outline: none;
}
.ledger-inbox-item--has-cta { cursor: pointer; }
.ledger-inbox-item--has-cta:hover {
  border-color: rgba(var(--ll-accent-rgb), 0.5);
  background: rgba(var(--ll-accent-rgb), 0.05);
}

.ledger-inbox-empty {
  padding: 3rem 1.5rem;
  font-size: 0.88rem;
  color: var(--ll-text-muted);
  text-align: center;
  line-height: 1.5;
}

.ledger-inbox-pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.75rem;
  padding: 0.85rem 1.25rem;
  border-top: 1px solid var(--ll-border-subtle);
  font-size: 0.78rem;
  color: var(--ll-text-muted);
  flex-shrink: 0;
}
.ledger-inbox-pg-info { color: var(--ll-text-muted); font-size: 0.78rem; }

/* ── Color tokens: principal (blue) + repaid (yellow) ─────────────────────── */
.ledger-amount--principal {
  color: var(--ll-accent);
  font-weight: 700;
  font-size: 1rem;
  font-variant-numeric: tabular-nums;
}
.ledger-amount--repaid {
  color: #e0b341;
  font-weight: 600;
  font-size: 0.78rem;
  font-variant-numeric: tabular-nums;
}
.ledger-amount--balance {
  color: var(--ll-text-muted);
  font-weight: 500;
  font-size: 0.76rem;
}

/* ── Loan card upgrades ────────────────────────────────────────────────────── */
.ledger-row--loan {
  border-left-width: 3px;
  padding-left: calc(0.85rem - 1px);
}
.ledger-row--loan-status-active   { border-left-color: var(--ll-accent); }
.ledger-row--loan-status-paid      { border-left-color: #4ec38a; }
.ledger-row--loan-status-defaulted { border-left-color: #d36a6a; }
.ledger-row--loan-status-closed    { border-left-color: var(--ll-border-subtle); }

/* Title row: borrower name left + status chip right */
.ledger-row__headline {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.35rem 0.6rem;
  flex-wrap: wrap;
  margin-bottom: 0.18rem;
}
.ledger-row__headline .ledger-row__title { margin: 0; flex: 1 1 auto; min-width: 0; }

/* Amount column: stacked principal / expected */
.ledger-row__amounts {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.18rem;
  white-space: nowrap;
}

/* ── Borrower list rows ────────────────────────────────────────────────────── */
.ll-brow {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 6rem auto;
  align-items: center;
  gap: 0.5rem 0.85rem;
  padding: 0.55rem 0.85rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  cursor: pointer;
  transition: border-color 0.12s;
}
.ll-brow:hover {
  border-color: rgba(var(--ll-accent-rgb), 0.45);
}
.ll-brow__ident {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  min-width: 0;
}
.ll-brow__avatar {
  width: 1.9rem;
  height: 1.9rem;
  border-radius: 50%;
  background: rgba(var(--ll-accent-rgb), 0.12);
  color: var(--ll-accent);
  font-size: 0.75rem;
  font-weight: 800;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  text-transform: uppercase;
}
.ll-brow__names {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0.06rem;
}
.ll-brow__display {
  font-size: 0.87rem;
  font-weight: 700;
  color: var(--ll-text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ll-brow__sub--overdue {
  color: #d36a6a;
  font-weight: 600;
}
.ll-brow__sig-warn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 0.35rem;
  width: 1.1em;
  height: 1.1em;
  font-size: 0.6rem;
  font-weight: 800;
  line-height: 1;
  border-radius: 50%;
  background: #e53935;
  color: #fff;
  vertical-align: middle;
  cursor: default;
}
.ll-brow__sub {
  font-size: 0.7rem;
  color: var(--ll-text-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ll-brow__outstanding {
  font-size: 0.86rem;
  font-weight: 700;
  text-align: right;
  white-space: nowrap;
  color: var(--ll-accent);
  font-variant-numeric: tabular-nums;
}
.ll-brow__outstanding--zero {
  color: var(--ll-text-muted);
  font-weight: 400;
  font-size: 0.8rem;
}

@media (max-width: 540px) {
  .ll-brow { grid-template-columns: minmax(0, 1fr) auto; }
  .ll-brow__outstanding { display: none; }
}

/* ── Loan table ────────────────────────────────────────────────────────────── */
.loan-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border-radius: var(--ll-radius-md);
  border: 1px solid var(--ll-border-subtle);
}
.loan-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.84rem;
  white-space: nowrap;
}
.loan-table__th {
  padding: 0.55rem 0.5rem;
  text-align: left;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
  background: var(--ll-bg-soft);
  border-bottom: 1px solid var(--ll-border-subtle);
}
.loan-table__th--num,
.loan-table__cell--num { text-align: right; }
.loan-table__th--date,
.loan-table__cell--date { text-align: center; }
.loan-table__th--actions,
.loan-table__cell--actions { text-align: right; }

.loan-table__row { border-bottom: 1px solid var(--ll-border-subtle); border-left: 3px solid transparent; }
.loan-table__row:last-child { border-bottom: none; }
.loan-table__row:hover { background: rgba(var(--ll-accent-rgb), 0.03); }
.loan-table__row--active   { border-left-color: var(--ll-accent); }
.loan-table__row--paid     { border-left-color: #4ec38a; }
.loan-table__row--defaulted { border-left-color: #d36a6a; }
.loan-table__row--closed   { border-left-color: var(--ll-border-subtle); }
.loan-table__row--overdue  { background: rgba(211,106,106,0.04); }
.loan-table__row--paid,
.loan-table__row--closed,
.loan-table__row--defaulted { opacity: 0.78; }

.loan-table__group-row { background: var(--ll-bg-soft); }
.loan-table__group-row:first-child .loan-table__group-label { border-top: none; }
.loan-table__group-label {
  padding: 0.32rem 0.5rem;
  border-top: 1px solid var(--ll-border-subtle);
  display: flex;
  align-items: center;
  gap: 0.45rem;
}
.loan-table__group-dot {
  width: 0.45rem;
  height: 0.45rem;
  border-radius: 50%;
  flex-shrink: 0;
  background: var(--ll-border-subtle);
}
.loan-table__group-row--active   .loan-table__group-dot { background: var(--ll-accent); }
.loan-table__group-row--history  .loan-table__group-dot { background: var(--ll-text-muted); opacity: 0.5; }
.loan-table__group-row--paid     .loan-table__group-dot { background: #4ec38a; }
.loan-table__group-row--defaulted .loan-table__group-dot { background: #d36a6a; }
.loan-table__group-row--closed   .loan-table__group-dot { background: var(--ll-text-muted); opacity: 0.5; }
.loan-table__group-row--active .loan-table__group-label { color: var(--ll-text); font-weight: 700; }
.loan-table__group-label {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ll-text-muted);
}
.loan-table__group-count {
  font-size: 0.65rem;
  font-weight: 700;
  background: var(--ll-bg-panel, var(--ll-surface));
  border: 1px solid var(--ll-border-subtle);
  border-radius: 99px;
  padding: 0.05rem 0.38rem;
  color: var(--ll-text-muted);
  letter-spacing: 0;
}

.loan-table__cell {
  padding: 0.6rem 0.5rem;
  color: var(--ll-text);
  vertical-align: middle;
}
.loan-table__cell--principal { font-weight: 700; color: var(--ll-text); }
.loan-table__cell--balance { font-weight: 700; color: var(--ll-accent); }
.loan-table__cell--actions {
  white-space: nowrap;
  vertical-align: middle;
  text-align: right;
  padding-block: 0.45rem;
}
.loan-table__actions-full {
  display: none;
  gap: 0.3rem;
  justify-content: flex-end;
  align-items: center;
}
.loan-table__borrower-line {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 0.15rem 0.25rem;
}
.loan-table__borrower {
  font-weight: 600;
  color: var(--ll-text);
}
.loan-table__id {
  font-size: 0.72rem;
  color: var(--ll-text-muted);
  cursor: pointer;
  user-select: none;
}
.loan-table__id:hover { color: var(--ll-accent); }
.loan-table__method {
  display: inline-block;
  font-size: 0.7rem;
  background: var(--ll-bg-soft);
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  padding: 0.1rem 0.4rem;
  color: var(--ll-text-muted);
}
.loan-table__overdue { color: #e53e3e; font-weight: 600; }

/* Inline note on borrower cell */
.loan-table__note-inline {
  margin-top: 0.2rem;
  white-space: normal;
}
.loan-table__note-inline > summary {
  list-style: none;
  cursor: pointer;
  display: block;
}
.loan-table__note-inline > summary::-webkit-details-marker { display: none; }
.loan-table__note-preview {
  font-size: 0.72rem;
  color: var(--ll-text-muted);
  font-style: italic;
  line-height: 1.35;
}
.loan-table__note-preview:hover { color: var(--ll-text); }
.loan-table__note-form-inline {
  display: grid;
  gap: 0.3rem;
  margin-top: 0.3rem;
}
.loan-table__note-form-inline textarea {
  width: 100%;
  min-width: 200px;
  font-size: 0.78rem;
  padding: 0.3rem 0.4rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  background: var(--ll-bg-soft);
  color: var(--ll-text);
  font-family: inherit;
  resize: vertical;
  min-height: 54px;
  box-sizing: border-box;
}

/* Action menu — always visible */
.loan-table__action-menu {
  display: inline-block;
  position: relative;
}
.loan-table__action-menu > summary {
  list-style: none;
  cursor: pointer;
}
.loan-table__action-menu > summary::-webkit-details-marker { display: none; }
/* Dropdown is position:FIXED, not absolute. A loan menu lives inside
   .loan-table-wrap (overflow-x:auto → overflow-y also auto per spec) and
   inside a <table>, where an absolutely-positioned dropdown gets clipped by
   the scroll box AND has unreliable hit-testing against later rows (the
   options below the row render but don't receive clicks). Fixed positioning
   takes the menu out of the table + scroll container into the viewport
   coordinate space, so it floats above everything and is fully clickable.
   Coordinates are set inline by initLoanActionMenus() in app.js on open. */
.loan-table__action-menu-items {
  position: fixed;
  z-index: 1000;
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-sm);
  padding: 0.25rem;
  display: grid;
  gap: 0.2rem;
  min-width: 130px;
  box-shadow: 0 4px 16px rgba(0,0,0,0.18);
}
.loan-table__action-menu-items .ledger-action {
  width: 100%;
  text-align: left;
}

/* Responsive column visibility */
@media (max-width: 959px) {
  .loan-table__col--repayment,
  .loan-table__col--issued,
  .loan-table__col--repaid { display: none; }
}
@media (max-width: 639px) {
  .loan-table__col--balance,
  .loan-table__col--due { display: none; }
}

.ledger-action--xs {
  font-size: 0.72rem;
  padding: 0.2rem 0.5rem;
  height: auto;
  min-height: unset;
  white-space: nowrap;
}

/* ── Activity filter bar ─────────────────────────────────────── */
.ledger-activity-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  padding: 0.5rem 0.65rem;
  margin-bottom: 0.65rem;
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
}

/* ── Activity 3-column table ─────────────────────────────────── */
#ledger-activity-list { width: 100%; }

.ledger-activity-head {
  display: grid;
  grid-template-columns: 7.5rem 1fr 1fr;
  gap: 0 0.5rem;
  padding: 0.35rem 0.75rem;
  font-size: 0.68rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ll-text-muted);
  border-bottom: 1px solid var(--ll-border-subtle);
}

.ledger-activity-row {
  display: grid;
  grid-template-columns: 7.5rem 1fr 1fr;
  align-items: start;
  gap: 0 0.5rem;
  padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--ll-border-subtle);
  transition: background 0.1s;
}
.ledger-activity-row:last-child { border-bottom: none; }
.ledger-activity-row:hover { background: rgba(var(--ll-accent-rgb), 0.04); }

.ledger-activity-row__when {
  font-size: 0.74rem;
  color: var(--ll-text-muted);
  white-space: nowrap;
  padding-top: 0.1rem;
}

.ledger-activity-row__action {
  display: flex;
  align-items: flex-start;
  gap: 0.45rem;
  min-width: 0;
}

.ledger-activity-row__dot {
  width: 0.48rem;
  height: 0.48rem;
  border-radius: 50%;
  margin-top: 0.38rem;
  flex-shrink: 0;
  background: var(--ll-text-muted);
}
.ledger-activity-row__dot--loan        { background: #4a90e8; }
.ledger-activity-row__dot--repayment   { background: #3cb36e; }
.ledger-activity-row__dot--borrower    { background: #9c72e0; }
.ledger-activity-row__dot--due_date    { background: #e8a33c; }
.ledger-activity-row__dot--allocation  { background: #4a90e8; }

.ledger-activity-row__summary {
  font-size: 0.82rem;
  font-weight: 500;
  color: var(--ll-text);
  line-height: 1.35;
  min-width: 0;
  overflow-wrap: anywhere;
}

.ledger-activity-row__detail {
  font-size: 0.78rem;
  color: var(--ll-text-muted);
  line-height: 1.35;
  min-width: 0;
  overflow-wrap: anywhere;
}

@media (max-width: 600px) {
  .ledger-activity-head,
  .ledger-activity-row {
    grid-template-columns: 5.5rem 1fr;
  }
  .ledger-activity-head :last-child,
  .ledger-activity-row__detail { display: none; }
}

/* ── Repayments compact rows ─────────────────────────────────── */
.repayment-row {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.45rem 0.75rem;
  border-bottom: 1px solid var(--ll-border-subtle);
}
.repayment-row:last-child { border-bottom: none; }
.repayment-row--voided { opacity: 0.5; }
.repayment-row__main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0.05rem;
}
.repayment-row__borrower {
  font-size: 0.82rem;
  font-weight: 500;
  color: var(--ll-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.repayment-row__meta {
  font-size: 0.7rem;
  color: var(--ll-text-muted);
}
.repayment-row__right {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  flex-shrink: 0;
}
.repayment-row__amount {
  font-size: 0.9rem;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

/* ── Loan edit row ───────────────────────────────────────────── */
.loan-edit-row__cell {
  padding: 0.75rem 1rem 1rem;
  background: var(--ll-surface-2, rgba(255,255,255,0.03));
  border-top: 1px solid var(--ll-border-subtle);
}
.loan-edit-form__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: 0.5rem 0.75rem;
  margin-bottom: 0.5rem;
}
.loan-edit-form__notes {
  width: 100%;
  font: inherit;
  font-size: 0.82rem;
  resize: vertical;
}
.loan-edit-form__actions {
  display: flex;
  gap: 0.4rem;
  margin-top: 0.6rem;
}

/* ── Action menu separator ───────────────────────────────────── */
.loan-menu__sep {
  border: none;
  border-top: 1px solid var(--ll-border-subtle);
  margin: 0.2rem 0;
}

/* ── Leaderboard rows — card-per-row "layers of boxes" ───────── */
.ledger-lb-row {
  display: grid;
  grid-template-columns: 2rem 1fr auto;
  align-items: center;
  gap: 0 0.75rem;
  padding: 0.6rem 0.75rem;
  background: var(--ll-surface-1);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 8px;
  margin-bottom: 0.35rem;
}
.ledger-lb-row:last-child { margin-bottom: 0; }

.ledger-lb-row__rank {
  width: 1.75rem;
  height: 1.75rem;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 0.68rem;
  font-weight: 700;
  color: var(--ll-text-muted);
  background: var(--ll-surface-2);
  flex-shrink: 0;
  line-height: 1;
}
.ledger-lb-row:first-child .ledger-lb-row__rank {
  background: rgba(var(--ll-accent-rgb), 0.14);
  color: var(--ll-accent);
}

.ledger-lb-row__info {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  min-width: 0;
}
.ledger-lb-row__name {
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--ll-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ledger-lb-row__bar {
  height: 4px;
  border-radius: 999px;
  background: var(--ll-surface-2);
  overflow: hidden;
}
.ledger-lb-row__bar-fill {
  height: 100%;
  border-radius: 999px;
  background: rgba(var(--ll-accent-rgb), 0.55);
  transition: width 0.3s ease;
}

.ledger-lb-row__amounts {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.15rem;
}
.ledger-lb-row__principal {
  font-size: 0.84rem;
  font-weight: 700;
  color: var(--ll-text);
}
.ledger-lb-row__bar-fill--negative {
  background: #e53e3e;
}
.ledger-lb-row__outstanding {
  font-size: 0.68rem;
  color: #e67e3e;
  font-weight: 600;
}
.ledger-lb-row__outstanding--settled {
  color: #3cb36e;
}
.ledger-lb-row__outstanding--default {
  color: #e53e3e;
  font-weight: 700;
}
.ledger-lb-row__outstanding--profit {
  color: #4ec38a;
  font-weight: 700;
}
.ledger-metric__value--profit { color: #4ec38a; }
.ledger-metric__value--loss { color: #d36a6a; }
.ledger-loan-mini__pl { font-size: 0.7rem; font-weight: 600; margin-left: 0.35rem; }
.ledger-loan-mini__pl--profit { color: #4ec38a; }
.ledger-loan-mini__pl--loss { color: #d36a6a; }

/* ── Month bar rows — card-per-row ───────────────────────────── */
.ledger-month-row {
  display: grid;
  grid-template-columns: 3rem 1fr auto auto;
  align-items: center;
  gap: 0 0.65rem;
  padding: 0.55rem 0.75rem;
  background: var(--ll-surface-1);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 8px;
  margin-bottom: 0.35rem;
}
.ledger-month-row:last-child { margin-bottom: 0; }
.ledger-month-row--header {
  background: transparent;
  border-color: transparent;
  padding-top: 0.1rem;
  padding-bottom: 0.25rem;
}
.ledger-month-row--header .ledger-month-row__label,
.ledger-month-row--header .ledger-month-row__lent,
.ledger-month-row--header .ledger-month-row__repaid {
  font-size: 0.62rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--ll-text-muted);
}
.ledger-month-row__net--pos { color: #4ec38a; font-size: 0.65rem; }
.ledger-month-row__net--neg { color: #d36a6a; font-size: 0.65rem; }

.ledger-month-row__label {
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--ll-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  white-space: nowrap;
}

.ledger-month-row__bars {
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.ledger-month-row__bar {
  height: 5px;
  border-radius: 999px;
  min-width: 2px;
  transition: width 0.3s ease;
}
.ledger-month-row__bar--lent   { background: rgba(var(--ll-accent-rgb), 0.7); }
.ledger-month-row__bar--repaid { background: #3cb36e; }

.ledger-month-row__lent {
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--ll-text);
  white-space: nowrap;
  text-align: right;
}
.ledger-month-row__repaid {
  font-size: 0.68rem;
  color: #3cb36e;
  font-weight: 600;
  white-space: nowrap;
  text-align: right;
}

/* ── Import builder ──────────────────────────────────────────── */
.ledger-import-intro {
  font-size: 0.85rem;
  color: var(--ll-text-muted);
  line-height: 1.55;
  margin: 0 0 0.875rem;
}

.ledger-import-hint-row {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 0.75rem;
}

.ledger-import-json {
  width: 100%;
  box-sizing: border-box;
  padding: 0.55rem 0.7rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  background: var(--ll-bg-soft);
  color: var(--ll-text);
  font-family: ui-monospace, 'Cascadia Code', 'Fira Mono', monospace;
  font-size: 0.78rem;
  line-height: 1.5;
  resize: vertical;
  min-height: 180px;
  display: block;
}
.ledger-import-json:focus {
  outline: none;
  border-color: var(--ll-accent);
  box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.18);
}

.ledger-import-toolbar {
  display: flex;
  gap: 0.5rem;
  margin-top: 0.65rem;
  flex-wrap: wrap;
}

/* Export builder (idea 5) */
.ledger-export-field { margin-bottom: 0.9rem; }
.ledger-export-field__label {
  display: block;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
  margin-bottom: 0.4rem;
}
.ledger-export-scope, .ledger-export-format { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.ledger-export-columns {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: 0.3rem 0.8rem;
}
.ledger-export-col {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 0.82rem;
  color: var(--ll-text);
  cursor: pointer;
}
.ledger-export-preview {
  margin-top: 0.8rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  overflow: hidden;
}
.ledger-export-preview__count {
  margin: 0;
  padding: 0.5rem 0.7rem;
  background: var(--ll-bg-soft);
  border-bottom: 1px solid var(--ll-border-subtle);
  font-size: 0.82rem;
}
.ledger-export-preview__pre {
  margin: 0;
  padding: 0.7rem;
  font-size: 0.74rem;
  line-height: 1.5;
  white-space: pre;
  overflow-x: auto;
  max-height: 280px;
  color: var(--ll-text);
}

.ledger-import-errors {
  margin-top: 0.75rem;
  padding: 0.6rem 0.8rem;
  background: rgba(229, 62, 62, 0.07);
  border: 1px solid rgba(229, 62, 62, 0.25);
  border-radius: var(--ll-radius-sm);
  font-size: 0.82rem;
  color: #c53030;
}
.ledger-import-error-list {
  margin: 0;
  padding-left: 1.15rem;
  display: grid;
  gap: 0.25rem;
}
.ledger-import-error-list code {
  font-family: ui-monospace, monospace;
  font-size: 0.78em;
  color: #c53030;
}

.ledger-import-summary {
  padding: 1rem 1.1rem;
  background: var(--ll-bg-panel, var(--ll-bg-soft));
  border: 1px solid var(--ll-border-subtle);
  border-radius: var(--ll-radius-md);
  margin-bottom: 0.75rem;
}
.ledger-import-summary__heading {
  font-size: 0.82rem;
  font-weight: 700;
  color: var(--ll-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 0 0 0.7rem;
}
.ledger-import-summary__grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.45rem 1rem;
  margin-bottom: 0.75rem;
}
.ledger-import-summary__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
}
.ledger-import-summary__label {
  font-size: 0.84rem;
  color: var(--ll-text-muted);
}
.ledger-import-summary__count {
  font-size: 1rem;
  font-weight: 700;
  color: var(--ll-text);
}
.ledger-import-summary__warn {
  font-size: 0.78rem;
  color: var(--ll-text-muted);
  margin: 0;
  opacity: 0.75;
}

@media (max-width: 480px) {
  .ledger-import-summary__grid { grid-template-columns: 1fr; }
}
