/* =====================================================================
   GTL Academy — common.css (shared by every page)
   Load order in <head>: fonts.css → vendor CSS → common.css → page CSS
   Design system: kế thừa token mockup đã duyệt (đen · đỏ · vàng · cloud)
   ===================================================================== */

/* ---------- Tokens ----------
   BỐN màu chính: đỏ · vàng · đen · navy. Không có hue thứ năm — mọi nền sáng
   là sắc độ của đen (smoke), không phải kem, xanh nhạt hay vàng nhạt.

   Vai trò cố định, không dùng lẫn:
     Đỏ    hành động (nút, viền cảnh báo) và một bề mặt đậm --red-700
     Vàng  đang chọn · thành tích · nhấn mạnh. Là BỀ MẶT có chữ đen, không phải màu chữ
     Navy  bề mặt tối chính
     Đen   typography, và bề mặt tối nhấn dùng tiết chế
   Mọi giá trị đã tính contrast trước khi chọn; số ghi ngay cạnh biến. */
:root {
  /* Brand */
  --red:        #E54036;   /* nền nút. Chữ trắng 4.10:1 — ngoại lệ đã duyệt, chỉ cho nhãn nút đậm */
  --red-700:    #C42E23;   /* BỀ MẶT đỏ: chữ trắng 5.58:1 nên đặt được cả đoạn văn. Cũng là hover của nút đỏ */
  --yellow:     #F7CA39;   /* BỀ MẶT vàng: chữ đen 12.64:1, chữ navy 10.19:1. Không bao giờ làm màu chữ trên nền sáng */
  --dark:       #090B0C;   /* bề mặt tối chính (hero, footer, .bg-navy, nút tối) — khách chốt 15/09: nền tối dùng đen */
  --dark-700:   #1F2224;   /* hover trên nền tối */
  --navy:       #161F3D;   /* màu NHẤN như đỏ và vàng, dùng tiết chế cho thẻ nền đặc; không làm nền section nữa */
  --black:      #090B0C;   /* typography 19.72:1 trên trắng, và bề mặt tối nhấn */

  /* Trung tính = sắc độ của đen. Thay --warm (kem) và --pale (xanh nhạt) đã gỡ. */
  --white:      #FFFFFF;
  --smoke:      #F4F4F5;   /* nền section xen kẽ. Chữ đen 17.94:1, --gray 6.89:1 */
  --smoke-2:    #EDEDEF;   /* nền pill, ô ảnh chờ tải. --gray 6.48:1, --gray-soft 4.63:1 */
  --gray:       #545453;   /* body. 7.58:1 trắng, 6.89:1 smoke */
  --yellow-soft: #FCEBB4;  /* vàng nhạt: nền lấp nửa trái thẻ khoá nổi bật. Chữ đen 14.9:1 */
  --gray-soft:  #6A6A6A;   /* caption. 5.41:1 trắng, 4.92:1 smoke */

  /* Chữ trên bề mặt màu: giữ đúng ngưỡng 4.5:1 cho đoạn văn */
  --on-navy:    rgba(255,255,255,.72);  /* 8.7:1 trên navy */
  --on-red:     rgba(255,255,255,.92);  /* 4.92:1 trên --red-700 */
  --on-yellow:  rgba(9,11,12,.78);      /* 7.83:1 trên vàng */

  /* Đường kẻ: tách 2 vai trò vì WCAG 1.4.11 chỉ bắt buộc 3:1 với ranh giới điều khiển */
  --line:          #E2E2E4;               /* hairline: chia bảng, gạch mảnh bên trong card */
  --line-card:     #090B0C;               /* viền card: đậm (đen) 1.5px — hai kiểu card duy nhất: nền màu đặc hoặc viền đậm */
  --line-ink:      #090B0C;
  --line-strong:   #878789;               /* ranh giới control: 3.59:1 trắng, 3.26:1 smoke */
  --line-navy:     rgba(255,255,255,.35); /* ranh giới control trên navy: 3.17:1 */
  --line-on-red:   rgba(255,255,255,.85); /* ranh giới control trên đỏ: 4.42:1 — .35 chỉ được 1.81 nên không dùng lại --line-navy */
  --line-on-yellow:rgba(9,11,12,.55);     /* ranh giới control trên vàng: 3.88:1 */

  /* Type */
  /* Hai họ chữ: Bricolage Grotesque cho heading (grotesque hiện đại, có opsz nên
     cỡ lớn tự siết chân chữ), Google Sans cho body (đọc dài dễ, dấu tiếng Việt gọn) */
  --sans:    'Be Vietnam Pro', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;
  --display: 'Be Vietnam Pro', system-ui, -apple-system, Arial, sans-serif;
  --fs-h1: clamp(2.6rem, 5.2vw, 4.5rem);
  --fs-h2: clamp(2rem, 3.6vw, 3rem);
  --fs-h3: clamp(1.2rem, 1.8vw, 1.5rem);
  --fs-display: clamp(3rem, 6vw, 5.5rem);

  /* Shape: siết lại, bớt bo tròn để bớt cảm giác template */
  --r-sm: 8px;    /* ảnh bên trong card */
  --r: 12px;      /* card, khối */
  --r-lg: 12px;
  --r-pill: 999px;

  /* Shadow: gần như bỏ hẳn, chỉ giữ một mức cho thẻ form nổi trên navy */
  --sh-sm: none;
  --sh: 0 1px 2px rgba(9, 11, 12, .06);   /* chỉ bóng rất nhẹ cho lớp nổi (dropdown) */
  --dur: .18s;   /* hover: đổi viền / nền trong 150–200ms */

  /* Layout */
  --maxw: 1500px;   /* +25% so với 1200px */
  --gutter: clamp(18px, 4vw, 40px);
  --nav-h: 72px;
  --section: clamp(52px, 6vw, 80px);   /* khách 16/09: 100-120px quá thoáng, rút về ~80px */
  --ease: cubic-bezier(.16, 1, .3, 1);
}

/* ---------- Reset ---------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  font-family: var(--sans);
  color: var(--gray);
  background: var(--white);
  line-height: 1.65;
  font-size: 17px;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}
body.no-scroll { overflow: hidden; }
/* [hidden] của UA stylesheet là display:none ở specificity (0,1,0) — bất kỳ component nào
   của tác giả đặt display (.card, .field, .testi-card...) cũng thắng nó, nên phần tử vẫn hiện.
   Đó là lý do bộ lọc giáo viên và khoá học set hidden=true mà thẻ vẫn nằm nguyên trên lưới.
   Đặt !important một lần ở đây thay vì vá từng component: [hidden] phải luôn có nghĩa là ẩn. */
[hidden] { display: none !important; }
img, svg, video { max-width: 100%; display: block; }
img { height: auto; } /* thuộc tính height= chỉ để giữ chỗ chống CLS; CSS aspect-ratio quyết định kích thước thật */
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; color: inherit; }
ul, ol { list-style: none; }
h1, h2, h3, h4 {
  font-family: var(--display); font-optical-sizing: auto;
  color: var(--black); line-height: 1.12; letter-spacing: -.025em; font-weight: 700; text-wrap: balance;
}
h1 { font-size: var(--fs-h1); letter-spacing: -.03em; }
h2 { font-size: var(--fs-h2); }
h3 { font-size: var(--fs-h3); font-weight: 700; letter-spacing: -.015em; }
h4 { font-size: 1.05rem; font-weight: 700; letter-spacing: -.01em; }
p { max-width: 65ch; }
:focus-visible { outline: 3px solid var(--red); outline-offset: 3px; border-radius: 4px; }
::selection { background: var(--yellow); color: var(--black); }

/* ---------- Icons (sprite 3 khe màu, sinh bởi tools/build-icons.mjs) ----------
   Bộ icon khách là hình vẽ bằng fill chứ không phải stroke, nên không có
   stroke-width để chỉnh: kích thước hiển thị quyết định độ mảnh của nét.

   fill: currentColor là lưới an toàn: nếu engine nào không hiểu var() trong
   presentation attribute thì icon rơi về đơn sắc theo màu chữ, không vô hình. */
.ic { width: 1.35em; height: 1.35em; flex: none; fill: currentColor; stroke: none; }
.ic--sm { width: 1.1em; height: 1.1em; }
.ic--lg { width: 1.9em; height: 1.9em; }
/* Mũi tên nét (arrow.svg khách gửi 15/09): sprite không ghi stroke-width nên chỉnh độ dày ở đây, khớp chữ đậm của nút */
use[href$="#i-arrow-right"] { stroke-width: 1.6; }
.ic--xl { width: 40px; height: 40px; }

/* ---------- Layout helpers ---------- */
.wrap { max-width: var(--maxw); margin-inline: auto; padding-inline: var(--gutter); }
.section { padding-block: var(--section); }
.section--tight { padding-block: clamp(36px, 4.5vw, 60px); }
/* Hai section cùng màu nền liền nhau: section dưới giảm 1/2 padding trên (site.js bindSectionRhythm gắn .is-joined) */
.section.is-joined { padding-top: calc(var(--section) / 2); }
.section--tight.is-joined { padding-top: clamp(18px, 2.4vw, 30px); }
/* Dải CTA (.section--tight) nhận nền của section liền trước để liền mạch, không kẹp một vệt trắng giữa hai khối xám.
   Khi đã liền nền thì bớt đệm trên vì section trước đã có đệm dưới. */
.bg-smoke + .section--tight { background: var(--smoke); padding-top: 0; }
.bg-smoke + .section--tight .band { background: var(--white); }
/* Nền section. Nhịp trang chủ: navy → white → warm → pale → navy → ... */
/* Bề mặt section: trắng · smoke · navy · đen · vàng · đỏ. Không còn kem, xanh nhạt, vàng nhạt. */
.bg-smoke { background: var(--smoke); }
.bg-black { background: var(--black); color: var(--on-navy); }
.bg-black h1, .bg-black h2, .bg-black h3, .bg-black h4 { color: var(--white); }
.bg-yellow { background: var(--yellow); color: var(--on-yellow); }
.bg-yellow h1, .bg-yellow h2, .bg-yellow h3, .bg-yellow h4 { color: var(--black); }
.bg-red { background: var(--red-700); color: var(--on-red); }
.bg-red h1, .bg-red h2, .bg-red h3, .bg-red h4 { color: var(--white); }
.bg-navy { background: var(--dark); color: var(--on-navy); }
.bg-navy h1, .bg-navy h2, .bg-navy h3, .bg-navy h4 { color: var(--white); }
.lead { font-size: 1.125rem; color: var(--gray); }
.bg-navy .lead { color: var(--on-navy); }
.section-head { max-width: 62ch; }
.section-head h2 { margin-top: 10px; }
.section-head .lead { margin-top: 14px; }
.section-head--row { display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; max-width: none; flex-wrap: wrap; }
/* Tiêu đề section chiếm ~2/3 khung để h2 không ngắt thành 3–4 dòng ngắn.
   Đứng một mình trong .wrap (không có nút/điều hướng bên phải) thì canh giữa;
   nằm trong cột .split / .why thì giữ canh trái và giữ 62ch như cũ. */
.wrap > .section-head:not(.section-head--row) { max-width: min(100%, 860px); margin-inline: auto; text-align: center; }   /* ~60% khung 1440 */
/* p toàn cục bị giới hạn 65ch và nằm lệch trái trong khối canh giữa → đẩy về giữa.
   h2 dùng "pretty" thay "balance": balance chia đều hai dòng nên mỗi dòng chỉ còn ~1/2 khung,
   pretty lấp đầy dòng đầu và chỉ tránh để một chữ mồ côi ở dòng cuối. */
.wrap > .section-head:not(.section-head--row) .lead { max-width: none; margin-inline: auto; text-wrap: balance; }
.wrap > .section-head:not(.section-head--row) h2 { text-wrap: pretty; }
/* Hàng nút cuối section có tiêu đề canh giữa: canh giữa theo, cho đồng bộ */
.section-cta { display: flex; justify-content: center; align-items: center; gap: 12px; flex-wrap: wrap; }
.section-head--row > :first-child { flex: 1 1 auto; max-width: 66.667%; }
.mt-s { margin-top: 12px; } .mt-m { margin-top: 24px; } .mt-l { margin-top: 48px; } .mt-xl { margin-top: 64px; }

