/*
 * CSS riêng của giao diện NutriCare.
 *
 * Tệp này đi vào child theme (`assets/design.css`) và nạp SAU `ub.css` nhờ khai
 * phụ thuộc `hdnt-ub` trong `functions.php` của child.
 *
 * ⚠️ MỌI luật ở đây phải bó trong một lớp `wmd-*` mà cây thiết kế tự gắn qua ô
 * "Lớp CSS thêm". Viết luật trần (`.ub-cat img{…}`) là đổi dáng MỌI dải danh
 * mục của site, kể cả những trang chủ site không dựng bằng giao diện này — mà
 * gỡ child ra thì lại đổi ngược về, hai lần thay đổi không ai yêu cầu.
 *
 * Cách dùng trong cây: `[ub_cats … css="wmd-cats-circle"]`.
 */

/* ---------------------------------------------------------------------------
   Dải danh mục ẢNH TRÒN

   Theme nền có bảy kiểu danh mục, không kiểu nào ra hàng ảnh tròn. Trước đây
   tôi định thêm kiểu thứ tám vào nền; nay để ở đây, vì:

     · nền không đổi một byte, gỡ child ra là hết;
     · giao diện sau muốn dáng khác thì viết CSS của nó, không ai phải chờ một
       bản phát hành theme nền;
     · và không có kiểu nào chỉ MỘT khách dùng mà nằm mãi trong gói của tất cả.

   ⚠️ KHÔNG làm được bằng ô "Bo góc ảnh" của khối: ô ấy nhận SỐ PIXEL (thanh
   trượt trần 40px) mà hình tròn cần đúng `50%` — một con số px cố định ra hình
   bo góc ở khổ này và gần-tròn ở khổ kia.
--------------------------------------------------------------------------- */

/* (0,2,1) — thắng `.ub-cat img` (0,1,1) của nền theo độ ưu tiên, và còn nạp sau
   nên không phụ thuộc thứ tự. Hai lớp bảo hiểm là cố ý: lớp thứ nhất giữ cho
   luật đúng kể cả khi ai đó đổi thứ tự nạp về sau. */
.wmd-cats-circle .ub-cat img {
  aspect-ratio: 1 / 1;
  border-radius: 50%
}

/* Bóng đổ chuyển sang chính tấm ảnh. Để trên thẻ thì `box-shadow` vẽ một hình
   CHỮ NHẬT mờ quanh ảnh tròn, cách ảnh đúng một khoảng bằng phần chữ bên dưới. */
.wmd-cats-circle .ub-cat {
  border-radius: 0;
  box-shadow: none
}
.wmd-cats-circle .ub-cat img { box-shadow: var(--ub-cshadow, none) }
.wmd-cats-circle .ub-cat:hover img { box-shadow: var(--ub-cshadow-h, var(--ub-cshadow, none)) }

/* Lớp phủ bó vào ĐÚNG tấm ảnh. `::after` gốc là `inset:0`, tức phủ cả phần tên
   bên dưới — ra một vệt màu chạy ngang qua chữ. */
.wmd-cats-circle .ub-cat::after {
  bottom: auto;
  height: auto;
  aspect-ratio: 1 / 1;
  border-radius: 50%
}

/* ⚠️ Danh mục CHƯA đặt ảnh đại diện: vẽ một vòng tròn trống giữ chỗ.
   `hdnt_ub_render_cats()` bỏ hẳn thẻ <img> khi không có ảnh, nên thiếu luật này
   thì cả dải chỉ còn mấy dòng chữ trôi giữa khoảng trắng — cao chưa tới 20px,
   đọc ra "dải hỏng" chứ không ra "chưa có ảnh". Mà site vừa cài nào cũng ở đúng
   trạng thái ấy. */
