/* ⚠ FILE NÀY CHÉP TỪ BỘ BÀN GIAO "Thiết kế lại thuyết minh" (2026-08-06), CÓ VÁ 2 LỖI CÚ PHÁP.
   Đừng chép đè bằng bản gốc mà không vá lại — xem hai chú thích "VÁ CÚ PHÁP" bên dưới.
   Nạp SAU calcsheet.css; cần fonts/barlow.css nạp trước (chạy ban-giao/tai-font-barlow.js). */
/* ============================================================================
 *  mau-thuyet-minh.css — Mẫu trình bày bản thuyết minh in (A4 dọc, đen trắng)
 *  Nạp SAU calcsheet.css. Chỉ đổi TRÌNH BÀY, không đụng cấu trúc DOM của app.
 *
 *  Cách nạp trong tiepdia-app/index.html:
 *      <link rel="stylesheet" href="css/calcsheet.css">
 *      <link rel="stylesheet" href="css/mau-thuyet-minh.css">   <-- thêm dòng này
 *
 *  Bật/tắt: thêm/bỏ lớp `tm-print` trên <body> (mặc định dưới đây là LUÔN BẬT khi in,
 *  và bật trên màn hình khi <body class="tm-print">).
 * ========================================================================== */

:root{
  /* --- HỆ CỠ CHỮ (pt — dùng pt để khớp Word, không dùng px) --- */
  --tm-fs-body:      13pt;   /* thân bài, đoạn thuyết minh                  */
  --tm-fs-formula:   12pt;   /* công thức (nhỏ hơn thân bài 1 bậc)          */
  --tm-fs-table:     11pt;   /* MỌI ô bảng, kể cả tiêu đề cột               */
  --tm-fs-head:      13pt;   /* tiêu đề mục "1. ĐIỆN TRỞ SUẤT ĐẤT"          */
  --tm-fs-label:     10pt;   /* nhãn "BẢNG 3 — …"                           */
  --tm-fs-note:      11pt;   /* ghi chú, nguồn, chú thích hình              */
  --tm-fs-pghdr:     11pt;   /* header trang                                */
  --tm-fs-pgftr:     10pt;   /* footer trang / số trang                     */
  --tm-fs-ref:       11pt;   /* tài liệu tham khảo                          */

  /* --- MÀU (in đen trắng: KHÔNG nhấn bằng màu, chỉ bằng đậm/nền xám) --- */
  --tm-ink:          #1d1f20;   /* toàn bộ chữ                              */
  --tm-rule:         rgba(29,31,32,.16);  /* đường kẻ mảnh (header/footer)  */
  --tm-grid:         #1d1f20;   /* lưới bảng — đen, nét 1px                 */
  --tm-th-bg:        #f5f5f8;   /* nền tiêu đề cột (xám rất nhạt)           */
  --tm-hi-bg:        #e7e7ea;   /* nền dòng ĐANG TRA trong bảng tra         */

  /* --- FONT — KHỚP TUYỆT ĐỐI VỚI BẢN MẪU ---
     Barlow (thân bài) + Barlow Condensed (tiêu đề, header, tên công trình).
     ĐIỀU KIỆN: đã chạy `node ban-giao/tai-font-barlow.js` và nạp fonts/barlow.css
     trong <head> TRƯỚC file này. Nếu chưa, hai dòng dưới tự lùi về Be Vietnam Pro
     nhờ danh sách dự phòng — bản in vẫn đúng cỡ chữ, chỉ khác dáng chữ. */
  --tm-font-body:    'Barlow', 'Be Vietnam Pro', system-ui, sans-serif;
  --tm-font-head:    'Barlow Condensed', 'Barlow', 'Be Vietnam Pro', system-ui, sans-serif;

  /* Weight: Barlow Condensed hẹp hơn Barlow ~12%, nên tiêu đề dùng 700 (không phải
     600 như trên web) để giữ đúng độ đậm thị giác của bản mẫu khi in. */
  --tm-fw-head:      700;
  /* [2026-09-07, user chốt] thân phiếu Barlow 500: 400 trên màn hình quá mảnh (đo: dòng tính 11pt, "Trong đó" 12px xám) */
  --tm-fw-body:      500;

  /* --- TRANG IN --- */
  --tm-page-mt:      9mm;    /* lề trên  (= 34px @96dpi trong bản mẫu)      */
  --tm-page-mb:      9mm;    /* lề dưới                                     */
  --tm-page-ml:      10.6mm; /* lề trái  (= 40px)                           */
  --tm-page-mr:      10.6mm; /* lề phải                                     */
}

/* ==========================================================================
   1. TRANG IN
   ========================================================================== */
@page{
  size: A4 portrait;
  margin: var(--tm-page-mt) var(--tm-page-mr) var(--tm-page-mb) var(--tm-page-ml);
}

/* 🔴 [2026-08-06] VÁ CÚ PHÁP so với bản bàn giao: bản gốc viết
       `body.tm-print,` xuống dòng rồi `@media print{ body{ … }}`
   — đó KHÔNG phải CSS hợp lệ (danh sách selector không được kết thúc bằng at-rule).
   ĐO TRÊN TRÌNH DUYỆT: nguồn có 3 khối @media, chỉ 1 khối sống sót ⇒ hai khối in bị nuốt,
   Ctrl+P khi body chưa mang class `tm-print` thì cỡ chữ và căn đều KHÔNG áp.
   Nay tách làm hai luật rời, đúng ý tác giả. */
