/* ============================================================
   KQT LUXURY — SITE CHROME  (header · nav · search · footer · cart)
   ------------------------------------------------------------
   Nạp trên MỌI trang KHÔNG phải trang chủ, để header/footer
   custom đồng nhất với trang chủ. Trang chủ vẫn dùng full
   kqt-inline.css (body.kqt-home).

   An toàn với WooCommerce/Flatsome: mọi reset (a/button/ul/img/p)
   và các class trùng tên (.icon, .badge — Flatsome cũng dùng)
   đều được giới hạn BÊN TRONG các container chrome
   (.header / .search-overlay / .footer / .cart / .mbar),
   nên không tràn ra nội dung sản phẩm/danh mục.
   ============================================================ */
:root{
  --white:#FFFFFF; --cream:#F4F1E9; --cream-2:#ECE7DB; --paper:#F1EEE6;
  --navy:#0F1B2D; --navy-80:rgba(15,27,45,.82); --navy-12:rgba(15,27,45,.12);
  --taupe:#4A5468; --taupe-30:rgba(30,45,66,.40); --taupe-20:rgba(30,45,66,.26);
  --taupe-15:rgba(30,45,66,.18); --taupe-10:rgba(30,45,66,.10);
  --gold:#D6A94E; --gold-dark:#9A742A; --gold-light:#E8C36A;
  --gold-grad:linear-gradient(135deg,#C99A3B 0%,#E8C36A 100%);
  --gold-grad-sh:linear-gradient(135deg,#D6A94E 0%,#F0D283 100%);
  --gold-tint:#F6EEDC; --silver:#BFC1C2; --line-dark:#1E2D42;
  --ink:#1A2230; --ink-2:#3A4658; --ink-3:#6B7686;
  --on-navy:#F4F1E9; --on-navy-2:rgba(244,241,233,.64);
  --serif:"Be Vietnam Pro",system-ui,-apple-system,sans-serif;
  --sans:"Be Vietnam Pro","Inter",system-ui,-apple-system,sans-serif;
  --maxw:1320px; --gutter:40px; --radius:4px; --radius-lg:8px;
  --shadow-1:0 1px 2px rgba(15,27,45,.05);
  --shadow-2:0 18px 50px -28px rgba(15,27,45,.42);
  --shadow-gold:0 14px 34px -16px rgba(154,116,42,.5);
  --ease:cubic-bezier(.22,.61,.36,1);
}
@media (max-width:720px){ :root{ --gutter:20px; } }

/* ---------- Font toàn site: ép Be Vietnam Pro (override Lato mặc định Flatsome) ----------
   Flatsome in typography vào <style id="custom-css"> ở cuối <head> (body / .nav > li > a
   / h1..h6,.heading-font = Lato). Ta thêm tiền tố `html` để tăng specificity → thắng chắc
   mà KHÔNG cần !important. Chỉ đổi typeface, không đụng layout WooCommerce. */
html body.kqt-chrome{ font-family:var(--sans); }
html body.kqt-chrome .nav > li > a,
html body.kqt-chrome .mobile-sidebar-levels-2 .nav > li > ul > li > a,
html body.kqt-chrome .off-canvas-center .nav-sidebar.nav-vertical > li > a{ font-family:var(--sans); }
html body.kqt-chrome h1, html body.kqt-chrome h2, html body.kqt-chrome h3,
html body.kqt-chrome h4, html body.kqt-chrome h5, html body.kqt-chrome h6,
html body.kqt-chrome .heading-font{ font-family:var(--serif); }
html body.kqt-chrome button, html body.kqt-chrome input,
html body.kqt-chrome select, html body.kqt-chrome textarea,
html body.kqt-chrome .alt-font{ font-family:var(--sans); }

/* 2026-09-15: `html{background:#4D4D4D}` là màu chân trang MẶC ĐỊNH của Flatsome
   (`.absolute-footer, html` dùng chung 1 selector — chưa từng đổi theo brand navy),
   `body` luôn trong suốt. Mọi trang có nội dung custom (trang chủ, PLP, PDP) đều
   tự che bằng nền riêng nên không lộ; nhưng trang WooCommerce mặc định (checkout,
   404…) không có nền riêng → lộ nguyên khối xám phủ cả trang. Cho `body.kqt-chrome`
   nền trắng chung, khớp `.kqt.pp{background:var(--white)}` của trang sản phẩm. */
body.kqt-chrome{ background:var(--white); }

/* ---------- Reset (CHỈ trong chrome) ---------- */
body.kqt-chrome .header, body.kqt-chrome .header *,
body.kqt-chrome .search-overlay, body.kqt-chrome .search-overlay *,
body.kqt-chrome .footer, body.kqt-chrome .footer *,
body.kqt-chrome .drawer-scrim,
body.kqt-chrome #cart, body.kqt-chrome #cart *,
body.kqt-chrome .mbar, body.kqt-chrome .mbar *{ box-sizing:border-box; }

body.kqt-chrome .header, body.kqt-chrome .search-overlay,
body.kqt-chrome .footer, body.kqt-chrome #cart, body.kqt-chrome .mbar{
  font-family:var(--sans); font-size:16px; line-height:1.6; font-weight:400;
  letter-spacing:.005em; -webkit-font-smoothing:antialiased; }

body.kqt-chrome .header a, body.kqt-chrome .search-overlay a,
body.kqt-chrome .footer a, body.kqt-chrome #cart a, body.kqt-chrome .mbar a{
  color:inherit; text-decoration:none; }

body.kqt-chrome .header button, body.kqt-chrome .search-overlay button,
body.kqt-chrome .footer button, body.kqt-chrome #cart button, body.kqt-chrome .mbar button{
  font:inherit; color:inherit; cursor:pointer; border:0; background:none; }

body.kqt-chrome .header ul, body.kqt-chrome .search-overlay ul,
body.kqt-chrome .footer ul, body.kqt-chrome #cart ul, body.kqt-chrome .mbar ul{
  margin:0; padding:0; list-style:none; }

body.kqt-chrome .header img, body.kqt-chrome .search-overlay img,
body.kqt-chrome .footer img, body.kqt-chrome #cart img, body.kqt-chrome .mbar img{
  display:block; max-width:100%; }

body.kqt-chrome .footer p, body.kqt-chrome #cart p,
body.kqt-chrome .search-overlay p, body.kqt-chrome .mbar p{ margin:0; }

body.kqt-chrome .cart__head h3{ margin:0; font-family:var(--serif); font-weight:700; }

/* ---------- Layout / components dùng lại (an toàn: Flatsome không dùng) ---------- */
body.kqt-chrome .wrap{ width:100%; max-width:var(--maxw); margin-inline:auto; padding-inline:var(--gutter); }
body.kqt-chrome .btn{ display:inline-flex; align-items:center; justify-content:center; gap:10px;
  min-height:52px; padding:0 30px; border-radius:var(--radius);
  font-size:14px; font-weight:700; letter-spacing:.12em; text-transform:uppercase;
  transition:transform .25s var(--ease), box-shadow .25s var(--ease), background .25s; }
body.kqt-chrome .btn:active{ transform:translateY(1px); }
body.kqt-chrome .btn--gold{ background:var(--gold-grad); color:#2A2008; box-shadow:var(--shadow-gold); background-size:160% 160%; }
body.kqt-chrome .btn--gold:hover{ background-image:var(--gold-grad-sh); transform:translateY(-2px); box-shadow:0 20px 40px -16px rgba(154,116,42,.7); }
body.kqt-chrome .btn--block{ width:100%; }
body.kqt-chrome .btn--sm{ min-height:44px; padding:0 20px; font-size:12px; }

/* 2026-09-16: Nút giỏ hàng/thanh toán của WooCommerce ("Đặt hàng", "Tiến hành
   thanh toán"…) dùng thẳng class Flatsome mặc định (`.button.alt` cam #C05530,
   `.button.primary` xanh #446084) — chưa từng đổi theo thương hiệu KQT (navy/gold).
   CTA chính ăn theo `.btn--gold`, nút phụ ăn theo kiểu viền navy (`.btn--ghost`).
   2026-09-29: hạ uppercase→none + letter-spacing 0 — rule này viết TRƯỚC đợt
   hạ HOA toàn trang (Cấp-1 khử mùi AI 2026-09-26, đợt đó không ghé cart/checkout)
   nên sót; pháp y zb107 chỉ đúng nó đè text-transform:none của kqt-cart-page.css
   (specificity 0,4,1 > 0,3,1). Đừng thêm lại HOA. */
body.kqt-chrome .woocommerce #place_order,
body.kqt-chrome .woocommerce a.checkout-button.button{
  background:var(--gold-grad); background-size:160% 160%; color:#2A2008;
  border:none; box-shadow:var(--shadow-gold); border-radius:var(--radius);
  font-weight:700; letter-spacing:0; text-transform:none; }
body.kqt-chrome .woocommerce #place_order:hover,
body.kqt-chrome .woocommerce a.checkout-button.button:hover{
  background-image:var(--gold-grad-sh); box-shadow:0 20px 40px -16px rgba(154,116,42,.7); }

body.kqt-chrome .woocommerce button[name="update_cart"],
body.kqt-chrome .woocommerce a.button-continue-shopping.button{
  background:transparent; border:1px solid var(--navy); color:var(--navy);
  border-radius:var(--radius); font-weight:700; }
body.kqt-chrome .woocommerce button[name="update_cart"]:hover,
body.kqt-chrome .woocommerce a.button-continue-shopping.button:hover{
  background:var(--navy); color:var(--white); }

body.kqt-chrome .woocommerce button[name="apply_coupon"]{
  background:var(--navy); color:var(--white); border:none; border-radius:var(--radius); }
body.kqt-chrome .woocommerce button[name="apply_coupon"]:hover{ background:var(--navy-80); }

body.kqt-chrome .pill{ display:inline-flex; align-items:center; gap:8px; height:42px; padding:0 18px;
  border:1px solid var(--taupe-20); border-radius:999px; background:var(--white);
  font-size:13.5px; font-weight:600; color:var(--ink-2); white-space:nowrap;
  transition:border-color .2s var(--ease), color .2s var(--ease), background-color .2s var(--ease); }
body.kqt-chrome .pill:hover{ border-color:var(--gold); color:var(--navy); }
body.kqt-chrome .ph{ position:relative; overflow:hidden; background:linear-gradient(135deg,var(--cream-2),var(--cream)); isolation:isolate; }
body.kqt-chrome .ph::before{ content:""; position:absolute; inset:0; z-index:0; opacity:.5;
  background:radial-gradient(120% 90% at 80% 10%, rgba(214,169,78,.10), transparent 55%),
    radial-gradient(80% 70% at 10% 100%, rgba(92,77,67,.10), transparent 60%); }
body.kqt-chrome .ph__img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:2; }
body.kqt-chrome .ph__img[hidden]{ display:none; }