/* Eyebrow: nhãn viên thuốc viền mảnh, cùng kiểu badge banner (.page-hero__badge / .hero__badge).
   Không còn vạch màu phía trước — viền đổi theo bề mặt, chữ đen trên nền sáng, trắng trên nền tối. */
.eyebrow {
  display: inline-flex; align-items: center; gap: 8px; width: fit-content;
  padding: 6px 14px; border-radius: var(--r-pill); border: 1px solid rgba(9, 11, 12, .28);
  font-size: .76rem; font-weight: 700; line-height: 1.2; letter-spacing: .08em; text-transform: uppercase;
  color: var(--black);
}
.eyebrow::before { content: none; }
/* Danh sách bề mặt tối dùng chung cho eyebrow và icon, khai báo một chỗ để khỏi
   phải vá từng component mỗi khi thêm một khối navy mới. */
.bg-navy .eyebrow, .bg-black .eyebrow, .bg-red .eyebrow, .hero .eyebrow,
.honors .eyebrow, .register-section .eyebrow, .feature--dark .eyebrow,
.page-hero:not(.page-hero--yellow) .eyebrow, .cta-band .eyebrow, .article-cta .eyebrow
{ color: var(--white); border-color: var(--line-navy); }
.bg-red .eyebrow, .page-hero--red .eyebrow, .cta-band .eyebrow, .register-section .eyebrow { border-color: var(--line-on-red); }
.bg-yellow .eyebrow, .page-hero--yellow .eyebrow { color: var(--black); border-color: var(--line-on-yellow); }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  padding: 14px 26px; border-radius: var(--r-pill);
  font-weight: 700; font-size: .98rem; line-height: 1.2; white-space: nowrap;
  transition: transform .2s var(--ease), background .2s, color .2s, box-shadow .2s, border-color .2s;
  border: 1.5px solid transparent;
}
.btn:active { transform: translateY(1px) scale(.985); }
.btn--primary { background: var(--red); color: var(--white); }
.btn--primary:hover { background: var(--red-700); transform: translateY(-2px); }
.btn--dark { background: var(--dark); color: var(--white); }
.btn--dark:hover { background: var(--dark-700); transform: translateY(-2px); }
/* Nút sáng trên nền navy. Không có nút vàng cỡ lớn: vàng chỉ là micro-accent. */
.btn--light { background: var(--white); color: var(--dark); }
.btn--light:hover { background: var(--smoke); transform: translateY(-2px); }
/* Viền control phải đạt 3:1 (WCAG 1.4.11) nên dùng --line-strong, không dùng --line */
.btn--ghost { border-color: var(--line-strong); color: var(--black); background: var(--white); }
.btn--ghost:hover { border-color: var(--black); background: var(--smoke); }
.btn--ghost-light { border-color: var(--line-navy); color: var(--white); }
.btn--ghost-light:hover { border-color: var(--white); background: rgba(255, 255, 255, .06); }
.btn--sm { padding: 10px 18px; font-size: .9rem; }
.btn--lg { padding: 17px 32px; font-size: 1.05rem; }
.btn--block { width: 100%; }
.btn .ic { transition: transform .2s var(--ease); }
.btn:hover .ic--arrow { transform: translateX(3px); }

/* Chữ đen cho tương phản, màu brand dồn vào mũi tên */
.link-arrow {
  display: inline-flex; align-items: center; gap: 6px;
  color: var(--black); font-weight: 700; font-size: .95rem;
  border-bottom: 1.5px solid transparent;
  /* Nằm trong cha flex-column (ô bento, thẻ) thì bị kéo giãn hết chiều ngang → gạch hover dài quá chữ */
  width: fit-content; max-width: 100%;
}
.link-arrow use[href] { --ic-1: var(--red); --ic-2: var(--red); --ic-3: transparent; }
.link-arrow:hover { border-bottom-color: var(--red); }
.link-arrow .ic { transition: transform .2s var(--ease); }
.link-arrow:hover .ic { transform: translateX(3px); }

/* ---------- Pills / badges ---------- */
.pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px; border-radius: var(--r-pill);
  font-size: .8rem; font-weight: 600; line-height: 1.3;
  background: var(--smoke-2); color: var(--black);
}
.pill--gold { background: var(--yellow); color: var(--black); }
.pill--red { background: var(--red); color: var(--white); }
.pill--dark { background: rgba(255, 255, 255, .14); color: var(--white); }
.pill--outline { background: transparent; border: 1px solid var(--line-strong); color: var(--black); }
.bg-navy .pill--outline, .bg-black .pill--outline, .page-hero:not(.page-hero--yellow):not(.page-hero--red) .pill--outline { border-color: var(--line-navy); color: var(--white); }
/* Trạng thái tuyển sinh: ngoài palette thì không dùng. Vàng đặc, chữ đen 12.64:1 */
.status {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 4px 11px; border-radius: var(--r-pill);
  background: var(--yellow); color: var(--black);
  font-size: .8rem; font-weight: 700;
  width: fit-content; max-width: 100%;   /* trong thẻ flex-column / ô grid không bị kéo giãn hết chiều ngang */
}
.status::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--red); }
.status--soon { background: var(--dark); color: var(--white); }
.status--soon::before { background: var(--yellow); }

/* ---------- Shell: overlay ---------- */
.overlay {
  position: fixed; inset: 0; background: rgba(9, 11, 12, .55);
  opacity: 0; visibility: hidden; transition: opacity .3s, visibility .3s; z-index: 90;
  backdrop-filter: blur(2px);
}
.overlay.is-active { opacity: 1; visibility: visible; }

/* ---------- Shell: header (desktop) ---------- */
.header {
  position: sticky; top: 0; z-index: 100;
  background: var(--dark); color: var(--white);
  height: var(--nav-h);
  transition: box-shadow .3s;
}
/* Compact: không animate height (layout thrash); chỉ đổ bóng + co logo bằng transform */
.header.is-compact { box-shadow: 0 10px 30px rgba(0, 0, 0, .25); }
.header .logo__mark { transition: transform .3s var(--ease); }
.header.is-compact .logo__mark { transform: scale(.86); }
.header .wrap { height: 100%; display: flex; align-items: center; gap: 20px; }
.logo { display: inline-flex; align-items: center; gap: 12px; flex: none; }
.logo__mark { width: 42px; height: 42px; border-radius: 10px; overflow: hidden; background: var(--dark); }
.logo__mark img { width: 100%; height: 100%; object-fit: cover; }
/* Logo header 50px ở màn ≥1400px; màn hẹp hơn thu nhỏ để menu + tìm kiếm + CTA vẫn vừa một hàng */
.logo__img { height: 50px; width: auto; }
.header.is-compact .logo__img { transform: scale(.9); transform-origin: left center; transition: transform .3s var(--ease); }
.header-mobile .logo__img { height: 40px; }
/* .header-mobile ở trước để thắng .burger { display: inline-flex } khai báo phía sau */
.header-mobile .header-mobile__search { display: none; color: var(--white); }
@media (min-width: 600px) { .header-mobile .header-mobile__search { display: inline-flex; } }
/* Điện thoại hẹp: logo 40px + nút "Đăng ký học thử" + ☰ không vừa 390px nữa → thu nhỏ vừa đủ */
@media (max-width: 420px) {
  .header-mobile .wrap { padding-inline: 14px; }
  .header-mobile .logo__img { height: 34px; }
  .header-mobile__actions { gap: 4px; }
  .header-mobile__actions .btn { padding: 8px 12px; font-size: .84rem; }
  .header-mobile .burger { width: 40px; }
}
.footer .logo__img { height: 64px; }
.logo__txt { display: flex; flex-direction: column; line-height: 1.05; }
.logo__name { font-weight: 700; font-size: 1.15rem; letter-spacing: -.02em; color: var(--white); }
.logo__name em { font-style: normal; color: var(--red); }
.logo__sub { font-size: .62rem; letter-spacing: .12em; text-transform: uppercase; color: var(--on-navy); margin-top: 3px; }
.nav { display: flex; align-items: center; gap: 4px; margin-left: auto; }
.nav > a, .nav__toggle {
  display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; flex: none;
  padding: 10px 13px; border-radius: var(--r-pill);
  font-weight: 600; font-size: .95rem; color: rgba(255, 255, 255, .86);
  transition: color .2s, background .2s;
}
.nav > a:hover, .nav__toggle:hover, .nav > a.is-active, .nav__toggle.is-active { color: var(--white); background: rgba(255, 255, 255, .08); }
.nav > a.is-active, .nav__toggle.is-active { color: var(--yellow); }
/* Không dùng đỏ làm màu chữ ở đây: 4.10:1, dưới ngưỡng 4.5 của chữ thường.
   Theo đúng mẫu eyebrow toàn site — chữ đen, đỏ nằm ở nền/vạch. */
.nav__drop:not(.nav__drop--mega) a.is-active { color: var(--black); font-weight: 700; background: var(--yellow); }
.nav__item { position: relative; }
/* Icon dấu + (icon add của pack basic): mở dropdown thì xoay 45° thành dấu × */
.nav__toggle .ic { transition: transform .2s var(--ease); }
.nav__item.is-open .nav__toggle .ic, .nav__item:hover .nav__toggle .ic, .nav__item:focus-within .nav__toggle .ic { transform: rotate(45deg); }
.nav__drop {
  position: absolute; top: calc(100% + 10px); left: 0; min-width: 240px;
  background: var(--white); color: var(--black); border-radius: var(--r);
  box-shadow: var(--sh); padding: 8px;
  opacity: 0; visibility: hidden; transform: translateY(6px);
  transition: opacity .2s, transform .2s var(--ease), visibility .2s;
}
.nav__item.is-open .nav__drop, .nav__item:hover .nav__drop { opacity: 1; visibility: visible; transform: none; }
/* :not(--mega) vì dropdown thường xếp nhãn + mô tả theo cột, còn mega tự lo layout của nó —
   không loại trừ thì rule này (0,1,1) đè mọi .mega__* (0,1,0) và bẻ cả panel thành cột. */
.nav__drop:not(.nav__drop--mega) a { display: flex; flex-direction: column; padding: 10px 12px; border-radius: 10px; font-weight: 600; }
.nav__drop a small { font-weight: 400; color: var(--gray-soft); font-size: .82rem; }
.nav__drop:not(.nav__drop--mega) a:hover { background: var(--smoke); }
/* Cầu nối 10px giữa thanh menu và panel: không có nó, chuột đi xuống là panel đóng giữa chừng. */
.nav__drop::before { content: ""; position: absolute; left: 0; right: 0; top: -12px; height: 12px; }

/* ---------- Mega menu Khoá học ----------
   Cây danh mục 3 tầng không nhét vừa dropdown 240px, nên panel rộng bằng .wrap.
   Mẹo: .nav__item--mega để position:static, panel absolute vì thế neo theo .wrap
   (phần tử có position gần nhất) chứ không theo mục menu. */
