/**
 * Mentora Site — grid builder + utilities.
 * Nạp SAU mentora/css/style.css (design gốc): tokens màu/typo/spacing lấy từ
 * mentora/css/base/variables.css — file này KHÔNG định nghĩa lại.
 *
 * Breakpoints KHỚP UX Builder (đã override trong inc/breakpoints.php):
 *   sm = 768 (mobile < 768), md = 1024 (tablet 768–1023), desktop >= 1024.
 */

/* ---------- Layout: section (element mt_section) ---------- */

.mt-section {
	padding-top: 64px;
	padding-bottom: 64px;
}

.mt-section__container {
	width: 100%;
	padding-inline: 16px;
	margin-inline: auto;
}

@media (min-width: 768px) {
	.mt-section__container {
		padding-inline: 24px;
	}
}

@media (min-width: 1024px) {
	.mt-section__container {
		max-width: var(--container-max, 1500px);
	}
}

.mt-section--dark {
	color: #fff;
}

/* ---------- Layout: grid 12 cột (mt_row / mt_col) ---------- */

.mt-row {
	display: grid;
	grid-template-columns: repeat(12, minmax(0, 1fr));
	gap: var(--spacing-lg, 24px);
}

.mt-row--align-center  { align-items: center; }
.mt-row--align-end     { align-items: end; }
.mt-row--align-stretch { align-items: stretch; }

.mt-col { min-width: 0; }

/* Desktop (mặc định, >= 1024) */
.mt-col--1  { grid-column: span 1; }
.mt-col--2  { grid-column: span 2; }
.mt-col--3  { grid-column: span 3; }
.mt-col--4  { grid-column: span 4; }
.mt-col--5  { grid-column: span 5; }
.mt-col--6  { grid-column: span 6; }
.mt-col--7  { grid-column: span 7; }
.mt-col--8  { grid-column: span 8; }
.mt-col--9  { grid-column: span 9; }
.mt-col--10 { grid-column: span 10; }
.mt-col--11 { grid-column: span 11; }
.mt-col--12 { grid-column: span 12; }

/* Tablet: 768–1023px */
@media (max-width: 1023px) {
	.mt-col { grid-column: span 12; }

	.mt-col--md-1  { grid-column: span 1; }
	.mt-col--md-2  { grid-column: span 2; }
	.mt-col--md-3  { grid-column: span 3; }
	.mt-col--md-4  { grid-column: span 4; }
	.mt-col--md-5  { grid-column: span 5; }
	.mt-col--md-6  { grid-column: span 6; }
	.mt-col--md-7  { grid-column: span 7; }
	.mt-col--md-8  { grid-column: span 8; }
	.mt-col--md-9  { grid-column: span 9; }
	.mt-col--md-10 { grid-column: span 10; }
	.mt-col--md-11 { grid-column: span 11; }
	.mt-col--md-12 { grid-column: span 12; }
}

/* Mobile: < 768px */
@media (max-width: 767px) {
	.mt-col,
	.mt-col--md-1, .mt-col--md-2, .mt-col--md-3, .mt-col--md-4, .mt-col--md-5,
	.mt-col--md-6, .mt-col--md-7, .mt-col--md-8, .mt-col--md-9, .mt-col--md-10,
	.mt-col--md-11, .mt-col--md-12 { grid-column: span 12; }

	.mt-col--sm-1  { grid-column: span 1; }
	.mt-col--sm-2  { grid-column: span 2; }
	.mt-col--sm-3  { grid-column: span 3; }
	.mt-col--sm-4  { grid-column: span 4; }
	.mt-col--sm-5  { grid-column: span 5; }
	.mt-col--sm-6  { grid-column: span 6; }
	.mt-col--sm-7  { grid-column: span 7; }
	.mt-col--sm-8  { grid-column: span 8; }
	.mt-col--sm-9  { grid-column: span 9; }
	.mt-col--sm-10 { grid-column: span 10; }
	.mt-col--sm-11 { grid-column: span 11; }
	.mt-col--sm-12 { grid-column: span 12; }
}

/* ---------- Utilities ---------- */

.mt-text-center { text-align: center; }
.mt-text-right  { text-align: right; }

.mt-depth-1 { box-shadow: var(--shadow-card, 0 4px 14px rgba(10, 32, 80, .05)); }
.mt-depth-2 { box-shadow: var(--shadow-card-hover, 0 10px 24px rgba(10, 32, 80, .12)); }
.mt-depth-3 { box-shadow: 0 16px 40px rgba(10, 32, 80, .18); }

/* ==========================================================================
   FIX course-card — lệch giữa CSS design và kích thước card thực tế.
   Markup đã khớp design 100% (đã diff cây DOM); các lỗi dưới nằm ở CSS design.
   ========================================================================== */

/* --- 1. Card cao bằng nhau, đáy thẳng hàng ---
   .slider__track là grid nên <li> đã stretch bằng nhau, nhưng .course-card
   không lấp đầy <li> -> card ngắn/dài theo nội dung. */

.mt-course-item {
	display: flex;
}

.mt-course-item > .course-card {
	flex: 1 1 auto;
}

/* --- 1a. Chặn aspect-ratio suy NGƯỢC ra chiều rộng (lỗi thấy ở Opera) ---
   Card được gán `aspect-ratio: 463/588` ở 3 nơi (sections.css
   .section-panel--upcoming, course-list.css .results / .course-sec). Card lại là
   flex item của .mt-course-item, mà .mt-course-item là grid item bị stretch
   => CHIỀU CAO của card là definite. Khi min-width là `auto`, flex/grid lấy
   "transferred size suggestion" = height × 463/588 làm bề rộng TỐI THIỂU, nên
   card nào cao hơn tỉ lệ design sẽ tự nong rộng hơn cột grid và ĐÈ sang card kế
   (notch xám ::before z-index:1 của card trước phủ lên tiêu đề card sau).
   Nội dung thật luôn cao hơn design: tiêu đề 2 dòng + dòng "Giá Mentora Plus"
   (design không có) + chức danh mentor 2–3 dòng.

   breakout-guard.css §7 đã vá đúng bằng min-width:0 nhưng chỉ trong
   `@media (min-width:1024px) and (max-width:1551px)` và `@media (max-width:1023px)`
   => VIEWPORT >= 1552px KHÔNG được vá. Màn 1920 ở zoom 100% (Opera) rơi vào
   khoảng hở này, còn 1920 ở scale 125% của Windows (Chrome) ra 1536px nên vẫn
   được vá — vì vậy lỗi chỉ lộ ở một số máy/trình duyệt.
   Đặt lại guard KHÔNG kèm điều kiện: aspect-ratio chỉ được suy ra chiều cao. */

.mt-course-item,
.slider__track > li,
.results__grid > li {
	min-width: 0;
}

.course-card {
	min-width: 0;
	max-width: 100%;
}

/* Đẩy khối mentor xuống đáy để giá + mentor thẳng hàng giữa các card. */
.course-card__mentor {
	margin-top: auto;
}

/* --- 1b. Tiêu đề / ảnh / khối mentor đều bấm được ---
   Design chỉ có 1 link (chip mũi tên) nhưng người dùng bấm vào tiêu đề và ảnh.
   `a { color: inherit; text-decoration: none }` đã có trong reset của design nên
   chỉ cần lo phần hộp. */

.mt-thumb-link {
	display: block;   /* inline sẽ sinh line-box dưới ảnh -> card cao thêm vài px */
}

.course-card__mentor {
	/* .course-card__mentor giờ là <a>; giữ nó vẫn là flex item cao tự nhiên */
	cursor: pointer;
}

