/* ==========================================================================
   50-nhom-noi-dung.css — CỬA SỔ D, nhóm trang NỘI DUNG
   #17 template · #18 san-pham-so-detail · #19 blog · #20 du-an ·
   #21 bai-viet-mau · #22 bai-viet-mau-2

   Mọi con số LẤY TỪ figma-spec + tools/hinh-hoc.py, không ước lượng theo ảnh.
   Kiểm lại bằng:
       python3 tools/hinh-hoc.py trang21 bai
       python3 tools/nghiem-thu-tong.py trang21 --slug bai-viet-mau

   ⛔ Tệp này CHỈ chứa luật thuộc phạm vi sáu trang trên (III.4.0 luật KHÔNG
   ĐỘNG CHẠM). Cần sửa một luật dùng chung thì BÁO cho cửa sổ A, đừng sửa
   '00'/'10'/'20'/'21'/'30' ở đây.
   ========================================================================== */


/* ==========================================================================
   20. TRANG #21 'bai-viet-mau' VÀ #22 'bai-viet-mau-2' — BÀI VIẾT CHI TIẾT
   Figma 605:6076 / 1385:22809 (#21) · 722:31587 / 1385:22987 (#22)

   Hai trang dùng CHUNG bộ class 't4fx-bv-*' / 't4fx-lq-*': đã đối chiếu từng
   lớp giữa 'figma-spec/trang21.json' và 'trang22.json' — mọi chuỗi chữ và mọi
   số đo giống hệt nhau, khác đúng năm ảnh và cấp 3 breadcrumb
   ('uxb/ban-ke-bai-viet-mau.md' §0).
   ========================================================================== */

/* --- 20.1 Breadcrumb: giành lại số của CHÍNH hai trang này ----------------
   [phục vụ] phần tử: breadcrumb child theme | khối: 'nav.t4fx-crumb'
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] crumb_mb 1385:22810 —
   "Home" x=25 w=28 · mũi tên 32 (53→85) · "Hệ sinh thái kiến thức" w=103 ·
   "Blog" x=220 · "Bài viết" x=274 ⇒ khoảng cách giữa hai mục = **32px**
   [lý do vượt panel] breadcrumb do child theme in ra, không có phần tử builder

   ⛔ HAI luật TOÀN CỤC nằm trong tệp của trang KHÁC đang đè lên hai trang này
   (cùng cảnh đã ghi ở mục 13.7 của '41-page-chinh-sach-bao-mat.css'):
     '40-page-xu-ly-loi-sai-google-ads.css'  .t4fx-crumb li + li::before { width: 20px }
     '44-nhom-ggm.css'                       nav.t4fx-crumb ol li:last-child * { line-height: 13px }
   Cỡ chữ 10px của trang #4 thì TRÙNG với hai trang này nên không phải giành. */
@media (max-width: 849px) {
  .t4.t4-trang-bai-viet-mau .t4fx-crumb li + li::before,
  .t4.t4-trang-bai-viet-mau-2 .t4fx-crumb li + li::before { width: 32px; }
  .t4.t4-trang-bai-viet-mau nav.t4fx-crumb ol li:last-child,
  .t4.t4-trang-bai-viet-mau nav.t4fx-crumb ol li:last-child *,
  .t4.t4-trang-bai-viet-mau-2 nav.t4fx-crumb ol li:last-child,
  .t4.t4-trang-bai-viet-mau-2 nav.t4fx-crumb ol li:last-child * { line-height: 22px; }
}

/* --- 20.2 Khung hai section ----------------------------------------------
   [phục vụ] phần tử: Section | khối: thân bài · dải cùng chuyên mục
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] 605:6116 — khung 1900×2283
   [lý do vượt panel] panel không đặt được bề rộng 1232 lẫn nét kẻ phân cách

   Bảng số (toạ độ trong khung 1900×2283, gốc là mép trên section):
        thân bài 'bai'        y=  56   h=1587,25
        nét kẻ 1232×0,5       y=1675
        dải     'lienquan'    y=1707   h= 520
        mép dưới khung        y=2283            ⇒ đệm đáy 56

   ⇒ khe trên 56 · giữa 31,75 + kẻ + 31,75 · dưới 56. Khổ 402 (1385:22856):
        khe trên **24** · giữa 31,75+31,75 · dưới **23,6** — KHÁC desktop,
        không suy từ nhau (III.14.2-6).

   ⛔ 'goc' của mốc chiều cao là HÀNG '.t4fx-bv-hang', không phải section:
   khe 56 phía trên nằm ở 'padding-top' của section nên section cao hơn node
   Figma đúng 56. Xem 'scripts/map-trang21.json'. */
#content .t4fx-bv { padding: 56px 0 55.75px; position: relative; }
#content .t4fx-bv > .section-content { position: relative; z-index: 1; }

/* THẺ TRẮNG 1280×2219,25 ('Frame 1707479535', fill #ffffff, đệm 24) nằm trên
   nền '#fcfbf6' của section. Nó phủ CẢ thân bài lẫn dải, kể cả khoảng 64px
   giữa hai khối — đây là lý do hai khối phải nằm trong MỘT section.
   ⛔ Vẽ bằng ::before, không thêm phần tử: một '[row]' bọc nữa là ba tầng
   'row_inner' lồng nhau, mà WordPress phân tích shortcode cùng tên lồng nhau
   sai chỗ đóng. Bản đầu để hai section rời và chặng 3 báo ΔE 2,94 ở khoảng
   giữa (#ffffff ↔ #fcfbf6) — 40 vùng đỏ. */
#content .t4fx-bv::before {
  content: ""; position: absolute; z-index: 0;
  top: 32px; bottom: 31.75px; left: 50%; transform: translateX(-50%);
  width: 1280px; max-width: 100%; background: #fff;
}

/* Nét kẻ 1232×0,5 #a2a2a2 giữa hai khối — 'strokeDashes' RỖNG nên nét LIỀN
   (III.15.5; trang #2 là nét đứt [3,2], đừng bê sang). */
#content .t4fx-lq-boc { margin-top: 64px; position: relative; }
#content .t4fx-lq-boc::before {
  content: ""; position: absolute; top: -32px; left: 0; right: 0;
  border-top: .5px solid #a2a2a2;
}

#content .t4fx-bv .section-content > .row.row-collapse { max-width: 1232px; }

/* --- 20.3 Hình học hai cột (LUẬT 5 · III.14) ------------------------------
   [phục vụ] phần tử: Row/Col | khối: '.t4fx-bv-hang'
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] 677:6759
   [lý do vượt panel] span 1/12 của Flatsome không dựng ra 842/358

   FRAME 1232×1587 — 2 con, xếp NGANG
      thân bài  x=  0,00  w=842,00
      cột phải  x=874,00  w=358,00  khe=+32,00
      cộng lại 1232,00 ↔ bề rộng cha 1232,00  ✅
   1232 không phải bội của 90 ⇒ khai px, đúng III.14.0. */
#content .t4fx-bv-hang { align-items: flex-start; }
#content .col.t4fx-bv-chinh { flex: 0 0 842px; max-width: 842px; }
#content .col.t4fx-bv-ben { flex: 0 0 358px; max-width: 358px; margin-left: 32px; }

/* --- 20.4 Thân bài: kiểu chữ và khe dọc ----------------------------------
   [phục vụ] phần tử: Text ×5 + Image ×2 | khối: '.t4fx-bv-chinh'
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] 'bai' — Frame 1707479299
   [lý do vượt panel] panel không có giãn dòng lẻ 30,052 / 16,392 / 24

   Khe dọc: "Chuyên mục" h=16 → **+20** → khối chữ, rồi **+16** đều bên trong
   (H1 30 · lời dẫn 72 · meta 22 · ảnh 473,62 · đoạn 192 · ảnh · đoạn).

   ⛔ KHE KHAI THEO TỪNG LỚP, KHÔNG KHAI BẰNG '> *'. Ở khổ 402 hai cột đổi
   sang 'display: contents' (mục 20.8) — thứ đó đổi CÁCH DÀN, KHÔNG đổi CÂY
   DOM, nên mọi bộ chọn '.t4fx-bv-hang > …' thôi khớp trong khi bố cục vẫn
   trông đúng. Đã trả giá: bốn thẻ liên quan ở khổ 402 dính sát nhau (bước 84
   thay vì 124) và mốc neo section lệch 1440px. */
/* Hai '[row_inner]' nằm trong cột bọc, và hàng mục lục: Flatsome cho '.row'
   lề âm −15px cùng 'max-width' riêng — trả về 0/100% để chúng đúng bề rộng
   node Figma. ⛔ Bỏ luật này ra là ba thẻ 400 của dải rớt xuống xếp DỌC
   (đã trả giá: dx −400 thay vì +416). */
/* ⛔ LONGHAND: 'margin: 0' xoá luôn lề DƯỚI mà hai hàng này đang mang
   ('.t4fx-bv-hop' 32 · '.t4fx-lq-hang' 16) — III.14.2-5. Đã trả giá: hàng
   "Các bài viết liên quan" nhảy lên 32px và dải thẻ nhảy lên 16px. */
/* ⛔ LONGHAND: 'margin: 0' xoá luôn lề DƯỚI 32 mà hàng này đang mang
   (III.14.2-5). Đã trả giá: hàng "Các bài viết liên quan" nhảy lên 32px. */
#content .t4fx-bv-hop.row {
  margin-left: 0; margin-right: 0;
  width: 100%; max-width: none;
}

#content .t4fx-bv-dm { margin-bottom: 20px; }
#content .t4fx-bv-h1,
#content .t4fx-bv-dan,
#content .t4fx-bv-meta,
#content .t4fx-bv-anh,
#content .t4fx-bv-than-1 { margin-bottom: 16px; }
#content .t4fx-bv-than-2 { margin-bottom: 0; }

#content .t4fx-bv-dm p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 12px; line-height: 16.392px; color: #a2a2a2; margin: 0;
}
#content .t4fx-bv-h1 h1 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 22px; line-height: 30.052px; color: #000; margin: 0;
  letter-spacing: 0; text-transform: none;
}
/* Lời dẫn và hai đoạn thân bài: 'text.can_ngang = JUSTIFIED' ở CẢ HAI KHỔ —
   bảng dày KHÔNG kiểm kiểu căn lề (II.K-6), chỉ ảnh nhiệt của chặng 3b nhìn
   ra, nên khai tường minh ngay từ đầu. */
#content .t4fx-bv-dan p,
#content .t4fx-bv-than p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 24px; color: #353535; margin: 0;
  text-align: justify;
}

/* Hàng meta 258×22 — xếp NGANG: ngày 145 · +10 · "|" 5 · +10 · nhãn 68 ·
   +5 · số 15. Bốn lớp chữ RIÊNG bên Figma nên phải là bốn phần tử bên site,
   nếu không bảng dày mất ba mốc. */
#content .t4fx-bv-meta p,
#content .t4fx-lq-meta p {
  display: flex; align-items: center; margin: 0;
  font-family: var(--t4-font-body); font-weight: 400; color: #7c7c7c;
}
#content .t4fx-bv-meta p { font-size: 12px; line-height: 16.392px; min-height: 22px; }
#content .t4fx-bv-meta-gach,
#content .t4fx-lq-meta-gach { font-size: 16px; line-height: 21.6px; }
#content .t4fx-bv-meta-gach { margin: 0 10px; }
#content .t4fx-bv-meta-nhan { margin-right: 5px; }

/* Ảnh thân bài 842×473,62 bo 5.
   ⚠ HAI ẢNH TỈ LỆ KHÁC NHAU: ảnh 1 nguồn 1299×731 (1,777) trùng khít khung
   Figma, ảnh 2 nguồn 1299×866 (1,500) thì KHÔNG. Để 'height: auto' thì ảnh 2
   cao 561,33 thay vì 473,62. Ghim chiều cao + 'object-fit: cover' cho cả hai
   — Figma khai 'scaleMode: FILL', tức chính là cắt-phủ. */
#content .t4fx-bv-anh img {
  height: 473.62px; object-fit: cover; border-radius: 5px;
}

/* [figma] luật dùng chung — lớp rộng 25.5px có ở 2 trang; đại diện: trang21:'677:6764' · trang22:'722:31681'
   (tệp này phục vụ nhiều trang nên không có MỘT node duy nhất) */
/* --- 20.5 Cột phải: hộp "Tóm tắt nội dung" -------------------------------
   [phục vụ] phần tử: Text ×7 + Row/Col lồng | khối: '.t4fx-bv-hop'
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] Frame 1707479356 358×310
   [lý do vượt panel] viền + bo góc của hộp, và nét kẻ dưới từng mục

   hàng tiêu đề 358×40 (đệm dưới 8) → **+20** → HỘP 358×250 → **+32** → khối
   "Các bài viết liên quan"
   HỘP: đệm 24 mỗi cạnh · viền 1px #155446 α .5 · bo 5
        6 mục cao 19, mỗi mục theo sau MỘT nét kẻ; nhịp 24·51·59·86·… = 35
        ⇒ mục · đệm dưới 8 · kẻ · lề dưới 8
   ⛔ 'padding' của Figma đo từ BÊN TRONG nét viền (III.14.2-4): viền 1 +
      đệm 24, KHÔNG phải đệm 25.

   ⚠ HAI hàng tiêu đề đặt đệm TRÊN 18px chứ không căn giữa: Figma vẽ chữ ở
   y=18…32 trong hàng cao 40 có đệm dưới 8 — tức mực chữ nằm SÁT ĐÁY vùng nội
   dung, tâm ở 25. Căn giữa cho tâm 16 và lệch đúng 9px (đã đo). */
#content .t4fx-bv-hop-ten,
#content .t4fx-bv-lq-ten {
  height: 40px; padding: 11.9px 0 8px; display: flex; align-items: flex-start;
  margin-bottom: 20px;
}
#content .t4fx-bv-hop { margin-bottom: 32px; }
#content .t4fx-bv-hop-ten h2,
#content .t4fx-bv-lq-ten h2,
#content .t4fx-lq-ten h2 {
  font-family: var(--t4-font-head); font-weight: 700;
  font-size: 20px; line-height: 26.66px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
/* Biểu tượng danh sách 25,5×14,17 tô camel.
   ⛔ KHÔNG dựng bằng [ux_image]: nó là VECTOR bên Figma nên không nằm trong
   danh sách ảnh của bảng dày ('lop_anh_figma' chỉ lấy lớp tô IMAGE); thêm một
   <img> là làm lệch phép ghép-theo-thứ-tự của SÁU ảnh còn lại. Vẽ bằng mặt
   nạ CSS, đúng lối đã dùng cho bốn biểu tượng 'khacbiet' của trang #2. */
/* ⛔ MẶT NẠ PHẢI CÓ viewBox BÓ SÁT, và 'center/contain' với khung VUÔNG là
   sai. Bộ Material dùng khung 960×960 trong khi biểu tượng này tỉ lệ 1,8;
   'contain' co nó về 14,17×14,17 rồi vẽ vào giữa ⇒ đo trên ảnh ra
   **9,5×8,5** thay vì **25×13,5**. Cùng cái bẫy đã gặp ở biểu tượng ba gạch
   của trang #19 (mục 21.3) — bảng dày mù vì đây không phải lớp chữ cũng
   không phải lớp tô IMAGE.

   Hình vẽ lại theo số đo quét từ chính ảnh Figma: ba hàng ở y ≈ 1,5 · 7,09 ·
   12,67 (cao 3), chấm tròn r 1,5 ở x = 1,5, thanh từ x = 6 tới 25,5. */
#content .t4fx-bv-hop-ten::before {
  content: ""; flex: 0 0 25.5px; width: 25.5px; height: 14.17px;
  margin: 5.96px 8px 0 0; background-color: var(--t4-camel);
  -webkit-mask: no-repeat center/25.5px 14.17px var(--t4fx-icon-ml);
  mask: no-repeat center/25.5px 14.17px var(--t4fx-icon-ml);
  --t4fx-icon-ml: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 25.5 14.17'%3E%3Ccircle cx='1.5' cy='1.5' r='1.5'/%3E%3Crect x='6' y='0' width='19.5' height='3'/%3E%3Ccircle cx='1.5' cy='7.085' r='1.5'/%3E%3Crect x='6' y='5.585' width='19.5' height='3'/%3E%3Ccircle cx='1.5' cy='12.67' r='1.5'/%3E%3Crect x='6' y='11.17' width='19.5' height='3'/%3E%3C/svg%3E");
}

#content .t4fx-bv-hop > .col > .col-inner {
  border: 1px solid rgba(21, 84, 70, .5); border-radius: 5px; padding: 23px;
}
#content .t4fx-bv-muc p {
  font-family: var(--t4-font-body); font-weight: 500;
  font-size: 14px; line-height: 19.124px; color: var(--t4-camel-dark);
  margin: 0;
}
/* ⚠ Nét kẻ '.5px' được Chrome làm tròn thành 1px thật, nên hộp mục cao
   19,124 + 8 + **1** = 28,124. Bước Figma là 35 ⇒ lề dưới 6,88, không phải 8.
   Đo thật rồi mới khai (bước cũ ra 36,13 và dồn 5,6px qua sáu mục). */
#content .t4fx-bv-muc {
  padding-bottom: 8px; border-bottom: .5px solid #a2a2a2; margin-bottom: 6.88px;
}
#content .t4fx-bv-muc:last-child { margin-bottom: 0; }

/* --- 20.6 Cột phải: bốn thẻ "Các bài viết liên quan" + nút ----------------
   [phục vụ] phần tử: Image Box ×4 + Button | khối: '.t4fx-bv-lq'
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] Frame 1707479544 358×566
   [lý do vượt panel] Image Box không có ô đặt bề rộng ảnh theo px

   thẻ 358×84 = ảnh 150 + khe 10 + chữ 198 (khổ 402: chữ **194**)
   thẻ · lề dưới 20 · nét kẻ · đệm trên 20 · thẻ   (3 kẻ cho 4 thẻ ⇒ bước 124)
   Link 358×30 — đệm 4/136 · viền 1px #1f1f1f INSIDE · bo 3, cách thẻ cuối 20

   ⛔ 'margin: 0' trên '.box' là chỗ đã trả giá: nó ĐÈ luôn lề dưới 20 và bước
   giữa hai thẻ tụt từ 124 xuống 105. Khai từng cạnh, đừng dùng shorthand
   (III.14.2-5). */
/* ⚠ Bước giữa hai thẻ là **124** (Figma 402·526·650·774). Thẻ 84 + lề dưới
   + nét kẻ + đệm trên 20; nét '.5px' Chrome vẽ thành 1px thật ⇒ lề dưới 19,
   không phải 20. Đặt 20 thì bước ra 125 và thẻ 4 lệch 3px. */
#content .box.t4fx-bv-lq {
  display: flex; align-items: center;
  margin: 0 0 19px;
}
#content .box.t4fx-bv-lq .box-image { flex: 0 0 150px; width: 150px; }
#content .box.t4fx-bv-lq .box-image img {
  width: 150px; height: 84px; object-fit: cover; border-radius: 5px;
}
#content .box.t4fx-bv-lq .box-text {
  flex: 1 1 auto; padding: 0; margin-left: 10px; min-width: 0;
}
#content .t4fx-bv-lq-tt p {
  font-family: var(--t4-font-body); font-weight: 600;
  font-size: 14px; line-height: 19.124px; color: #000; margin: 0;
}
#content .box.t4fx-bv-lq + .box.t4fx-bv-lq {
  border-top: .5px solid #a2a2a2; padding-top: 20px;
}

#content a.button.t4fx-bv-xem {
  display: flex; align-items: center; justify-content: center;
  width: 100%; min-height: 30px; height: 30px; padding: 4px 136px;
  border: 1px solid var(--t4-text); border-radius: 3px;
  background: transparent; margin: 0;
}
#content a.button.t4fx-bv-xem span {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 14px; line-height: 22px; color: var(--t4-text);
  letter-spacing: 0; text-transform: none;
}

/* --- 20.7 Dải "Google Marketing" + 3 thẻ ---------------------------------
   [phục vụ] phần tử: Text ×4 + Row/Col + Image Box ×3 | khối: '.t4fx-lq'
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] 676:6660 1232×520
   [lý do vượt panel] chip là khung KHÔNG có nền và không có viền trong Figma
   (đã soi 'fills'/'strokes' của 'Frame text 7/8/9': rỗng cả hai) — chỉ là
   khoảng đệm 4px hai bên, nên không dùng được kiểu chip có sẵn của panel

   hàng tiêu đề 1232×40 (đệm dưới 8): "Google Marketing" 165 · +8 · khung chip
        191 (đệm ngang 4) chứa 57 · +4 · 59 · +4 · 59  ⇒ bước tâm chữ 62/63
   hàng thẻ 1232×464: 3 cột 400, khe 16  ⇒ 400·3 + 16·2 = 1232 ✅
   thẻ: ảnh 400×225 bo 5 · +20 · khối chữ 219 (tiêu đề 25 · +4 · mô tả 66 ·
        **+102** · meta 22) — khổ 402: ảnh 354×199,12 và khe cuối **+38** */
#content .col.t4fx-lq-dau { flex: 0 0 100%; max-width: 100%; margin-bottom: 16px; }
#content .col.t4fx-lq-dau > .col-inner {
  display: flex; align-items: flex-start; height: 40px; padding: 11.9px 0 8px;
}
/* Khe tiêu đề → mực chip đầu là **16**: 8 (khe Figma) + 4 (đệm khung chip
   'Frame 1707479342') + 4 (đệm của chính chip). */
#content .t4fx-lq-ten { margin-right: 12px; }
#content .t4fx-lq-chip p {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 12px; line-height: 16.392px; color: var(--t4-gray-mid); margin: 0;
}
#content .t4fx-lq-chip { padding: 0 4px; margin-top: 7.63px; }
/* ⛔ ĐÃ BỎ '.t4fx-lq-chip:first-of-type' — MỌI anh em ở đây đều là 'div'
   nên ':first-of-type' trỏ vào '.t4fx-lq-ten', không bao giờ khớp một chip
   (bàn giao 21f §4). Khe 4px của chip đầu nay nằm trong 'margin-right' của
   tiêu đề ngay trên. */
/* Khe 4px GIỮA hai chip — Figma đặt ba khung chip cách nhau 4 (x=177·238·301).
   Thiếu nó thì bước tâm chữ tụt từ 62/63 xuống 57/58. */
#content .t4fx-lq-chip + .t4fx-lq-chip { margin-left: 4px; }

#content .col.t4fx-lq-cot { flex: 0 0 400px; max-width: 400px; }
#content .col.t4fx-lq-cot + .col.t4fx-lq-cot { margin-left: 16px; }

#content .box.t4fx-lq-the { margin: 0; }
#content .box.t4fx-lq-the .box-image img {
  width: 100%; height: 225px; object-fit: cover; border-radius: 5px;
}
#content .box.t4fx-lq-the .box-text { padding: 20px 0 0; }
#content .t4fx-lq-tt h3 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 18px; line-height: 24.588px; color: #000; margin: 0;
  letter-spacing: 0; text-transform: none;
}
#content .t4fx-lq-mo p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 22px; color: #353535; margin: 4px 0 0;
  text-align: justify;
}
#content .t4fx-lq-meta p {
  font-size: 10px; line-height: 13.66px; min-height: 22px; margin-top: 102px;
}
#content .t4fx-lq-meta-gach { margin: 0 10px; }
#content .t4fx-lq-meta-nhan { margin-right: 5px; }

/* --- 20.8 Khổ 402 — MỘT CỘT và ĐỔI THỨ TỰ --------------------------------
   [phục vụ] phần tử: Row/Col | khối: '.t4fx-bv-hang'
   [trang] bai-viet-mau, bai-viet-mau-2 | [figma] 'bai_mb' 1385:22883 354×2686
   [lý do vượt panel] panel chỉ ẩn/hiện được, không đổi được THỨ TỰ

   Thứ tự khổ 402 XEN KẼ hai cột:
     Chuyên mục · H1 · lời dẫn · meta  →  HỘP Tóm tắt  →  ảnh 1 · đoạn 1 ·
     ảnh 2 · đoạn 2  →  khối liên quan · nút
   ⇒ không đảo được bằng 'order' trên hai CỘT. Cho hai cột 'display: contents'
   để con của chúng thành mục flex của chính hàng, rồi đánh 'order' từng mục.
   Giữ nguyên DOM nên T0 không đổi và 4T vẫn kéo-thả được.

   ⛔ HAI CẠM BẪY của cách này, đã trả giá cả hai:
     1. 'display: contents' KHÔNG đổi cây DOM ⇒ '.t4fx-bv-hang > .box' không
        khớp gì cả. Mọi bộ chọn ở đây bám CLASS, không bám '>'.
     2. ':nth-of-type' vô dụng khi MỌI anh em đều là 'div' (bàn giao 21f §4).
        Vì vậy shortcode phát class riêng '-1'/'-2' cho từng ảnh và từng đoạn.

   Khe dọc khổ 402 là **20 đều** cho cả mười khối (bản in hình học), khác hẳn
   desktop (20 rồi 16) — III.14.2-6. */
