/* ═══════════ PHÔNG CHỮ TIẾNG VIỆT ĐỦ DẤU — TỰ LƯU TRONG PHẦN MỀM (đợt 1583, việc o890) ═══════════

   🔴 VÌ SAO CÓ TỆP NÀY. Anh Tiến 31/08/2026: "kiểu chữ băng rôn không phù hợp với tiếng việt vì các
   chữ có dấu bị lỗi form". Đo tận tay trên app dev cổng 5270 (Chrome thật, đọc `getClientRects` từng
   ký tự của chính dải chữ đang treo) thì gốc bệnh KHÔNG nằm ở nét chữ mà ở chỗ TRÌNH DUYỆT ĐANG GHÉP
   HAI PHÔNG TRONG MỘT TỪ:

       ô chữ của C · H · O · M · N · G · I · T   cao 22,43px   (phông thứ nhất)
       ô chữ của Ừ · Ộ                           cao 18,27px   (phông thứ HAI)

   Chuỗi phông của app mở đầu bằng Helvetica/Arial. Arial trên máy này phủ tới Latin-1 nên À · Ê · Ô ·
   Ơ · Ư · Đ vẫn là chữ của nó, NHƯNG dải Latin Extended Additional U+1EA0–1EF9 — nơi ở của toàn bộ
   chữ HAI DẤU của tiếng Việt (Ừ Ộ Ợ Ễ Ậ Ẫ Ổ …) — thì THIẾU. Thiếu glyph thì trình duyệt lẳng lặng đi
   mượn một phông khác cho ĐÚNG những ký tự ấy. Đo bằng canvas `measureText` ở cỡ 100px, chuỗi phông
   thật của app: chữ O ra 83,30 (đúng số của Arial) còn chữ Ợ ra 85,30 và Ừ ra 82,96 — hai con số ấy
   KHÔNG phải của Arial (Arial trả 77,78 và 79,59). ⇒ Trong một từ có hai bộ nét, hai độ dày, hai
   chiều cao dấu. Đúng chữ "lỗi form" của anh.

   ⚠ ĐÂY LÀ LỖI HỎNG LẶNG LẼ ĐIỂN HÌNH: build xanh, test xanh, không một câu lỗi nào, và chữ vẫn đọc
   được — chỉ xấu. Nó còn nằm ở MỌI màn hình chứ không riêng băng rôn; tệp này mới chỉ chữa phần chữ
   TO (băng rôn, biểu ngữ) là chỗ mắt nhìn ra ngay. Việc mở rộng ra toàn app đã ghi ở VIEC-SAP-LAM.

   ⚠ ĐÍNH CHÍNH 15/09/2026 (đợt 2546, việc o2057 — số đo của đợt 2535, việc o899): hai câu «Arial trên
   máy này THIẾU dải U+1EA0–1EF9» và «nó còn nằm ở MỌI màn hình» ở trên là chẩn đoán SAI; giữ nguyên
   để biết lịch sử, ⛔ đừng dựa vào. Đo lại:
     · Bảng glyph của arial.ttf bản 7.06 và arialbd.ttf (đọc thẳng CharacterToGlyphMap): ĐỦ 90/90 ký
       tự U+1EA0–1EF9.
     · Chrome thật, CSS.getPlatformFontsForNode trên đúng chuỗi phông của app.css, cỡ 14 và 16px, nét
       400/600/700: 168/168 ô đo do ĐÚNG MỘT phông vẽ (ArialMT hoặc Arial-BoldMT); câu mẫu 61 glyph
       dày dấu ⛔ mượn phông nào; chữ Ộ rộng đúng bằng chữ O.
   ⇒ Chữ thân bài ⛔ có lỗi «một từ hai bộ nét»; đổi phông toàn app nay chỉ còn là chuyện KIỂU CHỮ.
   Kho phông tự lưu dưới đây VẪN ĐÚNG cho băng rôn, biểu ngữ (chọn theo kiểu chữ, và đi theo phần mềm).
   ⛔ Đặt họ Be Vietnam Pro vào html/body: kho chỉ có nét 700 + 800 nên thân bài nét 400 bị vẽ bằng mặt
   ĐẬM, cả app rộng thêm 8,1%. Số đo đầy đủ: khối đợt 2535 cuối src/TKNB.Tests/FontDuPhongTests.cs.

   ⛔ VÌ SAO TỰ LƯU CHỨ KHÔNG NHÚNG ĐỊA CHỈ CỦA GOOGLE. Máy triển khai 10.64.137.100 chạy trong mạng
   nội bộ; treo phông ở địa chỉ ngoài là ngày mất mạng thì cả cơ quan xem băng rôn bằng phông dự
   phòng, tức quay về đúng lỗi vừa chữa. Quy tắc "tài nguyên đi theo phần mềm phải nằm trong phần
   mềm" (anh chốt 09/08/2026) cũng đòi đúng thế. Tám tệp woff2 trong thư mục này tổng 124 KB, đi theo
   git nên chép kho là đi theo đủ.

   📦 BA HỌ PHÔNG, CẢ BA ĐỀU CÓ DẢI U+1EA0–1EF9 ĐẦY ĐỦ (đã dò từng họ bằng cửa css2 của Google):
     · Be Vietnam Pro   — do nhóm người Việt vẽ riêng cho tiếng Việt; dấu được VẼ, không phải chắp.
     · Oswald           — họ chữ hẹp kiểu áp phích, hợp dải dọc bề ngang chỉ 40px.
     · Bricolage Grotesque — họ chữ đang thịnh, mặt chữ khoẻ, dùng cho tiêu đề lớn.

   ⛔ BỐN HỌ CHỮ ĐANG THỊNH NHƯNG PHẢI LOẠI vì Google KHÔNG phát hành bộ tiếng Việt cho chúng — dùng
   là dựng lại y nguyên lỗi ghép hai phông ở trên: Anton · Bebas Neue · Outfit · Sora · Instrument
   Sans · Figtree. Thêm họ mới thì PHẢI dò lại dải U+1EA0–1EF9 trước, đừng tin cảm giác.

   🔑 ĐỔI PHÔNG CỦA BĂNG RÔN = SỬA ĐÚNG MỘT DÒNG `--chu-bieu-ngu` ngay dưới. Nơi dùng chỉ đọc biến,
   ⛔ đừng gõ tên họ chữ vào từng tệp cách ly. Giấy phép: cả ba họ theo SIL Open Font License 1.1,
   xem `GIAY-PHEP.md` cùng thư mục.                                                                */

