@@ -21,71 +21,76 @@ export default function LeaderboardPage() {
2121 const fastestPlanner = rows . length > 0 ? Math . min ( ...rows . map ( ( row ) => row . planning_cost_ms_per_step ) ) : 0 ;
2222
2323 return (
24- < section className = "space-y-5 " >
25- < div className = "glass-panel rounded-[30px] p-7 shadow-card " >
24+ < section className = "space-y-8 " >
25+ < section className = "border-b border-t border-[var(--line)] py-10 " >
2626 < div className = "flex flex-wrap items-center justify-between gap-4" >
2727 < div >
28- < p className = "text-xs font-semibold uppercase tracking-[0.24em] text-slate-500" > Leaderboard</ p >
29- < h2 className = "mt-2 text-4xl font-semibold tracking-tight text-ink" > Track planning quality, not just screenshots.</ h2 >
30- < p className = "mt-3 max-w-3xl text-sm leading-7 text-slate-600" >
28+ < p className = "section-kicker" > Leaderboard</ p >
29+ < h2 className = "mt-5 max-w-4xl text-5xl font-semibold leading-[1.06] tracking-[-0.05em] text-[var(--ink)]" >
30+ Track planning quality with the same finish as a product launch page.
31+ </ h2 >
32+ < p className = "mt-5 max-w-3xl text-lg leading-8 text-[var(--muted)]" >
3133 Compare runs by success rate, return, and per-step planning cost across reproducible benchmark tracks.
3234 </ p >
3335 </ div >
34- < div className = "flex flex-wrap gap-2 " >
35- < div className = "rounded-[24px] bg-white/85 px-4 py-3 " >
36- < p className = "text-[11px] font-semibold uppercase tracking-[0.22em] text-slate-500 " > Runs</ p >
37- < p className = "mt-1 text-2xl font-semibold text-ink" > { rows . length } </ p >
36+ < div className = "grid gap-3 sm:grid-cols-3 " >
37+ < div className = "site-panel rounded-[22px] px-5 py-4 " >
38+ < p className = "text-[11px] font-semibold uppercase tracking-[0.22em] text-[var(--muted)] " > Runs</ p >
39+ < p className = "mt-2 text-3xl font-semibold tracking-[-0.04em] text-[var(-- ink)] " > { rows . length } </ p >
3840 </ div >
39- < div className = "rounded-[24px] bg-white/85 px-4 py-3 " >
40- < p className = "text-[11px] font-semibold uppercase tracking-[0.22em] text-slate-500 " > Best Success</ p >
41- < p className = "mt-1 text-2xl font-semibold text-ink" > { topSuccess . toFixed ( 2 ) } </ p >
41+ < div className = "site-panel rounded-[22px] px-5 py-4 " >
42+ < p className = "text-[11px] font-semibold uppercase tracking-[0.22em] text-[var(--muted)] " > Best Success</ p >
43+ < p className = "mt-2 text-3xl font-semibold tracking-[-0.04em] text-[var(-- ink)] " > { topSuccess . toFixed ( 2 ) } </ p >
4244 </ div >
43- < div className = "rounded-[24px] bg-white/85 px-4 py-3" >
44- < p className = "text-[11px] font-semibold uppercase tracking-[0.22em] text-slate-500" > Fastest Cost</ p >
45- < p className = "mt-1 text-2xl font-semibold text-ink" > { rows . length > 0 ? fastestPlanner . toFixed ( 2 ) : "--" } </ p >
45+ < div className = "site-panel rounded-[22px] px-5 py-4" >
46+ < p className = "text-[11px] font-semibold uppercase tracking-[0.22em] text-[var(--muted)]" > Fastest Cost</ p >
47+ < p className = "mt-2 text-3xl font-semibold tracking-[-0.04em] text-[var(--ink)]" >
48+ { rows . length > 0 ? fastestPlanner . toFixed ( 2 ) : "--" }
49+ </ p >
4650 </ div >
4751 </ div >
4852 </ div >
49- < div className = "mt-6 flex flex-wrap gap-2" >
50- { tracks . map ( ( item ) => (
51- < button
52- key = { item }
53- onClick = { ( ) => setTrack ( item ) }
54- className = { `rounded-full px-4 py-2 text-sm font-medium transition ${
55- track === item ? "bg-ink text-white" : "bg-white text-ink hover:-translate-y-0.5"
56- } `}
57- >
58- { item }
59- </ button >
60- ) ) }
61- </ div >
53+ </ section >
54+
55+ < div className = "grid grid-cols-3 md:grid-cols-3" >
56+ { tracks . map ( ( item ) => (
57+ < button
58+ key = { item }
59+ onClick = { ( ) => setTrack ( item ) }
60+ className = { `eyebrow-tab ${ track === item ? "is-active" : "" } ` }
61+ >
62+ { item }
63+ </ button >
64+ ) ) }
6265 </ div >
6366
6467 { isLoading ? (
65- < div className = "glass -panel rounded-[28px ] p-6 shadow-card " >
66- < p className = "text-sm font-medium text-slate-600 " > Loading leaderboard signals...</ p >
68+ < div className = "site -panel rounded-[30px ] p-6" >
69+ < p className = "text-sm font-medium text-[var(--muted)] " > Loading leaderboard signals...</ p >
6770 < div className = "mt-4 grid gap-3 md:grid-cols-3" >
68- < div className = "h-28 animate-pulse rounded-[22px] bg-white/80 " />
69- < div className = "h-28 animate-pulse rounded-[22px] bg-white/80 " />
70- < div className = "h-28 animate-pulse rounded-[22px] bg-white/80 " />
71+ < div className = "h-28 animate-pulse rounded-[22px] bg-[var(--sand)] " />
72+ < div className = "h-28 animate-pulse rounded-[22px] bg-[var(--sand)] " />
73+ < div className = "h-28 animate-pulse rounded-[22px] bg-[var(--sand)] " />
7174 </ div >
7275 </ div >
7376 ) : null }
7477
7578 { isError ? (
76- < div className = "rounded-[28px] border border-amber-200 bg-amber-50 p-6 shadow-card" >
77- < p className = "text-xs font-semibold uppercase tracking-[0.22em] text-amber-800" > Live API unavailable</ p >
78- < h3 className = "mt-2 text-2xl font-semibold text-amber-950" > The frontend is up, but the backend URL is not serving leaderboard data.</ h3 >
79- < p className = "mt-3 text-sm leading-7 text-amber-900" >
79+ < div className = "rounded-[30px] border border-[var(--line-strong)] bg-[#f8ede1] p-6" >
80+ < p className = "text-xs font-semibold uppercase tracking-[0.22em] text-[#9b6b40]" > Live API unavailable</ p >
81+ < h3 className = "mt-3 text-3xl font-semibold tracking-[-0.03em] text-[#4e3218]" >
82+ The frontend theme is live, but the backend URL is not serving leaderboard data.
83+ </ h3 >
84+ < p className = "mt-4 text-base leading-7 text-[#7c5330]" >
8085 { error instanceof Error ? error . message : "Failed to load leaderboard data." }
8186 </ p >
8287 < div className = "mt-4 flex flex-wrap gap-3" >
83- < Link href = "/" className = "rounded-full bg-ink px-5 py-2.5 text-sm font-semibold text-white " >
88+ < Link href = "/" className = "button-primary px-5 py-3 text-sm font-semibold" >
8489 Back to Home
8590 </ Link >
8691 < Link
8792 href = "/tasks"
88- className = "rounded-full border border-amber-300 bg-white px-5 py-2.5 text-sm font-semibold text-amber-900 "
93+ className = "button-secondary px-5 py-3 text-sm font-semibold"
8994 >
9095 Browse Tasks Instead
9196 </ Link >
@@ -94,10 +99,12 @@ export default function LeaderboardPage() {
9499 ) : null }
95100
96101 { ! isLoading && ! isError && rows . length === 0 ? (
97- < div className = "glass-panel rounded-[28px] border border-dashed border-ink/20 p-8 text-center shadow-card" >
98- < p className = "text-xs font-semibold uppercase tracking-[0.22em] text-slate-500" > No runs yet</ p >
99- < h3 className = "mt-2 text-2xl font-semibold text-ink" > This track is waiting for its first uploaded evaluation.</ h3 >
100- < p className = "mt-3 text-sm leading-7 text-slate-600" >
102+ < div className = "site-panel rounded-[30px] border border-dashed border-[var(--line-strong)] p-10 text-center" >
103+ < p className = "text-xs font-semibold uppercase tracking-[0.22em] text-[var(--muted)]" > No runs yet</ p >
104+ < h3 className = "mt-3 text-3xl font-semibold tracking-[-0.04em] text-[var(--ink)]" >
105+ This track is waiting for its first uploaded evaluation.
106+ </ h3 >
107+ < p className = "mx-auto mt-4 max-w-2xl text-base leading-7 text-[var(--muted)]" >
101108 Run the demo pipeline or upload benchmark artifacts to populate charts, rankings, and individual run views.
102109 </ p >
103110 </ div >
@@ -106,10 +113,10 @@ export default function LeaderboardPage() {
106113 { rows . length > 0 ? (
107114 < >
108115 < LeaderboardChart data = { rows } />
109- < div className = "glass -panel overflow-x-auto rounded-[28px ] p-5 shadow-card " >
116+ < div className = "site -panel overflow-x-auto rounded-[30px ] p-5" >
110117 < table className = "w-full min-w-[780px] text-left text-sm" >
111- < thead >
112- < tr className = "border-b border-slate-200 text-slate-500 " >
118+ < thead className = "text-[var(--muted)]" >
119+ < tr className = "border-b border-[var(--line)] " >
113120 < th className = "py-2" > Run</ th >
114121 < th className = "py-2" > Env</ th >
115122 < th className = "py-2" > Agent</ th >
@@ -120,9 +127,9 @@ export default function LeaderboardPage() {
120127 </ thead >
121128 < tbody >
122129 { rows . map ( ( row , index ) => (
123- < tr key = { row . run_id } className = "border-b border-slate-100 last:border-b-0" >
130+ < tr key = { row . run_id } className = "border-b border-[var(--line)]/70 last:border-b-0" >
124131 < td className = "py-3 font-mono text-xs" >
125- < Link className = "text-ember hover:underline" href = { `/runs/${ row . run_id } ` } >
132+ < Link className = "text-[var(--ink)] underline-offset-4 hover:underline" href = { `/runs/${ row . run_id } ` } >
126133 #{ index + 1 } { row . run_id }
127134 </ Link >
128135 </ td >
0 commit comments