/* ---------- .icon / .badge (Flatsome cũng dùng → chỉ áp trong chrome) ---------- */
body.kqt-chrome .header .icon, body.kqt-chrome .search-overlay .icon,
body.kqt-chrome .footer .icon, body.kqt-chrome #cart .icon, body.kqt-chrome .mbar .icon{
  width:20px; height:20px; stroke:currentColor; fill:none; stroke-width:1.6;
  stroke-linecap:round; stroke-linejoin:round; flex:none; }
body.kqt-chrome .header .icon-sm, body.kqt-chrome .search-overlay .icon-sm,
body.kqt-chrome .footer .icon-sm, body.kqt-chrome #cart .icon-sm, body.kqt-chrome .mbar .icon-sm{
  width:16px; height:16px; }
body.kqt-chrome .header .badge{ display:inline-flex; align-items:center; gap:7px; height:26px; padding:0 11px;
  background:var(--navy); color:var(--on-navy); font-size:11px; font-weight:700;
  letter-spacing:.08em; text-transform:uppercase; border-radius:3px; }
body.kqt-chrome .header .badge--gold{ background:var(--gold-grad); color:#2A2008; }

/* ============================================================
   HEADER
   ============================================================ */
body.kqt-chrome .header{ position:sticky; top:0; z-index:60;
  background:rgba(244,241,233,.92); backdrop-filter:blur(14px) saturate(1.3);
  -webkit-backdrop-filter:blur(14px) saturate(1.3);
  border-bottom:1px solid rgba(214,169,78,.42);
  box-shadow:0 1px 0 rgba(214,169,78,.12), 0 10px 30px -24px rgba(15,27,45,.35); }
/* Lưới `minmax(322px,1fr) minmax(0,560px) minmax(322px,1fr)`, KHÔNG phải
   `auto 1fr auto`.
   Ô tìm kiếm có justify-self:center nên nó vẫn nằm giữa CỘT của nó — nhưng cột
   đó không nằm giữa thanh, vì hai cột rìa `auto` co theo nội dung nên không bao
   giờ bằng nhau: cột trái (logo) 162px, cột phải (nút) 322px. Chênh bao nhiêu
   thì cột giữa lệch trái đúng một NỬA — đo trên /voi-lavabo/ ra −80px.

   Cột giữa phải là minmax(0,560px) chứ ĐỪNG dùng `auto`: `auto` không co được,
   luôn đòi đủ 560px nên màn hẹp là tràn cả hàng. minmax(0,…) cho nó tự thu lại.

   Hai cột rìa phải có SÀN 322px, ĐỪNG để `1fr` trơn. `1fr` có sàn ngầm là
   min-content, mà min-content hai bên khác nhau (162 vs 322) nên hết chỗ là
   chúng tách ra đúng như cũ. Đo bản chỉ dùng `1fr`: màn 1920 lệch 0 nhưng 1200
   lệch −66, 1000 lệch −161 — sửa mà vẫn hỏng ở laptop.
   Cùng sàn 322 thì hai rìa LUÔN bằng nhau, phần thiếu bị trừ vào ô tìm kiếm chứ
   không đẩy ô lệch đi. Trình tự trình duyệt tính: chốt sàn 322+322+48 khe = 692
   trước, còn bao nhiêu bơm cho cột giữa (trần 560), dư nữa mới chia đều hai rìa
   ⇒ vừa luôn canh giữa vừa không bao giờ tràn hàng.
     màn 1920 → ruột 1320, ô 560, hai rìa 356 · CANH GIỮA
     màn 1280 → ruột 1200, ô 508, hai rìa 322 · CANH GIỮA
     màn 1000 → ruột  920, ô 228, hai rìa 322 · CANH GIỮA
   Hẹp thì ô ngắn lại — đúng thứ đáng hi sinh, vì ô này chỉ là nút bấm mở lớp
   phủ tìm kiếm. Dưới 860px bộ mobile giấu hẳn ô nên khỏi lo ô ngắn quá.

   322px = min-content ĐO ĐƯỢC của .nav-actions (SHOWROOM + tim + giỏ). THÊM HAY
   BỚT NÚT BÊN PHẢI LÀ PHẢI ĐO LẠI SỐ NÀY — sàn nhỏ hơn bề rộng thật thì cột phải
   phình quá sàn và lệch quay lại ngay. Cách đo: chụp headless rồi chạy
   tools/_do_header.py, cột LECH khác 0 là sàn đã sai. */
body.kqt-chrome .header__row{ height:70px; display:grid;
  grid-template-columns:minmax(322px,1fr) minmax(0,560px) minmax(322px,1fr);
  align-items:center; gap:24px; }
body.kqt-chrome .brand{ display:inline-flex; align-items:center; flex:none; }
body.kqt-chrome .brand__plaque{ display:inline-flex; padding:0; border-radius:0; background:transparent; box-shadow:none; }
body.kqt-chrome .brand__logo{ height:54px; width:auto; max-width:none; flex:none; object-fit:contain; display:block; border-radius:0; }
body.kqt-chrome .footer__logo{ height:62px; width:auto; display:block; border-radius:0; border:0; }
body.kqt-chrome .search{ position:relative; max-width:560px; width:100%; justify-self:center; }
body.kqt-chrome .search__field{ display:flex; align-items:center; gap:12px; height:46px; width:100%;
  padding:0 18px; border:1px solid var(--taupe-20); border-radius:var(--radius);
  background:var(--white); color:var(--ink-3); transition:border-color .2s; }
body.kqt-chrome .search__field:hover{ border-color:var(--gold); }
/* PHẢI gỡ cả margin/padding/height/box-shadow, không chỉ border+background.
   Flatsome đặt sẵn trên MỌI thẻ input (flatsome.css):
     .button,button,fieldset,input,select,textarea{ margin-bottom:1em }
     input[type=text],…{ padding:0 .75em; height:2.507em;
                         box-shadow:inset 0 1px 2px rgba(0,0,0,.1) }
   Bản cũ chỉ gỡ border/outline/background/font-size nên ba thứ kia sống sót, đẻ
   ra đúng cái Quyết nhìn thấy 2026-09-04: "vẫn có 1 ô mờ mờ nằm ngoài ô tìm
   kiếm". Ô mờ đó CHÍNH LÀ thẻ <input> — nó có viền + bóng đổ riêng, lại bị
   margin-bottom nhấc lên nên mép trên thò ra ngoài khung.
   Vì sao lề DƯỚI lại đẩy input LÊN: .search__field là flex + align-items:center,
   mà align-items canh theo HỘP LỀ chứ không theo hộp viền. Thêm 1em lề dưới
   (=14,5px) ⇒ trình duyệt nhấc hộp viền lên nửa số đó = 7,25px. Đo đúng 7,25.
   padding 0 .75em × 14,5px ≈ 12px ⇒ chữ placeholder còn bị đẩy sang phải 12px,
   làm khoảng cách icon–chữ thành 24px thay vì gap 12px như thiết kế.
   height:100% ăn trọn 44px ruột, chắc hơn 2.507em vì em đổi theo font-size. */
body.kqt-chrome .search__field input{ border:0; outline:0; background:none; flex:1; font-size:14.5px; color:var(--ink);
  margin:0; padding:0; height:100%; box-shadow:none; border-radius:0; }
body.kqt-chrome .search__field kbd{ font:inherit; font-size:11px; color:var(--ink-3);
  border:1px solid var(--taupe-20); border-radius:3px; padding:1px 7px; }
body.kqt-chrome .nav-actions{ display:flex; align-items:center; gap:8px; flex:none; }
/* `margin:0` KHÔNG phải cho đẹp — nó gỡ lề Flatsome đặt sẵn trên MỌI thẻ button:
     .button,button,fieldset,input,select,textarea{ margin:0 1em 1em 0 }
   1em ở đây ăn theo font-size của từng nút nên ra lề phải 13px (nút Showroom,
   font 13px) và 16px (ba nút icon còn lại). Bốn nút cộng lại = 61px lề PHẢI vô
   hình — đo được 2026-09-04: .nav-actions rộng 269px trong khi ruột chỉ
   4×46 + 3×8 gap = 208px. 61px thừa đó là thứ đẩy nút MỞ MENU ra ngoài màn
   hình điện thoại (navToggle 371..417 trong khi khung chỉ tới 355).
   Lề DƯỚI 16px còn nguy hơn: .nav-actions là flex + align-items:center, mà
   align-items canh theo HỘP LỀ chứ không theo hộp viền, nên cả cụm nút bị nhấc
   lên 8px so với logo. Đây ĐÚNG con ma đã trị cho .search__field input ở trên —
   cùng một luật Flatsome, khác thẻ. Thêm nút mới vào header thì nhớ nó vẫn rình. */
body.kqt-chrome .iconbtn{ position:relative; display:inline-flex; align-items:center; justify-content:center;
  width:46px; height:46px; margin:0; border-radius:var(--radius); color:var(--navy); transition:background .2s; }
body.kqt-chrome .iconbtn:hover{ background:var(--taupe-10); }
body.kqt-chrome .iconbtn--label{ width:auto; gap:9px; padding:0 16px; font-size:13px; font-weight:600; }
body.kqt-chrome .cart-count{ position:absolute; top:6px; right:6px; min-width:18px; height:18px; padding:0 5px;
  display:grid; place-items:center; background:var(--gold-grad); color:#2A2008;
  font-size:11px; font-weight:800; border-radius:999px; }

/* ---------- Search overlay ---------- */
body.kqt-chrome .search-overlay{ position:fixed; inset:0; z-index:80; display:none; }
body.kqt-chrome .search-overlay.is-open{ display:block; }
body.kqt-chrome .search-overlay__scrim{ position:absolute; inset:0; background:var(--navy-80); backdrop-filter:blur(4px); }
body.kqt-chrome .search-overlay__panel{ position:relative; background:var(--white);
  border-bottom:1px solid var(--taupe-15); padding-block:26px 40px; animation:dropIn .3s var(--ease); }
@keyframes dropIn{ from{ transform:translateY(-16px); opacity:0 } to{ transform:none; opacity:1 } }
body.kqt-chrome .search-overlay .search__field{ height:58px; font-size:17px; }
body.kqt-chrome .search-cols{ display:grid; grid-template-columns:1fr 1fr; gap:48px; margin-top:30px; }
body.kqt-chrome .search-cols h4{ font-family:var(--sans); font-size:12px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--taupe); margin-bottom:16px; }
/* Hàng "top danh mục": khung hàng nay nằm ở <li> chứ không ở <a> nữa. Lý do là
   SEO chứ không phải mỹ thuật — thẻ hãng ("TOTO · INAX") trước đây nằm TRONG
   thẻ <a> nên lọt vào chữ bọc link mà mắt không thấy. Đẩy nó ra ngoài <a> thì
   phải chuyển display:flex sang <li>, nếu không thẻ hãng rơi xuống dòng riêng.
   Hình hiện ra vẫn y hệt trước. Xem header.php khối $kqt_trend_slug. */
