/* ═══════════════════════════════════════════════════════════════════════════
   public/assets/css/learn-xp.css — trang "Thành tích" /bang-xep-hang (XP Đợt 2, 26/09/2026; bản mẫu chủ site đã duyệt).
   Bốn tab: Tổng quan · Xếp hạng · Lịch sử XP · Thành tựu. Dựng trên token --lv-* (learn-shell.css) + khung .lv-band/.hb-*
   (learn-ui.css, learn-hub.css). KHÔNG hex cứng — tự lật ở chế độ tối. Khách: chỉ tab Xếp hạng (top 10).
   ═══════════════════════════════════════════════════════════════════════════ */
.xa { --xa-amber: var(--lv-warn); --xa-amber-deep: var(--lv-warn-deep); --xa-amber-soft: var(--color-warning-soft); }
.xa-band { --lv-band-pb: 104px; }
.xa-hero { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); align-items: center; gap: 28px; }
.xa-ctx { margin-top: 12px; font-size: 15px; line-height: 1.6; color: var(--lv-on-2); }
.xa-ctx b { color: var(--lv-on); font-weight: 700; }
.xa-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.xa-chips .lv-chip-d { height: 32px; }

/* Vòng cấp độ trong thẻ kính */
.xa-lv { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 18px; padding: 18px 20px; }
.xa-ring { position: relative; width: 104px; height: 104px; flex: none; }
.xa-ring svg { display: block; width: 104px; height: 104px; transform: rotate(-90deg); }
.xa-ring circle { fill: none; stroke-width: 10; }
.xa-ring .bg { stroke: var(--lv-glass-2); }
.xa-ring .fg { stroke: var(--lv-mint); stroke-linecap: round; }
.xa-ring__c { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; }
.xa-ring__c small { display: block; font-size: 12px; color: var(--lv-on-3); }
.xa-ring__c b { font-size: 28px; line-height: 1.1; font-weight: 800; color: var(--lv-on); }
.xa-lv__t { display: grid; gap: 4px; min-width: 0; }
.xa-lv__t b { font-size: 21px; line-height: 1.25; font-weight: 800; letter-spacing: -.01em; color: var(--lv-on); }
.xa-lv__t span { font-size: 13.5px; line-height: 1.5; color: var(--lv-on-2); }
.xa-lv__t span strong { color: var(--lv-on); font-weight: 700; }
.xa-cta { display: grid; gap: 12px; padding: 20px; }
.xa-cta b { font-size: 18px; line-height: 1.35; color: var(--lv-on); }
.xa-cta p { font-size: 14px; line-height: 1.55; color: var(--lv-on-2); }
.xa-cta__btns { display: flex; flex-wrap: wrap; gap: 10px; }

/* Tab */
.xa-body { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }   /* minmax(0): hàng nút lọc dài không được nong cả trang rộng hơn màn hình */
.xa-tabs { display: flex; gap: 4px; padding: 6px; border-radius: 16px; overflow-x: auto; scrollbar-width: none; }
.xa-tabs::-webkit-scrollbar { display: none; }
.xa-tab {
  flex: 1 0 auto; height: 42px; padding: 0 18px; border: 0; border-radius: 11px; background: transparent; cursor: pointer;
  font: 650 14.5px/1.45 var(--lv-font); color: var(--lv-muted); white-space: nowrap;
  transition: background var(--lv-dur) var(--lv-ease), color var(--lv-dur) var(--lv-ease);
}
.xa-tab:hover { background: var(--lv-tint); color: var(--lv-ink); }
.xa-tab[aria-selected="true"] { background: var(--lv-brand-strong); color: var(--lv-on); }
.xa-tab:focus-visible { outline: none; box-shadow: var(--lv-focus); }
.xa-pane[hidden] { display: none !important; }