/* 🔴 [2026-08-08, vá TRÀN PHẠM VI — user báo "giao diện bị thay đổi"] Bản mẫu của chủ trì viết
   cho MỘT TRANG thuyết minh độc lập nên áp thẳng lên body; trong app thì body = CẢ GIAO DIỆN
   THAO TÁC. Đo trên live: toàn app đổi Be Vietnam Pro→Barlow, 14px→13pt, nền xám→trắng; .icard
   mọi thẻ mất viền/bóng; bảng Thẻ 2/5 (.ltab/.guide-mtx/.panel/.cm-tab) đổi dáng; badge .verdict
   ngoài phiếu mất màu. NGUYÊN TẮC từ nay: luật MÀN HÌNH của mẫu chỉ áp TRONG `.result-sheet`
   (phiếu Thẻ 3); khối @media print giữ nguyên (khi in, giao diện thao tác đã bị ẩn ở mục 9). */
body.tm-print .result-sheet{
  background:#fff;
  color:var(--tm-ink);
  font-family:var(--tm-font-body);
  font-weight:var(--tm-fw-body);
  font-size:var(--tm-fs-body);
  line-height:1.6;
  -webkit-font-smoothing:auto;   /* calcsheet đặt antialiased cho cả app → nét mảnh thêm trên Mac; phiếu trả về mặc định */
}
/* 🔴 [2026-08-08, user báo "hiển thị quá sát"] LỀ ĐỌC TRÊN MÀN HÌNH.
   Mẫu bỏ dáng thẻ web nên `.blk` về `padding:0` (bản cũ 15px 17px) — trên GIẤY đúng, vì lề là
   việc của khổ trang; nhưng trên MÀN HÌNH thì chữ và bảng dính sát mép khung phiếu, không còn
   khoảng thở. Trả lại lề CHUNG cho cả phiếu (giống lề trang giấy) thay vì trả padding cho từng
   khối: như vậy tiêu đề mục, thân bài và bảng vẫn thẳng một mép trái đúng ý mẫu.
   ⚠ Chỉ áp cho màn hình — khi in, lề do `@page` lo, thêm padding nữa là lệch lề hai lần. */
@media screen{
  /* 🔴 [2026-09-07, user: "phần này chưa bo góc như cách thể hiện chung"] KHUNG PHIẾU trên MÀN HÌNH phải mang
     dáng THẺ như mọi khối khác của app — đo được: .icard và .result-actions bo 16px, viền .5px var(--line),
     bóng var(--sh-1); riêng .result-sheet bo 0, không viền, không bóng ⇒ một khối trắng góc vuông giữa các thẻ bo góc.
     CHỈ áp cho MÀN HÌNH: trên giấy mẫu chốt "không bo góc, không đổ bóng" và lề do @page lo. */
  body.tm-print .result-sheet{ padding:38px 54px 44px; border:.5px solid var(--line); border-radius:16px; box-shadow:var(--sh-1); }
  /* Thanh mục lục 1..6 là ĐIỀU HƯỚNG (đã ẩn khi in ở mục 9) → trả lại dáng viên thuốc của app; luật quét bo góc
     ở mục 4 dùng !important nên phải !important mới thắng. */
  body.tm-print .result-sheet .secnav-chip{ border-radius:999px !important; }
  /* Bảng rộng (chú thích ký hiệu, bảng tra) tràn ngang thì cuộn TRONG khung, không đẩy cả phiếu. */
  body.tm-print .result-sheet table{ max-width:100%; }

  /* 🔴 [2026-09-08, user: "lề trên dưới và 2 bên ở mục thể hiện kết quả tính toán chi tiết bị sát quá,
     nên để có khoảng cách để nhìn đỡ bị ngợp" → user chốt PHƯƠNG ÁN B: bó khổ chữ lại như một TRANG TÀI LIỆU]
     ĐO BẢN CŨ (cửa sổ 1440px): phiếu rộng 1284px ⇒ dòng chữ dài ~175 ký tự (vùng dễ đọc 65-90); lề trong
     14/22/20px trong khi khung bo góc 16px ⇒ cung bo cắn vào dòng đầu; khoảng giữa 10 mục 18px mà MỘT dòng
     thân bài đã cao 25,7px ⇒ ranh giới hai mục HẸP HƠN khoảng cách hai dòng cùng đoạn, 10 mục đọc ra như
     một bức tường chữ liền mạch. Ba thứ đó cộng lại chính là cảm giác "ngợp".
     NAY: khung phiếu là một TRANG — bề ngang cố định, căn giữa, lề trong rộng; MỘT mép trái và MỘT mép phải
     duy nhất (chữ, bảng, hình cùng khổ: không bó riêng từng loại nội dung, không lấn lề âm) vì chính cái mép
     thẳng mới tạo ra dáng "trang giấy", khoảng trắng thêm chỉ là phần phụ; hình vẽ nhờ đó về gần đúng CỠ
     THIẾT KẾ (viewBox 820) thay vì bị kéo lên 1,57 lần như trước, nét và chữ nhãn trong hình sạch hơn.
     ⚠ CHỈ MÀN HÌNH. Các luật .blk/.blk-top/.subblk/.tm-hinh/table.reftab ở dưới KHÔNG nằm trong @media nên
     đang sống cả trên GIẤY — tuyệt đối không sửa tại chỗ, chỉ được ĐÈ trong khối này; khi in lề do @page lo.
     ⚠ max-width bắt buộc mang #paneResult mới thắng `#paneResult .result-sheet{max-width:none}`
     (calcsheet.css:178 — luật đồng bộ độ rộng 5 thẻ); viết `body.tm-print .result-sheet{max-width}` là câm. */
  body.tm-print #paneResult .result-sheet{ max-width:960px; margin-left:auto; margin-right:auto; }
  /* Thanh nút Lưu/Xuất TÁC ĐỘNG LÊN chính phiếu này ⇒ phải thẳng mép với trang, không thì trang trông
     như bị thụt vào giữa hai thanh rộng. (Thanh "Tính toán" thì KHÔNG bó: nó thuộc về khối nhập số liệu
     phía trên, kéo vào trong là rời khỏi nhóm của nó.) #lineActions của Thẻ 3 dùng chung class nên phải
     nhắm bằng ID + #paneResult. */
  body.tm-print #paneResult #resultActions{ max-width:960px; margin-left:auto; margin-right:auto; }
  /* Phần NHỊP DỌC (khoảng giữa mục, tiêu đề, hình, bảng, khối "Trong đó") nằm ở khối @media screen
     CUỐI FILE — bắt buộc, vì các luật gốc của chúng viết SAU chỗ này và CÙNG độ ưu tiên
     (`body.tm-print .result-sheet .blk` …), đặt ở đây là bị đè câm. Đo được: 30px hoá ra 18px. */
}
@media print{
  body{
    background:#fff;
    color:var(--tm-ink);
    font-family:var(--tm-font-body);
    font-weight:var(--tm-fw-body);
    font-size:var(--tm-fs-body);
    line-height:1.6;
  }
}