@media (max-width: 849px) {
  /* Khổ 402: thẻ trắng RỘNG BẰNG section (Figma '1385:22857' 402×4083,6 —
     đúng bằng khung '1385:22856'), nên không còn khe 32 trên/dưới; toàn bộ
     khe 24 là ĐỆM của thẻ. */
  #content .t4fx-bv { padding: 24px 0 23.6px; }
  #content .t4fx-bv::before { top: 0; bottom: 0; width: 100%; }
  /* ⛔ '40-page-xu-ly-loi-sai-google-ads.css' khai TOÀN CỤC
     '.t4 .section-content > .row { width: 352px }' ở khổ ≤849 — 'width' thắng
     'max-width' nên phải giành lại cả hai. Cùng loại nợ kiến trúc đã có hồ sơ
     I.6 (18/08); ở đây chỉ giành phạm vi của hai trang này. */
  #content .t4fx-bv .section-content > .row.row-collapse {
    width: 354px; max-width: 354px;
  }
  /* Figma vẽ hàng tiêu đề dải TRÀN 10px ở khổ 402 (165+8+191 = 364 ↔ 354) —
     giữ nguyên một dòng, đừng để xuống dòng. */
  #content .col.t4fx-lq-dau > .col-inner { flex-wrap: nowrap; }
  #content .t4fx-lq-ten h2, #content .t4fx-lq-chip p { white-space: nowrap; }
  /* ⛔ 'flex-shrink' mặc định là 1: hàng tràn 10px thì trình duyệt CO cả tiêu
     đề lẫn ba chip, và cụm chip trôi sang TRÁI 4,5px so với Figma (đo trên ảnh
     nhiệt: mép chip đầu 7,0 ↔ 11,5). Figma để tràn sang phải, không co. */
  #content .col.t4fx-lq-dau > .col-inner > * { flex: 0 0 auto; }

  #content .t4fx-bv-hang { display: flex; flex-wrap: wrap; }
  #content .col.t4fx-bv-chinh,
  #content .col.t4fx-bv-ben,
  #content .t4fx-bv-chinh > .col-inner,
  #content .t4fx-bv-ben > .col-inner { display: contents; }

  #content .t4fx-bv-dm,
  #content .t4fx-bv-h1,
  #content .t4fx-bv-dan,
  #content .t4fx-bv-meta,
  #content .t4fx-bv-hop-ten,
  #content .t4fx-bv-hop,
  #content .t4fx-bv-anh,
  #content .t4fx-bv-than,
  #content .t4fx-bv-lq-ten,
  #content .box.t4fx-bv-lq,
  #content a.button.t4fx-bv-xem {
    flex: 0 0 100%; max-width: 100%; margin-bottom: 20px;
  }
  #content .box.t4fx-bv-lq { margin-bottom: 19px; }

  /* ⛔ HAI TRANG KHÁC NHAU ĐÚNG MỘT CON SỐ Ở KHỔ 402: khe dọc giữa mười khối
     của 'Frame 1707479556' là **20** ở #21 và **16** ở #22 (bản in hình học).
     Chín khe × 4px = 36px — đúng bằng chênh lệch chiều cao khung
     ('bai_mb' 2686,25 ↔ 2650,25). Bản kê ban đầu ghi "mọi số đo giống hệt
     nhau" và SAI ở đúng chỗ này; 'kiem-cao-section.js' bắt được.
     Khe BÊN TRONG hai khung con ('1707479356' và '1707479544') vẫn là 20 ở cả
     hai trang, nên 'hop-ten' và 'lq-ten' KHÔNG đổi. */
  .t4.t4-trang-bai-viet-mau-2 #content .t4fx-bv-dm,
  .t4.t4-trang-bai-viet-mau-2 #content .t4fx-bv-h1,
  .t4.t4-trang-bai-viet-mau-2 #content .t4fx-bv-dan,
  .t4.t4-trang-bai-viet-mau-2 #content .t4fx-bv-meta,
  .t4.t4-trang-bai-viet-mau-2 #content .t4fx-bv-hop,
  .t4.t4-trang-bai-viet-mau-2 #content .t4fx-bv-anh,
  .t4.t4-trang-bai-viet-mau-2 #content .t4fx-bv-than,
  /* Bài viết thuộc chuyên mục 'du-an' chạy biến thể #22 — khe dọc 16, không
     phải 20. Lớp thân đặt ở 'functions.php'; '.t4fx-bv-noidung' là khối thân
     của bài thật, tương ứng 'than-1/than-2' của trang mẫu. */
  .t4.t4-bai-du-an #content .t4fx-bv-dm,
  .t4.t4-bai-du-an #content .t4fx-bv-h1,
  .t4.t4-bai-du-an #content .t4fx-bv-dan,
  .t4.t4-bai-du-an #content .t4fx-bv-meta,
  .t4.t4-bai-du-an #content .t4fx-bv-hop,
  .t4.t4-bai-du-an #content .t4fx-bv-anh,
  .t4.t4-bai-du-an #content .t4fx-bv-noidung { margin-bottom: 16px; }
  #content a.button.t4fx-bv-xem { margin-bottom: 0; }

  #content .t4fx-bv-dm { order: 1; }
  #content .t4fx-bv-h1 { order: 2; }
  #content .t4fx-bv-dan { order: 3; }
  #content .t4fx-bv-meta { order: 4; }
  #content .t4fx-bv-hop-ten { order: 5; }
  #content .t4fx-bv-hop { order: 6; }
  #content .t4fx-bv-anh-1 { order: 7; }
  #content .t4fx-bv-than-1 { order: 8; }
  /* ⛔ BÀI VIẾT THẬT chỉ có MỘT khối thân ('.t4fx-bv-noidung'), không có
     'than-1/than-2' như trang mẫu. Thiếu dòng này thì nó không nhận 'order'
     nào, mặc định về 0 và **nhảy lên đầu trang** — toàn bộ thân bài hiện
     TRƯỚC tiêu đề. Hai cột đang 'display: contents' nên lỗi này không lộ ra ở
     khổ rộng, chỉ khổ 402 mới thấy. */
  #content .t4fx-bv-noidung { order: 8; }
  #content .t4fx-bv-anh-2 { order: 9; }
  #content .t4fx-bv-than-2 { order: 10; }
  #content .t4fx-bv-lq-ten { order: 11; }
  #content .t4fx-bv-lq-1 { order: 12; }
  #content .t4fx-bv-lq-2 { order: 13; }
  #content .t4fx-bv-lq-3 { order: 14; }
  #content .t4fx-bv-lq-4 { order: 15; }
  #content a.button.t4fx-bv-xem { order: 16; }

  #content .t4fx-bv-anh img { height: 199.12px; }
  #content .box.t4fx-bv-lq .box-text { margin-left: 10px; }
  #content a.button.t4fx-bv-xem { padding: 4px 134px; }

  #content .col.t4fx-lq-cot,
  #content .col.t4fx-lq-cot + .col.t4fx-lq-cot {
    flex: 0 0 100%; max-width: 100%; margin-left: 0;
  }
  #content .col.t4fx-lq-cot + .col.t4fx-lq-cot { margin-top: 16px; }
  #content .box.t4fx-lq-the .box-image img { height: 199.12px; }
  #content .t4fx-lq-meta p { margin-top: 38px; }
}


/* --- 20.9 BÀI VIẾT THẬT ('single.php') — phần Figma KHÔNG vẽ ---------------
   [phục vụ] '.t4fx-bv-noidung' · [trang] mọi bài viết (post), không phải #21
   [figma] Figma vẽ thân bài bằng ĐÚNG hai đoạn văn và hai ảnh, không có
   heading, danh sách hay bảng — vì nó là bản mẫu, không phải bài thật.
   [lý do vượt panel] nội dung bài do người viết gõ trong trình soạn thảo, nên
   không có phần tử builder nào để đặt lớp; phải khai theo THẺ.

   ⚠ Đây là phần ĐI THÊM so với bản thiết kế, đã ghi ở qa/danh-sach-danh-doi.md.
   Nguyên tắc: mọi giá trị bám sát thứ Figma ĐÃ khai cho khối tương đương —
   ảnh lấy đúng khung ảnh thân bài, chữ lấy đúng kiểu đoạn văn thân bài — chỉ
   heading là phải tự chọn, và chọn theo thang chữ của chính bộ token. */
#content .t4fx-bv-noidung > *:first-child { margin-top: 0; }
#content .t4fx-bv-noidung p { margin: 0 0 16px; }
#content .t4fx-bv-noidung p:last-child { margin-bottom: 0; }

/* Ảnh trong thân bài dùng LẠI khung ảnh của Figma (842×473,62 bo 5, cắt-phủ).
   ⛔ Không để 'height: auto': ảnh người viết chèn vào có đủ mọi tỉ lệ, mà
   Figma khai 'scaleMode: FILL' cho khung này — cùng lý do đã ghi ở mục 20.4
   cho hai ảnh của trang mẫu. */
#content .t4fx-bv-noidung figure { margin: 0 0 16px; }
#content .t4fx-bv-noidung img {
  display: block; width: 100%; height: 473.62px;
  object-fit: cover; border-radius: 5px;
}

/* Heading thân bài — Figma không vẽ, chọn theo thang chữ của bộ token:
   H2 24/32 và H3 18/26, cùng phông tiêu đề và màu lá như mọi H2 khác của
   trang. ⚠ ĐỪNG để nguyên cỡ mặc định của '10-base.css' (40px): nó là cỡ
   tiêu đề SECTION, đặt trong thân bài thì lấn át cả tiêu đề bài viết. */
#content .t4fx-bv-noidung h2,
#content .t4fx-bv-noidung h3 {
  font-family: var(--t4-font-head); color: var(--t4-dark-moss);
  margin: 24px 0 8px;
}
#content .t4fx-bv-noidung h2 { font-size: 24px; line-height: 32px; font-weight: 600; }
#content .t4fx-bv-noidung h3 { font-size: 18px; line-height: 26px; font-weight: 600; }
#content .t4fx-bv-noidung ul,
#content .t4fx-bv-noidung ol { margin: 0 0 16px 20px; }

/* Mục lục tự sinh: chữ nằm trong '<a>', mà Flatsome tô màu nhấn cho mọi liên
   kết trong nội dung ⇒ mất màu lạc đà của Figma nếu không giành lại. */
#content .t4fx-bv-muc p a {
  color: inherit; text-decoration: none; border: 0;
}
#content .t4fx-bv-muc p a:hover { color: var(--t4-leaf); }

/* --- 20.10 Dải chip của bài viết ở khổ 402: CUỘN NGANG ---------------------
   [phục vụ] '.t4fx-lq-dau > .col-inner' · [trang] chỉ BÀI VIẾT ('single-post')
   [figma] 'lienquan_mb' — 'Frame 1707479342' khai 'wrap: NO_WRAP', chip cuối
   kết ở **x = 360** trong khung **354**: chính bản thiết kế đã tràn 6px.
   ⇒ Figma muốn MỘT HÀNG chạy quá khung, không muốn xuống dòng. Cách diễn đạt
   đúng trên web là cuộn ngang — y như dải tab «Chuyên đề» của #19 (§3.3 phiếu
   'blog'), không phải cho xuống dòng.

   ⛔ KHOÁ VÀO 'body.single-post', KHÔNG áp chung. Trên trang mẫu #21/#22 và
   khối 'nhom3' của #19, chip là «Chủ đề 1» (49px) nên ba chip vừa khung và
   không có gì để cuộn; thêm 'overflow' ở đó là đổi hộp của ba trang đang
   0 ❌ mà chẳng được gì. Chỉ bài viết thật mới có tên chuyên mục dài
   («Chuyên đề 1» 66px) và mới tràn. */
@media (max-width: 849px) {
  body.single-post #content .col.t4fx-lq-dau > .col-inner {
    overflow-x: auto; scrollbar-width: none;
  }
  body.single-post #content .col.t4fx-lq-dau > .col-inner::-webkit-scrollbar {
    display: none;
  }
}

/* ⛔ KHỐI 402 CỦA RIÊNG 20.9 PHẢI ĐẶT Ở ĐÂY, KHÔNG GỘP VÀO KHỐI 402 CỦA 20.8.
   Khối 20.8 nằm TRƯỚC 20.9 trong tệp; hai bộ chọn cùng đặc hiệu (1,1,1) nên
   thứ tự nạp quyết định — nhét luật 402 vào khối cũ thì luật desktop của 20.9
   viết sau sẽ đè lại và **ảnh khổ 402 vẫn cao 473,62**. Đã đo và dính đúng
   một lần: media query KHÔNG cộng điểm đặc hiệu (III.19). */
@media (max-width: 849px) {
  #content .t4fx-bv-noidung img { height: 199.12px; }
  #content .t4fx-bv-noidung h2 { font-size: 20px; line-height: 28px; }
  #content .t4fx-bv-noidung h3 { font-size: 16px; line-height: 24px; }
}

/* ==========================================================================
   21. TRANG #19 'blog' — Figma 600:3013 / 1385:21735
   Bản kê + mọi bảng hình học: 'uxb/ban-ke-blog.md'.
   ⚠ Khối 'nhom3' TRÙNG KHÍT 'lienquan' của #21 nên dùng lại bộ class
   't4fx-lq-*' của mục 20.7 (III.4.0 luật NÂNG CẤP) — chỉ giành lại KHE DỌC,
   vì #19 không có nét kẻ phía trên khối đó.
   ========================================================================== */

/* --- 21.1 Hero 1900×450 ---------------------------------------------------
   [phục vụ] phần tử: Section + Text ×2 | khối: '.t4fx-bl-hero'
   [trang] blog | [figma] '600:3591' → 'Section paints' '600:3593'
   [lý do vượt panel] ô Overlay của panel chỉ nhận màu, không có ô chế độ hoà
     trộn — Figma khai 'SOLID #727c77 **MULTIPLY**' chồng lên ảnh nền

   H1 Playfair 40/53,32 w600 **#fcfbf6** ở y=155,5 · lời dẫn 16/26 **#ffffff**
   rộng 696 ở y=210,5 — cả hai CĂN GIỮA. */
#content .t4fx-bl-hero .section-bg-overlay { mix-blend-mode: multiply; }
/* ⛔ FLATSOME CĂN GIỮA DỌC NỘI DUNG SECTION — '.section { align-items: center }'.
   Với section CÓ CHIỀU CAO CỐ ĐỊNH (hero 450 / 650) thì '.section-content' bị
   đẩy xuống (450 − 262,81)/2 = **93,59** ở desktop và **58,34** ở khổ 402, nên
   'padding-top' khai theo Figma cộng thêm đúng khoảng đó.

   ⚠ KHÔNG mốc nào bắt được: bảng dày khai 'bo_toa_do: true' nên cả cụm trôi
   cùng nhau không sinh mốc lệch (I.8c), và 'kiem-cao-section' chỉ đo KHUNG —
   khung vẫn đúng 450/650. Chỉ ảnh nhiệt của chặng 3b nhìn ra: chữ "Blog" và
   lời dẫn hiện thành HAI lớp chồng, lệch 58 (402) và 93,6 (desktop).
   → Trả section về căn TRÊN; 'padding-top' khi đó chính là số Figma khai. */
#content .t4fx-bl-hero { align-items: flex-start; }
#content .t4fx-bl-hero .section-content > .row.row-collapse { max-width: 1232px; }
#content .col.t4fx-bl-hero-cot > .col-inner { padding-top: 155.5px; text-align: center; }
#content .t4fx-bl-h1 h1 {
  font-family: var(--t4-font-head); font-weight: 600;
  font-size: 40px; line-height: 53.32px; color: var(--t4-light);
  margin: 0; letter-spacing: 0; text-transform: none; text-align: center;
}
#content .t4fx-bl-lede p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 16px; line-height: 26px; color: var(--t4-white);
  margin: 2px auto 0; max-width: 696px; text-align: center;
}

/* --- 21.2 Khung thân trang + THẺ TRẮNG ------------------------------------
   [phục vụ] phần tử: Section | khối: '.t4fx-bl'
   [trang] blog | [figma] '600:7843' nền '#fcfbf6' 1900×2603 · '600:7995' thẻ
     trắng **1280**×2483 đệm **24**
   [lý do vượt panel] panel không vẽ được một thẻ 1280 nằm giữa nền section

   Bảng số (gốc là mép trên section):
        thẻ trắng y= 60  h=2483        ⇒ nội dung bắt đầu ở 60+24 = **84**
        tieude    y= 84  h=  45  → +40
        noibat    y=169  h= 474  → +39,62 → kẻ → +40
        nhom1     y=723  h= 626  → +40,26
        nhom2     y=1389 h= 570  → +40,12
        nhom3     y=1999 h= 520  → đệm đáy 24 + 60 = **84**

   ⛔ 'Section' '701:35577' (1080×388, "Shorts") có 'visible: false' — KHÔNG
   dựng (III.15.3). Nó nằm ngay cạnh thẻ trắng nên rất dễ đọc thành khối thứ 7. */
#content .t4fx-bl { padding: 84px 0; position: relative; }
#content .t4fx-bl > .section-content { position: relative; z-index: 1; }
#content .t4fx-bl::before {
  content: ""; position: absolute; z-index: 0;
  top: 60px; bottom: 60px; left: 50%; transform: translateX(-50%);
  width: 1280px; max-width: 100%; background: #fff;
}
#content .t4fx-bl .section-content > .row.row-collapse { max-width: 1232px; }

#content .t4fx-bl-td { margin-bottom: 40px; }
#content .t4fx-bl-n1 { margin-top: 79.62px; position: relative; }
#content .t4fx-bl-n1::before {
  content: ""; position: absolute; top: -40px; left: 0; right: 0;
  border-top: .5px solid #a2a2a2;
}
#content .t4fx-bl-n2 { margin-top: 40.26px; }
/* Giành lại khe của 't4fx-lq-boc' cho riêng trang này: #21 có nét kẻ phía trên
   và khe 64; #19 không có kẻ và khe là 40,12. */
.t4.t4-trang-blog #content .t4fx-lq-boc { margin-top: 40.12px; }
.t4.t4-trang-blog #content .t4fx-lq-boc::before { display: none; }

/* --- 21.3 Hàng tiêu đề + dải chuyên đề ------------------------------------
   [phục vụ] phần tử: Text + Row/Col lồng + 4 Text | khối: '.t4fx-bl-td'
   [trang] blog | [figma] '674:5393' 1232×45
   [lý do vượt panel] khung viền quanh bốn chip và nút mũi tên không có ô panel

   H2 Playfair 32/42,656 w700 #155446 ở y=11 (mực cao 23)
   khung chip x=**673** w=**559** viền 1px #a2a2a2, cao 45
        chip 124 · 126 · 126 · 126 (đệm 10/15, bo 5) — chip 1 nền #458763
        chip 2–4 chữ #777777 · nút mũi tên 45×45 ở cuối, cách chip 4 **12px** */
#content .col.t4fx-bl-td-cot > .col-inner {
  display: flex; align-items: flex-start; min-height: 45px;
}
#content .t4fx-bl-td-h2 :is(h1, h2) {
  font-family: var(--t4-font-head); font-weight: 700;
  font-size: 32px; line-height: 42.656px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .t4fx-bl-td-h2 { padding-top: 1.2px; }
/* ⛔ CHỈ CÓ NÉT DƯỚI. 'Frame 1707479341' khai
   'individualStrokeWeights {top:0, right:0, bottom:0.5, left:0}' — bản dựng
   đầu đọc 'strokeWeight: 1' rồi vẽ nguyên một khung bo góc quanh bốn chip.
   Bảng dày KHÔNG thấy (viền không sinh mốc nào), chỉ chặng 3b nhìn ra: khung
   thừa hiện thành một hình chữ nhật đỏ đặc trên ảnh nhiệt. */
/* ⛔ 23/08/2026 — DẢI CHUYÊN ĐỀ NAY LÀ '[tabgroup]' THẬT, không còn bốn
   '[ux_text]' gõ cứng. 4T chốt 22/08: «Chuyên đề 1/2/3 là dạng tab, trong tab
   là bài viết blog». Flatsome nhả:

       .tabbed-content.t4fx-bl-chde-dai
         └ ul.nav.nav-tabs.nav-uppercase > li.tab > a > span
         └ .tab-panels > .panel > .row.t4fx-bl-tab-ds > .col.post-item

   ⚠ Thuộc tính 'class' của '[tab]' KHÔNG xuống thẻ 'li' — Flatsome chỉ đặt
   'id="tab-<tên>"'. Vì vậy phải bắt bằng ':nth-child', đừng trông vào
   '.t4fx-bl-chde-N' như bản gõ cứng.
   ⚠ 'nav-uppercase' viết hoa toàn bộ nhãn; Figma để nguyên "Chuyên đề 1" nên
   phải trả 'text-transform' về 'none'.
   ⛔ '[tabgroup]' là con TRỰC TIẾP của '[section]' (III.18) nên nó KHÔNG còn
   nằm cùng hàng với H2 như Figma vẽ. Kéo lên bằng lề âm đúng chiều cao hàng
   H2 (45) thì hai khối về lại một dòng. */
/* ⚠ Khối tab là con TRỰC TIẾP của '[section]' nên nó KHÔNG bị khung nội dung
   1232 kẹp như các '[row]' anh em — để 'margin-left: auto' là nó dán vào mép
   SECTION (x=1900) chứ không phải mép khung (x=1566). Vì vậy phải tự kẹp
   'max-width: 1232px' + 'margin: auto' rồi mới đẩy dải tab sang phải bên trong.
   ⚠ Lề âm −85 = ĐO HAI ĐIỂM: đặt −45 thì mép trên ra 750, hàng H2 ở 710 ⇒
   vị trí tự nhiên là 795, cần bù 85. Đừng lấy 45 (chiều cao hàng H2) làm giá
   trị đặt — giữa hai khối còn 40px lề của chính '.tabbed-content' (§20.1). */
#content .tabbed-content.t4fx-bl-chde-dai {
  display: block; max-width: 1232px; margin: -85px auto 0; padding: 0;
}
/* ⛔ BA TẤM TAB KHÔNG HOẠT ĐỘNG CHE NHAU — phải tự khai 'display: none'.
   Luật ẩn tấm của Flatsome bị một luật khác trong dự án đè, nên cả bốn tấm
   cùng 'display: block'; ba tấm không hoạt động có 'height: 0' và NỘI DUNG
   TRÀN RA NGOÀI, chồng lên section "Bài nổi bật" bên dưới.
   ⚠ Bảng dày KHÔNG thấy chuyện này (nó chỉ đo lớp chữ đã ghép, mà ba tấm kia
   không ghép với lớp Figma nào) — chỉ 'kiem-vo' bắt được: 6 cặp chữ đè nhau
   ở CẢ NĂM khổ, trong đó có cặp đè lên đoạn mô tả của bài nổi bật. */
#content .t4fx-bl-chde-dai .tab-panels > .panel { display: none; }
#content .t4fx-bl-chde-dai .tab-panels > .panel.active { display: block; }
#content .t4fx-bl-chde-dai > ul.nav-tabs {
  display: flex; flex-wrap: nowrap; align-items: stretch;
  width: 559px; margin: 0 0 0 auto; padding: 0;
  height: 45px; border: 0; border-bottom: .5px solid #a2a2a2; border-radius: 0;
}
/* Bốn chip có BỀ RỘNG KHUNG cố định (124 · 126 · 126 · 126), không co theo
   chữ — để chip tự co thì bước tâm chữ tụt từ 113,5 xuống 82,7. */
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab {
  flex: 0 0 126px; width: 126px; margin: 0; padding: 0; border: 0;
  border-radius: 5px;
}
/* Bề rộng theo VỊ TRÍ: chip 1 rộng 124, ba chip sau 126 (Figma '674:5397'…). */
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab:first-child {
  flex-basis: 124px; width: 124px;
}
/* ⛔ NỀN XANH THEO **TAB ĐANG MỞ**, KHÔNG THEO CHIP ĐẦU TIÊN.
   Figma vẽ chip 1 xanh chữ trắng và ba chip kia xám #777 vì trong bản thiết kế
   tab 1 đang mở — đó là TRẠNG THÁI, không phải thuộc tính của con chip đầu.
   Khoá vào ':first-child' thì bấm sang tab 2 chữ đổi panel mà khung màu vẫn
   đứng ở tab 1, người dùng không biết mình đang ở đâu.
   ⚠ Bảng dày và ảnh nhiệt KHÔNG bắt được lỗi này: lúc trang mới tải,
   '.active' chính là chip đầu nên hai cách cho ra ảnh y hệt nhau. Nó chỉ lộ ra
   khi có người BẤM — cùng họ với luật T4 (trạng thái) ở chặng 4.
   Bóng đổ trong: Figma khai 'INNER_SHADOW radius 2 · y 2 · #000 @50%'; thiếu
   nó thì mép TRÊN chip nhạt hơn thiết kế (ảnh nhiệt hiện dải 111×4). */
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab.active {
  background: var(--t4-leaf);
  box-shadow: inset 0 2px 2px rgba(0, 0, 0, .5);
}
/* Viền .5px của Figma là 'INSIDE' ⇒ nằm TRONG 45, chip vẫn cao đủ 45. Trình
   duyệt thì trừ viền khỏi ô nội dung nên chip 'stretch' chỉ còn 44,5 và hụt
   một dải ở mép dưới. Ép chiều cao rồi kéo lại nửa điểm ảnh. */
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab {
  height: 45px; margin-bottom: -.5px;
}
/* ⛔ NỀN PHẢI ĐẶT LẠI TRÊN '<a>', KHÔNG chỉ trên '<li>'. Flatsome tô
   '.nav-tabs > li.active > a' thành TRẮNG và 'li:hover > a' thành đen 4% —
   lớp nền đó phủ kín ô nên nền xanh đặt ở 'li' không nhìn thấy được. Bảng số
   không bắt được (nó chỉ đo chữ và hộp); ảnh nhiệt hiện đúng một vùng
   112×45 tại (45,39) — cả con chip. */
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab > a,
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab:hover > a,
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab.active > a { background: transparent; }
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab > a {
  display: flex; align-items: center; justify-content: center;
  height: 45px; margin: 0; padding: 0 15px; border: 0;
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 16px; line-height: 21.856px; color: var(--t4-gray-mid);
  text-transform: none; letter-spacing: 0;
}
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab.active > a {
  color: var(--t4-white);
}
#content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab > a span { display: inline; }

/* --- 21.6b DẢI CHUYÊN ĐỀ CỦA #20 — nay là '[tabgroup]' THẬT ---------------
   20/08/2026, 4T chốt: trang Dự án phải CÙNG CẤU TRÚC với trang Blog ở cả hai
   khổ. Trước đó dải này chỉ là bốn '[ux_text].t4fx-bl-chde-1…4' trang trí —
   bấm không ăn, dưới nó không có lưới bài nào. Nay 'sinh-uxb-du-an.py' phát
   '[tabgroup]' + '[blog_posts]' y như #19, nên **toàn bộ luật markup cũ ở đây
   đã bị xoá**: chúng đòi '.t4fx-bl-chde-dai.row' và '> .col > .col-inner',
   không còn khớp gì trên '.tabbed-content'.

   ⛔ Riêng '.t4fx-du .t4fx-bl-chde { flex: 0 0 126px }' và
   '.t4fx-du .t4fx-bl-chde-1 { background: var(--t4-leaf) }' thì PHẢI xoá chứ
   không chỉ để đó cho chết: lớp 't4fx-bl-chde t4fx-bl-chde-N' nay nằm trên
   chính 'li.tab', nên hai luật ấy vẫn khớp và sẽ tô xanh cố định tab 1 bất kể
   tab nào đang mở — đúng lỗi #19 đã chữa ở commit 0c9c65a (khung màu bám
   '.active').

   Luật dựng dải tab (mục 21.1) KHÔNG khoá theo trang nên #20 dùng lại được
   nguyên vẹn; desktop hai trang trùng số tuyệt đối (124 · 126 · 126 · 126,
   chữ 16/21,856) nên không cần giành lại gì. */

/* ⚠ KHỔ 402 LÀ CHỖ HAI TRANG KHÁC NHAU — đọc kỹ trước khi gộp luật.
   Figma 'tieude_mb': #20 giữ nguyên cỡ desktop ('Frame text 3' w=**124**,
   'text 7/8/9' w=**126**, chữ **16/21,856**), còn #19 tụt xuống 112 · 114 và
   14/19,124. Mục 21.9 khai bộ số của #19 mà KHÔNG khoá trang, nên #20 bị nó
   kéo theo: 11 mốc ❌ ở 'tieude_mb' (4 'size' · 4 'lh' · 3 'khoang·dx(giữa)').
   Giành lại ở đây, sau mục 21.9 trong tệp để thắng theo thứ tự nguồn. */
