:root {
  --bg:       #0d1117;
  --bg2:      #161b22;
  --bg3:      #1c2333;
  --border:   #30363d;
  --text:     #e6edf3;
  --text2:    #8b949e;
  --text3:    #484f58;
  --accent:    #58a6ff;
  --accent2:  #1f6feb;
  --green:    #3fb950;
  --green-bg: rgba(63,185,80,.12);
  --red:      #f85149;
  --red-bg:   rgba(248,81,73,.10);
  --gold:     #d29922;
}
* { box-sizing:border-box; margin:0; padding:0; }
body { background:var(--bg); color:var(--text); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans SC",sans-serif; min-height:100vh; }

/* ── 顶部 ──────────────────────────────────────────── */
header {
  position:sticky; top:0; z-index:100;
  display:flex; align-items:center; gap:1.2rem;
  padding:.7rem 1.5rem;
  background:var(--bg2); border-bottom:1px solid var(--border);
}
.logo { display:flex; align-items:center; gap:.6rem; cursor:pointer; }
.logo img { width:36px; height:36px; border-radius:50%; object-fit:cover; }
.logo-text { font-size:1.05rem; font-weight:700; color:var(--accent2); white-space:nowrap; letter-spacing:.3px; }
.spacer { flex:1; }
nav { display:flex; gap:.3rem; }
.nav-link { color:var(--text2); text-decoration:none; font-size:.88rem; padding:.35rem .8rem; border-radius:6px; transition:.12s; }
.nav-link:hover, .nav-link.active { color:var(--text); background:var(--bg3); }

.btn-admin {
  background:var(--accent2); color:#fff; border:none; border-radius:6px;
  padding:.4rem 1rem; font-size:.85rem; cursor:pointer; transition:.12s;
}
.btn-admin:hover { opacity:.88; }

/* ── 主体 ──────────────────────────────────────────── */
.main { max-width:1100px; margin:0 auto; padding:1.5rem 1.2rem; }
.card {
  background:var(--bg2); border:1px solid var(--border); border-radius:10px;
  padding:1.2rem 1.4rem; margin-bottom:1.2rem;
}
.section-title { font-size:1.1rem; font-weight:700; color:var(--text); margin-bottom:1rem; }

/* ── 排行榜 ────────────────────────────────────────── */
.leaderboard-table { width:100%; border-collapse:collapse; }
.leaderboard-table th {
  text-align:left; font-size:.75rem; text-transform:uppercase; letter-spacing:.6px;
  color:var(--text2); padding:.55rem .8rem; border-bottom:2px solid var(--border);
}
.leaderboard-table td { padding:.6rem .8rem; border-bottom:1px solid var(--border); font-size:.9rem; }
.leaderboard-table tr { transition:background .1s; }
.leaderboard-table tbody tr:hover { background:var(--bg3); }
.rank-cell { font-weight:700; font-size:1rem; min-width:2.2rem; }
.rank-1 { color:var(--gold); }
.rank-2 { color:var(--text2); }
.rank-3 { color:#cd7f32; }
.user-link { color:var(--accent); text-decoration:none; cursor:pointer; }
.user-link:hover { text-decoration:underline; }
.badge { font-size:.75rem; padding:.15rem .55rem; border-radius:20px; font-weight:600; }
.badge-school { background:rgba(88,166,255,.13); color:var(--accent); }
.badge-rating { background:rgba(63,185,80,.13); color:var(--green); }
.table-wrap { overflow-x:auto; }

/* ── 比赛列表 ─────────────────────────────────────── */
.comp-list { display:flex; flex-direction:column; gap:.6rem; }
.comp-card {
  display:flex; align-items:center; gap:1rem;
  background:var(--bg2); border:1px solid var(--border); border-radius:10px;
  padding:.9rem 1.2rem; cursor:pointer; transition:border-color .15s, background .15s;
}
.comp-card:hover { border-color:var(--accent); background:var(--bg3); }
.comp-time { color:var(--text2); font-size:.85rem; min-width:85px; }
.comp-name { flex:1; font-weight:600; font-size:.95rem; }
.comp-arrow { color:var(--text3); font-size:1.2rem; }

/* ── 比赛详情（XCPC 风格）────────────────────────── */
.th-rank  { min-width:44px; text-align:center; }
.th-team  { min-width:160px; }
.th-school{ min-width:100px; }
.th-prob  { min-width:58px; text-align:center; font-weight:700; font-size:.85rem; }
.th-total { min-width:60px; text-align:center; }
.th-penalty{ min-width:80px; text-align:center; }

.td-rank   { text-align:center; font-weight:700; padding:.5rem .4rem; }
.td-team   { font-family:monospace; font-size:.85rem; color:var(--text2); padding:.5rem .6rem; }
.td-name   { padding:.5rem .6rem; }
.td-school { padding:.5rem .6rem; }
.td-total  { text-align:center; font-weight:700; padding:.5rem .4rem; }
.td-penalty{ text-align:center; font-family:monospace; font-size:.85rem; color:var(--text2); padding:.5rem .4rem; }

/* 题目格子 */
.prob-solved  {
  background:var(--green-bg); border:1px solid rgba(63,185,80,.3);
  border-radius:6px; text-align:center; padding:.35rem .2rem; min-width:56px;
}
.prob-failed  {
  background:var(--red-bg); border:1px solid rgba(248,81,73,.25);
  border-radius:6px; text-align:center; padding:.35rem .2rem; min-width:56px;
}
.prob-blank  { min-width:56px; }
.prob-time    { font-size:.82rem; font-weight:600; color:var(--green); }
.prob-attempts{ font-size:.7rem; color:var(--text2); margin-top:2px; }
.prob-fail-marker{ font-size:1rem; color:var(--red); font-weight:700; }
.team-vjudge { font-size:.8rem; color:var(--text3); }

/* 排名高亮 */
.rank-1 td { border-left:3px solid var(--gold); }
.rank-2 td { border-left:3px solid var(--text2); }
.rank-3 td { border-left:3px solid #cd7f32; }

/* ── 用户主页 ─────────────────────────────────────── */
.user-header { display:flex; align-items:center; gap:1.2rem; margin-bottom:1.2rem; }
.user-avatar { font-size:2.4rem; }
.user-meta { flex:1; }
.user-meta h2 { margin-bottom:.4rem; }
.user-meta-row { display:flex; gap:1rem; flex-wrap:wrap; font-size:.88rem; color:var(--text2); margin-top:.5rem; }
.meta-item span { color:var(--text); font-weight:600; margin-left:.3rem; }

.chart-container { margin:1.5rem 0 1rem; height:300px; }

.rating-history { margin-top:1.2rem; }
.rating-row {
  display:flex; align-items:center; gap:1rem;
  padding:.6rem .5rem; border-bottom:1px solid var(--border);
  border-radius:6px; transition:background .12s; margin:0 -.5rem;
}
.rating-row:last-child { border-bottom:none; }
.rating-row:hover { background:var(--bg3); }
.rating-change { font-weight:700; font-size:.9rem; min-width:55px; text-align:right; }
.rating-change.up   { color:var(--green); }
.rating-change.down { color:var(--red); }
.rating-change.neutral { color:var(--text3); }

/* ── 通用 ──────────────────────────────────────────── */
.back-btn { color:var(--accent); cursor:pointer; font-size:.9rem; margin-bottom:1rem; display:inline-block; }
.back-btn:hover { text-decoration:underline; }
.empty { color:var(--text3); font-size:.9rem; padding:1.5rem 0; text-align:center; }
.link { color:var(--accent); cursor:pointer; }
.link:hover { text-decoration:underline; }

/* 弹窗 */
.modal-backdrop {
  position:fixed; inset:0; z-index:200;
  background:rgba(0,0,0,.55); display:flex; align-items:center; justify-content:center;
}
.modal {
  background:var(--bg2); border:1px solid var(--border); border-radius:12px;
  width:92%; max-width:540px; max-height:82vh; overflow-y:auto; padding:1.4rem;
}
.modal-title { font-size:1.05rem; font-weight:700; margin-bottom:1rem; }

/* 管理后台 Tabs */
.tabs { display:flex; gap:.4rem; margin-bottom:1rem; }
.tab {
  background:none; border:1px solid var(--border); border-radius:6px;
  color:var(--text2); padding:.4rem .9rem; font-size:.85rem; cursor:pointer;
}
.tab.active { background:var(--accent2); color:#fff; border-color:var(--accent2); }

/* 表单 */
.form-row { display:flex; gap:.7rem; margin-bottom:.7rem; flex-wrap:wrap; }
.form-row input {
  flex:1; min-width:120px; background:var(--bg3); border:1px solid var(--border);
  border-radius:6px; color:var(--text); padding:.5rem .7rem; font-size:.88rem;
}
.form-row input:focus { outline:none; border-color:var(--accent); }
.btn.btn-primary {
  background:var(--accent2); color:#fff; border:none; border-radius:6px;
  padding:.5rem 1.1rem; font-size:.88rem; cursor:pointer;
}
.btn.btn-primary:hover { opacity:.88; }
.btn-sm {
  background:var(--bg3); color:var(--text2); border:1px solid var(--border);
  border-radius:6px; padding:.3rem .7rem; font-size:.8rem; cursor:pointer;
}
.btn-sm.danger { color:var(--red); border-color:rgba(248,81,73,.3); }
.btn-sm.danger:hover { background:var(--red-bg); }
.admin-table { width:100%; border-collapse:collapse; font-size:.88rem; }
.admin-table th { text-align:left; color:var(--text2); padding:.5rem; border-bottom:1px solid var(--border); }
.admin-table td { padding:.5rem; border-bottom:1px solid var(--border); }
.alert { padding:.5rem .8rem; border-radius:6px; font-size:.88rem; margin-bottom:.8rem; }
.alert-success { background:var(--green-bg); color:var(--green); }
.alert-error   { background:var(--red-bg);   color:var(--red);   }

/* 下拉框 */
.school-select {
  background:var(--bg3); color:var(--text); border:1px solid var(--border);
  border-radius:6px; padding:.35rem .6rem; font-size:.85rem; cursor:pointer;
  min-width:140px;
}
.school-select:focus { outline:none; border-color:var(--accent); }

/* 比赛类型标签 */
.contest-type-badge {
  font-size: .75rem; padding: .15rem .55rem; border-radius: 20px; font-weight: 600;
  white-space: nowrap;
}
.contest-type-div1 { background: rgba(210, 153, 34, .18); color: var(--gold); }
.contest-type-div2 { background: rgba(88, 166, 255, .15); color: var(--accent); }

/* 响应式 */
@media(max-width:640px) {
  header { flex-wrap:wrap; gap:.6rem; padding:.6rem; }
  .logo-text { font-size:.9rem; }
  .main { padding:.8rem .6rem; }
}