:root {
    /* Họ chữ cho BĂNG RÔN + BIỂU NGỮ. Đổi sang 'Oswald' hoặc 'Bricolage Grotesque' nếu anh thích. */
    --chu-bieu-ngu: 'Be Vietnam Pro';

    /* ⚠ Đuôi dự phòng BẮT BUỘC theo luật đầu `app.css` (đợt 386): ba phông emoji + một họ chung.
       Máy triển khai thiếu phông emoji của hệ điều hành thì biểu tượng hoá hộp vuông.
       ⚠ ĐỢT 2695 (việc h322) — BỎ 'Helvetica Neue' + Helvetica khỏi ĐẦU chuỗi: đợt 2655 đã bỏ ở
       `app.css`, `BangRonChay.razor.css`, `BieuNguHong.razor.css` nhưng SÓT đúng dòng này, mà
       biến ấy là đuôi dự phòng của CẢ BA họ chữ băng rôn. Trên máy Apple, 'Helvetica Neue' CÓ THẬT
       và thiếu dải hai dấu U+1EA0–1EF9 ⇒ chữ Ộ Ừ Ệ Ậ Ợ phải mượn phông khác, đúng bệnh "chữ có dấu
       thì nhỏ". Windows ⛔ đổi một điểm ảnh nào: nó vốn ánh xạ thẳng Helvetica sang Arial. */
    --chu-du-phong: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif,
                    'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';

    /* ⓘ CHỮ THÂN BÀI cũng dùng 'Be Vietnam Pro' từ đợt 2695 (việc h322), nhưng tên họ ấy ghi THẲNG
       ở luật `html, body` trong `app.css` chứ ⛔ qua biến — hàng rào `FontDuPhongTests` đọc thẳng
       chuỗi để soi nét 400, gặp `var(…)` là nó đậu rỗng. Nét 400/500/600 tải bổ sung ở đợt này. */
}