/* Nút cuối dải: 'Component 44' là FRAME chứa icon, không phải lớp chữ và cũng
   không phải lớp tô IMAGE ⇒ không nằm trong dãy ảnh của bảng dày. Vẽ bằng mặt
   nạ CSS, đúng lối đã dùng cho biểu tượng danh sách ở mục 20.5.

   ⛔ Đây là **biểu tượng MENU (ba gạch)**, KHÔNG phải mũi tên: node
   'menu_24dp_E3E3E3_FILL0_wght400_GRAD0_opsz24' với 'Vector' **#cf9156**
   **26,25×18,75** trong khung 45×45. Bản dựng đầu đoán là mũi tên và tô màu
   chữ — sai cả hình lẫn màu; chỉ chặng 3b nhìn ra.
   ⚠ Hai con của 'Component 44' — nhãn "Các chuyên mục" và bảng
   'Component 43' 900×260 — đều 'visible: false', KHÔNG dựng (III.15.3). */
#content .t4fx-bl-chde-dai > ul.nav-tabs::after {
  content: ""; flex: 0 0 45px; width: 45px; height: 18.75px;
  align-self: center; margin-left: 12px;
  background-color: var(--t4-camel);
  -webkit-mask: no-repeat center/26.25px 18.75px var(--t4fx-icon-mt);
  mask: no-repeat center/26.25px 18.75px var(--t4fx-icon-mt);
  /* ⛔ ĐỪNG ĐO TRÊN '*-figma.png' THÔ. 'so-anh.py' cắt ảnh Figma theo
     'goc_anh()' trước khi so — màn này lệch **gy = 10** vì 'Component 44'
     tràn lên trên 10px. Đo trên ảnh thô rồi kéo biểu tượng xuống cho "khớp"
     là dời nó 10px SAI so với thiết kế. Vị trí đúng là CĂN GIỮA ô 45×45
     (Figma khai Vector ở y=13,125 = (45−18,75)/2).

     ⛔ viewBox phải BÓ SÁT ba gạch. Bộ Material dùng khung 960×960 trong khi
     ba gạch chỉ chiếm 720×480 ⇒ SVG co vừa khung vuông và mặt nạ ra
     **13,5×8,5** thay vì 26,25×18,75 (đo trên ảnh). Khung bó sát thì mặt nạ
     phủ đúng ô. */
  --t4fx-icon-mt: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 720 480'%3E%3Cpath d='M0 0h720v80H0zM0 200h720v80H0zM0 400h720v80H0z'/%3E%3C/svg%3E");
}

/* --- 21.4 Bài nổi bật -----------------------------------------------------
   [phục vụ] phần tử: Image + 4 Text + Button | khối: '.t4fx-bl-nb'
   [trang] blog | [figma] '600:8083' 1232×474
   [lý do vượt panel] nút ghim đáy cột và bề rộng cột theo px

   ảnh 842×473,62 bo 5 · khe **32** · cột chữ **358**
   cột chữ: nhãn 16 → +16 → tiêu đề 90 → +16 → mô tả 120 → +4 → meta 22
            → **+147,62** → nút 358×42 nền #cf9156 bo 3 (đáy cột) */
#content .col.t4fx-bl-nb-anh { flex: 0 0 842px; max-width: 842px; }
#content .col.t4fx-bl-nb-chu { flex: 0 0 358px; max-width: 358px; margin-left: 32px; }
#content .t4fx-bl-nb-hinh img {
  height: 473.62px; object-fit: cover; border-radius: 5px;
}
#content .t4fx-bl-nb-dm p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 12px; line-height: 16.392px; color: #a2a2a2; margin: 0;
}
#content .t4fx-bl-nb-dm { margin-bottom: 16px; }
#content .t4fx-bl-nb-tt h2 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 22px; line-height: 30.052px; color: #000;
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .t4fx-bl-nb-tt { margin-bottom: 16px; }
#content .t4fx-bl-nb-mo p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 24px; color: #353535; margin: 0;
  text-align: justify;
}
#content .t4fx-bl-nb-mo { margin-bottom: 4px; }
#content .t4fx-bl-nb-meta p {
  display: flex; align-items: center; margin: 0; min-height: 22px;
  font-family: var(--t4-font-body); font-weight: 400; color: #7c7c7c;
  font-size: 12px; line-height: 16.392px;
}
/* Dấu '|' khai khung **5px** bên Figma; Manrope vẽ nó rộng 4,06 (phông gốc là
   Metropolis, đã miễn trừ — xem qa/phan-hoi-figma.md mục 27). Ghim bề rộng để
   phần đuôi hàng meta không dồn lệch: thiếu 0,94px ở đây làm mốc
   '50 → Đăng ký…' vượt ngưỡng 2px. */
#content .t4fx-bl-nb-meta-gach {
  font-size: 16px; line-height: 21.6px; margin: 0 10px;
  width: 5px; text-align: center;
}
#content .t4fx-bl-nb-meta-nhan { margin-right: 5px; }
#content a.button.t4fx-bl-nb-nut {
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 42px; min-height: 42px; margin: 147.62px 0 0;
  background: var(--t4-camel); border: 0; border-radius: 3px;
}
/* [phục vụ] vùng chạm của nút "Đăng ký để nhận bài viết mới" | [trang] blog
   | [lý do vượt panel] Flatsome core cho MỌI [button] một lớp ::after vô
   hình nới vùng chạm 89,5px MỖI BÊN (mặc định hợp lý cho nút nhỏ) — nhưng nút
   này đã rộng 358px và chỉ cách ảnh bài nổi bật 32px, nên vùng nới đó LẤN
   57,5px vào ảnh bên cạnh (đã đo bằng Playwright: 2384px² chồng lấp, đúng
   con số kiem-tuong-tac.js báo "hai vùng bấm chồng nhau"). Ghim lại đúng hộp
   nút — nút đã đủ 358×42, không cần nới vùng chạm. */
#content a.button.t4fx-bl-nb-nut::after { left: 0; right: 0; }
#content a.button.t4fx-bl-nb-nut span {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 14px; line-height: 22px; color: var(--t4-white);
  letter-spacing: 0; text-transform: none;
}

/* --- 21.5 Nhóm 1 — ba cột 382,67 khe 42 -----------------------------------
   [phục vụ] phần tử: Row/Col ×3 + Text + Image + Image Box | khối: '.t4fx-bl-n1'
   [trang] blog | [figma] '675:6131' 1232×626,25
   [lý do vượt panel] 382,67 không phải bội của 90 nên span 1/12 dựng không ra

   382,67 × 3 + 42 × 2 = 1232 ✅
   cột 1–2: tiêu đề 22 (đệm dưới 8) → +16 → ảnh 382,67×215,25
            → +20 → nhãn 16 → +8 → tiêu đề 25 → +8 → mô tả 66 → +8 → meta 22
            → +16 → kẻ → +16 → 3 hàng 36 (chữ 14/20 w500 #1f1f1f) xen kẻ
   cột 3  : tiêu đề 22 → +20 → 4 thẻ 84 (ảnh 150 + khe 10 + chữ 222,67)
            bước 124 → nút 382,67×30 */
#content .col.t4fx-bl-n1-cot { flex: 0 0 382.67px; max-width: 382.67px; }
#content .col.t4fx-bl-n1-cot + .col.t4fx-bl-n1-cot { margin-left: 42px; }

#content .t4fx-bl-n1-ten h2,
#content .t4fx-bl-lq-ten h2,
#content .t4fx-bl-n2p-ten h2 {
  font-family: var(--t4-font-head); font-weight: 700;
  font-size: 20px; line-height: 26.66px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
/* Hàng tiêu đề cao **22** với mực chữ ở y=0…14 (Figma). Hộp dòng Playfair
   26,66 có tâm mực cách mép trên **13,13**; cần tâm ở 7 ⇒ lùi hộp dòng lên
   6,13. Cùng phép tính đã dùng cho hàng 40 ở mục 20.5, khác đúng con số. */
#content .t4fx-bl-n1-ten,
#content .t4fx-bl-lq-ten {
  height: 22px; display: flex; align-items: flex-start; margin-bottom: 16px;
}
#content .t4fx-bl-n1-ten h2,
#content .t4fx-bl-lq-ten h2 { margin-top: -6.13px; }
#content .t4fx-bl-n2p-ten {
  height: 40px; display: flex; align-items: flex-start; padding: 11.9px 0 8px;
  margin-bottom: 20px;
}
#content .t4fx-bl-n1-anh img {
  height: 215.25px; object-fit: cover; border-radius: 5px;
}
#content .t4fx-bl-n1-anh { margin-bottom: 20px; }
#content .t4fx-bl-n1-nhan p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 12px; line-height: 16.392px; color: #a2a2a2; margin: 0;
}
#content .t4fx-bl-n1-nhan { margin-bottom: 8px; }
#content .t4fx-bl-n1-tt h3,
#content .t4fx-bl-n2-tt h3 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 18px; line-height: 24.588px; color: #000;
  margin: 0; letter-spacing: 0; text-transform: none;
}
/* ⚠ Khe tiêu đề → mô tả là **4**, không phải 8: Figma đặt tiêu đề 297,25…322,25
   và mô tả ở 326,25. Đặt 8 thì cả khối danh sách bên dưới tụt 4px và ba mốc
   'khoang·dy' của cột giữa lệch đúng +3,98. */
#content .t4fx-bl-n1-tt { margin-bottom: 4px; }
#content .t4fx-bl-n1-mo p,
#content .t4fx-bl-n2-mo p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 22px; color: #353535; margin: 0;
  text-align: justify;
}
#content .t4fx-bl-n1-mo { margin-bottom: 8px; }
#content .t4fx-bl-n1-meta p,
#content .t4fx-bl-n2-meta p {
  display: flex; align-items: center; margin: 0; min-height: 22px;
  font-family: var(--t4-font-body); font-weight: 400; color: #7c7c7c;
  font-size: 10px; line-height: 13.66px;
}
#content .t4fx-bl-n1-meta-gach,
#content .t4fx-bl-n2-meta-gach { font-size: 16px; line-height: 21.6px; margin: 0 10px; }
#content .t4fx-bl-n1-meta-nhan,
#content .t4fx-bl-n2-meta-nhan { margin-right: 5px; }
#content .t4fx-bl-n1-meta { margin-bottom: 0; }

/* Ba hàng danh sách: biểu tượng 16×20 vẽ bằng mặt nạ CSS (là FRAME 'SVG' bên
   Figma, không phải lớp ảnh ⇒ thêm <img> là lệch dãy ảnh của bảng dày). */
/* Bước giữa ba hàng là **68** (Figma 462,25 · 530,25 · 598,25): kẻ · +24 ·
   chữ 20 · +8 · lề 16 · kẻ. Đặt 'padding: 8px 0' cho bước 37 và lệch 31px
   mỗi hàng — đọc TOẠ ĐỘ chứ đừng đọc 'itemSpacing'. */
#content .t4fx-bl-n1-muc {
  display: flex; align-items: center;
  padding: 24px 0 8px; margin-top: 16px; border-top: .5px solid #a2a2a2;
}
/* ⚠ Nét '.5px' Chrome vẽ thành **1px thật** ⇒ hộp hàng cao 53 chứ không 52,5,
   và bước thành 69 thay vì 68. Bù ở LỀ của hai hàng sau, không bù ở hàng đầu
   (hàng đầu lấy khe 16 từ meta phía trên). Đây là lần thứ tư trong tệp này
   nét 0,5px làm lệch một bước — xem thêm mục 20.5 và 20.6. */
#content .t4fx-bl-n1-muc-2,
#content .t4fx-bl-n1-muc-3 { margin-top: 15px; }
/* ⛔ Biểu tượng là DẤU TÍCH nét mảnh **#cf9156**, không phải mũi tên và không
   phải màu chữ: Figma 'SVG' 16×20 chứa 'cl-icon-success' 16×16,36, bên trong
   là 'Vector' **13,72×10,52** tô **#cf9156**. Bản dựng đầu đoán mũi tên tô
   '--t4-text' — sai cả hình lẫn màu ở SÁU chỗ, và bảng dày mù hoàn toàn
   (không phải lớp chữ, cũng không phải lớp tô IMAGE). Chỉ chặng 3b nhìn ra.
   ⚠ ĐỘ DÀY NÉT cũng phải đo, không đoán: kích thước đúng mà nét dày sai thì
   ảnh nhiệt vẫn đỏ. Cách đo là DIỆN TÍCH MỰC (số điểm ảnh tối), không phải bao
   hình: 24/08 chỉnh 'stroke-width' 2 → 1,5 → **1,2**, diện tích 33,5 → 26,0 →
   **20,0 px², khớp đúng Figma 20,0**. Bao hình thì cả ba lần đều ~13×9,5. */
/* Dùng CHUNG cho #20 (mục 22.5) — cùng một 'cl-icon-success', một định nghĩa
   duy nhất (III.4.0 luật NÂNG CẤP). */
#content .t4fx-bl-n1-muc::before,
#content .t4fx-du-tick-muc p::before {
  content: ""; flex: 0 0 16px; width: 16px; height: 20px; margin-right: 8px;
  background-color: var(--t4-camel);
  -webkit-mask: no-repeat center/13.72px 10.52px var(--t4fx-icon-tick);
  mask: no-repeat center/13.72px 10.52px var(--t4fx-icon-tick);
  --t4fx-icon-tick: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 11'%3E%3Cpath d='M1 6.1 5.1 10 13 1' fill='none' stroke='%23000' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
#content .t4fx-bl-n1-muc p {
  font-family: var(--t4-font-body); font-weight: 500;
  font-size: 14px; line-height: 20px; color: var(--t4-text); margin: 0;
}
/* ⚠ KHÔNG có kẻ SAU hàng thứ ba — Figma chỉ vẽ ba 'Vector' và cả ba đều
   nằm TRƯỚC một hàng (438,25 · 506,25 · 574,25). */

/* Cột 3 — bốn thẻ ngang, cùng mô-típ cột phải #21 nhưng chữ **222,67** */
#content .t4fx-bl-lq-ten { margin-bottom: 20px; }
/* Khe **20** dưới thẻ rồi mới tới kẻ, kẻ rồi **19** nữa tới thẻ sau — KHÔNG
   phải 19 rồi 20. Bước vẫn 124 cả hai cách nên bảng dày không phân biệt được,
   nhưng ảnh nhiệt thì có: đặt ngược làm mọi đường kẻ nằm cao hơn Figma 1px và
   hiện thành dải '595×2' / '316×2' ở cả #19 lẫn #20. Kẻ 0,5px của Figma tâm ở
   104 nên vẽ ra pixel 104; thẻ sau ở 124 ⇒ đệm trên = 124 − 104 − 1 = 19. */
#content .box.t4fx-bl-lq-the { display: flex; align-items: center; margin: 0 0 20px; }
#content .box.t4fx-bl-lq-the .box-image { flex: 0 0 150px; width: 150px; }
#content .box.t4fx-bl-lq-the .box-image img {
  width: 150px; height: 84px; object-fit: cover; border-radius: 5px;
}
#content .box.t4fx-bl-lq-the .box-text {
  flex: 1 1 auto; padding: 0; margin-left: 10px; min-width: 0;
}
#content .t4fx-bl-lq-tt p {
  font-family: var(--t4-font-body); font-weight: 600;
  font-size: 14px; line-height: 19.124px; color: #000; margin: 0;
}
#content .box.t4fx-bl-lq-the + .box.t4fx-bl-lq-the {
  border-top: .5px solid #a2a2a2; padding-top: 19px;
}
#content a.button.t4fx-bl-xem {
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 30px; min-height: 30px; margin: 0;
  border: 1px solid var(--t4-text); border-radius: 3px; background: transparent;
}
#content a.button.t4fx-bl-xem span {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 14px; line-height: 22px; color: var(--t4-text);
  letter-spacing: 0; text-transform: none;
}

/* --- 21.6 Nhóm 2 — 674 + kẻ DỌC + 316 -------------------------------------
   [phục vụ] phần tử: Row/Col ×2 + Text + Image + Image Box ×2 | khối: '.t4fx-bl-n2'
   [trang] blog | [figma] '675:5909' 1232×570,12
   [lý do vượt panel] kẻ DỌC giữa hai cột và bề rộng theo px

   ⚠ Khe giữa hai cột là **242**, không phải 42 mà 'itemSpacing' khai: cột trái
   674 kết ở x=674, cột phải bắt đầu ở x=**916**; nét kẻ dọc ở x=**795**, tức
   ĐÚNG GIỮA khe. Đây là chỗ phải đọc TOẠ ĐỘ chứ không đọc 'gap' (III.14.2-2). */
#content .col.t4fx-bl-n2-trai { flex: 0 0 674px; max-width: 674px; }
#content .col.t4fx-bl-n2-phai {
  flex: 0 0 316px; max-width: 316px; margin-left: 242px; position: relative;
}
#content .col.t4fx-bl-n2-phai::before {
  content: ""; position: absolute; top: 0; bottom: 0; left: -121px;
  border-left: .5px solid #a2a2a2;
}
#content .t4fx-bl-n2-dau.row { margin: 0 0 16px; width: 100%; max-width: none; }
#content .t4fx-bl-n2-dau > .col > .col-inner {
  display: flex; align-items: flex-start; height: 40px; padding: 11.9px 0 8px;
}
#content .t4fx-bl-n2-ten h2 {
  font-family: var(--t4-font-head); font-weight: 700;
  font-size: 20px; line-height: 26.66px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .t4fx-bl-n2-ten { margin-right: 12px; }
#content .t4fx-bl-chip { padding: 0 4px; margin-top: 7.63px; }
#content .t4fx-bl-chip + .t4fx-bl-chip { margin-left: 4px; }
#content .t4fx-bl-chip p {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 12px; line-height: 16.392px; color: var(--t4-gray-mid); margin: 0;
}
#content .t4fx-bl-n2-anh img {
  height: 379.12px; object-fit: cover; border-radius: 5px;
}
#content .t4fx-bl-n2-anh { margin-bottom: 20px; }
#content .t4fx-bl-n2-tt { margin-bottom: 4px; }
/* Khe mô tả → meta là **20** (Figma 528,12 → 548,12). Đặt 24 thì cột trái cao
   574,12 thay vì 570,12. */
#content .t4fx-bl-n2-mo { margin-bottom: 20px; }

#content .box.t4fx-bl-n2p-the { margin: 0 0 20px; }
#content .box.t4fx-bl-n2p-the .box-image img {
  width: 100%; height: 177.75px; object-fit: cover; border-radius: 5px;
}
#content .box.t4fx-bl-n2p-the .box-text { padding: 10px 0 0; }
#content .t4fx-bl-n2p-tt p {
  font-family: var(--t4-font-body); font-weight: 600;
  font-size: 16px; line-height: 21.856px; color: #000; margin: 0;
}
#content .box.t4fx-bl-n2p-the + .box.t4fx-bl-n2p-the {
  border-top: .5px solid #a2a2a2; padding-top: 20px;
}
/* ⛔ LỀ DƯỚI CỦA CON CUỐI THOÁT RA NGOÀI '.col-inner' (gộp lề) và cộng vào
   chiều cao của '.col'. Đo được: '.col-inner' 563,94 nhưng '.col' 583,94 —
   đúng 20px lề dưới của thẻ cuối. Cột phải vì thế cao hơn cột trái và KÉO CẢ
   HÀNG lên 583,94 thay vì 570,12, ở cả hai khổ.
   Bảng dày không thấy (nó không đo '.col'), chỉ 'kiem-cao-section.js' thấy. */
#content .box.t4fx-bl-n2p-the:last-child { margin-bottom: 0; }

/* --- 21.7 Khổ 402 — mọi khối về MỘT CỘT 354 ------------------------------
   [phục vụ] phần tử: Row/Col | khối: mọi hàng của '.t4fx-bl'
   [trang] blog | [figma] '1385:21766' thẻ trắng **402** đệm 24 ⇒ nội dung 354
   [lý do vượt panel] panel không đảo được hướng dải chuyên đề

   ⛔ Bản này mới là BƯỚC MỘT: đưa mọi khối về một cột đúng bề rộng. Bảy điểm
   khác desktop đã liệt kê ở §5 của 'uxb/ban-ke-blog.md' (dải chuyên đề đổi
   hướng và nút mũi tên sang TRÁI, ảnh nổi bật lên trên, kẻ dọc thành kẻ ngang,
   khối chữ 'nhom3' 160 thay vì 219) CHƯA làm hết. */
@media (max-width: 849px) {
  #content .t4fx-bl { padding: 24px 0; }
  #content .t4fx-bl::before { top: 0; bottom: 0; width: 100%; }
  #content .t4fx-bl .section-content > .row.row-collapse,
  #content .t4fx-bl-hero .section-content > .row.row-collapse {
    width: 354px; max-width: 354px;
  }

  #content .col.t4fx-bl-td-cot > .col-inner { display: block; }
  /* Hàng tiêu đề khổ 402 cao **23** (Figma '1385:21767'), không phải 45 như
     desktop — hộp dòng Playfair 42,656 phải lùi lên để mực nằm đúng 0…23. */
  /* ⛔ 'display: flex' chứ không để mặc định: lề âm của 'h2' GỘP với lề của
     vỏ '.text' khi vỏ là khối thường, nên nó thoát lên trên và kéo cả hàng
     ngắn đi đúng 9,5px (đo được: khung 74,5 thay vì 84). Flex chặn gộp lề. */
  #content .t4fx-bl-td-h2 { height: 23px; padding-top: 0; display: flex; }
  /* Đo trên site: mực H2 phải có tâm ở **11,5** (Figma '1385:21767' khai lớp
     0…23). Hộp dòng Playfair 42,656 đặt tâm mực cách mép trên 16,25 ⇒ lùi
     4,75. Con số −9,5 của vòng trước là suy từ chiều cao lớp, không phải đo. */
  /* ⛔ Con số này ĐO TRÊN ẢNH ĐÃ CẮT, không lấy từ mốc bảng dày. Quét mực
     chữ: Figma (sau khi trừ 'goc_anh' gy = 8,84) nằm ở −1,84…22,16 còn site
     ở 7,5…31,5 ⇒ site thấp hơn **9,34px**. Bảng dày không thấy vì nó đọc HỘP
     DÒNG bên site và BAO HÌNH MỰC bên Figma — hai đầu khác nghĩa; ảnh nhiệt
     thì hiện "Điểm tin chính" thành hai lớp chồng lệch rõ.
     Khổ desktop đã đúng sẵn (đo được +1,0) nên KHÔNG đụng tới. */
  #content .t4fx-bl-td-h2 :is(h1, h2) { margin-top: -11.71px; }
  /* Chip khổ 402 hẹp hơn desktop: **112 · 114 · 114 · 114** (Figma
     '1385:21767'), không phải 124/126. */
  #content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab {
    flex-basis: 114px; width: 114px;
  }
  #content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab:first-child {
    flex-basis: 112px; width: 112px;
  }
  /* Khổ 402 xếp DỌC: H2 ở trên, dải tab xuống dòng ⇒ không kéo lề âm nữa.
     Bề rộng theo KHUNG NỘI DUNG 354, không phải 402 của cả section.
     ⚠ Hàng H2 phải BỎ 'min-height: 45px' của desktop — 45 là chiều cao dải
     tab nằm CÙNG hàng ở khổ rộng; ở khổ 402 hai khối xếp dọc nên 45 đó thành
     22px thừa, đẩy khung 'tieude_mb' từ 84 lên 106. */
  #content .col.t4fx-bl-td-cot > .col-inner { min-height: 0; }
  /* ⚠ '-8' KHÔNG phải số Figma, là HIỆU (§20.1). Figma đòi khe 16 giữa đáy
     mực H2 (y=23) và mép trên dải tab (y=39); ĐO ĐƯỢC lề dưới của hàng H2 là
     **40** (mặc định '.row' của Flatsome), và hai lề gộp theo luật lề âm:
     40 + (−24) = 16. ⛔ Đừng suy ra con số này bằng cách đoán lề nền — bản
     đặt đầu đoán 24 nên ra −8 và khe còn 32. Đo hai điểm rồi lấy hiệu. */
  #content .tabbed-content.t4fx-bl-chde-dai {
    max-width: 354px; margin: -24px auto 0;
  }
  /* ⛔ 'flex-wrap: nowrap' là bắt buộc: bốn chip 112+114×3 = 454 > 354 nên
     '.nav' của Flatsome (mặc định 'wrap') đẩy chip 4 xuống dòng hai — mốc
     'Chuyên đề 3 → Chuyên đề 4' từ dx 114 thành dy 45 / dx −271. Figma dựng
     dải này CUỘN NGANG (tổng 499 trong khung 354). */
  #content .t4fx-bl-chde-dai > ul.nav-tabs {
    width: 100%; flex-wrap: nowrap; overflow-x: auto;
  }
  /* Chữ chip khổ 402 là 14/19,124, không phải 16/21,856 của desktop. */
  #content .t4fx-bl-chde-dai > ul.nav-tabs > li.tab > a {
    font-size: 14px; line-height: 19.124px;
  }
  /* #20 giành lại cỡ desktop — xem chú thích mục 21.6b. */
  #content .t4fx-du .t4fx-bl-chde-dai > ul.nav-tabs > li.tab {
    flex-basis: 126px; width: 126px;
  }
  #content .t4fx-du .t4fx-bl-chde-dai > ul.nav-tabs > li.tab:first-child {
    flex-basis: 124px; width: 124px;
  }
  #content .t4fx-du .t4fx-bl-chde-dai > ul.nav-tabs > li.tab > a {
    font-size: 16px; line-height: 21.856px;
  }
  /* Khổ 402 đảo vị trí: nút mũi tên ở **x=0** rộng 45, chip bắt đầu từ x=45
     (desktop thì ngược lại — mũi tên ở cuối). 'order' áp được cho cả phần tử
     giả vì cha là flex. */
  #content .t4fx-bl-chde-dai > ul.nav-tabs::after {
    order: -1; margin: 0; flex: 0 0 45px;
  }

  #content .col.t4fx-bl-nb-anh,
  #content .col.t4fx-bl-nb-chu,
  #content .col.t4fx-bl-n1-cot,
  #content .col.t4fx-bl-n2-trai,
  #content .col.t4fx-bl-n2-phai {
    flex: 0 0 100%; max-width: 100%; margin-left: 0;
  }
  #content .col.t4fx-bl-n1-cot + .col.t4fx-bl-n1-cot { margin-left: 0; margin-top: 42px; }
  /* Khe giữa hai khối ở khổ 402 là **84**: khối trái kết ở 437,12, kẻ NGANG ở
     479,12 (+42), khối phải ở 521,12 (+42). Đặt 42 thì mốc
     '50 → Bài viết hữu ích' lệch −41,78 và khung hụt 18,4. */
  /* ⛔ Hàng tiêu đề 'nhom2' ở khổ 402 TRÀN: 165 + 12 + 191 = 368 trong khung
     354. 'flex-shrink' mặc định là 1 nên trình duyệt CO cả tiêu đề lẫn chip và
     cụm chip trôi trái ~5px — đúng cạm bẫy đã gặp ở #21 (mục 20.8). Figma để
     tràn sang phải, không co. */
  #content .t4fx-bl-n2-dau > .col > .col-inner { flex-wrap: nowrap; }
  #content .t4fx-bl-n2-dau > .col > .col-inner > * { flex: 0 0 auto; }
  #content .t4fx-bl-n2-ten h2, #content .t4fx-bl-chip p { white-space: nowrap; }

  #content .col.t4fx-bl-n2-phai { margin-top: 84px; }
  #content .col.t4fx-bl-n2-phai::before { left: 0; right: 0; top: -42px; bottom: auto;
    border-left: 0; border-top: .5px solid #a2a2a2; }

  #content .t4fx-bl-nb-hinh img { height: 199.12px; }
  /* Khe ảnh → cột chữ ở khổ 402 là **32** (Figma '1385:21792'); desktop hai
     cột nằm ngang nên khe đó là 'margin-left'. */
  #content .col.t4fx-bl-nb-chu { margin-top: 32px; }
  #content .t4fx-bl-n1-anh img,
  #content .t4fx-bl-n2-anh img,
  #content .box.t4fx-bl-n2p-the .box-image img { height: 199.12px; }
  #content a.button.t4fx-bl-nb-nut { margin-top: 20px; }
  #content .col.t4fx-bl-hero-cot > .col-inner { padding-top: 120px; }
}

