/* CSS dùng chung cho toàn bộ site VPath — xem DESIGN_SYSTEM.md để biết quy tắc thiết kế. */

/* ---- Chống nháy trang lúc mới mở (v-cloak) ----
   Mỗi trang là 1 file HTML tĩnh, Vue dựng lại giao diện ngay trên chính khối HTML đó. Trong khoảnh
   khắc HTML đã tải xong nhưng Vue chưa chạy, trình duyệt vẽ nguyên bản thô: chữ {{ ... }} hiện ra,
   mọi khối v-if bung hết, các modal "fixed inset-0" đè kín màn hình (trang Khóa Học bung một lúc
   cả giỏ hàng, hộp chi tiết khóa và hộp "Đánh Giá & Nhận Xét") — và vì Vue chưa gắn sự kiện nên
   bấm nút đóng không ăn, phải F5. Thuộc tính v-cloak đặt trên #app giữ trang ẩn cho tới khi Vue
   dựng xong; Vue tự gỡ thuộc tính này ngay lúc mount, nên trang chỉ hiện ra khi đã đúng hình. */
[v-cloak] { display: none !important; }
/* Trong lúc #app còn ẩn, giữ nền giấy phủ kín màn hình để không lóe ra một mảng trắng. */
body:has(> [v-cloak]) { min-height: 100vh; }

/* ---- Khối prerender (sinh bởi scripts/sinh-trang-tinh.js) ----
   Đứng TRƯỚC #app trong DOM, là bản tĩnh của nội dung vốn phải chờ JS gọi API (danh mục khóa
   học, thống kê kho đề, FAQ) — DÀNH RIÊNG cho bot/trình duyệt không chạy JS (khi đó #app bị
   v-cloak ẩn vĩnh viễn, khối tĩnh là toàn bộ trang).

   Người dùng thật KHÔNG được thấy khối này: bản thử đầu tiên cho hiện nó rồi swap sang app
   sau khi API về — chủ dự án báo ngay "trang giật giật, hiện cái gì đấy trước" (21/08).
   Cách làm hiện tại: một dòng <script> inline nằm NGAY TRÊN khối (sinh-trang-tinh.js chèn)
   chạy đồng bộ trước khi khối được vẽ, thêm class co-js vào <html> — rule dưới đây ẩn khối
   từ khung hình đầu tiên, người dùng chỉ thấy đúng luồng cũ của app (v-cloak -> app).
   Bot không chạy JS -> không có co-js -> khối hiện nguyên vẹn. */
.co-js #prerender-khoa-hoc, .co-js #prerender-kho-de, .co-js #prerender-faq { display: none !important; }

.reveal { opacity: 0; transform: translateY(16px); transition: opacity 0.5s ease-out, transform 0.5s ease-out; }
.reveal.is-visible { opacity: 1; transform: translateY(0); }

.label { letter-spacing: 0.1em; }

/* Gạch chân tay vẽ cho từ khóa trong H1 — thay cho gradient-text kiểu SaaS */
.hand-underline { position: relative; white-space: nowrap; }
.hand-underline::after {
    content: '';
    position: absolute;
    left: -2px; right: -4px; bottom: 0.02em;
    height: 0.3em;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 16' preserveAspectRatio='none'%3E%3Cpath d='M2 11 C 40 4, 80 14, 100 8 S 160 3, 198 9' stroke='%23C08A2E' stroke-width='5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
    z-index: -1;
}

/* Vân chấm mờ cho khối nền tối, thay cho blob gradient */
.grain-dark {
    background-image: radial-gradient(rgba(255,255,255,0.06) 1px, transparent 1px);
    background-size: 18px 18px;
}

/* Tông ảnh đồng nhất theo màu navy — thay cho ảnh stock rời rạc mỗi ảnh một tông màu khác nhau.
   Cách dùng: bọc <img> trong 1 container "relative" có thêm class "brand-photo". */
.brand-photo img { filter: grayscale(30%) contrast(1.05); }
.brand-photo::after {
    content: '';
    position: absolute; inset: 0;
    background: #16324F;
    mix-blend-mode: color;
    opacity: 0.28;
    pointer-events: none;
}

/* Linh vật hoạt hình (mascot) — dùng chung nếu xuất hiện ở nhiều trang.
   .mascot-bounce: bập bênh nhẹ toàn thân. .mascot-point: tay chỉ lắc lư liên tục để hút mắt xuống nút bên dưới. */
@keyframes mascot-bounce {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-10px); }
}
.mascot-bounce { animation: mascot-bounce 2.6s ease-in-out infinite; transform-origin: center bottom; }

@keyframes mascot-point {
    0%, 100% { transform: rotate(0deg) translateY(0); }
    50% { transform: rotate(6deg) translateY(4px); }
}
/* transform-box: fill-box + 0% 0% neo gốc xoay vào góc trên-trái của chính path cánh tay (đúng vị trí bả vai)
   thay vì toạ độ pixel cố định — không lệch dù SVG được scale/hiển thị ở kích thước khác. */
.mascot-point { animation: mascot-point 1.3s ease-in-out infinite; transform-box: fill-box; transform-origin: 0% 0%; }