/* ⚠ `font-display: swap` chứ ⛔ không phải `block`: chữ hiện ngay bằng phông máy rồi mới đổi sang
   phông thật. Tệp nằm cùng máy chủ và chỉ 12 KB nên quãng đổi rất ngắn; chọn `block` là đánh đổi
   lấy một khoảng băng rôn TRỐNG TRƠN, mà tấm này treo cho cả cơ quan xem. */

/* ───────── Be Vietnam Pro — NÉT 400 / 500 / 600 cho THÂN BÀI (đợt 2695, việc h322) ─────────
   Sáu tệp dưới đây tải bổ sung 17/09/2026 từ cửa css2 của Google (subset `vietnamese` + `latin`,
   tổng 101 KB), rồi LƯU THEO PHẦN MỀM đúng luật «tài nguyên đi theo phần mềm» — ⛔ nhúng địa chỉ
   của Google, vì máy triển khai 10.64.137.100 nằm trong mạng nội bộ.
   ⓘ ⛔ tải subset `latin-ext`: app chỉ in tiếng Việt, hai subset này đã phủ đủ. */
@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('be-vietnam-pro-400-viet.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
                   U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('be-vietnam-pro-400-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
                   U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
                   U+FEFF, U+FFFD;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url('be-vietnam-pro-500-viet.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
                   U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url('be-vietnam-pro-500-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
                   U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
                   U+FEFF, U+FFFD;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('be-vietnam-pro-600-viet.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
                   U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('be-vietnam-pro-600-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
                   U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
                   U+FEFF, U+FFFD;
}

/* ───────── Be Vietnam Pro — nét 700 / 800 cho BĂNG RÔN ───────── */
@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('be-vietnam-pro-700-viet.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
                   U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('be-vietnam-pro-700-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
                   U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
                   U+FEFF, U+FFFD;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 800;
    font-display: swap;
    src: url('be-vietnam-pro-800-viet.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
                   U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
    font-family: 'Be Vietnam Pro';
    font-style: normal;
    font-weight: 800;
    font-display: swap;
    src: url('be-vietnam-pro-800-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
                   U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
                   U+FEFF, U+FFFD;
}

/* ───────── Oswald (họ chữ HẸP kiểu áp phích) ─────────
   ⓘ Một tệp phủ cả dải đậm 200–700: Google phát hành Oswald dạng phông BIẾN THIÊN. ⛔ Đừng tải thêm
   một tệp riêng cho mỗi nấc đậm — cùng một tệp, tải hai lần. */
@font-face {
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 200 700;
    font-display: swap;
    src: url('oswald-var-viet.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
                   U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 200 700;
    font-display: swap;
    src: url('oswald-var-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
                   U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
                   U+FEFF, U+FFFD;
}

/* ───────── Bricolage Grotesque ───────── */
@font-face {
    font-family: 'Bricolage Grotesque';
    font-style: normal;
    font-weight: 800;
    font-display: swap;
    src: url('bricolage-800-viet.woff2') format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0,
                   U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
    font-family: 'Bricolage Grotesque';
    font-style: normal;
    font-weight: 800;
    font-display: swap;
    src: url('bricolage-800-latin.woff2') format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
                   U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
                   U+FEFF, U+FFFD;
}