/* Thẻ nội dung */
.xa-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; align-items: start; }
.xa-col { display: grid; gap: 16px; align-content: start; min-width: 0; }
.xa-card { display: grid; gap: 14px; align-content: start; padding: 20px 22px; }
.xa-card__h { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 4px 12px; }
.xa-card__h h2 { font-size: 17px; line-height: 1.35; font-weight: 750; letter-spacing: -.01em; color: var(--lv-ink); }
.xa-card__h span { font-size: 13px; color: var(--lv-muted); }
.xa-big { font-size: 28px; line-height: 1.15; font-weight: 800; letter-spacing: -.02em; color: var(--lv-ink); }
.xa-big small { margin-left: 4px; font-size: 13.5px; font-weight: 600; letter-spacing: 0; color: var(--lv-muted); }
.xa-cmp { font-size: 13.5px; font-weight: 600; color: var(--lv-brand-deep); }
.xa-cmp.is-down { color: var(--lv-muted); }
.xa-foot { font-size: 13px; line-height: 1.55; color: var(--lv-muted); }
.xa-foot a { color: var(--lv-brand-fg); font-weight: 600; }
.xa-empty { padding: 18px 4px; text-align: center; font-size: 14px; line-height: 1.55; color: var(--lv-muted); }
.xa-empty b { display: block; margin-bottom: 4px; font-size: 16px; color: var(--lv-ink); }

/* 7 ngày */
.xa-week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; height: 168px; align-items: end; }
.xa-day { display: grid; grid-template-rows: minmax(0, 1fr) auto auto; gap: 4px; height: 100%; text-align: center; }
.xa-day__bar { align-self: end; display: block; width: 100%; max-width: 42px; margin: 0 auto; min-height: 4px; border-radius: 9px 9px 4px 4px; background: var(--lv-sunken); }
.xa-day.is-on .xa-day__bar { background: color-mix(in srgb, var(--color-primary) 70%, var(--lv-surface)); }
.xa-day.is-today .xa-day__bar { background: var(--lv-brand-strong); }
.xa-day b { font-size: 12.5px; font-weight: 700; color: var(--lv-ink); }
.xa-day small { font-size: 12px; color: var(--lv-muted); }
.xa-day.is-today small { font-weight: 700; color: var(--lv-brand-deep); }
.xa-day.is-future b { color: var(--lv-faint); }

/* Chuỗi */
.xa-tier { display: grid; gap: 7px; padding: 12px 14px; border-radius: 14px; background: var(--xa-amber-soft); }
.xa-tier__t { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 14px; }
.xa-tier__t b { font-weight: 750; color: var(--xa-amber-deep); }
.xa-tier__t span { font-size: 13px; font-weight: 650; color: var(--xa-amber-deep); }
.xa-tier small { font-size: 13px; line-height: 1.5; color: var(--lv-text); }
.xa-mini { display: block; height: 7px; border-radius: 999px; background: var(--lv-sunken); overflow: hidden; }
.xa-mini > i { display: block; height: 100%; border-radius: inherit; background: var(--lv-brand-strong); }
.xa-tier .xa-mini { background: color-mix(in srgb, var(--xa-amber-deep) 14%, transparent); }
.xa-tier .xa-mini > i { background: var(--xa-amber); }
.xa-sub { margin-top: 2px; font-size: 14.5px; line-height: 1.4; font-weight: 700; color: var(--lv-ink); }
.xa-cal { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
.xa-cal em { font-style: normal; font-size: 11.5px; text-align: center; color: var(--lv-muted); }
.xa-cal span {
  aspect-ratio: 1; max-height: 42px; display: grid; place-content: center; border-radius: 9px; background: var(--lv-sunken);
  font-size: 12px; font-weight: 650; color: var(--lv-faint); font-variant-numeric: tabular-nums;
}
.xa-cal span.is-blank { background: transparent; }
.xa-cal span.is-study { background: var(--lv-brand); color: var(--lv-on); }
.xa-cal span.is-restore, .xa-cal span.is-protect { background: var(--xa-amber-soft); color: var(--xa-amber-deep); box-shadow: inset 0 0 0 1.5px var(--xa-amber); }
.xa-cal span.is-today { box-shadow: inset 0 0 0 2px var(--lv-brand-strong); color: var(--lv-brand-deep); background: var(--lv-surface); }
.xa-cal span.is-today.is-study { background: var(--lv-brand-strong); color: var(--lv-on); box-shadow: 0 0 0 2px var(--lv-wash); }
.xa-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; font-size: 12.5px; color: var(--lv-muted); }
.xa-legend i { display: inline-block; width: 11px; height: 11px; margin-right: 5px; border-radius: 3px; vertical-align: -1px; }
.xa-legend .k-study { background: var(--lv-brand); }
.xa-legend .k-keep { background: var(--xa-amber-soft); box-shadow: inset 0 0 0 1.5px var(--xa-amber); }
.xa-restore { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 14px; border-radius: 14px; background: var(--lv-tint); }
.xa-restore p { font-size: 13.5px; line-height: 1.5; color: var(--lv-text); }
.xa-restore p b { color: var(--lv-ink); }

