/**
 * Brand app — nâng cấp thị giác cho các trang NỘI BỘ (bảng chấm điểm, form nộp
 * bài, Q&A, hướng dẫn sử dụng...) chạy qua `{% extends "templates/web.html" %}`.
 * Các trang này VỐN ĐÃ sáng (Bootstrap trắng mặc định) — vấn đề không phải tối,
 * mà là trông như Bootstrap mặc định, chưa ra thương hiệu.
 *
 * KHÁC hẳn brand-marketing.css (hệ "Poster" cho 9 trang công khai: viền đen 3px,
 * hard shadow đặc, tít in hoa 900): đây là GIAO DIỆN SẢN PHẨM — chỉ đồng bộ
 * bảng màu (biến từ brand-tokens.css) + font tiêu đề + bo góc nhỏ, TUYỆT ĐỐI
 * KHÔNG in hoa/viền dày/hard shadow — bảng dữ liệu & form cần dễ đọc lâu, không
 * "hét" vào mắt người dùng.
 *
 * An toàn nạp toàn site (file này nạp qua hooks.py web_include_css — mọi trang
 * website, kể cả 9 trang public + blog, đều tải file này):
 *   - Desk (/app) KHÔNG bị ảnh hưởng: file này CHỈ khai trong web_include_css,
 *     không khai trong app_include_css (khác brand-tokens.css — file đó chỉ có
 *     custom properties nên an toàn nạp cả hai, xem hooks.py).
 *   - 9 trang public (landing, lo_trinh, thu-vien, about, contact, cong-cu,
 *     grill_result...) KHÔNG bị ảnh hưởng khi xem như GUEST/HV thật: đó là
 *     trang TỰ CHỨA (có </body> riêng) nên Frappe serve unwrapped, không đi qua
 *     wrapper web.html chèn web_include_css (xác nhận bằng curl GUEST thật —
 *     KHÔNG dùng cookie Administrator để test việc này: Administrator là
 *     System User, gõ "/" sẽ bị route thẳng vào /dashboard theo
 *     role_home_page/default_app nên trông giống có nạp file, đó là false
 *     positive — xem docs/design-system-poster.md §8 mục 5).
 *   - Blog/Web Page khác KHÔNG bị ảnh hưởng: MỌI rule dưới đây đều SCOPE bằng
 *     `body[data-path="<route>"] .page_content` — Frappe tự gắn `data-path`
 *     đúng tên route lên <body> cho mọi trang qua templates/web.html (xác nhận
 *     bằng curl thật: `<body data-path="dashboard">`, `<body data-path=
 *     "classroom_teacher">`...) và `.page_content` chỉ bọc đúng khối
 *     {% block page_content %} — KHÔNG bọc navbar/footer (2 khối đó là anh em
 *     đứng ngoài `.page-content-wrapper`, xác nhận bằng curl thật) nên rule ở
 *     đây không lỡ tay đổi màu link trên navbar/footer dùng chung.
 *   - Danh sách 12 route trong phạm vi (đúng tên file templates/pages/*.html,
 *     không thêm/bớt): dashboard, classroom_teacher, classroom_assignment,
 *     classroom_lessons, classroom_student, classroom_students,
 *     classroom_report, hoi_dap, huong_dan_admin, huong_dan_giang_vien,
 *     huong_dan_hoc_vien, lesson.
 *
 * Kỹ thuật specificity — ĐỌC TRƯỚC KHI SỬA (đã bắt lỗi 2 lần bằng ảnh chụp
 * thật, không phải chỉ đọc code — xem 2 case dưới đây):
 *
 * 1) Khối scope `body[data-path="..."] .page_content` luôn bọc trong
 *    `:where(...)` (specificity = 0). Nếu dùng `:is()` (giữ nguyên độ đặc
 *    hiệu) thay vì `:where()`, một rule trần như ".card{...}" sẽ vô tình có
 *    độ đặc hiệu CAO HƠN các class riêng của dashboard.html (`.s-card`/
 *    `.t-card`, single-class) và THẮNG NHẦM property trùng tên bất kể thứ tự
 *    nạp, dù dashboard.html nạp <style> SAU (đáng lẽ phải thắng theo cascade
 *    order khi 2 bên NGANG specificity — xem gotcha đã ghi trong
 *    docs/design-system-poster.md §8 mục 1).
 *
 * 2) MỌI `:not(...)` dùng để loại trừ (vd loại .btn/.badge/.text-decoration-
 *    none khỏi rule tô màu link) phải gộp chung MỘT danh sách rồi bọc cả cụm
 *    trong `:where(...)`: viết `a:where(:not(.btn, .badge,
 *    .text-decoration-none))`, KHÔNG được viết
 *    `a:not(.btn):not(.badge):not(.text-decoration-none)` — mỗi `:not(X)`
 *    lặp lại vẫn TỰ CỘNG DỒN specificity y như một class thật (kể cả khi scope
 *    phía trước đã bọc `:where()`), nên 3 `:not()` nối chuỗi cho ra độ đặc
 *    hiệu (0,0,3,1) — vẫn thắng nhầm `.t-list-item{color:inherit}`
 *    (single-class, (0,0,1,0)) y hệt lỗi (1). Case thật đã bắt bằng
 *    `getComputedStyle()` qua CDP (không phải đọc code): sau khi bọc scope
 *    trong `:where()` nhưng vẫn nối 3 `:not()` riêng, link "Bài nộp cần
 *    chấm"/"Câu hỏi đang chờ trả lời" trong dashboard.html VẪN bị tô xanh
 *    cobalt dù `.t-list-item` đã chủ đích đặt `color: inherit` — chỉ hết khi
 *    gộp 3 điều kiện vào 1 `:not(a, b, c)` rồi bọc `:where()` quanh đúng cụm
 *    đó (specificity về đúng 1 element selector, thua mọi class riêng).
 */