.header .wrap { position: relative; }
.nav__item--mega { position: static; }
.nav__drop--mega {
  left: auto; right: 0; width: min(1060px, 100%);
  padding: 24px 26px 16px; border-top: 3px solid var(--red);
}
.mega { display: grid; grid-template-columns: 250px minmax(0, 1fr); gap: 0 28px; min-height: 290px; }
/* Cột trái: 4 nhóm. Nhóm đang chọn nền smoke + vạch đỏ trái; panel bên phải đổi theo */
.mega__tabs { display: flex; flex-direction: column; gap: 4px; padding-right: 20px; border-right: 1px solid var(--line); grid-row: 1 / span 4; }
.mega__tab { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-radius: 12px; color: var(--black); transition: background .2s; position: relative; }
.mega__tab .ic { width: 30px; height: 30px; flex: none; }
.mega__tab b { display: block; font-family: var(--display); font-weight: 700; font-size: 1rem; letter-spacing: -.01em; line-height: 1.2; }
.mega__tab small { display: block; font-size: .76rem; color: var(--gray-soft); }
.mega__tab:hover, .mega__tab.is-active { background: var(--smoke); }
.mega__tab.is-active { box-shadow: inset 3px 0 0 var(--red); }
.mega__panel { grid-column: 2; grid-row: 1; display: none; grid-template-columns: minmax(0, 1fr) 220px; gap: 28px; align-items: start; }
.mega__panel.is-active { display: grid; animation: megaIn .25s var(--ease); }
@keyframes megaIn { from { opacity: 0; transform: translateX(6px); } }
.mega__tag { margin: 4px 0 14px; font-size: .88rem; line-height: 1.45; color: var(--gray-soft); }
.mega__list { list-style: none; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 20px; }
.mega__list > li { padding: 10px 0; border-bottom: 1px solid var(--line); }
.mega__link { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; font-size: .95rem; color: var(--black); transition: color .2s; }
.mega__link .ic { opacity: 0; transform: translateX(-4px); transition: opacity .2s, transform .2s var(--ease); }
.mega__link:hover { color: var(--red-700); }
.mega__link:hover .ic { opacity: 1; transform: none; }
.mega__kids { display: flex; flex-wrap: wrap; gap: 2px 14px; margin-top: 4px; }
.mega__track-label { display: block; font-weight: 700; font-size: .92rem; color: var(--black); }
.mega__kids a { font-size: .84rem; color: var(--gray-soft); }
.mega__kids a:hover { color: var(--black); text-decoration: underline; text-underline-offset: 3px; }
.mega__card { position: relative; display: block; border-radius: var(--r); overflow: hidden; aspect-ratio: 4 / 5; background: var(--dark); }
.mega__card img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.mega__card::after { content: ""; position: absolute; inset: 0; background: linear-gradient(transparent 45%, rgba(22, 33, 62, .88)); }
.mega__card span { position: absolute; left: 16px; right: 16px; bottom: 14px; z-index: 1; display: flex; align-items: center; gap: 6px; color: var(--white); font-weight: 700; font-size: .92rem; }
.mega__card:hover img { transform: scale(1.05); }
.mega__foot {
  display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap;
  margin-top: 14px; padding-top: 13px; border-top: 1px solid var(--line);
}
.mega__note { font-size: .84rem; color: var(--gray-soft); }
.mega__note a { color: var(--black); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
/* Link "Xem tất cả" luôn trỏ đúng trang đang đứng nên .is-active sẽ tô nền — thừa ở chân panel */
.mega__foot .link-arrow.is-active { background: none; font-weight: 700; }
/* Bàn phím: Tab tới "Khoá học" là panel mở, không cần chuột. Chỉ áp cho mega vì
   hai dropdown kia mở bằng <button> có aria-expanded, mở theo focus sẽ lệch trạng thái ARIA. */
.nav__item--mega:focus-within .nav__drop { opacity: 1; visibility: visible; transform: none; }

/* CTA header: nhãn dài "Đăng ký test miễn phí" khi còn chỗ, viền vàng khi hover —
   vàng ở đây là micro-accent trên nền navy, không phải màu nền nút. */
/* gap: 0 — .btn là inline-flex có gap 10px, nên <span> "miễn phí" bị cộng thêm 10px
   ngoài dấu cách &nbsp; và đọc thành "Đăng ký test   miễn phí". Nút này không có icon. */
.header__cta { margin-left: 4px; gap: 0; }

/* ---------- Tìm kiếm trên header ----------
   Nút kính lúp mở một ô tìm nhỏ neo dưới header (không dẫn sang trang khác ngay), Enter gửi
   ?q= tới /tim-kiem/ — trang đó đã tìm theo khoá học và bài viết. Esc hoặc bấm ra ngoài để đóng. */
.header-search { position: relative; flex: none; }
.header-search__toggle { width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; color: var(--white); transition: background .2s; }
.header-search__toggle:hover, .header-search.is-open .header-search__toggle { background: rgba(255, 255, 255, .1); }
.header-search__toggle .ic { width: 20px; height: 20px; }
.header-search__panel {
  position: absolute; right: 0; top: calc(100% + 16px); z-index: 20; width: min(420px, 90vw);
  display: flex; gap: 8px; padding: 10px; background: var(--white); border-radius: var(--r); box-shadow: var(--sh);
  opacity: 0; visibility: hidden; transform: translateY(6px); transition: opacity .2s, transform .2s var(--ease), visibility .2s;
}
.header-search.is-open .header-search__panel { opacity: 1; visibility: visible; transform: none; }
.header-search__panel input {
  flex: 1; min-width: 0; font: inherit; font-size: .95rem; color: var(--black);
  padding: 10px 14px; border: 1.5px solid var(--line-strong); border-radius: var(--r-sm); background: var(--white);
}
.header-search__panel input:focus { outline: none; border-color: var(--black); box-shadow: 0 0 0 3px rgba(9, 11, 12, .08); }
.m-drawer__search { display: flex; gap: 6px; margin: 0 0 14px; padding: 6px; border-radius: var(--r-sm); background: rgba(255, 255, 255, .08); border: 1px solid var(--line-navy); }
.m-drawer__search input { flex: 1; min-width: 0; font: inherit; font-size: 1rem; color: var(--white); background: none; border: 0; padding: 8px 10px; }
.m-drawer__search input::placeholder { color: var(--on-navy); }
.m-drawer__search input:focus { outline: none; }
.m-drawer__search:focus-within { border-color: var(--white); }
.m-drawer__search button { width: 42px; height: 42px; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--red); color: var(--white); }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.header__cta:hover, .header__cta:focus-visible { box-shadow: 0 0 0 3px rgba(247, 202, 57, .42); }



/* ---------- Shell: header mobile ---------- */
.header-mobile { display: none; position: sticky; top: 0; z-index: 100; background: var(--dark); color: var(--white); height: 62px; }
.header-mobile .wrap { height: 100%; display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.header-mobile .logo { gap: 9px; }
.header-mobile .logo__mark { width: 36px; height: 36px; border-radius: 8px; }
.header-mobile .logo__name { font-size: 1rem; }
.header-mobile .logo__sub { display: none; }
.header-mobile .btn--sm { padding: 9px 13px; font-size: .82rem; }
.header-mobile__actions { display: flex; align-items: center; gap: 8px; }
.header-mobile__actions .btn { min-height: 42px; }
.burger { width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center; border-radius: 10px; }
.burger:hover { background: rgba(255, 255, 255, .08); }

.m-drawer {
  position: fixed; inset: 0 0 0 auto; width: min(86vw, 360px); z-index: 110;
  background: var(--dark); color: var(--white); padding: 24px 24px 32px;
  display: flex; flex-direction: column; gap: 4px; overflow-y: auto;
  transform: translateX(100%); transition: transform .4s var(--ease);
}
.m-drawer.is-open { transform: none; }
.m-drawer__top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }
.m-drawer a { padding: 12px 10px; border-radius: 10px; font-weight: 600; font-size: 1.05rem; }
.m-drawer a:hover { background: rgba(255, 255, 255, .08); }
.m-drawer__label { margin: 14px 10px 4px; font-size: .74rem; letter-spacing: .14em; text-transform: uppercase; color: var(--on-navy); font-weight: 700; }
/* Danh mục khoá học trong drawer: một tầng, thụt vào và có vạch dọc để đọc ra quan hệ con */
.m-drawer a.m-drawer__sub {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  margin-left: 12px; padding: 9px 10px; font-size: .95rem;
  color: var(--on-navy); border-left: 2px solid rgba(255, 255, 255, .18); border-radius: 0 10px 10px 0;
}
.m-drawer a.m-drawer__sub:hover { color: var(--white); }
.m-drawer a.m-drawer__sub em { font-style: normal; font-size: .78rem; font-weight: 700; color: var(--yellow); }
.m-drawer .btn { margin-top: auto; }
/* Menu mobile dạng danh sách kẻ ngang; nhóm có mục con xổ ra khi bấm */
.m-nav { display: flex; flex-direction: column; margin-bottom: 24px; border-top: 1px solid rgba(255, 255, 255, .14); }
.m-drawer .m-nav > a, .m-nav__group > summary { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 15px 4px; border-bottom: 1px solid rgba(255, 255, 255, .14); border-radius: 0; font-weight: 600; font-size: 1.05rem; color: var(--white); cursor: pointer; list-style: none; }
.m-nav__group > summary::-webkit-details-marker { display: none; }
.m-nav__group > summary .ic { transition: transform .3s var(--ease); }
.m-nav__group[open] > summary { color: var(--yellow); }
.m-nav__group > summary .ic { width: 22px; height: 22px; }
.m-nav__group[open] > summary .ic { transform: rotate(45deg); }
.m-nav__subs { display: flex; flex-direction: column; padding: 6px 0 12px 14px; border-bottom: 1px solid rgba(255, 255, 255, .14); }
.m-drawer .m-nav__subs a, .m-drawer .m-nav__subs a.m-drawer__sub { display: flex; align-items: center; justify-content: space-between; margin: 0; padding: 10px 8px; border: 0; border-radius: 8px; font-size: .96rem; font-weight: 500; color: var(--on-navy); }
.m-drawer .m-nav__subs a:hover, .m-drawer .m-nav a[aria-current="page"] { color: var(--white); }

/* ---------- Shell: main ---------- */
.main { min-height: 60vh; }

/* ---------- Shell: footer ---------- */
.footer { background: var(--dark); color: var(--on-navy); padding: clamp(56px, 7vw, 88px) 0 24px; }
.footer__grid { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1.2fr; gap: 40px; }
.footer__about p { margin-top: 18px; font-size: .95rem; max-width: 36ch; }
/* Giống badge hero trang chủ: viền mảnh navy, chữ trắng, logo Pasal thay cho chữ "Pasal" */
.footer__eco { display: inline-flex; align-items: center; gap: 8px; margin-top: 18px; padding: 7px 14px; border-radius: var(--r-pill); border: 1px solid var(--line-navy); color: var(--white); font-size: .82rem; font-weight: 600; }
.footer__eco-logo { display: block; height: 20px; width: auto; }

.footer h4 { color: var(--white); margin-bottom: 18px; font-size: .95rem; }
.footer__col a { display: block; padding: 6px 0; font-size: .95rem; transition: color .2s; }
.footer__col a:hover { color: var(--yellow); }   /* khách 18/09: link chân trang rê chuột đổi sang vàng thương hiệu */
.footer__contact li { display: flex; gap: 12px; align-items: flex-start; margin-bottom: 14px; font-size: .9rem; }
.footer__contact .ic { width: 24px; height: 24px; margin-top: 1px; }
.footer__contact b { display: block; color: var(--white); font-size: 1rem; }
/* 5 cơ sở giữ dạng một dòng chữ như cũ, mỗi tên là link riêng tới trang cơ sở */
.footer__contact b a:hover { color: var(--yellow); }
/* .footer__col a là block + padding 6px — 5 tên cơ sở phải về inline để nằm chung một dòng như cũ */
.footer__campus-links a { display: inline; padding: 0; font-size: inherit; }
.footer__social { display: flex; gap: 10px; margin-top: 20px; }
.footer__social a { width: 40px; height: 40px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: rgba(255, 255, 255, .08); color: var(--white); transition: background .2s, transform .2s; }
.footer__social a:hover { background: var(--red); transform: translateY(-2px); }
.footer__bottom { margin-top: 48px; padding-top: 22px; border-top: 1px solid var(--line-navy); display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; font-size: .85rem; }
.footer__bottom a:hover { color: var(--yellow); }

/* MONA.Media signature (source: docs/mona-signature/) */
:root { --sig-label: var(--on-navy); --sig-line: var(--line-navy); }
.mona-sign { display: flex; align-items: center; justify-content: center; gap: 13px; flex-wrap: wrap; padding: 22px 0 2px; margin-top: 16px; border-top: 1px solid var(--sig-line); }
.mona-sign span { font-size: 12px; letter-spacing: .14em; text-transform: uppercase; color: var(--sig-label); }
.mona-sign a { display: inline-flex; opacity: .9; transition: opacity .2s, transform .2s; }
.mona-sign a:hover { opacity: 1; transform: translateY(-1px); }
.mona-sign img { height: 19px; width: auto; display: block; }
@media (max-width: 560px) { .mona-sign { gap: 9px; padding-top: 18px; } }