.wmd-cats-circle .ub-cat:not(:has(img))::before {
  content: "";
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: var(--band, #EAF5EC)
}

/* ---------------------------------------------------------------------------
   Nút trên BIỂN khuyến mãi đổi màu theo từng biển

   ⚠️ Khối Biển KHÔNG có ô "Màu nút" — nút luôn lấy màu nhấn của site, nên ba
   biển xanh/cam/xanh-dương đều ra nút xanh lá. Không thêm ô ấy vào theme nền vì
   một giao diện: gắn lớp qua ô "Lớp CSS thêm" rồi đổi biến ở đây.

   `--btn-bg` là biến mà `.ub-btn--primary` đọc — chính biến mà ô "Màu nút" của
   khối Nút đổ vào, nên không phải đè `background` và không đụng trạng thái rê
   chuột đã có.
--------------------------------------------------------------------------- */
/* ⚠️ Đổi `--accent`, KHÔNG phải `--btn-bg`.
   Đo trong trình duyệt: đặt `--btn-bg` thì biến có mặt đủ trên nút mà nền tính
   ra `rgba(0,0,0,0)` — vì `.ub-btn--primary` đọc `--accent`:
     background: linear-gradient(to right, var(--accent), …)
   `--btn-bg` là biến của ô "Màu nút" ở khối NÚT, khối Biển không đi đường ấy.
   Đây đúng lớp lỗi "đặt tên lớp CSS không phải là viết CSS": biến nghe hợp lệ,
   có mặt trên phần tử, và không một dòng luật nào đọc nó. */
.wmd-btn-cam { --accent: #E8792B }
.wmd-btn-lam { --accent: #2478C7 }

/* ---------------------------------------------------------------------------
   Dải danh mục: 8 vòng một hàng, nằm trong thẻ trắng bo góc

   ⚠️ Ô "Số cột" của khối Danh mục bị kẹp trần 6 trong `hdnt_ub_render_cats()`
   (`max( 2, min( 6, … ) )`), mà mẫu thiết kế có 8 vòng trên một hàng. Không nới
   trần ở theme nền vì một giao diện — đè lưới ở đây, chỉ trong phạm vi lớp
   `wmd-cats-circle` mà chính cây thiết kế tự gắn.

   ⚠️ Chỉ đè ở khổ máy tính. Bỏ media query là 8 cột ép xuống cả điện thoại,
   mỗi vòng còn ~40px và chữ dưới nó vỡ thành từng chữ cái một dòng.
--------------------------------------------------------------------------- */
@media (min-width: 1025px) {
  .wmd-cats-circle { grid-template-columns: repeat(8, minmax(0, 1fr)) }
}

/* Vòng nhỏ lại một chút so với ô lưới. Đo trước: vòng 138px trên khối rộng
   1272px (10,8%); ảnh mẫu để vòng thoáng hơn thế. Bó bề ngang ảnh còn 86% rồi
   căn giữa → vòng 119px, khoảng cách giữa các vòng rộng ra mà số cột và bề rộng
   phần chữ bên dưới vẫn nguyên.

   ⚠️ Bó CẢ vòng giữ chỗ (`::before`) lẫn lớp phủ rê chuột (`::after`), không chỉ
   thẻ <img>. Bó mỗi <img> thì danh mục chưa có ảnh vẫn ra vòng to như cũ (hai cỡ
   vòng đứng cạnh nhau), còn lớp phủ thì thành cái đĩa to hơn ảnh, rê chuột vào
   mới lòi ra — lỗi chỉ thấy khi rê nên rất dễ lọt.

   ⚠️ Chỉ ở khổ máy tính: từ 1024px trở xuống lưới còn 4 rồi 3 cột, vòng đã nhỏ
   sẵn (172px ở 834, 103px ở 414), bó thêm nữa là mấy cái icon bên trong bé tí. */
@media (min-width: 1025px) {
  .wmd-cats-circle .ub-cat img,
  .wmd-cats-circle .ub-cat:not(:has(img))::before {
    width: 86%;
    margin-inline: auto
  }
  .wmd-cats-circle .ub-cat::after { left: 7%; right: 7% }
}

/* Thẻ trắng bao quanh cả dải. `--band` là nền sáng của theme, nên viền mảnh
   dùng nó thì đổi bảng màu là viền đi theo, không phải sửa tay. */
.wmd-cats-circle {
  background: #fff;
  border: 1px solid var(--line, #EAECEF);
  border-radius: 18px;
  padding: 26px 22px;
  box-shadow: 0 10px 30px rgba(20, 83, 45, .06)
}
@media (max-width: 620px) {
  .wmd-cats-circle { padding: 18px 14px; border-radius: 14px }
}

/* ---------------------------------------------------------------------------
   Biển khuyến mãi giữ ĐÚNG tỉ lệ của ảnh nền

   Đo trên ảnh mẫu: một biển là 359 × 212 → tỉ lệ 1,69. Ba ảnh nguồn có tỉ lệ
   2,42 / 1,54 / 1,50, nên `background-size:cover` cắt mất phần bố cục — chai bị
   xén hoặc nền bị phóng to. Ba ảnh đã được cắt sẵn về 1,69 (giữ mép phải với
   ảnh quá ngang, giữ mép dưới với ảnh quá cao, để chai không bị cụt chân).

   ⚠️ Dùng `aspect-ratio` chứ KHÔNG dùng ô "Chiều cao" tính bằng px: cột hẹp lại
   theo khổ màn hình, mà chiều cao px thì đứng yên — tỉ lệ vỡ ngay ở khổ tablet
   và `cover` lại bắt đầu cắt. Khoá tỉ lệ thì biển co giãn cùng cột, ảnh luôn
   hiện trọn.

   ⚠️ Phải hạ `min-height` về 0: khối Biển đặt `min-height:var(--ub-h,480px)`,
   không hạ thì 480px thắng `aspect-ratio` và biển cao gấp đôi.
--------------------------------------------------------------------------- */
.wmd-promo {
  min-height: 0;
  aspect-ratio: 359 / 212
}
/* Khổ điện thoại: biển nằm một cột nên rất rộng; giữ nguyên tỉ lệ thì nó cao
   gần 250px và chữ trôi giữa khoảng trống. Cho cao tự do theo nội dung. */
/* ⚠️ KHÔNG thả tỉ lệ tự do ở khổ điện thoại. Bản đầu để `aspect-ratio:auto` +
   `min-height:210px`, đo ra 366×354 → tỉ lệ 1,03: khung gần vuông mà ảnh nguồn
   là 1,69, nên `cover` cắt mất hai bên và chai biến khỏi khung. Giữ đúng 1,69 ở
   MỌI khổ thì ảnh không bao giờ bị cắt; ở 414px ra 366×217, vừa đủ cho bốn dòng
   chữ trong lề 24px. */

/* ---------------------------------------------------------------------------
   Dải mờ sau chữ trên biển khuyến mãi

   Ảnh mẫu có mảng nền SẠCH bên trái rồi mới tới chai. Ba ảnh anh gửi thì chai
   nằm ở vị trí khác nhau, và ảnh xanh lá còn có lá trang trí chạy suốt bề
   ngang — cắt kiểu gì cũng có tấm bị chữ chạm vào chai.

   Chữa bằng dải chuyển sắc từ chính màu nền của biển sang trong suốt: chữ luôn
   nằm trên nền phẳng, ảnh vẫn thấy trọn. Đây là cách mẫu thiết kế đang làm, chỉ
   khác là mẫu bake sẵn vào ảnh còn ta dựng bằng CSS nên đổi ảnh không phải sửa.

   ⚠️ KHÔNG mượn thẻ `.ub-banner-ov` có sẵn: độ mờ của nó đi NỘI TUYẾN
   (`style="opacity:0.35"`), muốn đè phải `!important` — mà `!important` chặn
   luôn ô "CSS riêng" của người dùng, tức vá một lỗi bằng cách dựng lỗi khác.
   Dùng `::before` của chính lớp giao diện thì không phải tranh với ai.

   ⚠️ `z-index` cho phần nội dung: thiếu nó thì dải mờ vẽ ĐÈ lên chữ.
--------------------------------------------------------------------------- */
/* ⚠️ ĐỪNG thu ảnh nền bằng `background-size` ở đây — đã thử và nó để lại MỐI NỐI.

   Muốn cụm sản phẩm nhỏ lại thì phản xạ đầu tiên là `background-size: 80% auto`
   thay cho `cover` của ub.css. Ảnh nhỏ thật, nhưng vì tỉ lệ ảnh đúng bằng tỉ lệ
   khung (1,69) nên chỗ hụt ra 20% là dải màu nền phẳng, cắt ngang tấm ảnh thành
   một đường kẻ rõ ở mép trên và mép dưới — nhìn như tấm hình dán lệch trong khung.
   Không lấp được bằng `bg_color`: mép ảnh không phải màu phẳng (biển xanh lá có lá
   cây chạm mép trên, biển xanh dương đậm hơn màu nền), mà mỗi tấm lệch một kiểu.

   Cách đang dùng: nới KHUNG của chính tấm ảnh rồi lấp phần nới bằng cách nhân bản
   hàng/cột ngoài cùng (`bin/anh-bien.py`). Pixel ở ranh giới bằng đúng pixel kề nó
   nên không có đường kẻ nào, và tỉ lệ giữ nguyên 1,69 nên `cover` vẫn hiện trọn
   ảnh. Muốn đổi mức thu thì chạy lại script với hệ số khác, ĐỪNG thêm
   `background-size` vào đây — hai lớp thu chồng nhau. */
.wmd-promo { position: relative; overflow: hidden }
.wmd-promo::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: linear-gradient(
    90deg,
    var(--wmd-scrim, #E9F4EC) 0%,
    var(--wmd-scrim, #E9F4EC) 26%,
    color-mix(in srgb, var(--wmd-scrim, #E9F4EC) 55%, transparent) 46%,
    transparent 64%
  )
}
.wmd-promo .ub-banner-in { position: relative; z-index: 1 }

.wmd-btn-cam { --wmd-scrim: #FDF0E4 }
.wmd-btn-lam { --wmd-scrim: #E6F1FB }

/* ---------------------------------------------------------------------------
   Khổ máy tính bảng & điện thoại

   Đo trên Chromium ở 834 và 414 trước khi sửa: không cuộn ngang, không phần tử
   nào thò ra ngoài, không chữ tràn hộp, không ảnh méo. Ba chỗ cần chỉnh là
   KÍCH THƯỚC, không phải bố cục vỡ.
--------------------------------------------------------------------------- */

/* ⚠️ ĐỪNG hạ chiều cao dải bìa bằng `.wmd-hero { min-height: … }` ở đây — đã thử
   và nó là MÃ CHẾT. Ô "Chiều cao tối thiểu" của khối Dải in thẳng
   `style="min-height:500px"` lên thẻ (elements-layout.php, nhánh `min_h`), mà nội
   tuyến thắng mọi quy tắc trong tệp này; muốn thắng lại thì phải `!important`, thứ
   cả dự án cấm vì nó chặn luôn ô "CSS riêng" của chủ site. Đo lúc thử: đặt
   `min-height:420px` trong media query rồi đo `getComputedStyle` ở 834px vẫn ra
   500px — không lỗi, không cảnh báo, chỉ là không có gì đổi.

   Chiều cao dải bìa vì thế do NỘI DUNG quyết: đo được 591px ở 1440, 566px ở 834,
   514px ở 414 trong khi min-height mới có 500px, tức con số ấy chưa bao giờ chạm
   tới. Muốn dải bìa thấp xuống ở khổ hẹp thì giảm phần bên trong (cỡ chữ, lề trên
   của hàng USP và nút) — xem hàng USP ngay dưới. */

/* ⚠️ CỘT LỒNG TRONG CỘT phải khai `span_md` + `span_sm` TƯỜNG MINH, dù chỉ muốn
   giữ nguyên bề ngang của khổ máy tính. Biến CSS có TÍNH KẾ THỪA, mà ub.css đọc
   `grid-column: span var(--ub-span-md, var(--ub-span, 12))` — cột con không tự
   khai thì `--ub-span-md` rơi xuống giá trị của CỘT CHA, không phải `--ub-span`
   của chính nó.

   Đo thật trên 4 ô USP trong dải bìa: cột cha là `span="6" span_md="7"`, bốn cột
   con khai `span="3"` mà bỏ trống `span_md`. Ở 1440 chúng nằm 1 hàng 4 ô đúng như
   mong đợi; sang 834 mỗi ô nhận `grid-column: span 7` KẾ THỪA TỪ CHA → mỗi hàng
   chỉ còn một ô, USP xếp thành 4 tầng và dải bìa cao vọt 566px → 766px. Không lỗi,
   không cảnh báo, và ở khổ máy tính thì vẫn đẹp nên rất dễ bỏ sót.

   Bọ này trước đây bị `flow="fit"` che mất: kiểu xếp ấy bỏ qua `grid-column` nên
   không ai thấy. Bỏ `flow="fit"` đi (để 4 ô rộng bằng nhau như ảnh mẫu) là nó lộ ra. */

/* Dải bìa ở khổ hẹp: CHỮ ĐÈ LÊN MẤY LỌ THUỐC của ảnh nền.

   Bộ đo số không bắt được lỗi này — không cuộn ngang, không phần tử nào thò ra
   ngoài, `scrollWidth` không vượt `clientWidth`, tức chữ vẫn nằm gọn trong hộp của
   nó. Chỉ nhìn ẢNH CHỤP mới thấy: hộp ấy nằm chồng lên chỗ đậm nhất của ảnh nền,
   chữ xanh đậm #14532D trên thân lọ nâu đọc không ra. Đo ở 414 và 834 đều dính, ở
   1440 thì không vì cột chữ rộng 624px, mấy lọ nằm hẳn bên phải.

   Hai khổ hai cách chữa, vì nguyên nhân khác nhau:

   • Máy tính bảng (621–1024): cột chữ rộng 449px mà 4 ô USP xếp MỘT hàng nên ô
     thứ tư chạm tới vùng có lọ. Chữa bằng `span_md="6"` trong home.txt → 2×2, cả
     bốn ô nằm gọn nửa trái. Ảnh nền giữ nguyên độ nét.

   • Điện thoại (≤620): cột chữ chiếm TRỌN bề ngang, không còn "nửa trái" nào để
     lui về. Chỉ còn cách làm dịu ảnh nền — nên phủ một lớp sáng chuyển sắc, đậm ở
     trên (chỗ tiêu đề) và nhạt dần xuống dưới để mấy lọ vẫn ẩn hiện.

   ⚠️ KHÔNG dùng ô "Lớp phủ" sẵn có của khối Dải: nó in `opacity` NỘI TUYẾN lên
   chính lớp phủ, mà nội tuyến thì media query ở đây không đè lại được — bật lên là
   khổ máy tính cũng bị phủ theo, mà khổ máy tính đang khớp ảnh mẫu. Cùng họ với bẫy
   `min-height` ghi ở trên. */
@media (max-width: 620px) {
  .wmd-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(
      180deg,
      rgba(233, 244, 236, .93) 0%,
      rgba(233, 244, 236, .90) 40%,
      rgba(233, 244, 236, .82) 72%,
      rgba(233, 244, 236, .68) 100%
    )
  }
  /* `.ub-section-in` đã `position:relative` nên nó tự nổi lên trên lớp phủ này:
     hai thứ cùng z-index thì thứ đứng sau trong DOM vẽ đè, mà `::before` luôn
     đứng trước. Không cần đặt z-index cho ai cả. */
}

/* Chữ trên biển bó 200px là hợp ở khổ máy tính (biển rộng 411px). Ở tablet biển
   còn 249px trước khi đổi sang 2 cột, và ở điện thoại biển rộng 366px — cùng một
   con số 200px cho ba khổ là chữ khi thì chật khi thì thừa chỗ. */
@media (max-width: 1024px) {
  .wmd-promo .ub-heading, .wmd-promo .ub-text { max-width: 64% }
}
@media (max-width: 620px) {
  .wmd-promo .ub-heading, .wmd-promo .ub-text { max-width: 66% }
  /* Cân dòng thay vì nới thêm bề ngang. Ở 366px, "Tăng cường sức đề kháng" cần
     235px mà chỗ trống chỉ 220px, nên nó rớt chữ cuối xuống một dòng riêng. Nới
     tiếp thì chữ chạy qua chỗ mấy lọ thuốc (dải mờ đã trong suốt từ 72%), nên
     để trình duyệt chia lại cho hai dòng đều nhau. */
  .wmd-promo .ub-heading { text-wrap: balance }
  /* Dải mờ kéo dài hơn ở khổ hẹp: chữ chiếm tỉ lệ lớn hơn trên khung nhỏ. */
  .wmd-promo::before {
    background: linear-gradient(
      90deg,
      var(--wmd-scrim, #E9F4EC) 0%,
      var(--wmd-scrim, #E9F4EC) 38%,
      color-mix(in srgb, var(--wmd-scrim, #E9F4EC) 55%, transparent) 56%,
      transparent 72%
    )
  }
}

/* Vùng bấm trên điện thoại. Đo ở 414px: nút "Mua ngay" của biển cao 39px và mỗi
   liên kết chân trang cao 18px — hai liên kết cạnh nhau chỉ cách tâm 27px, ngón
   tay bấm nhầm dòng bên cạnh là chuyện thường. Nới bằng padding chứ KHÔNG tăng cỡ
   chữ: cỡ chữ đổi thì tỉ lệ khác ảnh mẫu, còn padding chỉ nới chỗ bấm.

   ⚠️ Mốc là 1024px chứ KHÔNG phải 620px. Thoạt nghĩ "chỉ điện thoại mới bấm bằng
   ngón tay" nên lúc đầu đặt ở 620 — đo lại thì ở 834px nút menu ba gạch
   (`hdnt-hdr-burger`) ĐÃ hiện, tức theme nền coi khổ ấy là thiết bị chạm, mà liên
   kết chân trang lúc đó vẫn cao 18px. Máy tính bảng rơi đúng vào khe giữa hai mốc.

   Ở khổ máy tính thì vẫn để nguyên: chuột bấm chính xác, mà chân trang 5 cột giãn
   dòng ra là vỡ bố cục đã đo khớp ảnh mẫu. */
@media (max-width: 1024px) {
  .wmd-promo .ub-btn {
    min-height: 42px;
    display: inline-flex;
    align-items: center;
    justify-content: center
  }
  /* ⚠️ Ô bấm 42px là mốc đầu; chủ site xem ở khổ 390px rồi báo *"giảm bớt
     khoảng cách các dòng"* — đo lúc ấy: `<li>` cao 42px + `gap` 9px = **51px một
     dòng**, năm dòng liên kết chiếm 255px, chân trang dài lê thê.

     Nay hạ theo hai nấc chứ không bỏ hẳn ô bấm: `padding-block` 12 → 8 (ô còn
     34px) và `gap` 9 → 4. Nhịp dòng 51px → 38px, gọn 25%. Cắt `gap` là phần
     RẺ NHẤT vì khoảng ấy không bấm được — bỏ nó không mất tí diện tích bấm nào,
     trong khi cắt `padding` thì mất. Vì thế cắt `gap` sâu (9→4) và `padding`
     nông (12→8). Hai ô liền nhau chỉ cách 4px nên vùng bấm gần như liền mạch. */
  .wmd-foot-links .ub-links-a { padding-block: 8px }
  /* ⚠️ `gap` KHÔNG sửa được ở đây — xem khối cùng tên ở CUỐI tệp. */

  /* ⚠️ Vòng danh mục: giữ NGUYÊN 4 cột, chỉ bó tấm ảnh nhỏ lại.
     Đo ở 390px: ô rộng 71px và ảnh chiếm trọn 71px ấy, nên tên danh mục dài
     ("Vitamin & Khoáng chất") gãy hai dòng ép sát vào ảnh — cả dải cao 306px.
     Hạ số cột xuống 2 thì ảnh lại to gấp đôi, ngược hẳn ý. Bó ảnh còn 54px và
     căn giữa trong ô thì tên có chỗ thở mà lưới không đổi. */
  .wmd-cats-circle .ub-cat img {
    max-width: 54px;
    margin-inline: auto
  }
}

/* ---------------------------------------------------------------------------
   Ô tìm kiếm trên đầu trang

   ⚠️ Luật này KHÔNG bó trong lớp `wmd-*`, khác quy ước ghi ở đầu tệp — cố ý, và
   đây là ngoại lệ DUY NHẤT. Quy ước ấy sinh ra vì một luật trần kiểu
   `.ub-cat img{…}` sẽ đổi dáng MỌI dải danh mục trên site, kể cả trang chủ site
   không dựng bằng giao diện này. Đầu trang thì chỉ có MỘT, và ô tìm kiếm chỉ
   hiện lên vì chính giao diện này bật nó trong `design.json`; gỡ child ra là cả
   luật lẫn ô đều biến mất cùng lúc. Không có cách gắn lớp riêng: đầu trang do
   theme nền dựng, không đi qua cây trang nên không có ô "Lớp CSS thêm".

   Ảnh mẫu để ô tìm kiếm chiếm hẳn khoảng giữa; mặc định của nền là viên thuốc
   nhỏ cao 40px nằm lọt thỏm.
--------------------------------------------------------------------------- */
/* ⚠️ Phải nới VÙNG CHỨA trước, không thì `width` trên chính ô là vòng luẩn quẩn:
   ô rộng theo cha (`100%`), mà cha lại là ô flex co theo nội dung nên rộng theo
   con — đo ra cả hai cùng đứng ở 236px, đặt `min(520px, 100%)` cũng không nhúc
   nhích. Nhắm bằng `:has()` để chỉ trúng vùng ĐANG chứa ô tìm kiếm: lớp
   `.hdnt-hz--main` là tên HÀNG chứ không phải tên vùng, cho cả ba vùng giãn thì
   logo và cụm nút bên phải cũng giãn theo. */
.hdnt-hdr-row .hdnt-hz:has(.hdnt-hdr-sbox) { flex: 1 1 auto; justify-content: center }

.hdnt-hdr-sbox {
  width: 100%;
  max-width: 520px;
  height: 46px;
  padding-inline: 18px;
  border-radius: 10px;
  background: #fff;
  border: 1.5px solid var(--accent, #1F9D55)
}
.hdnt-hdr-sbox input { width: 100% }

/* Bốn ô cam kết trong dải bìa: kéo lại gần nhau.

   Bốn cột span="3" trải hết bề ngang cột chữ (624px ở 1440), nên mỗi ô rộng
   156px và icon căn giữa trong đó — khoảng trống giữa hai icon nhìn ra rất xa
   dù ô "Khoảng cách" mới có 26px. Bó bề ngang của HÀNG thay vì giảm khoảng
   cách: giảm gap chỉ ăn 26px, còn phần thừa nằm ở chính bề rộng mỗi cột.

   ⚠️ Chỉ ở khổ máy tính. Từ 1024px xuống bốn ô đã xếp 2×2 trong nửa trái (xem
   khối "chữ đè lên mấy lọ thuốc" ở trên), bó thêm nữa là chữ vỡ dòng. */
@media (min-width: 1025px) {
  .wmd-usp { max-width: 500px }
  /* Bó hẹp lại thì "Ưu đãi hấp dẫn" rớt chữ cuối xuống một dòng riêng — chữ trong
     ô cam kết xuống dòng TỰ NHIÊN chứ không theo dấu xuống dòng gõ trong ô tiêu
     đề, nên ba ô kia trông đúng ý chỉ là trùng hợp. Để trình duyệt chia lại. */
  .wmd-usp .ub-ibox-t { text-wrap: balance }
}

/* ---------------------------------------------------------------------------
   Khối hotline trên đầu trang (ô "HTML 2" của Header Builder)

   Hai dòng chữ đều là chữ THẬT trong `design.json`, không phải `content:""` —
   xem chú thích trong tệp ấy. Ở đây chỉ lo phần nhìn.

   ⚠️ Icon vẽ bằng `mask-image` với SVG data-URI chứ không nhúng thẻ `<svg>` vào
   ô HTML: ô ấy chạy qua `wp_kses_post()`, mà bộ lọc đó cắt sạch thẻ `svg`. Nhúng
   vào thì icon biến mất lặng lẽ, chỉ còn cái vòng tròn rỗng.
--------------------------------------------------------------------------- */
.wmd-hot {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  text-decoration: none;
  color: inherit
}
/* ⚠️ Khoét icon ở `::before`, KHÔNG khoét ngay trên `.wmd-hot-i`. `mask` cắt
   TOÀN BỘ phần vẽ ra của phần tử — kể cả đường viền — nên đặt cả hai lên cùng một
   thẻ thì cái vòng tròn biến mất, chỉ còn mỗi hình ống nghe. Đã đo: viền khai
   1,5px mà ảnh chụp không thấy vòng nào. */
.wmd-hot-i {
  position: relative;
  flex: none;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  border: 1.5px solid var(--accent, #1F9D55)
}
.wmd-hot-i::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--accent, #1F9D55);
  -webkit-mask: var(--wmd-tel) center / 17px 17px no-repeat;
  mask: var(--wmd-tel) center / 17px 17px no-repeat
}
.wmd-hot-i {
  --wmd-tel: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3 19.5 19.5 0 0 1-6-6 19.8 19.8 0 0 1-3-8.6A2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1 1 .4 1.9.7 2.8a2 2 0 0 1-.5 2.1L8.1 9.9a16 16 0 0 0 6 6l1.3-1.2a2 2 0 0 1 2.1-.5c.9.3 1.8.6 2.8.7a2 2 0 0 1 1.7 2z'/%3E%3C/svg%3E")
}
/* Vòng tròn viền, ruột rỗng: tô nền bằng màu nhấn rồi khoét hình cái ống nghe
   ra khỏi nó thì icon luôn cùng màu viền, đổi bảng màu là đi theo. */
.wmd-hot-t { display: flex; flex-direction: column; line-height: 1.25 }
.wmd-hot-t small { font-size: 11px; color: var(--muted, #6B7280) }
.wmd-hot-t strong { font-size: 16px; font-weight: 800; color: var(--ink, #14532D) }

/* Ô đăng ký nhận tin ở chân trang: ô nhập trắng, nút xanh chiếm trọn bề ngang. */
.wmd-foot-news input[type="email"] {
  background: #fff;
  border-radius: 10px;
  height: 44px
}
.wmd-foot-news .ub-btn,
.wmd-foot-news button {
  width: 100%;
  border-radius: 10px;
  height: 44px
}

/* ⚠️ Vá một bọ của THEME NỀN, không phải lựa chọn thẩm mỹ.

   `hdnt_hb_el_html_main()` bọc ô "HTML 2" trong `class="hdnt-hdr-html hidden
   sm:block"`. Lớp `hidden` có thật trong `theme.css`, còn `sm:block` thì KHÔNG —
   đếm trong tệp đã biên dịch: 0 lần, và cả tệp không có lấy một
   `@media (min-width: 640px)`. Tailwind quét mã nguồn để giữ lại lớp nào cần,
   `sm:block` không lọt vào lượt quét ấy nên bị loại khỏi bản build.

   Hệ quả: ô "HTML 2" VÔ HÌNH trên mọi site. Chủ site điền HTML vào Tuỳ biến,
   bấm lưu, không thấy gì, và không có cách nào biết vì sao — đúng lớp lỗi
   "đặt tên lớp CSS không phải là viết CSS" mà dự án đã vấp nhiều lần.

   Ở đây chỉ trả lại đúng ý ban đầu của lớp `hidden sm:block`: ẩn dưới 640px,
   hiện từ 640px lên. Chỗ sửa THẬT nằm ở theme nền (thêm `sm:block` vào lượt
   build hoặc đổi sang lớp có sẵn) — không đụng vào đây vì theme nền đang chạy. */
@media (min-width: 640px) {
  .hdnt-hdr-html { display: block }
}

/* ⚠️ Nhưng CHỈ từ 1024px trở lên, không phải từ 640px.

   Ở dải 640–1023px hàng chính đã chật (logo + ô tìm kiếm + tài khoản + giỏ +
   nút ba gạch); nhét thêm khối hotline vào là hai dòng chữ của nó bị bóp rồi
   xuống thành BA dòng và tràn khỏi chiều cao hàng — đo ở 768px thì chữ "888" bị
   mép dưới cắt mất. Số đo không bắt được chuyện này (không tràn ngang, không đè
   lên nhau), chỉ nhìn ảnh chụp mới thấy.

   Ẩn chứ KHÔNG cho `white-space: nowrap`: ép một dòng thì khối chiếm ~150px cố
   định và phần thiếu lại dồn sang logo — quay về đúng cái bọ vừa sửa. Số điện
   thoại vẫn bấm được ở dải đó qua thanh liên hệ nổi (nút Gọi), nên không mất
   đường liên lạc nào. */
@media (max-width: 1023.98px) {
  .hdnt-hdr-html { display: none }
}

/* Danh sách liên kết chân trang xếp DỌC.

   Mặc định của nền là hàng ngang tự xuống dòng: với ba liên kết ngắn thì mỗi cái
   một dòng nên trông như cột, nhưng thêm lên năm là "Tuyển dụng" và "Liên hệ"
   dồn chung một dòng (đo được cùng y = 3216). Trông như lỗi bố cục chứ không ra
   danh sách. Ép cột thì số lượng liên kết không còn đổi được dáng. */
.wmd-foot-links ul {
  display: flex;
  flex-direction: column;
  align-items: flex-start;   /* thiếu dòng này thì cột flex kéo <li> rộng bằng nhau
                                rồi chữ bên trong tự căn giữa — ảnh mẫu căn trái */
  gap: 9px
}

/* Ô đăng ký nhận tin: ô nhập và nút xếp DỌC, mỗi cái chiếm trọn bề ngang — theo
   ảnh mẫu. Mặc định của nền xếp ngang nên ô nhập bị bóp còn 38px, nhìn như hỏng. */
/* ⚠️ Phải kèm `.ub-nl` cho đủ (0,2,0): nền tối do `.ub-nl.ub-dark` đặt, cũng
   (0,2,0) — viết mỗi `.wmd-foot-news` là (0,1,0), thua, và cái hộp đen vẫn còn.
   Ảnh mẫu không có hộp, ô nhập nằm thẳng trên nền xanh của chân trang. */
.wmd-foot-news.ub-nl { background: transparent; border: 0; padding: 0; box-shadow: none }
.wmd-foot-news form,
.wmd-foot-news .ub-nl-f {
  display: flex;
  flex-direction: column;
  gap: 10px
}
.wmd-foot-news input[type="email"],
.wmd-foot-news .ub-nl-f input {
  width: 100%;
  background: #fff;
  border-radius: 10px;
  height: 44px
}
.wmd-foot-news button,
.wmd-foot-news .ub-btn {
  width: 100%;
  border-radius: 10px;
  height: 44px
}

/* Dải thanh toán: mỗi hình thức là một CHIP TRẮNG bo góc, theo ảnh mẫu.

   Ảnh mẫu dùng logo thương hiệu (VISA · Mastercard · MoMo · ZaloPay · COD).
   Theme nền không có mấy logo ấy — khối Thanh toán chỉ vẽ được icon nét mảnh
   trong bộ icon sẵn có. Ở đây dựng đúng DÁNG (chip trắng, cùng nhịp, dòng chú
   thích xám ở cuối); còn logo thật thì phải là ẢNH do chủ site cung cấp, xem ghi
   chú trong README của giao diện.

   Tắt nhãn chữ dưới icon (`text=""` trong cây): ảnh mẫu không có chữ trong chip,
   và để chữ thì chip dài ra gấp ba, vỡ nhịp. */
.wmd-pay .ub-pay-i {
  background: #fff;
  border-radius: 8px;
  padding: 7px 14px;
  min-width: 58px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* ⚠️ Màu viết THẲNG, không dùng `var(--ink)`. Icon là `<span class="kico">` tô
     bằng `currentColor`, mà trong dải nền tối `--ink` chính là màu TRẮNG — đặt
     `var(--ink)` là trắng trên trắng, chip rỗng không thấy gì. Đã đo:
     `color` tính ra rgb(255,255,255). */
  color: #14532D
}
/* Dòng chú thích cuối dải KHÔNG phải một hình thức thanh toán → không đóng chip. */
.wmd-pay .ub-pay-i--note {
  background: none;
  padding: 0;
  min-width: 0;
  color: #8FB79C
}

/* ⚠️ Tô thẳng `background` của `.kico`, không đi vòng qua `color`. Icon của theme
   là một `<span>` khoét mask với `background: currentColor` — đặt `color` lên thẻ
   cha thì phải đúng thẻ nào đang thắng mới ăn, mà trong dải nền tối có nhiều lớp
   cùng đặt `color`. Đo được: chip đã tô `color:#14532D` mà `.kico` vẫn tính ra
   `background rgb(255,255,255)` — trắng trên trắng, chip rỗng. */
.wmd-pay .ub-pay-i .kico { background: #14532D }

/* Chân trang: dòng mời đăng ký căn TRÁI theo ảnh mẫu.

   ⚠️ Logo KHÔNG chỉnh ở đây mà bằng ô "Đặt khối về" (`salign="left"`) của chính
   khối Ảnh. Đã thử viết `.wmd-foot-logo { margin-inline: 0 }` và nó là MÃ CHẾT:
   logo bị đẩy vào giữa bởi `.ub-rd-sa.ub-rd-sa` — một selector NHÂN ĐÔI LỚP, cố ý
   nâng lên (0,2,0) để thắng mọi luật một lớp. Muốn đè phải nhân đôi lớp theo, tức
   đấu độ ưu tiên với theme nền để làm đúng cái việc mà nó đã có sẵn một ô.

   Đo lúc thử: `text-align` là `start` (đã trái sẵn) mà `margin-left/right` cùng
   51,25px — nhìn nhầm sang `text-align` là sửa suốt ngày không ra. */

/* Dòng mời đăng ký do khối Bản tin căn giữa (`.ub-nl-x`). Chỉ nhắm ĐÚNG dòng chữ
   ấy, không nhắm cả khối: nhãn trong nút "Đăng ký" cũng nằm trong khối và nó
   phải giữ căn giữa. */
.wmd-foot-news .ub-nl-x { text-align: left }

/* ---------------------------------------------------------------------------
   Vòng danh mục: bốn ô mỗi hàng ở khổ điện thoại (chốt của chủ site)

   Tám danh mục chia 4 ô/hàng ra đúng hai hàng đều nhau; ba ô/hàng thì hàng cuối
   trơ hai ô lệch hẳn sang trái.

   ⚠️ Nhãn phải nhỏ lại theo, nếu không đổi cột là hỏng chỗ khác: đo ở 360px với
   cỡ 13px thì "Tăng cường miễn dịch" và "Vitamin & Khoáng chất" xuống BỐN dòng,
   ô nọ cao gấp đôi ô kia và cả dải nhấp nhô. Hạ còn 12px + nén khoảng dòng thì
   không nhãn nào quá ba dòng.

   ⚠️ Chỉ hạ ở khổ điện thoại. Ở khổ máy tính ô rộng 138px, cỡ 13px vẫn một dòng
   — hạ cả nơi ấy là chữ nhỏ đi mà chẳng đổi lấy gì.
--------------------------------------------------------------------------- */
@media (max-width: 620px) {
  /* ⚠️ NHÂN ĐÔI tên lớp. `ub.css` khai `.ub-cats.ub-cs-s .ub-cat span{font-size:13px}`
     — độ ưu tiên (0,3,1). Một lớp bên này chỉ được (0,2,1) nên THUA, và triệu
     chứng đánh lừa: `line-height` vẫn ăn (bên kia không khai) nên nhìn qua tưởng
     cả khối đã áp, trong khi `font-size` đứng im 13px. Đo mới thấy. Nhân đôi cho
     (0,3,1) — hoà, rồi thắng theo thứ tự nạp vì `design.css` khai phụ thuộc
     `hdnt-ub` nên luôn nạp sau `ub.css`. */
  .wmd-cats-circle.wmd-cats-circle .ub-cat > span {
    font-size: 12px;
    line-height: 1.35
  }
}

/* ---------------------------------------------------------------------------
   Dải MỜI GỌI cuối trang Giới thiệu — tách khỏi chân trang

   ⚠️ Dải này và chân trang trước đây dùng CHUNG một màu `#14532D`, đặt liền
   nhau, không có gì ngăn giữa — nên trên màn hình nó đọc ra thành *một khối
   xanh dài* và lời mời gọi chìm nghỉm vào phần chân trang. Chủ site báo đúng
   chỗ ấy: *"tách khỏi footer nhé"*.

   Cách tách: đổi nền SECTION sang màu kem của giao diện rồi vẽ tấm xanh vào bên
   trong dưới dạng thẻ bo góc. Vẫn một dải, vẫn dùng lại toàn bộ cây cũ, mà mắt
   thấy ngay hai khối riêng.

   ⚠️ Vẫn giữ `dark="1"` trong cây: chữ bên trong nằm trên nền xanh nên phải là
   chữ sáng. Bỏ đi thì nền tấm vẫn xanh mà chữ chuyển sang đen — không đọc được.
--------------------------------------------------------------------------- */

.wmd-cta-tach .ub-section-in {
  background: #14532D;
  border-radius: 18px;
  padding: 34px 30px
}

@media (max-width: 620px) {
  .wmd-cta-tach .ub-section-in {
    border-radius: 14px;
    padding: 26px 20px
  }
}

/* ---------------------------------------------------------------------------
   Nhịp dòng liên kết chân trang trên điện thoại

   ⚠️ Khối này BẮT BUỘC nằm ở CUỐI TỆP, sau luật `.wmd-foot-links ul { gap: 9px }`
   ở trên. Bản đầu tôi đặt nó chung với `padding-block` trong media query ở giữa
   tệp — đo lại trên site thật thì `padding` ăn (42px → 34px) mà `gap` vẫn trơ
   9px. Lý do: media query KHÔNG cộng độ ưu tiên, hai luật cùng (0,1,1) nên chỉ
   thứ tự nạp quyết định, và luật `gap: 9px` đứng sau nên nó thắng. Đúng cái bẫy
   *"rule sau âm thầm đè rule trước"* đã ghi trong tài liệu của webme.vn.
--------------------------------------------------------------------------- */

@media (max-width: 1024px) {
  .wmd-foot-links ul { gap: 4px }
}

/* ---------------------------------------------------------------------------
   Hàng cuối chân trang trên điện thoại

   ⚠️ Đo ở khổ 390px: dòng bản quyền căn TRÁI chiếm trọn 342px, còn cụm thanh
   toán căn PHẢI (`.ub-pay.ub-tright` → `justify-content:flex-end`), rồi dòng
   chú thích "Thanh toán khi nhận hàng" xuống hàng riêng cũng dính mép phải. Hai
   khối đẩy về hai phía đối diện nên hàng cuối trông lệch hẳn — ở khổ máy tính
   thì đúng, vì lúc ấy chúng nằm CÙNG một hàng và hai mép là hai đầu của hàng đó.

   Ở khổ hẹp hai cột xếp chồng, nên căn giữa cả hai mới cân.

   ⚠️ Phải viết `.ub-pay.wmd-pay` chứ không `.wmd-pay` trần: luật cần đè là
   `.ub-pay.ub-tright` (0,2,0), mà `.wmd-pay` chỉ (0,1,0) nên thua bất kể thứ tự
   nạp. Hai lớp thì hoà điểm, và design.css nạp sau ub.css nên mình thắng.
--------------------------------------------------------------------------- */

@media (max-width: 620px) {
  .wmd-copy { text-align: center }

  .ub-pay.wmd-pay {
    justify-content: center;
    gap: 10px 12px;
    margin-bottom: 0
  }

  /* Chip nhỏ lại: 58×36 → 46×30, icon 22 → 17. */
  .wmd-pay .ub-pay-i {
    min-width: 46px;
    padding: 6px 11px;
    border-radius: 7px
  }

  .wmd-pay .ub-pay-i .kico {
    width: 17px;
    height: 17px
  }

  /* Chú thích chiếm trọn hàng riêng và căn giữa cùng cụm chip. */
  .wmd-pay .ub-pay-i--note {
    flex: 0 0 100%;
    margin-top: 2px
  }

  .wmd-pay .ub-pay-i--note span { font-size: 12.5px }
}
