/*
 * Giao diện toàn site: Sáng / Sepia / Tối.
 *
 * Template gốc đã dựng trên biến CSS (--main, --line, --white, --surface...),
 * nên đổi giao diện là định nghĩa lại bộ biến đó chứ không phải ghi đè hàng trăm
 * khai báo màu. Tệp này nạp SAU styles.css và custom.css để thắng về thứ tự.
 *
 * `--white` là tên theo *giá trị* nhưng được dùng theo *vai trò*: nền trang và
 * nền thẻ (192 chỗ, kể cả `body`). Ở đây nó mang nghĩa "nền nổi" và đổi theo
 * từng giao diện. `--surface` là mảng nền phụ, luôn lệch nhẹ so với `--white`.
 */

/* ------------------------------------------------------------------ *
 * 1. Bộ biến theo từng giao diện
 * ------------------------------------------------------------------ */

:root,
[data-theme='light'] {
    color-scheme: light;

    --white: #ffffff;
    --surface: #f7f7f7;
    --main: #181818;
    --secondary: #4d4e4f;
    --secondary-2: #a0a0a0;
    --line: #e9e9e9;
    --primary: #e43131;
    --rgba-primary: rgba(228, 49, 49, 0.1);

    --main-rgba-1: rgba(0, 0, 0, 0.16);
    --main-rgba-2: rgba(0, 0, 0, 0.15);
    --backdrop: rgba(24, 24, 24, 0.2);
    --gradient: linear-gradient(87deg, #fbf1f1 3.59%, #f4f1fa 95.02%);
    --shadow1: 0px 10px 25px 0px #2b344a1f;
    --shadow2: 0px 5px 18px 5px #40485726;

    --bg-scrollbar-track: #f1f1f1;
    --bg-scrollbar-thumb: #c1c1c1;

    --theme-selection-bg: rgba(228, 49, 49, 0.16);
    --fade-transparent: rgba(255, 255, 255, 0);    --band: #181818;
}

/*
 * Sepia giữ đúng tông giấy của trình đọc cũ (#f4ecd8 / #5b4636) để người đang
 * quen chế độ đọc không thấy lạ khi nó lan ra cả site.
 */
[data-theme='sepia'] {
    color-scheme: light;

    --white: #f4ecd8;
    --surface: #eadfc4;
    --main: #4a3826;
    --secondary: #6b5540;
    --secondary-2: #8c7357;
    --line: #ded0b2;
    --primary: #b52b2b;
    --rgba-primary: rgba(181, 43, 43, 0.12);

    --main-rgba-1: rgba(74, 56, 38, 0.18);
    --main-rgba-2: rgba(74, 56, 38, 0.16);
    --backdrop: rgba(59, 44, 30, 0.35);
    --gradient: linear-gradient(87deg, #f6eeda 3.59%, #efe6cf 95.02%);
    --shadow1: 0px 10px 25px 0px rgba(92, 71, 48, 0.16);
    --shadow2: 0px 5px 18px 5px rgba(92, 71, 48, 0.12);

    --bg-scrollbar-track: #e7dcc0;
    --bg-scrollbar-thumb: #c3b18d;

    --theme-selection-bg: rgba(181, 43, 43, 0.18);
    --fade-transparent: rgba(244, 236, 216, 0);    --band: #43301f;
}

/*
 * Tối kế thừa nền #1c1c1e của trình đọc cũ, hạ thêm một bậc cho nền trang để
 * thẻ và mảng nền phụ còn chỗ tách khỏi nhau.
 */
[data-theme='dark'] {
    color-scheme: dark;

    --white: #16161a;
    --surface: #202026;
    --main: #e8e8ec;
    --secondary: #b6b6c0;
    --secondary-2: #8a8a95;
    --line: #2c2c33;
    --primary: #f24a4a;
    --rgba-primary: rgba(242, 74, 74, 0.16);

    --main-rgba-1: rgba(0, 0, 0, 0.55);
    --main-rgba-2: rgba(0, 0, 0, 0.5);
    --backdrop: rgba(0, 0, 0, 0.65);
    --gradient: linear-gradient(87deg, #1e1e24 3.59%, #1a1a22 95.02%);
    --shadow1: 0px 10px 25px 0px rgba(0, 0, 0, 0.55);
    --shadow2: 0px 5px 18px 5px rgba(0, 0, 0, 0.4);

    --bg-scrollbar-track: #1b1b21;
    --bg-scrollbar-thumb: #3a3a44;

    --theme-selection-bg: rgba(242, 74, 74, 0.28);
    --fade-transparent: rgba(22, 22, 26, 0);    /* Ở giao diện sáng dải này tối hơn trang; ở nền tối thì ngược lại — sáng
       hơn trang một bậc, để nó vẫn đọc ra là một dải riêng chứ không tan vào nền. */
    --band: #24242b;
}

/* ------------------------------------------------------------------ *
 * 2. Những chỗ cần màu tuyệt đối, không lật theo giao diện
 *
 * `--white` và `--main` là tên đặt theo *giá trị*. Ở phần lớn chỗ chúng được
 * dùng theo vai trò (nền / chữ) nên lật theo giao diện là đúng. Nhưng có vài
 * chỗ chúng mang nghĩa tuyệt đối — chữ nằm trên ảnh bìa, và dải topbar vốn luôn
 * tối để tương phản với trang. Lật những chỗ đó thì chữ trắng hoá đen trên ảnh
 * và dải topbar hoá sáng. Chúng được trỏ sang token không đổi.
 * ------------------------------------------------------------------ */

:root {
    --fixed-white: #ffffff;
}

/* Chữ trên ảnh bìa hero và trên dải topbar: luôn sáng, ở mọi giao diện. */
.text-white {
    color: var(--fixed-white) !important;
}

/* Topbar là dải tương phản, không phải một mảng nền thường. */
.tf-topbar.bg-main {
    background-color: var(--band) !important;
}

/* ------------------------------------------------------------------ *
 * 2b. Những chỗ template khoá cứng màu sáng
 * ------------------------------------------------------------------ */

/* Màn chờ phủ kín viewport; để trắng là mỗi lần tải trang loé một mảng trắng. */
.preload-container {
    background: var(--white);
}

/*
 * Bộ icon trong header vẽ sẵn stroke="#181818" trong markup. Đã đổi sang
 * currentColor ở view, dòng dưới là lưới an toàn cho những SVG còn sót.
 */
[data-theme='dark'] .nav-icon svg [stroke]:not([stroke='none']),
[data-theme='sepia'] .nav-icon svg [stroke]:not([stroke='none']) {
    stroke: currentColor;
}

/* ------------------------------------------------------------------ *
 * 2c. Nối biến của Bootstrap vào bộ biến của template
 *
 * Menu trượt, hộp tìm kiếm và các dropdown là component của Bootstrap. Chúng lấy
 * màu từ bộ biến riêng (--bs-*), không phải từ --white/--main của template, nên
 * khi đổi giao diện phần vỏ vẫn trắng trong khi chữ bên trong đã thành màu sáng.
 *
 * Các khai báo dưới đây trỏ biến của Bootstrap về đúng token của giao diện. Vì
 * là var() nên chỉ cần viết một lần, cả ba giao diện tự theo.
 * ------------------------------------------------------------------ */

:root {
    --bs-body-bg: var(--white);
    --bs-body-color: var(--main);
    --bs-border-color: var(--line);
    --bs-emphasis-color: var(--main);
    --bs-secondary-color: var(--secondary);
}

.offcanvas,
.offcanvas-start,
.offcanvas-end,
.offcanvas-top,
.offcanvas-bottom {
    --bs-offcanvas-bg: var(--white);
    --bs-offcanvas-color: var(--main);
    --bs-offcanvas-border-color: var(--line);
}

.modal {
    --bs-modal-bg: var(--white);
    --bs-modal-color: var(--main);
    --bs-modal-border-color: var(--line);
    --bs-modal-header-border-color: var(--line);
    --bs-modal-footer-border-color: var(--line);
}

.dropdown-menu {
    --bs-dropdown-bg: var(--white);
    --bs-dropdown-color: var(--main);
    --bs-dropdown-border-color: var(--line);
    --bs-dropdown-link-color: var(--main);
    --bs-dropdown-link-hover-bg: var(--surface);
    --bs-dropdown-link-hover-color: var(--main);
    --bs-dropdown-link-active-bg: var(--surface);
    --bs-dropdown-link-active-color: var(--main);
}

/* Nút đóng của Bootstrap là ảnh SVG đen; trên nền tối phải đảo lại. */
[data-theme='dark'] .btn-close {
    filter: invert(1) grayscale(100%) brightness(200%);
}

/* ------------------------------------------------------------------ *
 * 3. Những bề mặt trình duyệt tự vẽ
 * ------------------------------------------------------------------ */

::selection {
    background: var(--theme-selection-bg);
    color: var(--main);
}

:focus-visible {
    outline: 2px solid var(--primary);
    outline-offset: 2px;
    border-radius: 4px;
}

html {
    scrollbar-color: var(--bg-scrollbar-thumb) var(--bg-scrollbar-track);
}

body::-webkit-scrollbar {
    width: 10px;
}

body::-webkit-scrollbar-track {
    background: var(--bg-scrollbar-track);
}

body::-webkit-scrollbar-thumb {
    background: var(--bg-scrollbar-thumb);
    border-radius: 999px;
}

/* ------------------------------------------------------------------ *
 * 4. Chuyển giao diện
 *
 * Chỉ bật transition trong đúng khoảnh khắc đổi giao diện. Để transition thường
 * trực trên màu là mọi hover, mọi lần mở dropdown đều kéo theo một đoạn nhoè.
 * ------------------------------------------------------------------ */

.theme-switching,
.theme-switching *,
.theme-switching *::before,
.theme-switching *::after {
    transition:
        background-color 220ms cubic-bezier(0.22, 1, 0.36, 1),
        border-color 220ms cubic-bezier(0.22, 1, 0.36, 1),
        color 220ms cubic-bezier(0.22, 1, 0.36, 1),
        fill 220ms cubic-bezier(0.22, 1, 0.36, 1),
        stroke 220ms cubic-bezier(0.22, 1, 0.36, 1) !important;
}

@media (prefers-reduced-motion: reduce) {
    .theme-switching,
    .theme-switching *,
    .theme-switching *::before,
    .theme-switching *::after {
        transition: none !important;
    }
}

/* ------------------------------------------------------------------ *
 * 5. Nút chọn giao diện
 * ------------------------------------------------------------------ */

.theme-switch {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    padding: 3px;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--surface);
}

.theme-switch-option {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 999px;
    background: transparent;
    color: var(--secondary);
    cursor: pointer;
    line-height: 1;
    transition: background-color 160ms cubic-bezier(0.22, 1, 0.36, 1),
        color 160ms cubic-bezier(0.22, 1, 0.36, 1);
}

.theme-switch-option svg {
    width: 18px;
    height: 18px;
    flex: 0 0 auto;
    display: block;
}

.theme-switch-option:hover {
    color: var(--main);
    background: var(--rgba-primary);
}

/*
 * Lấy trạng thái từ [data-theme] của <html> chứ không chỉ từ aria-checked: JS
 * nạp defer nên nếu chỉ dựa vào aria-checked thì trong khoảnh khắc đầu sẽ không
 * nút nào sáng, nhìn như chưa chọn gì.
 */
[data-theme='light'] .theme-switch-option[data-theme-value='light'],
[data-theme='sepia'] .theme-switch-option[data-theme-value='sepia'],
[data-theme='dark'] .theme-switch-option[data-theme-value='dark'],
.theme-switch-option[aria-checked='true'] {
    background: var(--white);
    color: var(--main);
    box-shadow: 0 1px 3px var(--main-rgba-2);
}

/* Trong header: chỉ icon, vừa với hàng icon sẵn có. */
.nav-theme .theme-switch-option {
    width: 34px;
    height: 34px;
}

.nav-theme .theme-switch-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Trong menu di động: có chữ, vùng chạm đủ rộng cho ngón tay. */
.mb-theme {
    padding: 20px 0 4px;
}

.mb-theme-heading {
    margin-bottom: 10px;
    font-size: 14px;
    font-weight: 600;
    color: var(--secondary-2);
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

.mb-theme .theme-switch {
    display: flex;
    width: 100%;
}

.mb-theme .theme-switch-option {
    flex: 1 1 0;
    min-height: 44px;
    padding: 0 10px;
    font-size: 14px;
    font-weight: 500;
}