/* ---------- Shell: floating contact ---------- */
.group-contact { --fc-gap: 10px; position: fixed; right: 18px; bottom: 18px; z-index: 80; display: flex; flex-direction: column; align-items: center; gap: var(--fc-gap); }
.group-contact > a, .group-contact > button {
  width: 52px; height: 52px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  color: var(--white); box-shadow: var(--sh); transition: transform .2s var(--ease), opacity .3s, visibility .3s;
  position: relative; isolation: isolate; border: 0; padding: 0; cursor: pointer;
}
.group-contact > a:hover, .group-contact > button:hover { transform: translateY(-3px) scale(1.05); }
.group-contact > a::after, .group-contact > button::after {
  content: attr(data-tip); position: absolute; right: calc(100% + 12px); top: 50%; transform: translateY(-50%);
  background: var(--dark); color: var(--white); font-size: .8rem; font-weight: 600; padding: 6px 10px; border-radius: 8px;
  white-space: nowrap; opacity: 0; visibility: hidden; transition: opacity .2s; pointer-events: none;
}
.group-contact > a:hover::after, .group-contact > button:hover::after,
.group-contact > a:focus-visible::after, .group-contact > button:focus-visible::after { opacity: 1; visibility: visible; }
.group-contact .fc-phone { background: var(--red); --pulse: rgba(229, 64, 54, .5); }
/* Nền trắng viền --line-strong (3.59:1): nổi trên cả section trắng lẫn section navy/đỏ — bản navy
   chìm hẳn khi cuộn qua dải Bảng vàng, chỉ còn trơ mũi tên. */
.group-contact .fc-top { background: var(--white); color: var(--black); border: 1.5px solid var(--line-strong); --pulse: rgba(9, 11, 12, .18); }
.group-contact .fc-top .ic { transform: rotate(180deg); }
/* Nút lên đầu trang nằm DƯỚI CÙNG và chỉ hiện khi đã cuộn quá một màn hình.
   Vì cụm neo theo mép dưới, ẩn mà vẫn giữ chỗ sẽ để lại một khoảng trống dưới đáy —
   nên lúc ẩn thu hẳn chiều cao, bù luôn khoảng gap; ba nút phía trên trượt nhẹ xuống. */
.group-contact .fc-top { transition: transform .2s var(--ease), opacity .25s, visibility .3s, height .3s var(--ease), margin .3s var(--ease), border-width .3s; }
.group-contact .fc-top:not(.is-shown) { height: 0; margin-top: calc(var(--fc-gap) * -1); border-width: 0; overflow: hidden; opacity: 0; visibility: hidden; }
/* Zalo · Messenger: icon gốc của thương hiệu đặt trần, không khung tròn, không nền.
   Bóng đổ theo đúng hình icon (drop-shadow) thay vì box-shadow tròn quanh ô vuông. */
.group-contact .fc-bare { background: none; box-shadow: none; border-radius: 30%; }
.group-contact .fc-bare img { width: 100%; height: 100%; display: block; filter: drop-shadow(0 6px 12px rgba(9, 11, 12, .22)); }
.group-contact .fc-zalo { --pulse: rgba(0, 104, 255, .45); }
.group-contact .fc-mess { border-radius: 50%; --pulse: rgba(160, 51, 255, .4); }
.group-contact .ic { width: 24px; height: 24px; }

/* Nhấp nháy: vòng sóng loang ra từ sau nút, chu kỳ 2.4s — chậm hơn nhiều so với ngưỡng 3 lần/giây
   của WCAG 2.3.1 nên không gây rủi ro co giật. Lệch pha từng nút để cả cụm không đập cùng nhịp.
   Tắt khi hover (người dùng đã chú ý tới rồi) và khi hệ điều hành bật giảm chuyển động. */
.group-contact > a::before, .group-contact > button::before {
  content: ""; position: absolute; inset: 0; z-index: -1; border-radius: inherit;
  background: var(--pulse, rgba(22, 33, 62, .35));
  animation: fc-pulse 2.4s cubic-bezier(.22, .61, .36, 1) infinite;
}
.group-contact > :nth-child(2)::before { animation-delay: .6s; }
.group-contact > :nth-child(3)::before { animation-delay: 1.2s; }
.group-contact > :nth-child(4)::before { animation-delay: 1.8s; }
.group-contact > a:hover::before, .group-contact > button:hover::before { animation: none; opacity: 0; }

/* Lắc nhẹ: icon lắc qua lại vài nhịp nhỏ rồi nghỉ, cùng chu kỳ 2.4s và lệch pha như sóng loang —
   chuyển động chỉ chiếm ~25% chu kỳ nên hút mắt mà không rung liên tục.
   Lắc trên icon chứ không trên nút, để không đè transform hover của nút. */
.group-contact .ic, .group-contact .fc-bare img { animation: fc-shake 2.4s ease-in-out infinite; transform-origin: 50% 50%; }
/* Mũi tên lên đầu trang: lắc xoay trông như lỗi, nên nảy lên xuống; giữ rotate(180deg) trong keyframe
   vì animation transform sẽ đè transform tĩnh của icon. */
.group-contact .fc-top .ic { animation-name: fc-nudge; }
.group-contact > :nth-child(2) :is(.ic, img) { animation-delay: .6s; }
.group-contact > :nth-child(3) :is(.ic, img) { animation-delay: 1.2s; }
.group-contact > :nth-child(4) :is(.ic, img) { animation-delay: 1.8s; }
.group-contact > :hover :is(.ic, img) { animation-play-state: paused; }
@keyframes fc-shake {
  0%, 62%, 100% { transform: rotate(0); }
  66% { transform: rotate(-11deg); }
  70% { transform: rotate(9deg); }
  74% { transform: rotate(-6deg); }
  78% { transform: rotate(4deg); }
  82% { transform: rotate(0); }
}
@keyframes fc-nudge {
  0%, 62%, 100% { transform: rotate(180deg) translateY(0); }
  68% { transform: rotate(180deg) translateY(3px); }
  74% { transform: rotate(180deg) translateY(0); }
  80% { transform: rotate(180deg) translateY(2px); }
  86% { transform: rotate(180deg) translateY(0); }
}
@keyframes fc-pulse {
  0%   { transform: scale(.92);  opacity: .9; }
  70%  { transform: scale(1.65); opacity: 0; }
  100% { transform: scale(1.65); opacity: 0; }
}

/* Khung nội dung rộng 1500px nên ở màn 1440 mép phải của thẻ chạm vào cụm nút nổi,
   che mất 7px của nút CTA cột cuối. Trên desktop thu nút còn 48px và sát mép hơn
   để lấy lại 10px; vẫn trên ngưỡng vùng chạm 44px. */
@media (min-width: 1200px) {
  .group-contact { right: 12px; --fc-gap: 9px; }
  .group-contact > a, .group-contact > button { width: 48px; height: 48px; }
}

/* ---------- Component families ---------- */
/* Stat strip (trust bar) — kiểu dáng nằm ở khối "Con số nổi bật" chung cuối file */

/* Form */
.form-card { background: var(--white); border-radius: var(--r-lg); padding: clamp(24px, 3vw, 36px); box-shadow: var(--sh); }

/* Panel "Ba bước" — thế chỗ form đăng ký cũ ở trang chủ, 9 trang khoá học và 3 trang
   cơ sở. Khách yêu cầu form đăng ký chỉ tồn tại DUY NHẤT ở /lien-he, nên các trang
   này chỉ còn khối dẫn đường. Dùng lại .form-card để giữ nguyên khối trắng bo góc mà
   form từng chiếm, nhịp section không đổi. */
.enroll-panel { border: 1px solid var(--line); }
/* home.css nạp sau common.css nên .register-section .eyebrow (trắng, cho nền navy)
   thắng .enroll-panel .eyebrow ở cùng specificity 0,2,0 → chữ trắng trên thẻ trắng, 1.00:1.
   Thêm .form-card để lên 0,3,0: panel LUÔN là thẻ trắng, bất kể nền section phía sau. */
.form-card.enroll-panel .eyebrow { color: var(--black); border-color: var(--line-strong); }
.enroll-steps { list-style: none; counter-reset: step; margin: 18px 0 24px; display: flex; flex-direction: column; gap: 16px; }
.enroll-steps li { counter-increment: step; display: grid; grid-template-columns: 30px 1fr; gap: 12px; align-items: start; }
/* Số bước là accent, không gánh nghĩa một mình: nhãn <b> ngay bên cạnh mới mang nội dung.
   20px/700 tính là chữ lớn nên đỏ 4.10:1 vượt ngưỡng 3.0 của WCAG 1.4.3. */
.enroll-steps li::before {
  content: counter(step);
  font-family: var(--display); font-optical-sizing: auto;
  font-size: 20px; font-weight: 700; line-height: 1.15;
  color: var(--red); border-bottom: 2px solid var(--yellow); justify-self: start;
}
.enroll-steps li > div { min-width: 0; }
.enroll-steps b { display: block; color: var(--black); font-size: 1rem; }
.enroll-steps span { display: block; margin-top: 3px; color: var(--gray); font-size: .92rem; line-height: 1.5; }
.enroll-panel .form-note { margin-top: 0; }
/* Link trong form-note (hotline, chính sách bảo mật) trước đây trùng màu chữ xung quanh,
   không có affordance nào cho biết bấm được. */
.form-note a { color: var(--black); font-weight: 600; border-bottom: 1.5px solid var(--red); }

/* Danh sách cơ sở + bản đồ đổi theo lựa chọn. Chuyển từ home.css sang đây vì trang
   /co-so/ cũng dùng: trước đó iframe ở đó là truy vấn chung, bấm thẻ không đổi gì. */