/* --- 21.8 Ba chỗ giành lại số của RIÊNG trang này -------------------------
   [phục vụ] phần tử: breadcrumb + Text | khối: '.t4fx-crumb' · '.t4fx-lq-*'
   [trang] blog | [figma] '1385:21736' · '1385:21951'
   [lý do vượt panel] hai luật toàn cục nằm trong tệp của trang khác, và bộ
     class 't4fx-lq-*' dùng chung với #21 nhưng số đo khổ 402 khác */

/* (1) Mũi tên breadcrumb khổ 402: Figma khai **32px** (Home x=25 w=28 → mục
   sau ở x=85). Luật toàn cục của trang #4 đang đặt 20. */
@media (max-width: 849px) {
  .t4.t4-trang-blog .t4fx-crumb li + li::before { width: 32px; }
  .t4.t4-trang-blog nav.t4fx-crumb ol li:last-child,
  .t4.t4-trang-blog nav.t4fx-crumb ol li:last-child * { line-height: 22px; }
}

/* (2) Khối chữ thẻ 'nhom3' ở khổ 402 cao **160** (không phải 219 như #21):
   tiêu đề 50 · +4 · mô tả 66 · **+18** · meta 22. */
@media (max-width: 849px) {
  .t4.t4-trang-blog #content .t4fx-lq-meta p { margin-top: 18px; }
}

/* (3) Hero khổ 402 cao **650** — H1 ở y=85, lời dẫn ở y=403 rộng 352
   (Figma '1385:21756': 'Container' 352×480 tại y=85, khối lời dẫn dính ĐÁY
   với đệm dưới 32). Khe H1 → lời dẫn vì thế là **265**, không phải 2 như
   desktop. */
@media (max-width: 849px) {
  #content .t4fx-bl-hero { min-height: 650px; }
  #content .col.t4fx-bl-hero-cot > .col-inner { padding-top: 85px; }
  #content .t4fx-bl-lede p { margin-top: 265px; max-width: 352px; }
}

/* ⛔ ĐÃ XOÁ (20/08/2026) — luật cỡ chữ chip '.t4fx-bl-chde p' ở khổ 402.
   Lớp 't4fx-bl-chde' KHÔNG CÒN KẾT XUẤT từ khi dải chuyên đề chuyển sang
   '[tabgroup]' thật (21.6b): DOM nay chỉ có '.t4fx-bl-chde-dai' trên
   '.tabbed-content', còn các tab mang 'class="tab active has-icon"'. Đã soi
   'du-an' và 'blog' — cả hai đều 0 phần tử. Cỡ chữ chip nay do luật
   '.t4fx-bl-chde-dai > ul.nav-tabs > li.tab > a' đặt. */

/* ══════════════════════════════════════════════════════════════════════════
   22. TRANG #20 'du-an' — Figma 722:30494 (1900×2871,78) · 1385:22283 (402)
   ──────────────────────────────────────────────────────────────────────────
   Bản kê: 'uxb/ban-ke-du-an.md'. Ba khối DÙNG LẠI nguyên bộ class của #19
   (III.4.0 luật NÂNG CẤP): 't4fx-bl-td*' · 't4fx-bl-nb*' · 't4fx-bl-n2*',
   cộng ba mảnh dùng chung 't4fx-bl-n1-ten' · 't4fx-bl-lq-the' · 't4fx-bl-xem'.
   Ở đây chỉ khai phần KHÁC.
   ══════════════════════════════════════════════════════════════════════════ */

/* 22.1 Section kem + thẻ trắng
   Section 1900×2871,78 đệm trên 60 · thẻ 1280×2751,78 đệm 24 ⇒ đệm section
   84 = 60 + 24, thẻ vẽ bằng '::before' (ba tầng shortcode là trần, xem
   mục 21.1 — không có '[row]' bọc). */
#content .t4fx-du { padding: 84px 0; position: relative; }
#content .t4fx-du::before {
  content: ""; position: absolute; z-index: 0;
  top: 60px; bottom: 60px; left: 50%; transform: translateX(-50%);
  width: 1280px; max-width: 100%; background: #fff;
}
#content .t4fx-du .section-content { position: relative; z-index: 1; }
/* ⛔ CHỈ hàng CON TRỰC TIẾP của section-content. Viết '.t4fx-du .row' là trúng
   luôn mọi '[row_inner]' (chúng cũng mang class 'row') — dải chip 559px bị nống
   lên 1232 và xuống dòng, làm 'tieude' cao 86,5 thay vì 45. */
#content .t4fx-du > .section-content > .row {
  width: 1232px; max-width: 1232px; margin-left: auto; margin-right: auto;
}

/* 22.2 Khe dọc giữa sáu khối + hai đường kẻ ngang
   Kẻ nằm CHÍNH GIỮA khe 80 (row +40 → kẻ +40 → row kế). Vẽ bằng '::after'
   tuyệt đối chứ không phải 'border-bottom' của row: viền dính mép dưới row,
   không đặt được ở giữa khe. */
#content .t4fx-du .t4fx-bl-td { margin-bottom: 40px; }
#content .t4fx-du-nb,
#content .t4fx-du-news { position: relative; margin-bottom: 80px; }
#content .t4fx-du-nb::after,
#content .t4fx-du-news::after {
  content: ""; position: absolute; left: 0; right: 0; top: calc(100% + 40px);
  border-top: .5px solid #a2a2a2;
}
#content .t4fx-du-n1 { margin-bottom: 40px; }
#content .t4fx-du .t4fx-bl-n2 { margin-bottom: 40px; }
#content .t4fx-du-n3 { margin-bottom: 0; }

/* 22.3 'noibat' — ảnh 842×473,62 (ở #19 là 474) và đáy cột đổi hẳn phần tử
   [figma] section “nổi bật” — desktop '722:30525' · mobile '1385:22311'
          (node lấy từ bản đồ đo: tools/truy-node-be-rong.py --lop t4fx-du-nb)
                                                                       */
#content .t4fx-du-nb .t4fx-bl-nb-hinh img { height: 473.62px; }
/* Hàng "Xem chi tiết" 358×30 dính đáy: khối chữ trên cao 284, cột cao 473,62
   ⇒ khe 159,62. Đặt số cố định (không 'margin-top:auto') để bảng dày bắt được
   ngay nếu chữ đổi dòng làm khối trên lệch. */
#content .t4fx-du-xct { margin-top: 159.62px; }
#content .t4fx-du-xct p {
  display: flex; align-items: center; height: 30px; margin: 0;
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 14px; line-height: 19.124px; color: #7c7c7c;
}
/* Mũi tên = VECTOR 9,25×15 #7c7c7c trong khung 30×30 — KHÔNG phải lớp ảnh.
   viewBox phải là **BAO HÌNH THẬT CỦA ĐƯỜNG VẼ**, tính từ chính chuỗi path:
   x ∈ {504,371,414,590} ⇒ 371…590 (219) · y ∈ {−480,−613,−656,−304,−347}
   ⇒ −656…−304 (352). Tỉ lệ 219/352 = 0,622 ≈ 9,25/15 = 0,617 ✅ — chính là
   bằng chứng đây đúng glyph.
   ⛔ ĐÃ SAI MỘT LẦN: bản đầu ước lượng '320 -720 296 480' bằng mắt, thừa 149px
   ngang và 128px dọc, nên mực vẽ ra chỉ còn 219/296 = 74% bề rộng và
   352/480 = 73% chiều cao. Đo trên ảnh: Figma 8,5×14,5 · site 6,0×10,5
   (71%/72%) — khớp đúng dự đoán. 'mask-size' co giãn theo VIEWBOX chứ không
   theo mực, nên viewBox rộng hơn mực bao nhiêu thì icon nhỏ đi bấy nhiêu. */
#content .t4fx-du-xct p::after {
  content: ""; flex: 0 0 30px; width: 30px; height: 30px; background-color: #7c7c7c;
  -webkit-mask: no-repeat center / 9.25px 15px var(--t4fx-icon-chev);
  mask: no-repeat center / 9.25px 15px var(--t4fx-icon-chev);
  --t4fx-icon-chev: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='371 -656 219 352'%3E%3Cpath d='M504-480 371-613l43-43 176 176-176 176-43-43 133-133Z'/%3E%3C/svg%3E");
}

/* [figma] trang20 · section news — 4 lớp rộng 300.5px: '722:30549' · '722:30555' · '722:30561' … còn 1
   (nhiều lớp cùng khổ nên KHÔNG ghim một node; mở spec trang 20 để chọn) */
/* 22.4 'news' — bốn thẻ 300,5 khe 10 */
#content .col.t4fx-du-news-cot { flex: 0 0 300.5px; max-width: 300.5px; padding: 0; }
#content .col.t4fx-du-news-cot + .col.t4fx-du-news-cot { margin-left: 10px; }
#content .t4fx-du-news-dau { margin-bottom: 12px; }
#content .t4fx-du-news-dau p {
  display: flex; align-items: center; gap: 4px; height: 22px; margin: 0;
}
/* Tên co giãn, tag bám mép phải — Figma cho tên bề rộng 198,5 / 250,5 / 153,5 /
   287 tuỳ độ dài tag, tức tên là phần CÒN LẠI chứ không phải số đo cố định. */
#content .t4fx-du-news-ten {
  flex: 1 1 auto; min-width: 0;
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 16px; line-height: 21.856px; color: #000;
}
#content .t4fx-du-news-tag {
  flex: 0 0 auto;
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 12px; line-height: 16.392px; color: #a2a2a2;
}
#content .t4fx-du-news-anh img {
  width: 100%; height: 169.03px; object-fit: cover; border-radius: 5px;
}

/* 22.5 'nhom1' — 674 + khe 242 + 316 (KHÔNG có kẻ dọc, khác 'nhom2') */
#content .col.t4fx-du-n1-trai { flex: 0 0 674px; max-width: 674px; padding: 0; }
#content .col.t4fx-du-n1-phai {
  flex: 0 0 316px; max-width: 316px; padding: 0; margin-left: 242px;
}
#content .t4fx-du-n1 .t4fx-bl-n2-dau.row { margin-bottom: 18px; }

/* [figma] '722:30585' — image · 390×219 · trang20·nhom1
   (lớp DUY NHẤT rộng 390px trong figma-spec/trang20.json) */
/* Thẻ ảnh-trái 390 + khe 20 + chữ 264, kẻ ở +18 rồi khối tick ở +18 nữa. */
#content .box.t4fx-du-n1-the {
  display: flex; align-items: flex-start;
  margin: 0 0 17px; padding-bottom: 18px; border-bottom: .5px solid #a2a2a2;
}
#content .box.t4fx-du-n1-the .box-image { flex: 0 0 390px; width: 390px; }
#content .box.t4fx-du-n1-the .box-image img {
  width: 390px; height: 219px; object-fit: cover; border-radius: 5px;
}
#content .box.t4fx-du-n1-the .box-text {
  flex: 1 1 auto; padding: 0; margin-left: 20px; min-width: 0;
}

/* Chữ trong thẻ — dùng chung cho nhom1 và nhom3, chỉ khác khe (22.6) */
#content .t4fx-du-the-nhan p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 12px; line-height: 16.392px; color: #a2a2a2; margin: 0;
}
#content .t4fx-du-the-tt h3 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 18px; line-height: 24.588px; color: #000;
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .t4fx-du-the-mo p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 22px; color: #353535; margin: 0;
  text-align: justify;
}
#content .t4fx-du-the-meta p {
  display: flex; align-items: center; height: 22px; margin: 0;
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 10px; line-height: 13.66px; color: #7c7c7c;
}
/* Dấu '|' khai khung **5px** bên Figma (cỡ 16 / hộp dòng 22, khác hẳn hai lớp
   chữ 10px cạnh nó); Manrope vẽ nó hẹp hơn vì phông gốc là Metropolis — đã
   miễn trừ, xem qa/phan-hoi-figma.md mục 27. Ghim bề rộng 5px như mục 21.4,
   nếu không phần đuôi hàng meta dồn lệch ~2,3px. */
#content .t4fx-du-the-meta-gach {
  font-size: 16px; line-height: 22px; margin: 0 10px;
  width: 5px; text-align: center;
}
#content .t4fx-du-the-meta-nhan { margin-right: 5px; }
#content .t4fx-du-n1-the .t4fx-du-the-nhan { margin-bottom: 19.5px; }
#content .t4fx-du-n1-the .t4fx-du-the-tt { margin-bottom: 4px; }
#content .t4fx-du-n1-the .t4fx-du-the-mo { margin-bottom: 19.5px; }

/* Hai cột tick — bước 68: mục 36 (đệm dọc 8) + đệm 16 + kẻ 1 + khe 15.
   ⚠ Viền 0,5px hiện thành 1px nên khe cuối là 15 chứ không phải 16. */
#content .t4fx-du-tick.row { margin: 0; width: 100%; max-width: none; }
#content .col.t4fx-du-tick-cot { flex: 0 0 329px; max-width: 329px; padding: 0; }
#content .col.t4fx-du-tick-cot + .col.t4fx-du-tick-cot { margin-left: 16px; }
#content .t4fx-du-tick-muc p {
  display: flex; align-items: center; min-height: 20px; margin: 0;
  font-family: var(--t4-font-body); font-weight: 500;
  font-size: 14px; line-height: 20px; color: #1f1f1f;
}
/* ⛔ Dấu tích dùng CHUNG định nghĩa với mục 21.5 — đừng chép lại. Bản chép
   đầu tiên tự gõ 'stroke-width='2'' và ảnh nhiệt bắt được ngay: kích thước
   đúng (13,5×9,5 ↔ Figma 13,0×9,5) nhưng DIỆN TÍCH MỰC 33,5 px² so với
   20,0 px² — nét dày gấp rưỡi. Nét thật của 'cl-icon-success' là ~1,2px,
   tức 'stroke-width: 1,2' trên viewBox 14 đơn vị — đo lại được ĐÚNG 20,0 px². */

/* nhom1: kẻ nằm SAU mỗi mục, mục cuối không kẻ
   [figma] section “nhóm 1” — desktop '722:30573' · mobile '1385:22357'
          (node lấy từ bản đồ đo: tools/truy-node-be-rong.py --lop t4fx-du-n1)
                                                                       */
#content .t4fx-du-n1 .t4fx-du-tick-muc {
  padding: 8px 0 24px; border-bottom: .5px solid #a2a2a2; margin-bottom: 15px;
}
#content .t4fx-du-n1 .t4fx-du-tick-muc:last-child {
  padding-bottom: 8px; border-bottom: 0; margin-bottom: 0;
}
/* nhom3: NGƯỢC LẠI — kẻ nằm TRƯỚC mỗi mục, kể cả mục đầu (Vector ở y=250 là
   mép trên khối), và không có kẻ sau mục cuối. */
/* ⚠ Ở đây khe là **16**, KHÔNG bù 1px như nhom1: viền nằm ở ĐẦU hộp nên nó
   ăn vào phần đệm của chính hộp này, không chen vào khe giữa hai hộp. Đặt 15
   thì cả cột nhích lên 1px mỗi mục và mốc so với cột phải lệch 2,36px. */
#content .t4fx-du-tick-3 .t4fx-du-tick-muc {
  padding: 23px 0 8px; border-top: .5px solid #a2a2a2; margin-top: 16px;
}
#content .t4fx-du-tick-3 .t4fx-du-tick-muc:first-child { margin-top: 0; }
/* ⛔ Cột tick của nhom3 rộng **289,5** (595 = 289,5×2 + 16), KHÔNG phải 329 như
   nhom1 (674 = 329×2 + 16). Để 329 là hai cột cộng lại 674 > 595 nên cột thứ
   hai XUỐNG DÒNG — khối cao 621,6 thay vì 566 và mọi mốc ngang lệch 305,5px. */
#content .t4fx-du-tick-3 .col.t4fx-du-tick-cot { flex: 0 0 289.5px; max-width: 289.5px; }

/* [figma] trang20 · section nhom3 — section DUY NHẤT chứa đủ
   bộ bề rộng của cụm này: 288px→'722:31420' (+5) · 595px→'722:31409' (+13)
   (khớp theo TẬP bề rộng, chắc hơn khớp từng số: 528 đứng một
   mình ra hàng trăm ứng viên, '528 và 506 cùng một section'
   thì gần như duy nhất) */
/* 22.6 'nhom3' — hai cột 595 khe 42 */
#content .col.t4fx-du-n3-trai,
#content .col.t4fx-du-n3-phai { flex: 0 0 595px; max-width: 595px; padding: 0; }
#content .col.t4fx-du-n3-phai { margin-left: 42px; }
#content .box.t4fx-du-n3-the {
  display: flex; align-items: flex-start; margin: 0 0 16px;
}
#content .box.t4fx-du-n3-the .box-image { flex: 0 0 287.5px; width: 287.5px; }
#content .box.t4fx-du-n3-the .box-image img {
  width: 287.5px; height: 161.72px; object-fit: cover; border-radius: 5px;
}
#content .box.t4fx-du-n3-the .box-text {
  flex: 1 1 auto; padding: 0; margin-left: 20px; min-width: 0;
}
#content .t4fx-du-n3-the .t4fx-du-the-nhan { margin-bottom: 8px; }
#content .t4fx-du-n3-the .t4fx-du-the-tt { margin-bottom: 4px; }
#content .t4fx-du-n3-the .t4fx-du-the-mo { margin-bottom: 8px; }

/* ── Khổ ≤849: xem §5 bản kê ─────────────────────────────────────────────── */
@media (max-width: 849px) {
  /* Thẻ trắng DÁN SÁT mép section — khác #19, đừng chép nguyên khối của nó. */
  #content .t4fx-du { padding: 24px 0; }
  #content .t4fx-du::before { top: 0; bottom: 0; width: 100%; }
  /* Giành lại cả 'width' LẪN 'max-width' khỏi luật chung 352px của trang #4 */
  #content .t4fx-du > .section-content > .row { width: 354px; max-width: 354px; }

  #content .col.t4fx-du-news-cot,
  #content .col.t4fx-du-n1-trai,
  #content .col.t4fx-du-n1-phai,
  #content .col.t4fx-du-n3-trai,
  #content .col.t4fx-du-n3-phai {
    flex: 0 0 100%; max-width: 100%; margin-left: 0;
  }
  /* ⚠ Phải nhắc lại đúng bộ chọn kề '+': luật 'margin-left: 10px' ở phần
     desktop có độ ưu tiên cao hơn dòng gộp bên trên, không gỡ thì ba thẻ 2–4
     tụt sang phải 10px so với thẻ 1. */
  #content .col.t4fx-du-news-cot + .col.t4fx-du-news-cot {
    margin-left: 0; margin-top: 10px;
  }
  #content .col.t4fx-du-n1-phai,
  #content .col.t4fx-du-n3-phai { margin-top: 42px; }

  /* Thẻ đổi ảnh LÊN TRÊN, khe 20 */
  #content .box.t4fx-du-n1-the,
  #content .box.t4fx-du-n3-the { display: block; }
  #content .box.t4fx-du-n1-the .box-image,
  #content .box.t4fx-du-n3-the .box-image { width: 100%; }
  #content .box.t4fx-du-n1-the .box-image img,
  #content .box.t4fx-du-n3-the .box-image img { width: 100%; height: 199.12px; }
  #content .box.t4fx-du-n1-the .box-text,
  #content .box.t4fx-du-n3-the .box-text { margin: 20px 0 0; }

  #content .t4fx-du-nb .t4fx-bl-nb-hinh img { height: 199.12px; }
  #content .t4fx-du-news-anh img { height: 199.12px; }

  /* ⚠ Hai cột tick VẪN là hai cột ở khổ 402 — 169 khe 16, không rã một cột. */
  /* ⚠ Phải nhắc lại cả biến thể '-3': luật 289,5 của nó ở phần desktop có độ
     ưu tiên CAO HƠN dòng này (2 lớp + '.col'), không viết là nhom3 khổ 402
     giữ nguyên 289,5 và cột hai xuống dòng (cao 1425 thay vì 1303). */
  #content .col.t4fx-du-tick-cot,
  #content .t4fx-du-tick-3 .col.t4fx-du-tick-cot { flex: 0 0 169px; max-width: 169px; }

  /* ⛔ ĐÃ XOÁ (20/08/2026) — ba luật giành lại bề rộng/cỡ chip cho #20.
     Chúng bám lớp 't4fx-bl-chde' vốn không còn kết xuất (xem 21.6b), nên
     KHỚP 0 phần tử trên cả 'du-an' lẫn 'blog'.

     ⚠ ĐÍNH CHÍNH luôn nỗi lo ghi ở 21.6b: chú thích cũ nói lớp
     't4fx-bl-chde t4fx-bl-chde-N' "nay nằm trên chính 'li.tab'" nên hai luật
     này sẽ tô xanh cố định tab 1. Soi DOM thật ngày 20/08: 'li.tab' mang
     'class="tab active has-icon"', KHÔNG có 't4fx-bl-chde'. Không có lỗi tô
     xanh nào; chúng chỉ là luật trơ. Bề rộng chip của #20 do mục 21.1 và các
     luật '.t4fx-du .t4fx-bl-chde-dai > ul.nav-tabs > li.tab' đặt. */

  /* Breadcrumb: mặc định chung là kẻ ngăn 20px + 'line-height: normal' cho mục
     cuối; mỗi trang tự khai lại 32px / 22px (mục 20.1 và 21.1). */
  .t4.t4-trang-du-an .t4fx-crumb li + li::before,
  .t4.t4-trang-san-pham-so-detail .t4fx-crumb li + li::before { width: 32px; }
  .t4.t4-trang-du-an nav.t4fx-crumb ol li:last-child,
  .t4.t4-trang-du-an nav.t4fx-crumb ol li:last-child *,
  .t4.t4-trang-san-pham-so-detail nav.t4fx-crumb ol li:last-child,
  .t4.t4-trang-san-pham-so-detail nav.t4fx-crumb ol li:last-child * { line-height: 22px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   23. TRANG #18 'san-pham-so-detail' — Figma 1224:8898…1229:8257 (desktop)
                                              1386:27165…1386:27492 (402)
   ──────────────────────────────────────────────────────────────────────────
   Bản kê: 'uxb/ban-ke-san-pham-so-detail.md'.

   ⛔ TRÙNG THIẾT KẾ với #15 'khoa-hoc-1' (cửa sổ C, bộ class 't4kh-*' trong
   '49-nhom-khoa-hoc.css') — 93/93 lớp chữ giống hệt. Dựng độc lập vì bản kia
   còn 321 lệch và nằm trong tệp cửa sổ D không được sửa (§0 bản kê). Gộp hai
   bộ class SAU khi cả hai ĐẠT.
   ══════════════════════════════════════════════════════════════════════════ */

/* 23.1 Khung chung — khối nội dung 1080, riêng 'noidung'/'khac' là 1056
   [figma] section “khách hàng” — desktop '1229:8169' · mobile '1398:15065'
          (node lấy từ bản đồ đo: tools/truy-node-be-rong.py --lop t4sp-kh)
   1080 = Container '532:4123' (GIA ĐÌNH SỐ KHUNG, 30-components).      */
#content .t4sp-hero,
#content .t4sp-cn,
#content .t4sp-gv,
#content .t4sp-nd,
#content .t4sp-kh { position: relative; }
#content .t4sp-hero > .section-content > .row,
#content .t4sp-cn > .section-content > .row,
#content .t4sp-gv > .section-content > .row {
  width: 1080px; max-width: 1080px; margin-left: auto; margin-right: auto;
}
#content .t4sp-nd > .section-content > .row,
#content .t4sp-kh > .section-content > .row {
  width: 1056px; max-width: 1056px; margin-left: auto; margin-right: auto;
}

/* 23.2 HERO — dải kem 450 tràn 1900 + thẻ form 508×800 ĐẶT TUYỆT ĐỐI
   [figma] section hero — desktop '1229:7978' · mobile '1386:27213'
          (node lấy từ bản đồ đo: tools/truy-node-be-rong.py --lop t4sp-hero)
   ⛔ Thẻ cao 800 nằm trong dải chỉ 450 và đè xuống khối dưới 342px. Để nó
   theo dòng chảy thì hàng 1 cao 800 và hai danh sách bị đẩy từ y=474 xuống
   816 — sai 342px mà nhìn ảnh vẫn thấy "hợp lý". */
#content .t4sp-hero { padding: 0; }
#content .t4sp-hero::before {
  content: ""; position: absolute; z-index: 0; top: 0; height: 450px;
  left: 50%; transform: translateX(-50%); width: 1900px; max-width: 100vw;
  background: #f8f5ee;
}
#content .t4sp-hero .section-content { position: relative; z-index: 1; }

/* [figma] trang18 · section hero/hero_mb — 2 lớp rộng 80px: '1229:7987' · '1386:27222'
   (nhiều lớp cùng khổ nên KHÔNG ghim một node; mở spec trang 18 để chọn) */
/* Hàng nhãn + kẻ: rộng 1080 dù nằm trong cột 508 của Figma (§2.2). Kẻ chạy
   khuất SAU thẻ form — đúng như thiết kế, không phải lỗi chồng lớp. */
/* Mốc dọc TUYỆT ĐỐI của hero (§2.3 bản kê) — Section 1 cao **450** dù nội
   dung chỉ tới 397, rồi khe 24 tới Section 2. Để dòng chảy tự quyết thì hero
   cao 1033 thay vì 1188: thiếu đúng 53px thừa của Section 1 cộng khe 24 và
   khe 18 giữa hàng nhãn với H1. */
#content .t4sp-nhan.row { margin: 0; padding-top: 16px; }
#content .t4sp-nhan-o {
  display: flex; align-items: center; height: 45px; padding-bottom: 16px;
  box-sizing: content-box;
}
#content .t4sp-nhan-o p {
  flex: 0 0 auto; margin: 0; padding: 4px 8px;
  background: var(--t4-camel); border: 1px solid rgba(0, 0, 0, .11);
  border-radius: 4px; min-width: 80px; text-align: center;
  font-family: var(--t4-font-body); font-weight: 500;
  font-size: 14px; line-height: 19.124px; letter-spacing: .14px; color: #fff;
}
#content .t4sp-nhan-o::after {
  content: ""; flex: 1 1 auto; margin-left: 16px; height: 0;
  border-top: 1px solid var(--t4-camel);
}