/* Nguồn XP */
.xa-src { display: grid; gap: 10px; }
.xa-src__r { display: grid; grid-template-columns: 116px minmax(0, 1fr) 64px; align-items: center; gap: 12px; font-size: 14px; }
.xa-src__r > span { color: var(--lv-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xa-src__r > b { text-align: right; font-weight: 750; color: var(--lv-ink); }
.xa-src__bar { height: 10px; border-radius: 999px; background: var(--lv-sunken); overflow: hidden; }
.xa-src__bar > i { display: block; height: 100%; border-radius: inherit; background: var(--lv-brand); }
.xa-src__r.is-streak .xa-src__bar > i { background: var(--xa-amber); }

/* Kiếm thêm XP */
.xa-earn { display: grid; gap: 8px; }
.xa-earn a {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 2px 14px; padding: 12px 14px;
  border-radius: 14px; background: var(--lv-tint); border: 1px solid transparent;
  transition: border-color var(--lv-dur) var(--lv-ease), background var(--lv-dur) var(--lv-ease);
}
.xa-earn a:hover { background: var(--lv-wash); border-color: color-mix(in srgb, var(--color-primary) 35%, transparent); }
.xa-earn a:focus-visible { outline: none; box-shadow: var(--lv-focus); }
.xa-earn b { font-size: 14.5px; font-weight: 650; color: var(--lv-ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xa-earn small { grid-column: 1; font-size: 12.5px; color: var(--lv-muted); }
.xa-earn strong { grid-column: 2; grid-row: 1 / span 2; font-size: 15px; font-weight: 800; color: var(--lv-brand-deep); white-space: nowrap; }

/* Xếp hạng */
.xa-filters { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; }
.xa-seg { display: inline-flex; gap: 3px; padding: 4px; border-radius: 13px; background: var(--lv-sunken); max-width: 100%; overflow-x: auto; scrollbar-width: none; }
.xa-seg::-webkit-scrollbar { display: none; }
.xa-seg a { flex: none; display: inline-flex; align-items: center; height: 36px; padding: 0 14px; border-radius: 10px; font-size: 13.5px; font-weight: 650; color: var(--lv-muted); white-space: nowrap; }
.xa-seg a:hover { color: var(--lv-ink); }
.xa-seg a.is-on { background: var(--lv-surface); color: var(--lv-ink); box-shadow: var(--lv-sh-1); }
.xa-seg a:focus-visible { outline: none; box-shadow: var(--lv-focus); }
.xa-rows { display: grid; }
.xa-row {
  display: grid; grid-template-columns: 40px 42px minmax(0, 1fr) auto; align-items: center; gap: 12px;
  min-height: 62px; padding: 9px 10px; border-top: 1px solid var(--lv-hair); color: inherit;
}
.xa-rows > .xa-row:first-child { border-top: 0; }
a.xa-row { border-radius: 12px; transition: background var(--lv-dur) var(--lv-ease); }
a.xa-row:hover { background: var(--lv-tint); }
a.xa-row:focus-visible { outline: none; box-shadow: inset var(--lv-focus); }
.xa-row.is-me { border-radius: 14px; border-top-color: transparent; background: var(--lv-wash); box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--color-primary) 55%, transparent); }
.xa-row.is-me + .xa-row { border-top-color: transparent; }
.xa-row__r { text-align: center; font-size: 15px; font-weight: 800; color: var(--lv-muted); font-variant-numeric: tabular-nums; }
.xa-row__r.is-top { color: var(--xa-amber-deep); }
.xa-row__t { display: grid; gap: 1px; min-width: 0; }
.xa-row__t b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 15px; font-weight: 650; color: var(--lv-ink); }
.xa-row__t small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12.5px; color: var(--lv-muted); }
.xa-row.is-me .xa-row__t small { white-space: normal; }   /* "còn N XP để lên hạng #r" phải đọc được trọn */
.xa-row__xp { display: flex; align-items: baseline; gap: 4px; font-size: 16px; font-weight: 800; color: var(--lv-ink); white-space: nowrap; }
.xa-row__xp small { font-size: 11.5px; font-weight: 650; color: var(--lv-muted); }
.xa-ava {
  --t: color-mix(in srgb, var(--color-primary) 58%, black);
  width: 42px; height: 42px; border-radius: 50%; display: grid; place-content: center; overflow: hidden; flex: none;
  background: var(--t); color: var(--lv-on); font-size: 14px; font-weight: 750; letter-spacing: .01em;
}
.xa-ava img { width: 100%; height: 100%; object-fit: cover; }
.xa-ava--2 { --t: color-mix(in srgb, var(--color-accent) 52%, black); }
.xa-ava--3 { --t: color-mix(in srgb, var(--color-secondary) 50%, black); }
.xa-ava--4 { --t: color-mix(in srgb, var(--color-primary) 36%, var(--lv-night)); }
.xa-ava--5 { --t: color-mix(in srgb, var(--color-locked) 58%, black); }
.xa-gap { display: flex; justify-content: center; padding: 8px 0; border-top: 1px solid var(--lv-hair); }
.xa-gap button {
  height: 36px; padding: 0 14px; border: 1px solid var(--lv-border); border-radius: 10px; background: var(--lv-surface); cursor: pointer;
  font: 600 13.5px/1.45 var(--lv-font); color: var(--lv-text);
}
.xa-gap button:hover { background: var(--lv-tint); color: var(--lv-ink); }
.xa-rows:not(.is-open) .is-more { display: none; }
.xa-rows.is-open .xa-gap--more { display: none; }
.xa-note { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 14px; border-radius: 14px; background: var(--lv-sunken); font-size: 13.5px; color: var(--lv-text); }
.xa-login { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; border-radius: 14px; border: 1px dashed var(--lv-border); }
.xa-login p { font-size: 14px; line-height: 1.5; color: var(--lv-text); }