body.kqt-chrome .trend-list li{ display:flex; align-items:center; justify-content:space-between;
  gap:12px; padding:11px 0; border-bottom:1px solid var(--taupe-10); }
body.kqt-chrome .trend-list a{ display:block; transition:color .2s; }
body.kqt-chrome .trend-list a:hover{ color:var(--gold-dark); }
body.kqt-chrome .trend-list .brand-flag{ font-size:11px; color:var(--taupe); letter-spacing:.05em; }
body.kqt-chrome .recent-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }
body.kqt-chrome .recent-grid .rc{ border:1px solid var(--taupe-10); border-radius:var(--radius); overflow:hidden; }
body.kqt-chrome .recent-grid .rc .ph{ aspect-ratio:1; }
body.kqt-chrome .recent-grid .rc span{ display:block; padding:9px 10px; font-size:12px; color:var(--ink-2); }
/* Chưa có lịch sử xem thì cột phải bị ẩn — để nguyên 1fr 1fr sẽ hở trống nửa
   bên phải. kqt.js gỡ .is-solo khi dựng được ô "vừa xem". */
body.kqt-chrome .search-cols.is-solo{ grid-template-columns:1fr; }
/* Ô "vừa xem" nay là THẺ LINK (trước là div chết, bấm không đi đâu). */
body.kqt-chrome .recent-grid a.rc{ display:block; text-decoration:none; transition:border-color .2s; }
body.kqt-chrome .recent-grid a.rc:hover{ border-color:var(--gold); }
body.kqt-chrome .recent-grid a.rc:hover span{ color:var(--gold-dark); }

/* ---------- Main nav (desktop) ---------- */
body.kqt-chrome .mainnav{ border-top:1px solid rgba(214,169,78,.22); }
body.kqt-chrome .mainnav__row{ display:flex; align-items:center; justify-content:space-between; gap:20px; min-height:50px; }
body.kqt-chrome .navtoggle{ display:none; }
body.kqt-chrome .menu{ display:flex; align-items:center; flex-wrap:nowrap; }
body.kqt-chrome .menu > li{ position:relative; }
body.kqt-chrome .menu > li > a{ display:inline-flex; align-items:center; gap:5px; height:50px; padding:0 13px;
  /* BỎ VIẾT HOA menu (2026-09-29) — bản sao của rule cùng tên trong
     kqt-inline.css (hai file loại trừ nhau theo is_front_page, sửa CẶP).
     Lý do + số đo đầy đủ ghi ở bản kqt-inline.css: sentence-case 14px/.01em
     đo 805px < bản HOA 12px 838px nên mốc ẩn menu 1200px vẫn đúng. */
  font-size:14px; font-weight:600; letter-spacing:.01em; text-transform:none; color:var(--navy);
  position:relative; transition:color .2s; white-space:nowrap; }
body.kqt-chrome .menu > li:first-child > a{ padding-left:0; }
body.kqt-chrome .menu > li > a .chev{ width:12px; height:12px; stroke:currentColor; fill:none; stroke-width:2;
  stroke-linecap:round; stroke-linejoin:round; transition:transform .25s var(--ease); }
body.kqt-chrome .menu > li > a::after{ content:""; position:absolute; left:13px; right:13px; bottom:9px; height:2px;
  background:var(--gold-grad); transform:scaleX(0); transform-origin:left; transition:transform .28s var(--ease); }
body.kqt-chrome .menu > li:first-child > a::after{ left:0; }
body.kqt-chrome .menu > li > a:hover{ color:var(--gold-dark); }
body.kqt-chrome .menu > li > a:hover::after, body.kqt-chrome .menu > li > a.is-current::after{ transform:scaleX(1); }
body.kqt-chrome .menu > li.has-mega:hover > a .chev{ transform:rotate(180deg); }
body.kqt-chrome .menu__cta{ display:inline-flex; align-items:center; gap:9px; font-size:13px; font-weight:700;
  color:var(--navy); white-space:nowrap; flex:none; }
body.kqt-chrome .menu__cta svg{ color:var(--gold-dark); }
body.kqt-chrome .menu__cta:hover{ color:var(--gold-dark); }

/* ---------- Mega menu ---------- */
body.kqt-chrome .mega{ position:absolute; top:100%; left:0; min-width:580px;
  display:grid; grid-template-columns:1.1fr .8fr 1fr; gap:26px;
  background:var(--white); border:1px solid var(--taupe-15); border-top:2px solid var(--gold);
  border-radius:0 0 var(--radius-lg) var(--radius-lg); box-shadow:var(--shadow-2); padding:24px 26px;
  opacity:0; visibility:hidden; transform:translateY(8px);
  transition:opacity .22s var(--ease), transform .22s var(--ease), visibility .22s; z-index:70; }
body.kqt-chrome .has-mega:hover .mega{ opacity:1; visibility:visible; transform:none; }
body.kqt-chrome .mega h6{ font-family:var(--sans); font-size:11px; letter-spacing:.14em; text-transform:uppercase;
  color:var(--taupe); margin:0 0 6px; }
body.kqt-chrome .mega .mlink{ display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:9px 0; font-size:14px; font-weight:500; color:var(--ink-2);
  border-bottom:1px solid var(--taupe-10); transition:color .2s, padding .2s; }
body.kqt-chrome .mega .mlink:last-child{ border-bottom:0; }
body.kqt-chrome .mega .mlink small{ color:var(--ink-3); font-size:12px; font-weight:500; }
body.kqt-chrome .mega .mlink:hover{ color:var(--gold-dark); padding-left:5px; }
body.kqt-chrome .mega__promo{ position:relative; border-radius:var(--radius); overflow:hidden;
  border:1px solid var(--taupe-15); padding:14px; min-height:170px;
  display:flex; flex-direction:column; justify-content:flex-end; }
