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;