can I get a hamburger please?
This commit is contained in:
1 parent
49b0b54c2d
commit
c891163c6d
4 files changed
+32
-41
No files matched your search
@@ -8,7 +8,7 @@ BASE_DIR = Path(__file__).resolve().parent
|
|||||||
DATA_PATH = BASE_DIR / "data" / "entries.csv"
|
DATA_PATH = BASE_DIR / "data" / "entries.csv"
|
||||||
|
|
||||||
ELIGIBLE_MIN_SESSIONS = 3
|
ELIGIBLE_MIN_SESSIONS = 3
|
||||||
APP_VERSION = "1.8.4"
|
APP_VERSION = "1.8.6"
|
||||||
|
|
||||||
|
|
||||||
def load_local_env(env_path: Path) -> None:
|
def load_local_env(env_path: Path) -> None:
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
# Memory Index
|
|
||||||
|
|
||||||
- [Project overview](project_overview.md) — Flask poker ledger app, Graphite+Violet design system, append-only CSV event model
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
name: project-overview
|
|
||||||
description: Flask poker ledger app — design system, tech stack, key files
|
|
||||||
metadata:
|
|
||||||
type: project
|
|
||||||
---
|
|
||||||
|
|
||||||
Flask/Jinja app: poker session tracker and leaderboard. Append-only CSV event ledger (`data/entries.csv`).
|
|
||||||
|
|
||||||
**Design system (Graphite + Violet):** Implemented June 2026.
|
|
||||||
- `static/css/tokens.css` — all CSS custom properties (--accent: #9b8cf0 violet, not orange)
|
|
||||||
- `static/css/style.css` — component classes: .panel, .stat, .tbl, .badge, .segmented, .btn, .feed, etc.
|
|
||||||
- Fonts: Spectral (display), Hanken Grotesk (UI), IBM Plex Mono (numbers/labels)
|
|
||||||
|
|
||||||
**Pages:** leaderboard, sessions, session_detail, player_detail, admin_dashboard, admin_login.
|
|
||||||
|
|
||||||
**Key patterns:**
|
|
||||||
- Leaderboard has Eligible/All/Recent segmented control; `ELIGIBLE_MIN_SESSIONS = 3` in app.py
|
|
||||||
- Session detail has Compact/Full toggle for the table (`col-acct` class, `.is-full` on table)
|
|
||||||
- Chart.js colors: leaderboard uses CHART_PALETTE from template JS; bars use `net_tone()` from stats.py
|
|
||||||
- `--text-muted` and `--line` CSS vars kept as backward compat for Chart.js JS reads
|
|
||||||
- `.venv/bin/python` is the Python runtime
|
|
||||||
|
|
||||||
**Data model:** EventRow CSV → SessionEntry → SessionSummary, PlayerStats (via stats.py). No DB.
|
|
||||||
|
|
||||||
**Why:** Design ported from "Poker Ledger.dc.html" prototype spec per handoff document.
|
|
||||||
+31
-11
@@ -95,25 +95,41 @@ h1, h2, h3, h4 { margin: 0; }
|
|||||||
display: none;
|
display: none;
|
||||||
width: 42px;
|
width: 42px;
|
||||||
height: 42px;
|
height: 42px;
|
||||||
place-items: center;
|
|
||||||
gap: 4px;
|
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 1px solid var(--border-strong);
|
border: 1px solid var(--border-strong);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
background: var(--field);
|
background: var(--field);
|
||||||
color: var(--text-2);
|
color: var(--text-2);
|
||||||
|
position: relative;
|
||||||
|
transition: border-color 180ms ease, color 180ms ease, background 180ms ease;
|
||||||
}
|
}
|
||||||
.nav-toggle span {
|
.nav-toggle span {
|
||||||
display: block;
|
display: block;
|
||||||
width: 18px;
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
width: 19px;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
border-radius: 2px;
|
margin-left: -9.5px;
|
||||||
|
margin-top: -1px;
|
||||||
|
border-radius: 999px;
|
||||||
background: currentColor;
|
background: currentColor;
|
||||||
transition: transform 160ms, opacity 160ms;
|
transform-origin: 50% 50%;
|
||||||
|
transition:
|
||||||
|
transform 220ms cubic-bezier(.2,.8,.2,1),
|
||||||
|
opacity 160ms ease;
|
||||||
}
|
}
|
||||||
.nav-is-open .nav-toggle span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
|
.nav-toggle span:nth-child(1) { transform: translateY(-6px); }
|
||||||
.nav-is-open .nav-toggle span:nth-child(2) { opacity: 0; }
|
.nav-toggle span:nth-child(2) { transform: scaleX(.82); }
|
||||||
.nav-is-open .nav-toggle span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }
|
.nav-toggle span:nth-child(3) { transform: translateY(6px); }
|
||||||
|
.nav-is-open .nav-toggle {
|
||||||
|
color: var(--text-strong);
|
||||||
|
border-color: var(--accent-chip-bd);
|
||||||
|
background: var(--accent-chip);
|
||||||
|
}
|
||||||
|
.nav-is-open .nav-toggle span:nth-child(1) { transform: rotate(45deg) scaleX(1.04); }
|
||||||
|
.nav-is-open .nav-toggle span:nth-child(2) { opacity: 0; transform: scaleX(.2); }
|
||||||
|
.nav-is-open .nav-toggle span:nth-child(3) { transform: rotate(-45deg) scaleX(1.04); }
|
||||||
.navlink {
|
.navlink {
|
||||||
font-size: 13.5px;
|
font-size: 13.5px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
@@ -1851,15 +1867,19 @@ select.control { cursor: pointer; }
|
|||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
background: rgba(22, 22, 28, .98);
|
background: rgba(22, 22, 28, .98);
|
||||||
box-shadow: 0 18px 48px rgba(0,0,0,.42);
|
box-shadow: 0 18px 48px rgba(0,0,0,.42);
|
||||||
transform: translateY(-8px);
|
transform: translateY(-6px) scale(.985);
|
||||||
|
transform-origin: top center;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
transition: opacity 150ms, transform 150ms, visibility 150ms;
|
transition:
|
||||||
|
opacity 180ms ease,
|
||||||
|
transform 220ms cubic-bezier(.2,.8,.2,1),
|
||||||
|
visibility 180ms;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.nav-is-open .mainnav {
|
.nav-is-open .mainnav {
|
||||||
transform: translateY(0);
|
transform: translateY(0) scale(1);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
|
|||||||
Reference in new issue
Block a user