/* Đoạn văn căn đều hai biên — nếp trình bày hồ sơ hành chính */
/* (cùng lỗi cú pháp như trên — tách rời) */
body.tm-print .result-sheet p{ text-align:justify; text-wrap:pretty; }
@media print{ p{ text-align:justify; text-wrap:pretty; } }

/* Ép font xuống MỌI phần tử trong phiếu — calcsheet.css gán font riêng cho
   .fx / .trace / .kbadge / .mv-sym (var(--mono)) và input/select (font:inherit
   nhưng bị trình duyệt ghi đè), nên chỉ đặt ở body là không đủ. */
/* [2026-09-07, KaTeX] CHỪA cây .katex: luật ép font này từng đè lên font toán của KaTeX (đo: .mathnormal ra Barlow) →
   công thức mất dáng sách. Chữ Việt trong công thức (\text{}) vẫn về Barlow bằng luật riêng ở calcsheet.css. */
body.tm-print .result-sheet,
body.tm-print .result-sheet *:not(.katex):not(.katex *){
  font-family:var(--tm-font-body);
}
body.tm-print .blk > .blk-top .b-name,
body.tm-print .tm-pg-hdr b,
body.tm-print .tm-pg-hdr > div:last-child,
body.tm-print .tm-bia-title,
body.tm-print .tm-bia-sub{
  font-family:var(--tm-font-head);
}

/* ==========================================================================
   2. KHỐI MỤC (.blk) — bỏ dáng "thẻ web", trả về khối văn bản
   --------------------------------------------------------------------------
   Bản mẫu: không bo góc, không đổ bóng, không viền hộp. Mục phân cách bằng
   khoảng trắng + kẻ chân tiêu đề, không phải bằng card.
   ========================================================================== */
/* [2026-08-08] BỎ `.icard` và `.mini` khỏi danh sách của bản mẫu: `.icard` là thẻ dùng KHẮP
   giao diện thao tác (Thẻ 1/2/4/5) — giữ lại là bóc viền/bóng của cả app; `.mini` không có
   trong app. `.blk`/`.sumcard` là của phiếu, scope vào .result-sheet. */
body.tm-print .result-sheet .blk,
body.tm-print .result-sheet .sumcard{
  background:#fff;
  border:0;
  border-radius:0;
  box-shadow:none;
  padding:0;
  margin:0 0 18px;
}

/* Tiêu đề mục cấp 1: 13pt, ĐẬM, CHỮ HOA, giãn ký tự nhẹ, kẻ chân mảnh */
body.tm-print .blk > .blk-top{
  border-bottom:1px solid var(--tm-rule);
  padding-bottom:6px;
  margin-bottom:10px;
  break-after:avoid;
  page-break-after:avoid;
}
body.tm-print .blk > .blk-top .b-name{
  font-family:var(--tm-font-head);
  font-size:var(--tm-fs-head);
  font-weight:var(--tm-fw-head);
  text-transform:uppercase;
  letter-spacing:.03em;
  color:var(--tm-ink);
}