/* [figma] trang18 · section hero — section DUY NHẤT chứa đủ
   bộ bề rộng của cụm này: 95px→'1229:7995' · 508px→'1229:7983' (+12)
   (khớp theo TẬP bề rộng, chắc hơn khớp từng số: 528 đứng một
   mình ra hàng trăm ứng viên, '528 và 506 cùng một section'
   thì gần như duy nhất) */
/* Khe 53 (đáy Section 1) và 24 (sang Section 2) là hai lề KỀ NHAU nên GỘP
   lại thành 53, không cộng thành 77. Dồn cả vào một chỗ. */
/* ⛔ 'position: relative' ở ĐÂY là bắt buộc: thẻ form đặt tuyệt đối với
   'left: 572px', mà 572 là toạ độ trong khối nội dung **1080**. Không có dòng
   này thì nó neo vào '[section]' rộng 1885 và thẻ nằm lệch sang trái ~400px —
   chiều cao section vẫn đúng nên chỉ bảng dày bắt được (hai mốc
   'Địa chỉ email * → Giá gốc:' và 'Điền vào đây → Học phí'). */
#content .t4sp-dau.row { margin: 18px 0 77px; position: relative; }
#content .col.t4sp-dau-trai { flex: 0 0 508px; max-width: 508px; padding: 0; }
/* Thẻ khai 'y=16' trong hệ toạ độ của KHUNG HERO, nhưng neo vào '.t4sp-dau'
   — hàng này bắt đầu ở y=95 (sau hàng nhãn 77 + khe 18) ⇒ 'top' phải là
   **16 − 95 = −79**. Để 16 là thẻ tụt xuống 95px và mọi mốc ngang giữa cột
   trái với ô nhập lệch theo. */
/* [phục vụ] phần tử: thẻ form nổi "Đăng ký học ngay" | [trang]
   san-pham-so-detail | [lý do vượt panel] `z-index` — 22/08/2026: nút "Học
   ngay" (nay là <button> thật, trước là <p> trơ nên chưa ai bấm thử) bị
   `.col-inner` của HÀNG SAU (`.t4sp-ds`, "Section 2 của hero") nuốt cú bấm.
   Cả hai đều `position:absolute/relative` z-index:auto trong CÙNG một ngữ
   cảnh xếp chồng của `.section-content`, nên hàng sau — đứng SAU trong DOM —
   vẽ ĐÈ LÊN thẻ nổi đứng trước nó bất kể toạ độ. Ghim z-index để thẻ luôn nổi
   trên nội dung phía dưới nó, đúng cách nó VẼ RA (bảng dày/ảnh nhiệt đã ✅ từ
   trước vì chữ vẫn ở đúng chỗ — chỉ VÙNG BẤM của nút bị che, không phải hình). */
#content .col.t4sp-the-cot {
  position: absolute; top: -79px; left: 572px; z-index: 2;
  width: 508px; max-width: 508px; padding: 0; margin: 0;
}
#content .t4sp-h1 :is(h1, h2) {
  font-family: var(--t4-font-head); font-weight: 700;
  font-size: 32px; line-height: 35px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
/* Hai khổ NGẮT DÒNG KHÁC NHAU (III.15.2) nên phải hai chuỗi; ẩn/hiện chứ
   không dùng một chuỗi rồi để trình duyệt tự xuống dòng. */
#content .t4sp-h1-mb { display: none; }
#content .t4sp-h1 { margin-bottom: 16px; }
/* 'line-height: 0' cho hộp bọc: '[ux_text]' sinh một '<div>' có hộp dòng
   riêng, cộng thêm ~4px dưới phần tử inline bên trong. Chip đo 27,3 thay vì
   23, chip ngôn ngữ 34,4 thay vì 31. */
#content .t4sp-chip { margin-bottom: 16px; line-height: 0; }
#content .t4sp-chip p {
  display: inline-flex; align-items: center; justify-content: center;
  margin: 0; padding: 0 10px; min-width: 95px; height: 23px;
  box-sizing: border-box;
  background: #fff; border: 1px solid var(--t4-leaf); border-radius: 11.5px;
  font-family: var(--t4-font-body); font-weight: 800;
  font-size: 10px; line-height: 13.66px; color: var(--t4-leaf);
}
#content .t4sp-gia { margin-bottom: 16px; }
#content .t4sp-gia p {
  display: grid; grid-template-columns: auto 1fr; margin: 0;
  font-family: var(--t4-font-body);
}
#content .t4sp-gia-nhan {
  grid-column: 1 / -1; font-size: 12px; line-height: 16.392px;
  font-weight: 700; color: var(--t4-text);
}
#content .t4sp-gia-so {
  grid-column: 1 / -1; font-size: 20px; line-height: 27.32px;
  font-weight: 700; letter-spacing: -1px; color: #b77537;
}
#content .t4sp-gia-goc-nhan,
#content .t4sp-gia-goc {
  font-size: 10px; line-height: 13.66px; font-weight: 700;
  letter-spacing: -.5px; color: #979797; margin-top: 8px;
}
/* Giá gốc GẠCH NGANG — Figma khai 'gach: STRIKETHROUGH', chỉ ở ô số. */
#content .t4sp-gia-goc { text-decoration: line-through; }
#content .t4sp-gia-goc { margin-left: 4px; }
#content .t4sp-mo p {
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 24px; color: #213343; margin: 0;
}

/* [figma] trang18 · section hero — section DUY NHẤT chứa đủ
   bộ bề rộng của cụm này: 186px→'1229:8031' (+5) · 334px→'1229:8053' · 388px→'1229:8029' (+9)
   (khớp theo TẬP bề rộng, chắc hơn khớp từng số: 528 đứng một
   mình ra hàng trăm ứng viên, '528 và 506 cùng một section'
   thì gần như duy nhất) */
/* 23.3 Thẻ form — mô hình TĨNH, danh mục III.3b (§6 bản kê) */
#content .t4sp-form {
  height: 800px; padding: 81px 60px 0; margin: 0;
  background: #fff; border-radius: 10px;
  box-shadow: 0 2px 12px rgba(0, 0, 0, .08);
}
/* ⚠ Tiêu đề thẻ là **Manrope 800**, KHÔNG phải phông tiêu đề Playfair — đây
   là chỗ duy nhất trong dự án dùng Manrope ở cỡ 28. Màu cũng là #b77537 chứ
   không phải xanh rêu. Đoán theo thói quen là sai cả ba thuộc tính. */
/* Khối tiêu đề thẻ cao 54 (chữ 38,248 + đệm dưới 15,75) rồi KHE 16 mới tới
   khối ô nhập — Figma: tiêu đề ở 97, ô đầu ở 167. Bỏ khe 16 là cả cụm ô nhập
   nhích lên 15,75px. */
#content .t4sp-form-td {
  margin: 0 0 16px; padding-bottom: 15.75px; text-align: center;
  font-family: var(--t4-font-body); font-weight: 800;
  font-size: 28px; line-height: 38.248px; letter-spacing: -.56px;
  color: #b77537;
}
#content .t4sp-form .t4sp-o {
  display: flex; flex-direction: column; margin: 0 0 10px; width: 388px;
}
/* Hai ô đầu đứng CẠNH nhau (186 + khe 16) — đúng 'Frame 28' của Figma. */
#content .t4sp-form .t4sp-o-doi { display: flex; gap: 16px; }
#content .t4sp-form .t4sp-o-doi .t4sp-o { width: 186px; }
#content .t4sp-o-nhan {
  height: 30px; margin-bottom: 8px;
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 16px; line-height: 30px; color: var(--t4-text);
}
#content .t4sp-o-hop {
  height: 48px; padding: 16px 15px; box-sizing: border-box;
  border: 1px solid #cccccc; border-radius: 5px; background: #fff;
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 22px; color: #212529;
}
/* [phục vụ] phần tử: nút "Học ngay" (nay là <button> thật, trước là <p> trơ)
   [trang] san-pham-so-detail | [figma] 1229:8051 (hero) · 1386:27286 (mobile)
   [lý do vượt panel] cần reset UA mặc định của <button> — border/padding/nền
   22/08/2026: vá theo kiem-tuong-tac.js — site để CHỮ TRƠ (chưa đấu dây) */
#content .t4sp-form-nut {
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 44px; margin: 24px 0 0; padding: 0; border: 0;
  border-radius: 5px; box-sizing: border-box; cursor: pointer; appearance: none;
  background: var(--t4-leaf);
  font-family: var(--t4-font-body); font-weight: 600;
  font-size: 16px; line-height: 24px; color: #fff;
}
/* Khung chữ ghi chú rộng **334** trong khối 388 (Figma), căn giữa — để nó
   rộng hết khối thì dòng ngắt muộn và mốc 'chu_w(giữa)' lệch 43,83. */
#content .t4sp-form-ghi {
  width: 334px; margin: 24px auto 0; padding-top: 4px; text-align: center;
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 12px; line-height: 16.392px; color: #666;
}

/* 23.4 Hai danh sách + hàng ngôn ngữ (Section 2 của hero)
   Khối 1 và 2 rộng **528**, khối 3 rộng **1080** — Figma cố ý, vì hai khối
   đầu phải né thẻ form đang đè xuống (§2.1). Đừng cho đều. */
#content .t4sp-ds.row { margin: 0; padding: 12px 0; }
#content .t4sp-ds1-td,
#content .t4sp-ds2-td { width: 504px; margin-bottom: 16px; }
#content .t4sp-ds1-td h2,
#content .t4sp-ds2-td h2,
#content .t4sp-ngonngu-td h2 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 18px; line-height: 24.588px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .t4sp-ds1-muc { width: 504px; padding-left: 12px; }
/* Danh sách 2 xếp NGANG nên chữ bắt đầu muộn hơn 10,13px; bề rộng ô phải là
   **492** (không phải 504) thì chỗ còn lại cho chữ mới đúng 469,87 như Figma —
   để 504 thì dòng dài tới 477 mới ngắt, sai bảy mốc 'chu_w'. */
#content .t4sp-ds2-muc { width: 492px; padding-left: 22.13px; }
#content .t4sp-ds1-muc p,
#content .t4sp-ds2-muc p {
  margin: 0; font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 22px; color: #213343;
}
/* Dấu đầu dòng của Figma là lớp chữ RỖNG 0,13 — không có chấm nào để vẽ. */
/* Dấu đầu dòng khai phông **Lexend Deca w300 14/24** — phông site KHÔNG có
   (xem qa/phan-hoi-figma.md mục 37). Lớp rộng 0,13px nên không nhìn thấy gì;
   vẫn khai đúng cỡ để mốc dọc của hàng không lệch. */
#content .t4sp-ds1-dau,
#content .t4sp-ds2-dau,
#content .t4sp-cn-dau {
  display: inline-block; width: .13px; overflow: hidden;
  font-weight: 300; font-size: 14px; line-height: 24px;
}
/* Danh sách 2 xếp NGANG khe **10** (Figma 'Item' HORI), nên chữ bắt đầu ở
   22,13 chứ không phải 12,13 như danh sách 1 (xếp dọc, không khe). */
/* Khe 10 của danh sách 2 (Figma 'Item' xếp NGANG) gộp thẳng vào đệm trái của
   ô: 12 + 10 = **22,13**. Đặt bằng 'margin-right' của dấu thì không ăn (dấu
   rộng 0,13 + 'overflow: hidden'), đặt bằng 'padding-left' của ô chữ thì lệch
   giữa các mục vì mỗi ô chữ có bề rộng riêng do bộ sinh cấp. */
/* ⛔ KHÔNG dùng ':last-of-type' để tách khe 40 giữa hai danh sách: hai lớp
   mục đều là '<div>' anh em nên 'of-type' chỉ trúng mục cuối cùng của CẢ
   hàng. Đặt khe vào 'margin-top' của TIÊU ĐỀ khối sau — mỗi khe một chủ. */
#content .t4sp-ds1-muc { height: 24px; margin-bottom: 8px; }
#content .t4sp-ds2-muc { height: 44px; margin-bottom: 8px; }
#content .t4sp-ds2-muc p { line-height: 22px; }
/* ⚠ Lề dọc của hai phần tử KỀ NHAU GỘP LẠI (lấy số lớn), không cộng. Mục
   cuối đã có 'margin-bottom: 8' nên đặt 32 ở đây ra khe 32 chứ không phải 40 —
   thiếu 8px mỗi khe, hai khe là 16px, đúng phần hụt đo được của 'hero'. */
#content .t4sp-ds2-td { margin-top: 40px; }
#content .t4sp-ngonngu-td { margin: 40px 0 16px; }
#content .t4sp-ngonngu { padding-bottom: 7px; line-height: 0; }
#content .t4sp-ngonngu p {
  display: inline-block; margin: 0; padding: 3px 8px; min-width: 78px;
  background: #fff; border: 1px solid #666; border-radius: 12px;
  text-align: center;
  font-family: var(--t4-font-body); font-weight: 800;
  font-size: 12px; line-height: 16.392px; color: #213343;
}

/* [figma] '1229:8114' — Background · 1920×311.25 · trang18·chungnhan
   (lớp DUY NHẤT rộng 1920px trong figma-spec/trang18.json) */
/* 23.5 CHỨNG NHẬN — nền '#cf9156' tràn **1920** (khác hero 1900) */
/* ⛔⛔ ĐỆM DỌC CỦA SECTION PHẢI ĐẶT TRÊN '.row', KHÔNG PHẢI TRÊN '[section]'.
   Shortcode khai 'padding="0px"' nên Flatsome in ra một khối
   '<style>#section_XXXX { padding-top:0px; padding-bottom:0px }</style>' —
   bộ chọn ID, thắng mọi luật lớp kể cả '#content .t4sp-cta > .section-content'.
   Đã mất hai lượt đo mới tìm ra: thẻ trắng CTA đo đúng 289,3px mà section
   vẫn 371 thay vì 449. Xem qa/quyet-dinh.md mục 24/08/2026. */
#content .t4sp-cn-hang.row { padding: 24px 0; }
/* HAI lớp nền chồng nhau: dải camel tràn **1920** ở dưới, rồi tấm kem
   **1080** ('Section paints' #fcfbf6) phủ lên đúng khối nội dung. Bỏ tấm kem
   là cả khối 1080×311 đỏ nguyên khối ở chặng 3. */
#content .t4sp-cn::before {
  content: ""; position: absolute; z-index: 0; top: 24px; height: 311.25px;
  left: 50%; transform: translateX(-50%); width: 1920px; max-width: 100vw;
  background: var(--t4-camel);
}
#content .t4sp-cn::after {
  content: ""; position: absolute; z-index: 0; top: 24px; height: 311.25px;
  left: 50%; transform: translateX(-50%); width: 1080px; max-width: 100%;
  background: #fcfbf6;
}
#content .t4sp-cn .section-content { position: relative; z-index: 1; }
#content .t4sp-cn-hang.row { margin: 0; }
#content .col.t4sp-cn-anh {
  flex: 0 0 300px; max-width: 300px; position: relative;
}
#content .col.t4sp-cn-anh > .col-inner { padding-bottom: 7px; }
#content .col.t4sp-cn-chu {
  flex: 0 0 624.13px; max-width: 624.13px; margin-left: 40px;
}
#content .col.t4sp-cn-chu > .col-inner { padding: 20px 0 20px 32px; }
/* ⛔ ĐÃ ĐẶT SAI MỘT LẦN rồi suýt miễn trừ oan: chữ "Chứng nhận" nằm gần ĐỈNH
   thẻ, cách mép trên **22,4px**, ở CẢ HAI khổ (Figma: thẻ 24 · chữ 46,4 ·
   thẻ_mb 48 · chữ_mb 70,4). Đặt sát đáy làm hai mốc neo lệch ~227px — tôi đã
   coi đó là lỗi gốc toạ độ và viết miễn trừ, sai; ảnh nhiệt mới chỉ ra. */
/* ⛔ THẺ TRẮNG THẬT LÀ **338×355**, KHÔNG PHẢI 300×304. Layer 'Frame'/'SVG'
   (300×304) chỉ là KHUNG CHỨA; hình vẽ 'Certificate template 1' TRÀN RA
   ngoài khung 19px mỗi bên (Figma: desktop x=-19 y=5 · khổ 402 x=32 y=29).
   Dựng theo khung chứa là thẻ hụt một vành 19px quanh bốn cạnh.
   ⚠ Desktop KHÔNG lộ lỗi này ở chặng 3 vì sau thẻ là nền kem #fcfbf6 — ΔE so
   với trắng chỉ ~1,5, dưới ngưỡng 2,5. Khổ 402 nền là camel nên cùng một lỗi
   bật lên ΔE 56. Một sai hình học có thể ẩn hoàn toàn ở một khổ CHỈ vì màu
   nằm sau nó; xanh ở khổ này không chứng minh được gì cho khổ kia.
   Vẽ bằng '::before' chứ không nới chính hộp: giữ nguyên hộp bố cục 300×304
   nên mọi mốc của bảng dày và vị trí chữ "Chứng nhận" không xê dịch. */
#content .t4sp-cn-ten::before {
  content: ""; position: absolute; z-index: 0;
  left: -19px; top: -19px; width: 338px; height: 355px;
  background: #fff; border-radius: 12px;   /* bo 12, đo từ ảnh Figma */
}
#content .t4sp-cn-ten p { position: relative; z-index: 1; }
#content .t4sp-cn-ten {
  height: 304px; position: relative;
  display: flex; align-items: flex-start; justify-content: center;
  /* 16,27 chứ không 22,4: mốc đo TÂM MỰC còn hộp dòng Playfair 39,99 cao hơn
     mực nên phải bù. Khổ 402 bù khác (12,57) vì cỡ chữ giữ nguyên mà khung
     đổi. */
  padding-top: 16.27px; box-sizing: border-box;
}
#content .t4sp-cn-ten p {
  margin: 0; font-family: var(--t4-font-head); font-weight: 700;
  font-size: 30px; line-height: 39.99px; color: #b77537;
}
/* Thẻ nổi 232×158 ĐÈ lên ảnh chứng nhận, lệch phải 34 so với mép ảnh. */
#content .t4sp-cn-noi {
  position: absolute; top: 93px; left: 34px; width: 232px; height: 158px;
  padding: 9.68px 17.424px; box-sizing: border-box;
  /* ⚠ KHÔNG nền, KHÔNG bóng. Layer tên là 'Background+Shadow' nên rất dễ
     dựng thành hộp trắng đổ bóng — nhưng quét ảnh Figma dọc cột x=100 từ
     y=110 tới y=320 chỉ ra ĐÚNG hai nét kẻ, không một điểm ảnh bóng nào.
     Bằng chứng thứ hai: nét kẻ y=127 nằm TRONG khoảng 121–279 của hộp mà vẫn
     nhìn thấy ⇒ hộp trong suốt, không phải trắng đục. Bóng tôi vẽ trước đây
     loang từ y=115 tới 121 và 279 tới 289 — chính là 2 vệt xám ở ảnh nhiệt. */
  background: transparent;
}
#content .t4sp-cn-noi p {
  margin: 0; text-align: center;
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 10px; line-height: 16px; color: #213343;
}
/* Hai nét kẻ **#eeeeee** rộng 231,57 trên và dưới đoạn chữ (Figma 'Vector_2'
   và 'Vector'). Vẽ trên '.col-inner' vì '::before' của thẻ đã dùng cho tấm
   trắng. Toạ độ tính từ mép trên '.col-inner': desktop col-inner bắt đầu ở
   y=24 của khung nên 103−24=79 và 279−24=255; khổ 402 col-inner bắt đầu ở
   y=0 nên giữ nguyên 127 và 303. */
#content .col.t4sp-cn-anh > .col-inner { position: relative; }
#content .col.t4sp-cn-anh > .col-inner::before,
#content .col.t4sp-cn-anh > .col-inner::after {
  content: ""; position: absolute; z-index: 2;
  left: 34px; width: 231.57px; height: 1px; background: #eee;
}
#content .col.t4sp-cn-anh > .col-inner::before { top: 79px; }
#content .col.t4sp-cn-anh > .col-inner::after  { top: 255px; }

/* 13,4 chứ không 16: tiêu đề là Manrope còn hai mục dưới nay là Lexend Deca
   (xem luật '.t4sp-cn-muc p'), hai phông đặt mực ở hai độ cao khác nhau trong
   cùng hộp dòng 24px — mực Lexend tụt thêm 2,6px. Figma đòi khe **41**; để 16
   thì đo ra 43,6. Khe giữa hai mục vẫn đúng 32 vì cả hai cùng phông. */
#content .t4sp-cn-td { margin-bottom: 13.4px; }
#content .t4sp-cn-td h2 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 18px; line-height: 24.588px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
/* 'min-height' chứ KHÔNG phải 'height': khổ 402 hai dòng này xuống 2 hàng
   (48px mỗi mục, Figma khai list cao 104). Khoá cứng 24 là khối hụt đúng
   48,4px — bằng chênh lệch đo được của 'chungnhan_mb'. */
#content .t4sp-cn-muc { padding-left: 12px; min-height: 24px; }
#content .t4sp-cn-muc + .t4sp-cn-muc { margin-top: 8px; }
/* ⚠ Hai dòng này khai **Lexend Deca w300**, khác hẳn hai danh sách của hero
   (Manrope w400). Đây là chữ NHÌN THẤY được, không phải dấu đầu dòng ẩn —
   đã xin phông ở qa/phan-hoi-figma.md mục 37. */
/* ✅ CÂU 37 ĐÃ GIẢI (25/08/2026). Trước đây ghi "khai Lexend Deca mà bộ token
   không có" và tạm dùng Manrope w300. Thực tế phông ĐÃ được nạp toàn site từ
   'functions.php' ('t4-font-lexend-nhomc', w300/400/600) — cửa sổ khác thêm cho
   #15/#16, mà #15 dùng CHUNG thiết kế khối chứng nhận này với #18.
   Luật của #15 ('.t4kh-cn-muc p') giống luật này TỪNG THUỘC TÍNH trừ họ phông,
   nên nay khai đúng Lexend Deca — vừa đúng bản vẽ, vừa để hai bộ class gộp
   được về một (III.4.0 luật NÂNG CẤP). */
#content .t4sp-cn-muc p {
  margin: 0; font-family: 'Lexend Deca', var(--t4-font-body); font-weight: 300;
  font-size: 14px; line-height: 24px; color: #141414;
}

/* [figma] '1229:8158' — Background · 80×10 · trang18·giangvien
   (lớp DUY NHẤT rộng 80px trong figma-spec/trang18.json) */
/* 23.6 GIẢNG VIÊN — ảnh 165 CĂN GIỮA hàng (Figma x=348), không dính mép trái */
#content .t4sp-gv-hang.row { padding-top: 48px; }
#content .t4sp-gv-hang.row { margin: 0 0 16px; }
#content .t4sp-gv-td h2 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 18px; line-height: 24.588px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
/* Đáy khối có một thanh xám **80×10 #e6e6e6 bo 4** (Figma 'Background'
   trong 'Container 1080×10') — không chữ, không ảnh, nên bảng dày mù. Bỏ nó
   là khối hụt đúng 30px (10 thanh + 20 khe). */
#content .t4sp-gv-than.row {
  margin: 0 0 36px; justify-content: flex-end; padding-right: 24px;
  position: relative;
  padding-bottom: 30px;
}
#content .t4sp-gv-than.row::after {
  content: ""; position: absolute; left: 0; bottom: 0;
  width: 80px; height: 10px; background: #e6e6e6; border-radius: 4px;
}
#content .col.t4sp-gv-anh { flex: 0 0 165px; max-width: 165px; padding: 0; }
/* ⛔ Bo góc đặt trên KHUNG CẮT, không đặt trên '<img>': Figma khai lớp ảnh
   'bo_goc 0' và cho khung cha 'cat_tran' — bảng dày đọc đúng lớp ảnh nên đặt
   nhầm chỗ là lệch ở MỌI tấm (10 mốc riêng ảnh thu nhỏ nội dung khoá học). */
#content .t4sp-gv-hinh {
  width: 165px; height: 165px; border-radius: 8px; overflow: hidden;
}
/* Lớp ảnh Figma là **181×175** đặt lệch (−8, −5) trong khung cắt 165×165 —
   ảnh TRÀN khung. Ép ảnh về 165 là hai mốc 'w'/'h' báo lệch và khuôn hình
   khác hẳn bản vẽ. */
#content .t4sp-gv-hinh img {
  width: 181px; height: 175px; max-width: none; object-fit: cover;
  border-radius: 0; margin: -5px 0 0 -8px;
}
#content .col.t4sp-gv-chu {
  flex: 0 0 511px; max-width: 511px; margin-left: 32px;
}
#content .col.t4sp-gv-chu > .col-inner { padding-top: 8px; }
#content .t4sp-gv-ten h3 {
  font-family: var(--t4-font-body); font-weight: 600;
  font-size: 20px; line-height: 35px; color: #213343;
  margin: 0 0 4px; letter-spacing: 0; text-transform: none;
}
#content .t4sp-gv-mo p {
  margin: 0; font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 22px; color: #213343;
}

/* [figma] trang18 · section chungnhan/noidung — 2 lớp rộng 1920px: '1229:8114' · '1229:8160'
   (nhiều lớp cùng khổ nên KHÔNG ghim một node; mở spec trang 18 để chọn) */
/* 23.7 NỘI DUNG KHOÁ HỌC — nền GRADIENT tràn **1920** (con số thứ ba) */
#content .t4sp-nd-hang.row { padding: 48px 0 60px; }
#content .t4sp-nd::before {
  content: ""; position: absolute; z-index: 0; inset: 0;
  left: 50%; transform: translateX(-50%); width: 1920px; max-width: 100vw;
  /* Gradient THẬT của Figma: **#458763 → #155446** từ trên xuống (đọc 'fills'
     của lớp 'Background'). Đoán màu tối dần là sai hẳn hướng — chặng 3 báo
     ΔE 24,17. */
  background: linear-gradient(180deg, #458763 0%, #155446 100%);
}
#content .t4sp-nd .section-content { position: relative; z-index: 1; }
#content .t4sp-nd-hang.row { margin: 0; }
#content .t4sp-nd-td { margin-bottom: 32px; }
#content .t4sp-nd-td h2 {
  font-family: var(--t4-font-head); font-weight: 700;
  font-size: 32px; line-height: 35px; color: #fcfbf6; text-align: center;
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .box.t4sp-nd-muc {
  display: flex; align-items: flex-start; height: 70px; margin: 0 0 24px;
  padding-right: 8px; border-radius: 3px;
}
#content .box.t4sp-nd-muc:last-of-type { margin-bottom: 0; }
#content .box.t4sp-nd-muc .box-image { flex: 0 0 70px; width: 70px; }
#content .box.t4sp-nd-muc .box-image { border-radius: 3px; overflow: hidden; }
#content .box.t4sp-nd-muc .box-image img {
  width: 70px; height: 70px; object-fit: cover; border-radius: 0;
}
#content .box.t4sp-nd-muc .box-text {
  flex: 1 1 auto; padding: 12.8px 0 0; margin-left: 12px; min-width: 0;
  position: relative;
}
/* Khe tên → hàng nhãn nhỏ là **6** (Figma: tên kết thúc 146,8 · nhãn ở
   152,8), không phải 4 — đo trên trang thấy nhãn cao hơn bản vẽ 1,88px. */