/* ---------------------------------------------------------------------------
 * SCOPE dùng lại cho mọi rule bên dưới, LUÔN bọc trong :where(...) (specificity
 * 0) — CSS thuần không có @custom-selector nên phải chép lại y hệt mỗi lần.
 * ------------------------------------------------------------------------- */

/* ---- Tiêu đề: font-display + đậm, giữ NGUYÊN chữ thường (không uppercase).
   Không trang nào trong 12 trang tự định nghĩa màu/font riêng cho h1-h4 (đã
   rà toàn bộ 12 file) nên không có rủi ro specificity ở đây. ---- */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) :is(h1, h2, h3, h4) {
  font-family: var(--font-display);
  font-weight: 700;
  color: var(--black);
  text-transform: none;
  letter-spacing: -0.01em;
  line-height: 1.3;
}

/* ---- Link trong nội dung: KHÔNG đụng .btn/.badge (đã có màu riêng) và KHÔNG
   đụng .text-decoration-none (tín hiệu chủ đích "link này không được tô như
   link" — dashboard.html dùng cho MỌI link bọc thẻ card thống kê, 8 chỗ, chỉ
   dashboard.html dùng class này trong cả 12 trang). 3 điều kiện loại trừ GỘP
   CHUNG 1 `:not(a, b, c)` rồi bọc `:where()` quanh đúng cụm đó (xem "Kỹ thuật
   specificity" mục 2 ở đầu file — KHÔNG viết 3 `:not()` nối chuỗi, sẽ tự cộng
   dồn specificity) nên độ đặc hiệu CHỈ bằng 1 element selector, thua ngay bất
   kỳ class riêng nào set màu (vd `.t-list-item{color:inherit}`) mà không cần
   liệt kê hết. ---- */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) a:where(:not(.btn, .badge, .text-decoration-none)) {
  color: var(--cobalt);
}
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) a:where(:not(.btn, .badge, .text-decoration-none)):hover {
  color: #1e3a8a; /* cobalt đậm hơn ~1 bậc, cùng logic hover tối màu hơn của brand-tokens */
  text-decoration: underline;
}

/* ---- Nút chính: CHỈ đổi bo góc (KHÔNG đổi màu nền). Phát hiện qua CDP
   (getMatchedStylesForNode, không phải đọc code): site này đã có sẵn theme
   Frappe/LMS riêng tô MỌI ".btn.btn-primary" (2 class, đặc hiệu (0,0,2,0))
   thành đen gần tuyệt đối `--btn-primary:#171717` + `box-shadow:none` —
   NGANG với `--black` #111111 của hệ mới và đã đúng "hoặc đen" theo yêu cầu,
   lại nhất quán với nút primary bên Desk. Một rule ".btn-primary" (1 class,
   (0,0,1,0)) không thể thắng compound-class đó nên KHÔNG viết rule đổi màu ở
   đây nữa (sẽ là dead code không bao giờ áp dụng, đã tự kiểm bằng
   getComputedStyle trên nút thật "Lưu link" — background luôn ra #171717 dù
   viết `background-color: var(--cobalt)` cỡ nào, trừ khi tự nâng đặc hiệu lên
   ngang ".btn.btn-primary" — không làm vậy vì sẽ phá vỡ nhất quán với Desk).
   Chỉ ".btn" (bo góc, 1 class, thắng vì nạp SAU cùng đặc hiệu) là rule còn
   tác dụng thật ở đây — đã xác minh 6px thắng đúng 8px mặc định của theme. ---- */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .btn {
  border-radius: 6px;
}

