/* ============================================================ leaderboard.css — Revamped Leaderboard Same layout, visual polish + interactivity ============================================================ */ /* ── Page shell ── */ .page-leaderboard-container { display: block; } .page-leaderboard { height: 100%; display: grid; grid-template-columns: minmax(24rem, 2fr) 3fr; grid-template-rows: max-content 1fr; column-gap: 2rem; max-width: 80rem; margin: 0 auto; } .page-leaderboard > div { overflow-y: auto; } /* ── Error banner ── */ .page-leaderboard .error-container { grid-row: 1; grid-column: 1 / span 2; } .page-leaderboard .error-container .error { padding: 0.75rem 1rem; background-color: var(--color-error); color: var(--color-on-error); border-radius: 6px; font-size: 0.85rem; } /* ── Board + player containers ── */ .page-leaderboard .board-container, .page-leaderboard .player-container { grid-row: 2; padding-block: 2rem; } .page-leaderboard .board-container { padding-inline: 1rem; box-shadow: inset 0 -24px 20px -20px rgba(0,0,0,0.4); } /* ── Board table ── */ .page-leaderboard .board { table-layout: auto; display: block; width: 100%; border-collapse: separate; border-spacing: 0 3px; } /* ── Rank column ── */ .page-leaderboard .board .rank { padding-block: 0.75rem; padding-right: 0.5rem; text-align: end; font-variant-numeric: tabular-nums; white-space: nowrap; font-size: 0.8rem; color: rgba(255,255,255,0.35); font-weight: 700; letter-spacing: 0.04em; width: 1%; } /* Top 3 rank numbers */ .page-leaderboard .board tr:nth-child(1) .rank { color: #ffd700; text-shadow: 0 0 8px rgba(255,215,0,0.5); } .page-leaderboard .board tr:nth-child(2) .rank { color: #c0c0c0; text-shadow: 0 0 8px rgba(192,192,192,0.4); } .page-leaderboard .board tr:nth-child(3) .rank { color: #cd7f32; text-shadow: 0 0 8px rgba(205,127,50,0.4); } /* ── Trophy column ── */ .page-leaderboard .board .rank-image { padding-left: 0.75rem; padding-right: 0.25rem; width: 2rem; } .page-leaderboard .board .rank-image .trophy { height: 20px; display: block; filter: drop-shadow(0 2px 4px rgba(0,0,0,0.5)); transition: transform 0.2s ease; } .page-leaderboard .board tr:hover .trophy { transform: scale(1.15) rotate(-4deg); } /* ── Score column ── */ .page-leaderboard .board .total { padding: 0.75rem 0.75rem 0.75rem 0.5rem; text-align: end; font-variant-numeric: tabular-nums; white-space: nowrap; font-size: 0.85rem; font-weight: 700; color: rgba(255,255,255,0.45); width: 1%; } .page-leaderboard .board tr:nth-child(1) .total { color: rgba(255,215,0,0.75); } .page-leaderboard .board tr:nth-child(2) .total { color: rgba(192,192,192,0.75); } .page-leaderboard .board tr:nth-child(3) .total { color: rgba(205,127,50,0.75); } /* ── Icon column ── */ .page-leaderboard .board .userIcon { width: 2.75rem; vertical-align: middle; padding-left: 0.25rem; } .page-leaderboard .board .userIcon .ico { height: 2.25rem; width: 2.25rem; display: block; border-radius: 5px; image-rendering: pixelated; box-shadow: 0 0 0 1px rgba(255,255,255,0.08); transition: transform 0.15s ease, box-shadow 0.15s ease; } .page-leaderboard .board tr:hover .ico { transform: scale(1.08); box-shadow: 0 0 0 1px rgba(255,255,255,0.22); } /* ── Username column ── */ .page-leaderboard .board .user { width: 100%; vertical-align: middle; padding-left: 0.4rem; } .page-leaderboard .board .user button { background-color: transparent; color: var(--color-on-background); border: 1px solid transparent; border-radius: 7px; padding: 0.55rem 0.85rem; text-align: start; word-break: normal; overflow-wrap: anywhere; width: 100%; position: relative; overflow: hidden; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.1s ease; } /* shimmer on hover */ .page-leaderboard .board .user button::before { content: ''; position: absolute; inset: 0; background: linear-gradient( 105deg, transparent 35%, rgba(255,255,255,0.05) 50%, transparent 65% ); transform: translateX(-100%); transition: transform 0.4s ease; pointer-events: none; } .page-leaderboard .board .user button:hover::before { transform: translateX(100%); } .page-leaderboard .board .user button:hover { background-color: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.1); color: var(--color-on-background-hover); cursor: pointer; transform: translateX(2px); box-shadow: 0 2px 8px rgba(0,0,0,0.3); } .page-leaderboard .board .user.active button { background-color: var(--color-primary); color: var(--color-on-primary); border-color: rgba(255,213,74,0.7); box-shadow: 0 0 0 2px rgba(255,213,74,0.25), 0 0 16px rgba(255,213,74,0.15), 0 3px 12px rgba(0,0,0,0.4); transform: translateX(3px); } /* ── Player detail panel ── */ .page-leaderboard .player { display: flex; flex-direction: column; gap: 1.75rem; padding-right: 2rem; } /* Player name heading */ .page-leaderboard .player > h2:first-child { font-size: 1.6rem; font-weight: 800; margin: 0; background: linear-gradient(135deg, #ffffff 55%, rgba(255,213,74,0.75) 100%); -webkit-background-clip: text; background-clip: text; color: transparent; line-height: 1.2; } /* Total points sub-label */ .page-leaderboard .player .extra_points_info { font-size: 0.75rem; color: rgba(255,255,255,0.35); font-style: italic; margin: -1rem 0 0; line-height: 1.5; letter-spacing: 0.01em; padding: 0.4rem 0.75rem; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.05); border-radius: 6px; } /* Section headings (Completions, Verifications, etc.) */ .page-leaderboard .player h2, .page-leaderboard .player h3 { font-size: 0.7rem; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; color: rgba(255,255,255,0.3); padding-bottom: 0.5rem; border-bottom: 1px solid rgba(255,255,255,0.06); margin: 0; } /* ── Player level rows table ── */ .page-leaderboard .player .table { table-layout: auto; width: 100%; border-collapse: separate; border-spacing: 0 5px; } .page-leaderboard .player .table tr td:not(:last-child) { padding-right: 1rem; } .page-leaderboard .player .table p, .page-leaderboard .player .table a { padding-block: 0.5rem; margin: 0; } /* rank + score: shrink to content */ .page-leaderboard .player .table .rank, .page-leaderboard .player .table .score { width: 1%; white-space: nowrap; } .page-leaderboard .player .table .rank p, .page-leaderboard .player .table .score p { text-align: end; font-variant-numeric: tabular-nums; font-size: 0.8rem; color: rgba(255,255,255,0.4); font-weight: 700; } /* Level pill */ .page-leaderboard .player .table .level { width: 100%; background: url(/assets/april-background.jpg) #00000094; background-blend-mode: multiply; background-size: cover; background-position: center; border-radius: 0.65rem; padding: 0.7rem 1rem 0.55rem; border: 1px solid rgba(255,255,255,0.06); box-shadow: inset 0 1px 0 rgba(255,255,255,0.06), 0 2px 8px rgba(0,0,0,0.35); position: relative; overflow: hidden; transition: filter 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; } /* shimmer on level pill */ .page-leaderboard .player .table .level::before { content: ''; position: absolute; inset: 0; background: linear-gradient( 105deg, transparent 35%, rgba(255,255,255,0.04) 50%, transparent 65% ); transform: translateX(-100%); transition: transform 0.4s ease; pointer-events: none; } .page-leaderboard .player .table tr:hover .level::before { transform: translateX(100%); } .page-leaderboard .player .table tr:hover .level { filter: brightness(1.3); border-color: rgba(211,176,60,0.35); box-shadow: inset 0 1px 0 rgba(255,255,255,0.1), 0 4px 16px rgba(0,0,0,0.45), 0 0 0 1px rgba(211,176,60,0.2); } .page-leaderboard .player .table a { font-size: 0.9rem; font-weight: 600; color: rgba(255,255,255,0.9); text-decoration: none; display: block; transition: color 0.15s ease; } .page-leaderboard .player .table a:hover { text-decoration: underline; color: #ffd54a; } /* ════════════════════════════════════════ SCORE BREAKDOWN (donut + bars) ════════════════════════════════════════ */ .page-leaderboard .player .lb-breakdown { display: flex; align-items: center; gap: 1.5rem; padding: 1.1rem 1.25rem; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.07); border-radius: 12px; } /* ── Donut ── */ .page-leaderboard .player .lb-donut-wrap { flex-shrink: 0; width: 100px; height: 100px; } .page-leaderboard .player .lb-donut { width: 100%; height: 100%; /* SVG circles animate in */ overflow: visible; } .page-leaderboard .player .lb-donut circle:not(:first-child) { transition: stroke-dasharray 0.7s cubic-bezier(0.22, 1, 0.36, 1), stroke-dashoffset 0.7s cubic-bezier(0.22, 1, 0.36, 1); } .page-leaderboard .player .lb-donut-total { font-size: 18px; font-weight: 800; fill: #fff; font-family: 'Geist', sans-serif; } .page-leaderboard .player .lb-donut-label { font-size: 10px; font-weight: 600; fill: rgba(255,255,255,0.35); font-family: 'Geist Mono', monospace; letter-spacing: 0.1em; text-transform: uppercase; } /* ── Bars ── */ .page-leaderboard .player .lb-bars { flex: 1; display: flex; flex-direction: column; gap: 0.55rem; min-width: 0; } .page-leaderboard .player .lb-bar-row { display: flex; align-items: center; gap: 0.5rem; } .page-leaderboard .player .lb-bar-dot { flex-shrink: 0; width: 7px; height: 7px; border-radius: 50%; box-shadow: 0 0 6px currentColor; } .page-leaderboard .player .lb-bar-cat { flex-shrink: 0; width: 5.5rem; font-size: 0.72rem; font-weight: 600; color: rgba(255,255,255,0.45); letter-spacing: 0.02em; } .page-leaderboard .player .lb-bar-track { flex: 1; height: 5px; background: rgba(255,255,255,0.07); border-radius: 99px; overflow: hidden; min-width: 0; } .page-leaderboard .player .lb-bar-fill { height: 100%; border-radius: 99px; transition: width 0.7s cubic-bezier(0.22, 1, 0.36, 1); /* glow matching the bar colour */ box-shadow: 0 0 8px currentColor; } .page-leaderboard .player .lb-bar-val { flex-shrink: 0; width: 3rem; text-align: right; font-size: 0.72rem; font-weight: 700; font-family: 'Geist Mono', monospace; color: rgba(255,255,255,0.4); font-variant-numeric: tabular-nums; } /* ── Packs ── */ .page-leaderboard .player .packs { display: flex; flex-wrap: wrap; gap: 0.4em; } .page-leaderboard .player .packs .tag { display: flex; flex-shrink: 0; background-size: 100% 100% !important; transition: transform 0.15s ease, box-shadow 0.15s ease; } .page-leaderboard .player .packs .tag:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.4); } /* ── Tag pill (global) ── */ .tag { font-family: "Lexend Deca", sans-serif; display: block; border-radius: 14px; padding: 5px 10px; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.03em; } /* ── Shitty mode (preserved) ── */ .shitty .page-leaderboard .board .user button { background-color: transparent; padding: 1rem 0; border: none; box-shadow: none; transform: none; } .shitty .page-leaderboard .board .user button::before { display: none; } .shitty .page-leaderboard .board .user button:hover { background-color: #eee; color: orange !important; transform: none; box-shadow: none; } .shitty .page-leaderboard .board .user.active button { background-color: transparent; color: orange; box-shadow: none; transform: none; border: none; }