.course-card__mentor:hover .course-card__mentor-name,
.course-card__title a:hover {
	color: var(--color-primary-dark, #003da8);
}

.course-card--flame .course-card__title a:hover {
	color: #fff;
	text-decoration: underline;
}

/* --- 2. Tiêu đề clamp 2 dòng ---
   Tiêu đề khóa học thật dài 1–3 dòng làm thanh head cao khác nhau -> ảnh bắt
   đầu ở độ cao khác nhau. Design mẫu vốn đã hiển thị tiêu đề bị cắt ("…") nên
   clamp 2 dòng là đúng ý đồ, đồng thời cho ảnh thẳng hàng. */

/* Clamp đặt trên chính phần tử CHỨA CHỮ. Tiêu đề giờ nằm trong <a> nên nếu để
   clamp ở <h3> thì `-webkit-box` phải clamp một con inline -> Chrome mới còn cứu
   được bằng property `line-clamp` chuẩn, nhưng Safari (chỉ có đường -webkit) sẽ
   hiện đủ 3–4 dòng và card lệch chiều cao. */
.course-card__title {
	overflow: hidden;
}

.course-card__title a {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	line-clamp: 2;
	overflow: hidden;
}

/* --- 3. Nút giỏ hàng: chặn flex bóp méo ---
   Nguyên nhân gốc đã sửa ở PHP (bleed slider không được thêm .container, xem
   mt_course_carousel.php): card đúng 460px -> pill 76% = 191px >= 179px cần
   thiết nên nút tròn tự nhiên như design.
   Giữ flex-shrink: 0 làm lưới an toàn — nếu về sau card hẹp hơn dự kiến thì
   nội dung tràn ra (nhìn thấy ngay) chứ không âm thầm bóp méo nút thành oval.
   KHÔNG override hình học của pill để giữ đúng ý đồ design (top:12%/height:76%). */

.course-card__stars,
.course-card__cart {
	flex-shrink: 0;
}

/* --- 4. Giá: xem khối "TRUNG HÒA THẺ LỒNG CỦA WOOCOMMERCE" ở đầu file --- */

/* ==========================================================================
   FIX mentor-card — card cao bằng nhau.
   .mentors__grid là grid nên <li> đã stretch, nhưng .mentor-card không lấp đầy
   <li> và .mentor-card__body cao theo số dòng chức danh (thật: 1–3 dòng, design
   chỉ 2) -> đáy card lệch nhau.
   ========================================================================== */

/* Grid tính chiều cao TỪNG HÀNG độc lập -> hàng 1 và hàng 2 lệch nhau (đo được
   640 vs 634). grid-auto-rows: 1fr buộc mọi hàng cao bằng nhau. */
.mentors__grid {
	grid-auto-rows: 1fr;
}

.mentors__grid > li {
	display: flex;
}

.mentors__grid > li > .mentor-card {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
}

/* Body chiếm hết phần còn lại -> nền gradient phủ đều, đáy card thẳng hàng. */
.mentors__grid > li > .mentor-card > .mentor-card__body {
	flex: 1 1 auto;
}

/* Ảnh mentor: cố định tỉ lệ 372/461 của design để đỉnh/đáy ảnh thẳng hàng dù
   ảnh gốc có tỉ lệ khác (size mt-lecturer-card đã crop, đây là lưới an toàn). */
.mentor-card__photo {
	aspect-ratio: 372 / 461;
	object-fit: cover;
}

/* ==========================================================================
   TRUNG HÒA THẺ LỒNG CỦA WOOCOMMERCE TRONG MỌI KHỐI GIÁ.
   wc_price() sinh <span class="woocommerce-Price-amount"><bdi>1.999.000
   <span class="woocommerce-Price-currencySymbol">₫</span></bdi></span>.
   Design lại style theo TÊN THẺ, ví dụ:
     .cprice__price span { 60px #003da8 }   .cprice__price s { 17px #999 }
     .co-item__price b   { 22px #003cac }   .co-item__price s { 16px #b3b3b3 }
   => span của Woo nằm trong <s> cũng khớp `… span` (specificity bằng nhau nhưng
   áp trực tiếp lên chính nó) nên THẮNG style của <s> -> giá gạch hiển thị to và
   xanh y như giá chính. Đã gặp 2 lần (course-card, cprice).
   Cho thẻ của Woo kế thừa để thẻ design bên ngoài luôn quyết định. Liệt kê sẵn
   cả khối của giỏ hàng / thanh toán để Phase 6 không dẫm lại.
   ========================================================================== */

.course-card__price .woocommerce-Price-amount,
.course-card__price-old .woocommerce-Price-amount,
.cprice__price .woocommerce-Price-amount,
.co-item__price .woocommerce-Price-amount,
.co-totals .woocommerce-Price-amount,
.co-final .woocommerce-Price-amount,
.cart-row__amount .woocommerce-Price-amount,
.cart-row__old .woocommerce-Price-amount,
.cart__subtotal .woocommerce-Price-amount,
.cart__total .woocommerce-Price-amount,
.course-card__price bdi,
.course-card__price-old bdi,
.cprice__price bdi,
.co-item__price bdi,
.co-totals bdi,
.co-final bdi,
.cart-row__amount bdi,
.cart-row__old bdi,
.cart__subtotal bdi,
.cart__total bdi,
.course-card__price .woocommerce-Price-currencySymbol,
.course-card__price-old .woocommerce-Price-currencySymbol,
.cprice__price .woocommerce-Price-currencySymbol,
.co-item__price .woocommerce-Price-currencySymbol,
.co-totals .woocommerce-Price-currencySymbol,
.co-final .woocommerce-Price-currencySymbol,
.cart-row__amount .woocommerce-Price-currencySymbol,
.cart-row__old .woocommerce-Price-currencySymbol,
.cart__subtotal .woocommerce-Price-currencySymbol,
.cart__total .woocommerce-Price-currencySymbol {
	font: inherit;
	color: inherit;
	text-decoration: inherit;
}

/* ==========================================================================
   Panel kết quả lọc khi CHỈ CÓ 1 TRANG (không có pager).
   Design đặt .results .section-panel__inner { padding-bottom: 0 } vì pager là
   phần tử cuối, margin-top:62px của nó tạo khoảng thở. Không có pager thì card
   dính sát mép panel (đo được 0px) và bị góc bo 70px cắt ngang.
   Chỉ áp ở desktop vì rule gốc của design nằm trong @media (min-width:1024px).
   ========================================================================== */

@media (min-width: 1024px) {
	.results--no-pager .section-panel__inner {
		padding-bottom: 40px;
	}
}

/* ==========================================================================
   Stat pill "Khai giảng" khi không bóc được ngày.
   Design luôn có số lớn + dòng nhỏ, nhưng ACF opening_day thật phần lớn chỉ là
   lịch tuần ("Thứ 3-5: 19h30 - 21h30"). Không có số -> cho text chiếm chỗ số,
   cỡ nhỏ hơn và tự wrap để vừa ô 234x157 của design.
   ========================================================================== */

.cstat--textonly .cstat__unit {
	align-self: start;
	max-width: 150px;
	/* Biến thể "chỉ có chữ" của ô thống kê — bọc cùng biến với .cstat__unit,
	   không thì ô chỉnh không ăn cho khóa chỉ có lịch tuần. */
	font-size: var(--mt-ov-cstat_unit, .9375rem);
	font-weight: 600;
	line-height: 1.3;
}

/* ==========================================================================
   Khối video (bổ sung ngoài design — design chỉ có <img> tĩnh).
   Giữ đúng khung ảnh của design: .testimonials__video-thumb có
   width: calc(100% - 61px); margin: 0 30px 30px 31px; radius 10px.
   ========================================================================== */

.mt-video {
	display: block;
	width: calc(100% - 61px);
	margin: 0 30px 30px 31px;
	border-radius: 10px;
	overflow: hidden;
	aspect-ratio: 658 / 373;
}

/* Ảnh thumbnail bên trong đã có margin riêng -> bỏ để không cộng dồn. */
.mt-video .testimonials__video-thumb {
	width: 100%;
	height: 100%;
	margin: 0;
	border-radius: 0;
	object-fit: cover;
}

.mt-video--embed iframe,
.mt-video--embed > * {
	display: block;
	width: 100%;
	height: 100%;
	border: 0;
}

/* Facade: nút bấm để nạp iframe. */
.mt-video--facade {
	position: relative;
	padding: 0;
	border: 0;
	background: none;
	cursor: pointer;
}

.mt-video__play {
	position: absolute;
	top: 50%;
	left: 50%;
	display: grid;
	place-items: center;
	width: 72px;
	height: 72px;
	border-radius: var(--radius-pill, 999px);
	background: var(--color-accent, #d86227);
	color: #fff;
	transform: translate(-50%, -50%);
	transition: transform var(--transition, .25s ease);
}

.mt-video--facade:hover .mt-video__play,
.mt-video--facade:focus-visible .mt-video__play {
	transform: translate(-50%, -50%) scale(1.08);
}

/* ==========================================================================
   FIX partners — logo căn giữa trong ô.
   Design dùng ảnh đã crop sẵn ĐÚNG ô 142x107 (tỉ lệ 1.33) nên chỉ cần
   width:100%. Logo thật trong DB là 600x192 (tỉ lệ 3.13) -> với height:auto,
   ảnh chỉ cao ~1/3 ô và dính mép trên. Cho ô làm khung căn giữa + contain.
   ========================================================================== */

.partners__cell {
	display: grid;
	place-items: center;
	padding: 10px;
	background: var(--color-surface, #fff);
}

.partners__cell > a {
	display: grid;
	place-items: center;
	width: 100%;
	height: 100%;
}

.partners__cell img {
	width: auto;
	max-width: 100%;
	max-height: 100%;
	object-fit: contain;
}

/* Hàng cuối không đủ cột thì căn giữa thay vì dạt trái. */
.partners__row {
	justify-content: center;
}

/* ==========================================================================
   Bổ sung cho luồng mua hàng — những thứ design KHÔNG có markup.
   Đều dùng token của design để không lệch ngôn ngữ thị giác.
   ========================================================================== */

/* --- Giỏ hàng: đã bỏ ô tick chọn khóa ---
   Grid desktop của design gán grid-column tường minh cho từng ô (4/6/8) nên bỏ ô
   tick ở cột 2 KHÔNG làm lệch gì. Nhưng grid mobile là `auto 1fr` với mọi ô ở
   cột 2 ⇒ cột 1 rỗng vẫn để lại đúng một khoảng `gap`. */

@media (max-width: 767px) {
	.cart-row {
		grid-template-columns: 1fr;
	}

	.cart-row__media,
	.cart-row__info,
	.cart-row__price {
		grid-column: 1;
	}
}

.cart__panel--empty {
	padding-block: var(--spacing-2xl, 64px);
	text-align: center;
	/* Giỏ rỗng thì panel rất thấp, footer bị kéo sát lên -> chừa khoảng thở
	   trước footer (giá trị khách chốt 2026-08-20). */
	margin-bottom: 96px;
}

.cart__empty-text {
	font-size: 1.5rem;
	font-weight: 700;
	color: var(--color-navy, #0a2050);
}

.cart__empty-sub {
	margin-top: var(--spacing-sm, 8px);
	color: var(--color-text-muted, #666);
}

.cart__panel--empty .cart__checkout {
	margin-top: var(--spacing-lg, 24px);
}

/* --- Checkout: form là <form>, section là <section> ---
   form PHẢI mang class `checkout` (checkout.js của Woo bắt `form.checkout`) nên
   nó ăn luôn `padding` của `.checkout` -> cộng dồn với section.checkout thành
   padding đôi. Triệt tiêu ở đây, KHÔNG bỏ class khỏi form. */

form.woocommerce-checkout {
	padding: 0;
}

/* Chỉ có 1 cổng thanh toán -> design không hiện dòng chọn cổng (2 lựa chọn nhìn
   thấy được là 100%/50%). Ẩn thị giác nhưng GIỮ radio hoạt động vì checkout.js
   của Woo đọc `input[name="payment_method"]:checked` (xem mt_hide_single_gateway).
   Không dùng display:none — Woo/gateway có thể cần đọc giá trị và một số trình
   duyệt không gửi field trong phần tử display:none của form. */

.mt-gateway-hidden {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

/* #payment chỉ còn radio ẩn -> không được chiếm chỗ giữa .co-head và .co-deposit. */
.co-method--single-gateway .woocommerce-checkout-payment {
	margin: 0;
	padding: 0;
}

.co-method--single-gateway .wc_payment_methods {
	margin: 0;
	padding: 0;
	list-style: none;
}

/* --- Tỉ lệ trả trước: dùng lại hình thức .co-pay của design --- */

.co-deposit {
	margin: 0;
	padding: 0;
	border: 0;
}

/* --- Dấu "Áp dụng trả trước 50%" trên từng dòng khóa học (design không có) ---
   Chỉ khóa học được cọc; tài liệu / gói hội viên thu đủ 100%. Không đánh dấu thì
   giỏ hỗn hợp nhìn không ra vì sao "Thanh toán ngay" khác nửa tổng.
   .co-item là block thường (không phải grid) nên thêm một <p> là an toàn;
   .co-item { min-height: 109px } ở desktop chỉ là min nên item cao thêm được. */

.co-item__note {
	margin-top: 4px;
	font-size: .8125rem;         /* 13px — cùng cỡ với "(Trả trước 50%)" ở .co-final */
	font-weight: 600;
	line-height: 1.3;
	color: var(--color-accent, #d86227);
}

/* --- Nhãn "Thanh toán ngay (Trả trước 50%)" (design chỉ có "Thành tiền") ---
   Cả cụm 401px chỉ chứa nhãn + số tiền 26px bold, một dòng là chật, nên phần
   "(Trả trước 50%)" xuống dòng và nhỏ hơn.
   `.co-final { align-items: baseline }` của design giữ nguyên: nhãn là grid nên
   flex lấy baseline DÒNG ĐẦU -> "Thanh toán ngay" vẫn thẳng hàng với số tiền. */

.co-final__label--deposit {
	display: grid;
	line-height: 1.2;
}

.co-final__label--deposit em {
	font-size: .8125rem;
	font-style: normal;          /* <em> nhưng KHÔNG in nghiêng, design không có chữ nghiêng */
	font-weight: bold;
	color: red;
}

/* --- Trạng thái ĐANG TÍNH LẠI khi đổi 100% / 50% (design không có) ---
   Đổi tỉ lệ đi qua AJAX update_checkout nên phải cho khách thấy là đã chọn được
   và hệ thống đang tính. Woo có blockUI sẵn nhưng nó nhắm
   `.woocommerce-checkout-review-order-table` (bảng của Woo, DOM design không có)
   và CSS của Woo/Flatsome đã dequeue. */

/* Chặn bấm tiếp trong lúc chờ — KHÔNG dùng `disabled` trên radio vì
   update_checkout serialize form sau đó, input disabled sẽ không được gửi. */
.co-method.is-recalc {
	pointer-events: none;
	cursor: progress;
}

.co-method.is-recalc .co-pay__title,
.co-method.is-recalc .co-pay__desc {
	opacity: .55;
	transition: opacity .15s linear;
}

/* Lựa chọn vừa bấm vẫn sáng rõ để khách biết mình đang chọn cái nào. */
.co-method.is-recalc .co-pay__radio:checked ~ .co-pay__title {
	opacity: 1;
}

/* .co-summary chỉ position:relative từ 1024px; lớp phủ cần mọi khổ. */
.co-summary {
	position: relative;
}

.mt-recalc {
	position: absolute;
	inset: 0;
	z-index: 3;
	display: grid;
	place-items: center;
	border-radius: inherit;
	background: rgba(255, 255, 255, .72);
	backdrop-filter: blur(1px);
}

.mt-recalc__spin {
	width: 46px;
	height: 46px;
	border: 4px solid rgba(0, 61, 168, .18);
	border-top-color: var(--color-primary-dark, #003da8);
	border-radius: 50%;
	animation: mt-recalc-spin .7s linear infinite;
}

@keyframes mt-recalc-spin {
	to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
	.mt-recalc__spin {
		animation-duration: 2.4s;
	}
}

/* --- Mã giảm giá đã áp dụng (design không có, cần để bỏ mã được) --- */

.co-coupon__applied {
	display: grid;
	gap: 6px;
	margin-top: var(--spacing-sm, 8px);
	font-size: .9375rem;
}

.co-coupon__applied li {
	display: flex;
	gap: 8px;
	align-items: center;
	justify-content: space-between;
	color: var(--color-text-muted, #666);
}

.co-coupon__applied a {
	display: grid;
	place-items: center;
	width: 22px;
	height: 22px;
	border-radius: var(--radius-pill, 999px);
	background: rgba(216, 98, 39, .12);
	color: var(--color-accent, #d86227);
	text-decoration: none;
	line-height: 1;
}

/* --- Thông báo trong popup đăng nhập/đăng ký --- */

.mt-auth__msg {
	margin: 0 0 var(--spacing-sm, 8px);
	padding: 10px 14px;
	border-radius: var(--radius-sm, 8px);
	background: rgba(36, 88, 221, .08);
	font-size: .9375rem;
	color: var(--color-primary-dark, #003da8);
}

.mt-auth__msg--error {
	background: rgba(216, 98, 39, .1);
	color: var(--color-accent, #d86227);
}

.auth__submit[disabled] {
	opacity: .6;
	cursor: progress;
}

/* --- Thông báo của WooCommerce (design không có markup) --- */

.woocommerce-error,
.woocommerce-message,
.woocommerce-info {
	margin: 0 auto var(--spacing-lg, 24px);
	padding: 14px 18px;
	max-width: var(--container-max, 1500px);
	border-radius: var(--radius-sm, 8px);
	list-style: none;
	font-size: 1rem;
}

.woocommerce-error {
	background: rgba(216, 98, 39, .1);
	color: #a8400f;
}

.woocommerce-message {
	background: rgba(36, 88, 221, .08);
	color: var(--color-primary-dark, #003da8);
}

.woocommerce-info {
	background: var(--color-surface-alt, #f2f2f2);
	color: var(--color-text, #333);
}

.woocommerce-error li + li,
.woocommerce-message li + li {
	margin-top: 6px;
}

/* ==========================================================================
   Dropdown "Nhóm ngành" (bộ lọc khóa học): CUỘN trong panel.
   PSD "Rectangle 23" [214,557,666,862] = 452×305 -> design chốt panel cao 305px,
   nhưng đó là với ~6 danh mục demo. Thật có 34 danh mục product_cat ⇒ list dài
   ~1100px: ở desktop panel absolute nên trùm hết vùng kết quả, ở mobile nó đẩy
   sập cả bộ lọc. Giữ đúng chiều cao design và cho cuộn.
   (Cùng loại bẫy "design hard-code hình học theo lượng nội dung demo".)
   ========================================================================== */

.course-filter__checks {
	max-height: 260px;
	overflow-y: auto;
	overscroll-behavior: contain;    /* cuộn hết list không kéo trôi cả trang */
	scrollbar-width: thin;
	scrollbar-color: #c9ced8 transparent;
}

@media (min-width: 768px) {
	.course-filter__checks {
		max-height: 305px;           /* đúng PSD */
	}
}

.course-filter__checks::-webkit-scrollbar {
	width: 8px;
}

.course-filter__checks::-webkit-scrollbar-thumb {
	border-radius: 999px;
	background: #c9ced8;
}

.course-filter__checks::-webkit-scrollbar-thumb:hover {
	background: #9aa3b2;
}

/* ==========================================================================
   Cá nhân hóa THAY danh sách tĩnh.
   Dải nào mang class .mt-static-shelf (đặt trong option class của element ở
   builder) sẽ bị ẩn khi mt_for_you render được nội dung cá nhân hóa — người có
   hành vi thấy gợi ý theo hành vi, khách mới vẫn thấy dải tĩnh. Ẩn bằng JS
   (mt-ui.js), KHÔNG ẩn sẵn bằng CSS: JS lỗi/mất mạng thì trang vẫn đủ nội dung.
   ========================================================================== */

.mt-static-shelf--replaced {
	display: none;
}

/* Khoảng thở SAU khu cá nhân hóa (chỉ >=1024px).
   Tiêu đề "Khóa học sắp khai giảng" là position:absolute top:-122px — NỔI LÊN
   TRÊN panel của nó (sections.css:110), và design chừa chỗ bằng
   .section-featured { padding-bottom: 167px } của section đứng trước. Khi shelf
   cá nhân hóa thay dải featured thì section đứng trước là shelf course-sec
   (đáy ngắn) -> title -122px đè vào dots. Chừa lại đúng 167px như design.
   (Giữa các shelf với nhau thì .course-sec + .course-sec {margin-top:53px}
   của design tự lo — shelf nào cũng mang class course-sec.) */

@media (min-width: 1024px) {
	.mt-for-you .mt-foryou-shelf:last-child {
		margin-bottom: 167px;
	}

	/* Tiêu đề shelf nhô 32px TRÊN mép panel (course-list.css top:-38px). Dải cá nhân
	   hóa thay dải "Khóa học nổi bật" ⇒ đứng ngay dưới hero, không còn khoảng trắng
	   của section trước ⇒ chữ đè lên đáy hero (khách báo 2026-09-22). Chừa chỗ. */
	.mt-for-you .mt-foryou-shelf:first-child {
		margin-top: 72px;
	}

	/* Tiêu đề + dòng phụ ("Vì bạn vừa xem…"): nâng cả khối thêm đúng 1 dòng phụ để
	   dòng phụ nằm gọn trong notch trắng thay vì thò xuống nền xám, và nới khoảng
	   cách với dải phía trên tương ứng (53px của design + 1 dòng phụ). */
	.mt-foryou-shelf--has-sub .course-sec__title {
		top: calc(-38px - (clamp(1rem, calc(1.6 * var(--mt-vw)), 1.375rem) * 1.25 + 4px));
	}
	.course-sec + .mt-foryou-shelf--has-sub {
		margin-top: calc(53px + clamp(1rem, calc(1.6 * var(--mt-vw)), 1.375rem) * 1.25 + 4px);
	}
	.mt-for-you .mt-foryou-shelf--has-sub:first-child {
		margin-top: calc(72px + clamp(1rem, calc(1.6 * var(--mt-vw)), 1.375rem) * 1.25 + 4px);
	}
}

/* Dòng phụ của tiêu đề shelf (tên khóa mốc của "Khóa học liên quan").
   Nằm TRONG <h2> vì ở >=1024px .course-sec__title là position:absolute — thẻ
   ngoài sẽ rơi vào panel. Ép đúng 1 DÒNG: tên khóa dài bao nhiêu cũng cắt "…",
   không cho xuống dòng đẩy tiêu đề cao lên (h2 absolute không đẩy card xuống
   được, sẽ đè lên card). */

.mt-foryou-shelf__sub {
	display: block;
	/* fit-content + margin auto: khung ôm đúng bề rộng chữ rồi căn giữa. Chỉ
	   max-width như trước thì câu dài hơn khung bị trình duyệt dồn về TRÁI (text
	   tràn luôn bắt đầu từ mép trái) — đo lệch tâm +42px (PC) / +161px (mobile),
	   khách báo "căn chỉnh lại title" 2026-09-22. */
	width: fit-content;
	max-width: min(92%, 860px);
	margin: 4px auto 0;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
	font-size: var(--mt-ov-foryou_sub, clamp(1rem, calc(1.6 * var(--mt-vw)), 1.375rem));   /* ~22px trên PC, so với title 50px */
	line-height: 1.25;   /* cố định: khoảng nâng tiêu đề (bên dưới) tính theo 1 dòng này */
	font-weight: 500;
	color: var(--color-text-muted, #666);
}

/* --- Trạng thái rỗng dùng chung (kết quả lọc, mentor, blog) --- */

.mt-results__empty {
	padding-block: var(--spacing-xl, 40px);
	font-size: 1.25rem;
	color: var(--color-text-muted, #666);
	text-align: center;
}

/* ---------- Cart count badge (bổ sung ngoài design) ----------
   Design không có badge số lượng giỏ hàng. Thêm tối giản, dùng token của design. */

.mt-cart-link {
	position: relative;
}

.mt-cart-count {
	position: absolute;
	top: -2px;
	right: -2px;
	min-width: 20px;
	height: 20px;
	padding: 0 5px;
	border-radius: var(--radius-pill, 999px);
	background: var(--color-accent, #d86227);
	color: #fff;
	font-size: 12px;
	font-weight: 700;
	line-height: 20px;
	text-align: center;
}

/* ---------- Search overlay (bổ sung ngoài design) ----------
   Design chỉ có icon kính lúp, không có UI search. Xem
   template-parts/search-overlay.php để biết lý do. */

.mt-search {
	position: fixed;
	inset: 0;
	z-index: 9998;
	display: none;
	align-items: flex-start;
	justify-content: center;
	padding: 12vh 16px 16px;
	background: rgba(10, 32, 80, .55);
}

.mt-search.is-open {
	display: flex;
}

.mt-search__dialog {
	position: relative;
	width: 100%;
	max-width: 720px;
	/* padding-top phải chừa chỗ cho nút X (top:12 + cao 40 = 52px). Để 32px thì
	   nút đè lên hàng ô tìm kiếm — đo được X kết thúc ở y=220 trong khi form bắt
	   đầu ở y=200. */
	padding: 64px 24px 32px;
	border-radius: var(--radius-lg, 24px);
	background: var(--color-surface, #fff);
	box-shadow: 0 20px 60px rgba(10, 32, 80, .3);
}

.mt-search__close {
	position: absolute;
	top: 12px;
	right: 12px;
	display: grid;
	place-items: center;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 0;
	border-radius: var(--radius-pill, 999px);
	background: transparent;
	color: var(--color-navy, #0a2050);
	cursor: pointer;
}

.mt-search__form {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}

.mt-search__input {
	flex: 1 1 240px;
	min-width: 0;
	height: 56px;
	padding: 0 18px;
	border: 1px solid rgba(10, 32, 80, .18);
	border-radius: var(--radius-pill, 999px);
	font: inherit;
	color: var(--color-text, #333);
}

.mt-search__input:focus-visible {
	outline: 2px solid var(--color-primary, #2458dd);
	outline-offset: 2px;
}

.mt-search__submit {
	flex: 0 0 auto;
}

/* Visibility — giá trị từ commons/visibility.php của builder.
   Ngữ nghĩa Flatsome: small = mobile, medium = tablet trở xuống. */
.hidden { display: none !important; }

@media (max-width: 767px) {
	.hide-for-small { display: none !important; }
}

@media (min-width: 768px) {
	.show-for-small { display: none !important; }
}

@media (max-width: 1023px) {
	.hide-for-medium { display: none !important; }
}

@media (min-width: 1024px) {
	.show-for-medium { display: none !important; }
}

/* ==========================================================================
   Mức giá THỨ 3 — "Giá dành riêng cho Member" (Sheet khách 2026-08-05).
   Design chỉ có 2 mức (giá bán + giá gạch) nên đây là phần bổ sung; dùng token
   của design để không lệch ngôn ngữ thị giác.

   ⚠️ Bên trong .cprice__price / .course-card__pricing, design style theo TÊN THẺ
   (`span` = giá lớn xanh, `s` = giá gạch xám). Khối này phải tự chốt font-size/
   color cho <em> và span của wc_price(), nếu không sẽ ăn rule đó và chữ nhãn
   phình thành 60px — cùng loại bẫy "thẻ lồng ăn nhầm rule theo tên thẻ".
   ========================================================================== */

.mt-member-price {
	display: flex;
	align-items: baseline;
	gap: 6px;
	flex-wrap: wrap;
	margin-top: 6px;
	font-size: 1rem;
	font-weight: 600;
	line-height: 1.3;
	text-decoration: none;
}

.mt-member-price em {
	font-style: normal;
	font-size: .9375rem;
	font-weight: 500;
	color: var(--color-text-muted, #666);
}

/* Trung hòa thẻ của wc_price() trong khối này (xem khối TRUNG HÒA ở đầu file). */
.mt-member-price .woocommerce-Price-amount,
.mt-member-price bdi,
.mt-member-price .woocommerce-Price-currencySymbol {
	font: inherit;
	color: inherit;
	text-decoration: inherit;
}

/* Đang là hội viên: giá thật của mình -> màu tích cực. */
.mt-member-price--active {
	color: #1f8a4c;
}

/* Chưa là hội viên: là LỜI MỜI mua gói -> màu accent + gạch chân khi hover. */
.mt-member-price--promo {
	color: var(--color-accent, #d86227);
}

.mt-member-price--promo:hover em,
.mt-member-price--promo:hover {
	text-decoration: underline;
}

/* Ghi chú "(−10% hội viên)" ở dòng giá trong giỏ/thanh toán. */
.mt-member-off {
	display: inline-block;
	margin-left: 6px;
	font-size: .8125rem;
	font-weight: 600;
	color: #1f8a4c;
}

/* ==========================================================================
   Tài khoản » Tổng quan — "Lớp học gần nhất"

   Sao bị TRÀN khỏi nền pill: .ov-class__meta là flex, pill sao cần 166px
   (21×2 padding + 5×16 sao + 4×11 gap) nhưng `opening_day` thật dài hơn demo
   rất nhiều ("Tháng 8 - Thứ 3-5-7: 19h00 - 21h00" vs "20/08/2026") nên flex bóp
   pill xuống 136px — nền pill co lại còn sao thì không, thành ra sao đè ra ngoài.
   Cùng loại bẫy "design hard-code hình học theo lượng nội dung demo".
   ========================================================================== */

.ov-class__stars {
	flex-shrink: 0;   /* pill giữ đủ chỗ cho 5 sao, không bị chữ dài bóp */
}

.ov-class__info {
	min-width: 0;         /* cho phép co lại + xuống dòng thay vì đẩy pill */
	overflow-wrap: anywhere;
}

/* Dải "Lớp học gần nhất" cuộn ngang bằng nút mũi tên (mt-ui.js).
   Nút bị vô hiệu khi đã ở đầu/cuối để không bấm vào hư không. */
.ov__arrow[disabled] {
	opacity: .35;
	cursor: default;
}

/* Tên lớp trong "Lớp học gần nhất": chốt bề rộng theo PSD (card 453 − padding 60
   − chừa lề) để tên khóa thật (dài hơn demo) xuống dòng thay vì kéo giãn hàng. */
.ov-class__name {
	max-width: 370px;
}

/* Đã sở hữu khóa học: khối thay cho nút mua (inc/purchase-state.php). */
.cprice__actions--owned {
	display: grid;
	gap: 8px;
}

.cprice__owned-note {
	font-size: .9375rem;
	color: var(--color-text-muted, #666);
	text-align: center;
}

/* Có đơn CHƯA trả tiền: icon giỏ trên thẻ flame là ngõ cụt — add-to-cart bị chặn
   (purchase-state.php) mà theme không in notice của Woo, nên bấm vào chỉ thấy
   trang tải lại. Lối đi đúng là nút "Thanh toán/Xem đơn hàng" ngay bên dưới. */
.cprice--owned .course-card__cart {
	display: none;
}

/* Sao chưa đạt: luôn vẽ đủ 5 ô (khớp design) nhưng làm mờ ô chưa đạt, để khóa
   4 sao không trông như thang 4 sao và nền pill không bị co lại. */
.mt-star--off {
	opacity: .26;
}

/* ==========================================================================
   Khu vực tài khoản: footer KHÔNG được kéo âm.

   .footer có `margin: -3.5vw 10px 10px` ở >=1024px (footer.css:15) để chui vào
   KHE NOTCH ở đáy form tư vấn trang chủ. Dashboard là panel bo góc kín, không có
   khe nào — footer bị kéo lên 3.5vw (~56px ở 1600px) và nằm dưới panel nên trông
   như mất footer. Trả lại margin dương, thêm khoảng thở giữa panel và footer.

   Design 9 trang dashboard KHÔNG có footer, nhưng bỏ footer ở trang tài khoản là
   mất lối vào chính sách/điều khoản/hotline -> giữ footer, chỉ sửa khoảng cách.
   ========================================================================== */

@media (min-width: 1024px) {
	body:has(.dash) .footer {
		margin-top: 18px;   /* bằng padding của .dash để hai khối cùng nhịp */
	}
}

/* Chân card "Khóa học của tôi" (chỉ PC): dải trạng thái + nút "Vào học ngay" đều
   tuck LÊN 15px để dính vào đáy card, cao 50px như PSD. */
@media (min-width: 1024px) {
	.mycourse__status {
		width: 267px;
		height: 50px;
		margin-top: -15px;
		margin-left: 8px;
		padding-top: 15px;
	}

	.mycourse__cta {
		gap: 10px;
		justify-content: center;
		height: 50px;
		margin-top: -15px;
		margin-right: 10px;
		padding-top: 12px;
		background: #003da8;
		font-weight: 700;
		text-transform: uppercase;
	}
}

/* Trang khóa học khi học viên ĐÃ SỞ HỮU: bỏ hẳn cột giá (430px) nên grid phải co
   về 2 cột, nếu không sẽ hở một khoảng 430px và nội dung lệch sang trái.
   (course-detail.css:214 — `grid-template-columns: 300px 1fr 430px`) */
@media (min-width: 1024px) {
	.cdetail-intro__grid--no-price {
		grid-template-columns: 300px 1fr;
	}
}

/* ==========================================================================
   BẢNG trong nội dung soạn thảo của KHÓA HỌC.

   ACF của khóa (target_learners, course_content…) là HTML tự do và thực tế có
   bảng — đo được khóa #2512 có 7 <table>. Design không có mẫu bảng nào cho trang
   khóa học và post-content.css thì bám hết vào `.post__content` (không khớp), nên
   bảng ở đây hoàn toàn không có style: ô dính sát nhau, <p> sát mép <table>.

   Style theo token của design để không lệch ngôn ngữ thị giác.
   ========================================================================== */

.cintro-body table,
.cacc__body table {
	width: 100%;
	margin: 20px 0;
	border-collapse: collapse;
	font-size: 1rem;
	/* Bảng nhiều cột trên mobile phải cuộn được, không được kéo giãn cả trang. */
	display: block;
	overflow-x: auto;
	max-width: 100%;
}

@media (min-width: 768px) {
	.cintro-body table,
	.cacc__body table {
		display: table;
	}
}

.cintro-body th,
.cintro-body td,
.cacc__body th,
.cacc__body td {
	padding: 12px 16px;
	border: 1px solid #e0e0e0;
	text-align: left;
	vertical-align: top;
	line-height: 1.5;
}

.cintro-body th,
.cacc__body th {
	background: #fef7e7;          /* cream của design */
	font-weight: 600;
	color: var(--color-text, #333);
}

.cintro-body tbody tr:nth-child(even) td,
.cacc__body tbody tr:nth-child(even) td {
	background: #fafafa;
}

/* <p> đứng ngay trước/sau bảng: design không chừa khoảng nào -> chữ dính mép bảng. */
.cintro-body p + table,
.cacc__body p + table,
.cintro-body table + p,
.cacc__body table + p {
	margin-top: 20px;
}

/* ==========================================================================
   Syllabus bị KHÓA (khách / tài khoản free — sheet "Phân loại User").
   Hàng buổi học chỉ còn tiêu đề + ổ khóa, không bấm được; nội dung chi tiết
   KHÔNG render ra HTML (khóa thật, không phải giấu bằng CSS).
   ========================================================================== */

/* KHÔNG đổi `display` ở đây. `.cacc__head` là grid `124px 1fr auto` (design) và
   grid chạy y hệt nhau cho <button> lẫn <div> — trước đây đặt display:flex làm
   pill "Buổi N" co theo chữ (đo được 57px thay vì 124px của cột grid), rồi
   `overflow:hidden` của hàng cắt cụt chữ. Chỉ cần bỏ tương tác của nút. */
.cacc--locked .cacc__head {
	cursor: default;
	width: 100%;
}

.cacc--locked .cacc__title {
	color: var(--color-text-muted, #666);
}

.cacc__lock {
	margin-left: auto;
	flex-shrink: 0;
	color: #b3b3b3;
}

.cacc-gate {
	margin-top: 18px;
	padding: 24px 28px;
	border-radius: 20px;
	background: #fef7e7;        /* cream của design */
	text-align: center;
}

.cacc-gate__text {
	font-size: 1.0625rem;
	color: var(--color-text, #333);
}

.cacc-gate__actions {
	display: flex;
	gap: 12px;
	justify-content: center;
	flex-wrap: wrap;
	margin-top: 14px;
}

/* Nút "Thanh toán phần còn lại" (khóa mới cọc 50% — không được vào học):
   màu accent để phân biệt với nút vào học xanh navy. */
@media (min-width: 1024px) {
	.mycourse__cta--pay {
		background: var(--color-accent, #d86227);
	}
}

.sched__btn--pay,
.cprice__buy--pay {
	background: var(--color-accent, #d86227);
}

/* ==========================================================================
   Thẻ tài liệu: CAO BẰNG NHAU, nút luôn ở đáy.

   .docs__grid là grid nên <li> đã stretch, nhưng .doc-card không lấp đầy <li>
   và phần meta cao khác nhau (tài liệu thiếu định dạng/dung lượng thì ít dòng
   hơn) -> đáy thẻ và hàng nút so le. Cùng loại đã sửa cho course-card/mentor-card.
   ========================================================================== */

.docs__grid {
	grid-auto-rows: 1fr;          /* grid tính chiều cao TỪNG HÀNG độc lập */
}

.docs__grid > .doc-card,
.docs__grid > li {
	display: flex;
	flex-direction: column;
	height: 100%;
}

/* Đẩy cụm nút xuống đáy — phần trên co giãn, nút luôn thẳng hàng giữa các thẻ. */
.doc-card__actions {
	margin-top: auto;
	padding-top: 18px;            /* giữ khoảng thở của design khi bị đẩy xuống */
}

/* KHÔNG giãn nút "Chi tiết" khi nó đứng một mình (tài liệu miễn phí / đã mua).
   Design cố định .doc-card__more = 135px; cho :only-child width:100% làm nút đổi
   bề ngang giữa các thẻ cùng một lưới -> nhìn như hai loại nút khác nhau.
   Nút giữ nguyên 135px, thiếu nút "Mua" thì chỉ là hàng ngắn hơn. */

/* Tên tài liệu dài ngắn khác nhau làm khối meta lệch -> clamp 2 dòng như design
   (design cũng hiển thị tiêu đề bị cắt). */
.doc-card__title {
	overflow: hidden;
}

.doc-card__title a {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	line-clamp: 2;
	overflow: hidden;
}

/* Ghi chú "Bạn đã mua tài liệu này" trong popup. */
.doc-modal__owned {
	display: block;
	margin-top: 10px;
	font-size: .9375rem;
	font-weight: 600;
	color: #1f8a4c;
}

/* ==========================================================================
   Popup tài liệu: [hidden] PHẢI thắng.

   docs.css:131 đặt `.doc-modal { display: flex }` — rule của tác giả luôn thắng
   `display:none` mà trình duyệt gán cho [hidden], nên popup không bao giờ ẩn:
   bấm nút đóng thì `hidden = true` được set nhưng người dùng KHÔNG thấy gì thay
   đổi. Đây là bẫy kinh điển của [hidden] + display trong CSS component.
   ========================================================================== */

.doc-modal[hidden] {
	display: none;
}

/* Màn chờ khi bấm "Chi tiết" — nội dung popup nạp bằng AJAX nên có độ trễ; không
   báo gì thì người dùng bấm lại nhiều lần. */

.mt-doc-loading {
	position: fixed;
	inset: 0;
	z-index: 110;                 /* trên .doc-modal (100) */
	display: grid;
	place-items: center;
	background: rgba(0, 0, 0, .45);
}

.mt-doc-loading__spin {
	width: 52px;
	height: 52px;
	border: 4px solid rgba(255, 255, 255, .35);
	border-top-color: #fff;
	border-radius: 50%;
	animation: mt-recalc-spin .7s linear infinite;   /* dùng lại keyframes đã có */
}

@media (prefers-reduced-motion: reduce) {
	.mt-doc-loading__spin { animation-duration: 2.4s; }
}

/* Nút đang chờ: chặn bấm lại + cho thấy đang xử lý. */
.doc-card__more.is-loading,
.doc-card__title a.is-loading {
	pointer-events: none;
	opacity: .6;
}

/* ==========================================================================
   BẢNG LỊCH KHAI GIẢNG — khe hở giữa các cột + tỉ lệ cột theo dữ liệu THẬT
   --------------------------------------------------------------------------
   Hai lỗi của design chỉ lộ ra khi đổ dữ liệu thật:

   1) `.klg__table td { padding: 18px 0 }` (schedule-list.css:86) là selector
      class+tag nên specificity CAO HƠN `.klg__name { padding-right: 56px }`
      -> mọi ô có padding-right = 0. `padding-left: 32px` sống sót chỉ vì có
      !important. Đo được 3 cặp cột dính nhau: Khóa học->Khai giảng 8px,
      Lịch học->Mentor 1px, Mentor->Hình thức 5px.

   2) Bề rộng cột (33.5% / 9.8% / 7.9%…) tính theo nội dung DEMO: tên khóa có
      <br> thủ công, mentor luôn là "Trần Văn An", lịch học luôn "T2-T4-T6".
      Thật thì tên dài gấp đôi, mentor "Vũ Trương Minh Nhật", lịch học
      "Tháng 6/2026 - Thứ 3 - 4 - 5 : 20h00 - 22h00". Cột tên thừa chỗ trong
      khi 3 cột giữa thiếu -> chia lại, tổng vẫn 100%.
   ========================================================================== */

.klg__table thead th,
.klg__table tbody td {
	padding-right: 20px;          /* khe hở chung; ô nào cần riêng thì đè bên dưới */
}

/* Cột tên: giữ padding-left 32px của design, thêm khoảng thở trước cột ngày. */
.klg__table td.klg__name,
.klg__table th:first-child {
	padding-right: 28px;
}

/* Tên khóa/mentor có thể chứa từ dài (URL, mã khóa) -> cho phép ngắt trong từ,
   nếu không table-layout:fixed sẽ để chữ tràn đè sang cột bên cạnh. */
.klg__table td.klg__name,
.klg__table td.klg__mentor {
	overflow-wrap: anywhere;
}

/* Nút "Chi tiết" căn phải — design đã đặt padding-right: 38px !important. */
.klg__table td.klg__action,
.klg__table th:last-child {
	padding-right: 38px;
}

/* Chia lại bề ngang: bớt của cột tên, bù cho Lịch học + Mentor. Tổng = 100%. */
.klg__table thead th:nth-child(1) { width: 28%; }    /* tên vẫn đủ 2 dòng */
.klg__table thead th:nth-child(2) { width: 10%; }    /* "Đang cập nhật" 1 dòng */
.klg__table thead th:nth-child(3) { width: 14%; }    /* lịch học là chuỗi dài nhất */
.klg__table thead th:nth-child(4) { width: 11%; }    /* họ tên VN đầy đủ */
.klg__table thead th:nth-child(5) { width: 8%; }
.klg__table thead th:nth-child(6) { width: 9.5%; }
.klg__table thead th:nth-child(7) { width: 9%; }
.klg__table thead th:nth-child(8) { width: 10.5%; }

/* Bộ lọc: số cột theo số ô lọc THỰC SỰ in ra (--mt-filter-cols do template đặt).
   schedule-list.css khai cứng `repeat(5, 1fr) 163px`, nhưng ô không có dữ liệu bị
   ẩn (vd "Tháng khai giảng" khi chưa có tháng nào) ⇒ nút "Lọc kết quả" rơi vào
   track 1fr thứ 5, track 163px cuối trống ⇒ cả hàng lệch trái ~85px so với
   container (đo ở 1536: nội dung hết 1319 trong khung 1494). */
@media (min-width: 1024px) {
	.sched-filter {
		grid-template-columns: repeat(var(--mt-filter-cols, 5), minmax(0, 1fr)) 163px;
	}
}

/* Gợi ý cuộn ngang — chỉ hiện khi bảng rộng hơn màn hình (khối < 1024 bên dưới). */
.klg__hint { display: none; }

/* --------------------------------------------------------------------------
   MOBILE / TABLET (< 1024): bảng CUỘN NGANG thay vì bị ép.
   `min-width: min(1483px, 100%)` của schedule-list.css chốt bảng = 100% panel,
   nên ở 390px bảng chỉ còn 338px, 8 cột 27..95px: chữ vỡ từng ký tự, tiêu đề
   (nowrap) đè lên nhau, nút "Chi tiết" 133px cứng bị cắt — panel có
   `overflow-x: auto` nhưng không có gì để cuộn.
   ⇒ Dưới 1024 cho bảng bề rộng CỐ ĐỊNH theo px (tổng 1040) để panel cuộn, cỡ
   chữ hạ về mức đọc được trên mobile (PSD 24/18px là cho canvas 1800).
   Từ 1024 trở lên giữ nguyên cơ chế @container ở schedule-list.css.
   -------------------------------------------------------------------------- */
@media (max-width: 1023px) {
	.klg__hint {
		display: block;
		margin: 16px 4px -14px;
		font-size: .875rem;
		color: var(--color-text-muted, #666);
		text-align: right;
	}

	.klg__panel {
		overscroll-behavior-x: contain;   /* vuốt hết bảng không kéo theo lịch sử trình duyệt */
	}

	.klg__table {
		width: 1040px;
		min-width: 1040px;
	}

	/* px, tổng = 1040. Mỗi cột đủ cho chuỗi dài nhất của nó ở cỡ chữ bên dưới:
	   "Tháng 10/2026", "12.990.000₫" (bold), "Trạng thái" (tiêu đề nowrap). */
	.klg__table thead th:nth-child(1) { width: 220px; }
	.klg__table thead th:nth-child(2) { width: 110px; }
	.klg__table thead th:nth-child(3) { width: 160px; }
	.klg__table thead th:nth-child(4) { width: 130px; }
	.klg__table thead th:nth-child(5) { width: 96px; }
	.klg__table thead th:nth-child(6) { width: 110px; }
	.klg__table thead th:nth-child(7) { width: 100px; }
	.klg__table thead th:nth-child(8) { width: 114px; }

	.klg__table thead th {
		padding-block: 14px;
		padding-right: 14px;
		font-size: .9375rem;
	}

	.klg__table tbody td {
		padding-block: 12px;
		padding-right: 14px;
		font-size: .875rem;
	}

	/* schedule-list.css đặt hai padding này bằng !important. */
	.klg__table th:first-child,
	.klg__table td.klg__name {
		padding-left: 20px !important;
		padding-right: 20px;
	}

	.klg__table th:last-child,
	.klg__table td.klg__action {
		padding-right: 16px !important;
	}

	.klg__table .klg__btn {
		width: auto;
		height: 36px;
		padding-inline: 14px;
		font-size: .8125rem;
	}
}

/* ==========================================================================
   GIỎ HÀNG — thông số tài liệu dưới tiêu đề (Ngôn ngữ / Định dạng / …)
   --------------------------------------------------------------------------
   Tài liệu không có mentor nên chỗ dưới tiêu đề vốn trống hẳn. Dùng lại cách
   trình bày của .doc-modal__specs (nhãn + giá trị, có vạch ngăn) nhưng thu gọn
   lại: hàng 50px + vạch 3px của popup là geometry cho khung ảnh bên trái, đặt
   vào dòng giỏ hàng sẽ đội chiều cao lên gần gấp đôi.
   ========================================================================== */

.cart-row__specs {
	margin: 12px 0 0;
	max-width: 420px;
}

.cart-row__specs div {
	display: flex;
	align-items: baseline;
	gap: 8px;
	padding: 7px 0;
	border-bottom: 1px solid #e3e3e3;
}

.cart-row__specs div:last-child {
	border-bottom: 0;
}

/* dt/dd của <dl> có margin mặc định của trình duyệt -> phải xoá, nếu không
   giá trị bị thụt vào 40px và lệch hẳn khỏi nhãn. */
.cart-row__specs dt,
.cart-row__specs dd {
	margin: 0;
	font-size: 1rem;
	line-height: 1.35;
}

.cart-row__specs dt {
	flex-shrink: 0;               /* "Dung lượng:" không được xuống dòng giữa chừng */
	color: var(--color-text-light, #666);
}

.cart-row__specs dd {
	color: #333;
}

/* ==========================================================================
   FOCUS TRONG CÁC THANH TÌM KIẾM DẠNG PILL
   --------------------------------------------------------------------------
   global.css:34 đặt `:focus-visible { outline: 3px solid; outline-offset: 2px }`
   — hợp lý cho nút/link rời, nhưng các ô tìm kiếm nằm LỌT trong một pill trắng
   chỉ có padding 6px: vòng focus vẽ lấn 5px ra ngoài ô nên đè lên mép pill và
   sát vào nút "Tìm kiếm" bên cạnh, nhìn như vỡ layout.
   Vẽ vòng focus vào PHÍA TRONG ô — vẫn thấy rõ, không đụng gì xung quanh.
   ========================================================================== */

.mentor-search__input:focus-visible,
.mentor-search__select select:focus-visible,
.mt-search__input:focus-visible {
	outline: 2px solid var(--color-primary, #2458dd);
	outline-offset: -2px;
}

/* ==========================================================================
   TRANG KẾT QUẢ TÌM KIẾM (search.php) — chia mục theo loại nội dung
   --------------------------------------------------------------------------
   Không có trong bộ design gốc (design không vẽ trang search), nên dựng bằng
   token + component sẵn có: card dùng lại doc-card/course-card/mentor-card/
   blog-card, lưới dùng lại .docs__grid / .results__grid / .mentor-grid.
   ========================================================================== */

.srch {
	padding-block: 48px 72px;
}

/* --- thanh tìm kiếm lại --- */
.srch-bar {
	display: flex;
	gap: 8px;
	max-width: 860px;
	margin: 0 auto 28px;
	padding: 6px;
	border-radius: var(--radius-pill, 999px);
	background: var(--color-surface, #fff);
	box-shadow: 0 0 30px rgba(0, 0, 0, .06);
}

.srch-bar__input {
	flex: 1 1 auto;
	min-width: 0;                 /* flex item không tự co -> input đẩy nút ra ngoài */
	height: 60px;
	padding: 0 24px;
	border: 0;
	border-radius: var(--radius-pill, 999px);
	background: transparent;
	font: inherit;
	font-size: 1.125rem;
	color: var(--color-text, #333);
}

.srch-bar__input::placeholder { color: #999; }

/* Vòng focus vẽ vào trong — cùng lý do với .mentor-search__input ở trên. */
.srch-bar__input:focus-visible {
	outline: 2px solid var(--color-primary, #2458dd);
	outline-offset: -2px;
}

.srch-bar__btn {
	flex: 0 0 auto;
	display: grid;
	place-items: center;
	min-width: 150px;
	height: 60px;
	padding: 0 28px;
	border: 0;
	border-radius: var(--radius-pill, 999px);
	background: var(--color-primary-dark, #003da8);
	color: #fff;
	font: inherit;
	font-size: 1.125rem;
	font-weight: 600;
	cursor: pointer;
}

.srch-sum {
	margin-bottom: 18px;
	text-align: center;
	font-size: 1.125rem;
	color: var(--color-text-light, #666);
}

/* --- tab loại nội dung --- */
.srch-tabs {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 10px;
	margin-bottom: 40px;
}

.srch-tab {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 10px 22px;
	border-radius: var(--radius-pill, 999px);
	background: #fff;
	box-shadow: 0 0 20px rgba(0, 0, 0, .06);
	font-size: 1.0625rem;
	font-weight: 600;
	color: var(--color-text, #333);
	text-decoration: none;
}

.srch-tab__n {
	display: inline-grid;
	place-items: center;
	min-width: 26px;
	height: 24px;
	padding: 0 7px;
	border-radius: var(--radius-pill, 999px);
	background: #eef2fb;
	font-size: .875rem;
	font-weight: 700;
	color: var(--color-primary-dark, #003da8);
}

.srch-tab.is-active {
	background: var(--color-primary-dark, #003da8);
	color: #fff;
}

.srch-tab.is-active .srch-tab__n {
	background: rgba(255, 255, 255, .22);
	color: #fff;
}

/* Loại không có kết quả: vẫn bấm được (để người dùng thấy là đã tìm) nhưng mờ. */
.srch-tab.is-empty {
	opacity: .5;
}

/* --- từng mục --- */
.srch-group + .srch-group {
	margin-top: 56px;
}

.srch-group__head {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 22px;
}

.srch-group__title {
	margin: 0;
	font-size: 1.75rem;
	font-weight: 700;
	color: var(--color-primary-dark, #003da8);
}

.srch-group__n {
	font-weight: 500;
	color: var(--color-text-light, #666);
}

.srch-group__more {
	font-size: 1rem;
	font-weight: 600;
	color: var(--color-primary, #2458dd);
}

/* Lưới bài viết: .blog-card có aspect-ratio 1073/249 + nền SVG ở >=1024, khổ
   gốc của design là cột nội dung 1073px. Giới hạn đúng khổ đó để notch không
   bị kéo méo khi container rộng 1500px. */
.srch-blog {
	display: grid;
	gap: 27px;
	max-width: 1073px;
	list-style: none;
	padding: 0;
	margin: 0;
}

/* .results__grid / .docs__grid / .mentor-grid đã có sẵn; chỉ cần bỏ bullet khi
   dùng ngoài ngữ cảnh gốc. */
.srch-group > ul {
	list-style: none;
}

/* Nút "Xem thêm" của từng mục kết quả tìm kiếm. */
.srch-more {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 14px;
	margin-top: 28px;
}

.srch-more__btn {
	padding: 12px 34px;
	border: 1px solid var(--color-primary-dark, #003da8);
	border-radius: var(--radius-pill, 999px);
	background: #fff;
	font: inherit;
	font-size: 1.0625rem;
	font-weight: 600;
	color: var(--color-primary-dark, #003da8);
	cursor: pointer;
}

.srch-more__btn:hover {
	background: var(--color-primary-dark, #003da8);
	color: #fff;
}

.srch-more__btn[disabled] {
	opacity: .6;
	cursor: default;
}

.srch-more__count {
	font-size: .9375rem;
	color: var(--color-text-light, #666);
}

/* ==========================================================================
   TRANG GIỚI THIỆU — khối "Cam kết"
   --------------------------------------------------------------------------
   .commit__card ở >=1024 dùng ảnh nền commit-card.png: card có TAB nhô ở góc
   trái-trên, và tab đó được PSD vẽ vừa đúng tiêu đề HAI dòng (design viết tay
   <br> trong <h3>). Nội dung thật do admin nhập không có <br> — tiêu đề 1 dòng
   thì đoạn mô tả trèo lên y=71 thay vì y=98, tức nằm đè vào vùng tab.
   Chừa sẵn chiều cao 2 dòng cho tiêu đề: dài hay ngắn thì mô tả vẫn bắt đầu
   đúng chỗ, không phụ thuộc người nhập có xuống dòng hay không.
   ========================================================================== */

@media (min-width: 1024px) {
	.commit__heading {
		min-height: 54px;      /* = 2 dòng 22px; đo: 1 dòng 27px, design cần 54 */
	}
}

/* Lưới mentor ở trang tìm kiếm: design đặt `margin-inline: -68px` cho
   .mentor-grid vì ở trang Mentor nó nằm trong panel có padding 68px (kéo card
   tràn ra sát mép panel). Trong trang search không có panel đó nên âm lề làm
   lưới thò ra ngoài container. Trả về 0 — chỉ trong phạm vi trang search. */
.srch-group .mentor-grid {
	margin-inline: 0;
}

/* ==========================================================================
   Ô "Ghi nhớ mật khẩu" — trạng thái ĐÃ TICK
   --------------------------------------------------------------------------
   auth.css:232 đặt `appearance: none` để vẽ ô vuông 26px theo PSD nhưng không
   khai style cho :checked. Hệ quả: bấm vào vẫn tick được (form vẫn gửi
   rememberme) nhưng ô luôn trông trống -> người dùng tưởng nút hỏng.
   Dấu tick vẽ bằng SVG data URI ngay trong CSS, không thêm file ảnh.
   ========================================================================== */

.auth__remember input:checked {
	border-color: var(--color-primary-dark, #003da8);
	background-color: var(--color-primary-dark, #003da8);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5 9.5 18 20 6.5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: center;
	background-size: 16px 16px;
}

.auth__remember input {
	cursor: pointer;
	transition: background-color .15s, border-color .15s;
}

.auth__remember input:focus-visible {
	outline: 2px solid var(--color-primary, #2458dd);
	outline-offset: 2px;
}

/* Căn lại menu chính 1px cho khớp baseline của logo ở desktop (khách chốt). */
@media (min-width: 1024px) {
	.navbar__menu {
		margin-top: -1px;
	}
}

/* ==========================================================================
   BẢNG SO SÁNH GÓI HỘI VIÊN — hàng nút "Mua gói" (design không có hàng này).
   Hàng nằm cuối <tbody> nên rule `tbody tr:last-child .mem-td--* { border-radius
   0 0 24px 24px }` của design tự bo đáy thẻ cột cho nó, không cần bù.
   ========================================================================== */

/* Design đặt `.mem-table tbody th, .mem-table tbody td { padding-block: 0 }`
   (0,1,2) từ 1024px lên -> phải thắng bằng selector 2 class + 1 type. */
.mem-table tbody .mem-td--cta {
	padding-block: 22px;
}

.mem-buy {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	min-width: 170px;
	padding: 13px 24px;
	border-radius: var(--radius-pill, 999px);
	background: var(--color-primary-dark, #003da8);
	color: #fff;
	font-size: 1.0625rem;
	font-weight: 700;
	line-height: 1.2;
	white-space: nowrap;
	transition: filter var(--transition, .25s ease);
}

.mem-buy:hover,
.mem-buy:focus-visible {
	filter: brightness(1.12);
	color: #fff;
}

/* Màu nút = màu pill tiêu đề của chính cột đó (membership.css:168-170). */
.mem-buy--member { background: #f2b121; }
.mem-buy--plus   { background: #d96228; }
.mem-buy--pro    { background: #003da8; }

/* `.mem-table tbody svg { width:25px; height:25px; margin-inline:auto }` của
   design là để canh giữa dấu tick — nó sẽ nuốt icon giỏ hàng trong nút, phải
   khai lại với selector mạnh hơn (0,2,2 > 0,1,2). */
.mem-table tbody .mem-buy svg {
	width: 20px;
	height: 20px;
	margin: 0;
	flex-shrink: 0;
}

/* ==========================================================================
   Panel hồ sơ mentor — ảnh nền riêng cho từng mentor (field mt_mentor_bg).
   Design chỉ có MỘT ảnh bake sẵn dùng chung (mentor-profile.css:124-133), đặt
   bằng shorthand `background: url(...) top center / 100% 100% no-repeat`.
   Ở đây chỉ thay background-image để giữ nguyên position/size/repeat đó.
   Chỉ áp dụng từ 1024px lên vì dưới ngưỡng đó design cố tình KHÔNG dùng ảnh
   (panel là thẻ xanh đặc, chữ nằm trong luồng — đè ảnh vào sẽ khó đọc).
   ========================================================================== */

@media (min-width: 1024px) {
	.mprofile__panel.mprofile__panel--custom {
		background-image: var(--mt-mentor-bg);
	}
}

/* ==========================================================================
   CẢM NHẬN HỌC VIÊN — cho danh sách cuộn được.
   Design PSD chỉ vẽ đúng 3 card và một RÃNH LÕM dọc bên phải ("Rectangle 16"
   15x631, làm bằng .testimonials__main::before) — rãnh đó chỉ để trang trí.
   Ở đây biến nó thành thanh cuộn thật: <ul> cuộn dọc trong đúng chiều cao 3
   card, con trượt chạy trong rãnh (JS dùng lại cơ chế scrollbar của bio mentor,
   mt-ui.js §6). Ít hơn 4 cảm nhận thì không tràn -> JS tự ẩn con trượt, nhìn y
   như thiết kế gốc.
   ========================================================================== */

.testimonials__scroll {
	display: none;   /* dưới 1024 design không có rãnh -> không có thanh cuộn */
}

@media (min-width: 1024px) {
	.testimonials__main--scroll > .testimonials__list {
		/* PSD "Rectangle 16" cao 631 = đúng 3 card (3×199 + 2×17 gap) */
		max-height: 631px;
		overflow-y: auto;
		overscroll-behavior: contain;
		scrollbar-width: none;              /* ẩn thanh cuộn hệ thống, dùng rãnh PSD */
	}

	.testimonials__main--scroll > .testimonials__list::-webkit-scrollbar {
		display: none;
	}

	/* Rãnh lõm của PSD giờ LÀ thanh cuộn: .testimonials__scroll mang y nguyên
	   hình thức của .testimonials__main::before (testimonials.css:203-214) và
	   ::before được tắt đi — một phần tử vừa là rãnh vừa là vùng bắt chuột,
	   không phải giữ hai chỗ cùng một bộ toạ độ. */
	.testimonials__main::before,
	.testimonials__main::after {
		content: none;
	}

	.testimonials__scroll {
		display: block;
		position: absolute;
		top: 0;
		left: calc(100% + 46px);
		width: 15px;
		height: 631px;
		border-radius: 8px;
		background: transparent;
		box-shadow: inset 2px 3px 8px rgba(0, 0, 0, .6);
		cursor: pointer;
	}

	/* CON TRƯỢT = logo M của PSD ("Layer 10" 46x52, testimonials.css:217-226):
	   ::after bị tắt ở trên, hình thức của nó chuyển sang đây và giờ CHẠY theo
	   vị trí cuộn. Toạ độ ngang quy về track: logo left = 100% + 31px, track
	   left = 100% + 46px  =>  -15px.
	   `top: 65px` là vị trí PSD; JS ghi đè inline khi cuộn được và XOÁ inline
	   khi không còn gì để cuộn, nên khối 3 cảm nhận nhìn y hệt thiết kế gốc. */
	.testimonials__thumb {
		position: absolute;
		top: 65px;
		left: -15px;
		width: 46px;
		height: 52px;
		background: url('../../mentora/assets/images/testi-logo.png') center / contain no-repeat;
		touch-action: none;
	}

	/* Chỉ khi cuộn được thì logo mới là tay kéo. */
	.testimonials__main--scroll .testimonials__thumb { cursor: grab; }
	.testimonials__main--scroll .testimonials__thumb:active { cursor: grabbing; }

	/* Bàn phím: <ul> có tabindex khi cuộn được -> phải thấy được viền focus. */
	.testimonials__main--scroll > .testimonials__list:focus-visible {
		outline: 2px solid #f4b11c;
		outline-offset: 4px;
	}
}

/* ==========================================================================
   HỘI VIÊN — nút "Gia hạn hội viên".
   Hình thức nút đã có sẵn trong design (.mem__renew, member-page.css:15) nhưng
   template chưa bao giờ in nút; chỗ này chỉ bù hai thứ design không có:
   trạng thái hover và dòng cảnh báo sắp hết hạn (trước đây dùng nhầm class
   .mem__renew nên nó ăn hình thức của NÚT).
   ========================================================================== */

.mem__renew {
	transition: filter var(--transition, .25s ease);
}

.mem__renew:hover,
.mem__renew:focus-visible {
	filter: brightness(1.15);
	color: #fff;
}

.mem__renew img {
	flex-shrink: 0;
}

/* Nút chuyển vào trong thẻ "Tình trạng hội viên" — cột chỉ ~360px trong khi
   hình thức gốc của design (gap 40 + padding phải 54 + chữ 26px) chiếm 352px,
   vừa đủ tràn ở màn hẹp. Giữ nguyên pill, cho nó chiếm trọn bề rộng thẻ và co
   khoảng cách lại. */
.dash-card .mem__renew {
	display: flex;
	justify-content: center;
	width: 100%;
	margin-top: var(--spacing-md, 16px);
	gap: 16px;
	padding-inline: 16px;
	/* Rule này (0,2,0) đè `.mem__renew` ở member-page.css nên PHẢI bọc cùng biến,
	   không thì ô "Nút Gia hạn" không ăn (nút thật luôn nằm trong .dash-card). */
	font-size: var(--mt-ov-dash_renew, 1.25rem);
}

.mem__renew-note {
	margin-top: var(--spacing-md, 16px);
	/* Suỹ theo ô "Nút Gia hạn" (derive 0.8 = 16/20) — xem mt_display_parts(). */
	font-size: var(--mt-ov-dash_renew_note, 1rem);
	color: var(--color-accent, #d86227);
}

.mem__renew-note a {
	font-weight: 700;
	color: var(--color-primary-dark, #003da8);
	text-decoration: underline;
}

/* Nút "Mua gói" ngoài bảng so sánh cũng phải có icon đúng cỡ — rule dành riêng
   cho bảng (.mem-table tbody .mem-buy svg) không với tới được. */
.mem-buy svg {
	width: 20px;
	height: 20px;
	flex-shrink: 0;
}

/* ==========================================================================
   TÀI KHOẢN — MÀN ĐĂNG NHẬP (chưa đăng nhập).
   Design không có trang đăng nhập riêng: mentora/dang-nhap.html là popup .auth
   mở sẵn. woocommerce/myaccount/form-login.php in lại đúng khối đó ở biến thể
   .auth--inline: bỏ position:fixed + lớp phủ đen, đặt thẳng vào luồng trang.
   ========================================================================== */

.auth--inline {
	position: static;
	z-index: auto;
	/* NỀN: thẻ .auth__card màu trắng, mà body cũng trắng (global.css:6) nên khối
	   đăng nhập trôi lơ lửng — trong design nó luôn nằm trên lớp phủ tối. Ở đây
	   dùng đúng nền vùng nội dung của khu vực tài khoản (#edece8, PSD
	   "Rectangle 1" — dashboard.css:27) + bo góc như .dash__panel, để trang này
	   trông vẫn thuộc khu tài khoản. */
	margin: var(--spacing-sm, 8px);
	border-radius: var(--radius-lg, 24px);
	background: #edece8;
	/* .auth canh giữa theo CẢ hai trục; ở trang thật khối này cao bằng phần còn
	   lại của <main> nên canh giữa dọc đẩy form xuống rất sâu (đo: dialog top
	   354px). Cho nó bám mép trên, khoảng thở lấy bằng padding. */
	align-items: flex-start;
	padding-block: clamp(32px, calc(5 * var(--mt-vw)), 72px);
	overflow: visible;
}

/* auth.css:33 đặt `.auth__dialog { margin: auto }` — trong flex container,
   margin auto THẮNG align-items nên form vẫn bị đẩy xuống giữa phần trống
   (đo: cách hero 330px). Chỉ giữ auto theo trục ngang. */
.auth--inline .auth__dialog {
	margin: 0 auto;
}

.auth--inline .auth__close {
	display: none;
}

/* ==========================================================================
   TIÊU ĐỀ HAI MÀU — span BỌC PHẦN CHÍNH bị rule "tô màu mọi span" của design ăn.
   Design tô phần nhấn bằng selector theo TÊN THẺ:
     membership.css:142  .mem-plans__title span, .mem-faq__title span { #d86227 }
     membership.css:205  .mem-faq__title span { var(--color-accent) }
     about.css:583       .connect__title span { var(--color-primary-dark) }
   Render bọc cả phần chính trong <span> (selector live edit của UX Builder:
   .mt-mp__title-main / .mt-faq__title-main / .mt-cta__l1) nên phần chính cũng bị
   tô (đo: "Quyền lợi", "Câu hỏi" = rgb(216,98,39)). Cho span phần chính KẾ THỪA
   màu <h2> = đúng màu phần chính của design:
     .mem-plans__title #2458dd · .mem-faq__title #003cac · .connect__title var(--color-primary)
   ========================================================================== */

.mem-plans__title .mt-mp__title-main,
.mem-faq__title .mt-faq__title-main,
.connect__title .mt-cta__l1 {
	color: inherit;
}

/* ==========================================================================
   THẺ "CAM KẾT" — tiêu đề nhiều dòng.
   Tiêu đề thẻ in bằng esc_html (không còn cho <br> thô vì on_change .text() của
   builder hiện nguyên chữ "<br>"): xuống dòng giữ bằng pre-line.
   ========================================================================== */

.commit__heading {
	white-space: pre-line;
}

/* ==========================================================================
   [mt_media_text] media_side="right" — design chỉ có biến thể ảnh TRÁI.
   Nền vti-bg.png đã bake sẵn nội dung màn hình điện thoại (video YouTube, có chữ)
   ở nửa trái nên KHÔNG lật ngang được (chữ bị ngược). Biến thể phải bỏ ảnh nền,
   dùng nền màu cùng tông + bo góc, và đảo vị trí ảnh / chữ theo gương:
     ảnh  left 7.49% w 37.72%  → right 7.49%
     chữ  left 50.4% w 41%     → left 100 − 50.4 − 41 = 8.6%
   Dưới 1024px design xếp dọc (ảnh trên, chữ dưới) nên không cần đảo.
   ========================================================================== */

@media (min-width: 1024px) {
	.vti.mt-media--right .vti__panel {
		background: linear-gradient(180deg, #1a51d1 0%, #0f45b5 100%);
		border-radius: var(--radius-xl);
	}

	.vti.mt-media--right .vti__media {
		left: auto;
		right: 7.49%;
	}

	.vti.mt-media--right .vti__content {
		left: 8.6%;
	}
}

/* UX Builder (chỉ iframe): [mt_row] rỗng — <content> (khung "+") là item của lưới
   12 cột nên chỉ rộng 1 cột; cho trải cả hàng để còn chỗ bấm. */
.ux-builder-iframe .mt-row > content {
	grid-column: 1 / -1;
}

/* ==========================================================================
   Tab "Các bài viết khác" — hộp chữ KHÔNG có biên an toàn
   --------------------------------------------------------------------------
   blog-detail.css:205-213 đặt `width:282px; padding:16px 42px 16px 33px` ⇒ chỗ cho
   chữ đúng 207px = bề rộng chữ trong PSD. Lệch 1px (font tải chậm, đậm hơn, cỡ chữ
   khách chỉnh) là gãy 2 dòng, và `::after{height:101px}` không còn khớp mép card
   (feedback khách, docs/client-feedback-plan.md D2).
   ========================================================================== */
@media (min-width: 1024px) {
	.post__related-tab {
		width: max-content;
		min-width: 282px;
		white-space: nowrap;
		font-size: var(--mt-ov-blog_rel_tab, 1.375rem);   /* ô "Tab bài viết khác" */
	}
}

/* ==========================================================================
   Xuống dòng bằng <br> trong trường text ngắn (mt_text_br) — feedback khách C3/C4
   mt_text_br() đổi <br> thành ký tự xuống dòng thật, nên phần tử phải giữ xuống dòng.
   ========================================================================== */
.mt-br,
.cdetail-hero__title,
.mprofile__name,
.mprofile__skills li,
/* Tên mentor: đặt trên <a>, KHÔNG trên <h2> — h2 chứa xuống dòng + tab của
   template quanh <a>, pre-line giữ chúng lại thành một dòng trống phía trên tên
   (đo được h2 cao 119px = 2 dòng) -> tên bị đẩy xuống, vai trò thứ 3 rơi vào panel navy. */
.cmentor-info__name a,
.cmentor-info__roles li {
	white-space: pre-line;
}

/* ==========================================================================
   Trang mentor: chứng chỉ cột 2 đè lên ảnh mentor
   --------------------------------------------------------------------------
   mentor-profile.css:178-199 đặt `width:46.5%` theo PSD (chứng chỉ demo ngắn). Chuỗi
   thật 40–60 ký tự ⇒ cột 2 kết thúc ~x1486 trong khi ảnh mentor (bake trong ảnh nền
   panel) bắt đầu ~x1345 ⇒ chữ nằm trên mặt/áo mentor (feedback khách, ảnh image10).
   36% + gap 12 ⇒ cột 2 kết thúc ≈ 74.5% panel, trước mép ảnh 75.6%.
   ========================================================================== */
@media (min-width: 1024px) {
	.mprofile__skills {
		width: 36%;
		column-gap: 12px;
	}
	.mprofile__skills li {
		line-height: 1.25;
	}
	.mprofile__skills li + li {
		margin-top: 10px;
	}
	.mprofile__name {
		line-height: 1.05;   /* tên 2 dòng (<br>) không đè xuống khối chứng chỉ */
	}
}

/* ==========================================================================
   Tooltip cho 3 icon header (feedback khách A2 — "trỏ vào icon chưa hiện text")
   Chỉ desktop có chuột; mobile giữ nguyên (đã có aria-label cho trình đọc màn hình).
   ========================================================================== */
@media (hover: hover) and (min-width: 1024px) {
	.header__icons .btn--icon[data-mt-tip] {
		position: relative;
	}
	.header__icons .btn--icon[data-mt-tip]::after {
		content: attr(data-mt-tip);
		position: absolute;
		left: 50%;
		top: calc(100% + 10px);
		transform: translateX(-50%);
		padding: 6px 14px;
		border-radius: var(--radius-pill, 999px);
		background: var(--color-accent);
		color: #fff;
		font-size: 0.875rem;
		font-weight: 600;
		white-space: nowrap;
		opacity: 0;
		pointer-events: none;
		transition: opacity 0.15s ease;
		z-index: 5;
	}
	.header__icons .btn--icon[data-mt-tip]::before {
		content: "";
		position: absolute;
		left: 50%;
		top: calc(100% + 4px);
		transform: translateX(-50%);
		border: 6px solid transparent;
		border-bottom-color: var(--color-accent);
		opacity: 0;
		transition: opacity 0.15s ease;
	}
	.header__icons .btn--icon[data-mt-tip]:hover::after,
	.header__icons .btn--icon[data-mt-tip]:hover::before,
	.header__icons .btn--icon[data-mt-tip]:focus-visible::after,
	.header__icons .btn--icon[data-mt-tip]:focus-visible::before {
		opacity: 1;
	}
}

/* ==========================================================================
   Giới thiệu khóa học: cuộn trong khung như bio mentor (feedback khách C1)
   ========================================================================== */
@media (min-width: 1024px) {
	.cintro-pane { position: relative; }
	.cintro-pane[hidden] { display: none; }   /* [hidden] + display của component — bẫy cũ */
	.cintro-body {
		max-height: 585px;             /* = chiều cao panel trong design ở 1920 */
		overflow-y: auto;
		overscroll-behavior: contain;
		scrollbar-width: none;
		-ms-overflow-style: none;
		padding-right: 34px;           /* chừa chỗ thanh cuộn giả */
	}
	.cintro-body::-webkit-scrollbar { display: none; }
	.cintro-scroll {
		position: absolute;
		right: 0;
		top: 0;
		width: 15px;
		height: 100%;
		border-radius: 8px;
		background: rgba(0, 61, 168, 0.5);
	}
	.cintro-scroll__thumb {
		position: absolute;
		left: 0;
		top: 0;
		width: 100%;
		height: 120px;
		border-radius: 8px;
		background: #0a58d6;
		cursor: grab;
	}

	/* Chức danh mentor dài: ngắt trong từ thay vì tràn ngang panel. */
	.cmentor-info__roles li { overflow-wrap: anywhere; }
}

/* ==========================================================================
   "Hệ sinh thái VTI": video phát được trong khung điện thoại (feedback khách E2)
   --------------------------------------------------------------------------
   vti-phone.png là KHUNG MÁY, phần màn hình trong suốt: x 5.1%–94.7%, từ y 16.8%
   xuống hết đáy. Video nằm DƯỚI khung (z-index 0) và lọt đúng ô đó; khung đặt
   pointer-events:none để bấm nút play xuyên qua được.
   ========================================================================== */
.vti__media--video .vti__screen {
	position: absolute;
	/* Ảnh nền khung máy ĐÃ BAKE SẴN một ảnh chụp trình phát YouTube. Video thật phải
	   phủ TRÙM đúng vùng đó, nếu lệch sẽ thấy 2 thanh "Xem trên YouTube" chồng nhau.
   Đo trên ảnh nền (khung máy 711×655): trình phát bake x 52..659 (rộng 608), y từ 167;
	   vùng màn hình trắng tới x 673 ⇒ ảnh nền CHỪA lề ~14px mỗi bên. Giữ đúng lề đó:
	   left 52/711 = 7.3%, width 608/711 = 85.5%, top 167/655 = 25.5%. */
	left: 7.3%;
	top: 25.5%;
	width: 85.5%;
	aspect-ratio: 16 / 9;
	height: auto;
	z-index: 0;
	overflow: hidden;
	background: #000;
}
.vti__media--video .vti__screen .mt-video,
.vti__media--video .vti__screen iframe,
.vti__media--video .vti__screen img {
	display: block;
	width: 100%;
	height: 100%;
	max-width: none;
	border: 0;
	/* .mt-video (dùng chung với mục Cảm nhận) có `margin: 0 30px 30px 31px` +
	   `width: calc(100% - 61px)` + `aspect-ratio: 658/373` — để nguyên thì video bị
	   đẩy sang phải 31px, hở nền đen bên trái đúng như khách chụp. */
	margin: 0;
	aspect-ratio: auto;
}
.vti__media--video .vti__screen .mt-video--facade {
	position: relative;
	padding: 0;
	background: none;
	cursor: pointer;
}
.vti__media--video > img {
	position: relative;
	z-index: 1;
	pointer-events: none;   /* khung máy không chặn click vào video */
}

@media (max-width: 1023px) {
	/* ≥1024 .vti__media đã absolute (about.css:564) nên tự là khối chứa. */
	.vti__media--video {
		position: relative;
	}
}

/* ==========================================================================
   Ảnh mentor TÁCH NỀN do khách tự tải (ô "Ảnh mentor" ở khóa học / trang Mentor)
   --------------------------------------------------------------------------
   Trả về đúng hình học PSD (course-detail.css ghi chú: width 90.8%, left −20.3%)
   vì nền trong suốt nên số năm kinh nghiệm vẫn nhìn thấy. Ảnh đại diện cũ (nền
   trắng) vẫn giữ cỡ thu nhỏ 74%. Class do template-parts/course-mentor.php gắn.
   ========================================================================== */
.cmentor-card__photo.cmentor-card__photo--cutout {
	left: -20.3%;
	width: 90.8%;
}

/* ==========================================================================
   Footer: huy hiệu BCT + logo thanh toán đổi được ở Customizer (mt_footer_image)
   --------------------------------------------------------------------------
   Ảnh khách tải lên có thể cỡ bất kỳ (vd 1200px) -> chặn theo chiều cao của
   ảnh design (85 / 45px), rộng tự theo tỉ lệ. Ảnh mặc định không đổi cỡ.
   ========================================================================== */
.footer__payment > img,
.footer__payment > a > img {
	display: block;
	max-height: 85px;
	width: auto;
	max-width: 100%;
}
.footer__payment > div img {
	display: block;
	max-height: 45px;
	width: auto;
	max-width: 100%;
}
.footer__payment > a { flex: none; max-width: 60%; }

/* ==========================================================================
   HIỆU ỨNG (UX Builder: "Hiệu ứng khối" + "Hiệu ứng chữ") — inc/builder/text-style.php
   Khối: [data-mt-fx="<key>"] + .mt-fx-in do assets/js/mt-fx.js gắn khi cuộn tới.
   Ẩn trước CHỈ khi html.mt-fx-on (JS + IntersectionObserver + không giảm chuyển động).
   fill-mode backwards ⇒ chạy xong không còn transform/filter ⇒ phần tử không thành
   containing block của con position:fixed (popup, sidebar).
   ========================================================================== */

html.mt-fx-on [data-mt-fx]:not(.mt-fx-in):not([data-mt-fx="pulse"]):not([data-mt-fx="float"]) {
	opacity: 0;
}

[data-mt-fx].mt-fx-in {
	animation-duration: var(--mt-fx-duration, 700ms);
	animation-delay: var(--mt-fx-delay, 0ms);
	animation-timing-function: cubic-bezier(0.2, 0.7, 0.2, 1);
	/* backwards (không phải both): giữ khung đầu trong lúc trễ, chạy xong TRẢ về style gốc.
	   both giữ lại transform = matrix đơn vị ≠ none ⇒ khối thành containing block của
	   con position:fixed (popup/sidebar) mãi mãi. */
	animation-fill-mode: backwards;
}

[data-mt-fx="fade"].mt-fx-in { animation-name: mt-fx-fade; }
[data-mt-fx="fade-up"].mt-fx-in { animation-name: mt-fx-fade-up; }
[data-mt-fx="fade-down"].mt-fx-in { animation-name: mt-fx-fade-down; }
[data-mt-fx="fade-left"].mt-fx-in { animation-name: mt-fx-fade-left; }
[data-mt-fx="fade-right"].mt-fx-in { animation-name: mt-fx-fade-right; }
[data-mt-fx="zoom-in"].mt-fx-in { animation-name: mt-fx-zoom-in; }
[data-mt-fx="zoom-out"].mt-fx-in { animation-name: mt-fx-zoom-out; }
[data-mt-fx="flip-up"].mt-fx-in { animation-name: mt-fx-flip-up; }
[data-mt-fx="bounce-in"].mt-fx-in { animation-name: mt-fx-bounce-in; }
[data-mt-fx="blur-in"].mt-fx-in { animation-name: mt-fx-blur-in; }

/* Lặp: chạy luôn, không chờ cuộn tới */
[data-mt-fx="pulse"] { animation: mt-fx-pulse 2.4s ease-in-out var(--mt-fx-delay, 0ms) infinite; }
[data-mt-fx="float"] { animation: mt-fx-float 2.4s ease-in-out var(--mt-fx-delay, 0ms) infinite; }

@keyframes mt-fx-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes mt-fx-fade-up { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: none; } }
@keyframes mt-fx-fade-down { from { opacity: 0; transform: translateY(-40px); } to { opacity: 1; transform: none; } }
@keyframes mt-fx-fade-left { from { opacity: 0; transform: translateX(48px); } to { opacity: 1; transform: none; } }
@keyframes mt-fx-fade-right { from { opacity: 0; transform: translateX(-48px); } to { opacity: 1; transform: none; } }
@keyframes mt-fx-zoom-in { from { opacity: 0; transform: scale(0.85); } to { opacity: 1; transform: none; } }
@keyframes mt-fx-zoom-out { from { opacity: 0; transform: scale(1.15); } to { opacity: 1; transform: none; } }
@keyframes mt-fx-flip-up { from { opacity: 0; transform: perspective(800px) rotateX(40deg) translateY(24px); } to { opacity: 1; transform: none; } }
@keyframes mt-fx-bounce-in {
	0% { opacity: 0; transform: scale(0.6); }
	55% { opacity: 1; transform: scale(1.05); }
	75% { transform: scale(0.97); }
	100% { opacity: 1; transform: none; }
}
@keyframes mt-fx-blur-in { from { opacity: 0; filter: blur(10px); } to { opacity: 1; filter: none; } }
@keyframes mt-fx-pulse { 0%, 100% { transform: none; } 50% { transform: scale(1.05); } }
@keyframes mt-fx-float { 0%, 100% { transform: none; } 50% { transform: translateY(-8px); } }

@media (prefers-reduced-motion: reduce) {
	[data-mt-fx], [data-mts] * { animation: none !important; }
}

/* ==========================================================================
   Trang văn bản thuần (Điều khoản dịch vụ, Chính sách bảo mật…) — page.php
   --------------------------------------------------------------------------
   Dựng theo ngôn ngữ sẵn có: panel trắng bo 24px như .section-panel, mục lục
   hộp kem .post__toc của trang bài viết (dính khi cuộn), chữ .post__content 20px.
   Nền trang xám nhạt để panel nổi lên — giống các dải panel khác của site.
   ========================================================================== */
.page-doc {
	margin-block: var(--spacing-2xl);
	align-items: start;
}

.page-doc__panel {
	padding: var(--spacing-lg);
	border-radius: var(--radius-lg);
	background: var(--color-surface, #fff);
	box-shadow: 0 14px 34px rgba(16, 52, 140, 0.08);
}

/* Ngày cập nhật: nhãn nhỏ màu cam của site, nằm trên nội dung */
.page-doc__updated {
	display: inline-block;
	margin-bottom: var(--spacing-md);
	padding: 6px 16px;
	border-radius: 999px;
	background: #fdf6e3;
	font-size: 0.9375rem;
	font-weight: 600;
	color: var(--color-accent);
}

/* Tiêu đề mục trong văn bản: màu xanh thương hiệu + gạch cam ngắn ở trên,
   lấy lại cách section-title của site nhấn bằng màu, không thêm hình mới. */
.page-doc .post__content h2 {
	margin-top: var(--spacing-xl);
	color: var(--color-primary);
}

.page-doc .post__content h2::before {
	content: "";
	display: block;
	width: 48px;
	height: 4px;
	margin-bottom: 12px;
	border-radius: 2px;
	background: var(--color-accent);
}

.page-doc .post__content h3 {
	margin-top: var(--spacing-lg);
	color: var(--color-primary-dark);
}

/* Danh sách: chấm cam thay marker mặc định */
.page-doc .post__content ul { list-style: none; padding-left: 0; }

.page-doc .post__content ul > li {
	position: relative;
	padding-left: 26px;
}

.page-doc .post__content ul > li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.55em;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: var(--color-accent);
}

.page-doc .post__content table {
	border-radius: var(--radius-md);
	overflow: hidden;
}

/* Mục lục: hộp kem có sẵn (.post__toc), thêm trạng thái dính ở desktop */
@media (min-width: 1024px) {
	.page-doc__side {
		position: sticky;
		top: calc(var(--header-stuck-h, 80px) + 16px);
	}

	.page-doc__panel {
		padding: var(--spacing-xl) var(--spacing-2xl);
	}
}

/* Không có tiêu đề mục nào ⇒ không có mục lục: nội dung dùng trọn bề rộng,
   nhưng vẫn giới hạn độ dài dòng cho dễ đọc. */
.page-doc--no-toc {
	display: block;
}

.page-doc--no-toc .post__content,
.page-doc--no-toc .page-doc__updated {
	/* Dòng quá dài khó đọc: chặn ~68 ký tự và căn giữa panel. */
	max-width: 68ch;
	margin-inline: auto;
}

.page-doc--no-toc .page-doc__updated {
	display: block;
	width: max-content;
	margin-inline: 0;
}

/* Mobile: mục lục nằm TRÊN nội dung (đọc trước rồi nhảy), không dính */
@media (max-width: 1023.98px) {
	.page-doc__side { order: -1; }
	.page-doc__panel { padding: var(--spacing-md); }
}

/* ==========================================================================
   Quên mật khẩu / Đặt mật khẩu mới (.auth--single)
   --------------------------------------------------------------------------
   Dùng lại thẻ .auth của màn đăng nhập nhưng chỉ có MỘT form, không có tab.
   .auth__note của màn đăng nhập là một dòng ngắn nên được đặt nowrap; ở đây câu
   hướng dẫn dài, nowrap làm chữ tràn khỏi thẻ (đo: 737px chữ trong thẻ 429px).
   ========================================================================== */
.auth--single .auth__note {
	/* auth.css:359 (>=1024) còn kéo lề âm 41px cho vừa MỘT dòng của design ⇒ phải
	   trả về 0, nếu không chữ vẫn thò ra hai bên thẻ. */
	white-space: normal;
	margin: 0 0 4px;
	line-height: 1.4;
}

.auth--single .auth__card {
	padding-block: var(--spacing-xl);
}

.auth--single .auth__meta {
	text-align: center;
}

/* ==========================================================================
   "Thanh toán cho đơn hàng" (checkout/order-pay) — woocommerce/checkout/form-pay.php
   --------------------------------------------------------------------------
   Dùng lại khung .checkout__grid của trang thanh toán nhưng chỉ 2 cột (đơn đã
   có thông tin học viên). Khung gốc là 3 cột cố định 433/475/465 nên phải khai
   riêng, còn thẻ tóm tắt / nút / pill tiêu đề dùng chung CSS với checkout.
   ========================================================================== */
.checkout__grid--pay {
	margin-block: var(--spacing-xl);
	align-items: start;
}

/* Danh sách cổng: theme render mỗi cổng là <label class="co-pay"> (KHÔNG có <li>),
   và .co-pay là lưới 28px|1fr của thiết kế — đừng đổi display của nó, chỉ bọc
   thành thẻ trắng và cho ảnh/chữ chỗ rộng hơn vì cột ở đây rộng hơn checkout. */
.mt-pay .wc_payment_methods {
	display: grid;
	gap: var(--spacing-sm);
	margin: var(--spacing-lg) 0 0;
	padding: 0;
	list-style: none;
}

.mt-pay .co-pay {
	margin-top: 0;
	padding: 18px 22px;
	border-radius: var(--radius-md);
	background: #fff;
}

.mt-pay .co-pay img {
	max-width: 72px;
	width: auto;
	height: auto;
	object-fit: contain;
}

.mt-pay .co-pay__desc {
	max-width: 52ch;
}


.co-item__qty {
	color: #666;
}

/* Ghi chú phần còn lại của đơn trả trước 50% */
.mt-pay__rest {
	margin-top: var(--spacing-md);
	padding: 12px 14px;
	border-radius: var(--radius-sm, 10px);
	background: #fdf6e3;
	font-size: 0.9375rem;
	line-height: 1.45;
	color: #6b4a15;
}

.mt-pay .co-summary__list {
	border-bottom: 1px solid #e4e6eb;
}

@media (min-width: 1024px) {
	.checkout__grid--pay {
		grid-template-columns: minmax(0, 1fr) 465px;
		column-gap: var(--spacing-2xl);
		padding: 24px 42px;
	}

	/* Hoa văn của trang thanh toán 3 cột: 2 hình thoi trắng khoét mép trên và
	   đường kẻ ngang 947px — đều neo bằng px theo lưới 433/475/465. Lưới ở đây chỉ
	   2 cột nên chúng rơi lung tung (thoi nổi trên pill tiêu đề, kẻ ngang lửng lơ).
	   Khách báo 2026-09-29: "dư hình tam giác". */
	.checkout__grid--pay::before,
	.checkout__grid--pay::after,
	.checkout__grid--pay .co-method::before {
		display: none;
	}

	/* .co-back của checkout đặt absolute theo toạ độ PSD — ở đây cho về luồng. */
	.checkout__grid--pay .co-back {
		position: static;
		margin-top: var(--spacing-lg);
		font-size: 1.125rem;
	}
}

@media (max-width: 1023.98px) {
	.checkout__grid--pay { padding: var(--spacing-md); }
}

/* ==========================================================================
   Tài khoản » Chi tiết đơn hàng (woocommerce/myaccount/view-order.php)
   --------------------------------------------------------------------------
   Dùng lại token của site (variables.css): xanh #2458dd / navy #003da8 / cam
   #d86227, bo 16–24px, thẻ trắng trên nền #edece8 của khu tài khoản. Không sinh
   màu mới. Chip trạng thái LUÔN có chữ — màu chỉ bổ trợ.
   ========================================================================== */
.mt-order__head { align-items: flex-start; }

.mt-order__actions { margin: 0; }

/* Chip trạng thái */
.mt-chip {
	display: inline-block;
	margin-left: 12px;
	padding: 4px 14px;
	border-radius: 999px;
	vertical-align: middle;
	font-size: 0.9375rem;
	font-weight: 600;
	line-height: 1.5;
	white-space: nowrap;
}

.mt-chip--ok   { background: #e7f4ec; color: #1f7a45; }   /* tương phản 5.4:1 */
.mt-chip--wait { background: #fdf0e3; color: #a2541a; }   /* 5.1:1 */
.mt-chip--bad  { background: #fdeaea; color: #a32020; }   /* 6.0:1 */

/* 3 ô thông tin nhanh */
.mt-order__facts {
	display: grid;
	gap: var(--spacing-sm);
	margin: var(--spacing-md) 0 var(--spacing-lg);
	padding: 0;
	list-style: none;
}

.mt-order__facts li {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--spacing-md);
	padding: 14px 18px;
	border-radius: var(--radius-md);
	background: #fff;
}

.mt-order__facts span { font-size: 1rem; color: #555; }
.mt-order__facts b { font-size: 1.0625rem; color: var(--color-primary-dark); }
.mt-order__total { font-size: 1.25rem !important; color: var(--color-accent) !important; }

@media (min-width: 768px) {
	/* auto-fit: cột tự co theo chỗ thật, không ép đúng 3 cột rồi bóp chữ
	   "Cổng thanh toán VNPAY-QR" thành 4 dòng. */
	.mt-order__facts { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
	.mt-order__facts li { flex-direction: column; justify-content: flex-start; gap: 6px; }
}

/* Nút thanh toán: .klg__btn của Lịch khai giảng cố định 133×49 nên chữ "THANH
   TOÁN" gãy đôi. Ở đây cho rộng theo chữ, cao tối thiểu 44px (vùng chạm). */
.mt-order__pay {
	width: auto;
	height: auto;
	min-height: 44px;
	padding: 10px 26px;
	white-space: nowrap;
}

/* Link quay lại: .co-back của trang thanh toán là position:absolute ở >=1024
   (toạ độ PSD) nên nếu dùng lại sẽ đè lên bảng. */
.mt-order__back {
	margin-top: var(--spacing-lg);
	font-size: 1.0625rem;
}

.mt-order__back a { color: var(--color-primary-dark); }

/* Bảng chi tiết: tiêu đề cột được xuống dòng, cột số lượng / thành tiền vừa đủ */
.mt-order__table th,
.mt-order__table td { white-space: normal; overflow-wrap: anywhere; }
.mt-order__table th:nth-child(2),
.mt-order__table td:nth-child(2) { width: 14%; text-align: center; }
.mt-order__table th:nth-child(3),
.mt-order__table td:nth-child(3) { width: 24%; }

.mt-order-billing {
	margin-top: var(--spacing-md);
	padding: var(--spacing-lg);
	border-radius: var(--radius-md);
	background: #fff;
	line-height: 1.6;
}

.mt-order-billing a { color: var(--color-primary-dark); }

.mt-order-billing p + p { margin-top: 4px; }

/* Bảng chi tiết: dòng tổng ở chân bảng */
.pay__table tfoot th {
	text-align: right;
	font-weight: 600;
	color: #333;
}

.pay__table tfoot td { font-weight: 700; color: var(--color-primary-dark); }

/* table-layout:fixed lấy cột từ <thead>, nhưng <th colspan="2"> làm ô giá ở
   chân bảng thành nth-child(2) ⇒ ăn phải text-align:center của cột "Số lượng"
   và lệch 70px so với giá ở dòng sản phẩm (đo ở 1440). */
.mt-order__table tfoot td:last-child { text-align: left; }
.mt-order__table tfoot th { padding-right: 16px; }

/* Mobile: bảng của design là bảng-cuộn-ngang (.sched__table min-width 1163px cho
   6 cột Lịch khai giảng). Bảng đơn hàng chỉ có 3 cột nội dung ngắn ⇒ ép 1163px
   làm header xanh tràn khỏi thẻ, chữ bị cắt và hai dòng tổng nằm ngoài vùng nhìn
   (đo ở 390px: scrollWidth 1185 > clientWidth 342). Cho bảng co vừa panel. */
@media (max-width: 1023.98px) {
	.sched .mt-order__table { min-width: 0; table-layout: auto; }
	.mt-order__table thead th { padding: 14px 0; font-size: 1rem; white-space: normal; }
	.mt-order__table thead th:first-child { padding-left: 14px; }
	.mt-order__table thead th:last-child { padding-right: 14px; }
	.mt-order__table td { padding: 14px 0; font-size: 0.9375rem; }
	.mt-order__table .cert__name { padding-left: 14px !important; padding-right: 12px; }
	.mt-order__table td:last-child { padding-right: 14px; }
	.mt-order__table tfoot th { padding-left: 14px; }
	.mt-order__table th:nth-child(2),
	.mt-order__table td:nth-child(2) { width: 18%; }
	.mt-order__table th:nth-child(3),
	.mt-order__table td:nth-child(3) { width: 32%; }
}

/* ≤600px: 3 cột vẫn không đủ chỗ (đo ở 390: vùng trong .sched chỉ 272px ⇒ tên
   khóa học gãy 6 dòng, "1.999.000₫" gãy đôi). Xếp chồng từng dòng thành thẻ,
   nhãn cột lấy từ data-label để bảng vẫn đọc được mà không cần cuộn ngang. */
@media (max-width: 600px) {
	.mt-order__table,
	.mt-order__table tbody,
	.mt-order__table tfoot,
	.mt-order__table tr,
	.mt-order__table th,
	.mt-order__table td { display: block; width: auto; }
	.mt-order__table tr,
	.mt-order__table th,
	.mt-order__table td { box-sizing: border-box; }

	/* Trả lại chiều rộng tự nhiên: các quy tắc % (18%/32%) của khối ≤1023.98px có
	   specificity cao hơn nên vẫn bóp ô giá còn 43px ⇒ giá tràn ra ngoài thẻ. */
	.mt-order__table th:nth-child(2),
	.mt-order__table td:nth-child(2),
	.mt-order__table th:nth-child(3),
	.mt-order__table td:nth-child(3),
	.mt-order__table td:last-child { width: auto; padding-right: 0; }

	.mt-order__table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }

	.mt-order__table tbody tr { padding: 14px 16px; border-radius: 16px; background: #f8f7f5; }
	.mt-order__table tbody tr + tr { margin-top: 10px; }
	.mt-order__table tbody td { padding: 0 !important; background: transparent !important; overflow-wrap: normal; }
	.mt-order__table tbody td[data-label="Nội dung"] { font-weight: 600; line-height: 1.4; }
	.mt-order__table tbody td + td { display: flex; justify-content: space-between; gap: 12px; margin-top: 6px; }
	.mt-order__table tbody td + td::before { content: attr(data-label); color: #555; font-weight: 400; }

	.mt-order__table tfoot tr:last-child { padding-bottom: 6px; }
	.mt-order__table tfoot tr { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; padding: 12px 16px 0; }
	/* nhãn phải CO ĐƯỢC: mặc định flex item không nhỏ hơn nội dung ⇒ "Tổng số phụ:"
	   + giá = 252px trong khung 240px, giá tràn ra ngoài thẻ 10px (đo ở 390). */
	.mt-order__table tfoot th { flex: 1 1 auto; min-width: 0; padding: 0; text-align: left; }
	.mt-order__table tfoot td { flex: 0 0 auto; padding: 0; text-align: right; white-space: nowrap; overflow-wrap: normal; }
}

/* ==========================================================================
   Sau khi đặt hàng » Chi tiết đơn (woocommerce/order/order-details.php)
   --------------------------------------------------------------------------
   Dùng lại y nguyên các mảnh của "Tài khoản » Chi tiết đơn hàng". Khác một điểm:
   nền trang này TRẮNG, mà cả bộ thẻ kia là trắng-trên-nền-xám #edece8 của khu
   tài khoản ⇒ để trần thì ô thông tin, bảng và thẻ người đặt chìm hẳn, nhìn như
   chữ rời. Bọc lại đúng tấm nền đó.
   ========================================================================== */
.mt-order-summary { padding-block: var(--spacing-xl); }

.mt-order-summary__panel {
	padding: var(--spacing-lg) var(--spacing-md);
	border-radius: var(--radius-lg);
	background: #edece8;
}

.mt-order-summary .mt-order__facts { margin-top: var(--spacing-md); }

/* .dash__name mặc định 50px (PSD khu tài khoản) — ở đây là tiêu đề MỤC dưới H1
   "Thanh toán" của hero nên hạ một bậc để không tranh chấp thứ bậc. */
.mt-order-summary .dash__name { font-size: var(--mt-ov-dash_card_title, 1.625rem); }

.mt-order-summary .mt-order__back { margin-bottom: 0; }

@media (min-width: 1024px) {
	.mt-order-summary__panel { padding: var(--spacing-xl) var(--spacing-lg); border-radius: var(--radius-xl); }
}

/* Nút "Đặt hàng lại" là của Woo (hook woocommerce_order_details_after_order_table),
   markup <p class="order-again"><a class="button"> — theme không style .button của
   Woo nên nó ra link trần lạc lõng giữa bảng và thẻ người đặt. Cho nó dạng nút phụ. */
.mt-order-summary .order-again { margin-top: var(--spacing-md); }

.mt-order-summary .order-again .button {
	display: inline-block;
	min-height: 44px;
	padding: 11px 24px;
	border: 1px solid var(--color-primary-dark);
	border-radius: var(--radius-pill);
	background: transparent;
	font-size: 1rem;
	font-weight: 600;
	line-height: 1.4;
	color: var(--color-primary-dark);
	text-decoration: none;
}

.mt-order-summary .order-again .button:hover,
.mt-order-summary .order-again .button:focus-visible {
	background: var(--color-primary-dark);
	color: #fff;
}

/* ==========================================================================
   Thông báo trên các màn tài khoản chưa đăng nhập (template-parts/auth-notices.php)
   --------------------------------------------------------------------------
   Trước đây các template gọi hook in thông báo TRƯỚC hero ⇒ thông báo nằm lọt
   dưới `.header` (position: absolute) nên khách không thấy gì khi đặt lại mật
   khẩu hỏng. Nay in sau hero; kiểu dáng lấy đúng bộ màu của chip trạng thái
   (xanh lá / đỏ / cam) để không sinh màu mới.
   ========================================================================== */
.auth__notices {
	margin-top: var(--spacing-lg);
}

.auth__notices .woocommerce-message,
.auth__notices .woocommerce-error,
.auth__notices .woocommerce-info,
.auth__notices .woocommerce-notice {
	margin: 0 auto var(--spacing-sm);
	padding: 14px 22px;
	max-width: 640px;
	border-radius: var(--radius-md);
	list-style: none;
	font-size: 1.0625rem;
	line-height: 1.5;
}

.auth__notices li { list-style: none; }
.auth__notices li + li { margin-top: 6px; }

/* Viền khai tường minh: CSS của WooCommerce vẽ sẵn viền XANH cho .woocommerce-message
   (đo được trên staging) — không đè thì hộp báo thành công ra nền xanh lá viền xanh dương. */
.auth__notices .woocommerce-message,
.auth__notices .woocommerce-notice { border: 1px solid #b7e0c6; background: #e7f4ec; color: #1f7a45; }   /* tương phản 5.4:1 */
.auth__notices .woocommerce-error  { border: 1px solid #f3c2c2; background: #fdeaea; color: #a32020; }   /* 6.0:1 */
.auth__notices .woocommerce-info   { border: 1px solid #f2d9b8; background: #fdf0e3; color: #a2541a; }   /* 5.1:1 */

.auth__notices a { color: inherit; text-decoration: underline; }

/* Nút của Woo lẫn trong thông báo (vd "Đăng xuất") — theme không style .button */
.auth__notices .button {
	display: inline-block;
	margin-left: 8px;
	font-weight: 600;
}

/* Màn "đã gửi email khôi phục" (woocommerce/myaccount/lost-password-confirmation.php) */
.auth__done { text-align: center; }

.auth__done-title {
	margin-bottom: 10px;
	font-size: 1.375rem;
	font-weight: 700;
	color: var(--color-primary-dark);
}

/* .auth__submit vốn là <button>; ở màn xác nhận nó là <a> nên phải bỏ gạch chân. */
.auth__submit { text-decoration: none; }

/* ==========================================================================
   Thông báo trong khu tài khoản (do_action woocommerce_account_content).
   --------------------------------------------------------------------------
   Đăng ký chạy qua AJAX rồi chuyển trang ngay (assets/js/mt-ui.js §13) nên mọi
   thứ vẽ trong popup biến mất trước khi kịp đọc. Lời chúc mừng được đẩy sang
   phiên Woo và in ở trang tài khoản — theme không style class của Woo nên phải
   khai ở đây, dùng lại bộ màu của .auth__notices cho đồng bộ.
   ========================================================================== */
.woocommerce-MyAccount-content > .woocommerce-message,
.woocommerce-MyAccount-content > .woocommerce-error,
.woocommerce-MyAccount-content > .woocommerce-info,
.woocommerce-MyAccount-content .woocommerce-notices-wrapper .woocommerce-message,
.woocommerce-MyAccount-content .woocommerce-notices-wrapper .woocommerce-error,
.woocommerce-MyAccount-content .woocommerce-notices-wrapper .woocommerce-info {
	margin: 0 0 var(--spacing-md);
	padding: 14px 22px;
	border-radius: var(--radius-md);
	list-style: none;
	font-size: 1.0625rem;
	line-height: 1.5;
}

.woocommerce-MyAccount-content .woocommerce-message,
.woocommerce-MyAccount-content .woocommerce-notice { border: 1px solid #b7e0c6; background: #e7f4ec; color: #1f7a45; }
.woocommerce-MyAccount-content .woocommerce-error  { border: 1px solid #f3c2c2; background: #fdeaea; color: #a32020; }
.woocommerce-MyAccount-content .woocommerce-info   { border: 1px solid #f2d9b8; background: #fdf0e3; color: #a2541a; }

.woocommerce-MyAccount-content .woocommerce-message li,
.woocommerce-MyAccount-content .woocommerce-error li,
.woocommerce-MyAccount-content .woocommerce-info li { list-style: none; }

.woocommerce-MyAccount-content .woocommerce-message a,
.woocommerce-MyAccount-content .woocommerce-error a,
.woocommerce-MyAccount-content .woocommerce-info a { color: inherit; text-decoration: underline; }

/* ==========================================================================
   Hiệu ứng chờ cho nút đăng nhập / đăng ký / quên mật khẩu / đặt mật khẩu mới.
   --------------------------------------------------------------------------
   Hai form sau gửi POST thường (trang tải lại) nên trước đây bấm xong không có
   phản hồi gì trong lúc chờ. Không dùng [disabled] cho chúng: nút bị disable thì
   name/value không được gửi đi — dùng pointer-events + cờ JS để chặn bấm hai lần.
   ========================================================================== */
.auth__submit.is-loading {
	position: relative;
	pointer-events: none;
	opacity: .8;
}

.auth__submit.is-loading::after {
	content: "";
	position: absolute;
	top: 50%;
	right: 22px;
	width: 20px;
	height: 20px;
	margin-top: -10px;
	border: 2px solid rgba(255, 255, 255, .45);
	border-top-color: #fff;
	border-radius: 50%;
	animation: mt-recalc-spin .7s linear infinite;   /* dùng lại keyframes đã có */
}

@media (prefers-reduced-motion: reduce) {
	.auth__submit.is-loading::after { animation-duration: 2.4s; }
}

/* ==========================================================================
   Thông báo khi áp mã giảm giá ở trang Thanh toán (mt-ui.js §13b).
   ========================================================================== */
.mt-coupon__notice {
	margin: 10px 0 0;
}

.mt-coupon__notice .woocommerce-error,
.mt-coupon__notice .woocommerce-message,
.mt-coupon__notice .woocommerce-info {
	margin: 0;
	padding: 10px 16px;
	border-radius: var(--radius-sm, 8px);
	list-style: none;
	font-size: .9375rem;
	line-height: 1.45;
}

.mt-coupon__notice .woocommerce-message { border: 1px solid #b7e0c6; background: #e7f4ec; color: #1f7a45; }
.mt-coupon__notice .woocommerce-error   { border: 1px solid #f3c2c2; background: #fdeaea; color: #a32020; }
.mt-coupon__notice .woocommerce-info    { border: 1px solid #f2d9b8; background: #fdf0e3; color: #a2541a; }
.mt-coupon__notice li { list-style: none; }

.co-coupon.is-busy { opacity: .65; }
.co-coupon.is-busy button { cursor: progress; }

