/* ============================================================
   VIOSTORE — DESIGN SYSTEM
   Một file duy nhất. Không framework, không reset ngoài.
   ============================================================ */
:root{
  /* Brand — giữ vàng/đỏ của nhận diện cũ, đặt trên nền mực đậm */
  /* Bốn biến này bị inc/customizer.php ghi đè ở <head> theo lựa chọn trong
     Tuỳ biến. Giá trị dưới đây là mặc định, cũng là fallback khi xem file CSS
     ngoài WordPress (bản demo tĩnh). */
  --brand:#FFD400;
  --brand-rgb:255, 212, 0;
  --brand-ink:#0E1116;      /* chữ trên nền thương hiệu */
  --brand-600:#E6BE00;
  --brand-soft:#FFF8DB;
  --ink:#0E1116;
  --ink-2:#1A1F27;
  --ink-3:#2A313C;
  --price:#E11D2A;
  --price-600:#C2151F;      /* đỏ đậm — nền nút khi rê chuột */
  --price-rgb:225, 29, 42;
  --price-ink:#ffffff;      /* chữ trên nền giá */
  --price-soft:#FFF1F2;
  --ok:#0E9F6E;
  --ok-soft:#E7F7F1;
  --info:#1C64F2;
  --info-soft:#EBF2FE;

  --fg:#0E1116;
  --fg-2:#4B5563;
  --fg-3:#8A93A0;
  --line:#E7E9EE;
  --line-2:#F1F3F6;
  --bg:#F4F5F7;
  --card:#FFFFFF;

  --font:"Inter","Be Vietnam Pro","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;

  --r-sm:8px; --r:12px; --r-lg:16px; --r-xl:22px;
  --sh-1:0 1px 2px rgba(14,17,22,.06),0 1px 3px rgba(14,17,22,.05);
  --sh-2:0 4px 12px rgba(14,17,22,.08);
  --sh-3:0 12px 32px rgba(14,17,22,.12);

  --wrap:1240px;
  --gap:16px;
  --hdr-h:72px;
  --topbar-h:34px;         /* chiều cao thanh vàng — Tuỳ biến ghi đè, 24–56px.
                              Thanh chỉ MỘT hàng, nên đây cũng là tổng chiều cao;
                              mọi phần bù cho position:fixed dùng biến này. */
}

*{box-sizing:border-box}
html{
  margin:0;padding:0;
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%;
  scroll-behavior:smooth;
}
body{
  margin:0;padding:0;
  font-family:var(--font);
  background:var(--bg);
  color:var(--fg);
  font-size:15px;
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;           /* chặn tràn ngang trên mobile */
  min-width:0;
}
img,video,svg,iframe{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit;touch-action:manipulation}
ul{margin:0;padding:0;list-style:none}
h1,h2,h3,h4,h5{margin:0;letter-spacing:-.02em;overflow-wrap:anywhere}
p,li,td,th{overflow-wrap:anywhere}

/* Ô nhập ≥16px trên mobile — tránh iOS tự zoom khi focus */
input,select,textarea,button{font-size:inherit}
@media (max-width:860px){
  input[type=text],input[type=search],input[type=email],input[type=tel],
  input[type=number],input[type=password],select,textarea{font-size:16px !important}
}