body.kqt-chrome .mega__promo .ph{ position:absolute; inset:0; z-index:0; }
body.kqt-chrome .mega__promo .ph::after{ content:""; position:absolute; inset:0; background:linear-gradient(to top, rgba(15,27,45,.78), rgba(15,27,45,.12)); z-index:3; }
body.kqt-chrome .mega__promo .badge{ position:relative; z-index:4; align-self:flex-start; margin-bottom:8px; }
body.kqt-chrome .mega__promo b{ position:relative; z-index:4; font-family:var(--serif); font-size:18px; color:#fff; line-height:1.2; }
body.kqt-chrome .mega__promo span{ position:relative; z-index:4; font-size:12.5px; color:rgba(255,255,255,.85); margin-top:3px; }
body.kqt-chrome .mega__promo:hover .ph__img{ transform:scale(1.05); }
body.kqt-chrome .mega__promo .ph__img{ transition:transform .5s var(--ease); }

/* ---------- Mega menu RỘNG — "Thiết bị vệ sinh": 9 nhóm / 49 danh mục ---------- */
/* TẤM RƠI XUỐNG TRẢI HẾT BỀ NGANG .wrap, không bám mép chữ "Thiết bị vệ sinh".
 * Cách làm: .mainnav__row nhận position:relative để làm KHUNG THAM CHIẾU, còn cái <li>
 * của menu rộng thì position:static để nó nhường vai trò ấy. Các <li> khác vẫn giữ
 * position:relative (luật ở trên, dòng .menu > li) nên mega "Thiết bị nhà bếp" bám mép
 * mục của nó y như cũ — đổi này KHÔNG lan sang menu kia.
 * .mainnav__row cao đúng 50px (bằng chiều cao thẻ <a> trong menu) nên top:100% vẫn rơi
 * sát đáy mục — không hở khe làm chuột đi nửa đường thì menu tắt. */
body.kqt-chrome .mainnav__row{ position:relative; }
body.kqt-chrome .menu > li.has-mega--wide{ position:static; }

/* min-width:0 để xoá min-width:580px của .mega — ở đây bề rộng do left/right quyết định.
 *
 * CHIỀU CAO — chỗ này có tính toán, đừng nới bừa cho "thoáng":
 * Tấm nhà bếp là tấm cao nhất (13 nhóm, 3 hàng + dòng chân) và mép trên của nó nằm ở 122px.
 * Với khoảng cách hàng 20px + đệm 24px + dòng link 4.5px, ĐO THẬT ra 668px → đáy rơi xuống
 * 790px. Máy 1366×768 (laptop phổ thông, rất nhiều người Việt đang xài) chỉ cao 768px, tức là
 * dòng "Xem tất cả thiết bị nhà bếp" bị đẩy khỏi màn hình — mà tấm này KHÔNG tự cuộn, nên
 * người dùng không có cách nào với tới: rời chuột ra để cuộn trang là menu tắt.
 * Ép lại 14px/20px/4px + hạ đệm dòng chân → 625px, đáy 747px, còn dư 21px trên màn 768.
 *
 * max-height là LƯỚI AN TOÀN, không phải để dùng hằng ngày: màn thấp hơn nữa, hoặc người dùng
 * phóng to chữ (Ctrl++), thì thà cho cuộn trong tấm còn hơn cụt mất mấy mục cuối. Trên màn
 * bình thường nó KHÔNG bao giờ chạm tới nên không hiện thanh cuộn — khác hẳn bản production
 * lúc nào cũng cuộn. Dùng "hidden auto" để chặn thanh cuộn NGANG: overflow-y:auto một mình sẽ
 * kéo theo overflow-x thành auto, chỉ cần lệch nửa pixel là mọc thanh ngang xấu hoắc. */
body.kqt-chrome .mega--wide{ left:0; right:0; min-width:0;
  grid-template-columns:repeat(5,minmax(0,1fr)); gap:14px 24px; align-items:start;
  padding:20px 26px 0;
  max-height:calc(100vh - 136px); overflow:hidden auto; overscroll-behavior:contain; }
/* Bồn cầu có 14 mục, gấp ~3 lần nhóm khác → cho ăn 2 ô lưới, chữ chảy làm 2 cột con
   (7/7 tự cân) để nhóm này không cao gấp ba rồi kéo cả hàng giãn theo. */
body.kqt-chrome .mega__grp--rong{ grid-column:span 2; }
body.kqt-chrome .mega__grp--rong .mega__grp-list{ columns:2; column-gap:24px; }

body.kqt-chrome .mega--wide .mega__grp-h{ margin:0 0 7px; padding-bottom:6px;
  font-family:var(--sans); font-size:11.5px; font-weight:700; letter-spacing:.1em;
  text-transform:uppercase; color:var(--navy); border-bottom:1px solid var(--taupe-15); }
body.kqt-chrome .mega--wide .mega__grp-h a{ color:inherit; transition:color .2s; }
body.kqt-chrome .mega--wide .mega__grp-h a:hover{ color:var(--gold-dark); }

/* Nén dòng lại: 49 link mà giữ nguyên .mlink (padding 9px + gạch chân từng dòng) thì
   tấm cao vượt màn hình. Bỏ gạch chân, hạ padding, để trắng ngăn nhóm thay cho kẻ.
   break-inside:avoid cho cột con của nhóm Bồn cầu — cấm cắt một link làm đôi. */
body.kqt-chrome .mega--wide .mlink{ display:block; padding:4px 0; font-size:13px;
  font-weight:400; border-bottom:0; break-inside:avoid; }
body.kqt-chrome .mega--wide .mlink:hover{ padding-left:5px; }

body.kqt-chrome .mega--wide .mega__all{ grid-column:1/-1; display:flex; align-items:center; gap:8px;
  margin-top:2px; padding:12px 0 14px; border-top:1px solid var(--taupe-15);
  font-size:12px; font-weight:700; letter-spacing:.08em; text-transform:uppercase;
  color:var(--gold-dark); transition:gap .2s var(--ease); }
body.kqt-chrome .mega--wide .mega__all:hover{ gap:13px; }
body.kqt-chrome .mega--wide .mega__all svg{ stroke:currentColor; fill:none; stroke-width:2;
  stroke-linecap:round; stroke-linejoin:round; }

/* ---------- Mega "flyout" — mockup 2026-09-25 bản 2, CHỈ menu Thiết bị vệ sinh ----------
   Trái: cột nhóm 250px nền trắng (nhóm active nền kem + vạch vàng trái + chữ vàng).
   Phải: panel đổi theo nhóm đang rê — CHỈ MỘT panel hiện (.is-active); đoạn JS nhỏ in
   cuối $kqt_mega_fly (header.php) điều khiển, :hover thuần không giữ được lựa chọn khi
   chuột rời cột trái sang panel. Ảnh SP để object-fit:CONTAIN — thumbnail danh mục đủ
   kiểu khổ, cover là cắt cụt đầu sản phẩm. Sửa gì ở đây phải sửa Y HỆT bản kqt-home
   trong kqt-inline.css — hai file loại trừ nhau theo is_front_page(). */
body.kqt-chrome .mega--fly{ display:flex; padding:0; gap:0; }
body.kqt-chrome .mfly__side{ flex:0 0 250px; padding:10px 0; background:#fff;
  border-right:1px solid var(--taupe-15); }
body.kqt-chrome .mside{ display:flex; align-items:center; gap:10px;
  padding:10px 16px 10px 18px; font-size:13.5px; font-weight:600; color:var(--ink-2);
  border-left:3px solid transparent;
  transition:background .15s, color .15s, border-color .15s; }
body.kqt-chrome .mside .gicon{ width:20px; height:20px; flex:none; stroke:var(--gold-dark);
  fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
body.kqt-chrome .mside span{ flex:1; }
body.kqt-chrome .mside .mchev{ width:13px; height:13px; flex:none; stroke:var(--ink-3);
  fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; opacity:.55;
  transition:stroke .15s, opacity .15s; }
body.kqt-chrome .mside.is-active{ background:#FBF6EA; border-left-color:var(--gold);
  color:var(--gold-dark); }
body.kqt-chrome .mside.is-active .mchev{ stroke:var(--gold-dark); opacity:1; }
body.kqt-chrome .mfly__panels{ flex:1; min-width:0; padding:16px 22px 18px; }
body.kqt-chrome .mpanel{ display:none; }
body.kqt-chrome .mpanel.is-active{ display:block; }

/* Banner kem + thẻ 3 cam kết */
body.kqt-chrome .mpanel__top{ display:flex; gap:14px; }
body.kqt-chrome .mban{ flex:1; min-width:0; position:relative; display:flex;
  align-items:center; padding:18px 176px 18px 22px; border-radius:var(--radius-lg);
  overflow:hidden;
  background:linear-gradient(100deg,#FBF6EA 0%,#F4EBD8 55%,#EFE2C6 100%); }
body.kqt-chrome .mban__txt{ position:relative; z-index:1; display:block; }
body.kqt-chrome .mban__eyebrow{ display:block; font-size:10.5px; font-weight:700;
  letter-spacing:.16em; text-transform:uppercase; color:var(--gold-dark); }
body.kqt-chrome .mban__title{ display:block; font-family:var(--serif); font-size:19px;
  line-height:1.3; font-weight:700; color:var(--navy); margin-top:6px; }
body.kqt-chrome .mban__title em{ font-style:normal; display:block; }
body.kqt-chrome .mban__cta{ display:inline-flex; align-items:center; gap:8px;
  margin-top:12px; padding:8px 16px; border-radius:999px; background:var(--gold-grad);
  color:#2A2008; font-size:12px; font-weight:700; transition:gap .2s var(--ease); }
body.kqt-chrome .mban:hover .mban__cta{ gap:13px; }
body.kqt-chrome .mban__cta svg,
body.kqt-chrome .mpromo__cta svg,
body.kqt-chrome .mbrand--all svg{ width:14px; height:14px; stroke:currentColor; fill:none;
  stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
/* Thumbnail danh mục là JPG nền TRẮNG — thả trần lên nền kem là lộ mảng trắng thô.
   Đóng khung trắng có viền cho ra dáng thẻ ảnh chủ ý (cùng ngôn ngữ .mbrand). */
body.kqt-chrome .mban__img{ position:absolute; right:14px; top:10px; bottom:10px;
  z-index:0; height:calc(100% - 20px); width:150px; object-fit:contain;
  background:#fff; border:1px solid var(--taupe-15); border-radius:6px; padding:6px; }
/* Ảnh NGANG rộng (tỷ lệ ≥2.5:1, chọn trong admin Menu KQT) tràn làm NỀN cả banner —
   loại ảnh chụp sẵn bố cục chừa trống bên trái cho chữ. Ảnh vuông vẫn ô trắng như trên. */
body.kqt-chrome .mban--nen .mban__img{ left:0; right:0; top:0; bottom:0;
  height:100%; width:100%; object-fit:cover; object-position:right center;
  background:none; border:0; border-radius:0; padding:0; }
body.kqt-chrome .musp{ flex:0 0 250px; padding:14px 16px; border-radius:var(--radius-lg);
  background:#FBF6EA; border:1px solid var(--taupe-15);
  display:flex; flex-direction:column; justify-content:center; gap:11px; }
body.kqt-chrome .musp__item{ display:flex; align-items:flex-start; gap:10px; }
body.kqt-chrome .musp__item svg{ width:18px; height:18px; flex:none; margin-top:1px;
  stroke:var(--gold-dark); fill:none; stroke-width:1.7; stroke-linecap:round;
  stroke-linejoin:round; }
body.kqt-chrome .musp__item span{ display:block; font-size:11.5px; line-height:1.45;
  color:var(--ink-2); }
body.kqt-chrome .musp__item b{ display:block; font-size:12.5px; color:var(--navy); }

/* Hàng dưới: lưới logo thương hiệu + cột link + thẻ nổi bật "Khác" */
body.kqt-chrome .mpanel__cols{ display:flex; gap:22px; margin-top:16px; }
body.kqt-chrome .mpanel__cols h6{ margin:0 0 9px; font-family:var(--sans); font-size:11px;
  font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--navy);
  padding-bottom:6px; border-bottom:1px solid var(--taupe-15); }
body.kqt-chrome .mcol{ flex:1; min-width:0; }
body.kqt-chrome .mcol--brands{ flex:0 0 270px; }
body.kqt-chrome .mbrands{ display:grid; grid-template-columns:1fr 1fr; gap:8px; }
body.kqt-chrome .mbrand{ display:flex; align-items:center; justify-content:center;
  height:46px; padding:6px 10px; border-radius:var(--radius-lg); background:#fff;
  border:1px solid var(--taupe-15); transition:border-color .2s, box-shadow .2s; }
body.kqt-chrome .mbrand:hover{ border-color:var(--gold);
  box-shadow:0 2px 10px rgba(15,27,45,.06); }
body.kqt-chrome .mbrand img{ max-width:82%; max-height:30px; width:auto; height:auto;
  object-fit:contain; }
body.kqt-chrome .mbrand--all{ gap:7px; font-size:11.5px; font-weight:700;
  letter-spacing:.06em; text-transform:uppercase; color:var(--gold-dark); }
body.kqt-chrome .mcol--khac{ flex:0 0 240px; }
body.kqt-chrome .mpromo{ position:relative; display:block; padding:14px 92px 14px 14px;
  border-radius:var(--radius-lg); background:#FBF6EA; border:1px solid var(--taupe-15);
  overflow:hidden; min-height:118px; }
body.kqt-chrome .mpromo__ten{ display:block; font-family:var(--serif); font-size:15.5px;
  font-weight:700; color:var(--navy); }
body.kqt-chrome .mpromo__mota{ display:block; font-size:11.5px; line-height:1.5;
  color:var(--ink-2); margin-top:5px; }
body.kqt-chrome .mpromo__cta{ display:inline-flex; align-items:center; gap:7px;
  margin-top:10px; font-size:11.5px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; color:var(--gold-dark); transition:gap .2s var(--ease); }
body.kqt-chrome .mpromo:hover .mpromo__cta{ gap:12px; }
body.kqt-chrome .mpromo__img{ position:absolute; right:8px; top:8px; bottom:8px;
  width:78px; height:calc(100% - 16px); object-fit:contain;
  background:#fff; border:1px solid var(--taupe-15); border-radius:6px; padding:4px; }

/* ---------- Flyout BẾP (mega--fly-bep) — mockup 2026-09-25 bản 3 ----------
   Dùng chung KHUNG .mega--fly ở trên (cột trái/.mside, cơ chế .mpanel.is-active);
   dưới đây chỉ là phần ruột panel riêng của menu bếp: banner thêm dòng mô tả (không
   eyebrow), 3 cột link tiêu đề vàng kèm icon, hàng logo hãng ngang, thanh phải 2 thẻ
   (navy "cao cấp" + combo kem). Sửa gì phải sửa Y HỆT bản kqt-home trong
   kqt-inline.css — hai file loại trừ nhau theo is_front_page(). */
body.kqt-chrome .mega--fly-bep .mfly__panels{ padding:14px 20px 16px; }
body.kqt-chrome .mega--fly-bep .mpanel.is-active{ display:flex; gap:16px; }
body.kqt-chrome .bmain{ flex:1; min-width:0; }
body.kqt-chrome .mega--fly-bep .mban{ padding:16px 170px 16px 20px; }
body.kqt-chrome .mban__desc{ display:block; margin-top:5px; font-size:12.5px;
  line-height:1.5; color:var(--ink-2); }
/* Banner bếp không có eyebrow phía trên tiêu đề nên bỏ khoảng đệm thừa */
body.kqt-chrome .mega--fly-bep .mban__title{ margin-top:0; }

/* 3 cột link: tiêu đề vàng đậm kèm icon — khác h6 navy của .mpanel__cols bên vệ sinh */
body.kqt-chrome .bcols{ display:flex; gap:20px; margin-top:14px; }
body.kqt-chrome .bcol{ flex:1; min-width:0; }
body.kqt-chrome .bh6{ display:flex; align-items:center; gap:7px; margin:0 0 7px;
  font-family:var(--sans); font-size:11px; font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--gold-dark);
  padding-bottom:6px; border-bottom:1px solid var(--taupe-15); }
body.kqt-chrome .bh6 svg{ width:15px; height:15px; flex:none; stroke:var(--gold-dark);
  fill:none; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
body.kqt-chrome .bh6--sau{ margin-top:12px; }

/* Hàng logo hãng ngang — thẻ .mbrand dùng lại, chỉ ép bề ngang cố định */
body.kqt-chrome .bbrandrow{ margin-top:14px; padding-top:12px;
  border-top:1px solid var(--taupe-15); }
body.kqt-chrome .bbrandrow .bh6{ border-bottom:0; padding-bottom:0; margin-bottom:8px; }
body.kqt-chrome .bbrandrow__list{ display:flex; flex-wrap:wrap; gap:8px; }
body.kqt-chrome .bbrandrow .mbrand{ flex:0 0 88px; height:38px; padding:5px 8px; }

/* Thanh phải: thẻ navy "cao cấp" (nút vàng dùng lại .mban__cta) + thẻ combo kem */
body.kqt-chrome .brail{ flex:0 0 232px; display:flex; flex-direction:column; gap:12px; }
body.kqt-chrome .brail__dark{ display:block; padding:16px; border-radius:var(--radius-lg);
  background:linear-gradient(155deg,#1B2C47 0%,var(--navy) 75%);
  border:1px solid rgba(214,169,78,.35); transition:border-color .2s; }
body.kqt-chrome .brail__dark:hover{ border-color:var(--gold); }
body.kqt-chrome .brail__ten{ display:block; font-family:var(--serif); font-size:17px;
  line-height:1.25; font-weight:700; color:var(--gold); }
body.kqt-chrome .brail__mota{ display:block; margin-top:3px; font-size:12px;
  color:rgba(255,255,255,.7); }
body.kqt-chrome .brail__usp{ display:flex; flex-direction:column; gap:6px; margin-top:11px; }
body.kqt-chrome .brail__usp > span{ display:flex; align-items:center; gap:7px;
  font-size:12.5px; color:rgba(255,255,255,.92); }
body.kqt-chrome .brail__usp svg{ width:14px; height:14px; flex:none; stroke:var(--gold);
  fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
body.kqt-chrome .brail__dark .mban__cta{ margin-top:13px; }
body.kqt-chrome .brail__combo{ display:block; padding:14px 16px;
  border-radius:var(--radius-lg); background:#FBF6EA; border:1px solid var(--taupe-15); }
body.kqt-chrome .brail__combo-ten{ display:block; font-family:var(--serif);
  font-size:15.5px; line-height:1.3; font-weight:700; color:var(--navy); }
body.kqt-chrome .brail__combo-mota{ display:block; margin-top:4px; font-size:11.5px;
  line-height:1.5; color:var(--ink-2); }
body.kqt-chrome .brail__combo-cta{ display:inline-flex; align-items:center; gap:7px;
  margin-top:9px; font-size:11.5px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; color:var(--gold-dark); transition:gap .2s var(--ease); }
body.kqt-chrome .brail__combo:hover .brail__combo-cta{ gap:12px; }
body.kqt-chrome .brail__combo-cta svg{ width:14px; height:14px; stroke:currentColor;
  fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }

/* ---------- Mobile menu ---------- */
body.kqt-chrome .mobilemenu{ display:none; flex-direction:column; padding:14px var(--gutter) 26px;
  border-top:1px solid var(--taupe-10); background:var(--white); max-height:0; overflow:hidden; }
/* Nhốt vào @media ≤1200 (2026-09-29, lệnh "chuyển mobile xong về lại PC thì menu nó
 * lại thế này?"): class is-open gắn lúc đang ở khổ hẹp KHÔNG tự rụng khi kéo rộng cửa
 * sổ, mà trên PC hamburger đã ẩn (navtoggle chỉ hiện ≤1200) nên không còn nút nào gỡ
 * nó — menu kẹt mở, trải dài hết bề ngang dưới thanh nav PC. Mốc 1201 khớp đúng mốc
 * ẩn/hiện .mainnav/.navtoggle bên dưới. JS cũng tự gỡ is-open khi vượt mốc (kqt.js)
 * — CSS chặn HIỂN THỊ, JS dọn TRẠNG THÁI, thiếu một trong hai đều hở. */
@media (max-width:1200px){
  body.kqt-chrome .mobilemenu.is-open{ display:flex; max-height:80vh; overflow-y:auto; }
}
/* text-transform:none TƯỜNG MINH (2026-09-29): .mm-acc là <button> nên dính luật nền
 * Flatsome `button{ text-transform:uppercase }` — chữ trong markup vốn thường
 * ("Thiết bị vệ sinh") nhưng lên màn hình thành HOA HẾT, lệch hẳn menu PC vừa hạ
 * sentence-case cùng ngày. .mm-link là <a> không dính, nhưng khai chung cho chắc:
 * hai loại mục này đứng cạnh nhau trong cùng một danh sách, phải cùng một giọng chữ. */
body.kqt-chrome .mobilemenu .mm-link, body.kqt-chrome .mm-acc{ display:flex; align-items:center; justify-content:space-between;
  width:100%; padding:15px 2px; font-size:16px; font-weight:600; color:var(--navy);
  border-bottom:1px solid var(--taupe-10); text-align:left; text-transform:none; }
body.kqt-chrome .mm-acc .chev{ width:18px; height:18px; stroke:var(--gold-dark); fill:none; stroke-width:2;
  stroke-linecap:round; stroke-linejoin:round; transition:transform .25s var(--ease); }
body.kqt-chrome .mm-group.is-open .mm-acc .chev{ transform:rotate(180deg); }
body.kqt-chrome .mm-sub{ max-height:0; overflow:hidden; transition:max-height .3s var(--ease); }
/* 340px chỉ đủ 5 dòng của menu cũ. Nhóm "Thiết bị vệ sinh" nay 59 dòng (9 tiêu đề + 49 mục
 * + 1 dòng "xem tất cả"), ĐO THẬT được 2.719px — để trần cũ thì cụt mất bốn phần năm.
 *
 * Vì sao đặt hẳn 6000px chứ không phải con số vừa khít: max-height chỉ CHẶN TRÊN, nó
 * không kéo hộp cao ra. Mở ra thì hộp vẫn đúng 2.719px, đặt trần 6000 hay 2800 đều cho ra
 * một chiều cao như nhau — khác biệt duy nhất là nhịp chạy của hiệu ứng trượt. Đổi lại,
 * trần dư thì sau này thêm danh mục, hay chữ xuống dòng trên máy hẹp, menu KHÔNG BAO GIỜ
 * bị cắt cụt nữa. Trần khít mới là cái bẫy: nó im lặng nuốt mất mấy mục cuối.
 * (.mobilemenu.is-open đã có max-height:80vh + overflow-y:auto nên vẫn cuộn bình thường.) */
body.kqt-chrome .mm-group.is-open .mm-sub{ max-height:6000px; }
body.kqt-chrome .mm-sub a{ display:block; padding:11px 2px 11px 16px; font-size:14.5px; color:var(--ink-2);
  border-bottom:1px solid var(--taupe-10); }
body.kqt-chrome .mm-sub a:hover{ color:var(--gold-dark); }
/* Tiêu đề nhóm trong menu điện thoại — cũng là link tới danh mục cấp 2, trừ nhóm Combo
   do mình tự gom nên không có trang riêng (dùng <span>). (Markup .mm-subh đã được
   thay bằng accordion .mm-g2 bên dưới 2026-09-29; giữ rule vì .mm-subh còn dùng
   được cho danh sách phẳng nếu sau này cần quay lại.) */
body.kqt-chrome .mm-subh{ display:block; padding:13px 2px 8px; font-size:11.5px; font-weight:700;
  letter-spacing:.1em; text-transform:uppercase; color:var(--navy);
  border-bottom:1px solid var(--taupe-15); }
body.kqt-chrome .mm-subh--tro{ color:var(--taupe); }

/* ---- Menu điện thoại TẦNG 2 (2026-09-29, lệnh "PC là mega menu mà? sao mobile xấu
 * và đơn giản vậy") — mỗi nhóm danh mục thành một accordion con lặp lại cột trái
 * mega menu PC: icon vàng + tên + chevron; mở ra thì danh sách con nép sau VẠCH VÀNG
 * trái — chính là "vạch vàng nhóm active" của .mside trên PC dịch sang mobile.
 * .mm-acc2 là <button> nên PHẢI text-transform:none tường minh (bẫy Flatsome
 * `button{uppercase}` — đúng vết .mm-acc vừa vá sáng nay).
 * .mm-sub2 a phải ghi đè `.mm-sub a` (nó vẫn là hậu duệ của .mm-sub nên ăn cả 2 rule,
 * cùng đặc hiệu → nguồn sau thắng): bỏ border-bottom kẻo mỗi dòng con 2 gạch. */
body.kqt-chrome .mm-g2{ border-bottom:1px solid var(--taupe-10); }
body.kqt-chrome .mm-g2:last-child{ border-bottom:0; }
/* Neo .mobilemenu (0,3,1): rule reset `body.kqt-chrome .header button{font-size:inherit}`
   là (0,2,2) — đè được selector 1 class bất kể thứ tự, chữ 15px bị inherit thành 16px
   (đo CDP 2026-09-29 mới lòi, trang chủ thoát oan vì kqt-inline reset kiểu khác). */
body.kqt-chrome .mobilemenu .mm-acc2{ display:flex; align-items:center; gap:12px; width:100%;
  padding:13px 2px; font-size:15px; font-weight:600; color:var(--navy);
  text-align:left; text-transform:none; background:none; }
body.kqt-chrome .mm-gicon{ width:22px; height:22px; flex:none; stroke:var(--gold-dark);
  fill:none; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }
body.kqt-chrome .mm-acc2 .chev{ margin-left:auto; width:16px; height:16px; flex:none;
  stroke:var(--taupe); fill:none; stroke-width:2; stroke-linecap:round;
  stroke-linejoin:round; transition:transform .25s var(--ease); }
body.kqt-chrome .mm-g2.is-open > .mm-acc2{ color:var(--gold-dark); }
body.kqt-chrome .mm-g2.is-open > .mm-acc2 .chev{ transform:rotate(180deg); stroke:var(--gold-dark); }
body.kqt-chrome .mm-sub2{ max-height:0; overflow:hidden; margin-left:10px; padding-left:20px;
  border-left:2px solid var(--gold-dark); transition:max-height .3s var(--ease); }
/* Trần dư hẳn — cùng lý do trần 6000px của .mm-sub: max-height chỉ CHẶN TRÊN, trần
   khít mới là bẫy nuốt mục cuối. Nhóm to nhất (Bồn cầu 15 dòng) ~640px. */
body.kqt-chrome .mm-g2.is-open > .mm-sub2{ max-height:2000px; }
body.kqt-chrome .mm-sub2 a{ display:block; padding:9px 2px; font-size:14px;
  color:var(--ink-2); border-bottom:0; }
body.kqt-chrome .mm-sub2 a:hover{ color:var(--gold-dark); }
/* Neo thêm .mm-sub2/.mm-sub vào selector: hai link này vẫn là hậu duệ .mm-sub nên
   `.mm-sub a` (0,2,2) đè được rule chỉ 1 class (0,2,1) bất kể thứ tự nguồn —
   phải lên (0,3,1) mới thắng chắc. */
body.kqt-chrome .mm-sub2 .mm-sub2__all{ display:flex; align-items:center; gap:7px;
  font-weight:600; color:var(--gold-dark); }
body.kqt-chrome .mm-sub2__all svg, body.kqt-chrome .mm-suball svg{ width:14px; height:14px;
  flex:none; stroke:currentColor; fill:none; stroke-width:2; stroke-linecap:round;
  stroke-linejoin:round; }
/* Dòng chốt "Xem tất cả thiết bị vệ sinh/bếp" cuối mỗi tầng 1 — giữ border-bottom
   thừa hưởng từ `.mm-sub a`, chỉ nắn chữ + mũi tên. */
body.kqt-chrome .mm-sub .mm-suball{ display:flex; align-items:center; gap:7px; padding:13px 2px;
  font-size:14.5px; font-weight:600; color:var(--navy); }
body.kqt-chrome .mm-sub .mm-suball:hover{ color:var(--gold-dark); }

/* ============================================================
   FOOTER
   ============================================================ */
body.kqt-chrome .footer{ background:var(--navy); color:var(--on-navy-2); padding-block:72px 32px; }
body.kqt-chrome .footer__top{ display:grid; grid-template-columns:1.4fr 1fr 1fr 1fr; gap:40px; }
body.kqt-chrome .footer h5{ font-family:var(--sans); font-size:12px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--gold-light); margin:0 0 18px; }
body.kqt-chrome .footer a{ display:block; padding:7px 0; font-size:14px; transition:color .2s; }
body.kqt-chrome .footer a:hover{ color:var(--on-navy); }
body.kqt-chrome .footer__brand .brand__name{ color:var(--on-navy); }
body.kqt-chrome .footer__bottom{ display:flex; justify-content:space-between; gap:20px;
  margin-top:54px; padding-top:24px; border-top:1px solid rgba(244,241,234,.12);
  font-size:13px; flex-wrap:wrap; }

/* ============================================================
   CART DRAWER
   ============================================================ */
body.kqt-chrome .drawer-scrim{ position:fixed; inset:0; z-index:90; background:var(--navy-80);
  backdrop-filter:blur(3px); opacity:0; visibility:hidden; transition:.3s; }
body.kqt-chrome .drawer-scrim.is-open{ opacity:1; visibility:visible; }
/* Phải dùng #cart, KHÔNG dùng .cart: WooCommerce xuất form mua hàng là
   <form class="cart"> nên selector .cart sẽ đẩy luôn nút Thêm vào giỏ ra ngoài màn hình. */
body.kqt-chrome #cart{ position:fixed; top:0; right:0; z-index:91; height:100%; width:min(440px,92vw);
  background:var(--white); display:flex; flex-direction:column;
  transform:translateX(100%); transition:transform .38s var(--ease);
  box-shadow:-30px 0 60px -30px rgba(15,27,45,.4); }
body.kqt-chrome #cart.is-open{ transform:none; }
body.kqt-chrome .cart__head{ display:flex; align-items:center; justify-content:space-between;
  padding:22px 24px; border-bottom:1px solid var(--taupe-15); }
body.kqt-chrome .cart__head h3{ font-size:20px; }
body.kqt-chrome .freebar{ padding:16px 24px; background:var(--cream); border-bottom:1px solid var(--taupe-10); }
body.kqt-chrome .freebar p{ font-size:13px; color:var(--ink-2); margin-bottom:9px; }
body.kqt-chrome .freebar b{ color:var(--gold-dark); }
body.kqt-chrome .freebar__track{ height:7px; background:var(--cream-2); border-radius:999px; overflow:hidden; }
body.kqt-chrome .freebar__fill{ height:100%; width:72%; background:var(--gold-grad); border-radius:999px; }
body.kqt-chrome .cart__body{ flex:1; overflow:auto; padding:8px 24px; }
/* minmax(0,1fr) chứ không phải 1fr: cột tên sản phẩm mặc định không co nhỏ hơn
   từ dài nhất của nó, nên giá 9 chữ số (187.606.800₫) bị đẩy lòi khỏi ngăn kéo. */
body.kqt-chrome .cart-item{ display:grid; grid-template-columns:64px minmax(0,1fr) auto; gap:14px;
  padding:16px 0; border-bottom:1px solid var(--taupe-10); align-items:center; }
body.kqt-chrome .cart-item .ph{ width:64px; height:64px; border-radius:var(--radius); border:1px solid var(--taupe-10); }
body.kqt-chrome .cart-item .ci-name{ font-size:14px; font-weight:600; color:var(--ink); line-height:1.3; }
body.kqt-chrome .cart-item .ci-meta{ font-size:12px; color:var(--ink-3); margin-top:3px; }
body.kqt-chrome .cart-item .ci-price{ font-size:14px; font-weight:700; color:var(--navy); white-space:nowrap; }
body.kqt-chrome .cart__addons{ padding:18px 24px; border-top:1px solid var(--taupe-15); background:var(--cream); }
body.kqt-chrome .cart__addons h4{ font-family:var(--sans); font-size:12px; letter-spacing:.12em;
  text-transform:uppercase; color:var(--taupe); margin:0 0 12px; }
body.kqt-chrome .addon{ display:flex; align-items:center; gap:12px; padding:10px 0; }
body.kqt-chrome .addon .ph{ width:44px; height:44px; border-radius:4px; flex:none; }
body.kqt-chrome .addon__name{ flex:1; font-size:13px; line-height:1.3; }
body.kqt-chrome .addon__name b{ display:block; color:var(--ink); }
body.kqt-chrome .addon__name span{ color:var(--ink-3); }
body.kqt-chrome .addon button{ display:inline-flex; align-items:center; gap:6px; color:var(--gold-dark); font-size:12px; font-weight:700; }
body.kqt-chrome .cart__foot{ padding:20px 24px 26px; border-top:1px solid var(--taupe-15); }
body.kqt-chrome .cart__total{ display:flex; justify-content:space-between; align-items:baseline; margin-bottom:16px; }
body.kqt-chrome .cart__total .lbl{ font-size:13px; color:var(--ink-3); text-transform:uppercase; letter-spacing:.1em; }
body.kqt-chrome .cart__total .amt{ font-family:var(--serif); font-size:28px; font-weight:800; color:var(--navy); }

/* ============================================================
   STICKY MOBILE CHECKOUT
   ============================================================ */
body.kqt-chrome .mbar{ position:fixed; left:0; right:0; bottom:0; z-index:70; display:none;
  align-items:center; gap:14px; padding:11px 16px calc(11px + env(safe-area-inset-bottom));
  background:var(--navy); color:var(--on-navy); box-shadow:0 -14px 30px -20px rgba(0,0,0,.6); }
body.kqt-chrome .mbar__total small{ display:block; font-size:11px; color:var(--on-navy-2); letter-spacing:.08em; }
body.kqt-chrome .mbar__total b{ font-family:var(--serif); font-size:20px; }
/* Quyết 2026-09-15: "chữ đen thui, ẩn với nền luôn" — kqt_cart_subtotal_html()
   trả HTML giá của WooCommerce, bọc số tiền trong <span class="woocommerce-
   Price-amount amount">. Flatsome có sẵn luật "span.amount{ color:#111 }"
   (flatsome-shop.css) — chọn (thẻ+lớp) nặng hơn kiểu thừa hưởng màu từ
   .mbar nên số tiền bị ép về đen, chìm vào nền navy của thanh mbar. Nạp
   lại đúng màu sáng, .woocommerce-Price-currencySymbol ăn theo vì nó chỉ
   thừa hưởng chứ không có luật riêng. */
body.kqt-chrome .mbar__total .woocommerce-Price-amount{ color:inherit; }
body.kqt-chrome .mbar .btn{ flex:1; min-height:48px; }

/* ---------- fly-to-cart dot ---------- */
body.kqt-chrome .fly-dot{ position:fixed; z-index:95; width:18px; height:18px; border-radius:50%;
  background:var(--gold-grad); box-shadow:var(--shadow-gold); pointer-events:none;
  transition:transform .7s cubic-bezier(.5,-.3,.4,1), opacity .7s; }

/* ---------- responsive chrome ---------- */

/* Mốc giấu THANH MENU NGANG là 1200px, KHÔNG phải 860px như phần header còn lại.
   Hai mốc khác nhau là cố ý — đừng gộp về một số cho gọn.
   Số đo 2026-09-04 (đo trong iframe, không đo bằng ảnh chụp):
     7 mục menu cần CỨNG 976px (white-space:nowrap, không co được)
     + khe 20px + nút hotline 147px            = 1143px
     + hai bên lề 2×40px                       = 1223px mới đủ chỗ.
   Dưới mức đó thanh menu bị cắt và số hotline biến mất hẳn:
     w=1240 hotline 1038..1185 ok | w=1200 …1183 ok sát mép
     w=1160 CẮT | w=1024 CẮT | w=900 CẮT
   Tức là bản gốc để hở nguyên dải 861–1199px (iPad ngang, cửa sổ laptop chưa
   phóng to): thanh menu vẫn hiện nhưng cụt đuôi và mất hotline.
   Quyết chốt 2026-09-04: dải đó dùng nút hamburger. Menu di động (.mobilemenu)
   có đủ cả 7 mục nên không mất đường đi nào.
   CHỈ chuyển hai dòng này lên 1200px. Ô tìm kiếm, logo 44px, thanh .mbar đáy
   màn hình… vẫn giữ mốc 860px — tablet còn thừa chỗ cho ô tìm kiếm. */
@media (max-width:1200px){
  body.kqt-chrome .mainnav{ display:none; }
  body.kqt-chrome .navtoggle{ display:inline-flex; }
}

@media (max-width:980px){
  body.kqt-chrome .footer__top{ grid-template-columns:1fr 1fr; gap:34px; }
}
@media (max-width:860px){
  /* GIỮ Ô TÌM KIẾM trên tablet (2026-09-29, Quyết khoanh đỏ khoảng trống giữa
     logo và cụm nút). Trước đây .search{display:none} vứt hẳn ô đi từ 860px
     xuống — nhưng đo thật (kqt-inline.css khối cùng tên có số đo đầy đủ):
     @700 giữa header còn ~230px trống, thừa chỗ cho ô pill co giãn. Nên:
       · cột giữa minmax(0,1fr) — 0 để ô ĐƯỢC PHÉP co, không chống đẩy 2 bên;
       · ô hạ 46→40px, chữ 13px, giấu phím tắt kbd (bàn phím ảo không có "/").
     ≤560px pill VẪN SỐNG (Quyết bác kính lúp) — khối dưới moi chỗ cho nó. */
  body.kqt-chrome .header__row{ height:56px; grid-template-columns:auto minmax(0,1fr) auto; gap:12px; }
  body.kqt-chrome .search{ display:block; min-width:0; }
  body.kqt-chrome .search__field{ height:40px; padding:0 13px; gap:8px; }
  body.kqt-chrome .search__field input{ font-size:13px; }
  body.kqt-chrome .search__field kbd{ display:none; }
  body.kqt-chrome .brand__logo{ height:44px; }
  /* .mainnav / .navtoggle đã chuyển lên khối @media (max-width:1200px) ở trên —
     xem lý do + số đo ở đó. Đừng khai lại ở đây. */
  body.kqt-chrome .search-cols{ grid-template-columns:1fr; gap:30px; }
  body.kqt-chrome .mbar{ display:flex; }
  /* Chừa chỗ cho .mbar cố định dưới đáy, nếu không dòng cuối footer bị che vĩnh viễn. */
  body.kqt-chrome.kqt-has-mbar .footer{ padding-bottom:calc(32px + 92px + env(safe-area-inset-bottom)); }
  body.kqt-chrome .iconbtn--label span{ display:none; }
  body.kqt-chrome .iconbtn--label{ width:46px; padding:0; }
}
/* ≤560px: GIỮ Ô PILL THẬT (lệnh trực tiếp Quyết 2026-09-29, ĐÈ phương án kính
   lúp làm buổi sáng cùng ngày). Khe @390 vốn chỉ dư 12px nên moi chỗ 3 nguồn:
   ẩn nút TIM (nút chết, 0 JS bind) · logo clamp(34,10vw,44) · nút 46→42 + gap
   12→8 + ruột pill khép (padding 10). Ra số đo lại: pill 125px @390 · 104 @360,
   chỗ chữ 81/60px ≥ placeholder "Tìm kiếm" 57.5px (kqt.js đổi 3 nấc — đổi
   chữ/cỡ placeholder thì PHẢI đo lại, trình duyệt cắt lặng lẽ không ellipsis).
   Lưới giữ 3 cột thừa hưởng khối 860.
   Số đo + lý giải đầy đủ ở khối cùng tên bên kqt-inline.css (luật 2 file,
   sửa CẶP); khối này phải nằm SAU khối 860 để thắng source-order. */
@media (max-width:560px){
  body.kqt-chrome .brand__logo{ height:clamp(34px,10vw,44px); }
  body.kqt-chrome .header__row{ gap:8px; }
  body.kqt-chrome .iconbtn{ width:42px; height:42px; }
  body.kqt-chrome .search__field{ padding:0 10px; gap:6px; }
  body.kqt-chrome .iconbtn--yeuthich{ display:none; }
}
/* Máy hẹp: bỏ hẳn nút Showroom khỏi header. (2026-09-29 chiều: còn 2 nút
   GIỎ / MỞ MENU — tim đã ẩn từ ≤560, kính lúp bị Quyết bác nên không có;
   chỗ dôi ra nhường hết cho Ô PILL tìm kiếm ở giữa. Phép tính chỗ cũ dưới
   đây giữ làm sử liệu.)
   Phép tính chỗ, khổ 360px là khổ chật nhất còn dùng thật:
     ruột khung 305px = logo 132 + gap 12 + cụm nút.
   4 nút = 4×46 + 3×8 = 208 ⇒ tổng 352 > 305, tràn 47px và nút MỞ MENU là nút
   rơi ra ngoài đầu tiên — khách mở bằng điện thoại không bấm được menu.
   3 nút = 3×46 + 2×8 = 154 ⇒ tổng 298, vừa khít.
   Chọn bỏ Showroom vì nó KHÔNG mất đường đi: menu di động đã có mục "Showroom"
   (header.php dòng 368) và trang chủ có hẳn S16 Showroom. Bỏ nút giỏ hay nút
   menu thì mới là cắt đường của khách. */
@media (max-width:480px){
  body.kqt-chrome .nav-actions .iconbtn--label{ display:none; }
}

/* ---------- Thanh mua nhanh + giỏ hàng thật ----------
   .btn dùng chung có padding 30px + giãn chữ .12em cỡ desktop. Nhét vào nút rộng
   ~175px của thanh đáy thì chữ vỡ xuống 2–3 dòng, kéo thanh cao tới 115px. Giảm
   padding trong phạm vi .mbar là đủ để nhãn "MUA NGAY" nằm gọn 1 dòng từ màn 360px. */
body.kqt-chrome .mbar .btn{ padding:0 20px; }
body.kqt-chrome .mbar[hidden]{ display:none; }
body.kqt-chrome .cart__empty{ padding:28px 4px; text-align:center; color:var(--ink-3); font-size:14px; }

/* ---------- .kqt-sr — chữ CHỈ dành cho trình đọc màn hình + máy tìm kiếm ----------
   Vì sao cần: nút "Xem chi tiết" và mấy lớp link phủ toàn thẻ (.kqt-cardlink) không
   có chữ nào nói trang đích là món gì. aria-label giúp được trình đọc màn hình
   nhưng KHÔNG được tính là anchor text, nên với máy tìm kiếm mấy link ấy trống trơn
   hoặc chỉ mang chữ "Xem chi tiết". Đây là cách chữa chuẩn của WCAG cho nút "xem
   thêm", và chữ nhét vào luôn ĐÚNG BẰNG tên đang hiện ngay cạnh nút — không phải
   chữ giấu để nhồi từ khoá.

   KHÔNG dùng display:none hay visibility:hidden: hai cái đó ẩn với cả trình đọc màn
   hình. Cũng không dùng text-indent âm — nó vẫn chiếm dòng trong hộp flex. Khuôn
   clip 1px dưới đây là khuôn phổ thông, không ảnh hưởng chiều cao nút.
   white-space:nowrap để chữ dài không tự xuống dòng làm hộp 1px cao lên. */
.kqt-sr{
  position:absolute !important; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; border:0;
}

/* ============================================================
   TRANG GIỎ HÀNG (/cart/) — bảng sản phẩm tràn ra đè viền cột
   ------------------------------------------------------------
   2026-09-17, Quyết báo ảnh chụp: chữ đè lên đường kẻ dọc ngăn bảng
   sản phẩm với khối "TỔNG CỘNG GIỎ HÀNG". ĐO bằng iframe thật (giỏ:
   MW8301-130 SL5 + MW8235-170 SL1 + Bồn Cầu TOTO C971#XW/TCF9433A#NW1
   SL1, tổng 202.331.600đ — đúng dữ liệu trong ảnh):
   table.cart mặc định table-layout:auto, browser CỘNG max-content của
   6 cột (xoá 24 + ảnh 60 + tên 213 + giá 112 + SL 98 + tạm tính 112 =
   619,6px) rồi mới co — nhưng 4 cột giá/SL/tạm tính/xoá KHÔNG co được
   (nowrap) nên table không bao giờ hẹp hơn ~620px, trong khi cột cha
   (.large-7 trong .row-divided) bị trần "row-large" chặn ở ~587-617px
   suốt từ vw≈1100 tới 1920 (KHÔNG phình theo màn hình rộng hơn) →
   table tràn ra ngoài, đè thẳng lên border-left ngăn cách với "TỔNG
   CỘNG GIỎ HÀNG". Dưới vw≈1100 cột cha càng hẹp, tràn càng nặng (đo
   được tới -141px ở 860px, y hệt dải Quyết chụp).
   THỬ SAI ĐẦU TIÊN: ép table-layout:fixed + khai cứng bề rộng từng cột
   — SẬP vì <th class="product-name" colspan="3"> gộp chung 3 cột xoá+
   ảnh+tên làm MỘT ô ở hàng đầu; table-layout:fixed CHỈ đọc bề rộng cột
   từ hàng đầu tiên (thead), ô colspan không tự tách phần cho từng cột
   con dù td các hàng dưới có khai width riêng — 3 cột bị chia ĐỀU, cột
   tên chỉ còn 82,5px, vỡ chữ từng dòng "MOWOEN / MW8235 / -170".
   Chữa ĐÚNG: Flatsome tự bọc bảng trong <div class="cart-wrapper
   sm-touch-scroll"> — class này vốn để cuộn ngang trên mobile nhưng ở
   desktop đang overflow-x:visible (đo được) nên bảng cứ tràn thẳng ra
   ngoài khung đè lên viền/sidebar thay vì cuộn. Bật cuộn ngang ở MỌI
   khổ màn hình: bảng giữ nguyên tỉ lệ cột tự nhiên (không cột nào bị
   ép hẹp/vỡ chữ), chỉ hiện thanh cuộn khi nội dung thật sự rộng hơn
   khung — không còn tràn đè lên viền hay sidebar nữa.
   2026-09-17 (tiếp): Quyết báo cuộn ngang che mất số "Tạm tính" — muốn
   hiện đủ số, không cuộn. ĐO: khung `.cart-wrapper` bị trần "row-large"
   khoá cứng ở 588px từ vw≈1100 trở lên (không phình thêm dù màn hình
   rộng hơn), trong khi bảng cần 619,6px → thiếu đúng 32px. Không đụng
   table-layout:fixed nữa (đã CHỨNG MINH sập ở trên) mà bớt PHẦN ĐỆM
   thừa (padding ô + bề ngang nút tăng/giảm số lượng) — không đụng cỡ
   chữ/số liệu — để rút ~38px, dư 6-10px an toàn: ảnh đại diện 60→50px
   (khổ vuông nhỏ vẫn nhận diện được), đệm 2 bên ô giá/SL/tạm tính/tên
   7,2px→4-5px, nút -/+ 24→20px, ô nhập số 36→32px (vẫn đủ chỗ cho số
   2 chữ số — SL các mặt hàng ở đây chưa từng vượt 1-2 chữ số).
   CHỈ áp ≥850px cùng lý do ở trên (dưới mốc đó bảng đã là card xếp dọc,
   đụng width/padding cứng vào sẽ hỏng khối card). */
@media (min-width:850px){
  body.woocommerce-cart table.cart td.product-thumbnail,
  body.woocommerce-cart table.cart th.product-thumbnail{ width:50px; min-width:50px; padding-left:4px; padding-right:4px; }
  body.woocommerce-cart table.cart td.product-name,
  body.woocommerce-cart table.cart th.product-name{ padding-left:5px; padding-right:5px; }
  body.woocommerce-cart table.cart td.product-price,
  body.woocommerce-cart table.cart th.product-price{ padding-left:4px; padding-right:4px; }
  body.woocommerce-cart table.cart td.product-quantity,
  body.woocommerce-cart table.cart th.product-quantity{ padding-left:4px; padding-right:4px; }
  body.woocommerce-cart table.cart td.product-subtotal,
  body.woocommerce-cart table.cart th.product-subtotal{ padding-left:4px; }
  body.woocommerce-cart table.cart td.product-quantity .quantity .minus,
  body.woocommerce-cart table.cart td.product-quantity .quantity .plus{ width:20px; }
  body.woocommerce-cart table.cart td.product-quantity .quantity input.qty{ width:32px; }
}

/* ============================================================
   THÔNG BÁO THÀNH CÔNG (đặt hàng xong, thêm giỏ hàng, áp mã…) —
   màu xanh rêu mặc định không thuộc bảng màu thương hiệu
   ------------------------------------------------------------
   2026-09-17, Quyết báo ảnh chụp trang "Cảm ơn bạn, đơn hàng đã được
   nhận": chữ + viền trái đang rgb(98,125,71) — màu ".success-color"
   mặc định của Flatsome/WooCommerce, không nằm trong bất kỳ token nào
   ở inc/kqt-design-tokens.md (chỉ có navy/taupe/gold/ink). ĐO DOM thật:
   .woocommerce-thankyou-order-received (đoạn "Cảm ơn bạn…") và mọi
   .woocommerce-message/.woocommerce-notice--success khác trên site
   (thêm giỏ hàng, áp mã giảm giá…) đều dùng chung class ".success-color"
   nên cùng bị màu lạc tông này — sửa 1 chỗ cho đồng bộ toàn site thay
   vì chỉ riêng trang order-received.
   Chọn --navy làm màu thay thế (không chọn --gold): theo quy tắc 60-30-10
   trong design-tokens.md, gold chỉ dành cho ~10% accent (CTA/đường kẻ/
   logo), không dùng cho khối văn bản trạng thái; navy vừa là màu cấu
   trúc 30% của brand vừa đảm bảo tương phản AA trên nền trắng/kem. */
.woocommerce-message,
.woocommerce-notice--success,
.success-color,
.woocommerce-thankyou-order-received{
  color:var(--navy) !important;
  border-left-color:var(--navy) !important;
}
body.woocommerce-cart .cart-wrapper{ overflow-x:auto; max-width:100%; }

/* ============================================================
   M6 2026-09-25 — inline style="" header/footer/cart → class.
   Ban sao dong bo voi khoi M6 cuoi kqt-inline.css (trang chu) —
   2 file loai tru nhau theo is_front_page(), sua thi sua CA HAI.
   ============================================================ */
.mobilemenu .btn--block{ margin-top:16px; }
.footer__logo{ margin-bottom:18px; }
.footer__brand p{ font-size:14px; max-width:30ch; }
.cart__head h3 > span{ color:var(--ink-3); font-family:var(--sans); font-size:14px; font-weight:500; }