.campus { display: grid; grid-template-columns: 1.1fr 1fr; gap: clamp(24px, 4vw, 48px); margin-top: 44px; align-items: stretch; }
.campus__map { border-radius: var(--r-lg); overflow: hidden; background: var(--smoke-2); min-height: 420px; position: relative; }
.campus__map iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; filter: saturate(.7) contrast(1.05); }
.campus__side { display: flex; flex-direction: column; min-width: 0; }
.campus__filters { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.campus__filters .field { margin: 0; }
.campus__count { margin: 14px 0 12px; font-size: .88rem; color: var(--gray-soft); }
.campus__count b { color: var(--black); }
@media (max-width: 420px) { .campus__filters { grid-template-columns: 1fr; } }
/* Danh sách cơ sở cao khoảng 3 thẻ, còn lại cuộn trong khung (có thanh cuộn mảnh) */
.campus__list { display: flex; flex-direction: column; gap: 12px; max-height: 408px; overflow-y: scroll; overscroll-behavior: contain; padding-right: 18px; }
/* Thanh cuộn luôn hiện: Chrome/Safari chỉ giữ thanh cố định khi dùng ::-webkit-scrollbar; nếu khai báo thêm
   scrollbar-width/scrollbar-color thì Chrome 121+ bỏ qua pseudo này và quay về thanh overlay tự ẩn trên macOS.
   Vì vậy thuộc tính chuẩn chỉ cấp cho trình duyệt không có ::-webkit-scrollbar (Firefox). */
@supports not selector(::-webkit-scrollbar) {
  .campus__list { scrollbar-width: thin; scrollbar-color: var(--red) rgba(239, 63, 55, .14); }
}
.campus__list::-webkit-scrollbar { width: 8px; }
.campus__list::-webkit-scrollbar-track { background: rgba(239, 63, 55, .14); border-radius: 8px; }
.campus__list::-webkit-scrollbar-thumb { background: var(--red); border-radius: 8px; }
.campus__row { text-align: left; width: 100%; display: grid; grid-template-columns: 1fr auto; gap: 6px 18px; align-items: start; padding: 20px 22px; border: 1.5px solid var(--line-strong); border-radius: var(--r); background: var(--white); transition: border-color .2s, background .2s, transform .2s var(--ease); }
.campus__row:hover { border-color: var(--red); background: var(--smoke); }
/* Cơ sở đang xem đảo hẳn sang navy — viền đỏ trên nền nhạt không đủ rõ khi có 5 hàng */
.campus__row.is-active { border-color: var(--dark); background: var(--dark); }
.campus__row.is-active h3 { color: var(--white); }
.campus__row.is-active p { color: var(--on-navy); }
.campus__row.is-active a { color: var(--yellow); }
.campus__row h3 { font-size: 1.1rem; }
.campus__row h3 { grid-column: 1; grid-row: 1; }
.campus__row p { grid-column: 1 / -1; grid-row: 2; display: flex; gap: 6px; align-items: flex-start; font-size: .92rem; color: var(--gray-soft); }
.campus__row p .ic { flex: none; margin-top: 2px; }
.campus__row .ic { transition: transform .2s var(--ease); }
.campus__row .status { grid-column: 2; grid-row: 1; }
.campus__row a { grid-column: 1 / -1; grid-row: 3; width: fit-content; font-weight: 700; color: var(--black); font-size: .92rem; display: inline-flex; gap: 6px; align-items: center; }
.campus__more { margin-top: 20px; }
@media (max-width: 900px) {
  .campus { grid-template-columns: 1fr; }
  .campus__map { min-height: 320px; }
}
@media (max-width: 560px) {
  .campus__row { grid-template-columns: 1fr; }
  .campus__row .status, .campus__row a { grid-column: 1; grid-row: auto; }
  .campus__row.is-active { transform: none; }
}

/* Accordion — chuyển từ page.css sang đây vì khối FAQ trước form nay có cả ở trang chủ. */
.accordion { display: flex; flex-direction: column; gap: 10px; }
.acc-item { background: var(--white); border: 1px solid var(--line); border-radius: var(--r); overflow: hidden; }
.acc-head { width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 18px 22px; text-align: left; font-weight: 700; color: var(--black); font-size: 1.02rem; }
.acc-head .ic { color: var(--red); transition: transform .3s var(--ease); }
.acc-item.is-open .acc-head .ic { transform: rotate(45deg); }
.acc-body { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .35s var(--ease); }
.acc-item.is-open .acc-body { grid-template-rows: 1fr; }
.acc-body > div { overflow: hidden; }
.acc-body p { padding: 0 22px 20px; color: var(--gray); }

/* Trạng thái sau khi gate mở khoá, thay chỗ form. Cùng vỏ .form-card nên khối không đổi kích thước đột ngột. */
.gate-done { text-align: center; }
.gate-done .ic { --ic-1: var(--red); --ic-2: var(--yellow); margin-inline: auto; }
.gate-done h3 { margin-top: 12px; }
.gate-done p { margin-top: 8px; color: var(--gray); }
.gate-done .btn { margin-top: 20px; }

/* Nhấn mạnh trong đoạn văn. Thay cho var(--ink) đã bị gỡ khỏi bảng token. */
.strong { color: var(--black); font-weight: 700; }
.field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 16px; }
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
/* Hai ô cạnh nhau chỉ khi form đủ rộng (form nằm trong cột hẹp ở 1024px thì placeholder bị cắt) */
form:has(> .field-row, .field-row) { container-type: inline-size; }
@container (max-width: 500px) { .field-row { grid-template-columns: 1fr; gap: 0; } }
.field label, .field .label { font-weight: 600; font-size: .9rem; color: var(--black); }
/* Dấu * mang thông tin "bắt buộc" nên là chữ thường, cần 4.5:1 — --red chỉ đạt 4.10 */
.field .req { color: var(--red-700); }
.field input, .field select, .field textarea {
  font: inherit; font-size: .98rem; color: var(--black); width: 100%;
  padding: 13px 15px; border: 1.5px solid var(--line-strong); border-radius: var(--r-sm); background: var(--white);
  transition: border-color .2s, box-shadow .2s;
}
.field textarea { resize: vertical; min-height: 88px; line-height: 1.55; }
.field input::placeholder, .field textarea::placeholder { color: var(--gray-soft); }
.field input:focus, .field select:focus, .field textarea:focus { outline: none; border-color: var(--black); box-shadow: 0 0 0 3px rgba(9, 11, 12, .08); }
.field.is-invalid input, .field.is-invalid select { border-color: var(--red); }
.field__error { display: none; font-size: .82rem; color: var(--red-700); font-weight: 600; }
.field.is-invalid .field__error { display: block; }
.field select { appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23090B0C'%3E%3Cpath d='M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; background-size: 16px; padding-right: 40px; }

/* ---------- Popup chọn (thay giao diện <select>) ----------
   <select> gốc vẫn nằm đúng chỗ, trong suốt và không bấm được — site.js dựng nút + listbox.
   Nút lấy đúng số đo của ô input để hai cột "Lớp của con" / "Cơ sở" thẳng hàng với ô bên cạnh. */
.select { position: relative; }
.select__native { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; pointer-events: none; }
.select__trigger {
  display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%;
  font: inherit; font-size: .98rem; color: var(--black); text-align: left; cursor: pointer;
  padding: 13px 14px 13px 15px; border: 1.5px solid var(--line-strong); border-radius: var(--r-sm);
  background: var(--white); transition: border-color .2s, box-shadow .2s;
}
.select__trigger:hover { border-color: var(--black); }
.select__trigger:focus-visible, .select.is-open .select__trigger { outline: none; border-color: var(--black); box-shadow: 0 0 0 3px rgba(9, 11, 12, .08); }
.select__value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.select__trigger.is-placeholder .select__value { color: var(--gray-soft); }
.select__caret { flex: none; transition: transform .2s var(--ease); }
.select.is-open .select__caret { transform: rotate(45deg); }   /* dấu + xoay thành ×, giống dropdown header */
.field.is-invalid .select__trigger { border-color: var(--red); }

.select__list {
  position: absolute; left: 0; right: 0; top: calc(100% + 6px); z-index: 40;
  margin: 0; padding: 6px; list-style: none;
  background: var(--white); border: 1px solid var(--line); border-radius: var(--r);
  box-shadow: 0 18px 44px rgba(9, 11, 12, .16), 0 2px 6px rgba(9, 11, 12, .06);
  max-height: 304px; overflow-y: auto; overscroll-behavior: contain;
  opacity: 0; visibility: hidden; transform: translateY(-4px);
  transition: opacity .16s, transform .22s var(--ease), visibility .16s;
}
.select--up .select__list { top: auto; bottom: calc(100% + 6px); transform: translateY(4px); }
.select.is-open .select__list { opacity: 1; visibility: visible; transform: none; }
.select__option {
  display: flex; align-items: baseline; gap: 8px; min-height: 44px; padding: 11px 12px;
  border-radius: 9px; font-size: .95rem; font-weight: 600; color: var(--black);
  cursor: pointer; user-select: none;
}
.select__option small { font-size: .8rem; font-weight: 500; color: var(--gray-soft); }
.select__check { margin-left: auto; align-self: center; opacity: 0; }
.select__option.is-active { background: var(--smoke); }
/* Đang chọn = vàng — đúng vai trò "đang chọn" của vàng trong bảng màu. Dấu tích đi kèm
   để người không phân biệt màu vẫn biết dòng nào đang chọn (WCAG 1.4.1). */
.select__option[aria-selected="true"] { background: var(--yellow); }
.select__option[aria-selected="true"] small { color: var(--on-yellow); }
.select__option[aria-selected="true"] .select__check { opacity: 1; }
.select__option[aria-selected="true"].is-active { box-shadow: inset 0 0 0 2px var(--black); }
.chip-select { display: flex; flex-wrap: wrap; gap: 8px; }
.chip-select label { position: relative; }
.chip-select input { position: absolute; opacity: 0; inset: 0; }
.chip-select span { display: inline-flex; padding: 8px 14px; border-radius: var(--r-pill); border: 1.5px solid var(--line-strong); font-size: .88rem; font-weight: 600; color: var(--black); cursor: pointer; transition: background .2s, border-color .2s, color .2s; }
.chip-select input:checked + span { background: var(--dark); border-color: var(--dark); color: var(--white); }
.chip-select input:focus-visible + span { outline: 3px solid var(--red); outline-offset: 2px; }
.form-note { margin-top: 12px; font-size: .8rem; color: var(--gray-soft); text-align: center; }
.hp { position: absolute; left: -9999px; opacity: 0; height: 0; overflow: hidden; }
.form-status { display: none; margin-top: 12px; padding: 12px 14px; border-radius: var(--r-sm); font-size: .9rem; font-weight: 600; }
.form-status.is-error { display: block; background: var(--red-700); color: var(--white); }
.btn.is-loading { opacity: .7; pointer-events: none; }

/* Testimonial (drag carousel) */
.carousel { display: flex; gap: 20px; overflow-x: auto; scroll-snap-type: x mandatory; padding: 6px 6px 22px; margin: 0 -6px; scrollbar-width: none; cursor: grab; }
.carousel::-webkit-scrollbar { display: none; }
.carousel.is-dragging { cursor: grabbing; scroll-snap-type: none; }
.carousel > * { scroll-snap-align: start; flex: 0 0 min(420px, 84vw); }
.testi-card { background: var(--white); border-radius: var(--r-lg); padding: 30px; border: 1px solid var(--line); display: flex; flex-direction: column; gap: 18px; min-height: 100%; user-select: none; }
.testi-card__result { align-self: flex-start; }
.testi-card p { font-size: 1.08rem; color: var(--black); line-height: 1.55; font-weight: 500; }
.testi-card__who { display: flex; align-items: center; gap: 12px; margin-top: auto; }
.testi-card__who img { width: 46px; height: 46px; border-radius: 50%; object-fit: cover; }
.testi-card__who b { display: block; color: var(--black); font-size: .95rem; }
.testi-card__who span { font-size: .85rem; color: var(--gray-soft); }
.carousel-nav { display: flex; gap: 8px; }
/* Viền cũ dùng --line chỉ đạt 1.25:1 nên nút gần như tan vào nền trắng.
   Hover cũ tô đen đặc làm icon đọc thành một khối. Nay: viền đạt 3.3:1,
   hover chỉ đổi viền và icon sang đỏ trên nền hồng rất nhạt. */
/* Icon mũi tên của bộ mới đã có sẵn vòng tròn bao quanh, nên nút không vẽ thêm
   viền nữa: viền của icon chính là ranh giới điều khiển, và nó là nét đen 19:1
   thay vì đường hairline 1.25:1 của bản cũ. */
.carousel-nav button {
  width: 44px; height: 44px; border-radius: 50%;
  border: 0; background: transparent; color: var(--black);
  display: inline-flex; align-items: center; justify-content: center;
  transition: background .2s, color .2s, transform .2s var(--ease);
}
.carousel-nav button .ic { width: 30px; height: 30px; }
.carousel-nav button:hover { background: var(--black); color: var(--white); border-color: var(--black); }
.carousel-nav button:active { transform: scale(.94); }
.carousel-nav button[aria-disabled="true"] { color: var(--gray-soft); pointer-events: none; }