#content .t4sp-nd-ten h3 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 14px; line-height: 19.124px; color: #fff;
  margin: 0 0 5.88px; letter-spacing: 0; text-transform: none;
}
#content .t4sp-nd-nho p {
  display: flex; align-items: center; gap: 8px; margin: 0;
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 19.124px; color: #fff;
}
/* [phục vụ] phần tử: khối "Xem thêm/Thu gọn" của thẻ khoá học (ux_html →
   details/summary, nấc 4 — Text không có thẻ details) | [trang]
   san-pham-so-detail | [figma] node 1229:8164 nhóm (781:6741 'Xem thêm' ·
   781:6769 'Thu gọn' · 781:6751 giảng viên · 781:6755 mô tả · 781:6794 CTA)
   [lý do vượt panel] cần gập/mở JS-free, panel Text không hỗ trợ
   22/08/2026: site để 'Xem thêm' TRƠ (không phải điều khiển) và THIẾU HẲN
   nội dung mở rộng (giảng viên/mô tả/CTA) — vá theo kiem-tuong-tac.js */
/* "Xem thêm" nằm ở MÉP PHẢI hàng (Figma x=925,44 trong khung 1056). */
#content summary.t4sp-nd-xem {
  position: absolute; right: 5.71px; top: 25.2px; width: 122.56px;
  text-align: right; cursor: pointer; list-style: none;
}
#content summary.t4sp-nd-xem::-webkit-details-marker { display: none; }
#content summary.t4sp-nd-xem::marker { content: ""; }
#content .t4sp-nd-xem span {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 14px; line-height: 19.124px; color: #fff;
}
#content .t4sp-nd-xem .t4sp-nd-xem-mo { display: none; }
#content details.t4sp-nd-mo[open] .t4sp-nd-xem-dong { display: none; }
#content details.t4sp-nd-mo[open] .t4sp-nd-xem-mo { display: inline; }
/* Khung 70px của thẻ (III.14.5/XIV) CHỈ đúng khi đang ĐÓNG — mở ra thì thẻ
   phải cao thêm để chứa khối giảng viên/mô tả/CTA, không thì tràn đè lên
   thẻ kế tiếp đúng kiểu lỗi đã trả giá ở #17 (BAI-HOC-PHEP-DO §XIV). */
#content .box.t4sp-nd-muc:has(details.t4sp-nd-mo[open]) { height: auto; }
#content .t4sp-nd-more {
  margin-top: 12px; padding-right: 130px; box-sizing: border-box;
}
#content .t4sp-nd-gv {
  margin: 0 0 8px; font-family: var(--t4-font-body); font-weight: 700;
  font-size: 14px; line-height: 19.124px; color: #fff;
}
#content .t4sp-nd-mota {
  margin: 0 0 12px; font-family: var(--t4-font-body); font-weight: 400;
  font-size: 14px; line-height: 19.124px; color: #fff;
}
/* Bọc <a> trong <p class="t4sp-nd-cta-o"> NGAY TỪ NGUỒN, đừng để <a> đứng
   trơ trọi giữa hai <p> khác — wpautop tự chèn <p> quanh nó và ĐÓNG SAI chỗ
   (đã bắt được: `<p><a>…</a></div>` không có `</p>`), khiến DOM lệch khỏi
   cấu trúc dự tính (đo bằng Playwright ngày 22/08/2026). */
#content .t4sp-nd-cta-o { margin: 0; }
#content .t4sp-nd-cta {
  display: inline-flex; align-items: center; justify-content: center;
  width: 163px; height: 32px; box-sizing: border-box; border-radius: 3px;
  background: var(--t4-leaf); font-family: var(--t4-font-body);
  font-weight: 700; font-size: 12px; line-height: 24px; color: #fff;
  text-decoration: none;
}
#content .t4sp-nd-cta:hover { color: #fff; opacity: .9; }

/* 23.8 CÁC KHOÁ HỌC KHÁC — CỐ Ý tràn ngang (4×402 + 3×24 = 1680 > 1056) */
#content .t4sp-kh-td-hang.row { padding-top: 48px; }
#content .t4sp-kh-td-hang.row { margin: 0 0 32px; }
#content .t4sp-kh-td h2 {
  font-family: var(--t4-font-head); font-weight: 700;
  font-size: 32px; line-height: 35px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
/* Ẩn thanh cuộn: 'overflow-x: auto' làm trình duyệt chiếm thêm **15px** chiều
   cao cho thanh cuộn, Figma không có (khối đo 543 thay vì 528). Vẫn vuốt/cuộn
   được bằng chuột và cảm ứng. */
#content .t4sp-kh-hang.row {
  margin: 0 0 48px; flex-wrap: nowrap; overflow-x: auto; padding-bottom: 16px;
  scrollbar-width: none;
}
#content .t4sp-kh-hang.row::-webkit-scrollbar { display: none; }
/* Nền + viền đặt trên '.col' (khung 'Background+Border+Shadow' 402 của Figma)
   chứ không trên '.col-inner': bảng dày tìm '[hộp]' của một lớp chữ bằng cách
   trèo lên tổ tiên có nền ĐẦU TIÊN, đặt sai tầng là sáu mốc 'nen' báo lệch. */
#content .col.t4sp-kh-cot {
  flex: 0 0 402px; max-width: 402px;
  background: #fff; border: 1px solid #cccccc; border-radius: 8px;
  box-shadow: 0 1px 4px rgba(0, 0, 0, .06);
}
/* 'Link' 400×347 của Figma là hộp trong cùng bao quanh chữ thẻ — KHÔNG có
   nền. Nền nằm ở khung 402×349 bên ngoài ('.col'). Đặt đúng hai tầng thì tám
   mốc 'nen' và 'h' tự khớp. */
#content .col.t4sp-kh-cot > .col-inner { height: 347px; border-radius: 8px; }
#content .col.t4sp-kh-cot + .col.t4sp-kh-cot { margin-left: 24px; }
#content .t4sp-kh-anh {
  margin-bottom: 16px; border-radius: 8px 8px 0 0; overflow: hidden;
}
#content .t4sp-kh-anh img {
  width: 100%; height: 225px; object-fit: cover; border-radius: 0;
}
#content .t4sp-kh-ten { padding: 0 16px; height: 36px; margin-bottom: 8px; }
#content .t4sp-kh-ten h3 {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 16px; line-height: 30px; color: #213343;
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .t4sp-kh-nho { padding: 0 16px; margin-bottom: 8px; line-height: 0; }
#content .t4sp-kh-nho p {
  display: flex; align-items: center; margin: 0;
  font-family: var(--t4-font-body); font-weight: 400;
  font-size: 12px; line-height: 16px; color: #666;
}
/* Kẻ DỌC 1×17,59 màu #8a8a8a giữa hai nhãn nhỏ */
#content .t4sp-kh-loai { padding-right: 8px; border-right: 1px solid #8a8a8a; }
#content .t4sp-kh-gio { padding-left: 8px; }
#content .t4sp-kh-nhan { padding: 0 16px; line-height: 0; }
#content .t4sp-kh-nhan p {
  margin: 0; padding: 0 8px; background: #016de1;
  display: inline-flex; align-items: center; justify-content: center;
  height: 20px; min-width: 44px; box-sizing: border-box; border-radius: 10px;
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 10px; line-height: 13.66px; color: #fff;
}
/* ⛔ Thẻ 1 nền **#016de1** chữ trắng; ba thẻ sau nền **#f0f0f0** chữ
   **#458763** — Figma tô khác nhau, không phải một kiểu lặp lại. */
#content .t4sp-kh-cot:not(:first-child) .t4sp-kh-nhan p {
  background: #f0f0f0; color: var(--t4-leaf);
}

/* 23.9 CTA — thẻ trắng 1078,98×289 trên nền #efe8da tràn 1900
   [figma] section CTA — desktop '1229:8257' · mobile '1386:27492'
          (node lấy từ bản đồ đo: tools/truy-node-be-rong.py --lop t4sp-cta)
                                                                       */
/* ⚠ Đặt đệm lên '.section-content' chứ không lên '[section]': shortcode khai
   'padding="0px"' nên Flatsome sinh style NỘI TUYẾN cho phần đệm dưới, và
   luật một lớp không thắng nổi — đo ra 371 thay vì 449 mà thẻ trắng thì đã
   đúng 289,3px. */
#content .t4sp-cta { background: #efe8da; }
#content .t4sp-cta-hang.row { padding: 80px 0; }
#content .t4sp-cta > .section-content > .row {
  width: 1078.98px; max-width: 1078.98px; margin-left: auto; margin-right: auto;
}
#content .t4sp-cta-hang.row { margin: 0; }
/* ⛔⛔ ĐỆM CỦA CỘT PHẢI ĐẶT TRÊN '.col-inner', KHÔNG PHẢI TRÊN '.col'.
   Flatsome khai '.row-collapse > .col { padding: 0 !important }' — '!important'
   nên luật có '#content' cũng thua. Đây là chỗ đã nuốt mất 80px đệm của thẻ
   CTA (đo ra 211,3 thay vì 291,3) và 7px của cột ảnh chứng nhận. Xem
   qa/quyet-dinh.md mục 24/08/2026. */
/* Đệm ngang **39** chứ không 40: viền 1px nằm TRONG 1078,98 của Figma nên
   chỗ cho chữ phải đúng 998,98 (mốc 'w' của hai lớp chữ CTA). */
#content .col.t4sp-cta-cot > .col-inner {
  padding: 39px 39px; background: #fff; border-radius: 10px;
  border: 1px solid rgba(0, 0, 0, .11);
}
#content .t4sp-cta-td { margin-bottom: 17px; }
#content .t4sp-cta-td h2 {
  font-family: var(--t4-font-head); font-weight: 600;
  font-size: 40px; line-height: 53.32px; color: var(--t4-dark-moss);
  margin: 0; letter-spacing: 0; text-transform: none;
}
#content .t4sp-cta-mo { margin-bottom: 41px; }
#content .t4sp-cta-mo p {
  margin: 0; font-family: var(--t4-font-body); font-weight: 400;
  font-size: 16px; line-height: 26px; color: var(--t4-text);
}
#content a.button.t4sp-cta-nut {
  display: flex; align-items: center; justify-content: center;
  width: 248px; height: 46px; min-height: 46px; margin: 0 0 0 auto;
  background: var(--t4-leaf); border: 0; border-radius: 5px;
}
#content a.button.t4sp-cta-nut span {
  font-family: var(--t4-font-body); font-weight: 700;
  font-size: 16px; line-height: 21.856px; color: #fff;
  letter-spacing: 0; text-transform: none;
}

/* ── Khổ ≤849: xem §4 bản kê ─────────────────────────────────────────────── */
@media (max-width: 849px) {
  #content .t4sp-hero > .section-content > .row,
  #content .t4sp-cn > .section-content > .row,
  #content .t4sp-gv > .section-content > .row,
  #content .t4sp-kh > .section-content > .row,
  #content .t4sp-cta > .section-content > .row {
    width: 352px; max-width: 352px;
  }
  #content .t4sp-nd > .section-content > .row { width: 372px; max-width: 372px; }

  /* Thẻ form XUỐNG DƯỚI, cao 730 (không phải 800) và rộng 352 */
  #content .col.t4sp-the-cot {
    position: static; top: auto; width: 100%; max-width: 100%; margin-top: 64px;
  }
  /* Ô nhập rộng **350** trong thẻ **352** ⇒ đệm ngang đúng 1px. */
  /* ⛔ Đệm trên là **81**, y hệt desktop — KHÔNG phải 40. Figma khổ 402: thẻ
     form ở y=542, tiêu đề "Đăng ký học ngay" ở y=623 ⇒ 623−542 = 81. Đặt 40
     làm TOÀN BỘ ruột thẻ nhích lên 38,6px: bốn ô nhập, nút "Học ngay" (đo
     được y=1052 thay vì 1091) và dòng ghi chú đều lệch theo.
     ⚠ Bảng dày KHÔNG bắt được vì đúng mốc bắc qua chỗ này —
     'Lorem ipsum → Đăng ký học ngay' — đang bị MIỄN TRỪ. Miễn trừ ấy dẫn lại
     điều tra của cửa sổ C cho #15/#16 và nói "thẻ form đặt tuyệt đối đúng
     x=572 y=16"; câu đó đúng cho THẺ và cho DESKTOP, nhưng nó che mất một lỗi
     nằm BÊN TRONG thẻ ở khổ 402. Miễn trừ mượn từ trang khác phải kiểm lại
     trên chính bản dựng của mình trước khi nhận. */
  #content .t4sp-form { height: 730px; padding: 81px 1px 0; }
  /* Khổ 402: bốn ô xếp DỌC, mỗi ô rộng 350 (Figma 'Frame 27' 350 trong thẻ
     352) — không còn hàng đôi. */
  #content .t4sp-form .t4sp-o { width: 100%; }
  #content .t4sp-form .t4sp-o-doi { display: block; }
  #content .t4sp-form .t4sp-o-doi .t4sp-o { width: 100%; }
  #content .col.t4sp-dau-trai { flex: 0 0 100%; max-width: 100%; }
  #content .t4sp-hero::before { height: 1342px; width: 402px; }

  /* H1 đổi chỗ ngắt dòng (III.15.2) */
  #content .t4sp-h1 { display: none; }
  #content .t4sp-h1-mb { display: block; }

  /* Phần trống thừa dưới Section 1 KHÁC nhau giữa hai khổ: desktop 37px
     (nội dung tới 397 trong khung 450), khổ 402 **54px** (tới 1288 trong
     khung 1342). Cộng khe 24 sang Section 2 ⇒ 77 và 92. */
  #content .t4sp-dau.row { margin-bottom: 92px; }

  #content .t4sp-ds1-td, #content .t4sp-ds2-td,
  #content .t4sp-ds1-muc, #content .t4sp-ds2-muc { width: 328px; }
  /* ⛔ KHỔ 402 CỐ Ý KHÁC BẢN VẼ — quyết định 25/08/2026, xem qa/quyet-dinh.md.
     Figma khai các dòng này rộng 419–448px trong khung chỉ **402**, và chính
     ảnh Figma xuất ra cũng rộng 520px ⇒ bản thiết kế TỰ MÂU THUẪN ở khổ này.
     Dựng đúng bản vẽ thì 10/11 dòng tràn 27–83px ra ngoài mép phải; đo được
     'scrollWidth' vẫn đúng 402 và KHÔNG tổ tiên nào cắt, tức chữ mất hẳn chứ
     không cuộn tới được. Trên iPhone là mất 1–3 chữ cuối của mười gạch đầu dòng.
     ⇒ Cho chữ xuống dòng theo bề rộng thật. Đánh đổi đã đo, không phải đoán:
     khối cao thêm và mọi mốc dọc phía dưới lệch khỏi bản vẽ — đã miễn trừ kèm
     bằng chứng. Giữ đúng bản vẽ mà mất chữ là đánh đổi tệ hơn. */
  #content .t4sp-ds1-chu, #content .t4sp-ds2-chu {
    display: block; width: auto; max-width: 100%; white-space: normal;
  }
  #content .t4sp-ds1-muc, #content .t4sp-ds2-muc { height: auto; min-height: 24px; }
  /* ⛔ Dấu đầu dòng '.t4sp-ds1-dau' là span RỖNG rộng 0,125px (Figma khai lớp
     chữ 'Text' w=0,13 — dựng đúng thì T1 mới đủ 174/174 lớp). Ở khổ 402 hộp
     'p' chỉ còn 316 mà '.t4sp-ds1-chu' là inline-block rộng 419–448, KHÔNG lọt
     cạnh dấu ⇒ nó rơi xuống DÒNG DƯỚI, và span rỗng chiếm trọn dòng trên.
     Hậu quả: chữ nhìn thấy tụt 22px so với Figma, hộp cao gấp đôi và các mục
     ĐÈ LÊN NHAU — chặng 4 bắt được, bảng dày thì không, vì nó đo MÉP HỘP chứ
     không đo mực, mà mọi mục cùng tụt 22 nên khoảng cách vẫn khớp.
     Desktop KHÔNG dính: hộp 504 rộng hơn cả dấu lẫn chữ 419 nên chúng chung
     một dòng — vì vậy chỉ chữa trong khổ 402, đừng đưa lên luật chung. */
  #content .t4sp-ds1-muc p, #content .t4sp-ds2-muc p {
    display: flex; align-items: flex-start;
  }
  #content .t4sp-ds1-chu, #content .t4sp-ds2-chu { flex: 0 0 auto; }

/* [figma] trang18 · section chungnhan_mb — 2 lớp rộng 402px: '1398:15302' · '1398:15304'
   (nhiều lớp cùng khổ nên KHÔNG ghim một node; mở spec trang 18 để chọn) */
  /* Chứng nhận xếp DỌC, nền phủ cả khối */
  #content .t4sp-cn-hang.row { padding: 0; }
  /* Khổ 402 KHÔNG có tấm kem 1080 (Figma chỉ có 'Background' camel 402);
     để '::after' chạy là nó phủ kín dải camel. */
  #content .t4sp-cn::before { top: 0; height: 584px; width: 402px; }
  #content .t4sp-cn::after { display: none; }
  #content .col.t4sp-cn-anh,
  #content .col.t4sp-cn-chu {
    flex: 0 0 100%; max-width: 100%; margin-left: 0;
  }
  #content .col.t4sp-cn-anh > .col-inner { padding: 48px 0 0; }
  /* Thẻ trắng cao **304**; 311 là chiều cao CỘT (304 + đệm dưới 7). */
  /* Khổ 402 giữ **16**: Figma đòi khe 52,5 ở đây (desktop 41), và mốc đo là
     'dy(tâm)' chứ không phải 'dy' — tâm hộp không dịch cùng lượng với mực khi
     đổi phông, nên bù 2,6 của desktop áp sang đây là lệch ngược −2,81. */
  #content .t4sp-cn-td { margin-bottom: 16px; }
  #content .t4sp-cn-ten { width: 300px; height: 304px; margin: 0 auto; padding-top: 16.26px; }
  #content .t4sp-cn-noi { top: 121px; left: 60px; }
  #content .col.t4sp-cn-anh > .col-inner::before,
  #content .col.t4sp-cn-anh > .col-inner::after { left: 60px; }
  #content .col.t4sp-cn-anh > .col-inner::before { top: 127px; }
  #content .col.t4sp-cn-anh > .col-inner::after  { top: 303px; }
  /* ⚠ Phải đặt 'flex-basis', không phải 'width': cột nằm trong '.row' là
     flex item nên 'flex: 0 0 100%' (=352) thắng 'width: 402px'. Hậu quả kín
     đáo: bảng trắng rộng 302 thay vì 352, dòng đầu xuống 3 hàng thay vì 2, và
     khối cao thêm 24px — nhìn trang không thấy gì bất thường. */
  /* ⚠ Khe 47, KHÔNG phải 40. Figma: thẻ chứng nhận hết ở y=352, khối 'Margin'
     bắt đầu ở y=399 ⇒ 399−352 = **47**. Đặt 40 làm section chỉ cao 576,6 thay
     vì 584, và vì bảng dày đo 'dy(tâm)' nên TÂM section dịch lên 3,7px — mốc
     "Chứng nhận" báo lệch +3,69 dù chữ nằm ĐÚNG chỗ (đo thật: tâm chữ 84,24
     site vs 84,26 Figma). Suýt "chữa" bằng cách đẩy 'padding-top' của thẻ
     trắng xuống 3,7px: mốc xanh mà chữ sai vị trí. */
  #content .col.t4sp-cn-chu {
    flex: 0 0 402px; max-width: 402px; margin-top: 47px; margin-left: -25px;
  }
  #content .col.t4sp-cn-chu > .col-inner { padding: 20px 25px; background: #fff; }

  /* Giảng viên: ảnh LÊN TRÊN, khe 32 */
  #content .t4sp-gv-than.row { justify-content: flex-start; }
  #content .col.t4sp-gv-anh,
  #content .col.t4sp-gv-chu {
    flex: 0 0 100%; max-width: 100%; margin-left: 0;
  }
  #content .col.t4sp-gv-chu { margin-top: 32px; }
  #content .col.t4sp-gv-chu > .col-inner { padding-top: 0; }

/* [figma] trang18 · section noidung_mb — section DUY NHẤT chứa đủ
   bộ bề rộng của cụm này: 90px→'I1398:14939;1397:14161' (+9) · 180px→'I1398:14939;1397:14151' (+24)
   (khớp theo TẬP bề rộng, chắc hơn khớp từng số: 528 đứng một
   mình ra hàng trăm ứng viên, '528 và 506 cùng một section'
   thì gần như duy nhất) */
  /* Khoá học khác: hết cuộn ngang, bốn thẻ xếp DỌC bước 389 */
  #content .t4sp-nd-hang.row { padding: 60px 0; }
  /* Khổ 402: cột chữ của hàng nội dung rộng CỐ ĐỊNH **180** (Figma x=97…277)
     nên tiêu đề xuống 2 dòng; để nó co giãn thì chữ rộng 199…240 và bốn mốc
     'chu_w' sai. "Xem thêm" nằm ở x=289 rộng 90, cao +25,5 so với mép hàng. */
  /* ⚠ Cột chữ hết co giãn thì hàng còn 55px trống mỗi bên và Flatsome canh
     GIỮA — ảnh dạt vào x=66 thay vì 15. Phải ghim 'flex-start'. */
  /* ⛔ 'justify-content: flex-start' KHÔNG đủ. Flatsome đặt 'margin: auto' cho
     '.box-image', mà LỀ AUTO nuốt hết chỗ trống TRƯỚC khi 'justify-content'
     được xét — nên ảnh vẫn bị đẩy vào giữa (đo được 'margin-left: 51px', đúng
     một nửa chỗ trống 102). Hậu quả dây chuyền: ảnh 15→66, cột chữ 97→199,
     và "Xem thêm" bị đẩy ra x=390 tức NGOÀI màn hình 402 — mất hẳn khỏi trang
     mà bảng dày không thấy, vì 'bo_toa_do' chỉ so KHOẢNG CÁCH giữa các mốc
     liền nhau nên một cú dịch ngang đều tay là vô hình với nó. */
  #content .box.t4sp-nd-muc { justify-content: flex-start; }
  #content .box.t4sp-nd-muc .box-image { margin-left: 0; margin-right: 0; }
  #content .box.t4sp-nd-muc .box-text {
    flex: 0 0 180px; width: 180px; padding-top: 2.8px;
  }
  /* "Xem thêm" khổ 402 căn TRÁI (Figma chữ bắt đầu đúng x=289), khác desktop. */
  /* Chữ "Xem thêm" TRÀN khỏi khung 90 của Figma (chữ rộng 77,1 mà mốc đòi
     bắt đầu ở x=310, tức kết thúc 387 > mép khung 379). Căn PHẢI và bỏ lề để
     mép phải chữ trùng 387. */
  /* ⚠ Neo theo '.box-text' (rộng 180) chứ không theo hàng, nên 'right: 0' đặt
     cụm chữ ở 187 thay vì 297 — lệch 101px, mười một mốc. Dùng 'left' tính
     thẳng: chữ phải bắt đầu ở x=310, chữ rộng 77,1 trong khung 90 căn phải
     ⇒ khung ở 297,1, tức +200,1 so với mép '.box-text' (97). */
  /* ⚠ Bản trước tính bằng bề rộng chữ **77,1** — đó là số của DESKTOP. Khổ 402
     Figma khai w=**69**, nên 310+69 = 379, vừa khít mép khung, KHÔNG tràn.
     Cái cớ để căn phải biến mất ⇒ căn TRÁI và đặt thẳng x=310:
     310 − 97 (mép '.box-text') = **213**. Căn trái thì vị trí chữ không phụ
     thuộc bề rộng mực thật, tức miễn nhiễm với chênh lệch "bề rộng Figma khai
     ≠ bề rộng mực Manrope" đã ghi ở qa/phan-hoi-figma.md mục 35. */
  #content .t4sp-nd-xem {
    left: 213px; right: auto; top: 25.5px; width: 90px; text-align: left;
  }
  #content .t4sp-kh-hang.row { flex-wrap: wrap; overflow-x: visible; padding-bottom: 0; }
  /* Bước 389 = thẻ 349 + đệm dưới 16 (khung 'Margin' của Figma) + khe 24 */
  #content .col.t4sp-kh-cot { flex: 0 0 100%; max-width: 100%; margin-bottom: 16px; }
  #content .col.t4sp-kh-cot + .col.t4sp-kh-cot { margin: 24px 0 16px; }
  #content .t4sp-kh-anh img { height: 225px; }

  /* Khổ 402 KHÔNG có thanh xám đáy khối giảng viên (Figma 402×515 = 48 + 25
     + 16 + 390 + 36, không còn 'Container 1080×10'). */
  #content .t4sp-gv-than.row { padding-bottom: 0; }
  #content .t4sp-gv-than.row::after { display: none; }

  /* CTA khổ 402: đệm 60, thẻ 352×426 đệm 40, H2 tụt xuống **32/42,656** */
  #content .t4sp-cta-hang.row { padding: 60px 0; }
  #content .t4sp-cta > .section-content > .row { width: 352px; max-width: 352px; }
  #content .t4sp-cta-td h2 { font-size: 32px; line-height: 42.656px; }
  /* ⛔ 'margin: 0' GIẾT 'margin-left: auto' của luật gốc ⇒ nút dạt sang TRÁI.
     Figma căn PHẢI ở CẢ HAI khổ: khổ 402 cột chữ 65…337, 'Link' x=89 w=248
     ⇒ mép phải 337, trùng mép phải cột. Đo được nút ở 65…313, lệch 24px.
     Bảng dày mù chỗ này (dịch ngang đều), chặng 3 cũng không đủ ngưỡng khối
     đỏ — chỉ ảnh nhiệt chặng 3b nhìn ra chữ nút bị nhân đôi lệch nhau. */
  #content a.button.t4sp-cta-nut { margin: 0 0 0 auto; }
}

/* ══════════════════════════════════════════════════════════════════════════
   24. TRANG #17 'template' — Figma 1015:14277 · 800:26078 · 801:30337 ·
       801:30347. ⛔ CHỈ CÓ KHUNG DESKTOP (xem qa/phan-hoi-figma.md mục 38).
   ──────────────────────────────────────────────────────────────────────────
   Bản kê: 'uxb/ban-ke-template.md'. Khối 'kho' có 2.468 lớp — nặng nhất dự án.
   Khổ ≤849 dựng theo SUY LUẬN vì Figma không vẽ, chờ 4T chốt.
   ══════════════════════════════════════════════════════════════════════════ */

