diff --git a/frontend/components/leaderboard/LeaderboardPodium.tsx b/frontend/components/leaderboard/LeaderboardPodium.tsx
index 8db2879d..febd3937 100644
--- a/frontend/components/leaderboard/LeaderboardPodium.tsx
+++ b/frontend/components/leaderboard/LeaderboardPodium.tsx
@@ -16,7 +16,6 @@ const rankConfig = {
text: 'text-yellow-600 dark:text-yellow-400',
badge: 'bg-yellow-400 dark:bg-yellow-500',
ring: 'border-yellow-400 dark:border-yellow-500',
- barTop: 'bg-yellow-400 dark:bg-yellow-500',
},
},
2: {
@@ -28,7 +27,6 @@ const rankConfig = {
text: 'text-slate-600 dark:text-slate-400',
badge: 'bg-slate-400 dark:bg-slate-500',
ring: 'border-slate-300 dark:border-slate-500',
- barTop: 'bg-slate-300 dark:bg-slate-500',
},
},
3: {
@@ -40,7 +38,6 @@ const rankConfig = {
text: 'text-orange-600 dark:text-orange-400',
badge: 'bg-orange-400 dark:bg-orange-500',
ring: 'border-orange-300 dark:border-orange-500',
- barTop: 'bg-orange-300 dark:bg-orange-500',
},
},
} as const;
@@ -55,40 +52,11 @@ export function LeaderboardPodium({ topThree }: { topThree: User[] }) {
return (
{podiumOrder.map(user => {
- const rank = user.rank;
+ const rank = user.rank as 1 | 2 | 3;
const isFirst = rank === 1;
- const height = rank === 1 ? '100%' : rank === 2 ? '40%' : '35%';
- const delay = rank === 1 ? 0.4 : rank === 2 ? 0.2 : 0.6;
-
- const rankStyles = {
- 1: {
- border: 'border-yellow-400 dark:border-yellow-500',
- bg: 'bg-yellow-400/20 dark:bg-yellow-500/10',
- text: 'text-yellow-600 dark:text-yellow-400',
- badge: 'bg-yellow-400 dark:bg-yellow-500',
- ring: 'border-yellow-400 dark:border-yellow-500',
- barTop: 'bg-yellow-400 dark:bg-yellow-500',
- },
- 2: {
- border: 'border-slate-300 dark:border-slate-500',
- bg: 'bg-slate-300/20 dark:bg-slate-500/10',
- text: 'text-slate-600 dark:text-slate-400',
- badge: 'bg-slate-400 dark:bg-slate-500',
- ring: 'border-slate-300 dark:border-slate-500',
- barTop: 'bg-slate-300 dark:bg-slate-500',
- },
- 3: {
- border: 'border-orange-300 dark:border-orange-500',
- bg: 'bg-orange-300/20 dark:bg-orange-500/10',
- text: 'text-orange-600 dark:text-orange-400',
- badge: 'bg-orange-400 dark:bg-orange-500',
- ring: 'border-orange-300 dark:border-orange-500',
- barTop: 'bg-orange-300 dark:bg-orange-500',
- },
- };
-
- const style = rankStyles[rank as 1 | 2 | 3] || rankStyles[2];
+ const config = rankConfig[rank] || rankConfig[2];
+ const { height, delay, style } = config;
return (
@@ -164,14 +132,7 @@ export function LeaderboardPodium({ topThree }: { topThree: User[] }) {
style.bg,
style.border
)}
- >
-
-
+ >
);
})}
diff --git a/frontend/components/leaderboard/LeaderboardTable.tsx b/frontend/components/leaderboard/LeaderboardTable.tsx
index 234e391d..6a450992 100644
--- a/frontend/components/leaderboard/LeaderboardTable.tsx
+++ b/frontend/components/leaderboard/LeaderboardTable.tsx
@@ -34,25 +34,23 @@ export function LeaderboardTable({
- {/* ✅ ВИПРАВЛЕННЯ 1: border-separate + border-spacing-0 замість border-collapse */}
-
+
{t('tableCaption')}
- |
+ |
{t('rank')}
|
-
+ |
{t('user')}
|
-
+ |
{t('score')}
|
- {/* ✅ ВИПРАВЛЕННЯ 2: Прибрали divide-y, бо він конфліктує з border-separate */}
{topUsers.map(user => {
const isMe =
@@ -81,7 +79,7 @@ export function LeaderboardTable({
-
+
@@ -103,20 +101,23 @@ function TableRow({
isCurrentUser: boolean;
t: ReturnType;
}) {
- // ✅ ВИПРАВЛЕННЯ 3: Спільний клас для ліній між рядками
const cellClass =
- 'px-3 sm:px-6 py-4 border-b border-slate-100 dark:border-white/5';
+ 'px-2 sm:px-6 py-3 sm:py-4 border-b border-slate-100 dark:border-white/5';
+
+ const leftBorderClass = isCurrentUser
+ ? 'border-l-[1px] sm:border-l-[1px] border-l-[var(--accent-primary)]'
+ : 'border-l-[1px] sm:border-l-[1px] border-l-transparent';
return (
- |
+ |
@@ -139,18 +140,18 @@ function TableRow({
-
+
{user.username}
{isCurrentUser && (
-
+
-
-
- {t('you') || 'YOU'}
-
)}
@@ -191,8 +188,8 @@ function TableRow({
className={cn(
'font-mono font-bold inline-block transition-all',
isCurrentUser
- ? 'text-[var(--accent-primary)] scale-110 drop-shadow-sm text-base sm:text-lg'
- : 'text-slate-700 dark:text-slate-300 group-hover:scale-105'
+ ? 'text-[var(--accent-primary)] scale-110 drop-shadow-sm text-sm sm:text-lg'
+ : 'text-slate-700 dark:text-slate-300 group-hover:scale-105 text-sm sm:text-base'
)}
>
{user.points.toLocaleString()}
@@ -205,32 +202,32 @@ function TableRow({
function RankBadge({ rank }: { rank: number }) {
if (rank === 1) {
return (
-
+
);
}
if (rank === 2) {
return (
-
+
2
-
+
);
}
if (rank === 3) {
return (
- |