/* Marquee (tối đa 1 / trang) */
.marquee { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.marquee__track { --marquee-speed: 50; display: flex; gap: 16px; width: max-content; animation: marquee 38s linear infinite; }
.marquee:hover .marquee__track { animation-play-state: paused; }
@keyframes marquee { to { transform: translateX(-50%); } }
/* Dải cảm nhận: tràn viền, không mask mờ hai đầu. Khoảng cách bằng margin-right trên từng thẻ
   (không dùng gap) để nửa sau khớp đúng -50%, vòng lặp không giật. Chạy chậm hơn bảng vàng vì thẻ có chữ để đọc. */
.marquee--testi { -webkit-mask-image: none; mask-image: none; padding-block: 6px 10px; }
.marquee--testi .marquee__track { --marquee-speed: 32; gap: 0; }
.marquee--testi .testi-card { flex: 0 0 min(420px, 84vw); margin-right: 20px; }
.testi-rows { display: grid; gap: 14px; }
.marquee--reverse .marquee__track { animation-direction: reverse; }

/* Honor card */
.honor-card {
  flex: none; width: 232px; display: flex; flex-direction: column;
  background: var(--white); border-radius: var(--r-lg); overflow: hidden;
  box-shadow: 0 12px 30px rgba(0, 0, 0, .22); transition: transform .3s var(--ease);
}
.honor-card:hover { transform: translateY(-4px); }
/* Ảnh chân dung nền xám studio: vuông, lấp kín đầu thẻ; nhãn kỳ thi đè góc trên */
.honor-card__photo { position: relative; aspect-ratio: 1; background: var(--smoke-2); }
.honor-card__photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.honor-card__tag {
  position: absolute; left: 12px; top: 12px; padding: 4px 10px; border-radius: var(--r-pill);
  background: var(--yellow); color: var(--black); font-size: .74rem; font-weight: 700; letter-spacing: .01em;
}
.honor-card__body { display: flex; flex-direction: column; gap: 2px; padding: 14px 16px 16px; flex: 1; }
/* Con số là thứ phụ huynh nhìn đầu tiên: chữ display cỡ lớn, gạch dạ quang vàng dưới chân chữ
   thay vì tô cả khối — vàng làm nền chữ đen vẫn 12.64:1, mà không nặng như chip đặc. */
.honor-card__score, .honor-card__school { color: var(--black); font-family: var(--display); letter-spacing: -.02em; align-self: flex-start; }
.honor-card__score { font-size: 2.1rem; font-weight: 700; line-height: 1.05; background: linear-gradient(transparent calc(100% - 3px), var(--yellow) calc(100% - 3px)); padding: 0 2px; }
.honor-card__school { font-size: 1.12rem; font-weight: 700; line-height: 1.25; }
.honor-card__school small { display: block; font-family: var(--sans); font-size: .74rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--red-700); }
.honor-card__sub { font-size: .82rem; color: var(--gray); margin-top: 2px; }
.honor-card__name { margin-top: auto; padding-top: 12px; border-top: 1px solid var(--line); font-weight: 700; color: var(--black); font-size: .95rem; }
.honor-card__meta { font-size: .8rem; color: var(--gray-soft); }

/* Article */
.article-meta { display: flex; gap: 14px; font-size: .82rem; color: var(--gray-soft); margin-top: 8px; }
.article-meta .cat { color: var(--gray); font-weight: 700; text-transform: uppercase; letter-spacing: .06em; }

/* Reveal */
.reveal { opacity: 0; transform: translateY(22px); transition: opacity .7s var(--ease), transform .8s var(--ease); }
.reveal.in { opacity: 1; transform: none; }
.reveal[data-d="1"] { transition-delay: .08s; } .reveal[data-d="2"] { transition-delay: .16s; } .reveal[data-d="3"] { transition-delay: .24s; }

/* Meridian: hoạ tiết vòng cung, chỉ trang trí.
   Bản gốc vẽ bằng trắng nên biến mất trên nền sáng; .meridian--ink là bản cho nền tint. */
.meridian { position: absolute; inset: 0; pointer-events: none; overflow: hidden; opacity: .35; }
.meridian::before, .meridian::after { content: ""; position: absolute; border: 1px solid rgba(255, 255, 255, .12); border-radius: 50%; }
.meridian::before { width: 900px; height: 900px; right: -300px; top: -420px; }
.meridian::after { width: 600px; height: 600px; right: -150px; top: -270px; border-color: rgba(247, 202, 57, .22); }
.meridian--ink { opacity: .5; }
.meridian--ink::before { border-color: rgba(22, 33, 62, .10); }
.meridian--ink::after { border-color: rgba(229, 64, 54, .14); }

/* ---------- Responsive ---------- */
/* Header desktop cần ~1150px (logo, 7 mục menu, tìm kiếm, CTA). Dưới 1200px chuyển hẳn sang header
   mobile có menu ☰ thay vì để header tràn ngang như bản 1100px (đo được 1193px ở màn 1110px). */
@media (max-width: 1199px) {
  .header { display: none; }
  .header-mobile { display: block; }
}
@media (min-width: 1200px) and (max-width: 1399px) {
  .header .logo__img { height: 44px; }
  .header .wrap { gap: 14px; }
  .nav { gap: 2px; }
  .nav > a, .nav__toggle { padding: 10px 9px; font-size: .92rem; }
}
@media (max-width: 1100px) {
  .footer__grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 820px) {
  .field-row { grid-template-columns: 1fr; gap: 0; }
  .section-head--row .btn { width: 100%; }
  .wrap > .section-head:not(.section-head--row), .section-head--row > :first-child { max-width: 100%; }
}
@media (max-width: 560px) {
  body { font-size: 16px; }
  /* Footer mobile: mọi cụm canh giữa */
  .footer__grid { grid-template-columns: 1fr; gap: 32px; text-align: center; }
  .footer__about { display: flex; flex-direction: column; align-items: center; }
  .footer__about p { margin-inline: auto; }
  .footer__social { justify-content: center; }
  .footer__contact li { flex-direction: column; align-items: center; gap: 6px; }
  .footer__bottom { flex-direction: column; align-items: center; text-align: center; }
  .group-contact { right: 12px; bottom: 12px; }
  .group-contact > a, .group-contact > button { width: 48px; height: 48px; }
  .btn--lg { padding: 15px 24px; font-size: 1rem; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal { opacity: 1; transform: none; transition: none; }
  .marquee__track { animation: none; }
  .marquee--testi { overflow-x: auto; }
  .btn, .link-arrow .ic, .select__list, .select__caret { transition: none; }
  .group-contact > a::before, .group-contact > button::before { animation: none; opacity: 0; }
  .group-contact .ic, .group-contact .fc-bare img { animation: none; }
  * { animation-duration: .001ms !important; }
}


/* ---------- Ô icon 4 màu (dải cam kết trang chủ, định vị thương hiệu /gioi-thieu/gtl/) ---------- */
/* Icon không khung (khách chốt 15/09/2026): bỏ ô vuông màu, icon to hơn và giữ màu 2 tông của bộ icon.
   Class tông (--navy/--red…) giữ lại trong markup nhưng không còn tô nền. */
.promise__ic { flex: none; display: grid; place-items: center; width: 52px; height: 52px; }
.promise__ic .ic { width: 100%; height: 100%; }

/* ---------- Bento 4 nhóm đào tạo (trang chủ, /gioi-thieu/gtl/, /khoa-hoc/) ---------- */
/* 4 ô cân bằng: cùng bề ngang, cùng chiều cao; ô ảnh chỉ khác ở nền ảnh (khách chốt 15/09/2026, bỏ bố cục 1 lớn + 3 nhỏ) */
.bento { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; margin-top: 44px; align-items: start; padding-bottom: 36px; }
/* Lệch nhẹ xen kẽ trên / dưới (khách chốt): ô chẵn thấp xuống 36px */
.bento__cell:nth-child(even) { margin-top: 36px; }
.bento__cell { min-height: 380px; }
.bento__cell { position: relative; border-radius: var(--r-lg); padding: 28px; display: flex; flex-direction: column; justify-content: flex-end; gap: 10px; overflow: hidden; background: var(--white); border: 1px solid var(--line); color: var(--gray); transition: border-color .35s, transform .35s var(--ease); }
.bento__cell:hover { border-color: var(--red); transform: translateY(-2px); }
.bento__cell h3 { font-size: clamp(1.25rem, 1.8vw, 1.6rem); }
.bento__cell p { font-size: .95rem; }
.bento__cell .link-arrow { margin-top: 6px; }
.bento__more { display: flex; justify-content: center; margin-top: clamp(28px, 4vw, 40px); }
.bento__cell--image { color: var(--white); }
.bento__cell--image img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; transition: transform .8s var(--ease); }
.bento__cell--image:hover img { transform: scale(1.04); }
.bento__cell--image::before { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(9, 11, 12, .08) 25%, rgba(9, 11, 12, .6) 60%, rgba(9, 11, 12, .94)); z-index: 0; }
.bento__cell--image > * { position: relative; z-index: 1; }
.bento__cell--image h3, .bento__cell--image .link-arrow { color: var(--white); }
.bento__cell--image p { color: rgba(255, 255, 255, .82); }
/* Ba ô còn lại chỉ khác nhau ở vị trí lưới, không khác nhau ở màu nền:
   brief cấm mỗi thẻ một màu. Khác biệt nằm ở accent của icon. */
/* Bốn ô mang đúng bốn màu chính và khớp với màu hero của từng nhóm khoá:
   ảnh→Chuyển cấp (navy) · vàng→HSA·TSA · đen→Bồi dưỡng văn hoá · đỏ→Ngoại ngữ.
   Tên lớp đã có sẵn từ mockup nhưng trước đây cả bốn ô đều là thẻ trắng. */
.bento__cell--navy { background: var(--dark); border-color: var(--dark); color: var(--on-navy); }
.bento__cell--navy h3 { color: var(--white); }
.bento__cell--navy .link-arrow { color: var(--white); }
.bento__cell--navy:hover { border-color: var(--yellow); }
.bento__cell--gold { background: var(--yellow); border-color: var(--yellow); color: var(--on-yellow); }
.bento__cell--dark { background: var(--black); border-color: var(--black); color: var(--on-navy); }
.bento__cell--red  { background: var(--red-700); border-color: var(--red-700); color: var(--on-red); }
.bento__cell--gold h3 { color: var(--black); }
.bento__cell--dark h3, .bento__cell--red h3 { color: var(--white); }
.bento__cell--gold .link-arrow { color: var(--black); }
.bento__cell--dark .link-arrow, .bento__cell--red .link-arrow { color: var(--white); }
.bento__cell--gold:hover { border-color: var(--black); }
.bento__cell--dark:hover, .bento__cell--red:hover { border-color: var(--yellow); }
/* Pill trong ô màu: nền là chính màu ô pha loãng, không phải xám lạc lõng */
.bento__icon { position: absolute; top: 24px; right: 24px; width: 64px; height: 64px; }

/* 4. Vì sao chọn GTL: numbered list + ảnh sticky */
.why { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: clamp(32px, 6vw, 96px); align-items: stretch; }
.why__list { margin-top: 40px; }
.why__item { display: grid; grid-template-columns: 60px 1fr; gap: 20px; padding: 26px 0; border-top: 1px solid var(--line); }
.why__item:last-child { border-bottom: 1px solid var(--line); }
.why__ico { width: 60px; height: 60px; }
.why__ico .ic { width: 100%; height: 100%; }
.why__item h3 { font-size: 1.2rem; }
.why__item p { margin-top: 6px; font-size: .98rem; color: var(--gray-soft); }
/* Khung ảnh cao đúng bằng cụm chữ bên trái (grid stretch), cột hẹp hơn cột chữ */
.why__visual { position: relative; min-height: 420px; border-radius: var(--r-lg); overflow: hidden; background: var(--smoke-2); }
/* 4 ảnh chồng cùng một ô grid, chỉ ảnh .is-active hiện — đổi bằng opacity nên không nháy layout */
/* Ảnh absolute để kích thước ảnh gốc không kéo cao khung — khung cao theo cột chữ */
.why__visual img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transform: scale(1.04); transition: opacity .45s ease, transform .6s ease; }
.why__visual img.is-active { opacity: 1; transform: none; }
.why__item { cursor: default; position: relative; outline-offset: 4px; }
.why__item::before { content: ""; position: absolute; left: 0; top: -1px; width: 0; height: 2px; background: var(--red); transition: width .35s ease; }
.why__item.is-active::before { width: 100%; }
.why__item h3 { transition: color .25s; }
.why__item.is-active h3 { color: var(--red-700); }
.why__quote { margin-top: -48px; margin-left: 24px; margin-right: -12px; position: relative; padding: 22px 26px; background: var(--dark); color: var(--white); border-radius: var(--r); font-weight: 600; font-size: 1.02rem; line-height: 1.5; box-shadow: var(--sh); }
.why__quote small { display: block; margin-top: 8px; font-weight: 400; color: var(--on-navy); font-size: .82rem; }