.wrap{max-width:var(--wrap);margin:0 auto;padding:0 max(16px, env(safe-area-inset-left)) 0 max(16px, env(safe-area-inset-right))}
.page-pad{padding-top:18px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip:focus{position:fixed;top:8px;left:8px;width:auto;height:auto;clip:auto;z-index:999;
  background:var(--brand);color:#000;padding:10px 16px;border-radius:8px}

.muted{color:var(--fg-2)}
.tiny{font-size:12px}
.sm{font-size:13px}
.bold{font-weight:700}

/* ============================================================
   HEADER
   ============================================================ */
/* Thanh vàng DÍNH ĐỈNH MÀN HÌNH.
   Vì nó rời khỏi luồng, phải bù ba chỗ, thiếu chỗ nào là vỡ chỗ đó:
     1. body padding-top  — không thì nội dung chui xuống dưới thanh;
     2. .hdr top          — header sticky phải dừng NGAY DƯỚI topbar, không phải top:0;
     3. .catbar top (mobile) — cùng lý do, xem khối @media bên dưới.
   Chiều cao lấy từ --topbar-h chứ không viết số: Tuỳ biến cho đổi chiều cao
   topbar (24–56px), viết cứng là lệch ngay khi chủ shop chỉnh. */
.topbar{background:var(--brand);color:#1A1600;font-size:12.5px;font-weight:600;
  position:fixed;top:0;left:0;right:0;z-index:110}
body{padding-top:var(--topbar-h)}
/* Thanh admin của WordPress cũng position:fixed top:0 — không đẩy topbar xuống
   thì nó nằm đè lên nhau với người đang đăng nhập. */
body.admin-bar .topbar{top:32px}
/* MỘT HÀNG: SĐT (trái) · dãy ✓ cam kết · link + MXH (phải).
   `flex-wrap:nowrap` là bắt buộc, không phải cho đẹp: thanh đang `position:fixed`
   và phần bù (body padding, .hdr top, .catbar top) tính bằng hằng số
   --topbar-h. Cho nó xuống dòng là chiều cao thật đổi theo nội dung, lệch bao
   nhiêu che nội dung bấy nhiêu. Chật thì `.usps{overflow:hidden}` cắt bớt chữ,
   chứ tuyệt đối không được sinh hàng thứ hai. */
.topbar .wrap{display:flex;align-items:center;flex-wrap:nowrap;height:var(--topbar-h);gap:16px}
.topbar .usps{display:flex;align-items:center;gap:18px;overflow:hidden;min-width:0}
.topbar .usps span{white-space:nowrap}
.topbar-links{margin-left:auto;display:flex;gap:14px;white-space:nowrap}

/* Thanh không được xuống dòng, nên chật thì phải BỎ NGUYÊN MỤC, đừng để
   overflow cắt ngang chữ. Số đo thật ở 861px: cần 959px (99 SĐT + 388 cam kết +
   440 link + 32 gap) mà chỉ có 846px — thiếu 113px, hai mục cuối bị xén giữa chữ.
   Bề ngang từng mục: 102 / 128 / 77, gap 18.
     • đủ cả 3  cần ≳ 975px
     • bỏ mục 3 cần ≳ 880px
     • bỏ mục 2+3 thì luôn vừa
   Dùng nth-of-type chứ KHÔNG dùng nth-child: giữa các <span> còn có <i class=dot>
   nên nth-child đếm lệch. Ẩn span nào thì ẩn luôn dấu chấm đứng trước nó. */
@media (max-width:1000px){
  .topbar .usps span:nth-of-type(n+3),
  .topbar .usps i.dot:nth-of-type(n+2){display:none}
}
@media (max-width:900px){
  .topbar .usps span:nth-of-type(n+2),
  .topbar .usps i.dot{display:none}
}

/* SĐT + email. `flex:none` bắt buộc — xem 4.14: mọi con trực tiếp của
   `.topbar .wrap` (flex, có phần tử cuộn) đều phải chặn co, không thì nó bị bóp
   rồi tràn đè lên nhóm bên cạnh. */
.topbar-contact{display:flex;align-items:center;gap:16px;flex:none}
.topbar-contact .tbc{display:inline-flex;align-items:center;gap:6px;
  color:inherit;text-decoration:none;white-space:nowrap;font-weight:700}
.topbar-contact .tbc:hover{text-decoration:underline}
.topbar-contact .tbc-i{flex:none;color:var(--ink)}   /* icon đen */
.dot{width:5px;height:5px;border-radius:50%;background:#1A1600;opacity:.45;flex:none;align-self:center}

.hdr{background:var(--ink);color:#fff;position:sticky;top:var(--topbar-h);z-index:100}
.hdr .wrap{display:flex;align-items:center;gap:20px;min-height:var(--hdr-h)}

.logo{display:flex;align-items:center;gap:var(--logo-gap,10px);flex:none;color:inherit}
.logo .mark{width:var(--logo-mark,38px);height:var(--logo-mark,38px);border-radius:11px;background:var(--brand);color:var(--brand-ink,#0E1116);
  display:grid;place-items:center;font-weight:900;font-size:19px;letter-spacing:-.04em;flex:none}
.logo .txt{line-height:1.05;min-width:0}
.logo .txt b{display:block;font-size:19px;letter-spacing:-.02em}
.logo .txt small{display:block;font-size:10.5px;color:var(--brand);letter-spacing:.14em;text-transform:uppercase;font-weight:700}
.logo .logo-img,.logo img.custom-logo{height:var(--logo-h,40px);width:auto;max-width:var(--logo-mw,180px);object-fit:contain}
.logo .custom-logo-link{display:contents} /* tránh bọc link lồng trong .logo */
.logo-layout-stack{flex-direction:column}
.logo-align-center{align-items:center;text-align:center}

/* KHÔNG đặt tên class là .search: WordPress gắn sẵn class `search` vào <body>
   ở trang kết quả tìm kiếm, nên mọi luật .search sẽ đổ lên cả trang — cụ thể
   max-width:560px bóp toàn bộ site lại. Dùng .hsearch cho ô tìm ở header. */
.hsearch{flex:1;position:relative;max-width:560px}
.hsearch form{position:relative}
.hsearch input[type=search]{
  width:100%;height:44px;border-radius:var(--r);border:1.5px solid transparent;
  background:#fff;padding:0 68px 0 42px;font-size:14.5px;color:var(--fg);outline:none;
  -webkit-appearance:none;appearance:none;
}
.hsearch input::placeholder{color:var(--fg-3)}
.hsearch input:focus{border-color:var(--brand);box-shadow:0 0 0 4px rgba(255,212,0,.28)}
.hsearch .ico{position:absolute;left:13px;top:13px;color:var(--fg-3);z-index:1}
.hsearch .go{position:absolute;right:5px;top:5px;height:34px;padding:0 14px;border-radius:9px;
  background:var(--brand);color:#0E1116;font-weight:700;font-size:13px}

.hact{display:flex;align-items:center;gap:4px;margin-left:auto}
.hbtn{display:flex;align-items:center;gap:9px;padding:8px 12px;border-radius:var(--r);color:#E6E9EE;min-height:44px}
.hbtn:hover{background:var(--ink-2)}
.hbtn .l1{font-size:11px;color:#98A1AE;line-height:1.15;display:block}
.hbtn .l2{font-size:13.5px;font-weight:650;line-height:1.2;display:block}
.hbtn.call .l2{color:var(--brand)}

/* ---------- Thanh danh mục + mega menu ---------- */
.catbar{background:var(--ink-2);position:relative;z-index:90}
.catbar .wrap{display:flex;align-items:center;gap:2px;height:46px;overflow-x:auto;scrollbar-width:none}
.catbar .wrap::-webkit-scrollbar{display:none}
.cat{display:flex;align-items:center;gap:7px;height:34px;padding:0 13px;border-radius:9px;
  color:#D3D8E0;font-size:13.5px;font-weight:600;white-space:nowrap;flex:none}
.cat:hover,.cat.on{background:#333B48;color:#fff}
.cat.hot{color:var(--brand)}
/* Tab của trang đang xem: nền thương hiệu để phân biệt hẳn với .on (nút mega). */
.cat.current,.cat.current:hover{background:var(--brand);color:var(--brand-ink);font-weight:700}
.cat.current.hot{color:var(--brand-ink)}

/* flex:none bắt buộc — .catbar .wrap là flex cuộn ngang, tổng các mục (716px)
   rộng hơn màn hình điện thoại. Thiếu nó thì .mega-host co lại (126→99px) trong
   khi thẻ .cat bên trong giữ nguyên bề rộng, tràn ra 27px và đè lên mục kế tiếp
   — đúng cảnh chữ "Đồng hồ" nằm trên nền vàng của "Điện thoại". Các .cat khác
   đã có flex:none sẵn ở dưới. */
.mega-host{align-self:stretch;display:flex;align-items:center;position:static;flex:none}
.mega{
  position:absolute;left:0;right:0;top:100%;background:#fff;
  border-radius:0 0 var(--r-lg) var(--r-lg);box-shadow:var(--sh-3);
  padding:20px;display:none;grid-template-columns:220px 1fr 260px;gap:24px;
  max-width:var(--wrap);margin:0 auto;
}
.mega-host:hover .mega,.mega-host:focus-within .mega{display:grid}
/* Thanh đầu panel, nút mở dòng máy, nút quay lại: chỉ dùng ở mobile,
   nơi panel mở bằng chạm. Desktop giữ nguyên mega hover ba cột. */
.mega-head{display:none}
/* Mũi tên thì hiện ở CẢ hai: catbar có ba mục mega (Điện thoại · Đồng hồ ·
   Máy tính bảng) mà chỉ mục đầu có nền sáng, nên hai mục kia cần dấu hiệu
   khác để khách biết bấm/rê vào sẽ đổ menu hãng xuống. */
.cat-caret{display:none}
.cat.has-mega .cat-caret{display:block;margin-left:-2px;opacity:.7}
.brand-more{display:none}
.series-back{display:none}
.mega h5{margin:0 0 10px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--fg-3)}
.mega .brands li a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;font-weight:600;font-size:14px}
.mega .brands li a:hover,.mega .brands li.on a{background:var(--brand-soft)}
.mega .brands .n{margin-left:auto;font-size:11.5px;color:var(--fg-3);font-weight:500}
.mega .series-panel{display:none}
.mega .series-panel.on{display:block}
.mega .series{display:grid;grid-template-columns:repeat(3,1fr);gap:4px 18px;align-content:start}
.mega .series a{font-size:13.5px;color:var(--fg-2);padding:5px 0}
.mega .series a:hover{color:var(--price)}
.mega .series .serie-group{grid-column:1/-1;padding:6px 0 10px;border-bottom:1px solid var(--line,rgba(0,0,0,.06))}
.mega .series .serie-group:last-of-type{border-bottom:0}
.mega .series .serie-parent{display:block;font-weight:700;font-size:13.5px;color:var(--fg);padding:2px 0 6px}
.mega .series .serie-kids{display:grid;grid-template-columns:repeat(3,1fr);gap:2px 16px}
.mega .series .serie-kids a{font-size:13px;color:var(--fg-2)}
.mega .series .serie-all{grid-column:1/-1;font-weight:700;color:var(--price);margin-top:6px}
/* ---------- Nút mạng xã hội (topbar + footer) — viostore_social_html() ---------- */
/* Icon vẽ bằng fill:currentColor, nên đổi màu chỉ cần đặt `color` cho thẻ <a>. */
.vio-socials{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.vio-socials .soc{display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:999px;color:inherit;transition:background-color .15s,color .15s,opacity .15s}
.vio-socials .soc svg{display:block}
.vio-socials .soc:focus-visible{outline:2px solid currentColor;outline-offset:2px}
.vio-socials .soc-t{font-size:12px;font-weight:600;padding:0 6px}

/* Topbar: nền vàng, icon chìm; hover đổ nền đen cho rõ vùng bấm.
   `flex:none` cho cả hàng link lẫn dãy icon là bắt buộc: chỉ .usps được co.
   Thiếu nó, ở khoảng 861–1080px dãy icon là thứ duy nhất co được trong
   .topbar-links → bị bóp còn một cột 24px và 4 icon xếp dọc, tràn khỏi topbar. */
.topbar-links{flex:none}
.topbar-social{gap:4px;margin-left:6px;flex:none;flex-wrap:nowrap}
.topbar-social .soc{width:24px;height:24px;opacity:.75}
.topbar-social .soc:hover{background:var(--ink);color:var(--brand);opacity:1}

/* Footer: nút tròn nền mờ, hover đổi sang màu thương hiệu của từng mạng. */
.ft-social{margin-top:12px}
.ft-social .vio-socials-t{font-size:12px;font-weight:600;opacity:.7;margin-right:2px}
.ft-social .soc{width:36px;height:36px;background:rgba(255,255,255,.08)}
.ft-social .soc:hover{color:#fff}
.ft-social .soc-facebook:hover{background:#1877F2}
.ft-social .soc-tiktok:hover{background:#010101}
.ft-social .soc-youtube:hover{background:#FF0000}
.ft-social .soc-instagram:hover{background:#C13584}
/* KHÔNG đặt display ở đây. Luật này là (0,2,0), cao hơn `.promo` (0,1,0) ở
   khối hero bên dưới, nên `display:block` từng đè chết cả
   `display:flex` lẫn `flex-direction:column` + `justify-content:center`.
   Hậu quả: <b> và <span> là thẻ inline nên dính liền nhau trên một dòng
   ("Trả góp 0% qua thẻ Visa · Master · JCB…") và chữ không căn giữa ô.
   Thẻ <a> mang .promo vẫn là block-level nhờ chính display:flex đó. */
.hero-side .promo{text-decoration:none;color:inherit}
.hero-side a.promo:hover{filter:brightness(1.03)}
.mega .quick{background:var(--bg);border-radius:var(--r);padding:14px}
.mega .quick a{display:block;padding:8px 10px;border-radius:8px;font-size:13.5px;font-weight:600;
  background:#fff;margin-bottom:6px;box-shadow:var(--sh-1)}
.mega .quick a:hover{color:var(--price)}

/* ============================================================
   TRANG CHỦ — hero + trust
   ============================================================ */
.hero{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--gap);margin:16px 0}
.hero-main{
  position:relative;border-radius:var(--r-xl);overflow:hidden;color:#fff;padding:34px;
  background:radial-gradient(120% 130% at 80% 0%,#2B3442 0%,#0E1116 55%);
  min-height:288px;display:flex;flex-direction:column;justify-content:center;
}
.hero-main .glow{position:absolute;right:-60px;top:-40px;width:340px;height:340px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,212,0,.22),transparent 62%);pointer-events:none}
.hero-main .kicker{font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--brand)}
.hero-main h1{margin:8px 0 10px;font-size:34px;line-height:1.12;letter-spacing:-.03em;max-width:16ch}
.hero-main p{margin:0 0 18px;color:#B9C0CB;max-width:46ch;font-size:14.5px}
.hero-cta{display:flex;gap:10px;flex-wrap:wrap}
.cta{display:inline-flex;align-items:center;gap:8px;min-height:46px;padding:0 20px;border-radius:11px;
  background:var(--brand);color:#0E1116;font-weight:750;font-size:14.5px}
.cta.ghost{background:transparent;border:1.5px solid #3B4453;color:#fff}

.hero-side{display:flex;flex-direction:column;gap:var(--gap)}
.promo{flex:1;border-radius:var(--r-lg);padding:16px;display:flex;flex-direction:column;
  justify-content:center;box-shadow:var(--sh-1)}
.promo b{font-size:15px;letter-spacing:-.01em}
.promo span{font-size:12.5px;color:var(--fg-2)}
.promo.p1{background:linear-gradient(135deg,#FFE87A,#FFD400)}
.promo.p1 span{color:#7A6400}
.promo.p2{background:#fff}

.trust{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--gap);margin-bottom:8px}
.trust .t{background:#fff;border-radius:var(--r-lg);padding:14px;display:flex;gap:12px;
  align-items:center;box-shadow:var(--sh-1)}
.trust .t .ic{width:40px;height:40px;flex:none;border-radius:11px;background:var(--brand-soft);
  display:grid;place-items:center;color:#8A6D00}
.trust .t b{display:block;font-size:13.5px}
.trust .t span{font-size:12px;color:var(--fg-2)}

/* ============================================================
   BLOG / TRANG TĨNH / 404
   ============================================================ */
.page-title{font-size:24px;margin-bottom:14px}
.page-article{max-width:80ch}

.postgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--gap)}
.postcard{background:#fff;border-radius:var(--r-lg);padding:14px;box-shadow:var(--sh-1)}
.postthumb{border-radius:var(--r);overflow:hidden;margin-bottom:10px;aspect-ratio:16/9}
.postthumb img{width:100%;height:100%;object-fit:cover}
.postcard h2{font-size:15.5px;line-height:1.35;margin-bottom:6px}

.notfound{max-width:640px;margin:0 auto;text-align:center}
.notfound h1,.notfound h2{font-size:22px;margin-bottom:8px}
.search-404{margin:18px auto;max-width:420px}
.search-404 input[type=search]{border:1.5px solid var(--line)}
.notfound-cta{margin-top:16px}

/* ============================================================
   THẺ SẢN PHẨM
   ============================================================ */
.section{margin:24px 0}
.sec-head{display:flex;align-items:flex-end;gap:14px;margin-bottom:12px}
.sec-head h2{font-size:19px}
.sec-head .more{margin-left:auto;font-size:13.5px;font-weight:600;color:var(--info)}

ul.products,.grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(196px,1fr));gap:var(--gap);
  margin:0;padding:0;list-style:none;
}
.pcard{
  --pcard-pad:12px;--pcard-title:13.8px;
  background:var(--card);border-radius:var(--r-lg);padding:var(--pcard-pad);box-shadow:var(--sh-1);
  display:flex;flex-direction:column;position:relative;transition:box-shadow .18s,transform .18s;
}

/* ------------------------------------------------------------------
   Gỡ layout float mặc định của WooCommerce.

   woocommerce-layout.css vẫn được nạp (cart/checkout/account cần nó) và
   ép: li.product{float:left;width:22.05%;margin:0 3.8% 2.992em 0;padding:0}
   cùng li.product a img{height:auto;margin:0 0 1em}. Trong grid của theme,
   các % đó tính theo BỀ RỘNG Ô GRID chứ không phải cả hàng, nên thẻ co còn
   ~50px, mất padding và tụt hàng do margin-bottom 2.992em.

   Selector dưới đây cố ý viết trùng specificity với luật của Woo (0,3,2 /
   0,3,3); main.css nạp sau nên thắng. Giá trị thay đổi theo breakpoint và
   theo kiểu thẻ trong Customizer đi qua biến --pcard-* để các luật
   specificity thấp (.pcard, .vio-card-flat .pcard…) vẫn điều khiển được.
   ------------------------------------------------------------------ */
/* Clearfix ::before/::after của Woo trở thành GRID ITEM: chúng chiếm 2 ô đầu
   nên hàng đầu tiên bị đẩy sang cột 2 và sản phẩm cuối rớt xuống hàng dưới. */
.woocommerce ul.products::before,
.woocommerce ul.products::after,
.woocommerce-page ul.products::before,
.woocommerce-page ul.products::after{content:none;display:none}

.woocommerce ul.products li.product,
.woocommerce-page ul.products li.product{
  float:none;width:auto;margin:0;padding:var(--pcard-pad,12px);
}
.woocommerce ul.products li.product a img,
.woocommerce-page ul.products li.product a img{
  width:100%;height:100%;margin:0;display:block;object-fit:contain;padding:8px;
}
.woocommerce ul.products li.product h3,
.woocommerce-page ul.products li.product h3{
  padding:0;margin:0 0 8px;font-size:var(--pcard-title,13.8px);
}
.woocommerce ul.products li.product .price,
.woocommerce-page ul.products li.product .price{
  color:var(--price);font-size:17px;font-weight:800;margin:0;display:flex;
}
.woocommerce ul.products li.product .price del,
.woocommerce-page ul.products li.product .price del{opacity:1;display:inline;font-size:12.5px;color:var(--fg-3)}
.woocommerce ul.products li.product .price ins,
.woocommerce-page ul.products li.product .price ins{font-weight:800;text-decoration:none;color:var(--price)}
.pcard:hover{box-shadow:var(--sh-3);transform:translateY(-2px)}
.pcard .thumb{position:relative;aspect-ratio:1/1;border-radius:var(--r);overflow:hidden;
  background:linear-gradient(160deg,#F7F8FA,#EDEFF3);margin-bottom:10px}
.pcard .thumb img{width:100%;height:100%;object-fit:contain;padding:8px}
.flags{position:absolute;top:8px;left:8px;display:flex;flex-direction:column;gap:5px;align-items:flex-start;z-index:2}
.flag{font-size:10.5px;font-weight:800;letter-spacing:.02em;padding:3px 7px;border-radius:6px;text-transform:uppercase}
.f-new{background:var(--ok-soft);color:var(--ok)}
.f-like{background:var(--info-soft);color:var(--info)}
.f-sale{background:var(--price);color:#fff}
.f-seal{background:#F3E8FF;color:#7E22CE}

/* Tiêu đề thẻ: chiều cao CHỐT bằng bội số của line-height, không dùng
   min-height nữa.

   Bản cũ để `min-height:37px` trong khi một dòng cao 1.35em (≈18,6px ở
   13,8px, ≈15,6px ở 13px) — 37px không chia hết cho chiều cao dòng. Trên
   trình duyệt nào `-webkit-line-clamp` không ăn (Safari/iOS đang vậy,
   xem ảnh chụp iPhone ngày 2026-09-04) thì `overflow:hidden` cắt ngang
   THÂN chữ của dòng kế tiếp, để lộ nửa chữ trông như lỗi hiển thị.

   `height` = số dòng × line-height (đơn vị em nên tự co theo
   --pcard-title ở từng breakpoint) khiến cả hai trường hợp đều gọn:
   clamp ăn thì có dấu "…", clamp không ăn thì cắt đúng ranh giới dòng.
   Đồng thời mọi thẻ cao bằng nhau nên giá và nút "Mua ngay" thẳng hàng. */
.pcard h3{
  font-size:var(--pcard-title,13.8px);font-weight:650;line-height:1.35;margin:0 0 8px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2;
  overflow:hidden;height:2.7em; /* 2 dòng × 1.35 */
}
.specs{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:9px}
.spec{font-size:11px;font-weight:600;color:var(--fg-2);background:var(--line-2);border-radius:6px;padding:3px 6px}

/* Giá trong thẻ không bọc .price — filter giá của theme trả thẳng <del>/<ins>
   hoặc span amount của wc_price(). Nên đặt typography lên chính .price-row để
   mọi dạng markup đều hiển thị đúng. */
.price-row{
  display:flex;align-items:baseline;gap:7px;flex-wrap:wrap;margin-top:auto;
  font-size:17px;font-weight:800;color:var(--price);letter-spacing:-.02em;
}
.price-row .price,.pcard .price{
  font-size:17px;font-weight:800;color:var(--price);letter-spacing:-.02em;
  display:flex;align-items:baseline;gap:7px;flex-wrap:wrap;margin:0;
}
.price del,.price-row del{font-size:12.5px;color:var(--fg-3);font-weight:500;text-decoration:line-through}
.price ins,.price-row ins{text-decoration:none;color:var(--price)}
.price .from,.price small,.price-row small{font-size:11.5px;font-weight:500;color:var(--fg-3)}
.off{font-size:11px;font-weight:800;color:var(--price);background:var(--price-soft);border-radius:5px;padding:2px 5px}

.pcard .foot{margin-top:9px;padding-top:9px;border-top:1px dashed var(--line);
  display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--fg-2);flex-wrap:wrap}
.pcard .foot .sep{color:var(--line)}
.stars{position:relative;display:inline-block;line-height:1;letter-spacing:-.5px;font-size:11.5px;vertical-align:middle}
.stars-bg{color:#E5E7EB}
.stars-fill{position:absolute;left:0;top:0;overflow:hidden;white-space:nowrap;color:#F59E0B}
.rating .stars{font-size:13px}

/* Nút thêm vào giỏ trên thẻ */
.cardbtn{
  margin-top:9px;width:100%;min-height:38px;border-radius:10px;
  background:var(--ink);color:#fff;font-size:13px;font-weight:700;
  display:flex;align-items:center;justify-content:center;gap:6px;
}
.cardbtn:hover{background:var(--price)}
.cardbtn-opt{background:var(--price);border:1.5px solid var(--price);color:var(--price-ink)}
.cardbtn-opt:hover{background:var(--price-600);border-color:var(--price-600);color:var(--price-ink)}

/* Icon giỏ ở header */
.hbtn.cart{position:relative}
.hbtn.cart .badge{
  position:absolute;top:2px;left:24px;background:var(--price);color:#fff;
  font-size:10.5px;font-weight:700;min-width:17px;height:17px;border-radius:9px;
  display:grid;place-items:center;padding:0 4px;
}
.hbtn.cart .badge[hidden]{display:none}

/* Nút tài khoản ở header — chỉ icon, không nhãn (nhãn nằm trong .sr cho
   trình đọc màn hình). Ép vuông 44px để cùng chiều cao với các .hbtn khác. */
.hbtn-account{justify-content:center;padding:8px;min-width:44px;gap:0}

/* Toast xác nhận đã thêm vào giỏ */
.vio-toast{
  position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);
  background:var(--ink);color:#fff;padding:13px 18px;border-radius:12px;
  font-size:14px;font-weight:600;box-shadow:var(--sh-3);z-index:300;
  opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;max-width:92vw;
}
.vio-toast.on{opacity:1;transform:translate(-50%,0);pointer-events:auto}
.vio-toast a{color:var(--brand);text-decoration:underline;margin-left:6px}

/* ============================================================
   TRẢ GÓP & MUA TRƯỚC TRẢ SAU
   ============================================================ */
.paymethods{margin:0 0 16px}
.paymethods .lbl{font-size:12.5px;font-weight:700;margin-bottom:7px}
.payrow{display:flex;flex-direction:column;gap:8px}
.paybtn{
  border:1.5px solid var(--line);border-radius:11px;padding:10px 12px;text-align:left;
  display:grid;grid-template-columns:1fr auto;gap:2px 10px;align-items:baseline;min-height:44px;
}
.paybtn[hidden]{display:none}
.paybtn b{font-size:13.5px;font-weight:700;color:var(--fg)}
.paybtn .per{font-size:15px;font-weight:800;color:var(--price);grid-row:1;grid-column:2;white-space:nowrap}
.paybtn small{grid-column:1/-1;font-size:11.5px;color:var(--fg-3);font-weight:500}
.paybtn.on{border-color:var(--price);background:var(--price-soft)}
.paybtn:hover{border-color:var(--fg-3)}
.paybtn.on:hover{border-color:var(--price)}
.paynote{margin:8px 0 0}
.linkbtn{color:var(--info);font-weight:650;text-decoration:underline;font-size:12px;padding:0}
.linkbtn:hover{color:var(--price)}

/* ===== Cột nút nổi ở góc phải dưới ==================================
   Xếp từ đáy lên: nút chat → nút Facebook → nút lên đầu trang. Mọi mốc tính
   ngược từ MÉP TRÊN của nút chat (`--float-chat-top`), nên thêm/bớt nút ở giữa
   chỉ phải sửa một chỗ.

   Nút chat có hai kiểu và mình chỉ đặt được vị trí cho một:
   - khung chat 48app: `#mktwc-btn` do widget bên thứ ba dựng, đậu cứng ở
     bottom 80px / right 20px, cao 56px → mép trên 136px. Không sửa được, phải
     bám theo.
   - nút chat của theme (`.vio-chat`): bottom 16px, cao `--float-size`.

   `body.vio-chatapp` (PHP gắn khi có mã khung chat) chọn giữa hai bộ số.

   Cả ba nút cùng đường kính `--float-size` và cách nhau đúng `--float-gap`,
   nên cột nhìn thẳng hàng và đều nhau. */
:root{
  /* Ba nút trong cột đều cùng đường kính; đổi một chỗ là cả cột đổi theo. */
  --float-size:56px;
  --float-chat-top:calc(16px + var(--float-size));
  --float-right:16px;
  --float-gap:12px;
}
body.vio-chatapp{--float-chat-top:136px;--float-right:20px}

/* Nút chat nổi */
.vio-chat{
  position:fixed;right:16px;bottom:16px;z-index:130;
  display:flex;align-items:center;gap:8px;height:var(--float-size);padding:0 16px;border-radius:999px;
  background:var(--info);color:#fff;font-weight:700;font-size:14px;box-shadow:var(--sh-3);
}
.vio-chat:hover{filter:brightness(1.08)}
@media (max-width:860px){
  .vio-chat{right:12px;bottom:84px;height:var(--float-size);padding:0 14px}
  .vio-chat span{display:none}
  .vio-chat{padding:0;width:var(--float-size);justify-content:center}
}

/* Nút chat Facebook — tròn, xanh Facebook, chỉ có logo ở giữa. Ngồi ngay trên
   nút chat. Khung chat 48app mở ra (`#mktwc-box`, z-index 2.147.483.001) sẽ che
   nút này, đang chat thì cũng không cần. */
.vio-fbchat{
  position:fixed;right:var(--float-right);z-index:128;
  bottom:calc(var(--float-chat-top) + var(--float-gap));
  width:var(--float-size);height:var(--float-size);border-radius:50%;
  display:grid;place-items:center;
  background:#1877F2;color:#fff;box-shadow:var(--sh-3);
  transition:filter .15s,transform .15s;
}
.vio-fbchat:hover{filter:brightness(1.08);transform:translateY(-1px);color:#fff}
.vio-fbchat .soc-i{width:26px;height:26px;display:block}

/* Nút lên đầu trang */
.vio-totop{
  position:fixed;right:var(--float-right);z-index:125;
  bottom:calc(var(--float-chat-top) + var(--float-gap));
  width:var(--float-size);height:var(--float-size);border-radius:50%;
  background:#fff;color:var(--fg);
  box-shadow:var(--sh-2);font-size:22px;line-height:1;
  display:grid;place-items:center;border:1px solid var(--line);
}
.vio-totop[hidden]{display:none}
.vio-totop:hover{background:var(--ink);color:#fff;border-color:var(--ink)}
/* Có nút Facebook chen giữa thì nhích lên thêm một nút nữa. */
body.vio-has-fb .vio-totop{
  bottom:calc(var(--float-chat-top) + var(--float-gap) * 2 + var(--float-size));
}

@media (max-width:860px){
  /* `.vio-chat` mobile: bottom 84 + `--float-size`. Widget 48app không đổi
     mốc dưới nhưng nhích sát mép phải hơn. */
  :root{--float-chat-top:calc(84px + var(--float-size));--float-right:12px}
  body.vio-chatapp{--float-chat-top:136px;--float-right:14px}
}

/* Modal bảng trả góp */
.vio-modal{
  position:fixed;inset:0;z-index:400;background:rgba(14,17,22,.55);
  display:grid;place-items:center;padding:16px;overflow-y:auto;
}
.vio-modal[hidden]{display:none}
body.modal-open{overflow:hidden}
.vio-modal-box{
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--sh-3);
  width:min(520px,100%);max-height:88vh;overflow-y:auto;
}
.vio-modal-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:16px 18px;border-bottom:1px solid var(--line-2);position:sticky;top:0;background:#fff;
}
.vio-modal-head h3{font-size:17px}
.vio-modal-x{width:36px;height:36px;border-radius:50%;background:var(--line-2);font-size:15px;flex:none}
.vio-modal-body{padding:18px}
.vio-modal-body h4{margin:0 0 8px}
.vio-modal-body .spectbl th{width:auto}
.vio-modal-body .spectbl td{text-align:right}
.modal-notes{list-style:disc;padding-left:18px;margin:14px 0 16px}
.modal-notes li{margin-bottom:4px}

/* Popup bảng trả góp chi tiết.
   Dùng lại đúng ngôn ngữ của trang sản phẩm: nút chọn là .obtn (viền đỏ + dấu ✓
   khi chọn), số tiền chính màu --price, bảng nền trắng viền --line. */
.vio-modal-box.vio-inst{width:min(620px,100%)}
.vio-inst .vio-modal-head{align-items:flex-start}
.vio-inst-title h3{margin-bottom:2px}
.vio-inst-title p{margin:0;line-height:1.35;max-width:40ch}

.vio-inst-pick{margin:0 0 14px}
.vio-inst-pick .lbl{font-size:12.5px;font-weight:700;margin-bottom:7px}
.vio-inst .optrow .obtn{flex:1 1 148px}

.vio-inst-none{
  border:1px solid var(--line);background:var(--bg);border-radius:var(--r);
  padding:12px 14px;color:var(--fg-2);margin:0 0 16px;
}

/* Khối chốt số: góp mỗi kỳ bao nhiêu, rồi mới tới các con số phụ */
.vio-inst-hero{
  border:1.5px solid var(--price);border-radius:var(--r-lg);overflow:hidden;
  background:var(--price-soft);margin:0 0 18px;
}
.vio-inst-hero .hero-main{padding:13px 16px;display:grid;gap:1px}
.vio-inst-hero .k{
  font-size:11.5px;font-weight:750;color:var(--price);
  text-transform:uppercase;letter-spacing:.05em;
}
.vio-inst-hero .v{font-size:30px;font-weight:850;color:var(--price);line-height:1.12;letter-spacing:-.02em}
.vio-inst-hero .s{font-size:12.5px;font-weight:600;color:var(--fg-2)}

.vio-inst-kv{background:#fff;border-top:1.5px solid var(--price);padding:4px 16px}
.vio-inst-kv li{
  display:flex;gap:12px;justify-content:space-between;align-items:baseline;
  font-size:13px;padding:8px 0;border-bottom:1px dashed var(--line);
}
.vio-inst-kv li:last-child{border-bottom:0}
.vio-inst-kv li span{color:var(--fg-2)}
.vio-inst-kv li b{font-weight:750;text-align:right}
.vio-inst-kv li.ok b{color:var(--ok)}
.vio-inst-kv li.up b{color:var(--price)}

/* Bảng quá trình: mỗi dòng là một kỳ — đến hạn, phải trả, còn nợ lại bao nhiêu */
.vio-inst-h{font-size:14px;margin:0 0 10px}
.vio-inst-scroll{
  border:1px solid var(--line);border-radius:var(--r);
  overflow-x:auto;-webkit-overflow-scrolling:touch;
}
.vio-insttbl{width:100%;border-collapse:collapse;font-size:13px;min-width:340px}
.vio-insttbl th,.vio-insttbl td{
  padding:9px 12px;text-align:left;border-bottom:1px solid var(--line-2);white-space:nowrap;
}
.vio-insttbl thead th{
  background:var(--line-2);color:var(--fg-2);font-size:11px;font-weight:750;
  text-transform:uppercase;letter-spacing:.04em;
}
.vio-insttbl tbody tr:last-child td{border-bottom:0}
.vio-insttbl .r{text-align:right}
.vio-insttbl .amt{font-weight:750;color:var(--fg)}
.vio-insttbl .no{width:1%;padding-right:0}
.vio-insttbl .no span{
  display:grid;place-items:center;width:24px;height:24px;border-radius:50%;
  background:var(--line-2);color:var(--fg-2);font-size:11.5px;font-weight:750;
}
.vio-insttbl tr.done .no span{background:var(--ok-soft);color:var(--ok)}
.vio-insttbl tr.done td:last-child{color:var(--ok);font-weight:700}

/* ============================================================
   GIỎ HÀNG & THANH TOÁN (template mặc định của WooCommerce, style lại)
   ============================================================ */
.woocommerce-cart .site-content > .wrap,
.woocommerce-checkout .site-content > .wrap{padding-top:18px}

.shop_table{
  width:100%;border-collapse:collapse;background:#fff;border-radius:var(--r-lg);
  box-shadow:var(--sh-1);overflow:hidden;font-size:14px;
}
.shop_table th,.shop_table td{padding:14px;text-align:left;border-bottom:1px solid var(--line-2);vertical-align:middle}
.shop_table thead th{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-3);font-weight:700}
.shop_table tr:last-child td{border-bottom:0}
.shop_table .product-thumbnail img{width:64px;height:64px;object-fit:contain;border-radius:10px;background:var(--line-2)}
.shop_table .product-name a{font-weight:650}
.shop_table .product-price,.shop_table .product-subtotal{font-weight:700;color:var(--price);white-space:nowrap}
.shop_table .variation{font-size:12px;color:var(--fg-2);margin:4px 0 0}
.shop_table .variation dt,.shop_table .variation dd{display:inline;margin:0}
.shop_table .variation dd{margin-right:8px}
.product-remove a{color:var(--fg-3);font-size:18px;line-height:1}
.product-remove a:hover{color:var(--price)}
.quantity input{
  width:64px;height:38px;border:1px solid var(--line);border-radius:9px;
  text-align:center;font-size:14px;font-weight:600;
}

/* woocommerce-layout.css thả .cart_totals float:right;width:48%. Bản demo để
   khối tổng tiền CHIẾM TRỌN chiều ngang dưới bảng — bỏ float và trả về 100%. */
.woocommerce .cart-collaterals{display:block}
.woocommerce .cart-collaterals .cart_totals{float:none;width:100%}
.cart-collaterals,.cart_totals{margin-top:20px}
.cart_totals table{width:100%;background:#fff;border-radius:var(--r-lg);box-shadow:var(--sh-1);border-collapse:collapse;overflow:hidden}
.cart_totals th,.cart_totals td{padding:13px 16px;border-bottom:1px solid var(--line-2);font-size:14px}
.cart_totals th{text-align:left;color:var(--fg-2);font-weight:600}
.cart_totals td{text-align:right;font-weight:700}
.cart_totals .order-total td{font-size:20px;color:var(--price);font-weight:850}

/* Hàng nút dưới bảng giỏ hàng */
.shop_table td.actions{background:#fafafa;border-top:1px solid var(--line-2)}
.vio-cart-actions-in{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.shop_table td.actions .coupon{display:flex;gap:8px;align-items:center}
.shop_table td.actions .coupon .input-text{
  height:40px;padding:0 12px;border:1px solid var(--line);border-radius:10px;font-size:14px;width:170px;
}
.vio-cart-update{min-height:40px}
.vio-cart-call{margin-top:10px;text-align:center;font-size:12.5px;color:var(--fg-3)}
.vio-cart-call a{color:var(--price)}

.wc-proceed-to-checkout{margin-top:14px}

/* ------------------------------------------------------------------
   Ghi đè woocommerce.css cho GIỎ HÀNG.
   woocommerce.css nạp SAU main.css và selector của nó có tiền tố
   `.woocommerce` nên luôn thắng: bảng bo 5px + viền xám, ô 9px 12px, ảnh 32px,
   nút thanh toán tím bo 3px. Muốn giống bản demo thì phải đối lại đúng độ
   ưu tiên đó — dưới đây là toàn bộ chỗ cần đè, không dùng !important.
   ------------------------------------------------------------------ */
.woocommerce table.shop_table{
  border:0;border-radius:var(--r-lg);border-collapse:collapse;margin:0;text-align:left;
}
.woocommerce table.shop_table th,
.woocommerce table.shop_table td{
  padding:14px;border-left:0;border-right:0;border-top:0;
  border-bottom:1px solid var(--line-2);vertical-align:middle;
}
.woocommerce table.shop_table thead th{font-weight:700;line-height:1.55}
/* `tr.cart_item:last-of-type` KHÔNG dùng được: hàng nút (đang ẩn) mới là <tr>
   cuối cùng, mà :last-of-type xét theo thẻ chứ không xét class. */
.woocommerce table.shop_table tbody tr.cart_item:has(+ .vio-cart-actions) td,
.woocommerce table.shop_table tbody tr:last-child td{border-bottom:0}

/* Ảnh sản phẩm: woocommerce.css ép 32px, demo dùng 64px.
   Phải ghim luôn bề rộng CỘT: bảng tự chia cột theo nội dung, tên máy dài làm
   cột ảnh co lại còn ~91px, mà `max-width:100%` thì ảnh co theo — ra 62.8px. */
.woocommerce table.shop_table th.product-thumbnail,
.woocommerce table.shop_table td.product-thumbnail{width:92px}
.woocommerce-cart table.cart img,
.woocommerce table.shop_table td.product-thumbnail img{
  width:64px;height:64px;max-width:64px;object-fit:contain;
  border-radius:10px;background:var(--line-2);
}

/* Danh sách tuỳ chọn: bản mặc định cho mỗi giá trị một đoạn văn riêng
   (margin 12px) nên khối cao gấp đôi phần còn lại của dòng. */
.woocommerce table.shop_table td.product-name dl.variation{
  margin:4px 0 0;font-size:12px;color:var(--fg-3);line-height:1.55}
.woocommerce table.shop_table td.product-name dl.variation dt{
  float:none;display:inline;font-weight:600;margin:0 3px 0 0}
.woocommerce table.shop_table td.product-name dl.variation dd{display:inline;margin:0 10px 0 0}
.woocommerce table.shop_table td.product-name dl.variation dd p{display:inline;margin:0}

.woocommerce .quantity .qty{
  width:64px;height:38px;min-height:38px;padding:1px 2px;
  border:1px solid var(--line);border-radius:9px;
  font-size:14px;font-weight:600;text-align:center;background:#fff;color:var(--fg);
}

/* Khối tổng tiền */
.woocommerce-cart .cart-collaterals .cart_totals table,
.woocommerce .cart-collaterals .cart_totals table.shop_table{
  border-collapse:collapse;border-radius:var(--r-lg);margin-bottom:0}
.woocommerce .cart_totals table.shop_table th,
.woocommerce .cart_totals table.shop_table td{
  padding:13px 16px;border-top:0;border-bottom:1px solid var(--line-2)}
.woocommerce .cart_totals table.shop_table th{font-weight:600;color:var(--fg-2)}
.woocommerce .cart_totals table.shop_table td{text-align:right;font-weight:700}
.woocommerce .cart_totals table.shop_table tr:last-child th,
.woocommerce .cart_totals table.shop_table tr:last-child td{border-bottom:0}
.woocommerce .cart_totals table.shop_table .order-total td{
  font-size:20px;color:var(--price);font-weight:850}

/* Nút "TIẾN HÀNH THANH TOÁN": demo là nút ĐỎ bo 12px cao 48px, không phải
   nút tím bo 3px cao 56px của WooCommerce. */
.woocommerce .wc-proceed-to-checkout{padding:0;margin-top:14px}
.woocommerce .wc-proceed-to-checkout a.checkout-button{
  display:inline-flex;align-items:center;justify-content:center;
  width:100%;min-height:48px;padding:0 22px;margin:0;
  border-radius:12px;background:var(--price);color:#fff;
  font-size:15px;font-weight:750;line-height:1.55;text-align:center;
}
.woocommerce .wc-proceed-to-checkout a.checkout-button:hover{
  background:var(--price);filter:brightness(1.06)}

.checkout-button,.button,button.button,input.button,
.woocommerce-button,#place_order{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:48px;padding:0 22px;border-radius:12px;
  background:var(--price);color:#fff;font-weight:750;font-size:15px;border:0;cursor:pointer;
}
.checkout-button{width:100%}
.button:hover,#place_order:hover{filter:brightness(1.06)}
.button.alt{background:var(--ink)}

/* Form thanh toán */
.woocommerce-billing-fields,.woocommerce-checkout-review-order,.woocommerce-additional-fields{
  background:#fff;border-radius:var(--r-lg);padding:18px;box-shadow:var(--sh-1);margin-bottom:16px}
.woocommerce-billing-fields h3,.woocommerce-additional-fields h3,#order_review_heading{font-size:16px;margin:0 0 14px}
.form-row{margin-bottom:12px;display:flex;flex-direction:column;gap:6px}
.form-row label{font-size:12.5px;font-weight:650;color:var(--fg-2)}
.form-row .required{color:var(--price)}
.input-text,.form-row input[type=text],.form-row input[type=tel],
.form-row input[type=email],.form-row textarea,.form-row select{
  width:100%;min-height:44px;border:1.5px solid var(--line);border-radius:10px;
  padding:10px 12px;font:inherit;font-size:14.5px;background:#fff;color:var(--fg);
}
.input-text:focus,.form-row select:focus,.form-row textarea:focus{
  outline:none;border-color:var(--price);box-shadow:0 0 0 3px var(--price-soft)}
.form-row textarea{min-height:88px;resize:vertical}

/* woocommerce.css đặt `.woocommerce form .form-row .input-text{border-radius:
   var(--wc-form-border-radius);padding:.5em}` — 3 class nên thắng rule trên.
   Viết lại cho ngang cơ, đúng số của bản demo. */
.woocommerce form .form-row .input-text,
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row select,
.woocommerce form .form-row textarea{
  width:100%;min-height:44px;border:1.5px solid var(--line);border-radius:10px;
  padding:10px 12px;font:inherit;font-size:14.5px;background:#fff;color:var(--fg);
}
/* woocommerce.css đặt `height:4em` (≈67px) chứ không phải min-height, nên
   min-height của theme không nâng được — phải ghi đè bằng chính `height`. */
.woocommerce form .form-row textarea.input-text,
.woocommerce form .form-row textarea{height:88px;min-height:88px;resize:vertical}

.woocommerce #payment ul.wc_payment_methods,
#payment .wc_payment_methods{list-style:none;margin:0 0 14px;padding:0;
  display:flex;flex-direction:column;gap:8px;border:0}
#payment .wc_payment_method{border:1.5px solid var(--line);border-radius:11px;padding:12px}
#payment .wc_payment_method label{font-weight:650;font-size:14px;display:flex;align-items:center;gap:8px;cursor:pointer}
#payment .wc_payment_method input[type=radio]{accent-color:var(--price);width:18px;height:18px}
.woocommerce #payment div.payment_box,
#payment .payment_box{font-size:13px;color:var(--fg-2);margin:8px 0 0;padding:8px 0 0;
  background:none;border-top:1px dashed var(--line);border-radius:0;line-height:1.55}
.woocommerce #payment div.payment_box::before{display:none}
#payment .payment_box p{margin:0;padding:0}

.woocommerce-checkout #payment{background:transparent;border-radius:0}
.checkout .col2-set{display:grid;grid-template-columns:1fr 1fr;gap:16px}
/* woocommerce-layout.css gắn clearfix `::before/::after{content:" ";display:table}`
   lên .col2-set. Trong grid, hai pseudo-element đó thành HAI Ô THẬT: chúng chiếm
   cột 1 nên form bị đẩy sang cột 2 và khối đơn hàng rớt xuống hàng dưới. */
.checkout .col2-set::before,.checkout .col2-set::after{display:none}

/* ============================================================
   TRANG DANH MỤC
   ============================================================ */
.crumb{font-size:12.5px;color:var(--fg-3);margin-bottom:10px}
.crumb a{color:var(--fg-2)}
.crumb .sep{margin:0 6px;color:var(--line)}

.archive-head{margin-bottom:14px}
.archive-head h1{font-size:23px}
.archive-head .count{font-size:14px;font-weight:400}
.archive-desc{font-size:13.5px;color:var(--fg-2);max-width:70ch;margin-top:6px}

.plp{display:grid;grid-template-columns:246px minmax(0,1fr);gap:20px;align-items:start}
/* Tắt cột lọc trong Tuỳ biến → lưới chiếm hết bề ngang */
.plp-nofilters{grid-template-columns:minmax(0,1fr)}

.filters{background:#fff;border-radius:var(--r-lg);padding:4px 14px 14px;box-shadow:var(--sh-1);
  position:sticky;top:calc(var(--topbar-h) + var(--hdr-h) + 16px)}
.filters-head{display:none}
.fgroup{border-bottom:1px solid var(--line-2);padding:13px 0}
.fgroup:last-child{border:0}
.fgroup h4,.fgroup .widget-title,.fgroup .widgettitle{
  margin:0 0 9px;font-size:13px;font-weight:700;letter-spacing:0}

/* layered nav của WooCommerce
   Lưu ý cấu trúc thật: <li><a>Tên</a> <span class="count">(19)</span></li>
   — .count là anh em của <a>, KHÔNG nằm trong <a>. Nên flex đặt ở <li>. */
.woocommerce-widget-layered-nav-list{display:flex;flex-direction:column;gap:2px}
.woocommerce-widget-layered-nav-list li,
.fgroup li{
  list-style:none;display:flex;align-items:center;gap:6px;
  border-radius:8px;padding:0 8px;min-height:34px;
}
.woocommerce-widget-layered-nav-list li:hover,
.fgroup li:hover{background:var(--line-2)}
.woocommerce-widget-layered-nav-list li a,
.fgroup li a{flex:1;font-size:13.5px;color:var(--fg-2);padding:6px 0}
.woocommerce-widget-layered-nav-list li:hover a,
.fgroup li:hover a{color:var(--fg)}
.woocommerce-widget-layered-nav-list li .count,
.fgroup li .count{margin-left:auto;font-size:11.5px;color:var(--fg-3);flex:none}
.woocommerce-widget-layered-nav-list li.chosen{background:var(--price-soft)}
.woocommerce-widget-layered-nav-list li.chosen a{color:var(--price);font-weight:650}
.woocommerce-widget-layered-nav-list li.chosen a::before{content:"✓ "}

/* "Xem thêm" cho nhóm dài (Chip có 75 loại). Dùng <details> nên không cần JS;
   mở ra là danh sách chạy tiếp, không có viền ngăn giữa hai phần. */
.fmore>summary{list-style:none;cursor:pointer;padding:7px 8px;margin-top:2px;
  font-size:12.5px;font-weight:650;color:var(--price);border-radius:8px}
.fmore>summary::-webkit-details-marker{display:none}
.fmore>summary::after{content:" ▾"}
.fmore[open]>summary::after{content:" ▴"}
.fmore>summary:hover{background:var(--line-2)}
.fmore[open]>summary{margin-bottom:2px}

.pillrow{display:flex;flex-wrap:wrap;gap:6px}
.colorrow{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px;color:var(--fg-2);cursor:pointer}
.colorrow input[type=color]{width:38px;height:30px;border:1px solid var(--line);border-radius:8px;padding:2px;background:#fff;cursor:pointer}
.pill{font-size:12.5px;font-weight:600;padding:7px 11px;border-radius:8px;
  border:1px solid var(--line);color:var(--fg-2);display:inline-block}
.pill:hover{border-color:var(--fg-3)}
.pill.on{border-color:var(--price);background:var(--price-soft);color:var(--price)}

.toolbar{background:#fff;border-radius:var(--r-lg);padding:10px 14px;box-shadow:var(--sh-1);
  margin-bottom:14px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.chip{height:34px;padding:0 13px;border-radius:999px;background:#fff;border:1px solid var(--line);
  font-size:13px;font-weight:600;color:var(--fg-2);display:inline-flex;align-items:center;gap:6px}
.chip.on,.chip:hover{border-color:var(--fg-3)}
.filters-toggle{display:none}
.woocommerce-ordering{margin:0}
.woocommerce-ordering select{
  height:34px;border-radius:9px;border:1px solid var(--line);padding:0 10px;
  font-size:13px;font-weight:600;color:var(--fg-2);background:#fff}
.woocommerce-result-count{margin:0 0 0 auto;font-size:12.5px;color:var(--fg-3)}

/* woocommerce.css đặt `.woocommerce .woocommerce-ordering{margin:0 0 1em}` —
   specificity (0,2,0), cao hơn hai luật (0,1,0) ngay phía trên nên NÓ THẮNG dù
   main.css nạp sau. Hai hậu quả nhìn thấy được trên thanh công cụ danh mục:

   1. Lệch dọc — `.toolbar` dùng `align-items:center`, mà flex căn giữa theo
      HỘP LỀ. Ô chọn và dòng "Hiển thị…" mang `margin-bottom:1em` nên bị đẩy
      LÊN ~8px so với nhãn "Sắp xếp:" (lề 0) → nhãn trông thấp hơn hẳn.
   2. `margin-left:auto` bị xoá → "Hiển thị 1–24 trong N sản phẩm" dính ngay
      sau ô chọn thay vì nằm ở mép phải như bản thiết kế.

   Phải viết TRÙNG DẠNG selector của Woo (cũng 2 class) mới đè được — xem mục
   4.8 trong QUY-TRINH-CAP-NHAT-GIAO-DIEN.md. */
.woocommerce .woocommerce-ordering,
.woocommerce-page .woocommerce-ordering{margin:0}
.woocommerce .woocommerce-result-count,
.woocommerce-page .woocommerce-result-count{margin:0 0 0 auto}

.woocommerce-pagination{margin:24px 0;display:flex;justify-content:center}

/* Phân trang WooCommerce.

   Hai cái bẫy, luật cũ dính cả hai:

   1. WooCommerce gắn class `page-numbers` lên CẢ thẻ <ul>, không chỉ từng nút.
      Luật `.page-numbers{border;border-radius;background}` vì thế bám luôn vào
      <ul> → cả dải phân trang biến thành một hộp trắng bo góc bao ngoài. Nên
      luật nút phải bám theo `a.page-numbers` / `span.page-numbers`, đừng bám
      class trần.

   2. woocommerce.css có sẵn `.woocommerce nav.woocommerce-pagination ul li`
      (đặc trưng 0,2,3) đặt float:left + border-right #cfc8d8, và
      `... li span.current` (0,3,4) đặt nền #e9e6ed chữ #816f98. Luật cũ
      `.page-numbers` (0,1,0) và `.page-numbers.current` (0,2,0) thua cả hai,
      nên dáng của theme chưa bao giờ hiện ra — gap:6px cũng vô hiệu vì <ul>
      bị ép về display:inline-block. Phải viết đủ dài để vượt đặc trưng đó. */
/* Luật ngắn cho MỌI <ul class="page-numbers">, kể cả khi không có wrapper
   <nav>: search.php gọi paginate_links( 'type' => 'list' ) và echo thẳng ra
   .wrap, nên các luật bám .woocommerce-pagination không với tới — 6 nút từng
   xếp dọc, mỗi nút rộng 1208px. Luật dài phía sau chỉ để vượt đặc trưng của
   woocommerce.css, dáng thì giống hệt. */
ul.page-numbers,
.woocommerce nav.woocommerce-pagination ul{
  display:flex;gap:6px;flex-wrap:wrap;justify-content:center;
  list-style:none;padding:0;margin:0;border:0;white-space:normal}
ul.page-numbers li,
.woocommerce nav.woocommerce-pagination ul li{
  border:0;float:none;display:block;margin:0;padding:0;overflow:visible}

a.page-numbers,span.page-numbers,
.woocommerce nav.woocommerce-pagination ul li a,
.woocommerce nav.woocommerce-pagination ul li span{
  display:grid;place-items:center;min-width:38px;height:38px;padding:0 10px;
  border-radius:10px;background:#fff;border:1px solid var(--line);
  font-size:13.5px;font-weight:600;line-height:1;color:var(--fg-2)}

a.page-numbers:hover,
.woocommerce nav.woocommerce-pagination ul li a:hover,
.woocommerce nav.woocommerce-pagination ul li a:focus{
  background:var(--line-2);border-color:var(--fg-3);color:var(--fg)}

span.page-numbers.current,
.woocommerce nav.woocommerce-pagination ul li span.current{
  background:var(--ink);border-color:var(--ink);color:#fff}

span.page-numbers.dots,
.woocommerce nav.woocommerce-pagination ul li span.dots{
  background:none;border-color:transparent;min-width:auto;padding:0 4px;color:var(--fg-3)}

/* Phân trang của WordPress core — the_posts_pagination() ở blog và category
   bài viết (/category/thu-thuat/…).

   Nó xuất ra <nav class="navigation pagination"><div class="nav-links">, KHÔNG
   phải .woocommerce-pagination ở trên. Thiếu luật cho hai class này thì cả hai
   container đều là display:block, mà .page-numbers lại là display:grid — nên
   mỗi nút giãn hết bề rộng (753px) và xếp chồng dọc thành một cột.

   Dùng chung dáng với phân trang của Woo cho đồng bộ. */
.navigation.pagination{margin:24px 0;display:flex;justify-content:center}
.navigation.pagination .nav-links{
  display:flex;gap:6px;flex-wrap:wrap;justify-content:center;align-items:center;
}
.navigation.pagination .page-numbers.dots{
  background:none;border-color:transparent;min-width:auto;padding:0 4px;
}

/* Thông báo của WooCommerce (giỏ hàng, thanh toán, tài khoản).
   woocommerce.css đặt icon `::before` tuyệt đối ở `left:1.5em` và chừa chỗ cho
   nó bằng `padding:1em 2em 1em 3.5em`. Bản cũ ở đây rút padding về `14px 16px`
   mà không đụng tới icon, nên icon nằm chồng lên chữ — thấy rõ ở thông báo lỗi
   cổng thanh toán ngày 2026-09-04 ("⚠Không kết nối được tới Bảo Kim…").
   Giữ icon, chừa lại đúng chỗ cho nó, và cho mỗi loại thông báo một màu viền
   nói đúng nghĩa thay vì vàng thương hiệu cho cả ba. */
.woocommerce-info,.woocommerce-message,.woocommerce-error{
  background:#fff;border-radius:var(--r);padding:14px 16px 14px 44px;
  box-shadow:var(--sh-1);position:relative;line-height:1.55;
  font-size:14px;margin:0 0 16px;border-left:3px solid var(--brand)}
.woocommerce-info::before,.woocommerce-message::before,.woocommerce-error::before{
  left:16px;top:14px;line-height:1.55}
.woocommerce-error{border-left-color:var(--price)}
.woocommerce-message{border-left-color:var(--ok)}
.woocommerce-info{border-left-color:var(--info)}

/* ============================================================
   TRANG CHI TIẾT
   ============================================================ */
/* DOM: ảnh -> buy-box (h1) -> panel chi tiết.
   Grid xếp lại để desktop vẫn là "ảnh + chi tiết bên trái, buy-box bên phải",
   còn mobile (một cột) giữ đúng thứ tự DOM: ảnh, giá, rồi mới tới thông số. */
.pdp{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:24px 24px;align-items:start}
.pdp-media {grid-column:1;grid-row:1}
.pdp .buybox{grid-column:2;grid-row:1 / span 2}
.pdp-detail{grid-column:1;grid-row:2}

.gallery{background:#fff;border-radius:var(--r-lg);padding:16px;box-shadow:var(--sh-1)}
.gallery .big{aspect-ratio:4/3;border-radius:var(--r);background:linear-gradient(160deg,#F7F8FA,#E9ECF1);
  display:grid;place-items:center;position:relative;overflow:visible}
.gallery .big img{width:100%;height:100%;object-fit:contain;padding:16px}
.gallery .big .flag{position:absolute;top:14px;left:14px;font-size:12px;padding:5px 10px}
.gallery .thumbs{display:flex;gap:8px;margin-top:12px;overflow-x:auto;scrollbar-width:none}
.gallery .thumbs::-webkit-scrollbar{display:none}
.gthumb{width:64px;height:64px;flex:none;border-radius:10px;background:#F2F4F7;
  border:2px solid transparent;overflow:hidden;padding:0}
.gthumb img{width:100%;height:100%;object-fit:contain}
.gthumb.on{border-color:var(--ink)}

.buybox{background:#fff;border-radius:var(--r-lg);padding:18px;box-shadow:var(--sh-1);
  position:sticky;top:calc(var(--topbar-h) + var(--hdr-h) + 16px)}
.buybox h1{font-size:20px;line-height:1.3;margin-bottom:8px}
.rating{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--fg-2);margin-bottom:14px;flex-wrap:wrap}

.pricebox{background:var(--price-soft);border-radius:var(--r);padding:12px 14px;margin-bottom:16px}
/* Như .price-row của thẻ sản phẩm: markup giá không có class cố định
   (span.amount của wc_price(), <ins>/<del> của filter theme, hoặc HTML biến thể
   do JS đổ vào), nên typography phải nằm trên chính .price-line thì dạng nào
   cũng ra chữ lớn màu đỏ. */
.price-line{
  display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;
  font-size:27px;font-weight:850;color:var(--price);letter-spacing:-.03em;line-height:1.15;
  font-variant-numeric:tabular-nums;
}
/* Woo chèn screen-reader-text vào price HTML — ẩn hẳn, tránh vỡ layout */
.screen-reader-text,
.price-line .screen-reader-text,
.price .screen-reader-text,
.woocommerce-Price-amount .screen-reader-text{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;border:0!important;white-space:nowrap!important}
.price-line ins,.price ins{text-decoration:none}
.mbuy .p{max-width:36%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}
/* Con giá trong ô: mọi lớp bọc đều ăn theo .price-line, chỉ giá gạch là nhỏ lại. */
.price-line .price,.price-line ins,.price-line .woocommerce-Price-amount{
  font-size:inherit;font-weight:inherit;color:inherit;letter-spacing:inherit;line-height:inherit;margin:0;
}
.price del{opacity:.55;font-size:.85em}
.price-line del,.price-line .price del{
  font-size:14px;font-weight:600;color:var(--fg-3);opacity:.75;text-decoration:line-through;
}
.pricebox .sub{font-size:12.5px;color:var(--fg-2);margin-top:4px}

.opt{margin-bottom:14px}
.opt .lbl{font-size:12.5px;font-weight:700;margin-bottom:7px;display:flex;gap:5px;align-items:center}
.opt .lbl .req{color:var(--price)}
.optrow{display:flex;flex-wrap:wrap;gap:8px}
.obtn{border:1.5px solid var(--line);border-radius:10px;padding:9px 12px;font-size:13px;font-weight:650;
  color:var(--fg-2);text-align:left;line-height:1.25;position:relative;min-height:44px}
.obtn small{display:block;font-size:11px;font-weight:500;color:var(--fg-3);margin-top:1px}
.obtn.on{border-color:var(--price);color:var(--price);background:var(--price-soft)}
.obtn.on small{color:var(--price);opacity:.8}
.obtn.on::after{content:"✓";position:absolute;top:-7px;right:-7px;width:18px;height:18px;border-radius:50%;
  background:var(--price);color:#fff;font-size:11px;display:grid;place-items:center}
.obtn:disabled{opacity:.4;text-decoration:line-through;cursor:not-allowed}

.buy{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:6px}
.btn{min-height:50px;border-radius:12px;font-weight:750;font-size:15px;display:grid;place-items:center;
  line-height:1.2;text-align:center;padding:8px 12px}
.btn .s{display:block;font-size:11px;font-weight:500;opacity:.78;margin-top:2px}
.btn-primary{background:var(--price);color:#fff}
.btn-outline{border:1.5px solid var(--price);color:var(--price)}
.btn-ghost{border:1.5px solid var(--line);color:var(--fg)}
.btn-full{grid-column:1/-1}

.perks{margin-top:16px;border-top:1px solid var(--line-2);padding-top:14px;display:flex;flex-direction:column;gap:9px}
.perk{display:flex;gap:10px;font-size:13px;color:var(--fg-2)}
.perk b{color:var(--fg);font-weight:650}
.perk .ic{color:var(--ok);flex:none}

.stores{margin-top:14px;background:var(--bg);border-radius:var(--r);padding:12px}
.store{display:flex;gap:10px;padding:8px 0;font-size:12.5px;border-bottom:1px dashed var(--line);align-items:center}
.store:last-child{border:0}
.store .st{margin-left:auto;font-size:11px;font-weight:700;color:var(--ok);background:var(--ok-soft);
  padding:3px 8px;border-radius:6px;white-space:nowrap}
.store .st.no{color:var(--fg-3);background:var(--line-2)}
a.st{text-decoration:none}

.panel{background:#fff;border-radius:var(--r-lg);padding:18px;box-shadow:var(--sh-1);margin-top:20px}
.panel h3{margin:0 0 14px;font-size:16px}
.badgerow{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.badgerow .flag{font-size:12px;padding:5px 10px}

.spectbl{width:100%;border-collapse:collapse;font-size:13.5px}
.spectbl th,.spectbl td{text-align:left;padding:9px 0;border-bottom:1px solid var(--line-2);vertical-align:top}
.spectbl th{width:170px;color:var(--fg-2);font-weight:600}
.spectbl tr:last-child th,.spectbl tr:last-child td{border:0}

.prose p{margin:0 0 12px;color:var(--fg-2)}
.prose ul{list-style:disc;padding-left:20px;color:var(--fg-2);margin:0 0 12px}
.prose li{margin-bottom:4px}
.prose img{border-radius:var(--r);margin:12px 0}

/* Thanh liên hệ cố định trên mobile */
.mbuy{display:none}

/* ============================================================
   FOOTER
   ============================================================ */
.ft{background:var(--ink);color:#C6CCD6;margin-top:36px;padding:34px 0 0}
.ft .cols{display:grid;grid-template-columns:1.4fr 1fr 1fr 1.3fr;gap:28px;padding-bottom:26px}
.ft h5{color:#fff;font-size:13px;letter-spacing:.06em;text-transform:uppercase;margin:0 0 12px}
.ft li{padding:4px 0;font-size:13.5px}
.ft a:hover{color:var(--brand)}
.ft .logo{margin-bottom:12px}
.ft-about{font-size:13px;color:#98A1AE;margin:0 0 12px}
.paylist{display:flex;gap:8px;flex-wrap:wrap}
.paylist .pill{border-color:#2A323E;color:#C6CCD6}
.ft .br{font-size:13px;padding:8px 0;border-bottom:1px solid #212934}
.ft .br:last-child{border:0}
.ft .br b{display:block;color:#fff;font-weight:600}
.ft .br span{color:var(--brand);font-weight:600}
.ft .bottom{border-top:1px solid #212934;padding:14px 0;font-size:12px;color:#79828F;
  display:flex;gap:16px;flex-wrap:wrap}

/* ============================================================
   BIẾN THỂ THIẾT KẾ
   Điều khiển bằng class trên <body>, đặt trong
   Tuỳ biến → VioStore → Thiết kế.
   Biến màu (--brand, --price…) do inc/customizer.php in ra ở <head>.
   ============================================================ */

/* ---------- Kiểu nút ---------- */
.vio-btn-solid .btn-primary,
.vio-btn-solid .cardbtn,
.vio-btn-solid .checkout-button,
.vio-btn-solid #place_order{background:var(--price);color:var(--price-ink);border:0}

.vio-btn-outline .btn-primary,
.vio-btn-outline .cardbtn,
.vio-btn-outline .checkout-button,
.vio-btn-outline #place_order{
  background:#fff;color:var(--price);border:2px solid var(--price)}

.vio-btn-gradient .btn-primary,
.vio-btn-gradient .cardbtn,
.vio-btn-gradient .checkout-button,
.vio-btn-gradient #place_order{
  background:linear-gradient(135deg,var(--price),rgba(var(--brand-rgb),.95));
  color:var(--price-ink);border:0}

.vio-btn-raised .btn-primary,
.vio-btn-raised .cardbtn,
.vio-btn-raised .checkout-button,
.vio-btn-raised #place_order{
  background:var(--price);color:var(--price-ink);border:0;
  box-shadow:0 4px 0 rgba(var(--price-rgb),.45)}
.vio-btn-raised .btn-primary:active,
.vio-btn-raised .cardbtn:active{transform:translateY(3px);box-shadow:0 1px 0 rgba(var(--price-rgb),.45)}

.vio-btn-soft .btn-primary,
.vio-btn-soft .cardbtn,
.vio-btn-soft .checkout-button,
.vio-btn-soft #place_order{
  background:rgba(var(--price-rgb),.12);color:var(--price);border:0;font-weight:800}

/* Nút "Mua ngay" (.cardbtn-opt) luôn ĐỎ ĐẶC, bất kể Customizer chọn kiểu nút
   nào. Trước 0.7.4 nút này là viền trắng theo bản thiết kế; đổi sang đỏ theo
   yêu cầu chủ dự án ngày 2026-09-02.

   Vì sao phải lặp lại ở đây: các khối .vio-btn-* phía trên có specificity
   (0,2,0), cao hơn .cardbtn-opt (0,1,0) ở phần thẻ sản phẩm, nên chúng thắng và
   áp kiểu của chúng lên nút. Phải viết TRÙNG DẠNG selector (cũng 2 class) rồi
   đặt sau để thắng nhờ thứ tự nạp — hạ xuống .cardbtn-opt đơn thuần là thua lại
   ngay. Thêm kiểu nút mới thì phải bổ sung dòng vào ĐỦ CẢ 5 selector dưới đây.
   box-shadow:none để gỡ bóng của .vio-btn-raised, font-weight để gỡ 800 của
   .vio-btn-soft. Đừng chữa bằng !important — lần sau thêm kiểu nút lại vỡ tiếp
   và không ai lần ra vì sao. */
.vio-btn-solid .cardbtn-opt,
.vio-btn-outline .cardbtn-opt,
.vio-btn-gradient .cardbtn-opt,
.vio-btn-raised .cardbtn-opt,
.vio-btn-soft .cardbtn-opt{
  background:var(--price);border:1.5px solid var(--price);color:var(--price-ink);
  font-weight:700;box-shadow:none}
.vio-btn-solid .cardbtn-opt:hover,
.vio-btn-outline .cardbtn-opt:hover,
.vio-btn-gradient .cardbtn-opt:hover,
.vio-btn-raised .cardbtn-opt:hover,
.vio-btn-soft .cardbtn-opt:hover{
  background:var(--price-600);border-color:var(--price-600);color:var(--price-ink)}

/* ---------- Hình dáng ---------- */
.vio-shape-square .btn,.vio-shape-square .cardbtn,.vio-shape-square .cta,
.vio-shape-square .chip,.vio-shape-square .pill,.vio-shape-square .obtn,
.vio-shape-square .paybtn,.vio-shape-square .button,.vio-shape-square #place_order{border-radius:0}

.vio-shape-soft .btn,.vio-shape-soft .cardbtn,.vio-shape-soft .cta,
.vio-shape-soft .obtn,.vio-shape-soft .paybtn{border-radius:var(--r)}

.vio-shape-pill .btn,.vio-shape-pill .cardbtn,.vio-shape-pill .cta,
.vio-shape-pill .obtn,.vio-shape-pill .paybtn,
.vio-shape-pill .button,.vio-shape-pill #place_order{border-radius:999px}

/* ---------- Kích cỡ ---------- */
.vio-bsize-sm .btn,.vio-bsize-sm .checkout-button,.vio-bsize-sm #place_order{min-height:42px;font-size:14px}
.vio-bsize-sm .cardbtn{min-height:34px;font-size:12.5px}
.vio-bsize-sm .cta{min-height:40px;font-size:13.5px}

.vio-bsize-lg .btn,.vio-bsize-lg .checkout-button,.vio-bsize-lg #place_order{min-height:58px;font-size:16.5px}
.vio-bsize-lg .cardbtn{min-height:44px;font-size:14px}
.vio-bsize-lg .cta{min-height:52px;font-size:16px}

/* ---------- Hiệu ứng rê chuột ---------- */
.vio-hover-lift .btn,.vio-hover-lift .cardbtn,.vio-hover-lift .cta{transition:transform .16s,box-shadow .16s}
.vio-hover-lift .btn:hover,.vio-hover-lift .cardbtn:hover,.vio-hover-lift .cta:hover{
  transform:translateY(-2px);box-shadow:var(--sh-2)}

.vio-hover-fill .btn,.vio-hover-fill .cardbtn,.vio-hover-fill .cta{transition:filter .16s}
.vio-hover-fill .btn:hover,.vio-hover-fill .cardbtn:hover,.vio-hover-fill .cta:hover{filter:brightness(.9)}

.vio-hover-scale .btn,.vio-hover-scale .cardbtn,.vio-hover-scale .cta{transition:transform .16s}
.vio-hover-scale .btn:hover,.vio-hover-scale .cardbtn:hover,.vio-hover-scale .cta:hover{transform:scale(1.03)}

.vio-hover-glow .btn,.vio-hover-glow .cardbtn,.vio-hover-glow .cta{transition:box-shadow .2s}
.vio-hover-glow .btn-primary:hover,.vio-hover-glow .cardbtn:hover{box-shadow:0 0 0 4px rgba(var(--price-rgb),.25)}
.vio-hover-glow .cta:hover{box-shadow:0 0 0 4px rgba(var(--brand-rgb),.35)}

.vio-hover-none .btn,.vio-hover-none .cardbtn,.vio-hover-none .cta{transition:none}
.vio-hover-none .btn:hover,.vio-hover-none .cardbtn:hover,.vio-hover-none .cta:hover{transform:none;filter:none}

/* ---------- Kiểu thẻ sản phẩm ---------- */
.vio-card-shadow .pcard{box-shadow:var(--sh-1);border:0}
.vio-card-border .pcard{box-shadow:none;border:1px solid var(--line)}
.vio-card-border .pcard:hover{border-color:var(--price);transform:none;box-shadow:none}
.vio-card-flat .pcard{box-shadow:none;border:0;background:transparent;--pcard-pad:0 0 12px}
.vio-card-flat .pcard:hover{transform:none;box-shadow:none}
.vio-card-flat .pcard .thumb{background:var(--line-2)}
.vio-card-raised .pcard{box-shadow:0 6px 0 var(--line);border:1px solid var(--line)}
.vio-card-raised .pcard:hover{transform:translateY(-3px);box-shadow:0 9px 0 var(--line)}

/* ---------- Nút trong thẻ ---------- */
.vio-cardbtn-hide .cardbtn{display:none}
.vio-cardbtn-hover .cardbtn{opacity:0;transform:translateY(4px);transition:opacity .16s,transform .16s}
.vio-cardbtn-hover .pcard:hover .cardbtn,
.vio-cardbtn-hover .pcard:focus-within .cardbtn{opacity:1;transform:none}
@media (hover:none){
  /* Không có chuột thì "hiện khi rê" nghĩa là không bao giờ hiện. */
  .vio-cardbtn-hover .cardbtn{opacity:1;transform:none}
}

/* ---------- Ẩn bớt thông tin trong thẻ ---------- */
.vio-hide-specs .pcard .specs{display:none}
.vio-hide-rating .pcard .foot .stars,
.vio-hide-rating .pcard .foot .stars + b{display:none}
.vio-hide-sold .pcard .foot .sold{display:none}

/* ============================================================
   RESPONSIVE — mobile · tablet · desktop · safe-area
   Breakpoints: 1200 / 1080 / 860 / 640 / 480 / 380
   ============================================================ */

/* Bảng / panel không tràn ngang */
.panel,.spectbl,.woocommerce table.shop_table{max-width:100%}
/* Bài viết trải hết bề ngang `.wrap` trên desktop (trước đây khoá 80ch ≈ 647px
   theo bản demo, user thấy hẹp). `.panel{max-width:100%}` ở trên cùng độ ưu
   tiên nên vẫn phải ghi lại ở đây cho chắc. */
.panel.page-article{max-width:100%}
/* KHÔNG đặt display:block cho .spectbl.
   <table> mà `display:block` thì phần ruột bảng sinh ra một hộp bảng ẩn danh
   co lại vừa nội dung, trong khi hộp block vẫn rộng 100%. Hậu quả:
   `border-bottom` của từng hàng chỉ dài bằng chữ, không hết bề ngang khung.
   Đo trên trang thật: khung rộng 748px nhưng hàng chỉ 302px — đường kẻ hụt 446px.
   Luật cũ đặt display:block để cuộn ngang, nhưng bảng này chỉ có 2 cột
   nhãn/giá trị và chữ tự xuống dòng nên không cần cuộn. */
.spectbl{width:100%}
.panel .spectbl{width:100%}
/* Chuỗi dài không dấu cách (mã máy, URL) thì bẻ dòng thay vì đội bảng ra. */
.spectbl td{overflow-wrap:anywhere}

/* Touch target tối thiểu ~44px cho nút chính */
.cat,.chip,.obtn,.cardbtn,.filters-toggle{min-height:36px}
.btn,.cta,.hbtn,.paybtn{min-height:44px}

/* ---------- Laptop / màn vừa (≤1200) ---------- */
@media (max-width:1200px){
  .pdp{grid-template-columns:minmax(0,1fr) 360px;gap:20px}
  .mega{grid-template-columns:200px 1fr 220px;gap:18px;padding:16px}
  .mega .series{grid-template-columns:repeat(2,1fr)}
  .mega .series .serie-kids{grid-template-columns:repeat(2,1fr)}
}

/* ---------- Tablet ngang / laptop nhỏ (≤1080) ---------- */
@media (max-width:1080px){
  .pdp{grid-template-columns:minmax(0,1fr) 320px}
  .plp{grid-template-columns:200px minmax(0,1fr);gap:16px}
  .ft .cols{grid-template-columns:1fr 1fr}
  .hero-main h1{font-size:30px}
  .trust{grid-template-columns:repeat(2,1fr)}
  ul.products,.grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
}

/* ---------- Tablet dọc / mobile lớn (≤860) — layout chính mobile ---------- */
@media (max-width:860px){
  :root{--hdr-h:auto;--logo-h:34px;--logo-mark:34px;--logo-mw:140px}

  /* Topbar mobile: CHỈ còn SĐT + email, đúng một hàng.
     Ẩn `.usps` (4 chữ ✓…) và `.topbar-links` (gồm cả dãy icon MXH bên trong).
     Không phải chuyện thẩm mỹ thuần tuý: topbar giờ `position:fixed`, nếu để nó
     xuống dòng thì chiều cao thay đổi theo nội dung, mà `body{padding-top}` và
     `.catbar{top}` lại tính bằng hằng số --topbar-h → lệch bao nhiêu là nội dung
     bị che bấy nhiêu. Một hàng, chiều cao biết trước, mới bù đúng được.
     `flex-wrap:nowrap` chốt điều đó lại. */
  :root{--topbar-h:36px}
  /* Chỉ gỡ đệm DỌC. `padding:0` sẽ xoá luôn đệm ngang của .wrap
     (`0 max(16px, env(safe-area-inset-*))`) → chữ dính sát hai mép màn hình,
     và mất cả phần chừa cho tai thỏ. Đo 375px: SĐT bắt đầu ở x=0, email kết
     thúc ở x=375. */
  .topbar .wrap{height:var(--topbar-h);min-height:0;padding-top:0;padding-bottom:0;
    flex-wrap:nowrap;gap:10px}
  .topbar .usps{display:none}
  /* Giữ NGUYÊN nhóm phải nhưng chỉ để lại dãy icon MXH: ẩn mấy chữ
     "Điều kiện bảo hành / Hệ thống 4 cửa hàng / Tài khoản" (`> a`), chừa
     `.topbar-social` — nó là div nằm trong cùng nhóm nên không dính luật này.
     Chỗ đủ: ở 375px SĐT ~98px + 4 icon 26px + gap ~ 210px, khả dụng 351px. */
  .topbar-links{display:flex;gap:0}
  .topbar-links > a{display:none}
  .topbar-social{margin-left:0;gap:3px}
  .topbar-social .soc{width:26px;height:26px;opacity:.85}
  /* SĐT co được, dãy icon thì không (flex:none có sẵn ở .topbar-social) — bẫy 4.14. */
  .topbar-contact{flex:1;min-width:0;gap:8px}
  .topbar-contact .tbc{font-size:11.5px;min-width:0;gap:5px}
  .topbar-contact .tbc span{overflow:hidden;text-overflow:ellipsis}
  body.admin-bar .topbar{top:46px}

  .hdr{position:sticky;top:0}
  .hdr .wrap{
    padding-top:10px;padding-bottom:10px;flex-wrap:wrap;gap:10px;
    align-items:center;
  }
  .logo{max-width:min(52vw,200px)}
  .logo .txt b{font-size:16px}
  .logo .txt small{font-size:9px;letter-spacing:.08em}
  .hsearch{order:3;flex-basis:100%;max-width:none}
  .hsearch input[type=search]{height:44px}
  .hbtn{padding:8px 8px;min-width:44px;min-height:44px}
  .hbtn .l1{display:none}
  .hbtn .l2{font-size:11.5px;max-width:72px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .hact{gap:0;flex:none;margin-left:auto}
  /* Ẩn “cửa hàng” trên mobile — giữ gọi · zalo · giỏ */
  .hact .hbtn-stores{display:none}
  .hact .hbtn.call .l2{max-width:88px}

  /* .hdr cũng sticky top:0 (z:100) nên nó và .catbar (z:89) dính chồng đúng
     một chỗ — header cao 186px che khuất hẳn thanh danh mục, nhìn như menu bị
     đè lên nhau. Trên mobile bỏ dính cho header: 186+44px là 28% màn hình,
     quá nhiều để giữ cả hai; thanh danh mục mới là thứ cần theo khách khi cuộn. */
  .hdr{position:static}
  .catbar{position:sticky;top:var(--topbar-h);z-index:89}
  .catbar .wrap{
    height:44px;gap:4px;
    scroll-snap-type:x proximity;
    -webkit-overflow-scrolling:touch;
    padding-bottom:2px;
  }
  .cat{scroll-snap-align:start;height:36px;padding:0 12px;font-size:13px}
  /* Mobile: catbar cuộn ngang. Mega không mở bằng hover được nữa — JS
     (initMegaMobile) chặn điều hướng và mở nó thành lớp phủ toàn màn hình. */
  .mega{display:none !important}
  .cat.has-mega .cat-caret{opacity:.75}

  /* .catbar là sticky + z-index nên tự tạo stacking context: panel con không
     thể vượt .hdr (z-index:100) nếu không nâng chính .catbar lên. */
  /* Khoá cuộn nền khi panel mở. Chỉ ở đây, trong media query — vượt 860px là
     tự hết hiệu lực, nên không có cảnh trang desktop bị khoá cuộn vì class sót.
     Panel tự cuộn được và có overscroll-behavior:contain nên không kéo theo nền. */
  body.mega-open{overflow:hidden}
  /* Panel mở ra thì PHẢI gỡ hết tổ tiên có thể "giam" một phần tử fixed.
     Safari/iOS lệch Chrome đúng hai chỗ, mà cả hai đều nằm trên đường cha
     của .mega:
       1. .catbar đang position:sticky — WebKit coi tổ tiên sticky là
          containing block của position:fixed, nên inset:0 không còn là màn
          hình nữa mà là đúng dải 44px của thanh danh mục;
       2. .catbar .wrap đang overflow-x:auto — WebKit cắt cả con fixed theo
          overflow của tổ tiên cuộn.
     Trên iPhone hai cái này cộng lại: lớp phủ toàn màn hình bị ép vào đúng
     chỗ thanh danh mục, khách chỉ thấy một lát mỏng (một hàng tên hãng) đè
     lên chỗ cũ — đúng cảnh "bấm Điện thoại mà menu không hiện, như bị che".
     Chrome không lộ lỗi này nên kiểm tra trên máy tính sẽ không thấy gì.
     position:relative vẫn tạo stacking context để z-index:500 đưa panel vượt
     .topbar (z:110), nhưng KHÔNG phải containing block của fixed. Bỏ sticky
     trong lúc mở không mất gì vì panel đã phủ kín màn hình.
     overflow:visible làm .catbar hết cuộn ngang khi đang mở — không sợ tràn
     ngang vì body.mega-open đã overflow:hidden. */
  body.mega-open .catbar{position:relative;z-index:500}
  body.mega-open .catbar .wrap{overflow:visible}

  .mega-host.mega-open .mega{
    display:block !important;
    position:fixed;inset:0;z-index:1;
    max-width:none;margin:0;border-radius:0;box-shadow:none;
    padding:0 14px calc(24px + env(safe-area-inset-bottom,0px));
    overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
  }
  .mega-host.mega-open .mega-head{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    position:sticky;top:0;z-index:2;
    margin:0 -14px 4px;padding:10px 14px;
    background:#fff;border-bottom:1px solid var(--line,rgba(0,0,0,.08));
  }
  .mega-head .mega-all{font-weight:700;font-size:15px;color:var(--price)}
  .mega-head .mega-close{
    display:flex;align-items:center;justify-content:center;flex:none;
    width:40px;height:40px;margin-right:-8px;padding:0;
    border:0;background:transparent;color:var(--fg-2);cursor:pointer;
  }
  .mega-host.mega-open .mega h5{margin-top:14px}
  /* Vùng chạm đủ lớn: hàng hãng và dòng máy đều ≥44px theo WCAG 2.5.5. */
  .mega-host.mega-open .brands li a{padding:11px 10px;font-size:15px;min-height:44px}
  .mega-host.mega-open .series{grid-template-columns:1fr}
  .mega-host.mega-open .series .serie-kids{grid-template-columns:repeat(2,1fr)}
  .mega-host.mega-open .series a{padding:9px 0;font-size:14px}
  .mega-host.mega-open .quick a{padding:11px 10px;font-size:14.5px}

  /* Hai cấp: danh sách hãng ↔ dòng máy của một hãng. Bấm tên hãng là lọc luôn,
     bấm mũi tên mới sang cấp dòng máy — nên mỗi hàng có hai vùng chạm riêng. */
  .mega-host.mega-open .brands li{display:flex;align-items:center;gap:4px}
  .mega-host.mega-open .brands li a{flex:1;min-width:0}
  .mega-host.mega-open .brand-more{
    display:flex;align-items:center;justify-content:center;flex:none;
    width:44px;height:44px;padding:0;
    border:0;background:transparent;color:var(--fg-3);cursor:pointer;
  }
  .mega-host.mega-open .series-back{
    display:flex;align-items:center;gap:6px;
    margin:6px 0 2px;padding:8px 10px 8px 4px;min-height:44px;
    border:0;background:transparent;cursor:pointer;
    font:inherit;font-size:14px;font-weight:700;color:var(--price);
  }
  /* Chưa chọn hãng: chỉ thấy danh sách hãng. Đã chọn: chỉ thấy dòng máy. */
  .mega-host.mega-open .mega:not(.drill) .mega-series{display:none}
  .mega-host.mega-open .mega.drill .brands-col{display:none}
  .mega-host.mega-open .mega.drill .quick{display:none}

  .page-pad{padding-top:12px;padding-bottom:12px}

  .hero{grid-template-columns:minmax(0,1fr);margin:10px 0}
  .hero-main{padding:20px 18px;min-height:auto;border-radius:var(--r-lg)}
  .hero-main h1{font-size:clamp(22px,6.2vw,28px);max-width:none}
  .hero-main p{font-size:14px}
  .hero-cta .cta{flex:1 1 auto;justify-content:center;min-height:46px}
  .hero-side{flex-direction:row;gap:10px}
  .promo{padding:14px;min-height:88px}
  .trust{grid-template-columns:1fr 1fr;gap:10px}
  .trust .t{padding:12px}

  .pdp,.plp{grid-template-columns:minmax(0,1fr)}
  .pdp-media,.pdp .buybox,.pdp-detail{grid-column:1;grid-row:auto}
  .buybox{position:static;padding:16px;margin-top:4px}
  .gallery .big{aspect-ratio:1;min-height:0}
  .gallery .thumbs{gap:6px}
  .gthumb{width:56px;height:56px}
  .spectbl th{width:38%;min-width:100px}
  .optrow{gap:8px}
  .obtn{min-height:42px;padding:8px 12px}

  ul.products,.grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:10px;
  }
  .pcard{--pcard-pad:10px;--pcard-title:13px;border-radius:12px}
  /* Điện thoại: tên máy dài (dung lượng + chip + tình trạng) nên 2 dòng
     luôn cụt nghĩa. Chốt đúng 3 dòng cho mọi thẻ. */
  .pcard h3{line-height:1.3;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;
    line-clamp:3;overflow:hidden;height:3.9em} /* 3 dòng × 1.3 */
  .cardbtn{min-height:40px;font-size:13px}

  /* Bộ lọc: drawer trượt từ trái + safe area */
  .filters{
    position:fixed;
    top:0;bottom:0;left:0;
    width:min(88vw,340px);
    max-width:100%;
    z-index:200;border-radius:0;
    overflow-y:auto;-webkit-overflow-scrolling:touch;
    transform:translateX(-105%);
    transition:transform .22s ease;
    box-shadow:var(--sh-3);
    padding-left:max(14px, env(safe-area-inset-left));
    padding-right:14px;
    padding-bottom:max(16px, env(safe-area-inset-bottom));
  }
  .filters.open{transform:none}
  .filters-head{display:flex;align-items:center;justify-content:space-between;
    padding:14px 0 10px;border-bottom:1px solid var(--line-2);position:sticky;top:0;background:#fff;z-index:1}
  .filters-close{font-size:18px;width:44px;height:44px;border-radius:50%;background:var(--line-2);display:grid;place-items:center}
  .filters-toggle{display:inline-flex;min-height:40px}
  body.filters-open{overflow:hidden;touch-action:none}
  body.filters-open::after{
    content:"";position:fixed;inset:0;background:rgba(14,17,22,.45);z-index:150;
    backdrop-filter:blur(1px);
  }

  .toolbar{gap:8px}
  /* Cũng phải 2 class: luật đè Woo ở dòng ~707 là (0,2,0), luật 1 class ở đây
     sẽ thua và dòng "Hiển thị…" vẫn bị đẩy sang phải trên điện thoại. */
  .woocommerce .woocommerce-result-count,
  .woocommerce-page .woocommerce-result-count{width:100%;margin:0}
  .woocommerce-result-count{width:100%;margin:0;font-size:12.5px}
  .woocommerce-ordering{flex:1;min-width:0}
  .woocommerce-ordering select{width:100%;max-width:100%;min-height:40px}

  .buy{grid-template-columns:1fr}

  /* Thanh mua đáy + tai thỏ / home indicator */
  .mbuy{
    display:flex;position:fixed;bottom:0;left:0;right:0;z-index:140;background:#fff;
    box-shadow:0 -6px 20px rgba(14,17,22,.12);
    padding:9px 12px calc(9px + env(safe-area-inset-bottom));
    gap:8px;align-items:center;
  }
  .mbuy .p{
    font-weight:850;color:var(--price);font-size:15px;line-height:1.15;flex:0 1 auto;
    max-width:34%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }
  .mbuy .btn{min-height:46px;font-size:13.5px;flex:1;padding:0 8px}
  .mbuy .mcall,.mbuy .mcart{flex:0 0 48px;padding:0;font-size:18px;min-width:48px}
  body.single-product{padding-bottom:calc(76px + env(safe-area-inset-bottom))}

  .checkout .col2-set{grid-template-columns:1fr}
  /* Bảng giỏ hàng trên mobile do woocommerce-smallscreen.css lo: ẩn thead, xếp
     mỗi ô thành một dòng và in nhãn bằng `td::before{content:attr(data-title)}`
     — nhãn tiếng Việt lấy từ data-title trong woocommerce/cart/cart.php.
     Selector của nó là `.woocommerce table.shop_table_responsive tr td` nên
     mọi rule dạng `.shop_table tr` ở đây đều thua; chỉ chỉnh phần còn thiếu. */
  .woocommerce-cart-form__contents .product-name .variation{text-align:right}
  /* woocommerce-smallscreen.css ẩn hẳn ô ảnh trên mobile; bản demo vẫn hiện.
     Rule của nó là `.woocommerce #content table.cart .product-thumbnail` — CÓ ID
     nên phải kèm `#content` mới đè nổi. `text-align` cũng cần !important vì bản
     gốc dùng !important. */
  #content .woocommerce table.shop_table td.product-thumbnail{
    display:block;width:auto;padding:12px 12px 0;text-align:left!important}
  .vio-cart-actions-in{flex-direction:column;align-items:stretch}
  .shop_table td.actions .coupon .input-text{width:100%}
  /* Toast trên mobile căng ngang bằng left+right, KHÔNG còn left:50% nữa —
     nên phải huỷ luôn translate(-50%) của bản desktop, nếu không nó kéo toast
     lệch nửa chiều rộng ra ngoài mép trái (chỉ còn thấy đuôi chữ).
     padding-right chừa chỗ cột nút nổi bên phải: nút chat 48app có
     z-index 2.147.483.001 nên luôn nằm trên toast, không nhường được. */
  .vio-toast{
    bottom:calc(84px + env(safe-area-inset-bottom));left:12px;right:12px;max-width:none;
    transform:translate(0,20px);text-align:center;
    padding-right:calc(18px + var(--float-size));
  }
  .vio-toast.on{transform:translate(0,0)}

  .ft{padding-bottom:max(24px, env(safe-area-inset-bottom))}
  .ft .cols{grid-template-columns:1fr;gap:20px}
  .ft .bottom{flex-direction:column;align-items:flex-start;gap:6px;font-size:12px}

  .postgrid{grid-template-columns:1fr}
  .vio-modal-box{width:min(100%,420px);margin:12px;max-height:min(90vh,640px)}
  .vio-modal-box.vio-inst{width:min(100%,520px)}
  .sec-head{flex-wrap:wrap;gap:8px}
  .sec-head h2{font-size:18px}
}

/* ---------- Phone thường (≤640) ---------- */
@media (max-width:640px){
  .hero-side{flex-direction:column}
  .trust .t span{font-size:12px}
  .hact .hbtn.call span{display:none} /* icon only cho gọn */
  .hact .hbtn.call{justify-content:center}
  .hact .hbtn.cart .l2{display:none}
  .hact .hbtn-account{padding:8px 6px;min-width:40px}
  .catbar .wrap{padding-left:4px;padding-right:4px}
  .promo b{font-size:14px}
  .price-line .price{font-size:26px}
  .paybtn{padding:10px 12px}
  .vio-inst .vio-modal-body{padding:14px}
  .vio-inst-hero .v{font-size:26px}
  .vio-inst .optrow .obtn{flex:1 1 130px}
  /* Bốn cột vừa đúng bề ngang máy 375px — bỏ min-width để khỏi sinh ra
     thanh cuộn ngang chỉ vì thiếu vài pixel. Giá dài bất thường vẫn cuộn
     được nhờ overflow-x của .vio-inst-scroll. */
  .vio-insttbl{font-size:12px;min-width:0}
  .vio-insttbl th,.vio-insttbl td{padding:8px 7px}
}

/* ---------- Phone nhỏ (≤520) ---------- */
@media (max-width:520px){
  .trust{grid-template-columns:1fr}
  .archive-head h1{font-size:18px}
  .buybox h1{font-size:17px;line-height:1.25}
  .price-line .price{font-size:22px}
  .hero-main{padding:16px}
  .hero-cta{flex-direction:column}
  .hero-cta .cta{width:100%}
  .mbuy .p{font-size:14px;max-width:30%}
  .gthumb{width:48px;height:48px}
  .notfound{padding:20px 16px}
}

/* ---------- Phone rất nhỏ / fold hẹp (≤380) ---------- */
@media (max-width:380px){
  ul.products,.grid{gap:8px}
  .pcard{--pcard-pad:8px;--pcard-title:12px}
  .cardbtn{font-size:12px;min-height:38px}
  .hbtn{padding:6px}
  .wrap{padding-left:12px;padding-right:12px}
  .mbuy{gap:6px;padding-left:8px;padding-right:8px}
  .mbuy .btn{font-size:12.5px}
}

/* ---------- Landscape phone: bớt chiếm chiều dọc ---------- */
@media (max-width:860px) and (max-height:430px) and (orientation:landscape){
  .hero-main{min-height:0;padding:14px 16px}
  .hero-main h1{font-size:20px}
  .mbuy{padding-top:6px;padding-bottom:6px}
  body.single-product{padding-bottom:60px}
  .gallery .big{max-height:42vh}
}

/* ---------- Desktop lớn: giữ grid sp rộng hơn ---------- */
@media (min-width:1081px){
  ul.products,.grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
}
@media (min-width:1400px){
  .pdp{grid-template-columns:minmax(0,1fr) 420px;gap:28px}
}

/* Hover chỉ khi có chuột thật — tránh sticky hover trên cảm ứng */
@media (hover:none){
  .pcard:hover{transform:none}
  .btn:hover,.cardbtn:hover,.cta:hover{transform:none}
}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *{transition:none !important;animation:none !important}
}

/* In ấn / lưu PDF — ẩn chrome */
@media print{
  .topbar,.hdr,.catbar,.mbuy,.vio-chat,.vio-totop,.filters,.hact,.hsearch{display:none !important}
  body{padding-top:0 !important}
  body.single-product{padding:0 !important}
  .buybox{position:static;box-shadow:none;border:1px solid #ccc}
  a[href]::after{content:""}
}

/* ------------------------------------------------------------------
   Gỡ layout float của WooCommerce trên MOBILE.

   Khối reset ở trên dùng selector `.woocommerce ul.products li.product`
   — specificity (0,3,2). Nhưng woocommerce-smallscreen.css (nạp kèm
   media="only screen and (max-width:768px)") lại dùng
   `.woocommerce ul.products[class*="columns-"] li.product` — (0,4,2),
   cao hơn, nên nó thắng và ép lại float:left;width:48%.

   Trong grid container, float bị bỏ qua nhưng width:48% thì KHÔNG: thẻ co
   còn 48% bề rộng ô lưới của chính nó, khiến giá vỡ giữa con số
   ("6,390,0" / "00đ"), nút xuống 2 dòng và ảnh bị bóp.

   Vì thế phải lặp lại đúng bộ selector của Woo để bằng specificity.
   ------------------------------------------------------------------ */
@media screen and (max-width:768px){
  .woocommerce ul.products[class*="columns-"] li.product,
  .woocommerce-page ul.products[class*="columns-"] li.product{
    float:none;width:auto;margin:0;padding:var(--pcard-pad,12px);
  }
  .woocommerce ul.products[class*="columns-"] li.product:nth-child(2n),
  .woocommerce-page ul.products[class*="columns-"] li.product:nth-child(2n){
    float:none;margin-right:0;
  }
  .woocommerce ul.products[class*="columns-"] li.product:nth-child(2n+1),
  .woocommerce-page ul.products[class*="columns-"] li.product:nth-child(2n+1){
    clear:none;
  }

  /* Giá là số dài, không được ngắt giữa chừng. */
  .price-row,.pcard .price,.price-row .price{white-space:nowrap}
}

/* ==================================================================
   TRANG THANH TOÁN
   Bám bản demo: trái = thông tin nhận hàng, phải = đơn hàng + thanh toán.
   Phần khung thẻ (.woocommerce-billing-fields, .woocommerce-checkout-review-order)
   và lưới .checkout .col2-set nằm ở khối "Form thanh toán" phía trên.
   ================================================================== */
.vio-co-col{min-width:0}
.vio-co-side{display:flex;flex-direction:column}

/* Bảng "Đơn hàng của bạn" nằm sẵn trong thẻ trắng — không lồng thêm nền/đổ bóng. */
.woocommerce table.shop_table.vio-review{background:#fff;box-shadow:var(--sh-1);border-radius:var(--r-lg);
  border-collapse:collapse;font-size:14px;margin:0;overflow:hidden}
.woocommerce table.vio-review th,.woocommerce table.vio-review td{padding:13px 16px;
  border-bottom:1px solid var(--line-2);border-top:0;vertical-align:top}
.woocommerce table.vio-review th{text-align:left;font-weight:600;color:var(--fg-2)}
.woocommerce table.vio-review td{text-align:right;font-weight:700;white-space:nowrap}
.woocommerce table.vio-review tbody th{font-weight:600;color:var(--fg-2);line-height:1.45}
.vio-review .product-quantity{color:var(--fg-3);font-weight:700;white-space:nowrap}
.vio-review .product-meta{display:block;margin-top:3px;font-size:11.5px;color:var(--fg-3);line-height:1.45}
.vio-review tfoot th,.vio-review tfoot td{color:var(--fg-2)}
.woocommerce table.vio-review .order-total th{color:var(--fg);font-weight:800;font-size:15px}
.woocommerce table.vio-review .order-total td{font-size:20px;color:var(--price);font-weight:850;letter-spacing:-.02em}
.woocommerce table.vio-review tfoot tr:last-child th,.woocommerce table.vio-review tfoot tr:last-child td{border-bottom:0}

.vio-co-back{display:inline-block;margin-top:14px;font-size:13px;color:var(--fg-3);text-decoration:none}
.vio-co-back:hover{color:var(--brand)}

/* Ô quốc gia cố định VN — giữ trong DOM cho WooCommerce, ẩn khỏi mắt khách. */
.vio-hidden-field{display:none!important}
.woocommerce-invalid input,.woocommerce-invalid select{border-color:var(--price)}

#payment .wc_payment_method:has(input:checked){border-color:var(--price);background:var(--price-soft)}

/* Nút đặt hàng: bản demo là nút ĐỎ rộng theo chữ (inline-flex), một dòng,
   không phải nút full-width. */
.woocommerce #payment .vio-co-btn,
.vio-co-btn{display:inline-flex;align-items:center;justify-content:center;width:auto;
  min-height:48px;padding:0 22px;border-radius:12px;
  background:var(--price);color:#fff;font-size:15px;font-weight:750;line-height:1.55}
/* Bọc nút là `.form-row` (flex column) nên align-items mặc định `stretch` kéo
   nút rộng hết hàng; demo để nút vừa bằng chữ. */
.vio-co-submit{align-items:flex-start}
.vio-co-note{font-size:12px;color:var(--fg-2);line-height:1.55;margin:10px 0 12px}
.vio-co-note a{color:var(--fg-2);text-decoration:underline}

/* ==================================================================
   TRANG TÀI KHOẢN
   Cùng ngôn ngữ với trang chủ: thẻ trắng bo 16, nút đỏ, chữ phụ xám.
   ================================================================== */
.vio-acc-card{padding:18px 20px}
.vio-acc-h{font-size:16px;font-weight:800;margin:0 0 6px;letter-spacing:-.01em}
.vio-acc-lead{font-size:13px;color:var(--fg-2);margin:0 0 14px;line-height:1.55}

/* --- chưa đăng nhập: hai thẻ --- */
.vio-acc-login{display:grid;gap:16px;align-items:start}
.vio-acc-login-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.vio-acc-login .form-row{display:flex;flex-direction:column;gap:6px;margin:0 0 13px}
.vio-acc-login label{font-size:12.5px;font-weight:650;color:var(--fg-2)}
.vio-acc-login .required{color:var(--price)}
.vio-acc-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:4px}
.vio-acc-remember{display:flex!important;flex-direction:row!important;align-items:center;gap:8px;
  font-size:13px;font-weight:500;color:var(--fg-2);margin:0}
.vio-acc-remember input{width:17px;height:17px;accent-color:var(--price)}
/* Nút của WooCommerce mặc định là xám bo 3px; kéo về nút của theme.
   `.woocommerce button.button` thắng class `.btn` nên phải chỉ rõ như dưới. */
.woocommerce .vio-acc-btn.btn{display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;padding:0 20px;border:0;border-radius:12px;
  font-size:14.5px;font-weight:750;line-height:1;cursor:pointer}
.woocommerce .vio-acc-btn.btn-primary{background:var(--price);color:#fff}
.woocommerce .vio-acc-btn.btn-primary:hover{background:var(--price);filter:brightness(1.06)}
.woocommerce .vio-acc-btn.btn-ghost{background:#fff;color:var(--fg);border:1.5px solid var(--line)}
.woocommerce .vio-acc-btn.btn-ghost:hover{background:#fff;border-color:var(--price);color:var(--price)}
.vio-acc-login .lost_password{margin:12px 0 0;font-size:13px}
.vio-acc-login .lost_password a{color:var(--fg-3)}
.vio-acc-login .lost_password a:hover{color:var(--price)}
.vio-acc-help{margin-top:16px;font-size:13px;color:var(--fg-2);line-height:1.6}
.vio-acc-help a{color:var(--price)}

/* --- đã đăng nhập: menu trái + nội dung phải --- */
.vio-acc-grid{display:grid;grid-template-columns:250px minmax(0,1fr);gap:16px;align-items:start}
/* woocommerce-layout.css thả `float:left;width:30%` lên menu và `width:68%` lên
   nội dung. Trong lưới, hai % đó tính theo BỀ RỘNG CỘT nên menu co còn 75px.
   Selector của nó là `.woocommerce-account .woocommerce-MyAccount-navigation`
   (2 class) và nạp sau main.css — phải kèm `#content` mới đè nổi. */
#content .woocommerce-MyAccount-navigation,
#content .woocommerce-MyAccount-content{float:none;width:auto;margin:0}
.vio-acc-nav{padding:10px}
.vio-acc-nav ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.vio-acc-nav a{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;
  font-size:14px;font-weight:600;color:var(--fg);text-decoration:none}
.vio-acc-nav a:hover{background:var(--line-2)}
.vio-acc-nav .is-active a{background:var(--price-soft);color:var(--price)}
.vio-acc-ico{font-size:15px;line-height:1;width:20px;text-align:center;flex:none}

.vio-acc-hello{margin-bottom:16px}
.vio-acc-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
.vio-acc-tile{display:flex;flex-direction:column;gap:4px;padding:16px;border-radius:var(--r);
  border:1px solid var(--line);text-decoration:none;color:var(--fg);background:#fff;
  transition:border-color .15s,box-shadow .15s}
.vio-acc-tile:hover{border-color:var(--price);box-shadow:var(--sh-1)}
.vio-acc-tile-ico{font-size:22px;line-height:1;margin-bottom:4px}
.vio-acc-tile b{font-size:14.5px;font-weight:750}
.vio-acc-tile small{font-size:12.5px;color:var(--fg-2);line-height:1.5}

/* ---- BẢNG ĐƠN HÀNG TRONG TÀI KHOẢN ---- */

/* Thông báo / cảnh báo trong khung tài khoản — đè woocommerce.css.
   Khối là flex, nút đứng TRƯỚC chữ trong DOM (WooCommerce sinh ra
   `<a class="button wc-forward">…</a> <chữ>`). Nút nằm bên trái hay bên phải
   là do margin quyết định, KHÔNG phải float — woocommerce.css có
   `.woocommerce-info .button{float:right}` nhưng đã bị `float:none` bên dưới
   vô hiệu hoá. Muốn đẩy nút sang phải thì đặt lại `margin-left:auto`. */
.woocommerce .woocommerce-MyAccount-content .woocommerce-message,
.woocommerce .woocommerce-MyAccount-content .woocommerce-info,
.woocommerce-account .woocommerce-MyAccount-content .woocommerce-message,
.woocommerce-account .woocommerce-MyAccount-content .woocommerce-info{
  font-size:13.5px;border-radius:var(--r-lg) !important;padding:16px 18px !important;
  border:1.5px solid var(--line) !important;background:var(--line-2) !important;
  line-height:1.6;margin:0 0 18px;display:flex;align-items:center;
  gap:14px;flex-wrap:wrap;color:var(--fg-2);box-shadow:none !important
}
.woocommerce .woocommerce-MyAccount-content .woocommerce-message::before,
.woocommerce .woocommerce-MyAccount-content .woocommerce-info::before,
.woocommerce-account .woocommerce-MyAccount-content .woocommerce-message::before,
.woocommerce-account .woocommerce-MyAccount-content .woocommerce-info::before{
  content:none !important;display:none !important
}
.woocommerce .woocommerce-MyAccount-content .woocommerce-info .button,
.woocommerce .woocommerce-MyAccount-content .woocommerce-message .button,
.woocommerce .woocommerce-MyAccount-content .woocommerce-info .wc-forward,
.woocommerce .woocommerce-MyAccount-content .woocommerce-message .wc-forward{
  margin-left:0;display:inline-flex;align-items:center;justify-content:center;
  /* KHÔNG khai height ở đây — để luật .button chung (min-height:48px) quyết định.
     Đo 2026-09-02 trên trang thật: nút "Xem" và "Kế tiếp" trong khu tài khoản
     đều cao 48px, vì min-height:48px của luật chung đè height:36px/40px khai
     riêng cho chúng (min-height luôn thắng height). 48px mới là chiều cao THẬT
     của trang, nên nút này lấy 48px để đứng cùng hàng với chúng. */
  padding:0 20px !important;border-radius:var(--r-sm) !important;
  background:var(--brand) !important;color:var(--brand-ink) !important;
  font-size:13.5px;font-weight:700;border:1.5px solid var(--brand) !important;
  cursor:pointer;text-decoration:none;white-space:nowrap;
  transition:background .15s,border-color .15s,box-shadow .15s;float:none !important
}
.woocommerce .woocommerce-MyAccount-content .woocommerce-info .button:hover,
.woocommerce .woocommerce-MyAccount-content .woocommerce-message .button:hover,
.woocommerce .woocommerce-MyAccount-content .woocommerce-info .wc-forward:hover,
.woocommerce .woocommerce-MyAccount-content .woocommerce-message .wc-forward:hover{
  background:var(--brand-600) !important;border-color:var(--brand-600) !important;
  box-shadow:0 0 0 3px rgba(var(--brand-rgb),.30)
}
/* Chữ chiếm hết phần còn lại để nút không bị chữ đẩy lệch khi câu dài/ngắn khác
   nhau; xuống mobile thì flex-wrap của khối cho chữ rơi xuống dòng dưới. */
.woocommerce .woocommerce-MyAccount-content .woocommerce-info,
.woocommerce-account .woocommerce-MyAccount-content .woocommerce-info{
  justify-content:flex-start
}

/* Bảng đơn hàng — đè mặc định của woocommerce */
.woocommerce-MyAccount-content table.shop_table{
  width:100%;border-collapse:separate;border-spacing:0;
  border:0;border-radius:var(--r);overflow:hidden;
  font-size:14px;background:#fff;margin:0
}
.woocommerce-MyAccount-content table.shop_table thead th{
  background:var(--line-2);font-size:11.5px;text-transform:uppercase;
  letter-spacing:.07em;color:var(--fg-3);font-weight:700;
  padding:12px 16px;border-bottom:1.5px solid var(--line);
  white-space:nowrap
}
.woocommerce-MyAccount-content table.shop_table td{
  padding:14px 16px;border-bottom:1px solid var(--line-2);
  vertical-align:middle;color:var(--fg)
}
.woocommerce-MyAccount-content table.shop_table tbody tr:last-child td{
  border-bottom:0
}
.woocommerce-MyAccount-content table.shop_table tbody tr{
  transition:background .12s
}
.woocommerce-MyAccount-content table.shop_table tbody tr:hover{
  background:var(--line-2)
}

/* Mã đơn hàng */
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-number a{
  font-weight:800;color:var(--price);text-decoration:none;
  letter-spacing:-.01em
}
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-number a:hover{
  text-decoration:underline
}

/* Ngày đặt */
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-date{
  color:var(--fg-2);font-size:13.5px
}

/* Trạng thái — badge dạng pill */
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-status{
  font-size:12.5px;font-weight:700
}
/* Xóa pseudo mặc định — dùng .vio-order-badge thay thế */
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-status::before{
  content:none
}

/* Badge trạng thái có chấm màu — dùng biến --dot inline từ PHP */
.vio-order-badge{
  display:inline-flex;align-items:center;gap:7px;
  padding:4px 12px;border-radius:999px;font-size:12.5px;font-weight:700;
  background:var(--line-2);color:var(--fg);white-space:nowrap
}
.vio-order-badge::before{
  content:'';display:block;width:8px;height:8px;border-radius:50%;
  background:var(--dot, var(--fg-3));flex:none
}

/* Tổng tiền */
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-total{
  font-weight:800;color:var(--price);white-space:nowrap
}

/* Nút Xem */
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-actions a.button,
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-actions a.wc-forward{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:68px;height:36px;padding:0 16px;
  border-radius:var(--r-sm);border:1.5px solid var(--line);
  background:#fff;color:var(--fg);font-size:13px;font-weight:700;
  text-decoration:none;cursor:pointer;white-space:nowrap;
  transition:border-color .15s,color .15s,box-shadow .15s
}
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-actions a.button:hover,
.woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-actions a.wc-forward:hover{
  border-color:var(--price);color:var(--price);box-shadow:0 0 0 3px var(--price-soft)
}

/* Nút phân trang (Kế tiếp / Trở về) */
.woocommerce-MyAccount-content .woocommerce-pagination{
  margin-top:18px;display:flex;justify-content:center;gap:10px
}
.woocommerce-MyAccount-content .woocommerce-pagination a,
.woocommerce-MyAccount-content .woocommerce-pagination span,
.woocommerce-MyAccount-content .woocommerce-button--next,
.woocommerce-MyAccount-content .woocommerce-button--previous,
.woocommerce-MyAccount-content .woocommerce-Button--next,
.woocommerce-MyAccount-content .woocommerce-Button--previous{
  display:inline-flex;align-items:center;height:40px;padding:0 22px;
  border-radius:var(--r-sm);border:1.5px solid var(--line);background:#fff;
  font-size:13.5px;font-weight:700;color:var(--fg);text-decoration:none;
  transition:border-color .15s,color .15s,box-shadow .15s;cursor:pointer
}
.woocommerce-MyAccount-content .woocommerce-pagination a:hover,
.woocommerce-MyAccount-content .woocommerce-button--next:hover,
.woocommerce-MyAccount-content .woocommerce-button--previous:hover,
.woocommerce-MyAccount-content .woocommerce-Button--next:hover,
.woocommerce-MyAccount-content .woocommerce-Button--previous:hover{
  border-color:var(--price);color:var(--price);box-shadow:0 0 0 3px var(--price-soft)
}

/* Form chỉnh sửa tài khoản & địa chỉ: cùng phong cách */
.woocommerce-MyAccount-content fieldset{
  border:1.5px solid var(--line);border-radius:var(--r);
  padding:18px;margin:18px 0
}
.woocommerce-MyAccount-content fieldset legend{
  font-size:14px;font-weight:800;padding:0 8px;color:var(--fg)
}
.woocommerce-MyAccount-content .woocommerce-address-fields .form-row input,
.woocommerce-MyAccount-content .woocommerce-address-fields .form-row select,
.woocommerce-MyAccount-content .woocommerce-EditAccountForm .form-row input,
.woocommerce-MyAccount-content .woocommerce-EditAccountForm .form-row select{
  width:100%;min-height:44px;border:1.5px solid var(--line);border-radius:10px;
  padding:10px 12px;font:inherit;font-size:14.5px;background:#fff;color:var(--fg)
}
.woocommerce-MyAccount-content .woocommerce-address-fields .form-row input:focus,
.woocommerce-MyAccount-content .woocommerce-address-fields .form-row select:focus,
.woocommerce-MyAccount-content .woocommerce-EditAccountForm .form-row input:focus,
.woocommerce-MyAccount-content .woocommerce-EditAccountForm .form-row select:focus{
  outline:none;border-color:var(--price);box-shadow:0 0 0 3px var(--price-soft)
}
.woocommerce-MyAccount-content button[type=submit],
.woocommerce-MyAccount-content input[type=submit]{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;padding:0 28px;border-radius:var(--r-sm);border:0;
  background:var(--price);color:#fff;font-size:14px;font-weight:750;
  cursor:pointer;transition:filter .15s
}
.woocommerce-MyAccount-content button[type=submit]:hover,
.woocommerce-MyAccount-content input[type=submit]:hover{
  filter:brightness(1.06)
}

/* Bảng chi tiết đơn (trang xem đơn cụ thể) */
.woocommerce-MyAccount-content .woocommerce-table--order-details{
  margin-top:12px
}
.woocommerce-MyAccount-content .order-again .button{
  display:inline-flex;align-items:center;height:40px;padding:0 22px;
  border-radius:var(--r-sm);border:1.5px solid var(--price);background:var(--price-soft);
  color:var(--price);font-size:13px;font-weight:700;text-decoration:none;
  transition:background .15s
}
.woocommerce-MyAccount-content .order-again .button:hover{
  background:var(--price);color:#fff
}

/* Trạng thái đơn trong trang chi tiết */
.woocommerce-MyAccount-content mark.order-status{
  background:var(--line-2);color:var(--fg);padding:3px 10px;
  border-radius:999px;font-size:13px
}

/* Danh sách ghi chú đơn hàng */
.woocommerce-MyAccount-content .woocommerce-OrderUpdates{
  list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:10px
}
.woocommerce-MyAccount-content .woocommerce-OrderUpdate{
  padding:12px 16px;background:var(--line-2);border-radius:var(--r);
  border:1px solid var(--line);font-size:13.5px
}
.woocommerce-MyAccount-content .woocommerce-OrderUpdate-meta{
  font-size:12px;color:var(--fg-3);margin-bottom:6px
}

/* ---- trang cảm ơn ---- */
.vio-ty{max-width:720px;margin:0 auto}
.vio-ty-head{text-align:center;padding:26px 20px 22px}
.vio-ty-tick{width:62px;height:62px;margin:0 auto 14px;border-radius:999px;
  display:grid;place-items:center;background:var(--ok-soft);color:var(--ok);font-size:30px;font-weight:800}
.vio-ty-head h1{font-size:23px;font-weight:850;margin:0 0 8px;letter-spacing:-.02em}
.vio-ty-head p{font-size:14px;color:var(--fg-2);margin:0;line-height:1.6}
.vio-ty-code{display:inline-block;margin-top:14px;padding:8px 16px;border-radius:999px;
  background:var(--line-2);font-size:14px;font-weight:800;letter-spacing:.02em}
.vio-ty-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:18px}
.vio-ty-box h3{font-size:13px;font-weight:800;margin:0 0 10px;text-transform:uppercase;
  letter-spacing:.04em;color:var(--fg-3)}
.vio-ty-box dl{margin:0;display:flex;flex-direction:column;gap:7px}
.vio-ty-box .r{display:flex;justify-content:space-between;gap:12px;font-size:13.5px}
.vio-ty-box .r dt{color:var(--fg-3);flex:none}
.vio-ty-box .r dd{margin:0;font-weight:650;text-align:right}
.vio-ty-cta{display:flex;gap:10px;justify-content:center;margin-top:20px;flex-wrap:wrap}

@media (max-width:900px){
  .vio-acc-login-2{grid-template-columns:1fr}
  /* Menu tài khoản thành hàng ngang XUỐNG DÒNG, nhường chỗ cho nội dung.

     Bản cũ cuộn ngang (`overflow-x:auto`): từ mục thứ tư trở đi nằm ngoài
     màn hình, mà iOS không vẽ thanh cuộn nên khách tưởng menu chỉ có ba mục.
     `flex-wrap:wrap` cho mục tự rớt xuống dòng dưới — thấy hết mục, không
     phải vuốt.

     `1fr` trần là `minmax(auto,1fr)` — sàn `auto` không cho track co xuống
     dưới min-content của ô. Với menu cuộn ngang `white-space:nowrap`,
     min-content bằng tổng bề rộng 6 mục (~908px): track phình theo, kéo CẢ
     TRANG tràn ngang trên điện thoại (Chrome cắt mất nửa nội dung; iOS Safari
     còn tính sai chiều cao nên footer trồi lên đè lên thẻ tài khoản). Bản
     wrap này min-content chỉ bằng MỘT mục rộng nhất nên hết nguy cơ, nhưng
     vẫn giữ `minmax(0,1fr)` + `min-width:0` cho mấy ô tự phình còn lại
     (bảng đơn hàng chẳng hạn). Bẫy 4.19. */
  .vio-acc-grid{grid-template-columns:minmax(0,1fr)}
  .vio-acc-grid>*{min-width:0}
  .vio-acc-nav ul{flex-direction:row;flex-wrap:wrap;gap:6px}
  /* Không `white-space:nowrap`: nhãn dài bất thường (plugin thêm mục) thì
     ngắt trong ô còn hơn đẩy tràn cả trang. */
  .vio-acc-nav li{max-width:100%}
  .vio-acc-nav a{padding:9px 12px}

  .checkout .col2-set{grid-template-columns:1fr}
  /* Một cột: ĐƠN HÀNG lên đầu để khách xác nhận lại thứ mình mua, rồi mới tới
     form, cuối cùng là khối thanh toán — nút ĐẶT HÀNG phải nằm sau các ô nhập.
     `display:contents` để ba thẻ tự xếp trong lưới thay vì kẹt trong cột phải. */
  .checkout .col2-set .vio-co-side{display:contents}
  .checkout .col2-set .woocommerce-checkout-review-order{order:-1}
  .checkout .col2-set .vio-co-paycard{order:1}
  .vio-ty-grid{grid-template-columns:1fr}

  /* Đơn hàng responsive: bảng WooCommerce chuyển sang dạng card xếp chồng */
  .woocommerce-MyAccount-content table.shop_table thead{display:none}
  .woocommerce-MyAccount-content table.shop_table,
  .woocommerce-MyAccount-content table.shop_table tbody{display:block}
  .woocommerce-MyAccount-content table.shop_table tr{
    display:flex;flex-wrap:wrap;gap:4px 12px;padding:14px 16px;
    border-bottom:1px solid var(--line-2);align-items:center
  }
  .woocommerce-MyAccount-content table.shop_table tr:last-child{border-bottom:0}
  .woocommerce-MyAccount-content table.shop_table td{
    display:inline;padding:0;border:0;font-size:13.5px
  }
  .woocommerce-MyAccount-content table.shop_table td::before{
    content:attr(data-title);font-size:11px;text-transform:uppercase;
    letter-spacing:.05em;color:var(--fg-3);font-weight:700;
    display:block;margin-bottom:2px
  }
  .woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-number{
    font-size:15px;flex:none
  }
  .woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-actions{
    margin-left:auto;flex:none
  }
  .woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-actions a.button,
  .woocommerce-MyAccount-content table.shop_table .woocommerce-orders-table__cell-order-actions a.wc-forward{
    height:32px;min-width:auto;padding:0 14px;font-size:12px
  }
}

/* ============================================================
   BÌNH LUẬN — dùng lại tông panel/nút của trang chủ
   ============================================================ */
.vio-comments{max-width:100%}
.vio-comments .sec-head{margin-bottom:14px}
.vio-comments .sec-head h2{font-size:18px}

.vio-comments .comment-list{list-style:none;margin:0 0 6px;padding:0;display:flex;flex-direction:column;gap:12px}
.vio-comments .comment-list .children{list-style:none;margin:12px 0 0;padding:0 0 0 16px;
  border-left:2px solid var(--line-2);display:flex;flex-direction:column;gap:12px}
.vio-comments .comment-body{background:var(--line-2);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px}
.vio-comments .comment-meta{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.vio-comments .comment-author{display:flex;align-items:center;gap:10px;font-size:14px;font-weight:700}
.vio-comments .comment-author img.avatar{width:36px;height:36px;border-radius:50%;flex:none;background:#fff}
.vio-comments .comment-author .says{display:none}
.vio-comments .comment-metadata{margin-left:auto;font-size:12px;color:var(--fg-3)}
.vio-comments .comment-metadata a{color:var(--fg-3)}
.vio-comments .comment-content p{margin:0 0 8px;font-size:14px;color:var(--fg-2)}
.vio-comments .comment-content p:last-child{margin-bottom:0}
.vio-comments .comment-awaiting-moderation{display:inline-block;margin-bottom:8px;font-size:12px;font-weight:650;
  color:var(--price);background:var(--price-soft);border-radius:999px;padding:3px 10px}
.vio-comments .reply{margin-top:10px}
.vio-comments .reply a{display:inline-flex;align-items:center;height:32px;padding:0 14px;border-radius:999px;
  border:1.5px solid var(--line);background:#fff;font-size:12.5px;font-weight:700;color:var(--fg)}
.vio-comments .reply a:hover{border-color:var(--price);color:var(--price)}
.vio-comments .bypostauthor > .comment-body{border-color:var(--brand);background:var(--brand-soft)}

.vio-comments .comment-respond{margin-top:18px;padding-top:18px;border-top:1px solid var(--line-2)}
.vio-comments .comment-list + .comment-respond,
.vio-comments .comment-list .comment-respond{border-top:0;padding-top:0}
.vio-comments .comment-list .comment-respond{margin-top:12px}
.vio-comments .comment-reply-title small{margin-left:10px;font-size:12.5px;font-weight:600}
.vio-comments .comment-reply-title small a{color:var(--info)}
.vio-cf-note{margin:0}

/* Một cột dọc — 3 ô rộng bằng nhau, xếp chồng lên nhau */
.vio-cform{display:flex;flex-direction:column;gap:14px;align-items:stretch}
.vio-cf-row{margin:0;width:100%;display:flex;flex-direction:column;gap:6px}
.vio-cf-row label{font-size:12.5px;font-weight:650;color:var(--fg-2)}
.vio-cf-row .req{color:var(--price)}
.vio-cform input[type=text],.vio-cform input[type=email],.vio-cform input[type=url],.vio-cform textarea{
  width:100%;min-height:44px;border:1.5px solid var(--line);border-radius:10px;
  padding:10px 12px;font:inherit;font-size:14.5px;background:#fff;color:var(--fg)}
.vio-cform textarea{min-height:120px;resize:vertical}
.vio-cform input:focus,.vio-cform textarea:focus{
  outline:none;border-color:var(--price);box-shadow:0 0 0 3px var(--price-soft)}
.vio-cform .comment-form-cookies-consent{display:flex;align-items:center;gap:8px;margin:0;
  font-size:13px;color:var(--fg-2)}
.vio-cform .comment-form-cookies-consent input{width:16px;height:16px;accent-color:var(--price)}
.vio-cform .comment-form-cookies-consent label{margin:0}
.vio-cform .form-submit{margin:0}
.vio-cf-submit{min-height:48px;padding:0 26px;border-radius:12px;border:0;cursor:pointer;
  background:var(--price);color:#fff;font-weight:750;font-size:15px}
.vio-cf-submit:hover{filter:brightness(1.06)}

@media (max-width:640px){
  .vio-comments .comment-metadata{margin-left:0;width:100%;order:3}
  .vio-comments .comment-list .children{padding-left:10px}
}

/* ==================================================================
   NÂNG CẤP TRẢI NGHIỆM ĐIỆN THOẠI — rà soát đo đạc ngày 2026-08-20
   ==================================================================
   Đặt ở cuối file có chủ đích: cần thắng các quy tắc phía trên mà không
   phải bơm specificity cho từng selector (xem cạm bẫy 4.8 trong
   QUY-TRINH-CAP-NHAT-GIAO-DIEN.md).

   Số đo TRƯỚC khi sửa, lấy bằng getBoundingClientRect() ở 375×812:
     nút hiện mật khẩu  22×22   ← nhỏ nhất, gần như không bấm trúng
     ô "ghi nhớ đăng nhập" 17×17
     nút Tìm            51×34
     mục menu .cat      ?×36
     nút Bộ lọc         84×40
     nút lên đầu trang  40×40
   Chuẩn WCAG 2.5.5 (AAA) là 44×44. Chat đã đạt sẵn 44×44.
   ================================================================== */
@media (max-width:860px){
  /* --- Ô tìm kiếm: hộp 44→52 để nút Tìm bên trong đủ 44 --- */
  .hsearch form,
  .hsearch input[type=search]{height:52px}
  .hsearch .go{height:44px;top:4px}
  .hsearch .ico{top:17px}

  /* --- Thanh danh mục --- */
  .catbar .wrap{height:52px}
  .cat{height:44px}

  /* --- Trang sản phẩm: nút chọn cấu hình và link dạng nút ---
     .obtn thiếu đúng 2px, .linkbtn chỉ cao 19px — cả hai đều là thứ khách phải
     bấm trúng trước khi mua. */
  .obtn{min-height:44px}
  .linkbtn{min-height:44px;display:inline-flex;align-items:center}

  /* --- Bộ lọc + sắp xếp trên trang danh mục --- */
  [data-vio-filters-open]{min-height:44px}
  .woocommerce-ordering select.orderby,
  .woocommerce .woocommerce-ordering select{min-height:44px}

  /* --- Form đăng nhập / đăng ký của WooCommerce ---
     Viết trùng dạng selector của Woo mới thắng được specificity của nó. */
  .woocommerce form .show-password-input,
  .woocommerce-page form .show-password-input,
  form .show-password-input{
    width:44px;height:44px;
    top:50%;transform:translateY(-50%);right:2px;
    display:flex;align-items:center;justify-content:center;
    background-position:center;
  }
  .woocommerce form .woocommerce-form__input-checkbox,
  .woocommerce-page form .woocommerce-form__input-checkbox,
  form input[type=checkbox].woocommerce-form__input{
    width:22px;height:22px;margin-right:8px;
  }
  .woocommerce form .woocommerce-form__label-for-checkbox,
  .woocommerce-page form .woocommerce-form__label-for-checkbox,
  label.woocommerce-form__label-for-checkbox{
    display:flex;align-items:center;min-height:44px;
  }

  /* --- Chữ quá nhỏ để đọc trên điện thoại ---
     10,5px là cỡ chú thích trên màn hình để bàn, không phải cỡ đọc trên tay.
     Nâng vừa đủ, không đụng bố cục thẻ sản phẩm (đã đo lại: không tràn ngang). */
  .flag{font-size:11.5px}
  .spec{font-size:11.5px}
  .pcard small,
  .foot small,
  .prose small{font-size:11.5px}
}

/* Khối "đăng nhập bằng Google" trong form tài khoản (xem viostore_social_login_buttons). */
.vio-social-login{margin:14px 0 4px;padding-top:14px;border-top:1px solid var(--line-2)}
.vio-social-login-label{display:block;margin-bottom:10px;font-size:13px;color:var(--fg-3);text-align:center}
.vio-social-login .nsl-container{margin:0}

/* Nút chiếm trọn bề rộng form, ngang hàng với nút "Đăng nhập" phía trên.
   Nextend dựng 3 lớp lồng nhau và tự đặt bề rộng cố định ~259px ở lớp
   .nsl-container-buttons (inline-grid) — phải kéo cả ba lớp thì nút mới giãn:
   container → thẻ <a> → div.nsl-button bên trong. Viết đủ 3 class cho trùng
   dạng selector của plugin, đủ thắng specificity mà không cần !important. */
.vio-social-login .nsl-container .nsl-container-buttons{display:grid;width:100%}
.vio-social-login .nsl-container .nsl-container-buttons > a{width:100%;max-width:none}
.vio-social-login .nsl-container .nsl-button{width:100%;min-height:46px;justify-content:center}

/* ---- Mô tả sản phẩm thu gọn + nút "Xem thêm" (xem initDesc trong main.js) ---- */
.vio-desc{position:relative;max-height:340px;overflow:hidden}
.vio-desc.mo{max-height:none;overflow:visible}
/* Dải mờ ở đáy để người đọc thấy rõ là còn nội dung phía dưới. */
.vio-desc.co-the-mo::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:96px;pointer-events:none;
  background:linear-gradient(to bottom, rgba(255,255,255,0), var(--bg-card,#fff) 92%);
}
.vio-desc.mo::after{display:none}
.vio-desc-toggle{
  display:flex;align-items:center;justify-content:center;gap:6px;
  width:100%;min-height:44px;margin-top:12px;padding:0 16px;
  border:1px solid var(--line-2);border-radius:10px;background:transparent;
  font:inherit;font-size:14px;font-weight:700;color:var(--price);cursor:pointer;
}
.vio-desc-toggle:hover{background:var(--brand-soft)}
.vio-desc-toggle svg{transition:transform .18s ease}
.vio-desc.mo + .vio-desc-toggle svg{transform:rotate(180deg)}
.vio-desc-toggle .vio-desc-less{display:none}
.vio-desc.mo + .vio-desc-toggle .vio-desc-more{display:none}
.vio-desc.mo + .vio-desc-toggle .vio-desc-less{display:inline}
@media (max-width:860px){
  .vio-desc{max-height:260px}
}

/* ---- Khối "đăng nhập để đánh giá" dưới trang sản phẩm ---- */
.vio-review-login{margin:6px 0 4px}
.vio-review-login-text{margin:0 0 4px;font-size:14px;color:var(--fg-2)}
.vio-review-login .vio-social-login{border-top:0;padding-top:6px;max-width:420px}

/* ---- Chế độ chỉ đăng nhập bằng Google ---- */
.vio-acc-google-only{padding:6px 0 2px}
.vio-acc-google-only .vio-social-login{border-top:0;padding-top:0;margin-top:6px}
.vio-acc-google-note{margin:12px 0 0;font-size:13px;color:var(--fg-3);text-align:center}

/* ==================================================================
   ĐÁNH GIÁ SẢN PHẨM — khớp ngôn ngữ thẻ .panel của trang sản phẩm
   Template: woocommerce/single-product-reviews.php
   ================================================================== */
.vio-reviews{margin-top:20px}
.vio-reviews-head{
  display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  padding-bottom:14px;margin-bottom:14px;border-bottom:1px solid var(--line-2);
}
.vio-reviews-title{font-size:19px;line-height:1.3}
.vio-reviews-score{display:flex;align-items:center;gap:8px;flex:none}
.vio-reviews-num{font-size:22px;font-weight:800;color:var(--fg);line-height:1}
.vio-reviews-score .stars{font-size:15px}
.vio-reviews-empty{margin:0;color:var(--fg-2);font-size:14.5px}

/* Danh sách đánh giá */
.vio-reviews .commentlist{list-style:none;margin:0;padding:0;display:grid;gap:14px}
.vio-reviews .commentlist .comment_container{display:flex;gap:12px;align-items:flex-start}
.vio-reviews .commentlist img.avatar{width:44px;height:44px;border-radius:50%;flex:none}
.vio-reviews .comment-text{flex:1;min-width:0;background:var(--bg);border-radius:var(--r);padding:12px 14px}
.vio-reviews .woocommerce-review__author{font-weight:700;font-size:14.5px}
.vio-reviews .woocommerce-review__published-date{font-size:12.5px;color:var(--fg-3)}
.vio-reviews .description p{margin:6px 0 0;color:var(--fg-2);font-size:14px}
.vio-reviews .star-rating{font-size:12px}

/* Form gửi đánh giá */
.vio-reviews-form{margin-top:16px;padding-top:16px;border-top:1px solid var(--line-2)}
.vio-reviews-formtitle{display:block;margin-bottom:12px;font-size:16px;font-weight:800}
.vio-reviews .comment-form-rating label,
.vio-reviews .comment-form-comment label,
.vio-reviews .comment-form-author label,
.vio-reviews .comment-form-email label{
  display:block;margin-bottom:6px;font-size:13.5px;font-weight:700;color:var(--fg)
}
.vio-reviews .comment-form-rating select,
.vio-reviews .comment-form-author input,
.vio-reviews .comment-form-email input,
.vio-reviews .comment-form-comment textarea{
  width:100%;min-height:46px;padding:11px 13px;
  border:1px solid var(--line-2);border-radius:10px;background:#fff;
  font:inherit;font-size:15px;color:var(--fg);
}
.vio-reviews .comment-form-comment textarea{min-height:110px;line-height:1.5;resize:vertical}
.vio-reviews .comment-form-rating,
.vio-reviews .comment-form-author,
.vio-reviews .comment-form-email,
.vio-reviews .comment-form-comment{margin:0 0 12px}
.vio-reviews .form-submit{margin:4px 0 0}
.vio-reviews .vio-reviews-submit{min-height:46px;padding:0 22px;font-size:15px;cursor:pointer}
.vio-reviews .required{color:var(--price)}
.vio-reviews-locked{margin:0;padding:12px 14px;border-radius:var(--r);background:var(--bg);color:var(--fg-2);font-size:14px}

/* Khối "đăng nhập để đánh giá" nằm gọn trong panel, không kẻ vạch thừa */
.vio-reviews .vio-review-login{margin-top:2px}
.vio-reviews .vio-review-login .vio-social-login{max-width:380px;margin-top:8px}

/* Hai cột tên + email cho đỡ dài trên màn rộng */
@media (min-width:700px){
  .vio-reviews .comment-form-author,
  .vio-reviews .comment-form-email{display:inline-block;width:calc(50% - 6px);vertical-align:top}
  .vio-reviews .comment-form-author{margin-right:12px}
}
@media (max-width:860px){
  .vio-reviews-title{font-size:17px}
  .vio-reviews .vio-review-login .vio-social-login{max-width:none}
}

/* ---- Chấm sao kiểu Google Maps (radio + label, xem single-product-reviews.php) ---- */
.vio-reviews .comment-form-rating{display:flex;flex-direction:column;gap:6px}
.vio-reviews .comment-form-rating > label{margin:0}
.vio-rate{
  /* row-reverse: DOM in 5→1, hiển thị 1→5. Nhờ vậy "tô từ trái đến sao đang
     trỏ" làm được bằng bộ chọn ~ (chỉ chọn được phần tử phía SAU trong DOM). */
  display:inline-flex;flex-direction:row-reverse;justify-content:flex-end;
  gap:2px;align-self:flex-start;
}
.vio-rate input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}

/* Phải viết kèm `.vio-reviews .comment-form-rating` cho trùng dạng selector của
   quy tắc nhãn form phía trên (`.vio-reviews .comment-form-rating label` —
   display:block, 13,5px, màu chữ đen). Thiếu tiền tố này thì quy tắc kia thắng
   specificity và sao ra nhỏ tí, màu đen thay vì vàng. */
.vio-reviews .comment-form-rating .vio-rate label{
  display:flex;align-items:center;justify-content:center;
  width:52px;height:52px;margin:0;padding:0;
  font-size:40px;font-weight:400;line-height:1;
  color:#DADCE0;cursor:pointer;
  transition:color .12s ease, transform .12s ease;
}
/* Sao đang chọn và mọi sao bên trái nó (đứng sau trong DOM). Vàng Google. */
.vio-reviews .comment-form-rating .vio-rate input:checked ~ label{color:#F9AB00}
/* Rê chuột: tô tới sao đang trỏ, các sao còn lại trả về xám. */
.vio-reviews .comment-form-rating .vio-rate:hover label{color:#DADCE0}
.vio-reviews .comment-form-rating .vio-rate label:hover,
.vio-reviews .comment-form-rating .vio-rate label:hover ~ label{color:#FBBC04}
.vio-reviews .comment-form-rating .vio-rate label:active{transform:scale(.92)}
.vio-reviews .comment-form-rating .vio-rate input:focus-visible + label{
  outline:2px solid var(--brand);outline-offset:2px;border-radius:10px;
}
.vio-rate-text{font-size:13.5px;color:var(--fg-3);min-height:20px}
.vio-rate-text.da-chon{color:var(--fg-2);font-weight:600}

/* Sao đã chọn — class do JS gắn (initRate). Đặt sau mọi quy tắc màu sao ở trên
   để thắng mà không cần !important. */
.vio-reviews .comment-form-rating .vio-rate label.on{color:#F9AB00}
.vio-reviews .comment-form-rating .vio-rate:hover label.on{color:#F9AB00}
.vio-reviews .comment-form-rating .vio-rate label:hover,
.vio-reviews .comment-form-rating .vio-rate label:hover ~ label{color:#FBBC04}
