/*
 * Bổ sung/tinh chỉnh riêng cho frontend v5 (nạp SAU theme.css).
 * Chỗ để những thứ theme.css v4 chưa có, tránh sửa thẳng file lớn.
 */

/* Tắt scroll-behavior:smooth mặc định của Bootstrap reboot (:root) — nó làm
 * position:sticky (vd nút "Bắt đầu thi" ở .exam-cta) trôi theo thao tác vuốt
 * trên mobile Safari/Chrome thay vì dính đúng vị trí. Những chỗ cần cuộn mượt
 * đã tự truyền behavior:'smooth' riêng trong JS (exam.js, map-korea.js) nên tắt
 * default này không ảnh hưởng gì. */
:root { scroll-behavior: auto; }

/* ---------- Header: 1 hàng, không đè lên hero ----------
 * theme.css để .banner absolute + #maincontent margin-top:65px (bù chiều cao).
 * Trong BS5, .navbar-header là block nên logo và menu rớt 2 hàng -> navbar cao
 * gấp đôi, đè khuất dòng eyebrow của hero. Cho navbar nằm trong luồng (relative)
 * và xếp 1 hàng bằng flex ở desktop -> hết đè, khớp bản v4.
 *
 * padding:0 — Bootstrap 5 tự thêm padding:.5rem 1rem cho .navbar (v4 không có
 * class này, mọi cỡ đã tính đủ ở .navbar-brand/.header-tools/#menu = 65px sẵn
 * rồi) nên bị cộng dư 16px cao -> logo/menu trông như bị đệm thêm khoảng trắng
 * trên dưới, cả banner cao hơn 65px thật sự.
 */
.navbar.banner { position: relative !important; padding: 0 !important; }
#maincontent { margin-top: 0 !important; }

/* ---------- Header dính khi cuộn LÊN ----------
 * Mặc định header vẫn nằm trong luồng (position:relative ở trên) — không đổi
 * gì khi cuộn xuống. theme.js chỉ chuyển sang position:fixed lúc đang cuộn LÊN
 * (và chưa ở đỉnh trang), đồng thời gán chiều cao cho .hdr-spacer đúng bằng
 * header lúc chuyển để trang khỏi giật (bù đúng khoảng trống header để lại
 * trong luồng). Cuộn lên tới đỉnh (scrollY=0) thì bỏ hẳn 2 class này, header
 * về lại vị trí tĩnh ban đầu.
 */
.hdr-spacer { height: 0; }
.navbar.banner.hdr-fixed {
    position: fixed !important;
    top: 0; left: 0; right: 0;
    transform: translateY(-100%);
    transition: transform .35s ease;
    z-index: 1030;
}
.navbar.banner.hdr-fixed.hdr-show { transform: translateY(0); }

@media (min-width: 992px) {
    .banner > .container > [class*="col-"] {
        display: flex;
        align-items: center;
        flex-wrap: nowrap;
        gap: 10px;
    }
    .banner .navbar-header { flex: 0 0 auto; margin: 0; }
    .banner #menu { flex: 1 1 auto; }
}

@media (max-width: 991px) {
    .banner .navbar-header {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 12px;
    }
}

/* ---------- Menu mobile: NGĂN KÉO (off-canvas drawer) ----------
 * theme.css (bê từ v4) mở #menu kiểu accordion NẰM TRONG LUỒNG (đẩy trang
 * xuống), nhưng submenu con (.menucategory > ul) lại luôn position:absolute
 * (không có nhánh riêng cho mobile) — mở 1 danh mục cấp 1 (vd "Du Học Hàn
 * Quốc") là nó ĐÈ LÊN các mục cấp 1 khác bên dưới thay vì đẩy giãn ra (bug
 * Ba báo qua ảnh chụp). Đổi hẳn sang ngăn kéo trượt từ trái, có lớp phủ nền
 * + nút đóng — submenu giờ nằm trong luồng ngăn kéo (đẩy giãn thật), hết đè.
 *
 * Đóng/mở KHÔNG viết lại: nút X + lớp phủ đều tự mang data-bs-toggle="collapse"
 * data-bs-target="#menu" giống hệt nút 3 gạch có sẵn (header.php) — Bootstrap
 * 5 tự lo toggle + đồng bộ aria-expanded ở MỌI phần tử trỏ chung 1 target.
 * CSS chỉ bám theo class .show mà Bootstrap tự gắn/gỡ cho #menu (kể cả lớp
 * phủ, qua tổ hợp anh em kề "#menu.show ~ .menu-backdrop"). Riêng khoá cuộn
 * trang (body.menu-open) cần 1 đoạn JS nhỏ ở theme.js lắng nghe đúng 2 sự
 * kiện show.bs.collapse/hide.bs.collapse có sẵn của Bootstrap — không có
 * cách CSS thuần nào gắn class lên <body> dựa vào trạng thái của #menu.
 *
 * Desktop (≥992px) KHÔNG bị đụng: toàn bộ khối này nằm trong @media
 * (max-width:991px); #menu vẫn display:flex nằm ngang như cũ (theme.css
 * dòng ~1138), 2 phần tử mới (.menu-close/.menu-backdrop) có base display:none
 * nên vô hình ở mọi cỡ màn hình lớn hơn. Vị trí #navbarToggleDot (chấm thông
 * báo trên nút 3 gạch, NẰM NGOÀI #menu) và .usertop-dot/.usertop-menu-count
 * (NẰM TRONG #menu nhưng chỉ đổi qua toggle [hidden] + textContent) không hề
 * đổi cấu trúc — ainotify.js vẫn tìm thấy nguyên 3 phần tử đó, chỉ khác chỗ
 * chúng hiện ra (trong ngăn kéo thay vì accordion cũ).
 */
.menu-backdrop, .menu-close { display: none; }

body.menu-open { overflow: hidden; }