/* 5. Bảng vàng: display numbers + marquee */
/* Strong moment thứ 2. Nền vàng nhạt cũ vi phạm luật "không dùng vàng làm nền
   diện tích lớn"; navy vừa giải quyết điều đó vừa cho số liệu vàng đạt 10.19:1. */
.honors { background: var(--dark); color: var(--on-navy); }
.honors h2 { color: var(--white); }
.honors .lead { color: var(--on-navy); }
.honors .eyebrow { color: var(--white); }
.honors__stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; margin-top: 44px; }
.honors .marquee { margin-top: 48px; padding-block: 8px 24px; }
/* Thẻ thưa hơn: khoảng cách đặt bằng margin-right (không dùng gap) để nửa sau khi nhân đôi
   dài đúng bằng nửa đầu — vòng lặp translateX(-50%) không bị giật nửa khoảng cách */
.honors .marquee__track, .marquee--honors .marquee__track { gap: 0; }
.honors .marquee__track > .honor-card, .marquee--honors .marquee__track > .honor-card { margin-right: 32px; }
/* Dải thẻ học viên trên nền sáng (trang Thành tích): tràn hết chiều ngang, không mờ 2 mép, bóng dịu */
.marquee--honors { -webkit-mask-image: none; mask-image: none; padding-block: 10px 30px; }
.marquee--honors .honor-card { box-shadow: 0 12px 30px rgba(9, 11, 12, .12); }
.honors__note { margin-top: 16px; font-size: .8rem; color: var(--gray-soft); }
.honors__foot { display: flex; justify-content: center; align-items: center; gap: 20px; flex-wrap: wrap; margin-top: clamp(28px, 4vw, 40px); }

/* 6. Testimonials: dải chạy ngang (style trong common.css) */
.testimonials .section-head { margin-bottom: 36px; }

/* 7. Thư viện: featured + list */

/* 8. Cơ sở: map split */

/* 9. Hợp tác: band */
/* Khối này từng là mảng đen thứ tư trên trang. Toàn trang chỉ được 3 strong
   moment (hero, bảng vàng, form cuối) nên nó hạ xuống thành thẻ warm viền đậm. */
.band { display: grid; grid-template-columns: 1.4fr 1fr; gap: 32px; align-items: center; padding: clamp(32px, 4vw, 56px); border-radius: var(--r-lg); background: var(--smoke); border: 1px solid var(--line-strong); color: var(--gray); position: relative; overflow: hidden; }
.band h2 { color: var(--black); font-size: clamp(1.7rem, 2.8vw, 2.4rem); }
.band p { margin-top: 12px; }
.band__points { display: flex; gap: 22px; flex-wrap: wrap; margin-top: 22px; }
.band__points li { display: inline-flex; align-items: center; gap: 8px; font-size: .92rem; font-weight: 600; color: var(--black); }
/* Vạch dọc ngắn giữa các ý: đặt ở ::before của ý thứ 2 trở đi, nằm giữa khoảng gap 22px */
.band__points li + li { position: relative; }
.band__points li + li::before { display: none; content: ""; position: absolute; left: -11px; top: 50%; width: 1px; height: 18px; transform: translateY(-50%); background: var(--line-strong); }
.band__cta { display: flex; justify-content: flex-end; position: relative; z-index: 1; }
.band .meridian { opacity: .45; }