/* Lịch sử XP */
.xa-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.xa-tag {
  height: 34px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--lv-border); background: var(--lv-surface); cursor: pointer;
  font: 600 13px/1.45 var(--lv-font); color: var(--lv-text);
}
.xa-tag:hover { background: var(--lv-tint); }
.xa-tag[aria-pressed="true"] { background: var(--lv-brand-strong); border-color: var(--lv-brand-strong); color: var(--lv-on); }
.xa-hist { display: grid; gap: 18px; }
.xa-hist__d { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 4px 12px; padding-bottom: 8px; border-bottom: 1px solid var(--lv-hair); font-size: 13.5px; color: var(--lv-muted); }
.xa-hist__d b { font-size: 14.5px; color: var(--lv-ink); }
.xa-hist__d span { font-weight: 650; }
.xa-ev { display: grid; grid-template-columns: 72px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 9px 0; }
.xa-ev + .xa-ev { border-top: 1px dashed var(--lv-hair); }
.xa-ev strong { font-size: 15px; font-weight: 800; color: var(--lv-brand-deep); white-space: nowrap; }
.xa-ev.is-streak strong { color: var(--xa-amber-deep); }
.xa-ev.is-bonus strong { color: var(--color-accent-deep); }
.xa-ev.is-neg strong { color: var(--lv-muted); }
.xa-ev__t { display: grid; gap: 1px; min-width: 0; }
.xa-ev__t b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14.5px; font-weight: 650; color: var(--lv-ink); }
.xa-ev__t small { font-size: 12.5px; line-height: 1.45; color: var(--lv-muted); }
.xa-ev time { font-size: 12.5px; color: var(--lv-faint); font-variant-numeric: tabular-nums; }
.xa-more { display: flex; justify-content: center; }

