diff --git a/backend/app/services/scoring.py b/backend/app/services/scoring.py index 389b86c..ac705d2 100644 --- a/backend/app/services/scoring.py +++ b/backend/app/services/scoring.py @@ -9,7 +9,7 @@ from __future__ import annotations # Порог числа игр для попадания в ранжированный топ (ниже — «Новички»/provisional). -MIN_GAMES = 3 +MIN_GAMES = 5 # Порог числа игр на фракцию для расчёта лучшей/худшей фракции. FACTION_MIN_GAMES = 2 diff --git a/frontend/src/components/Leaderboard.tsx b/frontend/src/components/Leaderboard.tsx index 508fe01..a7c263a 100644 --- a/frontend/src/components/Leaderboard.tsx +++ b/frontend/src/components/Leaderboard.tsx @@ -6,7 +6,7 @@ function pct(v: number | null | undefined): string { return v == null ? "—" : `${Math.round(v * 100)}%`; } -function Row({ entry }: { entry: LeaderboardEntry }) { +function Row({ entry, provisional }: { entry: LeaderboardEntry; provisional?: boolean }) { return ( // Вся строка — ссылка на профиль (на главной карточка-обёртка ведёт в общую // статистику, а клик по строке игрока — в его профиль). @@ -23,7 +23,7 @@ function Row({ entry }: { entry: LeaderboardEntry }) { WR: {pct(entry.win_rate)} -
{entry.score ?? "—"}
+
{entry.score ?? "—"}
); } @@ -53,7 +53,7 @@ export function Leaderboard({ Новички (мало игр) {provisional.map((e) => ( - + ))} )} diff --git a/frontend/src/pages/HelpPage.tsx b/frontend/src/pages/HelpPage.tsx index 450aecc..10fbf77 100644 --- a/frontend/src/pages/HelpPage.tsx +++ b/frontend/src/pages/HelpPage.tsx @@ -55,7 +55,7 @@ export function HelpPage() {

Попадание в топ

- Чтобы попасть в ранжированный топ, нужно сыграть минимум 3 партии. До этого + Чтобы попасть в ранжированный топ, нужно сыграть минимум 5 партий. До этого игрок показывается в блоке «Новички» — предварительно, без места в рейтинге.

diff --git a/frontend/src/pages/OverallStatsPage.tsx b/frontend/src/pages/OverallStatsPage.tsx index 36f3ac5..74d42d2 100644 --- a/frontend/src/pages/OverallStatsPage.tsx +++ b/frontend/src/pages/OverallStatsPage.tsx @@ -42,7 +42,7 @@ export function OverallStatsPage() { const provisional = filterSort(data.provisional); const arrow = (k: SortKey) => (k === sortKey ? (dir === 1 ? " ↑" : " ↓") : ""); - const row = (e: LeaderboardEntry) => ( + const row = (e: LeaderboardEntry, isProvisional = false) => ( {e.rank ?? "—"} @@ -52,7 +52,9 @@ export function OverallStatsPage() { {e.games} {e.wins} {pct(e.win_rate)} - {e.score ?? "—"} + + {e.score ?? "—"} + ); @@ -77,14 +79,14 @@ export function OverallStatsPage() { Никого не найдено. ) : ( - entries.map(row) + entries.map((e) => row(e)) )} {provisional.length > 0 && (
Новички (меньше {data.min_games} игр)
- {provisional.map(row)} + {provisional.map((e) => row(e, true))}
)} diff --git a/frontend/src/styles/layout.css b/frontend/src/styles/layout.css index 4d7d4cd..6084ee5 100644 --- a/frontend/src/styles/layout.css +++ b/frontend/src/styles/layout.css @@ -106,6 +106,8 @@ .lb-rank.top { color: var(--gold); } .lb-metrics { display: flex; gap: 12px; font-size: 13px; color: var(--text-muted); } .lb-score { font-weight: 700; color: var(--accent-2); } +/* Рейтинг новичков (мало игр) — серебряный, не золотой. */ +.lb-score.provisional { color: var(--silver); } /* Таблица общей статистики (сортируемая, кликабельные строки) */ .st-row, .st-head { diff --git a/frontend/src/styles/tokens.css b/frontend/src/styles/tokens.css index 1d35adf..44a25ae 100644 --- a/frontend/src/styles/tokens.css +++ b/frontend/src/styles/tokens.css @@ -11,6 +11,7 @@ --success: #4caf7d; --danger: #e0533d; --gold: #f0c14b; + --silver: #c0c6cf; /* Размеры */ --app-max-w: 480px;