/* Mục con (3.1, 3.2…): cùng 13pt đậm nhưng KHÔNG chữ hoa, không kẻ chân */
body.tm-print .subblk{
  border-top:0;
  padding-top:0;
  margin-top:12px;
}
body.tm-print .subblk > .blk-top .b-name{
  font-size:var(--tm-fs-head);
  font-weight:700;
  text-transform:none;
  letter-spacing:0;
}

/* Giá trị lớn (.b-val): bản mẫu KHÔNG dùng số cỡ lớn treo bên phải tiêu đề.
   Kết quả được viết thành MỘT DÒNG kẻ trên/dưới ở cuối mục (xem mục 6). */
body.tm-print .b-val{
  font-size:var(--tm-fs-body);
  font-weight:700;
  letter-spacing:0;
}

/* ==========================================================================
   3. CÔNG THỨC (.fx) — kiểu sách giáo khoa, căn giữa, không nền
   ========================================================================== */
body.tm-print .fx{
  background:transparent;
  border-radius:0;
  padding:6px 0;
  margin:8px 0 14px;
  font-family:var(--tm-font-body);     /* KHÔNG dùng mono — công thức đọc như sách */
  font-size:var(--tm-fs-formula);
  color:var(--tm-ink);
  text-align:center;
  overflow-x:visible;
}
body.tm-print .fx sub,
body.tm-print .fx sup{ font-size:.72em; }

/* Phân số: app đã có .frac/.fr-n/.fr-d đúng kiểu sách giáo khoa — giữ nguyên,
   chỉ chỉnh nét gạch cho in đen trắng rõ. */
body.tm-print .frac > .fr-d{ border-top:1.1px solid var(--tm-ink); }

/* Vết tính (.trace): cùng font thân bài, không mono, không xám */
body.tm-print .trace,
body.tm-print .trace .tr-head{
  font-family:var(--tm-font-body);
  font-size:var(--tm-fs-note);
  color:var(--tm-ink);
  line-height:1.75;
}
body.tm-print .trace .tr-row b{ color:var(--tm-ink); font-weight:700; }
/* [2026-09-23, rà giao diện PH-11] nhãn "Bước 1", "Bước 2" đứng cùng dòng công thức: căn theo ĐƯỜNG CHÂN của công thức
   dựng toán (trục của "R∥ =") thay vì căn giữa chiều cao phân số (nhãn từng rơi xuống ngang mẫu số) */
body.tm-print .trace .tr-head:has(.katex){ align-items:baseline; }

/* ==========================================================================
   4. BẢNG — mọi bảng dùng CHUNG một diện mạo
   --------------------------------------------------------------------------
   11pt · lưới 1px đen · tiêu đề cột nền xám nhạt chữ ĐEN (không xanh, không
   chữ trắng — chữ trắng trên nền màu biến mất khi in đen trắng).
   ========================================================================== */
/* [2026-08-08] BỎ `.ltab` (bảng toàn tuyến Thẻ 2), `.guide-mtx` + `.panel table` (Thẻ 5),
   `.cm-tab` (so sánh Thẻ 2) khỏi bản mẫu: chúng thuộc GIAO DIỆN THAO TÁC, không nằm trong
   phiếu — giữ lại là đổi dáng bảng của cả app ngay trên màn hình. Trong phiếu chỉ có
   `table.reftab` (bảng tra) — scope vào .result-sheet. */
body.tm-print .result-sheet table.reftab{
  width:100%;
  border-collapse:collapse;
  border-spacing:0;
  border:1px solid var(--tm-grid);
  border-radius:0;
  background:#fff;
  font-size:var(--tm-fs-table);
  margin:6px 0 10px;
}
body.tm-print .result-sheet table.reftab th,
body.tm-print .result-sheet table.reftab td{
  border:1px solid var(--tm-grid);
  border-radius:0;
  padding:5px 8px;
  color:var(--tm-ink);
  vertical-align:middle;
  font-size:var(--tm-fs-table);
}
/* 🔴 [2026-08-06] BỔ SUNG so với bản bàn giao: BẢNG CHÚ GIẢI KÝ HIỆU (`table.rt-round`, do
   `sectionLegend` sinh) BỊ SÓT khỏi danh sách selector — và nó tô kiểu bằng STYLE NỘI TUYẾN
   trong JS (`color:#fff`, `background:var(--grid-hdr)`, `font-size:10.5px`), nên luật CSS
   thường KHÔNG thắng nổi. ĐO ĐƯỢC trước khi vá: th 7,9pt nền xanh EVN chữ TRẮNG, td 8,6pt chữ
   xanh — tức đúng cái bản mẫu muốn diệt (chữ trắng trên nền màu, in đen trắng là mất chữ), mà
   lại nằm ngay bảng chú giải của hình vẽ.
   Dùng `!important` có chủ đích: file này là LỚP PHỦ CHỈ DÙNG KHI IN, không đụng giao diện thao
   tác — đây là chỗ duy nhất thắng được style nội tuyến mà không phải sửa hàm dựng hình. */