/* Thành tựu */
.xa-badges { display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); gap: 12px; }
.xa-badge {
  position: relative; display: grid; gap: 6px; align-content: start; min-height: 132px; padding: 16px; border-radius: 16px; text-align: left;
  border: 1px solid var(--lv-hair); background: var(--lv-surface); color: inherit; font: inherit;
}
button.xa-badge { cursor: pointer; transition: border-color var(--lv-dur) var(--lv-ease), box-shadow var(--lv-dur) var(--lv-ease); }
button.xa-badge:hover { border-color: color-mix(in srgb, var(--color-primary) 40%, var(--lv-hair)); box-shadow: var(--lv-sh-2); }
button.xa-badge:focus-visible { outline: none; box-shadow: var(--lv-focus); }
.xa-badge__n { font-size: 28px; line-height: 1.05; font-weight: 800; letter-spacing: -.02em; color: var(--lv-brand-deep); }
.xa-badge__n small { margin-left: 3px; font-size: 12.5px; font-weight: 700; letter-spacing: 0; color: var(--lv-muted); }
.xa-badge b { font-size: 14px; line-height: 1.35; color: var(--lv-ink); }
.xa-badge > small { font-size: 12.5px; line-height: 1.45; color: var(--lv-muted); }
.xa-badge.is-got { background: linear-gradient(180deg, var(--lv-surface), var(--lv-tint)); }
.xa-badge.is-tier .xa-badge__n { color: var(--xa-amber-deep); }
.xa-badge.is-rank .xa-badge__n { color: var(--color-accent-deep); }
.xa-badge.is-lock { background: var(--lv-sunken); }
.xa-badge.is-lock .xa-badge__n { color: var(--lv-faint); }
.xa-badge.is-tier .xa-mini > i { background: var(--xa-amber); }

@media (max-width: 1023px) {
  .xa-band { --lv-band-pb: 92px; }
  .xa-hero { grid-template-columns: 1fr; gap: 18px; }
  .xa-lv { padding: 14px 16px; gap: 14px; }
  .xa-ring, .xa-ring svg { width: 84px; height: 84px; }
  .xa-ring__c b { font-size: 23px; }
  .xa-lv__t b { font-size: 18px; }
  .xa-grid { display: flex; flex-direction: column; align-items: stretch; gap: 12px; }
  .xa-col { display: contents; }
  .xa-card--week { order: 1; } .xa-card--streak { order: 2; } .xa-card--earn { order: 3; } .xa-card--src { order: 4; }
  .xa-card { padding: 16px; gap: 12px; }
  .xa-tabs { padding: 5px; border-radius: 14px; }
  .xa-tab { flex: 1 1 0; min-width: max-content; height: 40px; padding: 0 10px; font-size: 13.5px; }
  .xa-week { height: 150px; gap: 6px; }
  .xa-src__r { grid-template-columns: 96px minmax(0, 1fr) 56px; gap: 10px; font-size: 13.5px; }
  .xa-row { grid-template-columns: 30px 38px minmax(0, 1fr) auto; gap: 10px; padding: 8px 6px; min-height: 58px; }
  .xa-ava { width: 38px; height: 38px; font-size: 13px; }
  .xa-row__t b { font-size: 14.5px; }
  .xa-row__xp { font-size: 15px; }
  .xa-filters { flex-direction: column; align-items: stretch; }
  .xa-seg a { flex: 1 0 auto; justify-content: center; padding: 0 10px; }
  .xa-ev { grid-template-columns: 60px minmax(0, 1fr) auto; gap: 10px; }
  .xa-badges { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .xa-badge { min-height: 124px; padding: 14px; }
  .xa-badge__n { font-size: 24px; }
}
/* Điện thoại: dải đầu gọn lại (bảng xếp hạng phải lộ ra ở màn đầu), hàng lọc lịch sử cuộn ngang thay vì chiếm 3 dòng */
@media (max-width: 600px) {
  .xa-lv__t span:last-child { display: none; }
  .xa-ring, .xa-ring svg { width: 72px; height: 72px; }
  .xa-ring__c small { font-size: 11px; }
  .xa-ring__c b { font-size: 21px; }
  .xa-tags { flex-wrap: nowrap; overflow-x: auto; margin: 0 -16px; padding: 0 16px; scrollbar-width: none; }
  .xa-tags::-webkit-scrollbar { display: none; }
  .xa-tag { flex: none; }
}
/* 4 tab phải vừa một hàng cả ở máy 360px — tab bị cắt nửa chữ trông như lỗi */
@media (max-width: 420px) {
  .xa-tabs { gap: 2px; padding: 4px; }
  .xa-tab { padding: 0 6px; font-size: 13px; }
  .xa-seg a { padding: 0 7px; font-size: 13px; }
}
@media (prefers-reduced-motion: reduce) { .xa-tab, .xa-earn a, button.xa-badge, a.xa-row { transition: none; } }