/* 10. Form: split */
.register { display: grid; grid-template-columns: 1fr 1.1fr; gap: clamp(28px, 5vw, 72px); align-items: start; }
.register__points { margin-top: 28px; display: flex; flex-direction: column; gap: 14px; }
.register__points li { display: flex; gap: 12px; align-items: flex-start; }
.register__points .ic { margin-top: 3px; }
@media (max-width: 1100px) {
  .bento { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bento__cell { min-height: 300px; }
}
@media (max-width: 560px) {
  .bento__more .btn { width: 100%; }
  .bento { gap: 12px; grid-template-columns: 1fr; padding-bottom: 0; }
  .bento__cell:nth-child(even) { margin-top: 0; }
  .bento__cell { padding: 22px; min-height: 0; }
  .bento__cell--image { min-height: 280px; }
  .bento__cell p { display: none; }
  .bento__icon { top: 18px; right: 18px; width: 52px; height: 52px; }
  .bento__cell h3 { padding-right: 60px; }
}

/* ---------- Card + thẻ giáo viên (chung cho trang chủ và /giao-vien/) ---------- */
.card { background: var(--white); border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; display: flex; flex-direction: column; transition: border-color .3s, transform .3s var(--ease); }
.card:hover { border-color: var(--red); transform: translateY(-2px); }
.card__media { position: relative; aspect-ratio: 16 / 9; overflow: hidden; background: var(--smoke-2); }
.card__media img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.card:hover .card__media img { transform: scale(1.04); }
.card__media .pill { position: absolute; top: 14px; left: 14px; }
.card__body { padding: 22px; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.card__body h3 { font-size: 1.2rem; }
.card__body h3 a:hover { color: var(--red); }
.card__body p { font-size: .95rem; color: var(--gray-soft); }
.card__list { display: flex; flex-direction: column; gap: 6px; font-size: .92rem; }
.card__list li { display: flex; gap: 8px; align-items: flex-start; }
.card__list .ic { margin-top: 3px; }
.card__foot { margin-top: auto; padding-top: 14px; border-top: 1px solid var(--line); display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px 12px; }
.card__foot > * { white-space: nowrap; }
.card__price { font-weight: 700; color: var(--black); font-size: 1.05rem; letter-spacing: -.01em; }
.card__price small { font-weight: 500; color: var(--gray-soft); font-size: .8rem; }
/* Teacher */
.teacher-card .card__media { aspect-ratio: 4 / 5; }
@media (max-width: 560px) { .teacher-card .card__media { aspect-ratio: 5 / 4; } .teacher-card [class*="teacher-card__media--"] img { object-position: center 18%; } .teacher-card__stats dt { font-size: .8rem; } }   /* ảnh tách nền 2:3 trong khung 4:5: cắt ~7% đỉnh (còn chừa khoảng trên đầu) và phần chân */
/* Môn dạy thành badge trên ảnh: nền trắng để đọc được trên cả 4 nền màu thẻ (vàng, navy, đỏ, đen) */
.teacher-card__subject { position: absolute; top: 14px; left: 14px; z-index: 1; max-width: calc(100% - 28px); padding: 5px 11px; border-radius: var(--r-pill); background: var(--white); color: var(--black); font-size: .74rem; font-weight: 700; letter-spacing: .02em; box-shadow: 0 4px 12px -4px rgba(9, 11, 12, .35); }
.teacher-card .card__media img { object-position: center 20%; }
/* Thẻ có ảnh tách nền: nền đặc một trong bốn màu chính (cardTint trong teachers.json), ảnh cùng khung
   2:3 với ô nên lấp vừa khít, không crop thêm. */
.teacher-card__media--navy { background: var(--dark); }
.teacher-card__media--red { background: var(--red-700); }
.teacher-card__media--yellow { background: var(--yellow); }
.teacher-card__media--black { background: var(--black); }
.teacher-card [class*="teacher-card__media--"] img { object-fit: cover; object-position: center 40%; }
.teacher-card .card__body { gap: 4px; }
.teacher-card h3 { font-size: 1.18rem; }
.teacher-card__school { font-size: .74rem; color: var(--gray-soft); line-height: 1.45; }
/* Ô nổi bật: con số lớn trên, nhãn nhỏ dưới — mắt đọc "1570/1600" trước rồi mới tới "SAT".
   <dt> đứng trước <dd> cho đúng ngữ nghĩa, đảo thứ tự hiển thị bằng flex. Gạch dạ quang vàng
   dưới chân số giống thẻ Bảng vàng trang chủ, để hai loại "thành tích" nhìn cùng một họ. */
/* margin-top: auto — thẻ không còn dòng tag, dải số đẩy xuống đáy để các thẻ cùng hàng thẳng nhau dù tên trường dài ngắn khác nhau */
.teacher-card__stats { display: grid; grid-template-columns: 1fr 1fr; margin: auto 0 0; padding-top: 12px; border-top: 1px solid var(--line); }
.teacher-card .teacher-card__school { min-height: 2.8em; margin-bottom: 12px; }
.teacher-card__stats > div { display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 3px; min-width: 0; }
.teacher-card__stats > div + div { border-left: 1px solid var(--line); padding-left: 14px; }
.teacher-card__stats > div:first-child { padding-right: 10px; }
/* Giá trị chữ dài ("Cựu giám khảo", "Tuyển thẳng") được xuống dòng; gạch vàng nằm trên <span> inline
   với box-decoration-break để mỗi dòng có gạch riêng, không thành một khối vàng. */
.teacher-card__stats dd { font-family: var(--display); font-size: 1.28rem; font-weight: 700; line-height: 1.15; letter-spacing: -.02em; color: var(--black); white-space: nowrap; }
/* Giá trị dài ("Tuyển thẳng", "2.500+ giờ") xuống 2 dòng làm khối số của thẻ đó cao hơn các thẻ cùng hàng
   → template gắn .is-long từ 10 ký tự, hạ cỡ chữ để mọi thẻ chỉ còn 1 dòng (khách 18/09). */
.teacher-card__stats .is-long dd { font-size: 1.02rem; letter-spacing: -.01em; }
.teacher-card__stats dd span { background: linear-gradient(transparent calc(100% - 3px), var(--yellow) calc(100% - 3px)); padding: 0 2px; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
.teacher-card__stats dt { min-height: 2.7em; font-size: .76rem; line-height: 1.35; color: var(--gray-soft); overflow-wrap: break-word; hyphens: none; }
@media (prefers-reduced-motion: reduce) { .card, .card__media img { transition: none; } }

/* 0. MỘT SECTION = MỘT CẶP MÀU (khách chốt 15/09/2026). Màu theo nhóm trong icons.gen.css
   (đen+đỏ, đen+vàng, đỏ+vàng) khiến icon trong cùng section lẫn màu. Section nền sáng: mọi icon
   đen + vàng. Specificity (0,1,3) thắng icons.gen.css (0,1,1) nhưng thua các rule bề mặt A/B/C (0,2,1)
   bên dưới, nên section navy/đen/đỏ vẫn trắng + vàng, nền vàng vẫn đen + đỏ. */
main section use[href] { --ic-1: var(--black); --ic-2: var(--yellow); --ic-3: rgba(247, 202, 57, .28); }
/* Icon NHỎ (≤ ~22px: gạch đầu dòng, meta) trên nền sáng: vàng không đủ nổi ở cỡ này → đen + đỏ (khách 15/09).
   :where giữ specificity bằng rule trên (đứng sau nên thắng), vẫn thua các rule bề mặt tối A/B/C và hover lấp màu. */
main section :where(.ic--sm, .checklist .ic, .card__list .ic, .dl-item__meta .ic) use[href] { --ic-2: var(--red); --ic-3: rgba(229, 64, 54, .16); }

/* ---------- Icon: rule theo ngữ cảnh ----------
   Nhắm <use> chứ không nhắm .ic. <use> là con của .ic nên khai báo trên chính nó
   thắng giá trị kế thừa xuống shadow tree. Bảng nhóm màu nằm ở icons.gen.css,
   khối này đặt sau nên đè được khi bề mặt đòi hỏi.

   A. Đơn sắc theo màu chữ. Bắt buộc: thiếu rule này thì mũi tên đỏ của nhóm base
      sẽ nằm trên nền nút đỏ .btn--primary và biến mất. */
.btn use[href], .link-arrow use[href],
.header use[href], .header-mobile use[href], .m-drawer use[href],
.tab-btn use[href], .acc-head use[href], .carousel-nav use[href],
.group-contact use[href], .subnav use[href], .toc use[href],
.filter-chip use[href], .status use[href]
{ --ic-1: currentColor; --ic-2: currentColor; --ic-3: transparent; }

/* Ngoại lệ: mũi tên của .link-arrow vẫn giữ màu đỏ dù chữ đen */
.link-arrow use[href] { --ic-1: var(--red); --ic-2: var(--red); --ic-3: transparent; }

/* B. Bề mặt navy: nét chính trắng, accent vàng */
.mv-card--navy use[href],
.bg-navy use[href], .bg-black use[href], .bg-red use[href], .footer use[href], .hero use[href],
.page-hero:not(.page-hero--yellow) use[href], .cta-band use[href],
.feature--dark use[href], .why__quote use[href], .article-cta use[href],
.honors use[href], .register-section use[href],
.bento__cell--image use[href], .bento__cell--navy use[href], .bento__cell--dark use[href], .bento__cell--red use[href]
{ --ic-1: var(--white); --ic-2: var(--yellow); --ic-3: rgba(255, 255, 255, .22); }

/* Ngoại lệ trong header: đầu cột mega nằm trên panel trắng nên trả lại hai tông */
.mega__tab use[href] { --ic-1: var(--black); --ic-2: var(--red); --ic-3: rgba(9, 11, 12, .13); }
.mega__link use[href], .mega__card use[href] { --ic-1: currentColor; --ic-2: currentColor; --ic-3: transparent; }

/* C. Bề mặt vàng nhạt: accent vàng sẽ chìm, đổi sang đỏ */
.mv-card--yellow use[href], .bg-yellow use[href], .page-hero--yellow use[href], .bento__cell--gold use[href],
.download-box use[href], .pill--gold use[href], .status use[href]
{ --ic-1: var(--black); --ic-2: var(--red); --ic-3: rgba(9, 11, 12, .13); }

/* Accordion là thẻ trắng: dấu + phải theo màu chữ thẻ, không nhận màu trắng của bề mặt đỏ/navy bên ngoài */
/* Thẻ trắng nổi trên hero navy: icon không còn ô navy nên phải về hai tông tối, không nhận màu trắng của .hero */
.hero .hero__float use[href] { --ic-1: var(--black); --ic-2: var(--yellow); --ic-3: rgba(247, 202, 57, .28); }
.board__icon use[href] { --ic-1: currentColor; --ic-2: currentColor; --ic-3: transparent; }
.register-section .acc-head use[href], .honors .acc-head use[href] { --ic-1: currentColor; --ic-2: currentColor; --ic-3: transparent; }

/* Icon liên hệ ở footer: pack essentials gần như chỉ có nét chính, accent rất nhỏ nên rule B (nét trắng)
   cho ra icon xám mảnh. Đảo vai: nét chính vàng (10.19:1 trên navy), accent trắng, mảng nền vàng mờ. */
.footer__contact use[href] { --ic-1: var(--yellow); --ic-2: var(--white); --ic-3: rgba(247, 202, 57, .28); }

/* D. Đặt SAU A/B/C: nút có nền riêng nên icon phải theo NHÃN NÚT, không theo bề mặt bên dưới.
   Thiếu rule này thì nút vàng trên dải đỏ nhận màu icon của bề mặt đỏ (trắng) và mũi tên biến mất. */
.btn use[href], .select use[href] { --ic-1: currentColor; --ic-2: currentColor; --ic-3: transparent; }

/* Thẻ cơ sở: icon địa chỉ + điện thoại mặc định đen/vàng như cả section; hover đổi sang đỏ/vàng
   cho thẻ đang trỏ nổi lên; thẻ đang chọn (navy) dùng vàng/trắng để đọc được trên nền tối. */
.campus__row:hover use[href], .campus__row:focus-visible use[href] { --ic-1: var(--red); --ic-2: var(--yellow); --ic-3: rgba(239, 63, 55, .18); }
.campus__row:hover .ic { transform: scale(1.12); }
.campus__row.is-active use[href] { --ic-1: var(--yellow); --ic-2: var(--white); --ic-3: rgba(247, 202, 57, .28); }
@media (max-width: 560px) { .band__points li + li::before { display: none; } }

/* ===== Con số nổi bật: một kiểu cho toàn site (khách 18/09) =====
   Lấy đúng dải số của trang chủ (.bignum) làm chuẩn: cột ngăn bằng hairline xám, số display đen căn giữa,
   nhãn xám bên dưới, vệt vàng chỉ chạy khi rê chuột (không gạch sẵn, không vạch đỏ bên trái nữa).
   Cỡ số đo theo bề rộng CẢ DẢI (cqi của phần tử bọc) nên mọi số trong một dải luôn bằng nhau.
   Áp cho: .bignum (trang chủ), .statstrip (Pasal, Hợp tác, Đầu ra khoá học), .big-stats (Thành tích),
   .honors-arc__stats (Bảng vàng trang chủ). Số nhỏ nằm trong thẻ (điểm học viên, học phí, thẻ giáo viên)
   vẫn giữ gạch vàng sẵn — đó là nhấn trong thẻ, không phải dải số. */
.bignum, .statstrip, .big-stats, .honors-arc__stats { container-type: inline-size; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: start; gap: 0; }   /* start: nhãn dài ngắn khác nhau thì các SỐ vẫn thẳng hàng trên */
.statstrip--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
/* Số rất lớn nên cần hở rộng hơn với đoạn mô tả của tiêu đề mục (khách 18/09) */
.section-head + :is(.bignum, .statstrip, .big-stats, .honors-arc__stats) { margin-top: clamp(48px, 5vw, 72px); }
.bignum__item, .statstrip .stat, .big-stats > div, .honors-arc__stats > div { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 0 clamp(16px, 2vw, 28px); border-left: 1px solid var(--line); }
:is(.bignum, .statstrip, .big-stats, .honors-arc__stats) > :first-child { border-left: 0; }
.bignum__num, .stat b, .big-stats b, .honors-arc__stats b { position: relative; isolation: isolate; display: inline-flex; align-items: baseline; width: fit-content; max-width: 100%; font-family: var(--display); font-size: clamp(2.4rem, 5cqi, 4.4rem); font-weight: 700; line-height: 1; letter-spacing: -.04em; color: var(--black); font-variant-numeric: tabular-nums; white-space: nowrap; }
.stat b em { font-style: normal; color: var(--red); }
/* Vệt vàng dưới số: ẩn, rê chuột vào cột nào thì vệt của số đó mở từ trái sang phải (khách 15/09) */
:is(.bignum__num, .stat b, .big-stats b, .honors-arc__stats b)::after { content: ""; position: absolute; z-index: -1; left: -.03em; right: -.03em; bottom: .04em; height: .2em; background: var(--yellow); transform: scaleX(0); transform-origin: left center; transition: transform .5s cubic-bezier(.4, 0, .2, 1); }
:is(.bignum__item, .statstrip .stat, .big-stats > div, .honors-arc__stats > div):hover :is(.bignum__num, b)::after { transform: scaleX(1); }
.bignum__label, .stat > span, .big-stats > div > span, .honors-arc__stats > div > span { display: block; margin-top: 14px; font-size: clamp(1rem, 1.2vw, 1.125rem); font-weight: 500; line-height: 1.4; color: var(--gray); }
/* Hồ sơ giáo viên: dải số nằm trong banner navy, cỡ nhỏ và nhiều ô — giữ gạch vàng sẵn để đọc được trên nền tối */
.profile-stats dd { width: fit-content; background: linear-gradient(transparent calc(100% - 3px), var(--yellow) calc(100% - 3px)); padding: 0 4px; color: var(--black); }
/* Trên nền tối (Bảng vàng trang chủ, banner hồ sơ giáo viên, mọi .bg-navy): số trắng, gạch vàng hạ thấp
   xuống chân số (20% dưới) để chữ trắng không đè lên nền vàng. Bản tô chữ 2 tầng bằng background-clip
   bị lỗi hiển thị trên một số trình duyệt nên đã bỏ. */
:is(.honors, .bg-navy, .page-hero) .profile-stats dd { color: var(--white); background: linear-gradient(transparent 80%, var(--yellow) 80%); }
:is(.honors, .bg-navy, .page-hero) :is(.stat b, .big-stats b) { color: var(--white); }
:is(.honors, .bg-navy, .page-hero) :is(.stat > span, .big-stats > div > span) { color: var(--on-navy); }
:is(.honors, .bg-navy, .page-hero) .profile-stats > div { border-color: var(--line-navy); }
/* Màn hẹp: 2 cột (ô lẻ mở hàng nên bỏ vạch ngăn), cỡ số theo dải; dưới 560px các dải chữ dài về 1 cột */
@media (max-width: 900px) {
  .bignum, .statstrip, .statstrip--3, .big-stats, .honors-arc__stats { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 32px; }
  :is(.bignum, .statstrip, .big-stats, .honors-arc__stats) > :nth-child(odd) { border-left: 0; }
  .bignum__num, .stat b, .big-stats b, .honors-arc__stats b { font-size: clamp(2.1rem, 11cqi, 3rem); }
}
@media (max-width: 560px) {
  .statstrip, .statstrip--3, .big-stats { grid-template-columns: 1fr; row-gap: 22px; }
  :is(.statstrip, .big-stats) > * { border-left: 0; }
}
/* Checklist: icon tick 21px hai tông đen/vàng mảnh bị chìm thành xám trên nền smoke — đổi sang đỏ đặc, nền vòng đỏ nhạt */
main .checklist use[href] { --ic-1: var(--red); --ic-2: var(--red); --ic-3: rgba(229, 64, 54, .16); }
:is(.bg-navy, .bg-black, .bg-red) .checklist use[href] { --ic-1: var(--yellow); --ic-2: var(--yellow); --ic-3: rgba(247, 202, 57, .22); }

/* ===== Slider dùng chung (17/09, feedback R1 #5 #9 #12) =====
   Một hàng thẻ, --per thẻ mỗi khung (co theo màn hình), mũi tên trái/phải bên dưới, tự trượt khi có nhiều
   thẻ hơn số hiển thị (site.js bindSlider: dừng khi rê chuột/đang chạm, hết hàng quay về đầu).
   Dùng cho: giáo viên trang chủ + Về GTL, cảm nhận phụ huynh ở mọi trang. */
.slider { --per: 4; --slider-gap: 20px; position: relative; }
/* overflow-y: hidden — nếu để auto, khung dư vài px chiều cao và con lăn chuột trong thẻ sẽ cuộn dọc khung thay vì cuộn trang */
.slider__track { display: flex; gap: var(--slider-gap); overflow-x: auto; overflow-y: hidden; scroll-snap-type: x mandatory; scrollbar-width: none; padding: 6px 2px 12px; margin: 0 -2px; cursor: grab; }
.slider__track::-webkit-scrollbar { display: none; }
.slider__track.is-dragging { cursor: grabbing; scroll-snap-type: none; }
.slider__track > * { flex: 0 0 calc((100% - (var(--per) - 1) * var(--slider-gap)) / var(--per)); min-width: 0; scroll-snap-align: start; }
.slider__nav { display: flex; justify-content: center; align-items: center; gap: 8px; margin-top: 20px; }
.slider__nav .js-slider-prev .ic { transform: scaleX(-1); }
.slider.is-static .slider__nav { display: none; }
.slider__dots { display: flex; gap: 6px; margin-inline: 10px; }
.slider__dots i { width: 8px; height: 8px; border-radius: 50%; background: var(--line-strong); transition: width .3s var(--ease), background .3s; }
.slider__dots i.is-on { width: 22px; border-radius: 4px; background: var(--black); }
.slider--testi { --per: 3; }
.slider--testi .testi-card { height: auto; min-height: 0; }
@media (max-width: 1100px) { .slider { --per: 3; } .slider--testi { --per: 2; } }
@media (max-width: 820px) { .slider { --per: 2; --slider-gap: 14px; } }
@media (max-width: 560px) { .slider, .slider--testi { --per: 1.15; } }
/* Thẻ thành tích bấm được → trang câu chuyện học viên (feedback R1 #14) */
.honor-card { position: relative; }
.honor-card__link { position: absolute; inset: 0; z-index: 3; border-radius: inherit; }
.honor-card__link:focus-visible { outline: 3px solid var(--red); outline-offset: 2px; }
.slider--honors { --per: 5; }
.slider--honors .honor-card { width: auto; }
@media (max-width: 1100px) { .slider--honors { --per: 4; } }
@media (max-width: 820px) { .slider--honors { --per: 2.3; } }
@media (max-width: 560px) { .slider--honors { --per: 1.6; } }