/* 24.1 HERO — ảnh nền + phủ đen 25%, mọi thứ CĂN GIỮA
   [figma] section hero '800:26078'; khung trong 1260 là Container
   '800:26086' (1260×139). Chỉ có bản Desktop trong bản đồ đo.          */
#content .t4tp-hero .section-bg-overlay { background: rgba(0, 0, 0, .25); }
#content .t4tp-hero > .section-content > .row { width: 1260px; max-width: 1260px; }
/* Flatsome canh GIỮA DỌC nội dung của section có chiều cao cố định — bài học
   chặng 3b của #19. Ở đây Figma đặt đệm trên 28 rồi khối chữ ở y=135,5. */
#content .t4tp-hero { align-items: flex-start; }
/* Đệm phải đặt trên '.col-inner': '.row-collapse > .col { padding: 0
   !important }' của Flatsome ăn mất đệm đặt trên '.col' (bài học mục 23). */
#content .col.t4tp-hero-cot { text-align: center; }
#content .col.t4tp-hero-cot > .col-inner { padding-top: 135.5px; }
/* Hero của BA trang danh mục mới (ebook · tool · website-theme): không có lời
   dẫn, vì viết một câu tương đương cho ba danh mục kia là bịa nội dung (D6).
   ⚠ Figma KHÔNG vẽ ba trang này — đệm trên ở đây là SUY RA để hai khối còn lại
   (H1 + ô tìm kiếm) nằm giữa dải 450, chứ không phải đo từ bản vẽ.
   Số: 450 − (53,32 H1 + 2 khe + 40 ô tìm) = 354,68 ⇒ chia đôi 177,34.
   Ghi ở qa/phan-hoi-figma.md §56. */
#content .t4tp-hero--gon .col.t4tp-hero-cot > .col-inner { padding-top: 177.34px; }
#content .t4tp-h1 h1 { margin: 0; letter-spacing: 0; text-transform: none; }
#content .t4tp-h1 { margin-bottom: 2px; }
#content .t4tp-lede { width: 696px; margin: 0 auto 32px; }
#content .t4tp-lede p { margin: 0; }
/* [phục vụ] phần tử: [ux_html] mẫu 't4*-form' (danh mục vĩnh viễn III.3b)
   | khối: ô tìm kiếm hero | [trang] template | [figma] node 800:26112 'Searchbox'
   [lý do vượt panel] Flatsome không có phần tử Search dựng được ô 768x40 bo
   tròn hoàn toàn với icon đặt trong lòng ô.

   ⚠ ĐỔI 21/08/2026 — TỪ MÔ HÌNH TĨNH SANG TÌM KIẾM THẬT (4T chốt).
   Lý do miễn trừ cũ ('không có plugin form nào') KHÔNG áp cho ô này: tìm
   kiếm là chức năng LÕI của WordPress, không cần plugin. Form nay GET về
   '/' với tham số 's' — đường dẫn tương đối nên không cắm cứng tên miền.

   Số đo Figma (node 800:26112 và các con):
     ô        768 x 40 · nền #ffffff · viền 1px #8a8a8a · bo 999999 (viên nhộng)
     chữ mờ   x=593 tức đệm trái 17 · Manrope 16/26 #666666
     icon     16 x 16 tại x=1312 — mép phải ô 1344 ⇒ cách mép 16 · màu #666666
              ⇒ đệm phải 15 vì viền 1px cộng vào: 1 + 15 = 16

   ⛔ Viền TRƯỚC ĐÂY khai #cccccc là SAI so với bản vẽ (#8a8a8a) — sửa cùng lần
   này. Bo 20px trên ô cao 40 cho ra đúng viên nhộng, giữ nguyên. */
#content .t4tp-form {
  display: flex; align-items: center; width: 768px; height: 40px;
  margin: 0 auto; padding: 0 15px 0 17px; box-sizing: border-box;
  background: #fff; border: 1px solid #8a8a8a; border-radius: 4px;
}
/* Trung hoà mặc định trình duyệt: input và button phải KHÔNG thêm một pixel
   nào vào hộp, nếu không cả hàng hero trôi và 3386 phép đo đổ theo. */
#content .t4tp-form .t4tp-form-o {
  flex: 1 1 auto; min-width: 0; height: 100%;
  margin: 0; padding: 0; border: 0; background: none; box-shadow: none;
  -webkit-appearance: none; appearance: none;
  font: inherit; color: #141414;
}
#content .t4tp-form .t4tp-form-o::placeholder { color: #666666; opacity: 1; }
#content .t4tp-form .t4tp-form-o::-webkit-search-cancel-button { display: none; }
#content .t4tp-form .t4tp-form-nut {
  flex: 0 0 16px; display: flex; align-items: center; justify-content: center;
  width: 16px; height: 16px;
  margin: 0; padding: 0; border: 0; background: none; box-shadow: none;
  -webkit-appearance: none; appearance: none;
  color: #666666; cursor: pointer; line-height: 0;
  position: relative;
}
/* Vùng chạm: icon chỉ 16px ngang — dưới mức tối thiểu 24px của WCAG 2.2
   (2.5.8), tức khó bấm trúng bằng ngón tay. Nới bằng lớp phủ TRONG SUỐT tràn
   ra ngoài, KHÔNG nới hộp nút: nới hộp là icon xê dịch khỏi mốc Figma
   (x=1312, cách mép phải ô đúng 16). Vùng bấm thật thành 28×46,8. */
#content .t4tp-form .t4tp-form-nut::before {
  content: ""; position: absolute; top: -4px; right: -6px; bottom: -4px; left: -6px;
}
#content .t4tp-form .t4tp-form-icon { display: block; width: 16px; height: 16px; }
/* Nhãn chỉ dành cho trình đọc màn hình — Figma không vẽ nhãn nhìn thấy được. */
#content .t4tp-form .t4tp-form-nhan {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* 24.2 HÀNG LỌC — bốn chip căn giữa trong dải 1900×56 */
#content .t4tp-loc-hang.row { width: 100%; max-width: none; margin: 0; }
#content .t4tp-loc-hang > .col > .col-inner {
  display: flex; justify-content: center; align-items: center; height: 56px;
}
#content .t4tp-chip p { display: flex; align-items: center; height: 35px; margin: 0; padding: 8px 24px; box-sizing: border-box; border-radius: 8px; }
/* [phục vụ] phần tử: [ux_text] | khối: 4 chip dải phân loại
   | [trang] template, ebook, tool, website-theme | [figma] node 801:30337
   ⚠ THÊM 21/08/2026 — bọc liên kết thật, đích là bốn trang danh mục
   (`/ebook/` `/template/` `/tool/` `/website-theme/`; ba trang sau tạo cùng
   ngày bằng tools/tao-trang-danh-muc.py).
   ⛔ Thẻ 'a' INLINE + phủ ':after' — cùng lý do đã ghi ở khối nút 'View
   Details': bọc thẻ cao hơn dải chữ là mốc đo đổi nghĩa (bài học XIII). */
#content .t4tp-chip p { position: relative; }
#content .t4tp-chip p > a { color: inherit; text-decoration: none; }
#content .t4tp-chip p > a:hover { color: inherit; text-decoration: none; }
#content .t4tp-chip p > a::after { content: ""; position: absolute; inset: 0; }
/* ⛔ Nền xanh bám TRẠNG THÁI ('t4tp-chip-hd' = đang xem), KHÔNG bám chỉ số chip.
   Bám chỉ số thì trang /tool/ tô xanh chip «Ebook» trong khi chữ trắng lại nằm
   ở chip «Tool» — hai nửa của một trạng thái rơi vào hai chip khác nhau.
   Trên /template/ chip 1 vẫn là chip mang lớp này, nên bản dựng KHÔNG đổi một
   pixel nào so với bản vẽ. */
#content .t4tp-chip-hd p { background: var(--t4-leaf); border-radius: 4px; }
/* Chỉ chip 3 "Tool" có đệm ngang 16; chip 4 vẫn 24 như hai chip đầu
   (Figma: chữ ở 958 và 1027, hộp ở 942 và 1003). */
#content .t4tp-chip-3 p { padding: 8px 16px; }

/* 24.3 KHO — bộ lọc 296 + kết quả 952, nền kem tràn 1900 */
#content .t4tp-kho { background: #fcfbf6; }
/* Dải lọc nền **TRẮNG**, không phải kem — ảnh nhiệt bắt ΔE 2,94 (#ffffff ↔
   #fcfbf6); không khai nền là nó ăn theo nền trang. */
#content .t4tp-loc { background: #ffffff; }
#content .t4tp-kho-hang.row {
  width: 1312px; max-width: 1312px; margin: 0 auto; padding: 80px 0;
}
/* Figma bọc mỗi cột trong một khung có ĐỆM NGANG 16: 328 = 296+32 và
   984 = 952+32, cộng lại đúng 1.312. Bỏ hai lớp đệm đó là cả hai cột lệch
   trái 16px và mọi mốc ngang của thẻ sai theo. */
#content .col.t4tp-boloc { flex: 0 0 328px; max-width: 328px; }
#content .col.t4tp-boloc > .col-inner { padding: 0 16px; }
#content .col.t4tp-kq { flex: 0 0 984px; max-width: 984px; }
#content .col.t4tp-kq > .col-inner { padding: 0 16px; }

/* Bộ lọc — tám nhóm, mỗi nhóm là một KHUNG CAO CỐ ĐỊNH có cuộn: nhóm đầu có
   16 mục × 18px = 288 trong khung 232 (Figma khai vậy, không phải tự giãn). */
/* ⚠ ':is(h2, h3)' CÓ DẤU CÁCH — tiêu đề nhóm bộ lọc đổi h3 → h2 để hết
   nhảy cấp h1 → h3 (C4, 20/08). Viết dính liền '.t4tp-bl-td:is(...)' là bộ
   chọn HỢP, khớp rỗng và mất sạch kiểu — bài học commit 5cf1a81. */
#content .t4tp-bl-td :is(h2, h3) { margin: 0; letter-spacing: 0; text-transform: none; }
/* Mỗi nhóm lọc thụt vào **20px** so với mép cột (Figma: 'Fieldset' ở x=310,
   chữ tiêu đề ở x=330), rồi mục con thụt thêm 24,1 (x=354,1). */
/* ⚠ ĐÃ THỬ và ĐÃ LÙI: tụt tiêu đề nhóm 2,1px (dời đệm dưới sang đệm trên) để
   chữa mười mốc "tiêu đề nhóm ↔ mục nhóm trước". Khokq tốt lên nhưng kholoc
   xấu đi 14 → 19, vì mốc trong CÙNG nhóm (tiêu đề ↔ mục đầu) đang khớp sẵn. */
/* Tiêu đề nhóm nằm CAO hơn canh mặc định **2,2px**. Dời bằng 'position:
   relative' chứ không bằng lề: lề sẽ kéo cả danh sách bên dưới đi theo, mà
   danh sách đang khớp sẵn (mục đầu đo 124,98 ↔ Figma 125). */
#content .t4tp-bl-td { padding: 0 0 8px 20px; position: relative; top: -2.2px; }
#content .t4tp-bl-ds { margin-bottom: 16px; overflow-y: auto; scrollbar-width: none; }
#content .t4tp-bl-ds::-webkit-scrollbar { display: none; }
#content .t4tp-bl-ds p { margin: 0; }
/* Bước mỗi mục lọc là **32** (Figma y=1191 · 1223 · 1255…), trong khi hộp
   dòng của chữ chỉ 17,5 hoặc 22 tuỳ mục ⇒ phải cho hộp cao 32 và canh giữa,
   không để dòng chảy tự quyết (đo ra bước 22, lệch 10px × 104 mục).
   Kiểu chữ do lớp 't4tp-k*' sinh tự động đặt — ĐỪNG khai lại ở đây. */
/* +4,74 đệm trên = dời tâm mực xuống 2,37: Figma đặt chữ ở y=116 trong ô bắt
   đầu 107 (tâm 125), canh giữa thuần chỉ cho tâm 122,63. Thụt trái do lớp
   't4tp-x*' sinh tự động đặt, không khai ở đây. */
#content .t4tp-bl-muc {
  display: flex; align-items: center; height: 32px; box-sizing: border-box;
  padding-top: 4.74px;
  padding-top: 4.74px; position: relative;
}
/* Ô TÍCH của từng mục lọc — 'Background+Border' **16,09×16,09** ở x=36,8
   (chữ ở 60,09). Nó là VECTOR nên bảng dày mù: khối này đo 0 lỗi cả trước lẫn
   sau khi thêm. Chỉ chặng 3b nhìn ra.

   ⚠ ĐỔI 21/08/2026 — TỪ ':before' GIẢ SANG '<input>' THẬT (4T chốt).
   Hình dạng, kích thước và vị trí giữ Y HỆT bản ':before' cũ, nên không mốc
   đo nào đổi; thứ đổi là nay nó bấm được, dùng bàn phím được, và trình đọc
   màn hình đọc được.

   ⛔⛔ 'position: absolute' LÀ BẮT BUỘC, không phải lựa chọn thẩm mỹ.
   '.t4tp-bl-muc' là hàng flex và chữ là con trực tiếp của nó. Để input theo
   dòng thì nó thành một mục flex, chiếm chỗ và đẩy chữ sang phải — 104 mục
   lệch cùng một lúc. Tuyệt đối hoá thì input ra khỏi dòng, chữ y nguyên. */
#content .t4tp-bl-o {
  position: absolute; left: 20.8px; top: 50%;
  transform: translateY(-50%); width: 16.09px; height: 16.09px;
  margin: 0; padding: 0; box-sizing: border-box; background: #fff;
  border: 1px solid #8a8a8a; border-radius: 4px;
  -webkit-appearance: none; appearance: none;
  cursor: pointer; flex: none;
}
/* ⛔ 'margin: 0' LÀ BẮT BUỘC, không phải dọn dẹp cho đẹp.
   Mục lọc trước đây là '<span>' (không lề), nay là '<label>' — mà theme đặt
   lề dưới mặc định cho 'label'. Đo thật sau lần đổi đầu: chiều cao nội dung
   của 8 khung cuộn phồng thêm 5..201px tuỳ số mục (nhóm 3 có 37 mục: 1184 →
   1385), làm ba nhóm 4·5·6 sinh thanh cuộn mà bản vẽ không có. */
#content .t4tp-bl-muc { cursor: pointer; margin: 0; }
/* Trạng thái ĐÃ CHỌN — Figma KHÔNG vẽ trạng thái này (bản vẽ chỉ có ô rỗng).
   Suy ra theo tông màu của trang: nền camel như mọi điểm nhấn khác, dấu tích
   trắng vẽ bằng ':after' để không cần thêm ảnh. Ghi ở qa/phan-hoi-figma.md §55.
   ⛔ Điều khiển mà bấm vào không đổi gì thì người dùng tưởng trang hỏng — nên
   đây là chỗ CỐ Ý đi xa bản vẽ, không phải quên đối chiếu. */
#content .t4tp-bl-o:checked { background: var(--t4-camel); border-color: var(--t4-camel); }
#content .t4tp-bl-o:checked::after {
  content: ""; position: absolute; left: 4.7px; top: 1.6px;
  width: 4.4px; height: 8.6px; box-sizing: border-box;
  border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg);
}
#content .t4tp-bl-o:focus-visible { outline: 2px solid var(--t4-leaf); outline-offset: 2px; }
/* Nhóm "Rating": ô tích đổi thành NÚT TRÒN, và có năm ngôi sao 16×16 xếp từ
   x=60,09 bước 16 — sao đầy #cf9156, sao rỗng #cccccc, số sao đầy KHÁC nhau
   từng dòng (4 · 3 · 2 · 1). Tô bằng dải màu rồi cắt theo chữ. */
#content .t4tp-bl-ds-6 .t4tp-bl-o { border-radius: 50%; }
/* Nút tròn đã chọn: chấm đặc giữa ô, không phải dấu tích. */
#content .t4tp-bl-ds-6 .t4tp-bl-o:checked::after {
  left: 50%; top: 50%; width: 6.4px; height: 6.4px;
  border: 0; border-radius: 50%; background: #fff;
  transform: translate(-50%, -50%);
}
#content .t4tp-bl-ds-6 .t4tp-bl-muc:not(:first-child)::after {
  content: "★★★★★"; position: absolute; left: 44.1px; top: 50%;
  transform: translateY(-50%);
  font-size: 15px; line-height: 16px; letter-spacing: 1.2px;
  background: linear-gradient(90deg, var(--t4-camel) var(--t4tp-sao),
                              #cccccc var(--t4tp-sao));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
#content .t4tp-bl-ds-6 .t4tp-bl-muc:nth-child(2)::after { --t4tp-sao: 80%; }
#content .t4tp-bl-ds-6 .t4tp-bl-muc:nth-child(3)::after { --t4tp-sao: 60%; }
#content .t4tp-bl-ds-6 .t4tp-bl-muc:nth-child(4)::after { --t4tp-sao: 40%; }
#content .t4tp-bl-ds-6 .t4tp-bl-muc:nth-child(5)::after { --t4tp-sao: 20%; }
#content .t4tp-bl-ds-1, #content .t4tp-bl-ds-2,
#content .t4tp-bl-ds-3, #content .t4tp-bl-ds-8 { height: 205px; }
#content .t4tp-bl-ds-4 { height: 97px; }
#content .t4tp-bl-ds-5 { height: 141px; }
#content .t4tp-bl-ds-6 { height: 173px; }
#content .t4tp-bl-ds-7 { height: 37px; }

/* Cột kết quả */
#content .t4tp-kq-td h2 { margin: 0; letter-spacing: 0; text-transform: none; }
#content .t4tp-kq-td { padding-top: 8px; margin-bottom: 16px; }
#content .t4tp-kq-mo p { margin: 0; }
#content .t4tp-kq-mo { margin-bottom: 16px; }
/* Hàng "1-10 trong số 120 kết quả · Sort by" cao **88** trong Figma (y=180…
   268) chứ không ôm theo chữ: số đếm ở +39, cụm sắp xếp ở +58,5. Để nó ôm
   chữ là cả dải thẻ nhích lên 46px và MỌI mốc phía dưới lệch theo. */
#content .t4tp-kq-hang {
  height: 88px; box-sizing: border-box; margin-bottom: 19.5px; padding-top: 39px;
}
#content .t4tp-kq-hang p {
  display: flex; align-items: flex-start; margin: 0;
  font-family: var(--t4-font-body);
}
#content .t4tp-kq-sxnhan, #content .t4tp-kq-sx { margin-top: 19.5px; }
/* Khe giữa "Sort by:" và ô chọn là **7,53** (Figma: chữ kết thúc 1452,6, ô
   bắt đầu 1460,13), không phải 21 — ô chọn dán mép phải cột 952. */
#content .t4tp-kq-sxnhan { margin-right: 7.53px; }
#content .t4tp-kq-so { flex: 1 1 auto; }
#content .t4tp-kq-sxnhan { margin-right: 7.53px; }

/* 24.4 Thẻ kết quả — BA cột trong khung 950 (đệm 15/16/16/16)
   Chiều cao thay đổi theo tiêu đề 1 hay 2 dòng (246 · 285 · 279…) — đừng khoá. */
#content .box.t4tp-the {
  display: flex; align-items: flex-start; margin: 0 0 16px;
  padding: 15px 16px 16px; background: #fff;
  border: 1px solid #cccccc; border-radius: 8px;
}
#content .box.t4tp-the .box-image { flex: 0 0 275px; width: 275px; }
/* Figma khai chế độ lấp khung là **STRETCH** (kéo giãn lấp đầy), không phải
   'cover' (cắt bớt). Dùng 'cover' là bốn thẻ có tỉ lệ ảnh lệch nhất bị cắt
   khác hẳn bản vẽ — ảnh nhiệt hiện nguyên bốn khối 267×199. */
#content .box.t4tp-the .box-image img {
  width: 266.66px; height: 200px; object-fit: fill; border-radius: 4px;
}
/* ⛔ Lưới phải đặt trên '.box-text-inner', KHÔNG phải '.box-text':
   '[ux_image_box]' của Flatsome còn bọc thêm MỘT tầng '.box-text-inner', nên
   lưới đặt ở ngoài chỉ có đúng một ô con và mọi 'grid-area' bên trong vô hiệu
   — thẻ cao 838 thay vì 248, cả khối 'kho' phồng lên 8.646 so với 3.281.
   Cùng họ với bẫy '.col' ↔ '.col-inner' ở mục 23. */
#content .box.t4tp-the .box-text {
  flex: 1 1 auto; padding: 0; margin: 0; min-width: 0;
}
/* Cả TÁM khối của thẻ đều neo vào MÉP TRÊN cột và lấy mốc từ Figma (khối
   sinh tự động ở cuối tệp), nên lưới chỉ còn hai ô: trái và phải. */
/* ⛔ 'align-content: start' là BẮT BUỘC: khối này có chiều cao CỐ ĐỊNH theo
   Figma, mà mặc định của lưới là 'stretch' — bốn hàng giãn ra lấp đầy và đẩy
   danh sách gạch đầu dòng xuống. Thẻ càng ít gạch càng lệch nhiều: thẻ 4 gạch
   lệch 6,5px, thẻ 3 gạch 10px, thẻ 2 gạch **22px**. */
#content .box.t4tp-the .box-text-inner {
  display: grid; grid-template-columns: 388.31px 252.69px;
  grid-template-areas: "tt gia" "tg gia" "nhan gia" "ds gia";
  align-content: start;
}
#content .t4tp-the-tt { grid-area: tt; padding: 0 24px; }
/* ⚠ SỐ DÒNG của tiêu đề thẻ do FIGMA quyết (lớp cao 35 = một dòng, 70 = hai),
   không để trình duyệt tự ngắt: Figma xếp vừa "Xây Dựng Thương Hiệu Từ Con Số
   0" trong 340,31px còn Chrome cần **341,42px** — lệch 1,12px (0,33 %) là đủ
   để xuống dòng và thẻ cao 279 thay vì 248. Bốn thẻ khai một dòng thì ghim
   một dòng; thẻ khai hai dòng để chảy tự nhiên. */
/* ⛔ KHOÁ TRONG 'min-width: 850px'. Lý do ghim một dòng ở trên chỉ đúng cho
   DESKTOP, nơi thẻ rộng 340. Ở khổ 402 thẻ chỉ còn **288** mà tiêu đề cần
   **341,4** ⇒ để 'nowrap' là chữ bị CẮT ở mép thẻ, đo được trên trang thật.
   #17 không có khung 402 trong Figma (phan-hoi-figma mục 38) nên cho ngắt dòng
   không lệch bản vẽ nào — không có bản vẽ để lệch.
   ⚠ Đây là lần thứ HAI cùng một cái bẫy trong một phiên (lần đầu ở hai danh
   sách của #18): 'nowrap' đặt để chữa một khổ thì phải hỏi ngay nó làm gì ở
   khổ kia. Và nó ĐI QUA được mọi phép đo tràn, vì chữ bị cắt bên trong hộp
   chứ không tràn khỏi khung nhìn. */
@media (min-width: 850px) {
  #content .t4tp-tt-1d h3 { white-space: nowrap; }
}
#content .t4tp-the-tt h3 { margin: 0; letter-spacing: 0; text-transform: none; }
#content .t4tp-the-tg { grid-area: tg; padding: 3.5px 24px 2.5px; }
#content .t4tp-the-tg p { margin: 0; }
#content .t4tp-the-nhan { grid-area: nhan; padding: 8px 24px; }
#content .t4tp-the-nhan p { display: inline-flex; align-items: center; justify-content: center; height: 20px; min-width: 50px; margin: 0; padding: 0 8px; background: var(--t4-leaf); border-radius: 10px; }
/* +3,66 đệm trên: đo tâm mực gạch đầu dòng thẻ 3 được 1006,84 trong khi
   Figma là 1010,5 — cả bốn gạch cùng lệch một khoảng. */
/* +4,11 đệm trên: sau khi có 'align-content: start', đo được cả bốn gạch đầu
   dòng cao hơn Figma đúng một khoảng — mười bốn mốc "gạch cuối thẻ N → tiêu đề
   thẻ N+1" đều lệch +4,11. (Thử nudge này TRƯỚC khi có 'align-content' thì
   phản tác dụng, vì lúc đó hàng lưới còn giãn.) */
#content .t4tp-the-ds { grid-area: ds; padding: 4.11px 24px 20px 40px; }
#content .t4tp-the-ds p { margin: 0; }
/* ⛔ Dấu đầu dòng phải CAO 0: nó là lớp chữ rỗng của Figma, nhưng ở site nó
   là một phần tử 'inline-block' đứng trước một phần tử 'block' ⇒ tự chiếm MỘT
   hộp dòng riêng. Bốn gạch là thừa 4×24 = 96px mỗi thẻ, mười thẻ là ~1.000px. */
#content .t4tp-the-dau {
  display: block; width: .1px; height: 0; overflow: hidden;
}
/* CHẤM ĐẦU DÒNG: Figma vẽ nó ở **x=336,5** trong khi chữ bắt đầu ở 349 — đo
   trên ảnh xuất ra, vì lớp 'Text' đánh dấu chỉ rộng 0,13 nên KHÔNG có lớp nào
   trong spec nói rằng có chấm. Bảng dày mù hoàn toàn (khối này 0 lỗi cả trước
   lẫn sau khi thêm chấm); chỉ chặng 3b nhìn ra. Vẽ bằng '::before' đặt tuyệt
   đối để chữ giữ nguyên x=349 — thêm chấm mà không mốc nào xê dịch. */
#content .t4tp-the-muc { display: block; height: 24px; padding-top: 4.5px; box-sizing: border-box; position: relative; }
#content .t4tp-the-muc::before { content: "•"; position: absolute; left: -14px; top: 4.5px; line-height: 16px; color: #141414; }
/* Cột phải: giá · điểm · lượt cài · hai nút — gộp trong một ô lưới */
#content .t4tp-the-gia, #content .t4tp-the-diem,
#content .t4tp-the-cai, #content .t4tp-the-nut { grid-area: gia; }
#content .t4tp-the-gia { align-self: start; }
#content .t4tp-the-gia p { margin: 0; }
#content .t4tp-the-diem { align-self: start; }
/* Khe điểm ↔ số đánh giá là **9,1** (suy từ mốc 'dx(giữa)' của Figma). */
#content .t4tp-the-diem p { display: flex; align-items: center; justify-content: flex-end; gap: 9.1px; margin: 0; }
#content .t4tp-the-cai { align-self: start; }
#content .t4tp-the-cai p { margin: 0; }
#content .t4tp-the-nut { align-self: start; }
/* Hàng nút KHÔNG dán sát mép phải cột: Figma cho nút Preview kết thúc ở
   1568,32 trong cột 1319,31…1572 — hụt **3,68px**. */
#content .t4tp-the-nut p { display: flex; justify-content: flex-end; margin: 0; padding-right: 3.68px; }
/* ⚠ PHẢI ĐỌC 'alpha' CỦA VIỀN, không chỉ đọc mã màu. Nút 'View Details' khai
   'strokes: [{hex: #141414, alpha: 0.0}]' — tức viền VÔ HÌNH; vẽ nó ra là thấy
   ngay một khung đen mà bản vẽ không có. Chỉ nút 'Preview' có viền thật
   (#8a8a8a, alpha 1). */