body.tm-print .result-sheet table.rt-round th,
body.tm-print .result-sheet table.rt-round td{
  font-size:var(--tm-fs-table) !important;
  color:var(--tm-ink) !important;
  background:transparent !important;
  border:1px solid var(--tm-grid) !important;
  border-radius:0 !important;
}
body.tm-print .result-sheet table.rt-round th{
  background:var(--tm-th-bg) !important;
  font-weight:700 !important;
  text-align:center !important;
}
body.tm-print .result-sheet table.rt-round{ border-collapse:collapse !important; border-radius:0 !important; }

/* [2026-08-06] Mẫu §Trang in: "Không bo góc, không đổ bóng, không hộp màu ở BẤT KỲ ĐÂU".
   Đo trên DOM sau khi áp mẫu vẫn còn 3 chỗ bo góc (khung bảng ρtt 12px, details.reftbl 12px,
   thanh đo .gauge-track 999px) — quét sạch một lượt thay vì đuổi từng lớp. */
body.tm-print .result-sheet *{ border-radius:0 !important; box-shadow:none !important; }

/* Tiêu đề cột: nền xám nhạt, chữ ĐEN đậm, căn giữa (chỉ bảng tra TRONG phiếu — 2026-08-08) */
body.tm-print .result-sheet table.reftab th{
  background:var(--tm-th-bg);
  color:var(--tm-ink);
  font-weight:700;
  text-align:center;
  letter-spacing:.02em;
  -webkit-print-color-adjust:exact;
  print-color-adjust:exact;
}
/* BỎ sọc chẵn/lẻ khi in — lưới đen đã đủ dò dòng, sọc làm bản in bẩn */
body.tm-print .result-sheet table.reftab tr:nth-child(even) td,
body.tm-print .result-sheet .reftab tr:nth-child(even) td{ background:#fff; }

/* Dòng / ô ĐANG TRA: nền xám + chữ đậm (thay cho vàng — vàng in ra gần như trắng) */
body.tm-print .result-sheet table.reftab tr.hi-row td,
body.tm-print .result-sheet table.reftab td.hi-col{
  background:var(--tm-hi-bg);
  color:var(--tm-ink);
  font-weight:700;
  -webkit-print-color-adjust:exact;
  print-color-adjust:exact;
}

/* Nhãn trên bảng ("BẢNG 3 — ĐIỆN TRỞ TẢN CỦA TỪNG BỘ") */
body.tm-print .tm-tbl-label{
  font-size:var(--tm-fs-label);
  text-transform:uppercase;
  letter-spacing:.06em;
  opacity:.72;
  margin:0 0 5px;
}

/* Không cắt bảng giữa chừng (scope phiếu — 2026-08-08) */
body.tm-print .result-sheet table{ break-inside:auto; }
body.tm-print .result-sheet tr{ break-inside:avoid; page-break-inside:avoid; }
body.tm-print .result-sheet thead{ display:table-header-group; }

/* ==========================================================================
   5. GHI CHÚ / NGUỒN — bỏ hộp màu, về chữ thường 11pt
   ========================================================================== */
/* [2026-08-08] BỎ `.line-cmp-note` (ghi chú của Thẻ 2 — ngoài phiếu); `.note` cũng có ở Thẻ 2
   nên scope .result-sheet: chỉ ghi chú TRONG phiếu theo mẫu, ngoài phiếu giữ hộp màu của app. */
body.tm-print .result-sheet .src,
body.tm-print .result-sheet .note,
body.tm-print .result-sheet .reftab-note{
  background:transparent;
  border:0;
  border-left:0;
  border-radius:0;
  padding:0;
  margin:6px 0 0;
  font-size:var(--tm-fs-note);
  color:var(--tm-ink);
  opacity:.78;
  line-height:1.55;
}

/* Tài liệu tham khảo */
body.tm-print .tm-refs{ font-size:var(--tm-fs-ref); line-height:1.55; }
body.tm-print .tm-refs p{ margin:0 0 5px; text-align:left; }

/* ==========================================================================
   6. KẾT LUẬN — MỘT DÒNG kẻ trên/dưới (thay cho "viên thuốc" .verdict)
   --------------------------------------------------------------------------
   Bản mẫu viết kết quả thành một dòng chạy hết bề ngang, ví dụ:
       Điện trở tiếp địa hệ thống:  R_ht = 19,27 Ω ≤ [Rđ] = 30,00 Ω → ĐẠT
   Markup đề nghị (thay cho <span class="verdict ok">):
       <div class="tm-ket-luan"><span>Nhãn:</span><b>Biểu thức → ĐẠT</b></div>
   ========================================================================== */
body.tm-print .tm-ket-luan{
  display:flex;
  align-items:baseline;
  gap:8px;
  margin:10px 0 0;
  padding:6px 0;
  border-top:1px solid var(--tm-ink);
  border-bottom:1px solid var(--tm-ink);
  font-size:var(--tm-fs-formula);
  break-inside:avoid;
}
body.tm-print .tm-ket-luan b{ font-size:var(--tm-fs-body); font-weight:700; }
body.tm-print .tm-ket-luan sub{ font-size:.72em; }

/* Nếu vẫn dùng .verdict sẵn có thì ép nó về khung viền đen chữ đen.
   [2026-08-08] scope .result-sheet: badge ĐẠT/CHƯA ĐẠT ở Thẻ 2 (bảng toàn tuyến) và các thẻ
   thao tác GIỮ MÀU của app — chỉ trong phiếu mới về đen trắng theo mẫu. */
body.tm-print .result-sheet .verdict{
  background:transparent !important;
  color:var(--tm-ink) !important;
  border:1.5px solid var(--tm-ink);
  border-radius:0;
  font-size:var(--tm-fs-table);
  font-weight:700;
  padding:2px 10px;
}

/* ==========================================================================
   7. HEADER / FOOTER LẶP MỖI TRANG
   --------------------------------------------------------------------------
   Markup đề nghị đặt ĐẦU và CUỐI mỗi trang (hoặc dùng position:running() nếu
   engine in hỗ trợ):
     <div class="tm-pg-hdr"><div><b>Tên công trình</b> · Phụ lục …</div><div>HK-DD</div></div>
     <div class="tm-pg-ftr"><span>ghi chú trái</span><span>Trang 03 / 07</span></div>
   ========================================================================== */
body.tm-print .tm-pg-hdr{
  display:flex; justify-content:space-between; align-items:baseline;
  border-bottom:1px solid var(--tm-rule);
  padding-bottom:9px; margin-bottom:18px;
  font-size:var(--tm-fs-pghdr);
}
body.tm-print .tm-pg-hdr b{ font-family:var(--tm-font-head); font-weight:700; }
body.tm-print .tm-pg-hdr.tm-pg-hdr-in{ display:none; }   /* [PH-3] bản sao chỉ hiện khi in */
body.tm-print .tm-pg-hdr > div:last-child{
  font-family:var(--tm-font-head); font-weight:700;
  letter-spacing:.06em; white-space:nowrap; margin-left:12px;
}
body.tm-print .tm-pg-ftr{
  display:flex; justify-content:space-between;
  border-top:1px solid var(--tm-rule);
  padding-top:7px; margin-top:14px;
  font-size:var(--tm-fs-pgftr); opacity:.72;
}

/* ==========================================================================
   8. HÌNH VẼ — khung mảnh, chú thích 11pt bên dưới
   ========================================================================== */
body.tm-print .tm-hinh{
  border:1px solid var(--tm-rule);
  padding:12px;
  margin:0 0 16px;
  background:#fff;
  break-inside:avoid;
}
body.tm-print .tm-hinh img{ width:100%; height:auto; display:block; }
body.tm-print .tm-hinh figcaption,
body.tm-print .tm-hinh .tm-cap{
  font-size:var(--tm-fs-note);
  opacity:.76;
  margin-top:8px;
  text-align:left;
}

/* ==========================================================================
   9. ẨN KHI IN — mọi thứ thuộc giao diện thao tác
   ========================================================================== */
@media print{
  .brand-header, .app-nav, .tabbar, .head-actions, .cta-bar, .compute-bar,
  .result-actions, .fab-ref, .sec-nav, .toggle-trace, .line-tools,
  .line-run, .scrim, .panel, .cmp-modal, .lt-ico, .btn,
  /* [2026-08-22, đợt 7] hai phần tử SÓT: hồ sơ in từng mở đầu bằng ~0,4 trang ô nhập liệu
     (chọn vị trí cột + ô ρ/bề dày từng lớp) đứng trước thuyết minh */
  .result-head, #posInputPanel{ display:none !important; }
  /* [2026-09-11] .tm-ui = khối HƯỚNG DẪN THAO TÁC nằm trong phiếu (mục "Xuất hồ sơ", câu nhắc bật mục 5): không phải nội dung thuyết minh */
  .tm-ui{ display:none !important; }
  /* [2026-09-23, rà giao diện PH-3] bản in mở bằng dòng đầu trang RỒI mới tới dải bốn ô tóm tắt: bản sao đứng trước dải hiện,
     bản trong thân phiếu ẩn. Thanh đo R so với [Rđ] vẽ bằng màu nền, in không nền thì vỡ thành số rời nên ẩn (số ở mục 4). */
  body.tm-print .tm-pg-hdr.tm-pg-hdr-in{ display:flex !important; }
  #sheetBody > .tm-pg-hdr{ display:none !important; }
  .gauge-wrap{ display:none !important; }
  details.meta, details.reftbl{ border:0; }
  details.meta > summary, details.reftbl > summary{ display:none; }
  /* [2026-08-22, đợt 7] Danh mục tài liệu theo THANG CHỮ mẫu (13/12/11/10): cấp chú dẫn 11pt —
     trước đây .refs-list không có luật in nào, rơi về cỡ màn hình. */
  .refs-list{ font-size:11pt; line-height:1.45; }
  details.meta, details.reftbl{ /* ép mở khi in */ }
  details[open] > *{ display:revert; }
}

/* ==========================================================================
   10. BÌA — chỉ dùng nếu app tự dựng trang bìa
   ========================================================================== */
body.tm-print .tm-bia-sub{   /* tên công trình */
  font-family:var(--tm-font-head);
  font-size:26pt; font-weight:700; line-height:1.15; margin:0;
}
body.tm-print .tm-bia-title{ /* tên phụ lục */
  font-family:var(--tm-font-head);
  font-size:38pt; font-weight:700; line-height:1.08; margin:0 0 12px;
  text-transform:uppercase;
}

/* ==========================================================================
   11. CÔNG THỨC DỰNG TOÁN (KaTeX) + KHỐI "TRONG ĐÓ" — [2026-09-07, user chốt Mẫu 1 + Barlow 500]
   --------------------------------------------------------------------------
   Công thức do fxtex.js dựng bằng KaTeX (font toán riêng); chữ Việt trong công thức (tt, mùa, lớp)
   đi theo chữ thân phiếu (luật chung ở calcsheet.css để probe raster ngoài phiếu cũng khớp).
   "Trong đó" thành lưới 3 cột: ký hiệu · trị số · nghĩa, cỡ chú thích 11pt, chữ mực (hết 12px xám).
   ========================================================================== */
body.tm-print .result-sheet .katex{ font-size:1.16em; }
body.tm-print .result-sheet .katex-display{ margin:.45em 0 .65em; padding:2px 0; overflow-x:auto; overflow-y:hidden; }
body.tm-print .result-sheet .katex-display > .katex{ font-size:1.22em; }
body.tm-print .result-sheet .tr-head.tr-eqd{ display:block; font-weight:var(--tm-fw-body); padding:4px 0 0; }
body.tm-print .result-sheet .trace .tr-eq{ padding:2px 0; }
body.tm-print .result-sheet .fx .katex-display{ margin:.2em 0 .3em; }
body.tm-print .result-sheet .fx-cite{ font-size:var(--tm-fs-note); opacity:.78; text-align:center; margin:-2px 0 2px; }
body.tm-print .result-sheet .mv-conv-h{ font-size:var(--tm-fs-note); font-weight:700; padding:6px 0 0; }
body.tm-print .result-sheet .mv-list{ padding:2px 0 6px 1.2em; }
body.tm-print .result-sheet .mv-row{ display:grid; grid-template-columns:4.4em 7.6em 1fr; gap:0 12px; align-items:baseline; font-size:var(--tm-fs-note); line-height:1.55; padding:1px 0; }
body.tm-print .result-sheet .mv-row.mv-2{ grid-template-columns:4.4em 1fr; }
body.tm-print .result-sheet .mv-sym{ min-width:0; font-weight:var(--tm-fw-body); }
body.tm-print .result-sheet .mv-val{ font-variant-numeric:tabular-nums; white-space:nowrap; }
body.tm-print .result-sheet .mv-desc{ color:var(--tm-ink); }
body.tm-print .result-sheet .def-list{ font-size:var(--tm-fs-note); }
body.tm-print .result-sheet .def-list .dl-row{ color:var(--tm-ink); }
@media screen and (max-width:560px){
  body.tm-print .result-sheet .mv-row{ grid-template-columns:3.6em 1fr; }
  body.tm-print .result-sheet .mv-row .mv-desc{ grid-column:1 / -1; padding-left:calc(3.6em + 12px); }
}

/* ==========================================================================
   12. NHỊP DỌC TRÊN MÀN HÌNH — phần còn lại của "TRANG TÀI LIỆU" (xem mục @media screen ở đầu file)
   ⚠ ĐẶT CUỐI FILE CÓ CHỦ Ý: các luật gốc .blk / .blk-top / .subblk / .tm-hinh / table.reftab / .mv-row
     đều mang selector `body.tm-print .result-sheet …` — CÙNG độ ưu tiên với luật đè ở đây, nên chỉ
     "viết sau" mới thắng. Đặt ở đầu file thì trình duyệt lấy trị số cũ mà KHÔNG báo gì (đã đo: đặt
     30px, computed vẫn ra 18px). Cả khối chỉ áp cho MÀN HÌNH; trên GIẤY lề do @page lo, các luật gốc
     phía trên giữ nguyên từng pixel.
   ========================================================================== */
@media screen{
  /* Khoảng giữa hai mục 18 → 30px: phải LỚN HƠN chiều cao một dòng thân bài (25,7px) thì mắt mới
     đọc ra "sang mục mới" thay vì "xuống dòng" — đây là nguồn chính của cảm giác bức tường chữ. */
  body.tm-print .result-sheet .blk{ margin:0 0 30px; }
  body.tm-print .result-sheet .blk:last-child{ margin-bottom:0; }
  /* Tiêu đề mục: chữ cách gạch chân 6 → 9px, gạch chân cách thân bài 10 → 16px. */
  body.tm-print .result-sheet .blk > .blk-top{ padding-bottom:9px; margin-bottom:16px; }
  body.tm-print .result-sheet .subblk{ margin-top:22px; }
  /* Khối "Trong đó" là chỗ dày đặc nhất phiếu: nới 1 → 2px mỗi hàng (nới hơn nữa thì phiếu dài thêm
     cả trăm px mà mắt không thấy thoáng hơn), bù bằng giãn NGANG giữa ký hiệu – trị số – nghĩa. */
  body.tm-print .result-sheet .mv-row{ padding:2px 0; gap:0 16px; }
  body.tm-print .result-sheet .mv-list{ padding:4px 0 10px 1.2em; }
  /* Hình vẽ trước đây margin-top = 0 nên dính đít đoạn chữ trên. */
  body.tm-print .result-sheet .tm-hinh{ padding:14px; margin:18px 0 24px; }
  body.tm-print .result-sheet table.reftab{ margin:12px 0 18px; }
}
/* Màn hẹp: lề 54px là 29% bề ngang điện thoại — trả lề nhỏ, trang tự bằng bề ngang màn.
   ⚠ Viết thành khối RIÊNG `@media screen and (…)`, KHÔNG lồng @media trong @media: bộ kiểm ZO2f/ZO2g
     cắt khối @media bằng regex một tầng, lồng vào là nó cắt hụt và luật màn hình lọt sang phần kiểm bản in. */
@media screen and (max-width:720px){
  body.tm-print .result-sheet{ padding:22px 18px 26px; }
  body.tm-print .result-sheet .blk{ margin:0 0 22px; }
}

/* ==========================================================================
   13. KÝ HIỆU TRONG TIÊU ĐỀ VIẾT HOA — [2026-09-11]
   Tiêu đề mục và nhãn bảng dùng text-transform:uppercase; chữ Hy Lạp bị viết hoa theo (ρ → Ρ, trông y hệt
   chữ P Latinh): đo trên ảnh chụp thấy "P̄ ĐẠI DIỆN", "PTT THEO LOẠI ĐIỆN CỰC". render.js bọc ký hiệu vào
   .sym; đặt text-transform:none ở phần tử con là đủ, chữ quanh nó vẫn hoa. Áp cả màn hình lẫn giấy.
   ========================================================================== */
body.tm-print .tm-tbl-label .sym,
body.tm-print .blk > .blk-top .b-name .sym{ text-transform:none; }

/* ============================================================================
   14. [2026-09-11 de-AI] Đoạn văn thường trong phiếu (.tm-p) và khối "6. Giả thiết và phạm vi áp dụng" (.gt-list)
   — câu dẫn Mục 3 là VĂN thuyết minh (không biểu tượng, không nền màu); giả thiết là danh sách đánh số cỡ ghi chú.
   Viết cuối file: cùng độ ưu tiên với luật gốc của mẫu nên luật sau thắng (bẫy đã gặp ở mục 12).
   ========================================================================== */
body.tm-print .result-sheet p.tm-p{ font-size:var(--tm-fs-body); line-height:1.6; margin:4px 0 10px; text-align:justify; color:var(--tm-ink); }
body.tm-print .result-sheet ol.gt-list{ margin:2px 0 0; padding-left:1.7em; font-size:var(--tm-fs-note); line-height:1.6; color:var(--tm-ink); }
body.tm-print .result-sheet ol.gt-list li{ padding:2px 0 3px; text-align:justify; }
body.tm-print .result-sheet ol.gt-list li::marker{ font-weight:700; }

/* ==========================================================================
   [2026-09-23, rà giao diện PH-10] MÀN HẸP (dưới 720 px): chữ căn đều hai bên tạo khe trắng lớn ở các dòng dài
   (ПУЭ, Dwight…) nên căn trái; dòng kết luận được xuống dòng thay vì ép hai cột.
   ⚠ Đặt CUỐI FILE: các luật gốc cùng độ ưu tiên, khối đè phải đứng sau.
   ========================================================================== */
body.tm-print .tm-ket-luan{ flex-wrap:wrap; }
body.tm-print .tm-ket-luan b{ min-width:0; overflow-wrap:anywhere; }
@media screen and (max-width:719px){
  body.tm-print .result-sheet p,
  body.tm-print .result-sheet p.tm-p,
  body.tm-print .result-sheet ol.gt-list li,
  body.tm-print .result-sheet .tm-refs p{ text-align:left; }
}

/* [2026-09-23, rà giao diện PH-5] Màn hẹp: hình co theo bề ngang thì chữ trong hình còn khoảng 3 px. Giữ hình rộng tối thiểu 640 px
   và cho cuộn ngang ngay trong khung hình (chú thích vẫn nằm trong khổ màn hình). Chỉ màn hình; khi in hình theo khổ giấy. */
@media screen and (max-width:700px){
  body.tm-print .result-sheet .tm-hinh{ overflow-x:auto; -webkit-overflow-scrolling:touch; }
  body.tm-print .result-sheet .tm-hinh > svg{ min-width:640px; }
}

/* [2026-09-23, rà giao diện DD-3] Màn hẹp: mọi bảng trong phiếu cuộn ngang trong chính nó (trước: Bảng 1 đẩy cả trang rộng ra
   469 px, Bảng 2 bị khung bo góc cắt mất chữ số, ρtt đọc thành "36" thay cho 366). Tiêu đề cột được xuống dòng. */
@media screen and (max-width:700px){
  body.tm-print .result-sheet table{ display:block; overflow-x:auto; max-width:100%; -webkit-overflow-scrolling:touch; }
}
@media screen and (max-width:560px){
  body.tm-print .result-sheet th{ white-space:normal !important; }
}