/* ---- Nút phụ/outline/link: cobalt — ĐÃ xác minh qua CDP là áp dụng thật (site
   theme không có rule cạnh tranh nào cho .btn-outline-primary/.btn-link nên
   không dính bẫy đặc hiệu như .btn-primary ở trên). Phối hợp có chủ đích: nút
   chính (nền đen, có sẵn) cho hành động mạnh nhất + nút phụ/link màu cobalt
   cho hành động nhẹ hơn — không phải ngẫu nhiên, cũng không đụng
   .btn-teacher-.../.btn-brand-... của dashboard.html (2 hệ đó không dùng các
   class Bootstrap này, đã grep xác nhận). ---- */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .btn-outline-primary {
  color: var(--cobalt);
  border-color: var(--cobalt);
}
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .btn-outline-primary:hover {
  background-color: var(--cobalt);
  border-color: var(--cobalt);
  color: #fff;
}
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .btn-link {
  color: var(--cobalt);
}

/* ---- Badge/nhãn trạng thái: chỉ đổi 2 biến thể "trung tính" của Bootstrap
   (bg-primary xanh dương mặc định, bg-dark xám mặc định) sang cobalt/đen của
   hệ mới. KHÔNG đụng bg-success/bg-warning/bg-danger/bg-info: đó là màu
   semantic đèn giao thông (đã chấm=xanh lá, trễ hạn=đỏ, chờ=vàng...) đã được
   review kỹ ở các issue trước, đổi sẽ là redesign chứ không phải đồng bộ
   thương hiệu — ngoài phạm vi việc này. Compound-class 2 lớp (.badge.bg-*) tự
   nhiên đặc hiệu hơn `.bg-primary` gốc của Bootstrap nên thắng chắc chắn, thêm
   !important chỉ để phòng hờ. */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .badge.bg-primary {
  background-color: var(--cobalt) !important;
}
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .badge.bg-dark {
  background-color: var(--black) !important;
}

/* ---- Card trần (bo góc nhỏ + viền/shadow nhẹ). Scope bọc :where() nên
   ".card" ở đây độ đặc hiệu = đúng 1 class, NGANG BẰNG ".s-card"/".t-card"
   riêng của dashboard.html — 2 class đó nạp SAU (trong <style> ở body, còn
   file này là <link> ở <head>) nên vẫn THẮNG cho property trùng tên
   (border-radius/border/box-shadow) đúng như dashboard.html đã định (issue
   #53), rule ở đây chỉ thực sự đổi diện mạo của card TRẦN không có class
   riêng (card "Câu hỏi đang chờ trả lời"/"Tiến độ của tôi" trong dashboard.html
   + hầu hết card ở 11 trang còn lại). KHÔNG dùng hard shadow kiểu poster —
   chỉ shadow mềm, nhẹ. */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .card {
  border-radius: 8px;
  border-color: rgba(17, 17, 17, 0.1);
  box-shadow: 0 1px 3px rgba(17, 17, 17, 0.06);
}

/* ---- Bảng: header nhẹ + chữ đậm vừa cho dễ quét mắt (bảng chấm điểm/tiến độ).
   Không trang nào định nghĩa lại "thead th" nên không có rủi ro specificity. ---- */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .table thead th {
  background-color: rgba(17, 17, 17, 0.03);
  font-weight: 600;
  color: var(--black);
  border-color: rgba(17, 17, 17, 0.12);
}
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .table-bordered,
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .table-bordered td,
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .table-bordered th {
  border-color: rgba(17, 17, 17, 0.12);
}

/* ---- Form focus ring: cobalt thay vì xanh dương mặc định Bootstrap (nhất
   quán với nút chính + link). classroom_assignment.html có rule riêng
   "#assignment-box .form-control:focus" đặc hiệu hơn (id+class+pseudo) nên
   luôn thắng ở đúng trang đó — không xung đột, chỉ càng nhất quán hơn (2 màu
   cobalt gần giống hệt nhau vốn đã được chọn độc lập). ---- */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) :is(.form-control, .form-select):focus {
  border-color: var(--cobalt);
  box-shadow: 0 0 0 3px rgba(29, 78, 216, 0.15);
}

/* ---- Alert: chỉ hài hoà bo góc, KHÔNG đụng màu (đã semantic sẵn) ---- */
:where(
  body[data-path="dashboard"] .page_content,
  body[data-path="classroom_teacher"] .page_content,
  body[data-path="classroom_assignment"] .page_content,
  body[data-path="classroom_lessons"] .page_content,
  body[data-path="classroom_student"] .page_content,
  body[data-path="classroom_students"] .page_content,
  body[data-path="classroom_report"] .page_content,
  body[data-path="hoi_dap"] .page_content,
  body[data-path="huong_dan_admin"] .page_content,
  body[data-path="huong_dan_giang_vien"] .page_content,
  body[data-path="huong_dan_hoc_vien"] .page_content,
  body[data-path="lesson"] .page_content
) .alert {
  border-radius: 8px;
}