#content .t4tp-the-nut-1 { display: flex; align-items: center; justify-content: center; width: 133px; height: 41px; box-sizing: border-box; background: var(--t4-leaf); border-radius: 4px; }
/* 'border-radius' là thứ làm bảng dày nhận ra đây là một HỘP: thiếu nó thì
   '[hộp] Preview' trèo lên tận thẻ và báo 952×279 thay vì 104×41 (25 mốc). */
#content .t4tp-the-nut-2 { display: flex; align-items: center; justify-content: center; width: 104px; height: 41px; margin-left: 12px; box-sizing: border-box; border: 1px solid #8a8a8a; border-radius: 4px; }

/* [phục vụ] phần tử: [ux_text] | khối: nút 'View Details' của 10 thẻ kết quả
   | [trang] template | [figma] node 801:31854 và chín thẻ cùng dạng
   [lý do vượt panel] nút nằm trong lớp chữ của thẻ, không phải phần tử Button,
   nên panel không với tới.

   ⚠ THÊM 21/08/2026 — bọc liên kết thật quanh chữ (4T chốt dựng tương tác).
   Đích '/san-pham-so-detail/' là trang chi tiết sản phẩm số DUY NHẤT đang có;
   mười thẻ vì vậy cùng trỏ về đó, đúng lối III.10-3 quy định cho trường hợp
   'chưa có trang đích thật thì link về trang trụ gần nhất và ghi TODO'.
   TODO nằm ở qa/phan-hoi-figma.md §54.

   ⛔⛔ THẺ 'a' PHẢI GIỮ NGUYÊN DẠNG INLINE, ÔM SÁT CHỮ — đừng cho nó cao 41px.
   Đã trả giá 21/08/2026: bản đầu đặt 'display:flex; height:100%' cho 'a' và
   nhận ĐÚNG 10 mốc đỏ 'View Details → [hộp] Preview (dọc)' lệch +11,00px,
   một mốc trên mỗi thẻ. Bộ đo lấy hộp của PHẦN TỬ BỌC chữ: không có 'a' thì
   nó đo dải chữ (cao ~19), có 'a' cao 41 thì nó đo cái 41 ⇒ tâm dời 11px.
   Bản thân nút không hề xê dịch — chỉ MỐC ĐO đổi nghĩa.

   ⇒ Cách giữ được cả hai: 'a' để inline (mốc đo không đổi), rồi phủ một lớp
   ':after' tuyệt đối lấp trọn hộp 133x41 để cả nút vẫn bấm được — vùng chạm
   đầy đủ mà không đụng một phép đo nào. */
#content .t4tp-the-nut-1 { position: relative; }
#content .t4tp-the-nut-1 > a { color: inherit; text-decoration: none; }
#content .t4tp-the-nut-1 > a:hover { color: inherit; text-decoration: none; }
#content .t4tp-the-nut-1 > a::after { content: ""; position: absolute; inset: 0; }

/* 24.5 Phân trang — Prev + 11 số + Next, dựng bằng [ux_text] (§4 bản kê) */
/* Phân trang: Figma đặt ở +113,5 sau gạch cuối, và lệch TRÁI 4,53 so với
   tâm cột — không dán đúng giữa. */
#content .t4tp-trang { margin-top: 29px; }
#content .t4tp-trang p { display: flex; align-items: center; justify-content: center; gap: 18px; height: 28px; margin: 0; }

/* ── Khổ ≤849 — ⛔ SUY LUẬN, Figma không vẽ (mục 38) ─────────────────────── */
@media (max-width: 849px) {
  #content .t4tp-hero > .section-content > .row,
  #content .t4tp-kho-hang.row { width: 354px; max-width: 354px; }
  #content .col.t4tp-hero-cot { padding-top: 96px; }
  #content .t4tp-lede { width: 100%; }
  #content .t4tp-form { width: 100%; }
  #content .t4tp-loc-hang > .col > .col-inner {
    height: auto; flex-wrap: wrap; gap: 8px; padding: 10.5px 0;
  }
  #content .t4tp-kho-hang.row { padding: 40px 0; }
  #content .col.t4tp-boloc, #content .col.t4tp-kq {
    flex: 0 0 100%; max-width: 100%; margin-right: 0;
  }
  #content .col.t4tp-boloc { margin-bottom: 32px; }
  /* Thẻ: ảnh lên trên, hai cột chữ gộp làm một */
  #content .box.t4tp-the { display: block; }
  #content .box.t4tp-the .box-image { width: 100%; }
  #content .box.t4tp-the .box-image img { width: 100%; }
  #content .box.t4tp-the .box-text { margin-top: 16px; }
  #content .box.t4tp-the .box-text-inner { display: block; }
  #content .t4tp-the-tt, #content .t4tp-the-tg,
  #content .t4tp-the-nhan, #content .t4tp-the-ds { padding-left: 0; padding-right: 0; }
  #content .t4tp-the-ds { padding-left: 16px; }
  #content .t4tp-the-gia, #content .t4tp-the-diem,
  #content .t4tp-the-cai, #content .t4tp-the-nut { padding-top: 0; }
  #content .t4tp-the-diem p, #content .t4tp-the-nut p { justify-content: flex-start; }
  #content .t4tp-trang p { flex-wrap: wrap; height: auto; gap: 10px; }
}

/* === SINH-TRANG17-BAT-DAU === */
/* ⚙ SINH TỰ ĐỘNG bởi tools/sinh-uxb-template.py — ĐỪNG SỬA TAY.
   Mỗi lớp là một CHỮ KÝ kiểu chữ có thật trong Figma (III.14: đọc
   số từng lớp, không suy một kiểu cho cả nhóm). Chạy lại bộ sinh
   là khối này được viết lại. */
#content .t4tp-k1, #content .t4tp-k1 > * { font-family: var(--t4-font-head); font-weight: 600; font-size: 40px; line-height: 53.32px; color: #fcfbf6; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k2, #content .t4tp-k2 > * { font-family: var(--t4-font-body); font-weight: 400; font-size: 16px; line-height: 26px; color: #ffffff; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k3, #content .t4tp-k3 > * { font-family: var(--t4-font-body); font-weight: 400; font-size: 16px; line-height: 26px; color: #666666; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k4, #content .t4tp-k4 > * { font-family: var(--t4-font-body); font-weight: 700; font-size: 14px; line-height: 19.124px; color: #ffffff; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k5, #content .t4tp-k5 > * { font-family: var(--t4-font-body); font-weight: 700; font-size: 14px; line-height: 19.124px; color: #cf9156; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k6, #content .t4tp-k6 > * { font-family: var(--t4-font-body); font-weight: 700; font-size: 14px; line-height: 19.124px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k7, #content .t4tp-k7 > * { font-family: var(--t4-font-body); font-weight: 400; font-size: 14px; line-height: 22px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k8, #content .t4tp-k8 > * { font-family: 'Lexend Deca', sans-serif; font-weight: 300; font-size: 14px; line-height: 17.5px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k9, #content .t4tp-k9 > * { font-family: 'Lexend Deca', sans-serif; font-weight: 300; font-size: 12px; line-height: 14px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k10, #content .t4tp-k10 > * { font-family: var(--t4-font-head); font-weight: 700; font-size: 32px; line-height: 35px; color: #155446; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k11, #content .t4tp-k11 > * { font-family: 'Lexend Deca', sans-serif; font-weight: 300; font-size: 16px; line-height: 24px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k12, #content .t4tp-k12 > * { font-family: var(--t4-font-body); font-weight: 400; font-size: 16px; line-height: 26px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k13, #content .t4tp-k13 > * { font-family: var(--t4-font-body); font-weight: 800; font-size: 20px; line-height: 35px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k14, #content .t4tp-k14 > * { font-family: 'Lexend Deca', sans-serif; font-weight: 300; font-size: 12px; line-height: 18px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k15, #content .t4tp-k15 > * { font-family: var(--t4-font-body); font-weight: 800; font-size: 10px; line-height: 13.66px; color: #ffffff; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k16, #content .t4tp-k16 > * { font-family: 'Lexend Deca', sans-serif; font-weight: 300; font-size: 14px; line-height: 24px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k17, #content .t4tp-k17 > * { font-family: var(--t4-font-body); font-weight: 400; font-size: 12px; line-height: 16.392px; color: #141414; text-align: left; letter-spacing: 0; text-transform: none; }
#content .t4tp-k18, #content .t4tp-k18 > * { font-family: var(--t4-font-body); font-weight: 800; font-size: 20px; line-height: 35px; color: #141414; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k19, #content .t4tp-k19 > * { font-family: var(--t4-font-body); font-weight: 400; font-size: 12px; line-height: 16.392px; color: #666666; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k20, #content .t4tp-k20 > * { font-family: 'Lexend Deca', sans-serif; font-weight: 300; font-size: 12px; line-height: 18px; color: #141414; text-align: right; letter-spacing: 0; text-transform: none; }
#content .t4tp-k21, #content .t4tp-k21 > * { font-family: var(--t4-font-body); font-weight: 700; font-size: 14px; line-height: 19.124px; color: #ffffff; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k22, #content .t4tp-k22 > * { font-family: var(--t4-font-body); font-weight: 700; font-size: 14px; line-height: 19.124px; color: #141414; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k23, #content .t4tp-k23 > * { font-family: var(--t4-font-body); font-weight: 400; font-size: 12px; line-height: 16.392px; color: #141414; text-align: right; letter-spacing: 0; text-transform: none; }
#content .t4tp-k24, #content .t4tp-k24 > * { font-family: var(--t4-font-body); font-weight: 800; font-size: 12px; line-height: 16.392px; color: #8a8a8a; text-align: center; letter-spacing: 0; text-transform: none; }
#content .t4tp-k25, #content .t4tp-k25 > * { font-family: var(--t4-font-body); font-weight: 800; font-size: 12px; line-height: 16.392px; color: #141414; text-align: center; letter-spacing: 0; text-transform: none; }
/* Thụt lề + bước dọc mục lọc — lấy thẳng toạ độ Figma. */
#content .t4tp-x1 { padding-left: 44.09px; }
#content .t4tp-x2 { height: 26px; position: relative; top: 3.75px; }
#content .t4tp-x2 { padding-left: 20px; }
#content .t4tp-x3 { padding-left: 136.09px; }
/* Mốc dọc CẢ HAI cột của mỗi thẻ — Figma đặt tay và GIỐNG NHAU
   giữa các thẻ bất kể số gạch đầu dòng (thẻ 3 có 4 gạch, thẻ 6 có
   2, cả hai đều: tiêu đề +19 · tác giả +92,5 · nhãn +123,5 · danh
   sách +147). Để dòng chảy tự xếp là mỗi thẻ lệch một kiểu. */
#content .t4tp-the-1 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-1 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-1 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-1 .t4tp-the-nut { padding-top: 138.13px; }
#content .t4tp-the-2 .t4tp-the-gia { padding-top: 29.82px; }
#content .t4tp-the-2 .t4tp-the-diem { padding-top: 76.75px; }
#content .t4tp-the-2 .t4tp-the-cai { padding-top: 111.69px; }
#content .t4tp-the-2 .t4tp-the-nut { padding-top: 138.13px; }
#content .t4tp-the-3 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-3 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-3 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-3 .t4tp-the-nut { padding-top: 136.13px; }
#content .t4tp-the-4 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-4 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-4 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-4 .t4tp-the-nut { padding-top: 136.13px; }
#content .t4tp-the-5 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-5 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-5 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-5 .t4tp-the-nut { padding-top: 136.13px; }
#content .t4tp-the-6 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-6 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-6 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-6 .t4tp-the-nut { padding-top: 136.13px; }
#content .t4tp-the-7 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-7 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-7 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-7 .t4tp-the-nut { padding-top: 136.13px; }
#content .t4tp-the-8 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-8 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-8 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-8 .t4tp-the-nut { padding-top: 136.13px; }
#content .t4tp-the-9 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-9 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-9 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-9 .t4tp-the-nut { padding-top: 136.13px; }
#content .t4tp-the-10 .t4tp-the-gia { padding-top: 27.82px; }
#content .t4tp-the-10 .t4tp-the-diem { padding-top: 74.75px; }
#content .t4tp-the-10 .t4tp-the-cai { padding-top: 109.69px; }
#content .t4tp-the-10 .t4tp-the-nut { padding-top: 136.13px; }
/* Cột chữ VÀ cả thẻ đều cao CỐ ĐỊNH theo Figma — chú thích trên.
   Dùng `height` chứ không `min-height`: thẻ 2 khai cột 251 trong khi
   nội dung của chính nó cần 270 — Figma cho tràn, và bản dựng phải
   tràn y hệt thì chiều cao mới khớp. `overflow: visible` để chữ vẫn
   hiện đủ, không cắt mất nội dung thật. */
#content .t4tp-the-1 .box-text-inner { height: 212px; overflow: visible; }
#content .box.t4tp-the-1 { min-height: 248px; box-sizing: border-box; }
#content .t4tp-the-2 .box-text-inner { height: 251px; overflow: visible; }
#content .box.t4tp-the-2 { min-height: 287px; box-sizing: border-box; }
#content .t4tp-the-3 .box-text-inner { height: 245px; overflow: visible; }
#content .box.t4tp-the-3 { min-height: 281px; box-sizing: border-box; }
#content .t4tp-the-4 .box-text-inner { height: 245px; overflow: visible; }
#content .box.t4tp-the-4 { min-height: 281px; box-sizing: border-box; }
#content .t4tp-the-5 .box-text-inner { height: 245px; overflow: visible; }
#content .box.t4tp-the-5 { min-height: 281px; box-sizing: border-box; }
#content .t4tp-the-6 .box-text-inner { height: 245px; overflow: visible; }
#content .box.t4tp-the-6 { min-height: 281px; box-sizing: border-box; }
#content .t4tp-the-7 .box-text-inner { height: 245px; overflow: visible; }
#content .box.t4tp-the-7 { min-height: 281px; box-sizing: border-box; }
#content .t4tp-the-8 .box-text-inner { height: 245px; overflow: visible; }
#content .box.t4tp-the-8 { min-height: 281px; box-sizing: border-box; }
#content .t4tp-the-9 .box-text-inner { height: 210px; overflow: visible; }
#content .box.t4tp-the-9 { min-height: 246px; box-sizing: border-box; }
#content .t4tp-the-10 .box-text-inner { height: 210px; overflow: visible; }
#content .box.t4tp-the-10 { min-height: 246px; box-sizing: border-box; }

/* ⛔⛔ GỠ KHOÁ CHIỀU CAO Ở KHỔ NHỎ — vá 22/08/2026, lỗi CÓ SẴN từ lúc dựng.

   Hai mươi luật ngay trên khoá chiều cao thẻ theo Figma và **không nằm trong
   `@media` nào**, nên chúng áp cả ở khổ 402. Ở desktop thì đúng: ba cột nằm
   cạnh nhau nên nội dung vừa trong 212–251px. Ở mobile thì `.box-text-inner`
   chuyển sang xếp DỌC, nội dung thật cao **711px** trong cái khung khai 212px,
   mà `overflow: visible` nên **499px tràn ra ngoài thẻ**.

   Hậu quả thật, đã chụp ảnh làm bằng: mỗi thẻ trên điện thoại **mất hẳn giá,
   điểm đánh giá, lượt cài và CẢ HAI NÚT** — chúng rơi xuống vùng của thẻ kế
   tiếp và bị thẻ đó vẽ đè lên. Bấm «View Details» thì cú bấm trúng gạch đầu
   dòng của thẻ SAU.

   ⚠ Vì sao không bộ đo nào bắt được suốt từ đầu:
     · bảng dày và ảnh nhiệt chỉ chạy ở khổ 1900 (Figma không vẽ khung 402);
     · `kiem-vo.js` ở 402 báo `0 tràn · 0 đè` — nó dò tràn theo KHUNG NHÌN chứ
       không dò con tràn khỏi CHA, và hai khối chồng nhau ở đây không phải hai
       khối chữ nên phép dò đè cũng trượt;
     · lỗi chỉ lộ ra khi có người BẤM THẬT — `scripts/kiem-tuong-tac.js`.

   ⛔ Phải để SAU khối per-card ở trên: cùng độ đặc hiệu thì luật sau thắng. */
@media (max-width: 849px) {
  #content .box.t4tp-the .box-text-inner { height: auto; }
  #content .box.t4tp-the { min-height: 0; }

  /* ⛔ NỬA THỨ HAI CỦA CÙNG MỘT GỐC — và nó âm thầm hơn.
     Khối `@media (max-width: 849px)` phía trên (dòng ~2657) đã khai
     `.t4tp-the-gia, .t4tp-the-diem, .t4tp-the-cai, .t4tp-the-nut
      { padding-top: 0 }` — nhưng luật đó CHƯA BAO GIỜ có tác dụng.
     Bốn mươi luật theo TỪNG THẺ (`.t4tp-the-1 .t4tp-the-gia { padding-top:
     27.82px }` …) đặc hiệu hơn một bậc `(1,2,0) > (1,1,0)`, nên chúng thắng ở
     MỌI khổ màn, bất kể thứ tự.
     Hậu quả: ở 402 bốn khối này mang nguyên số đệm của bố cục BA CỘT desktop
     (27,82 · 74,75 · 109,69 · 136,13) nhưng lại xếp DỌC, tạo bốn khoảng trống
     lớn giữa giá · điểm · lượt cài · nút.
     ⇒ Phải khoá bằng bộ chọn đặc hiệu HƠN per-card: thêm `.box` là `(1,3,0)`. */
  #content .box.t4tp-the .t4tp-the-gia,
  #content .box.t4tp-the .t4tp-the-diem,
  #content .box.t4tp-the .t4tp-the-cai,
  #content .box.t4tp-the .t4tp-the-nut { padding-top: 0; }

  /* Giá và lượt cài căn PHẢI/GIỮA là để khớp cột phải của bố cục desktop.
     Xếp dọc ở mobile thì căn trái mới đọc được. */
  #content .box.t4tp-the .t4tp-the-gia,
  #content .box.t4tp-the .t4tp-the-gia > *,
  #content .box.t4tp-the .t4tp-the-cai,
  #content .box.t4tp-the .t4tp-the-cai > * { text-align: left; }
}
/* === SINH-TRANG17-KET-THUC === */

/* Ba cụm dưới đây cần KHUNG THẬT thì bảng dày mới nhận ra '[hộp]'; thiếu là
   nó trèo lên tận '[section]' và báo 1900×3280. Số đo lấy thẳng từ Figma. */

/* [figma] trang17 · section khokq — 2 lớp rộng 129.44px: '801:31840' · '801:31841'
   (nhiều lớp cùng khổ nên KHÔNG ghim một node; mở spec trang 17 để chọn) */
/* Ô sắp xếp — 'Container' 129,44×40 bo 4 */
#content .t4tp-kq-sx {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 129.44px; height: 40px; margin-top: 9.5px;
  border-radius: 4px; box-sizing: border-box;
}

/* [figma] trang17 · section khokq — 2 lớp rộng 65px: '801:32763' · '801:32764'
   (nhiều lớp cùng khổ nên KHÔNG ghim một node; mở spec trang 17 để chọn) */
/* Phân trang — Prev 65×28 · số 20…22×28 bước 34 · Next 66,01×28, tất cả bo 4;
   trang đang xem có nền #ebebeb. */
#content .t4tp-trang p { gap: 12px; padding-right: 9.06px; }
#content .t4tp-trang-o {
  display: inline-flex; align-items: center; justify-content: center;
  height: 28px; padding: 0 7px; border-radius: 4px; box-sizing: border-box;
}
#content .t4tp-trang-o:first-child { min-width: 65px; margin-right: -12px; }
#content .t4tp-trang-o:last-child { min-width: 66.01px; margin-left: -12px; }
#content .t4tp-trang-o:nth-child(2) { background: #ebebeb; }

/* Ô tìm kiếm của hero bo **20**, không phải 4 (Figma 'Container' 768×40). */
#content .t4tp-form { border-radius: 20px; }


/* ── Vá SAU khối sinh: ba chỗ Figma tự mâu thuẫn ────────────────────────────
   Khối trên sinh 'text-align' từ trường 'can_ngang' của lớp chữ. Với lớp
   HUG (khung ôm sát chữ) trường đó vô nghĩa và Figma khai lung tung: lớp giá
   khai 'CENTER' nhưng nằm ở x=1529 trong cột 1319,31…1572 — tức CĂN PHẢI.
   Tin theo 'can_ngang' là giá lệch trái ~105px và kéo theo mọi mốc ngang của
   thẻ. Ở đây tin TOẠ ĐỘ, đúng tinh thần III.14. */
#content .t4tp-the-gia, #content .t4tp-the-gia > * { text-align: right; }

/* Cùng lỗi ấy ở nhãn "Theme": lớp chữ khai 'CENTER' (nó căn giữa TRONG nhãn),
   nhưng cái nhãn thì nằm SÁT TRÁI cột. Tin theo 'can_ngang' là nhãn trôi ra
   giữa cột, lệch 144px — ba mốc mỗi thẻ, ba mươi mốc cả trang. */
#content .t4tp-the-nhan { text-align: left; }

/* Nút Preview có nền TRẮNG trong Figma (10 mốc 'nen'). */
#content .t4tp-the-nut-2 { background: #ffffff; }


/* [figma] trang18 · section hero/hero_mb — 2 lớp rộng 419px: '1229:8061' · '1386:27296'
   (nhiều lớp cùng khổ nên KHÔNG ghim một node; mở spec trang 18 để chọn) */
/* === SINH-TRANG18-BAT-DAU === */
#content .t4sp-ds1-muc-1 .t4sp-ds1-chu { display: inline-block; width: 419px; }
#content .t4sp-ds1-muc-2 .t4sp-ds1-chu { display: inline-block; width: 448px; }
#content .t4sp-ds1-muc-3 .t4sp-ds1-chu { display: inline-block; width: 443px; }
#content .t4sp-ds1-muc-4 .t4sp-ds1-chu { display: inline-block; width: 392px; }
#content .t4sp-ds1-muc-5 .t4sp-ds1-chu { display: inline-block; width: 392px; }
#content .t4sp-ds2-muc-1 .t4sp-ds2-chu { display: inline-block; width: 401px; }
#content .t4sp-ds2-muc-2 .t4sp-ds2-chu { display: inline-block; width: 413px; }
#content .t4sp-ds2-muc-3 .t4sp-ds2-chu { display: inline-block; width: 393px; }
#content .t4sp-ds2-muc-4 .t4sp-ds2-chu { display: inline-block; width: 416px; }
#content .t4sp-ds2-muc-5 .t4sp-ds2-chu { display: inline-block; width: 416px; }
#content .t4sp-ds2-muc-6 .t4sp-ds2-chu { display: inline-block; width: 343px; }
@media (min-width: 850px) {
  #content .t4sp-ds1-muc-1 .t4sp-ds1-chu { white-space: nowrap; }
  #content .t4sp-ds1-muc-2 .t4sp-ds1-chu { white-space: nowrap; }
  #content .t4sp-ds1-muc-3 .t4sp-ds1-chu { white-space: nowrap; }
  #content .t4sp-ds1-muc-4 .t4sp-ds1-chu { white-space: nowrap; }
  #content .t4sp-ds1-muc-5 .t4sp-ds1-chu { white-space: nowrap; }
}
/* === SINH-TRANG18-KET-THUC === */

/* --- 21.10 THẺ BÀI ĐỘNG — vì sao KHÔNG kẹp dòng bằng CSS ------------------
   20/08/2026. Ba thẻ "Các bài viết liên quan" của #19 nay kéo bài thật, tiêu đề
   bài dài hơn tiêu đề lorem Figma vẽ nên 'h3' xuống hai dòng ở khổ 1900.

   ⛔ Đã thử chữa bằng '-webkit-line-clamp' và PHẢI GỠ RA: bộ dò "chữ đè nhau"
   của chặng 4 đo **HỘP MỰC** ('Range.getBoundingClientRect()'), mà hộp mực phủ
   cả phần bị cắt — tiêu đề kẹp còn một dòng vẫn cho hộp mực hai dòng và đè lên
   đoạn mô tả **374×19px**. Trang nhìn vẫn đẹp, nhưng T4 đỏ và đỏ ĐÚNG: DOM có
   chữ tràn khỏi khung.

   → Cắt tiêu đề ở PHP ('wp_trim_words(..., 6, '')' trong 'functions.php'), hộp
   mực khi đó bằng hộp nhìn thấy. **6 chữ tự đúng cả hai khổ** — cột 400 cho một
   dòng, cột 354 cho hai dòng, khớp Figma h=25 / h=50. */

/* --- 21.11 DẢI "CHỦ ĐỀ 1·2·3" THÀNH TAB THẬT ------------------------------
   20/08/2026, 4T chốt: hai khối "Dự án Google Ads" và "Google Marketing" là
   **tab chủ đề, dưới tab là bài viết**.

   ⛔ Không dùng '[tabgroup]' (III.18 — xem chú thích ở 'initTabChuDe' trong
   main.js). Chip GIỮ NGUYÊN chỗ Figma vẽ, chỉ bọc thêm một '<a>' bên trong để
   bấm được; luật dưới đây bắt '<a>' kế thừa y hệt kiểu chữ của chip nên bảng
   dày không thấy gì khác. */
#content .t4-cd p > a,
#content .t4-cd p > a:hover,
#content .t4-cd p > a:focus {
  color: inherit; font: inherit; letter-spacing: inherit;
  text-decoration: none; border: 0; background: none;
}
/* [phục vụ] vùng chạm của chip "Chủ đề 1·2·3" (#19 blog · #20 du-an dùng
   chung) | [lý do vượt panel] chip không phải xê dịch (III.4.3-2 dòng trên) —
   nới vùng BẤM bằng ::after tuyệt đối, không đổi kích thước chữ nhìn thấy.
   22/08/2026: kiem-tuong-tac.js báo "vùng chạm 17,0" < 24px WCAG 2.2 · 2.5.8.
   Chữ cao 16,392 + 4px trên/dưới ⇒ 24,39, không đụng lề trái/phải (tránh
   chồng vùng bấm sang chip cạnh, cách nhau đúng 4px — margin-left ở trên). */
#content .t4-cd p > a { position: relative; display: inline-block; }
#content .t4-cd p > a::after {
  content: ""; position: absolute; inset: -4px 0;
}
/* ⛔ ĐỪNG tô đậm chip đang mở. Đã thử 'color: var(--t4-text)' (#1f1f1f) và
   bảng dày bắt ngay **2 mốc 'mau'**: Figma vẽ CẢ BA chip cùng một màu #777777,
   không có trạng thái "đang mở" nào. Người dùng biết tab nào đang mở qua nội
   dung bên dưới, đúng như bản thiết kế. */
#content .t4-cd-panel { display: none; }
#content .t4-cd-panel.active { display: block; }