@media (max-width: 991px) {
    .menu-backdrop {
        display: block;
        position: fixed; inset: 0; z-index: 1040;
        background: rgba(20, 12, 4, .45);
        opacity: 0; pointer-events: none;
        transition: opacity .28s ease;
    }
    #menu.navbar-collapse.show ~ .menu-backdrop { opacity: 1; pointer-events: auto; }

    /* Trình duyệt mobile mặc định tô 1 lớp xám/trắng mờ mỗi lần chạm link
       (-webkit-tap-highlight-color) — trên nền nâu tối của ngăn kéo nhìn như
       vệt trắng bệch, phải tắt hẳn và tự lo trạng thái chạm bằng CSS riêng. */
    #menu.navbar-collapse, #menu.navbar-collapse a, #menu.navbar-collapse button,
    .menu-close, .menu-backdrop {
        -webkit-tap-highlight-color: transparent;
    }

    #menu.navbar-collapse {
        display: block !important;
        position: fixed; top: 0; left: 0; bottom: 0;
        width: 86%; max-width: 320px;
        margin: 0;
        background: linear-gradient(165deg, #402a12, #2f2011 65%);
        box-shadow: 16px 0 40px rgba(0, 0, 0, .35);
        z-index: 1045;
        transform: translateX(-100%);
        visibility: hidden;
        transition: transform .32s cubic-bezier(.22, .9, .32, 1), visibility 0s linear .32s;
    }
    #menu.navbar-collapse.show {
        transform: translateX(0);
        visibility: visible;
        transition: transform .32s cubic-bezier(.22, .9, .32, 1), visibility 0s linear 0s;
    }
    /* Bootstrap Collapse chỉ gắn .show SAU KHI animation chiều cao nội bộ của
       chính nó chạy xong (350ms mặc định) — nếu để nguyên, ngăn kéo sẽ "đứng
       hình" gần 350ms rồi mới bắt đầu trượt (khớp .show quá trễ). Ép animation
       chiều cao nội bộ đó gần như tức thời để .show đổi ngay khi bấm, nhường
       toàn bộ hiệu ứng trượt cho transition transform ở trên tự lo. */
    #menu.navbar-collapse.collapsing { transition: height .01s linear !important; }
    /* Cùng selector (khớp độ đặc thù) với #menu.navbar-collapse.collapse.show
       của theme.css để chắc chắn thắng — nó đang set overflow:visible!important
       (đúng cho accordion-trong-luồng cũ) nhưng ngăn kéo cần TỰ cuộn dọc riêng. */
    #menu.navbar-collapse.collapse.show {
        overflow-y: auto !important; overflow-x: hidden !important; max-height: none !important;
        -webkit-overflow-scrolling: touch;
    }

    .menu-close {
        display: flex; align-items: center; justify-content: center;
        width: 34px; height: 34px; margin: 12px 12px 0 auto;
        border: 0; border-radius: 9px; background: rgba(255, 255, 255, .08);
        color: #f1e6d5; font-size: 16px; cursor: pointer;
    }
    .menu-close:hover, .menu-close:focus-visible { background: rgba(255, 255, 255, .16); }
    .menu-close:focus-visible { outline: 2px solid var(--accent-soft, #f0a638); outline-offset: 2px; }

    /* Mục cấp 1: cỡ chữ 13px của theme.css hơi nhỏ trên điện thoại thật, tăng
       nhẹ + nới khoảng đệm cho dễ bấm. Bấm vào mục đang mở (.mopen) KHÔNG
       dùng gạch chân cam nữa (đó là kiểu "active/hover" của desktop, để lẫn
       trên mobile nhìn rối) — đổi sang tô nền nhẹ, đồng bộ với cách báo
       "đang mở" của submenu bên dưới. */
    #menu > ul > li > a {
        display: block !important; width: 100%; box-sizing: border-box;
        font-size: 14.5px !important; padding: 13px 34px 13px 15px !important;
    }
    #menu > ul > li.has-sub.mopen > a {
        background: rgba(255, 255, 255, .05);
        border-bottom-color: transparent !important;
    }

    /* Submenu: bỏ position:absolute của theme.css -> nằm trong luồng ngăn
       kéo, đẩy giãn thay vì đè lên mục cấp 1 khác (fix bug gốc). Bỏ luôn
       viền cam/bo tròn/đổ bóng kiểu "thẻ nổi trên desktop" (theme.css,
       #menu .menucategory > ul — không có nhánh mobile riêng nên tràn xuống
       đây) vì trong ngăn kéo tối nó lạc tông; chỉ giữ 1 vạch dẫn bên trái cho
       biết đây là mục con. */
    #menu .menucategory > ul {
        position: static !important;
        width: auto !important; max-width: none !important; white-space: normal !important;
        box-shadow: none !important; border-top: 0 !important; border-radius: 0 !important;
        background: transparent !important;
        margin: 0 !important; padding: 2px 0 6px 24px !important;
        border-left: 1px solid rgba(255, 255, 255, .12) !important;
        margin-left: 26px !important;
    }
    #menu .menucategory > ul a {
        border-bottom: 0 !important;
        color: #d9c9ab !important; padding: 8px 10px !important;
        font-size: 13.5px !important; font-weight: 500 !important; text-transform: none !important;
        border-radius: 7px !important;
    }
    #menu .menucategory > ul li a:hover,
    #menu .menucategory > ul li a:focus-visible { color: #fff !important; background: rgba(255, 255, 255, .07); }

    /* Ba muốn: bỏ hẳn avatar, menu tài khoản nối NGAY sau menu chính (đứng
       TRƯỚC tìm kiếm/ngôn ngữ), tìm kiếm + ngôn ngữ đẩy xuống cuối cùng —
       dùng order của flexbox, không đổi thứ tự HTML thật (khỏi đụng
       header.php/usertop.php, badge thông báo an toàn). */
    .header-tools { flex-wrap: wrap !important; row-gap: 10px; }
    /* Chỉ đẩy lên đầu + full-width khi ĐÃ đăng nhập (có .usertop, tức có danh
       sách để hiện). Khách (.usertop-guest, chỉ 1 icon "Đăng nhập") KHÔNG có
       gì để xổ ra thêm — giữ nguyên chung hàng với tìm kiếm/ngôn ngữ như cũ,
       khỏi tự nhảy lên thành 1 hàng riêng trông lạc lõng. */
    .usertop-wrap:has(.usertop) { flex: 1 1 100% !important; order: -1; width: 100% !important; }
    .header-tools .usertop-toggle { display: none !important; }
    /* theme.css cho .usertop display:inline-flex (avatar + mũi tên nằm NGANG,
       kiểu desktop) — trên mobile phải là khối DỌC để .usertop-menu chiếm
       full-width, không bị bó theo chiều rộng avatar (giờ đã ẩn). */
    .header-tools .usertop { display: block !important; width: 100%; }
    .header-tools .usertop .usertop-menu {
        display: block !important;
        position: static !important; left: auto !important; right: auto !important; top: auto !important;
        width: 100% !important; max-width: none !important; min-width: 0 !important;
        margin: 0 !important; padding: 4px 0 !important;
        background: rgba(255, 255, 255, .05) !important;
        border: 0 !important; box-shadow: none !important; border-radius: 10px !important;
    }
    .usertop-menu .usertop-hello {
        padding: 10px 14px !important; border-bottom: 1px solid rgba(255, 255, 255, .1) !important;
        color: #c9b696 !important; font-size: 12.5px !important;
    }
    .usertop-menu .usertop-name { color: #fff !important; }
    .usertop-menu .divider { display: none !important; }
    .usertop-menu > li > a { color: #f1e6d5 !important; padding: 10px 14px !important; font-size: 13.5px !important; }
    .usertop-menu > li > a:hover { background: rgba(255, 255, 255, .06) !important; }
    .usertop-menu > li > a i { color: var(--accent-soft, #f0a638) !important; }
}
@media (prefers-reduced-motion: reduce) {
    #menu.navbar-collapse, .menu-backdrop { transition: none !important; }
}

/* ---------- Slide đối tác dùng chung (partnerSlider) ----------
 * 1 hàng trượt ngang bằng JS thuần (theme.js, [data-partner-slider]) — mỗi lần
 * bấm mũi tên trượt đúng 1 khung nhìn, số thẻ hiện cùng lúc giảm dần theo màn
 * hình. Dùng chung cho cả "Trường đại học liên kết" (thẻ có tên) và dải logo
 * đối tác cuối trang (chỉ có logo) — 2 nơi khác nhau qua modifier bên dưới.
 */
.partnerSlider { position: relative; padding: 0 6px; }
.partnerSlider-viewport { overflow: hidden; }
.partnerSlider-track {
    display: flex;
    gap: 14px;
    transition: transform .35s ease;
}
.partnerSlider-item {
    flex: 0 0 calc((100% - 3 * 14px) / 4);
    max-width: calc((100% - 3 * 14px) / 4);
}
.partnerSlider-nav {
    position: absolute;
    top: 43%;
    transform: translateY(-50%);
    z-index: 2;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    border: none;
    background: rgba(0, 0, 0, .35);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: background .15s, opacity .15s;
}
.partnerSlider-nav:hover { background: rgba(0, 0, 0, .55); }
.partnerSlider-nav[disabled] { opacity: .3; cursor: default; pointer-events: none; }
.partnerSlider-prev { left: -13px; }
.partnerSlider-next { right: -13px; }
@media (max-width: 991px) {
    .partnerSlider-item { flex: 0 0 calc((100% - 2 * 14px) / 3); max-width: calc((100% - 2 * 14px) / 3); }
}
@media (max-width: 767px) {
    .partnerSlider-item { flex: 0 0 calc((100% - 14px) / 2); max-width: calc((100% - 14px) / 2); }
}
@media (max-width: 575px) {
    .partnerSlider { padding: 0 30px; }
    .partnerSlider-item { flex: 0 0 100%; max-width: 100%; }
    .partnerSlider-nav { width: 32px; height: 32px; }
    .partnerSlider-prev { left: -6px; }
    .partnerSlider-next { right: -6px; }
}

/* ---------- Đồng nhất thẻ trường đối tác (khắc phục tên to/nhỏ lệch) ---------- */
/* Ảnh cùng tỉ lệ, tên căn trái đều nhau, thẻ cao bằng nhau trong 1 hàng. */
.homeschool .newsitem { display: flex; flex-direction: column; height: 100%; margin: 0; }
.homeschool .newsitem > h3 { margin-top: auto; }

/* ---------- Học bổng GSK: partnerSlider nằm trong col-lg-8 (hẹp hơn cả trang) ----------
 * Cỡ mặc định của partnerSlider (4 thẻ/hàng) tính theo cả .container nên đặt ở
 * cột 8/12 sẽ ra thẻ hẹp bất thường — thu còn 3/2/1 khớp lưới cũ (col-md-4/col-sm-6).
 */
.hocbong .newsitem { height: 100%; }
.hocbong .partnerSlider-item { flex: 0 0 calc((100% - 2 * 14px) / 3); max-width: calc((100% - 2 * 14px) / 3); }
@media (max-width: 767px) {
    .hocbong .partnerSlider-item { flex: 0 0 calc((100% - 14px) / 2); max-width: calc((100% - 14px) / 2); }
}
@media (max-width: 575px) {
    .hocbong .partnerSlider-item { flex: 0 0 100%; max-width: 100%; }
}

/* ---------- Dải logo đối tác cuối trang (banner zone footer_partner) ----------
 * Cùng cơ chế slide với partnerSlider ở trên, chỉ đổi cỡ thẻ (nhiều logo hơn
 * mỗi hàng vì không có tên trường) và bỏ khung viền quanh logo cho gọn.
 */
.footer-partners {
    padding: 26px 0;
    background: var(--paper, #faf7f1);
    border-top: 1px solid var(--line, #e8dfce);
}
.footer-partners .fp-head { text-align: center; margin-bottom: 18px; }
.footer-partners .fp-head .title {
    position: relative;
    margin: 0 !important;
    padding-bottom: 14px;
    font-size: clamp(18px, 2.4vw, 24px) !important;
    text-transform: uppercase;
}
.footer-partners .fp-head .title::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: 0;
    transform: translateX(-50%);
    width: 54px;
    height: 3px;
    border-radius: 3px;
    background: var(--accent);
}
.footer-partners .partnerSlider-item {
    flex: 0 0 calc((100% - 4 * 14px) / 5);
    max-width: calc((100% - 4 * 14px) / 5);
}
.footer-partners .fp-item {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 74px;
    padding: 8px 10px;
    background: #fff;
    border: 1px solid var(--line, #e8dfce);
    border-radius: 12px;
    box-shadow: var(--shadow-sm, 0 2px 8px rgba(74, 45, 12, .07));
    transition: transform .18s, box-shadow .18s;
}
.footer-partners .fp-item:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow, 0 8px 24px rgba(74, 45, 12, .12));
}
.footer-partners .fp-item img {
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
    object-fit: contain;
}
@media (max-width: 991px) {
    .footer-partners .partnerSlider-item { flex: 0 0 calc((100% - 3 * 14px) / 4); max-width: calc((100% - 3 * 14px) / 4); }
}
@media (max-width: 575px) {
    .footer-partners .partnerSlider-item { flex: 0 0 calc((100% - 2 * 14px) / 3); max-width: calc((100% - 2 * 14px) / 3); }
    .footer-partners .fp-item { height: 60px; }
}

/* ---------- Nút 3 gạch (hamburger): theme.css (bê từ v4) trông cậy Bootstrap 3
   tự ẩn .navbar-toggle mặc định (chỉ hiện lại ở @media ≤991px chính nó khai).
   BS5 (đang dùng ở v5) không có rule mặc định đó nên nút lộ ra cả desktop, đè
   lên logo — bù lại đúng 1 rule Bootstrap 3 vốn có. PHẢI bọc trong @media
   (min-width:992px): để trần thì cùng specificity với rule "hiện lại" ở
   ≤991px của theme.css, mà web.css nạp SAU nên luôn thắng — ẩn mất luôn cả ở
   mobile, khoá tay khách không mở được menu (bug thật, phát hiện khi rà lại
   header). ---------- */
@media (min-width: 992px) {
    .navbar-toggle { display: none; }
}

/* ---------- Marker chấm tròn đè lên chữ menu ----------
 * #menu > ul chuyển display:flex ở desktop (xem trên) nhưng theme.css chỉ đặt
 * list-style:none cho .menucategory > ul (submenu), không đặt cho chính <ul>
 * cấp 1 — trình duyệt vẫn vẽ ::marker của <li> đè lên chữ khi cha là flex.
 */
#menu > ul { list-style: none; margin: 0; padding: 0; }

/* ---------- header-tools: dropdown THẬT của Bootstrap 5 ----------
 * v4 dùng jQuery (Bootstrap 3) nên .open được gắn cho DIV .dropdown cha; ở đây
 * dùng thẳng data-bs-toggle="dropdown" của Bootstrap 5 — nó gắn .show cho
 * CHÍNH nút bấm, không phải div cha, nên nhắm lại hiệu ứng mở/hover vào đó.
 * Đồng thời bỏ tam giác Bootstrap tự thêm (::after) ở cả 3 nút: tìm kiếm chưa
 * từng có tam giác ở v4; ngôn ngữ/user đã có sẵn icon fa-caret-down riêng nên
 * tam giác của Bootstrap chỉ là một mũi tên thừa đứng cạnh icon kia.
 */
#searchbtn::after, .langswitch-toggle::after, .usertop-toggle::after { display: none; }
#searchbtn.show, .searchform .dropdown-menu.show { color: #e29218; }
.searchform .dropdown-menu.show { border: none; padding: 0; }
.langswitch-toggle.show .fa-caret-down, .usertop-toggle.show .fa-caret-down { color: #e29218; opacity: 1; }

/* ---------- 3 icon cao BẰNG NHAU (34px, khớp avatar user) ----------
 * theme.css cho .searchform>.fa-search/.langswitch-toggle/.usertop-toggle
 * chung 1 rule "padding:6px 0" — hồi v4 cờ chỉ 26px nên cộng padding vẫn gần
 * bằng avatar; giờ cờ lên 34px thì cộng thêm padding làm nó cao vọt hẳn lên
 * (46px) so với avatar/search -> bỏ padding, ép cả khối về đúng 34px, icon tìm
 * kiếm phóng to lên cho cân với 2 khối đặc màu (cờ/avatar) bên cạnh.
 */
#searchbtn, .langswitch-toggle, .usertop-toggle, .usertop-guest { height: 34px; padding: 0; }
#searchbtn { width: 34px; justify-content: center; font-size: 22px; }

/* header-tools > div (.searchform/.langswitch/.usertop-wrap) là <div> thường
 * (Bootstrap .dropdown chỉ set position:relative, không set display) nên icon
 * inline-flex 34px bên trong bị trình duyệt canh theo BASELINE của dòng chữ ẩn
 * của div cha (chừa khoảng trống dưới cho đuôi chữ như "g/y") thay vì canh
 * giữa thật -> lệch lên trên một chút, thấy rõ nhất ở cờ (khối vuông cạnh
 * thẳng). Cho chính các div bọc này flex + align-items:center để canh bằng
 * flexbox, bỏ hẳn kiểu canh baseline dễ lệch. */
.header-tools > div { display: flex; align-items: center; }

/* ---------- Ngôn ngữ: cờ ảnh vuông bo góc nhẹ (kiểu dáng .langcur-img/
 * .btn-flag-item img đã có sẵn ở theme.css — v4 vốn cũng dùng ảnh cờ, không
 * phải emoji, khỏi viết lại). Riêng cỡ cờ trên nút: v4 để 26px, Ba muốn to
 * bằng avatar user (34px) nên ghi đè đúng 1 chỗ này. Không còn nền tròn bọc
 * ngoài (khác bản đầu, thấy lệch tông với icon user/tìm kiếm bên cạnh). ---------- */
.langswitch-toggle .langcur-flag { line-height: 1; display: inline-flex; }

/* Badge số cạnh mục menu "Bài thi của tôi" — cùng tông cam với .usertop-dot
 * (theme.css) treo trên avatar, chỉ nhỏ/dẹt hơn vì nằm cạnh chữ chứ không đè
 * lên ảnh tròn. */
.usertop-menu-count { display: inline-block; min-width: 16px; height: 16px; padding: 0 5px;
    margin-left: 4px; background: #e29218; color: #fff; font-size: 10.5px; font-weight: bold;
    line-height: 16px; text-align: center; border-radius: 8px; vertical-align: middle; }
.usertop-menu-count[hidden] { display: none; }
.langswitch-toggle .fa-caret-down { font-size: 10px; }
.langswitch-toggle .langcur-img { width: 34px; height: 34px; }
.langswitch .dropdown-menu {
    min-width: 175px; padding: 6px; border: none; border-radius: 12px;
    box-shadow: 0 12px 30px rgba(40, 25, 6, .18);
}
.langswitch .btn-flag-item {
    display: flex; align-items: center; gap: 10px;
    padding: 5px 0; border-radius: 8px; color: #333; font-size: 14px;
    transition: background .12s;
}
.langswitch .btn-flag-item:hover { background: #f5efe2; color: #333; text-decoration: none; }
.langswitch .btn-flag-item.active { background: #fdf1de; color: #b9660b; font-weight: 600; }
.langswitch .btn-flag-emoji { font-size: 18px; line-height: 1; }

/* ---------- Modal đăng nhập/đăng ký DÙNG CHUNG (auth.js + auth_modal.php) ---------- */
body.modal-open { overflow: hidden; }
.authmodal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 99999; background: rgba(0, 0, 0, .55); overflow: auto; }
.authmodal .modal-dialog { max-width: 420px; width: 92%; margin: 6vh auto; }
.authmodal-content { position: relative; background: #fff; border-radius: 18px; padding: 32px 28px 20px; box-shadow: 0 20px 60px rgba(0, 0, 0, .25); }
.authmodal-close { position: absolute; top: 14px; right: 16px; border: 0; background: none; font-size: 26px; line-height: 1; color: #555; cursor: pointer; opacity: .7; }
.authmodal-close:hover { opacity: 1; }
.authmodal-title { text-align: center; font-size: 26px; font-weight: 700; margin: 6px 0 8px; color: #111; }
.authmodal-sub { text-align: center; font-size: 14px; color: #666; margin: 0 0 22px; line-height: 1.5; }
.authmodal-spam { text-align: center; font-size: 12px; color: #e67e22; margin: -14px 0 18px; line-height: 1.5; }
.authmodal-expiry { text-align: center; font-size: 12.5px; color: #888; margin: -6px 0 16px; }
.authmodal-expiry b { color: #555; font-variant-numeric: tabular-nums; }
.authmodal-consent { text-align: center; font-size: 12px; color: #888; margin: 12px 0 0; line-height: 1.5; }
.authmodal-consent a { color: #666; text-decoration: underline; }
.authmodal-consent a:hover { color: #333; }
.astep-title { text-align: center; font-size: 18px; font-weight: 700; margin: 4px 0 16px; color: #111; }
.authmodal .auth-gbtn-wrap { display: flex; justify-content: center; margin-bottom: 12px; overflow: hidden; }
.authmodal .abtn {
    display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; border-radius: 999px;
    padding: 13px 16px; font-size: 15px; font-weight: 600; cursor: pointer; margin-bottom: 12px;
    border: 1px solid #d9d9e3; background: #fff; color: #111; transition: .15s;
}
.authmodal .abtn-dark { background: #37240f; color: #fff; border-color: #37240f; }
.authmodal .abtn-dark:hover { background: #241507; }
.authmodal .abtn-fb { background: #1877f2; color: #fff; border-color: #1877f2; }
.authmodal .abtn-fb:hover { background: #145dbf; }
.authmodal .auth-or { position: relative; text-align: center; margin: 16px 0; }
.authmodal .auth-or:before { content: ""; position: absolute; top: 50%; left: 0; right: 0; height: 1px; background: #e5e5e5; }
.authmodal .auth-or span { position: relative; background: #fff; padding: 0 12px; color: #999; text-transform: uppercase; font-size: 12px; }
.authmodal .ainput { width: 100%; border: 1px solid #cfcfd6; border-radius: 12px; padding: 13px 15px; font-size: 15px; margin-bottom: 12px; outline: none; }
.authmodal .ainput:focus { border-color: #df860d; }
.authmodal .ainput-code { text-align: center; letter-spacing: 10px; font-size: 24px; font-weight: 700; }
.authmodal .aback { border: 0; background: none; color: #555; font-size: 14px; cursor: pointer; padding: 0; margin-bottom: 10px; }
.authmodal .alink { display: block; width: 100%; border: 0; background: none; color: #2563eb; font-size: 14px; cursor: pointer; margin-top: 4px; }
.authmodal .alink:disabled { color: #999; cursor: default; }
.authmodal .authmsg { border-radius: 10px; padding: 10px 12px; font-size: 14px; margin-bottom: 14px; }
.authmodal .authmsg.err { background: #fde8e8; color: #b91c1c; }
.authmodal .authmsg.ok { background: #e7f6ec; color: #166534; }
.authmodal .aloading { opacity: .6; pointer-events: none; }
@media (max-width: 479px) {
    .authmodal .modal-dialog { width: 94%; margin: 4vh auto; }
    .authmodal-content { padding: 24px 18px 16px; }
    .authmodal-title { font-size: 22px; }
    .authmodal .abtn, .authmodal .ainput { font-size: 14px; }
}

/* ---------- Breadcrumb dùng chung cho mọi trang chi tiết (web/_partials/breadcrumb.php) ----------
 * theme.css có sẵn rule .breadcrumb>li>a kiểu Bootstrap 3 nhưng thiếu "content"
 * cho dấu phân cách nên không hiện được — dùng thẳng .breadcrumb-item chuẩn
 * Bootstrap 5 (đã có sẵn dấu phân cách qua --bs-breadcrumb-divider), chỉ chỉnh
 * màu cho khớp bảng màu thương hiệu (--accent/--ink-soft).
 */
.pagecrumb { padding: 14px 0 0; }
.pagecrumb .breadcrumb { --bs-breadcrumb-divider: '/'; margin: 0; font-size: 12.5px; }
.pagecrumb .breadcrumb-item a { color: var(--ink-soft, #6f6153); text-decoration: none; }
.pagecrumb .breadcrumb-item a:hover { color: var(--accent, #df860d); }
.pagecrumb .breadcrumb-item.active { color: var(--accent, #df860d); font-weight: 600; }
.pagecrumb .breadcrumb-item + .breadcrumb-item::before { color: var(--ink-soft, #6f6153); opacity: .5; }

/* ---------- Tiêu đề trang chi tiết (trang tĩnh, và tái dùng cho các trang chi tiết tương tự) ---------- */
.page-title { font-size: clamp(24px, 3vw, 32px); line-height: 1.3; margin: 6px 0 22px; }

/* ---------- Danh sách trường theo danh mục (.catschool) ----------
 * theme.css có sẵn khung ảnh tỉ lệ cố định (aspect-ratio + object-fit:cover)
 * cho .homeschool .newsitem (carousel trang chủ) nhưng KHÔNG có cho .catschool
 * — nên ảnh thẻ trường ở trang danh sách bị thả nổi theo tỉ lệ gốc của file
 * (ảnh dọc/ảnh to là cao lênh khênh) và không bo góc theo card. Lặp lại đúng
 * pattern 4:3 đã có, chỉ đổi selector.
 */
.catschool .newsitem { overflow: hidden; }
.catschool .newsitem > a { display: block; aspect-ratio: 4/3; overflow: hidden; background: var(--paper-2); }
.catschool .newsitem > a > .img-responsive { width: 100%; height: 100%; object-fit: cover; }

/* Tên trường dán sát mép trái/phải thẻ vì .uni-name/.uni-sub bị theme.css ép
 * padding:0 !important — đệm ngang ở chính <h3> (cha, không bị !important). */
.catschool .newsitem h3 { padding: 0 14px; }

/* Dòng đếm kết quả ("Hiển thị…"): .resbar là display:flex + justify-content:
 * space-between đặt THẲNG trên thẻ <p> chứa text xen <b> — flexbox coi mỗi
 * đoạn text/thẻ <b> là 1 flex-item riêng rồi dàn cách đều ra hết bề ngang,
 * chữ bị xé rời trông như canh đều-hai-lề. Bọc toàn bộ text trong 1 <span>
 * (xem view) để chỉ còn 1 flex-item duy nhất, không bị chia nhỏ.
 */
.resbar > span { display: block; }

/* Phân trang: theme.css chỉ đặt border-color (không có border-width/style)
 * và không có background cho .pagination>li>a — vì markup dùng thẳng <a> chứ
 * không phải .page-link của Bootstrap 5 (vốn mới có nền trắng/viền mặc định),
 * nên nút KHÔNG active hiện ra trong suốt, không viền. Bù đủ viền + nền trắng. */
.pagination > li > a, .pagination > li > span { border-style: solid; border-width: 1.5px; background: #fff; }

/* ---------- Bình luận (comment.js + web/_partials/comment*.php) ----------
 * Không có sẵn trong theme.css v4 (giao diện mới hoàn toàn) nhưng Ba chốt
 * phải là THẺ TRẮNG BO GÓC như mọi khối nội dung khác của v4 (không phải
 * mảng chữ chảy thẳng vào nền trang) — dùng lại đúng bộ biến --card/--r/
 * --shadow-sm đã có sẵn ở :root thay vì bịa màu riêng.
 */
.cmtbox {
    margin-top: 28px; background: var(--card, #fff); border-radius: var(--r, 14px);
    box-shadow: var(--shadow-sm, 0 2px 8px rgba(74,45,12,.07)); padding: 22px 24px;
}
.cmtbox-title { font-size: 19px; font-weight: 700; color: var(--brown, #37240f); margin: 0 0 16px; display: flex; align-items: center; gap: 8px; }
.cmtbox-title .cmtbox-count { font-weight: 400; color: var(--ink-soft, #6f6153); font-size: 15px; }

.cmt-divider { border: 0; border-top: 1px solid var(--line, #e8dfce); margin: 20px 0; }

.cmt-empty { background: var(--paper, #faf7f1); border-radius: 10px; padding: 16px; margin: 0; text-align: center; color: var(--ink-soft, #6f6153); font-size: 14px; }

.cmt-guestcta { background: var(--paper, #faf7f1); border-radius: 10px; padding: 18px; text-align: center; }
.cmt-guestcta p { margin: 0 0 10px; color: var(--ink-soft, #6f6153); }
.cmt-loginbtn, .cmt-sendbtn {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    background: var(--accent, #df860d); color: #fff; border: 0; border-radius: 8px;
    padding: 9px 20px; font-size: 14px; font-weight: 700; cursor: pointer; transition: background .15s;
}
.cmt-loginbtn:hover, .cmt-sendbtn:hover { background: var(--brown, #37240f); }
.cmt-sendbtn:disabled { opacity: .6; cursor: default; }

.cmt-whoami { font-size: 13.5px; color: var(--ink-soft, #6f6153); margin: 0 0 8px; }
.cmt-whoami b { color: var(--brown, #37240f); }

.cmt-form { margin: 0; }
.cmt-input {
    width: 100%; border: 1px solid var(--line, #e8dfce); border-radius: 10px; padding: 10px 12px;
    font-size: 14.5px; resize: vertical; outline: none; font-family: inherit; background: var(--paper, #faf7f1);
}
.cmt-input:focus { border-color: var(--accent, #df860d); }
.cmt-form-foot { display: flex; align-items: center; gap: 12px; margin-top: 10px; }
.cmt-form.cmt-loading { opacity: .6; pointer-events: none; }
.cmt-msg { font-size: 13px; flex: 1 1 auto; }
.cmt-msg.ok { color: #166534; }
.cmt-msg.err { color: #b91c1c; }
.cmt-cancel { border: 0; background: none; color: var(--ink-soft, #6f6153); font-size: 13px; padding: 0; cursor: pointer; }

.cmt-list { display: flex; flex-direction: column; gap: 18px; }
.cmt-list:not(:empty) { margin-bottom: 8px; }

.cmt-item { display: flex; gap: 12px; }
.cmt-item.cmt-status-0 { opacity: .75; }
.cmt-item.cmt-status-2 { opacity: .55; }
.cmt-avatar {
    flex: 0 0 auto; width: 40px; height: 40px; border-radius: 50%; background: var(--paper-2, #f2ebdd);
    display: flex; align-items: center; justify-content: center; color: var(--ink-soft, #6f6153); overflow: hidden;
}
.cmt-avatar img { width: 100%; height: 100%; object-fit: cover; }
.cmt-body { flex: 1 1 auto; min-width: 0; }
.cmt-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-bottom: 3px; }
.cmt-author { font-weight: 600; color: var(--ink, #2a1f16); font-size: 14.5px; }
.cmt-time { font-size: 12px; color: var(--ink-soft, #6f6153); }
.cmt-badge { font-size: 11px; font-weight: 600; padding: 1px 8px; border-radius: 999px; }
.cmt-badge-pending { background: #fef3c7; color: #92400e; }
.cmt-badge-hidden { background: #f3f4f6; color: #6b7280; }
.cmt-content { font-size: 14.5px; line-height: 1.6; color: var(--ink, #2a1f16); white-space: pre-line; word-break: break-word; }
.cmt-actions { display: flex; align-items: center; gap: 14px; margin-top: 4px; }
.cmt-reply-btn { border: 0; background: none; color: var(--accent, #df860d); font-size: 13px; font-weight: 600; padding: 0; cursor: pointer; }
.cmt-mod { display: inline-flex; gap: 10px; }
.cmt-modbtn { border: 0; background: none; font-size: 13px; font-weight: 600; padding: 0; cursor: pointer; }
.cmt-modbtn-ok { color: #166534; }
.cmt-modbtn-hide { color: #b91c1c; }
.cmt-modbtn-show { color: #2563eb; }

.cmt-replyform { margin-top: 10px; background: var(--paper, #faf7f1); border-radius: 10px; padding: 12px; }
.cmt-replies { margin-top: 14px; display: flex; flex-direction: column; gap: 14px; padding-left: 22px; border-left: 2px solid var(--line, #e8dfce); }
.cmt-reply .cmt-avatar { width: 32px; height: 32px; }

.cmt-more {
    display: block; margin: 4px auto 0; background: none; border: 1px solid var(--line, #e8dfce);
    color: var(--brown, #37240f); border-radius: 999px; padding: 6px 18px; font-size: 13px; cursor: pointer;
}
.cmt-more:hover { border-color: var(--accent, #df860d); color: var(--accent, #df860d); }
.cmt-more:disabled { opacity: .6; cursor: default; }

/* ---------- Danh sách Top trường Hàn Quốc (web/universities/top_ranking.php) ----------
 * Trang tra cứu tên (không ảnh), khác hẳn lưới thẻ .catschool nên viết class
 * riêng. Bảng màu theo tier (đỏ/xanh dương/xanh lá/xám) LẤY ĐÚNG mã màu đã
 * dùng cho badge .topschool1/2/3 ở theme.css để đồng bộ với card trường ở
 * trang danh mục — nhưng viết class riêng (.tier-badge--N/.tier-box--N) thay
 * vì tái dùng thẳng .topschool: class đó có nhiều rule !important (kích
 * thước, padding) khoá cứng cho vừa cái badge nhỏ đè lên ảnh, không sửa được
 * để dùng cho badge to + khung viền màu ở đây.
 */
:root {
    --tier-1: #9e3b3b; --tier-2: #33507e; --tier-3: #3d6b4a; --tier-4: #6b6358;
}


/* Hàng thẻ chú giải quy ước Top 1-4 nội bộ — cả 4 thẻ đều là link nhảy tới
 * khối tương ứng bên dưới (Top 1/2 mirror danh sách nguồn; Top 3/Hạn chế
 * không có danh sách nguồn nên khối riêng của chúng chỉ có lối tắt sang
 * trang danh mục đã lọc sẵn, xem UniversityController::topRanking). */
.topranking-legend { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin: 20px 0; }
.synced-note { margin: 6px 0 0; font-size: 12.5px; color: var(--ink-soft, #6f6153); }
.tier-empty { margin: 0; padding: 16px 20px; font-size: 14px; color: var(--ink-soft, #6f6153); }
.tier-empty a { color: var(--bc, var(--accent, #df860d)); font-weight: 600; text-decoration: none; }
.tier-empty a:hover { text-decoration: underline; }
.tier-unmatched { color: var(--ink-soft, #6f6153); font-style: italic; }
.tier-subhead { margin: 14px 0 6px; padding: 0 2px; font-size: 13px; font-weight: 700; color: var(--ink-soft, #6f6153); text-transform: uppercase; letter-spacing: .02em; }
.legend-card {
    display: block; background: #fff; border: 1px solid var(--line); border-left: 4px solid var(--lc, var(--ink-soft));
    border-radius: 10px; padding: 14px 16px; text-decoration: none; transition: box-shadow .15s, transform .15s;
}
.legend-card:hover { box-shadow: var(--shadow-sm); transform: translateY(-2px); }
.legend-card--1 { --lc: var(--tier-1); }
.legend-card--2 { --lc: var(--tier-2); }
.legend-card--3 { --lc: var(--tier-3); }
.legend-card--4 { --lc: var(--tier-4); }
.legend-title { margin: 0 0 4px; font-weight: 700; font-size: 14.5px; color: var(--ink); display: flex; align-items: center; gap: 7px; }
.legend-title .dot { width: 9px; height: 9px; border-radius: 50%; background: var(--lc); flex: 0 0 auto; }
.legend-desc { margin: 0; font-size: 12.5px; color: var(--ink-soft, #6f6153); line-height: 1.5; }

.tier { padding: 26px 0; border-bottom: 1px solid var(--line); scroll-margin-top: 90px; }
.tier:last-child { border-bottom: 0; padding-bottom: 6px; }
.tier-head { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; margin-bottom: 16px; }
.tier-badge {
    display: inline-flex; align-items: center; gap: 7px; padding: 8px 18px; border-radius: 8px;
    font-size: 14px; font-weight: 700; letter-spacing: .01em; color: #fff; background: var(--tc, var(--ink-soft));
}
.tier-badge--1 { --tc: var(--tier-1); }
.tier-badge--2 { --tc: var(--tier-2); }
.tier-badge--3 { --tc: var(--tier-3); }
.tier-badge--4 { --tc: var(--tier-4); }
.tier-desc { margin: 0; color: var(--ink-soft, #6f6153); font-size: 14px; }

/* Khung 1 nhóm Top: viền trái dày màu tier (kiểu callout), các hệ trường bên
 * trong là các "hàng" chia đôi cột nhãn/danh sách, ngăn nhau bằng gạch mảnh —
 * đúng bố cục Ba yêu cầu thay cho khối thẻ rời rạc trước đó. */
.tier-box {
    background: #fff; border: 1px solid var(--line); border-left: 5px solid var(--bc, var(--ink-soft));
    border-radius: 10px; overflow: hidden;
}
.tier-box--1 { --bc: var(--tier-1); }
.tier-box--2 { --bc: var(--tier-2); }
.tier-box--3 { --bc: var(--tier-3); }
.tier-box--4 { --bc: var(--tier-4); }

.tier-row { display: flex; gap: 20px; padding: 14px 20px; border-bottom: 1px solid var(--line); }
.tier-row:last-child { border-bottom: 0; }
.tier-row-label { flex: 0 0 170px; font-weight: 700; color: var(--bc, var(--brown)); font-size: 14.5px; }
.tier-row-list { flex: 1 1 auto; min-width: 0; font-size: 14px; line-height: 1.9; }
.tier-row-list a { color: var(--bc, var(--ink)); font-weight: 600; text-decoration: none; }
.tier-row-list a:hover { text-decoration: underline; }

@media (max-width: 767px) {
    .topranking-legend { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 575px) {
    .topranking-legend { grid-template-columns: 1fr; }
    .tier-head { gap: 10px; }
    .tier-row { flex-direction: column; gap: 4px; }
    .tier-row-label { flex: 0 0 auto; }
}

/* Chi tiết/xem trước */
.examhead { padding: 18px 0 6px; }
.examhead .eyebrow { margin: 10px 0 4px; font-size: 13px; }
.examhead .eyebrow a { color: var(--accent, #df860d); text-decoration: none; }
.examhead-meta { display: flex; gap: 16px; flex-wrap: wrap; font-size: 14px; color: var(--ink-soft, #6f6153); margin: 0 0 10px; }

.exam-note { background: var(--paper, #faf7f1); border-radius: 10px; padding: 12px 16px; margin: 0 0 16px; font-size: 14px; color: var(--ink, #2a1f16); }
.exam-note--warn { background: #fef3c7; color: #92400e; }
.exam-note a { color: var(--accent, #df860d); font-weight: 600; }

.exampreview { background: var(--card, #fff); border: 1px solid var(--line, #e8dfce); border-radius: var(--r, 14px); padding: 22px 24px; box-shadow: var(--shadow-sm, 0 2px 8px rgba(74, 45, 12, .07)); }
.examsection { background: var(--paper, #faf7f1); border-radius: 10px; padding: 14px 16px; margin: 0 0 16px; font-size: 14.5px; line-height: 1.7; }
.examq { padding: 16px 0; border-bottom: 1px solid var(--line, #e8dfce); }
.examq:last-child { border-bottom: 0; }
.examq-no { font-weight: 700; color: var(--brown, #37240f); margin-bottom: 8px; display: flex; align-items: center; gap: 10px; }
.examq-point { font-size: 12px; font-weight: 400; color: var(--ink-soft, #6f6153); }
.examq-content { font-size: 14.5px; line-height: 1.7; color: var(--ink, #2a1f16); margin-bottom: 10px; }
.examq-opts { display: flex; flex-direction: column; gap: 8px; }
.examopt { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--line, #e8dfce); border-radius: 8px; font-size: 14px; }
.examopt-letter {
    flex: 0 0 auto; width: 24px; height: 24px; border-radius: 50%; background: var(--paper-2, #f2ebdd);
    display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 12.5px; color: var(--ink-soft, #6f6153);
}
.examopt-img { max-width: 160px; max-height: 100px; object-fit: contain; }
.examq-essayhint { color: var(--ink-soft, #6f6153); font-size: 13.5px; margin: 0; }

.exam-teaser {
    margin-top: 18px; padding: 22px; text-align: center; background: var(--paper, #faf7f1);
    border-radius: 10px; border: 1px dashed var(--line, #e8dfce); color: var(--ink-soft, #6f6153); font-size: 14px; line-height: 1.7;
}
.exam-teaser .fa-lock { color: var(--accent, #df860d); margin-right: 6px; }

.exam-ctabar { text-align: center; margin: 26px 0; }
.btn-examstart {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px; background: var(--accent, #df860d);
    color: #fff; border: 0; border-radius: 999px; padding: 14px 38px; font-size: 16px; font-weight: 700; cursor: pointer; transition: background .15s;
}
.btn-examstart:hover { background: var(--brown, #37240f); color: #fff; }
.btn-examstart--sm { padding: 9px 22px; font-size: 14px; }

/* ---------- Nút liên hệ nổi (Zalo/Messenger/Gọi) — góc phải dưới, thu gọn thành
 * bong bóng tròn, xổ nhãn ra khi hover/focus. Ý tưởng lấy từ .contactfab v4. */
.contact-fab {
    position: fixed; right: 20px; bottom: 22px; z-index: 1050;
    display: flex; flex-direction: column; align-items: flex-end; gap: 14px;
}
.contact-fab a {
    display: flex; align-items: center; justify-content: center; height: 50px; padding: 0 14px;
    max-width: 50px; overflow: hidden; white-space: nowrap; border-radius: 999px;
    color: #fff !important; text-decoration: none; font-size: 13px; font-weight: 700;
    box-shadow: 0 6px 16px rgba(0,0,0,.25); transition: max-width .25s ease;
}
.contact-fab a i { flex: 0 0 auto; width: 22px; font-size: 19px; text-align: center; }
.contact-fab a span { max-width: 0; opacity: 0; overflow: hidden; transition: max-width .25s ease, opacity .2s ease; }
.contact-fab a:hover, .contact-fab a:focus {
    max-width: 220px; justify-content: flex-start; color: #fff !important;
}
.contact-fab a:hover span, .contact-fab a:focus span { max-width: 170px; opacity: 1; margin-left: 10px; }

.contact-fab .cfab-zalo { background: #0068ff; animation: cfab-pulse-blue 2.6s infinite; }
.contact-fab .cfab-mess { background: #0084ff; animation: cfab-pulse-blue 2.6s infinite .8s; }
.contact-fab .cfab-call { background: var(--accent, #df860d); animation: cfab-pulse-accent 2.2s infinite; }

@keyframes cfab-pulse-blue {
    0% { box-shadow: 0 6px 16px rgba(0,0,0,.25), 0 0 0 0 rgba(0,120,255,.45); }
    70% { box-shadow: 0 6px 16px rgba(0,0,0,.25), 0 0 0 10px rgba(0,120,255,0); }
    100% { box-shadow: 0 6px 16px rgba(0,0,0,.25), 0 0 0 0 rgba(0,120,255,0); }
}
@keyframes cfab-pulse-accent {
    0% { box-shadow: 0 6px 16px rgba(0,0,0,.25), 0 0 0 0 rgba(223,134,13,.5); }
    70% { box-shadow: 0 6px 16px rgba(0,0,0,.25), 0 0 0 12px rgba(223,134,13,0); }
    100% { box-shadow: 0 6px 16px rgba(0,0,0,.25), 0 0 0 0 rgba(223,134,13,0); }
}
@media (prefers-reduced-motion: reduce) {
    .contact-fab .cfab-zalo, .contact-fab .cfab-mess, .contact-fab .cfab-call { animation: none; }
}
@media (max-width: 480px) {
    .contact-fab { right: 12px; bottom: 14px; gap: 10px; }
    .contact-fab a { height: 44px; max-width: 44px; }
    .contact-fab a:hover, .contact-fab a:focus { max-width: 190px; }
}

/* Màn làm bài — thanh giờ dính đầu trang, tách khỏi header chính để không rối
 * khi thí sinh cuộn xem câu hỏi dài. */
.examtake { min-height: 100vh; background: var(--paper, #faf7f1); }
.examtimer { position: sticky; top: 0; z-index: 50; background: var(--brown, #37240f); color: #fff; box-shadow: 0 2px 10px rgba(0, 0, 0, .15); }
.examtimer-inner { display: flex; align-items: center; gap: 16px; padding: 12px 0; }
.examtimer-title { flex: 1 1 auto; font-weight: 700; font-size: 14.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.examtimer-clock { font-variant-numeric: tabular-nums; font-size: 20px; font-weight: 700; background: rgba(255, 255, 255, .15); padding: 4px 14px; border-radius: 999px; }
.examtimer-saved { font-size: 12.5px; opacity: .85; flex: 0 0 auto; }
.examtake-body { padding: 22px 0 60px; max-width: 840px; }
.examaudio { margin-bottom: 20px; }
.examaudio audio { width: 100%; }
.examtake .examq { background: var(--card, #fff); border: 1px solid var(--line, #e8dfce); border-radius: var(--r, 14px); padding: 18px 20px; margin-bottom: 14px; box-shadow: var(--shadow-sm, 0 2px 8px rgba(74, 45, 12, .07)); }
.examtake .examopt { cursor: pointer; transition: border-color .12s, background .12s; }
.examtake .examopt:hover { border-color: var(--accent, #df860d); }
.examtake .examopt input[type="radio"] { margin: 0; }
.examtake .examopt.is-selected { border-color: var(--accent, #df860d); background: #fdf1de; }
.examtake .examopt.is-selected .examopt-letter { background: var(--accent, #df860d); color: #fff; }
.examq-essay { width: 100%; border: 1px solid var(--line, #e8dfce); border-radius: 8px; padding: 10px 12px; font-size: 14.5px; font-family: inherit; resize: vertical; outline: none; }
.examq-essay:focus { border-color: var(--accent, #df860d); }
.examsubmitbar { text-align: center; margin-top: 24px; }
.btn-examsubmit { background: var(--accent, #df860d); color: #fff; border: 0; border-radius: 999px; padding: 14px 44px; font-size: 16px; font-weight: 700; cursor: pointer; }
.btn-examsubmit:hover { background: var(--brown, #37240f); }
.btn-examsubmit:disabled { opacity: .6; cursor: default; }

/* Kết quả */
.examresult-head { padding: 18px 0; text-align: center; }
.examresult-score { display: flex; justify-content: center; gap: 28px; margin: 18px 0; flex-wrap: wrap; }
.examresult-scorebox { background: var(--card, #fff); border: 1px solid var(--line, #e8dfce); border-radius: var(--r, 14px); padding: 16px 26px; box-shadow: var(--shadow-sm, 0 2px 8px rgba(74, 45, 12, .07)); }
.examresult-scorebox .n { font-size: 28px; font-weight: 800; color: var(--brown, #37240f); }
.examresult-scorebox .d { font-size: 13px; color: var(--ink-soft, #6f6153); margin-left: 6px; }
.examresult-actions { display: flex; justify-content: center; align-items: center; gap: 18px; margin-top: 14px; }
.examresult-actions a { color: var(--accent, #df860d); font-weight: 600; text-decoration: none; }
.examresult-retry { display: inline-block; margin: 0; }
.examresult-list { max-width: 840px; margin: 0 auto; }
.examq-verdict { margin-left: auto; font-size: 12.5px; font-weight: 700; }
.examq-review.is-correct .examq-verdict { color: #166534; }
.examq-review.is-wrong .examq-verdict { color: #b91c1c; }
.examq-review.is-partial .examq-verdict, .examq-review.is-pending .examq-verdict { color: #92400e; }
.examopt--review.is-answer { border-color: #166534; background: #e7f6ec; }
.examopt--review.is-picked:not(.is-answer) { border-color: #b91c1c; background: #fde8e8; }
.examopt-mark { margin-left: auto; color: #166534; }
.examq-essayanswer { background: var(--paper, #faf7f1); border-radius: 8px; padding: 12px 14px; font-size: 14.5px; line-height: 1.7; white-space: pre-line; }
.examq-comment { margin: 8px 0 0; font-size: 13.5px; color: var(--ink-soft, #6f6153); }
@media (max-width: 575px) {
    .examresult-score { gap: 14px; }
    .examresult-scorebox { padding: 12px 18px; }
}

/* ---------- Biểu mẫu (bieumau.js + web/bieumau/*.php) ----------
 * Danh sách dùng lại khuôn .examlist/.examcard (đổi tên .bmlist/.bmcard vì
 * nội dung khác — không phải đề thi). Trang điền (.bmtool) là khung mới bao
 * quanh engine bieumau-engine.js (port từ v4, xem file JS đó cho phần vẽ
 * ô/PDF — CSS ở đây chỉ lo toolbar/thông báo/khung, không đụng .bm-field.
 */
.bmlist { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin-top: 6px; }
.bmcard {
    display: block; position: relative; background: var(--card, #fff); border: 1px solid var(--line, #e8dfce);
    border-radius: var(--r, 14px); padding: 20px; text-decoration: none; color: var(--ink, #2a1f16);
    box-shadow: var(--shadow-sm, 0 2px 8px rgba(74, 45, 12, .07)); transition: box-shadow .15s, transform .15s;
}
.bmcard:hover { box-shadow: var(--shadow, 0 8px 24px rgba(74, 45, 12, .12)); transform: translateY(-3px); color: var(--ink, #2a1f16); text-decoration: none; }
.bmcard-title { font-size: 16.5px; font-weight: 700; margin: 0 0 4px; color: var(--brown, #37240f); line-height: 1.4; }
.bmcard-ko { display: block; font-size: 13px; color: var(--ink-soft, #6f6153); margin-bottom: 10px; }
.bmcard-note { font-size: 13.5px; color: var(--ink-soft, #6f6153); line-height: 1.55; margin: 0 0 14px; }
.bmcard-cta { display: inline-block; background: #22a06b; color: #fff; font-size: 13px; font-weight: 700; padding: 6px 14px; border-radius: 999px; }
@media (max-width: 991px) { .bmlist { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 575px) { .bmlist { grid-template-columns: 1fr; } }

/* Trang điền */
.bmtool { max-width: 1120px; margin: 0 auto; padding: 16px 15px 40px; }
.bmtoolbar {
    position: sticky; top: 0; z-index: 30; display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
    background: var(--brown, #37240f); color: #fff; padding: 10px 14px; border-radius: var(--r, 14px); margin-bottom: 12px;
}
.bmtoolbar-ttl { font-size: 16px; font-weight: 700; flex: 1; min-width: 180px; margin: 0; color: #fff; }
.bmtoolbar-ttl small { display: block; font-weight: 400; opacity: .75; font-size: 13px; }
.bmtoolbar-status { font-size: 12px; color: #cbd5e1; margin-left: 4px; }
.bmbtn { font-size: 14px; padding: 8px 14px; border: 0; border-radius: 999px; cursor: pointer; font-weight: 700; }
.bmbtn-export { background: #22a06b; color: #fff; }
.bmbtn-edit { background: var(--accent, #df860d); color: #fff; }
.bmbtn-save { background: #f5b301; color: #222; }
.bmbtn-ai { background: linear-gradient(135deg, #7b3ff2, #c13ffb); color: #fff; }
.bmbtn-ai:disabled { opacity: .85; cursor: progress; }
.bm-spin {
    display: inline-block; width: 12px; height: 12px; border: 2px solid rgba(255, 255, 255, .45);
    border-top-color: #fff; border-radius: 50%; animation: bm-rot .7s linear infinite; vertical-align: -2px; margin-right: 7px;
}
@keyframes bm-rot { to { transform: rotate(360deg); } }

.bmnote { background: #fff7e6; border-left: 4px solid #f5b301; padding: 8px 12px; border-radius: 4px; color: #664d03; margin: 0 0 10px; font-size: 14px; }
.bmhelp { color: var(--ink-soft, #6f6153); font-size: 13px; margin: 0 0 14px; }
.bmprivacy {
    color: #0f6b3a; font-size: 15.5px; font-weight: 700; line-height: 1.45; background: #e7f8ee; border: 1px solid #9fe0bd;
    border-left: 5px solid #17a45a; padding: 12px 16px; border-radius: 8px; margin: 10px 0 14px;
}
.bmprivacy b { color: #0a5a2f; }
.bmainote { background: #f3ecff; border-left: 4px solid #7b3ff2; padding: 8px 12px; border-radius: 4px; color: #4a2b8c; margin: 0 0 12px; font-size: 13px; }

.bmlayout { display: flex; gap: 16px; align-items: flex-start; }
#bmStage { flex: 1; min-width: 0; position: relative; }
#bmSide { width: 280px; flex: none; background: var(--card, #fff); border: 1px solid var(--line, #e8dfce); border-radius: var(--r, 14px); padding: 12px; position: sticky; top: 64px; }
#bmSide h4 { margin: 0 0 8px; font-size: 14px; }
#bmPanel label { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: 12px; margin: 5px 0; color: var(--ink-soft, #6f6153); }
#bmPanel input, #bmPanel select { width: 150px; font-size: 12px; padding: 3px 5px; }
#bmPanel .bm-del { width: 100%; margin-top: 10px; background: #e0532d; color: #fff; border: 0; padding: 7px; border-radius: 6px; cursor: pointer; }
#bmPanel .bm-hint, #bmPanel .bm-tip { color: var(--ink-soft, #6f6153); font-size: 12px; margin-top: 8px; }

.bm-ai-overlay {
    position: absolute; inset: 0; background: rgba(255, 255, 255, .6); z-index: 40;
    display: flex; align-items: flex-start; justify-content: center; padding-top: 120px; border-radius: var(--r, 14px);
}
.bm-ai-overlay .box {
    position: sticky; top: 120px; background: #fff; padding: 16px 22px; border-radius: 12px;
    box-shadow: 0 6px 26px rgba(123, 63, 242, .28); font-weight: 700; color: #4a2b8c; display: flex; align-items: center; gap: 12px; font-size: 15px;
}
.bm-ai-overlay .sp { width: 22px; height: 22px; border: 3px solid #e6ddfa; border-top-color: #7b3ff2; border-radius: 50%; animation: bm-rot .7s linear infinite; flex: none; }

@media (max-width: 760px) {
    .bmlayout { flex-direction: column; }
    #bmSide { width: 100%; position: static; }
    .bmprivacy { font-size: 14.5px; }
}
