diff --git a/boker/config.py b/boker/config.py index dc03473..b8615cf 100644 --- a/boker/config.py +++ b/boker/config.py @@ -8,7 +8,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent DEFAULT_DATABASE_URL = f"sqlite:///{BASE_DIR / 'data' / 'boker-dev.sqlite3'}" DEFAULT_SECRET_KEY = "change-this-before-deploying" -APP_VERSION = "2.5.34" +APP_VERSION = "2.5.35" def load_local_env(env_path: Path) -> None: diff --git a/static/css/style.css b/static/css/style.css index 368b2ad..538fe77 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -610,16 +610,42 @@ h1, h2, h3, h4 { margin: 0; } @media (max-width: 640px) { .site-footer { grid-template-columns: 1fr; - gap: 8px; + justify-items: start; + align-items: start; + gap: 9px; padding: 18px 0 max(20px, env(safe-area-inset-bottom)); } + .site-footer__copy { + display: grid; + grid-template-columns: auto auto; + align-items: baseline; + gap: 5px 8px; + white-space: normal; + } + .site-footer__copy > span:first-child { + min-width: 0; + } + .site-footer__version { + justify-self: start; + } + .site-footer__links { + justify-content: flex-start; + gap: 4px 8px; + margin-left: -6px; + } + .site-footer__links a { + padding: 3px 6px; + } .page--landing .site-footer, .page--auth .site-footer, .page--error .site-footer { padding-left: 16px; padding-right: 16px; } - .site-footer__brand { justify-self: start; } + .site-footer__brand { + justify-self: start; + line-height: 1.4; + } } /* ================================================================ @@ -2597,10 +2623,15 @@ select.control { cursor: pointer; } /* Danger button */ .btn--danger { - background: var(--neg); - color: #fff; + background: var(--neg-tint); + color: var(--neg); + border: 1px solid var(--neg-tint-bd); +} +.btn--danger:hover { + background: color-mix(in srgb, var(--neg) 16%, transparent); + border-color: color-mix(in srgb, var(--neg) 48%, transparent); + color: var(--neg); } -.btn--danger:hover { opacity: .88; } .btn--danger:disabled { opacity: .4; cursor: not-allowed; } /* Session date block (used in session list rows) */ @@ -2744,10 +2775,92 @@ select.control { cursor: pointer; } .session-row__title a { color: var(--text-strong); text-decoration: none; } .session-row__title a:hover { color: var(--accent); } .session-row__meta { font-size: 12px; color: var(--muted); margin-top: 2px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } +.session-row__meta > span + span:not(.season-tag)::before { + content: "·"; + color: var(--faintest); + margin-right: 8px; +} +.session-row__meta .season-tag { + margin-left: 0; +} .session-row__stat { display: inline-flex; align-items: center; gap: 4px; } .session-row__actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; } .session-row__actions form { margin: 0; } +@media (max-width: 640px) { + .session-row { + display: grid; + grid-template-columns: 1fr; + align-items: stretch; + gap: 12px; + padding: 16px 14px 14px 18px; + } + .session-row__info { + align-items: flex-start; + gap: 12px; + width: 100%; + } + .session-row__text { + flex: 1; + min-width: 0; + } + .session-row__title { + white-space: normal; + overflow: visible; + text-overflow: clip; + line-height: 1.3; + } + .session-row__meta { + display: flex; + align-items: center; + gap: 6px 0; + line-height: 1.45; + } + .session-row__meta > span { + display: inline-flex; + align-items: center; + min-width: 0; + } + .session-row__meta .season-tag { + margin-left: 8px; + } + .session-row__meta > span + span:not(.season-tag)::before { + margin-left: 8px; + margin-right: 8px; + } + .session-row__actions { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 8px; + width: 100%; + } + .session-row__actions .status-pill { + grid-column: 1 / -1; + justify-self: start; + } + .session-row__actions .btn, + .session-row__actions form, + .session-row__actions form .btn { + width: 100%; + justify-content: center; + } + .session-row__actions .btn { + min-height: 42px; + padding-inline: 8px; + } +} + +@media (max-width: 390px) { + .session-row__actions { + grid-template-columns: 1fr 1fr; + } + .session-row__actions .status-pill { + grid-column: auto; + min-height: 42px; + justify-content: center; + } +} + /* Session detail — full-width player ledger rows */ .player-ledger-list { display: flex; @@ -2888,6 +3001,13 @@ select.control { cursor: pointer; } .page { padding: 18px 12px 72px; } + .page-header { + flex-direction: column; + align-items: stretch; + gap: 12px; + margin-bottom: 18px; + padding-bottom: 18px; + } .panel { border-radius: 12px; } @@ -2948,12 +3068,32 @@ select.control { cursor: pointer; } } .leaderboard-hero-stats { display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; + gap: 8px; + align-self: stretch; } .leaderboard-hero-stats .stat, .leaderboard-hero-stats .stat:last-child { min-width: 0; + padding: 11px 8px; + overflow: hidden; + } + .leaderboard-hero-stats .stat .kicker { + font-size: 8.5px; + line-height: 1.25; + letter-spacing: .11em; + white-space: nowrap; + } + .leaderboard-hero-stats .stat__val { + display: block; + min-width: 0; + max-width: 100%; + font-size: clamp(18px, 6.2vw, 25px); + line-height: 1.08; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .tbl-scroll, .table-wrap { @@ -3084,6 +3224,25 @@ select.control { cursor: pointer; } .panel__head { flex-wrap: wrap; row-gap: 6px; } } +@media (max-width: 640px) { + .page--app .hero .button-row { + width: 100%; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 9px; + } + .page--app .hero .button-row .btn, + .page--app .hero .button-row form, + .page--app .hero .button-row form .btn { + width: 100%; + justify-content: center; + } + .page--app .hero .button-row .btn { + min-height: 44px; + padding: 10px 12px; + } +} + /* Segmented control: scroll horizontally if it overflows on very small phones */ @media (max-width: 380px) { .segmented { @@ -5629,11 +5788,26 @@ select.control { cursor: pointer; } .explore-search-row { align-items: stretch; flex-direction: column; + max-width: none; + padding: 10px 10px 9px; + gap: 10px; } .explore-search-row .field-input, .explore-search-row .btn { width: 100%; } + .explore-search-row .field-input { + box-sizing: border-box; + height: 54px; + min-height: 54px; + font-size: 1rem; + line-height: 1.2; + padding-inline: 16px; + } + .explore-search-row .btn { + min-height: 50px; + justify-content: center; + } } /* ================================================================ diff --git a/templates/league_sessions.html b/templates/league_sessions.html index ec9af6c..b27ea8d 100644 --- a/templates/league_sessions.html +++ b/templates/league_sessions.html @@ -109,13 +109,13 @@ {{ season_map[session.season_id].name }} {% endif %} {% if sm and sm.entries %} - · {{ sm.entries|length }} player{{ 's' if sm.entries|length != 1 else '' }} - · {{ sm.total_invested_cents | money }} pot + {{ sm.entries|length }} player{{ 's' if sm.entries|length != 1 else '' }} + {{ sm.total_invested_cents | money }} pot {% if sm.total_current_due_to_house_cents > 0 or sm.total_current_due_to_player_cents > 0 %} - · {{ (sm.total_current_due_to_house_cents + sm.total_current_due_to_player_cents) | money }} open + {{ (sm.total_current_due_to_house_cents + sm.total_current_due_to_player_cents) | money }} open {% endif %} {% endif %} - {% if session.notes %}· {{ session.notes }}{% endif %} + {% if session.notes %}{{ session.notes }}{% endif %}