Track session standings so the dealer can settle up at the end of the night

The hand log answered "what happened in hand 12"; it couldn't answer "what
does Alice owe". Each resolved pot now records a per-seat ledger (what that
player put in, what they took down) alongside the payouts, and a Session
Standings panel sums it into one row per player — paid in, won, net, sorted
by who's up. The CSV export carries the same table, so one file covers both
the hand-by-hand trail and the cash-out numbers.

Keyed by seat id rather than name, so renaming or reseating a player doesn't
split their totals. Hands recorded before this change have no ledger and are
skipped rather than counted wrong.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_015bnp7xKUPFFSpwkYNFaPgb
This commit is contained in:
2026-08-31 17:37:48 -06:00
co-authored by Claude Sonnet 5
parent d168fedf1f
commit bcfc1f2f52
7 changed files with 189 additions and 7 deletions
@@ -617,6 +617,63 @@ body {
padding: 0.3rem 0.5rem;
}
#standingsTable {
max-height: 260px;
overflow-y: auto;
}
.standingsRow {
display: grid;
grid-template-columns: minmax(0, 1fr) auto auto auto;
gap: 0.5rem;
align-items: baseline;
padding: 0.3rem 0.1rem;
font-size: 0.78rem;
border-bottom: 1px solid #232323;
}
.standingsRow > span:not(:first-child) {
text-align: right;
font-variant-numeric: tabular-nums;
min-width: 4.5rem;
}
.standingsHeader {
color: #777;
font-size: 0.7rem;
letter-spacing: 0.04em;
text-transform: uppercase;
border-bottom-color: #3a3a3a;
position: sticky;
top: 0;
background: #1b1b1b;
}
.standingsName {
color: #eee;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.standingsIn,
.standingsWon {
color: #999;
}
.standingsNet {
color: #bbb;
font-weight: 600;
}
.standingsNet.netUp {
color: #4ec97a;
}
.standingsNet.netDown {
color: #e07b7b;
}
#handHistoryList {
display: flex;
flex-direction: column;