/* ══════════════════════════════════════════════════════════════════════════
   main.css — ĐIỂM VÀO DUY NHẤT của hệ thiết kế.

   Trang nào cũng chỉ cần một dòng:
     <link rel="stylesheet" href="/css/main.css">
   kèm hai dòng preconnect font ở <head> (CSS không đặt preconnect được):
     <link rel="preconnect" href="https://fonts.googleapis.com">
     <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

   BA HỌ CHỮ, mỗi họ một việc, đã kiểm đủ dấu tiếng Việt ở mọi độ đậm:
     Literata      văn kể   — serif đọc dài không mỏi, dấu rõ
     Be Vietnam Pro giao diện — font Việt, dựng riêng cho dấu tiếng Việt
     Alegreya SC   tiêu đề  — chữ khắc small-caps, PHỦ ĐỦ dấu tiếng Việt.
                   Thay cho Cinzel: Cinzel không có bộ ký tự vietnamese nên
                   chữ có dấu rơi về phông đỡ theo từng ký tự, pha hai mặt
                   chữ giữa một cái tên. Đổi phông tiêu đề thì phải kiểm lại
                   bộ `vietnamese` trong tệp Google Fonts trả về.

   ── KHUNG XƯƠNG MỘT TRANG ───────────────────────────────────────────────
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width,initial-scale=1">
   <title>…</title>
   <link rel="preconnect" href="https://fonts.googleapis.com">
   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
   <link rel="stylesheet" href="/css/main.css">

   <canvas id="troi" aria-hidden="true"></canvas>     ← năm lớp nền, thứ tự này
   <div class="phu-nen" aria-hidden="true"></div>
   <div class="nen-anh" aria-hidden="true"></div>
   <div class="tran" aria-hidden="true"></div>
   <div class="tran2" aria-hidden="true"></div>

   <div class="boc"> … nội dung … </div>

   <script type="module">
     import * as ui from '/js/ui/index.js';
     ui.khoiDong();      // nạp nền tối/sáng đã lưu + vẽ canvas trời
   </script>

   Nút chuyển nền phải mang `id="doi-nen"` và ô chữ `id="ten-nen"` thì
   `khoiDong()` mới gắn được — xem `web/mau.html`.

   ── BỐN HẠNG KHUNG, GẮN VÀO ĐÂU (luật mới 25/08/2026, xem 3-khung.css) ──
   <section class="tam k-nang">  TẤM CHÍNH của trang — thẻ nhân vật, dòng sổ
                                 cái, form gieo, tấm kết quả thanh toán
   <section class="tam k-lo">    tấm nhấn thứ hai — tấm đọc truyện, khối nạp xu
   <section class="tam k-vua">   tấm phụ đáng kể — thẻ trong danh sách, lược đồ,
                                 tài khoản, số dư, bảng tỉ lệ, bậc model
   <section class="tam k-nhe">   CHỈ ô rất nhỏ — ô tìm, "đang tải", hộp lỗi lẻ
   <div     class="lothe k-lo">  thẻ kết quả gieo thân phận
   Mỗi tấm ĐÚNG MỘT hạng. Quên hạng thì tấm rơi về nét viền 1px.

   ⚠️ ĐỪNG LẤY `.k-nhe` LÀM MẶC ĐỊNH. Nó đã từng là thói quen của cả sáu trang
   (30 lần `.k-nhe`, 2 lần `.k-nang`) và kết quả là một sản phẩm không thấy hoa
   văn ở đâu — trái hẳn yêu cầu. Không chắc chọn hạng nào thì lấy `.k-vua`.

   Đợt 2 (`web/trang/**`): dùng đúng các lớp trong bộ này, KHÔNG tự chế CSS
   mới. Thiếu gì thì thêm vào đây, đừng viết <style> trong trang.

   ── VÁ ĐỢT 3 — tám chỗ hở mà việc dựng trang thật lôi ra ────────────────
   Trang không cần vá nội tuyến nữa; những lớp dưới đây đã có sẵn:

     .nut            `text-decoration:none` + `inline-flex`
                     → `<a class="nut">` không còn gạch chân, không còn phải
                       gán `style="text-decoration:none"`.
     .nut.rong       `flex` thay `block` → thẻ `<a>` tự canh giữa chữ.
     .dk             `flex-wrap:wrap` → ở 390px bốn mục không còn ép co gãy chữ.
                     Bỏ luôn `style="flex-wrap:wrap"` trong trang.
     .hang-nut       hàng nút xuống dòng được. ĐỪNG mượn `.dk` — `.dk` là chỗ
                     của huy hiệu số dư. Lề tự mọc qua `.nhan+`, `.bm+`.
     .lc button[disabled]   ô chọn bị khoá: lõm xuống, mờ đi, dùng token
                     `--khoa`. Bỏ hẳn `b.style.filter` chép tay trong JS.
     .tv input[disabled]    ô nhập bị khoá, cùng bộ với trên.
     .tua            TIÊU ĐỀ TẤM, màu từ token. Dùng cái này, KHÔNG dùng `.nvt`
                     (chữ trắng cứng, chỉ đúng khi nằm trên chân dung `.nvd`).
     .ghi            chữ phụ / chú thích dưới một nhãn hay một tựa.
     .nvg.tren-tam   huy hiệu đặt trên MẶT TẤM thay vì trên chân dung.
     .sc .sc-dong    sổ cái xu — bảng số liệu thật: cột số canh phải, chữ số
                     đều bề ngang, dòng thu/chi phân biệt bằng tam giác ngửa/úp
                     chứ không chỉ bằng màu. Dựng bằng `chiSo.soCai()`,
                     ĐỪNG mượn `details.gp` (đó là khối gấp cho chỉ số list).
     --khoa          token: MỘT công thức "bấm-không-được" cho cả bộ.

   ── VÁ ĐỢT 4 — bố cục và bốn chỗ hở nữa ─────────────────────────────────
   Không có token mới ở đợt này; tất cả đều là lớp/luật dựng trên token cũ.

     .san>.tam   ghim (`position:sticky`) từ 1041px trở lên. Hai cột của sân
                 chơi cao độc lập nhau, chương ngắn thì nửa trái trang thành
                 một mảng nền trơn cao 633px. Lý do chọn `top` chứ không phải
                 `bottom`, và vì sao KHÔNG cân lại tỉ lệ cột: 2-goc.css.
     .sos        lưới ô số TỰ CO theo số chỉ số của thế giới. Ô cuối nong ra
                 cho kín hàng, nên 4 · 5 · 7 · 11 ô đều không để lại lỗ.
                 (`auto-fit` không chữa được ca này — xem 6-chi-so.css.)
     .nhan+.tv   ô nhập đứng ngay dưới một nhãn thì tự có lề trên, y như
                 `.nhan+.hang-nut`. Bỏ lề nội tuyến ở trang tìm thế giới.
     .tv.mot     ô nhập KHÔNG có nút cạnh (ô đặt tên ở màn gieo). Khai hẳn
                 một cột thay vì sống nhờ hành vi ngầm của `1fr auto`.
     .an-tri.canh  ấn triện NẰM TRONG DÒNG CHỮ, 30px. `.an` là
                 `position:absolute` nên chỉ sống trong `.nvd`; `.an-tri` trần
                 là `block` nên chiếm cả một dòng. Đây là bản đặt cạnh tên
                 từng bậc trong bảng tỉ lệ bậc hiếm. Trần 44px.

   ── VÁ ĐỢT 5 — nâng hạng khung + nới bố cục (25/08/2026) ────────────────
   Không có token mới; cả đợt là đổi HẠNG KHUNG trên các tấm sẵn có và hai con
   số bố cục.

     hạng khung  30 tấm `.k-nhe` rải khắp sáu trang → nay mỗi trang có một tấm
                 chính `.k-nang`, tấm nhấn `.k-lo`, tấm phụ `.k-vua`; `.k-nhe`
                 chỉ còn ở ô tìm kiếm và mấy dòng "đang tải" / hộp lỗi.
                 Bảng vai trò → hạng: 3-khung.css.
     .boc        1330px → 1600px. "Túm hết vào giữa" ở màn 1440–1920.
     .van p      62ch → 65ch, thêm `margin-inline:auto`. Nới khung ngoài KHÔNG
                 được nới cột chữ — trần nằm ở chính khối văn, không ở cột lưới.
     .pd         KHÔNG cấp trần — `ch` đo theo cỡ chữ của chính phần tử, mà khối
                 phán định nhỏ hơn văn kể nên 65ch ở đó chỉ ra ~430px. 4-chu.css.
     .phu-nen    lớp phủ mép trang, ĐỔI TÊN từ `.phu`. Tên cũ trùng biến thể
                 `<a class="nut phu">` nên `pointer-events:none` của lớp phủ rò
                 sang: MỌI NÚT PHỤ của cả bảy trang đều không bấm được, mà nhìn
                 thì không thấy gì sai. Chuyện xảy ra thật trên bản đã lên. Lý
                 do đầy đủ ở 2-goc.css.

   ── HAI BÀI RÀ TRƯỚC KHI ĐẨY ────────────────────────────────────────────
     node web/js/ui/ra-bien.mjs     <tệp…>   biến CSS dùng-mà-chưa-khai
     node web/js/ui/ra-va-cham.mjs  <tệp…>   hai thành phần trùng tên lớp
   Cả hai nhận cùng một danh sách tệp:
     web/css/*.css web/*.html web/trang/*.html web/trang/js/*.js web/js/ui/*.js
   ══════════════════════════════════════════════════════════════════════════ */
@import url("https://fonts.googleapis.com/css2?family=Alegreya+SC:wght@500;700;900&family=Literata:opsz,wght@7..72,400;7..72,500;7..72,600&family=Be+Vietnam+Pro:wght@400;500;600;700&display=swap");

@import url("1-token.css");      /* token: màu, chữ, giãn cách, easing, khung */
@import url("2-goc.css");        /* reset, body, năm lớp nền, bố cục gốc */
@import url("3-khung.css");      /* .tam + bốn hạng khung viền */
@import url("4-chu.css");        /* đỉnh trang, nhãn, văn kể, phán định */
@import url("5-nut.css");        /* nút, ô chọn, ô nhập, huy hiệu */
@import url("6-chi-so.css");     /* thanh, ô số, danh sách gấp, bậc model */
@import url("7-the.css");        /* thẻ nhân vật */
@import url("8-man.css");        /* màn phủ, màn gieo thân phận */
@import url("9-trang-tri.css");  /* hoa văn dùng chung */
