@font-face{
  font-family:"Inter"; font-style:normal; font-weight:400 800; font-display:swap;
  src:url("../fonts/inter-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Inter"; font-style:normal; font-weight:400 800; font-display:swap;
  src:url("../fonts/inter-vietnamese.woff2") format("woff2");
  unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}

:root{
  --primary:#002C5F;
  --primary-2:#001f45;
  --accent:#0066CC;
  --accent-soft:#EAF1FE;
  --bg:#ffffff;
  --bg-2:#F5F8FC;
  --page:#F7F8FA;
  --text:#111827;
  --text-2:#6B7280;
  --border:#E5E7EB;
  /* Bốn màu nhấn dưới đây đã hạ độ sáng để đạt WCAG AA (≥4,5:1) trên chính nền tint
     của chúng — giữ nguyên sắc và độ bão hoà nên nhìn vẫn ra đúng màu cũ.
     Mỗi màu chỉ được dùng làm chữ/biểu tượng trên nền tint cùng cặp, nên đổi thẳng
     ở token là an toàn. Chọn mốc 4,6 chứ không phải 4,5 để có biên: sát vạch thì
     máy này báo đạt, máy kia làm tròn khác lại báo trượt.
     Trước: orange #F97316 (2,53) · teal #0D9488 (3,38) · green #16A34A (3,00) · gold #C9A227 (2,41) */
  --orange:#B84E05; --orange-bg:#FFF1E6;   /* 4,59 trên --orange-bg */
  --teal:#0B7C72; --teal-bg:#E6F7F5;       /* 4,59 trên --teal-bg */
  --blue:#2563EB; --blue-bg:#EAF1FE;
  --green:#11803A; --green-bg:#E9F8EE;     /* 4,58 trên --green-bg, 5,03 trên trắng */
  --grey-bg:#F3F4F6;
  --gold:#8D721B;                          /* 4,61 trên trắng */
  /* Giá gạch ngang. KHÔNG gộp vào --text-2: --text-2 dùng cho chữ thân bài khắp site
     và vốn đã đạt 4,83 trên trắng, hạ thêm là làm đậm oan cả trăm chỗ đang đúng. */
  --price-old:#6C7686;                     /* 4,59 trên trắng; trước là #9CA3AF (2,53) */
  --radius-card:20px;
  --radius-btn:12px;
  --shadow-card:0 8px 24px rgba(15,23,42,.06);
  --shadow-card-hover:0 16px 36px rgba(15,23,42,.10);
  --container:1280px;
  /* Mốc neo cho `.price-toolbar` ở trang bảng giá. Từ vòng 20 đây là chiều cao
     PHẦN DÍNH của đầu trang, không phải cả đầu trang: đầu trang cao 142px nhưng chỉ
     hàng menu 56px dính lại. Bản điện thoại đặt lại ở khối ≤1150px.
     ⚠️ Sửa TẠI ĐÂY, đừng khai `:root{}` lần thứ hai ở dưới — LiteSpeed minify gộp
        selector trùng và giữ giá trị khai TRƯỚC, luật sau bị nuốt im lặng. */
  --header-h:56px;
  --section-space:96px;
  --shadow-float:0 20px 48px rgba(0,44,95,.14);
}
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0; background:var(--page); color:var(--text);
  font-family:Inter,-apple-system,"Segoe UI","Helvetica Neue",Arial,sans-serif;
  line-height:1.5; -webkit-font-smoothing:antialiased;
}
/* height:auto bắt buộc phải có: WordPress xuất <img width="640" height="364">, nếu CSS chỉ ghi đè
   chiều rộng thì trình duyệt vẫn dùng nguyên chiều cao trong HTML -> ảnh bị kéo méo và bị
   overflow:hidden của khung cắt mất. Các khung cần chiều cao cố định đều đã tự set height trong CSS. */
img{max-width:100%; height:auto; display:block;}
a{color:inherit; text-decoration:none;}
button{font-family:inherit; cursor:pointer;}
a:focus-visible, button:focus-visible, summary:focus-visible, input:focus-visible, select:focus-visible, [tabindex]:focus-visible{
  outline:2px solid var(--accent); outline-offset:2px; border-radius:4px;
}
.num{font-variant-numeric:tabular-nums;}
.wrap{max-width:var(--container); margin:0 auto; padding:0 40px;}
section{padding:var(--section-space) 0;}

/* ---------- chấm mạng xã hội ----------
   ⚠️ `.social-dot` (số ít) CÒN SỐNG ở chân trang qua hnt_social_dots().
      `.social-dots` (số nhiều — thẻ bọc) đã xoá cùng thanh navy ở vòng 20.
      Chân trang dùng thẻ bọc `.footer-social`, không phải `.social-dots`.
      Khác nhau đúng một chữ 's', xoá nhầm là vỡ chân trang. */
.social-dot{width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:800; color:#fff;}
/* 🔴 VÒNG 19 — nền Facebook hạ từ #1877F2 xuống #166FE5.
   Trả chữ về trắng đặc vẫn CHƯA đủ: đo được chữ "f" trắng trên #1877F2 chỉ 4,23:1,
   dưới mốc 4,5:1. Nền xanh Facebook quá sáng, không có màu chữ nào cứu được —
   trắng đã là màu sáng nhất có thể. Nên phải hạ chính cái nền.
   #166FE5 là màu hover chính thức của Facebook nên vẫn đúng nhận diện thương hiệu,
   mắt thường gần như không phân biệt được, mà chữ lên 4,73:1.
   ⚠️ Sửa TẠI CHỖ trong dòng khai gốc, không thêm luật `.social-dot.fb{}` thứ hai —
      LiteSpeed minify gộp selector trùng và giữ giá trị khai TRƯỚC.
   ℹ️ Zalo #0068FF đo được 4,75:1 và TikTok #111 được 18,88:1 → ĐỂ NGUYÊN, không
      đụng vào thứ đang đạt. */
.social-dot.zalo{background:#0068ff;} .social-dot.fb{background:#166fe5;} .social-dot.tiktok{background:#111;} .social-dot.yt{background:#ff0000;}

/* ---------- header ---------- */
/* 🔴 `top:-86px` KHÔNG phải số bừa. Khách chọn "chỉ hàng menu dính". Cách hiển nhiên là
   cho `.hd-nav` tự sticky — NHƯNG SAI: phần tử sticky chỉ dính trong lúc THẺ BAO NGOÀI
   còn trong khung nhìn, nên cuộn quá 142px là thẻ header ra khỏi màn và hàng menu rời
   ra theo. Đó là giới hạn cố hữu của `position:sticky`.

   🔴🔴 VÀ ĐÂY LÀ LÝ DO KHÔNG GÕ THẺ ĐÓ KÈM DẤU NHỌN MỞ.
   cPanel khớp theo TIỀN TỐ "dấu-nhọn-mở + h-e-a-d", nên CẢ thẻ head LẪN thẻ header
   đều làm nó tưởng file này là tài liệu HTML và chèn thẻ charset vào lúc ĐỌC
   → dư 22 byte → deploy.js từ chối đẩy cả file CSS.
   Đã đo: các thẻ khác trong chú thích file này (select · details · button · table ·
   summary · section…) KHÔNG dính, chỉ mỗi tiền tố đó.
   ⚠️ Kể cả khi đang VIẾT CẢNH BÁO về nó cũng đừng gõ dạng có dấu nhọn — vòng 21 tôi
      gõ vào chính đoạn này và tự kích hoạt lại cái bẫy mình vừa mô tả.
   Lỡ dính thì: node qa/day-file-cpanel-sua.js assets/css/main.css
   Cách chắc: cho CẢ header dính nhưng kéo lên đúng chiều cao hàng logo, nên chỉ phần
   cuối còn trong khung nhìn: 142 − 86 = 56px = đúng hàng menu.
   ⚠️ Đổi chiều cao hàng logo là phải đổi CẢ BA: `.hd-brand .wrap{height:85px}` · −86px
      · `--header-h:56px`. */
header.site-header{position:sticky; top:-86px; background:#fff; z-index:100;}
.brand{display:flex; align-items:center; gap:12px; min-width:0;}
.brand .hlogo{height:20px; width:auto; display:block; flex-shrink:0;}

nav.main-menu ul{display:flex; align-items:center; gap:34px; list-style:none; margin:0; padding:0;}
nav.main-menu a{font-size:14.5px; font-weight:600; color:var(--text); position:relative; padding:8px 0; display:block;}
nav.main-menu li.current-menu-item > a, nav.main-menu li.current_page_item > a{color:var(--primary);}
nav.main-menu li.current-menu-item > a::after, nav.main-menu li.current_page_item > a::after{
  content:""; position:absolute; left:0; right:0; bottom:0; height:2px; background:var(--primary);
}

/* ══ HIỆU ỨNG RÊ CHUỘT / CHẠM CHO THANH MENU — 22/08/2026 ═══════════════════
   Anh Vũ gửi ảnh thanh menu: "thêm hiệu ứng chạm vào các mục". Trước đó chỉ mục
   ĐANG MỞ có gạch chân, rê qua các mục khác thì không có gì đổi nên khách không
   biết chúng bấm được. Anh Vũ chọn kiểu A: gạch chân mọc từ giữa ra hai bên.

   🔴 PHẢI GIỚI HẠN `> ul > li >`, ĐỪNG DÙNG `nav.main-menu a`.
      Luật chung đó bắt CẢ 11 link xe trong hộp thả xuống của "Sản Phẩm", mà chúng
      đã có hiệu ứng riêng (`nav.main-menu .sub-menu a:hover` — đổi nền). Hai hiệu
      ứng chồng nhau trên cùng một link thì gạch chân chạy bên trong ô nền, nhìn rối.

   🔴 DÙNG `::before`, KHÔNG DÙNG `::after`. `::after` đã là gạch chân TĨNH của mục
      đang mở ngay trên đây. Ghi đè nó là mục đang mở mất dấu khi rê chuột qua mục
      khác — tức là làm hỏng thứ đang chạy đúng.

   ⚪ Mục đang mở thì tắt hẳn `::before`: nó đã có gạch chân tĩnh cùng vị trí cùng
      màu, chạy thêm một lớp nữa chỉ tốn công vẽ mà mắt không phân biệt được.

   📱 TRÊN ĐIỆN THOẠI KHÔNG CÓ CHUYỆN RÊ CHUỘT. Ngón tay chạm thì `:hover` hoặc
      không bắn, hoặc bắn rồi DÍNH LẠI cho tới khi chạm chỗ khác. Nên phản hồi cho
      chạm đi bằng `:active` (đổi màu chữ) chứ không bám vào `:hover`. */
nav.main-menu > ul > li > a::before{
  content:""; position:absolute; left:0; right:0; bottom:0; height:2px;
  background:var(--primary);
  transform:scaleX(0); transform-origin:center;
}
@media (prefers-reduced-motion: no-preference){
  nav.main-menu > ul > li > a::before{transition:transform .22s ease-out;}
}
nav.main-menu > ul > li > a:hover::before,
nav.main-menu > ul > li > a:focus-visible::before{transform:scaleX(1);}
nav.main-menu > ul > li > a:active{color:var(--primary);}
/* Mục đang mở đã có gạch chân tĩnh — không vẽ chồng thêm lớp động. */
nav.main-menu > ul > li.current-menu-item > a::before,
nav.main-menu > ul > li.current_page_item > a::before{display:none;}
.btn{display:inline-flex; align-items:center; justify-content:center; gap:8px; height:48px; border-radius:var(--radius-btn); font-weight:700; font-size:14.5px; padding:0 24px; border:none; transition:background .2s ease-out, transform .2s ease-out, box-shadow .2s ease-out; cursor:pointer;}
.btn-primary{background:var(--primary); color:#fff;} .btn-primary:hover{background:var(--primary-2); transform:translateY(-2px); box-shadow:0 10px 22px rgba(0,44,95,.22);}
.btn-outline{background:#fff; color:var(--primary); border:1.5px solid var(--border);} .btn-outline:hover{border-color:var(--primary); transform:translateY(-2px); box-shadow:0 8px 18px rgba(15,23,42,.08);}
.btn svg{width:16px; height:16px;}
.btn:active{transform:translateY(0);}
.btn-lg{height:60px; padding:0 40px; font-size:16px;}

.hamburger{display:none; flex-direction:column; gap:4px; background:none; border:none; padding:8px; cursor:pointer;}
.hamburger span{width:22px; height:2px; background:var(--primary);}

/* ==========================================================================
   VÒNG 20 — ĐẦU TRANG HAI HÀNG (logo lớn ở trên, menu + Gọi ngay ở dưới)

   Khách duyệt qua mockup. Ba quyết định: bỏ thanh navy · chỉ hàng menu dính ·
   điện thoại bỏ nút Gọi ngay, chỉ logo + tên đại lý.

   🔴 TOÀN BỘ BỐ CỤC HAI HÀNG KHOANH TRONG `@media (min-width:1151px)`.
      Cố ý: menu trượt của điện thoại (khối ≤1150px, dòng ~1220 và ~1364) đã
      chỉnh qua nhiều vòng và rất dễ vỡ. Khoanh thế này thì dù luật máy tính có
      sai cũng KHÔNG với xuống được bản điện thoại.

   🔴🔴 ĐỪNG VIẾT THẺ HTML NGUYÊN VĂN VÀO CHÚ THÍCH CỦA FILE NÀY. Vòng 20 tôi gõ thẻ
      mở đầu phần đầu tài liệu HTML vào đây, thế là cPanel tưởng `main.css` là tài liệu
      HTML và chèn thẻ charset vào lúc ĐỌC — đọc về dư đúng 22 byte, `deploy.js` từ chối
      đẩy CẢ FILE CSS vì không sao lưu được. Một chữ trong chú thích khoá luôn đường đẩy
      tự động của file quan trọng nhất theme, và chỉ lộ ra ở lần đẩy SAU.
      → Muốn nhắc tới thẻ nào thì viết bằng lời, đừng gõ dấu ngoặc nhọn.
      → Nếu lỡ dính: `node qa/day-file-cpanel-sua.js assets/css/main.css`.

   ⚪ Vòng 21 đã dọn xong CSS chết của vòng này (`.topbar` · `.header-inner` ·
      `.header-right` · `.icon-btn` · `.header-search` · `.brand .divider` ·
      `.brand .cityname`) và gỡ hai khoá `:has(.hd-nav)` — markup đã ổn định nên
      không cần chúng nữa.
   ========================================================================== */


.hd-brand{background:#fff; border-bottom:1px solid var(--border);}
.hd-nav{background:var(--bg-2); border-bottom:1px solid var(--border);}
/* Tên đại lý: #003A70 là ĐÚNG màu xanh của chữ HYUNDAI trong file logo SVG —
   KHÔNG phải `--primary` (#002C5F) dùng ở nút và tiêu đề. Đo được 11,42:1 trên
   nền trắng. Hai màu này gần nhau nhưng khác nhau, đừng gộp làm một. */
.dealer-name{margin:0; font-weight:800; color:#003A70; letter-spacing:-.01em; white-space:nowrap;}

@media (min-width:1151px){
  /* 85 + 1px viền = hàng 86px · 55 + 1px viền = hàng 56px · tổng 142px.
     Viền nằm trên `.hd-brand`/`.hd-nav` chứ không trên `.wrap`, nên nó CỘNG THÊM
     vào chiều cao hàng. Lần đo đầu tôi để 86/56 và ra 87/57/144 — lệch 1px mỗi hàng.
     Ba con số 85 · 55 · `top:-86px` · `--header-h:56px` buộc phải khớp nhau. */
  .hd-brand .wrap{display:flex; align-items:center; justify-content:space-between; gap:24px; height:85px;}
  .hd-brand .brand .hlogo{height:34px;}
  .dealer-name{font-size:28px;}

  .hd-nav .wrap{display:flex; align-items:center; justify-content:space-between; gap:20px; height:55px;}
  /* Mục menu cao đúng bằng hàng để vùng bấm phủ kín, và đệm ngang thay cho `gap`
     — vạch ngăn `|` phải nằm CHÍNH GIỮA hai mục, mà `gap` thì không có chỗ bám. */
  .hd-nav nav.main-menu > ul{gap:0;}
  .hd-nav nav.main-menu > ul > li > a{height:56px; padding:0 20px; display:flex; align-items:center;
    font-size:15px; color:var(--primary);}
  .hd-nav nav.main-menu > ul > li + li::before{content:""; position:absolute; left:0; top:50%;
    transform:translateY(-50%); width:1px; height:15px; background:#C7D2E0;}
  /* Chỉ vạch giữa các mục CẤP MỘT. Không có `> ul >` thì menu con của "Sản Phẩm"
     cũng mọc vạch giữa 11 dòng xe. */

  /* Nút cao 42px chứ không phải 48px của `.btn`: hàng menu chỉ cao 56px, để 48px
     thì trên dưới còn 4px, nhìn như nút bị nhét. */
  .hd-nav .header-call-btn{height:42px; padding:0 22px;}
}

@media (max-width:1150px){
  /* Đầu trang điện thoại: logo trên, tên đại lý dưới, hamburger bên phải trải hai hàng.
     Dùng lưới chứ không dùng flex-wrap — với flex-wrap thì hamburger bị đẩy xuống
     hàng thứ ba khi tên đại lý chiếm trọn bề ngang. */
  /* Cùng lý do `:has()` như khối máy tính — markup cũ chạy CSS mới thì không đổi gì. */
  html:has(.hd-nav){--header-h:75px;}
  header.site-header:has(.hd-nav){top:0;}   /* một hàng thì không phải kéo lên */
  /* Đệm 6px, không phải 12px: `.brand` đã bị `min-height:44px` của bản vá vùng chạm
     (dòng ~1578) ép cao 44px cho logo 19px, tức bên trong đã sẵn ~12px thở mỗi bên.
     Để 12px nữa là đầu trang lên 91px, trong khi bản cũ chỉ 72px. Với 6px thì ra
     75px — hai hàng chữ mà chỉ dày hơn bản cũ 3px. */
  .hd-brand .wrap{display:grid; grid-template-columns:1fr auto; align-items:center;
    padding-top:6px; padding-bottom:6px; row-gap:1px;}
  .brand{grid-column:1; grid-row:1;}
  /* 🔴 Ba lớp `.hd-brand .brand .hlogo` là BẮT BUỘC, không phải viết thừa.
     Luật `.brand .hlogo{height:16px}` ở khối `@media (max-width:414px)` (dòng ~2105)
     NGANG ĐIỂM (0,2,0) với `.hd-brand .hlogo` và đứng SAU nên nó thắng — đo ra logo
     16px chứ không phải 19px như khai. Ba lớp (0,3,0) mới vượt được.
     ⚪ Luật 2105 đó vốn là bản vá RC12 cho chữ "NHA TRANG" tràn ra đè nút menu.
        Chữ đó nay đã bỏ khỏi markup nên lý do của nó KHÔNG CÒN — vòng sau dọn cùng
        `.brand .cityname` và các luật chết khác. */
  .hd-brand .brand .hlogo{height:19px;}
  /* line-height 1.25 thay vì 1.5 kế thừa từ body: tiết kiệm 4px chiều cao mà một
     dòng chữ đơn thì không cần giãn dòng. */
  .dealer-name{grid-column:1; grid-row:2; font-size:13.5px; line-height:1.25;}
  .hamburger{grid-column:2; grid-row:1 / span 2; justify-self:end;}

  /* 🔴 KHÔNG dùng `display:none` cho `.hd-nav`. `nav.main-menu` nằm BÊN TRONG nó,
     và menu trượt là `position:fixed` — cha `display:none` thì con fixed cũng biến
     mất, tức bấm hamburger ra menu trống. Thu về cao 0 thì con fixed vẫn thoát ra
     được (không có `overflow:hidden` ở đâu trên đường đi). */
  .hd-nav, .hd-nav .wrap{height:0; padding-top:0; padding-bottom:0; border:0; background:transparent;}
  .hd-nav .header-call-btn{display:none;}   /* khách bỏ; thanh dính đáy đã có nút gọi */
}

/* ---------- hero ---------- */
.hero{position:relative; background:linear-gradient(125deg,#ffffff 0%,#f4f8fc 28%,#e2edf9 60%,#c5dcf1 100%); overflow:hidden;}
.hero::before{content:""; position:absolute; inset:0; background:radial-gradient(ellipse 62% 58% at 80% 40%, rgba(0,44,95,.13) 0%, rgba(0,44,95,0) 70%); pointer-events:none;}
.hero::after{content:""; position:absolute; inset:0; background:radial-gradient(ellipse 40% 30% at 15% 15%, rgba(255,255,255,.65) 0%, rgba(255,255,255,0) 70%); pointer-events:none;}
.hero-inner{position:relative; display:grid; grid-template-columns:.92fr 1.18fr; align-items:center; min-height:740px; padding:80px 0; gap:24px;}
.hero-arrow{position:absolute; top:50%; transform:translateY(-50%); width:44px; height:44px; border-radius:50%; background:#fff; box-shadow:0 6px 16px rgba(0,0,0,.12); display:flex; align-items:center; justify-content:center; z-index:5;}
.hero-arrow.left{left:16px;} .hero-arrow.right{right:16px;}
.hero-arrow svg{width:18px; height:18px; color:var(--primary);}
/* gap 18px, không phải 7px: xem ghi chú vùng chạm ở khối chấm tròn của hero. */
/* VÒNG 16 — gap 18px → 32px. Xem lý do đầy đủ ở khối `.hero-dots button` phía dưới:
   vùng chạm phải đủ 44px, mà công thức bắt buộc là nới×2 ≤ gap. */
.hero-dots{position:absolute; bottom:20px; left:50%; transform:translateX(-50%); display:flex; gap:32px; z-index:5;}
.hero-dots span{width:12px; height:12px; border-radius:50%; background:#c9d6e6;}
.hero-dots span.active{background:var(--primary); width:30px; border-radius:6px;}

.hero-text h1{font-size:49px; line-height:1.18; font-weight:800; color:var(--primary); margin:0 0 20px; letter-spacing:-.01em; text-wrap:balance;}
.hero-text p{font-size:17px; color:var(--text-2); margin:0 0 6px; line-height:1.6;}
.hero-cta{display:flex; gap:16px; margin:32px 0 44px; flex-wrap:wrap;}
.hero-cta .btn{height:60px; padding:0 40px; font-size:16px;}
.hero-highlights{display:flex; gap:40px; flex-wrap:wrap;}
.hh{display:flex; align-items:flex-start; gap:14px; padding:8px; margin:-8px; border-radius:14px; transition:background .2s ease-out, transform .2s ease-out;}
.hh:hover{background:rgba(0,44,95,.05); transform:translateY(-2px);}
.hh-icon{width:44px; height:44px; border-radius:12px; background:var(--accent-soft); color:var(--accent); display:flex; align-items:center; justify-content:center; flex-shrink:0;}
.hh-icon svg{width:21px; height:21px;}
.hh .t1{font-size:14px; font-weight:700; color:var(--text);}
.hh .t2{font-size:12.5px; color:var(--text-2); margin-top:2px;}

.hero-car{position:relative; display:flex; justify-content:center; align-items:center; height:100%; min-height:540px;}
.hero-car::before{content:""; position:absolute; inset:6% 2%; border-radius:24px; z-index:0; background:radial-gradient(ellipse at 50% 30%,#f2f6fb 0%,#e2ecf6 55%,#cfe0f0 100%);}
.hero-car::after{content:""; position:absolute; left:50%; bottom:14%; transform:translateX(-50%); z-index:0; width:56%; height:26px; background:radial-gradient(ellipse, rgba(0,44,95,.3) 0%, rgba(0,44,95,0) 72%);}
/* width:130% trước đây là để bù cho ảnh cũ có nhiều lề trắng quanh xe. Ảnh xe nay đã chuẩn hóa
   (xe chiếm 86% khung 4:3) nên 100% là vừa khít — 130% sẽ đẩy xe tràn khỏi hero và bị cắt. */
.hero-car img{width:100%; max-width:860px; aspect-ratio:4/3; object-fit:contain; position:relative; z-index:1; filter:drop-shadow(0 36px 40px rgba(0,44,95,.25)); animation:float 6s ease-in-out infinite;}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@media (prefers-reduced-motion:reduce){.hero-car img{animation:none;}}

/* ---------- filter (floating search panel) ---------- */
.filter-wrap{position:relative; z-index:10;}
.filter-card{background:#fff; box-shadow:var(--shadow-float); border-radius:var(--radius-card); padding:36px 40px; margin-top:-64px; position:relative;}
.filter-title{display:flex; align-items:center; gap:8px; font-size:13px; font-weight:800; color:var(--primary); letter-spacing:.04em; margin-bottom:20px;}
.filter-title svg{width:16px; height:16px;}
.filter-grid{display:grid; grid-template-columns:repeat(4,1fr) auto; gap:16px; align-items:end;}
.filter-field label{display:block; font-size:13.5px; color:var(--text-2); font-weight:600; margin-bottom:10px;}
/* `--fs-pad-l` = chỗ dành cho icon bên trái. Khai thành biến vì khối mobile ẩn icon đi
   (`.filter-select svg.ic{display:none}`) nên chữ phải dịch lại — đổi biến ở đúng luật
   `.filter-select{}` của khối đó, thay vì khai `.filter-select select{}` lần thứ hai.
   Hai luật cùng selector là chỗ LiteSpeed minify dễ gộp nhầm và giữ giá trị khai trước. */
.filter-select{--fs-pad-l:39px; position:relative; display:flex; align-items:center; gap:9px; border:1px solid var(--border); border-radius:var(--radius-btn); height:48px; padding:0 14px; background:var(--bg-2); transition:border-color .18s ease-out;}
.filter-select:hover{border-color:var(--accent);}
/* Hai icon chỉ để nhìn. `pointer-events:none` để chúng không chắn ô chọn nằm dưới. */
.filter-select svg.ic{width:16px; height:16px; color:var(--text-2); flex-shrink:0; pointer-events:none;}
/* 🔴 VÒNG 16 — KHỐI NÀY LÀ BẢN VÁ LỖI CHỨC NĂNG, KHÔNG PHẢI TRANG TRÍ.
   Bản cũ: bọc `.filter-select` cao 48px và `align-items:center`, nhưng `<select>` không
   khai chiều cao nên nó chỉ cao bằng nội dung = **17px**, nằm giữa, chết 15px trên và
   15px dưới. Đo 11/08/2026 bằng `elementFromPoint` tại 6 điểm trong khung bọc:
   **5 điểm KHÔNG mở được ô chọn** — khách bấm vào ô mà không có gì xảy ra. Ảnh hưởng
   4 ô lọc xe ở trang chủ và ô "Mọi tầm giá" ở trang bảng giá.

   Lần vá đầu tôi chỉ thêm `align-self:stretch; height:100%`. Bấm thử lại: 5/6 điểm
   trúng, nhưng điểm **mép phải vẫn trượt** — vì `<select>` là một ô flex nằm TRƯỚC
   mũi tên `svg.chev`, nên dải mũi tên và lề 14px bên phải không thuộc về nó. Mà mũi
   tên ▾ chính là chỗ người ta hay bấm nhất để mở một ô chọn.

   → Cách đang dùng: cho `<select>` **phủ kín khung bọc** bằng `position:absolute;inset:0`,
   hai icon chuyển sang `pointer-events:none` để không chắn. Nền select trong suốt nên
   icon vẫn hiện xuyên qua, chữ dịch vào bằng padding. Nhờ vậy 6/6 điểm đều mở được và
   không đổi một pixel nào về hình. */
.filter-select select{position:absolute; inset:0; width:100%; height:100%;
  padding:0 30px 0 var(--fs-pad-l); border:none; background:transparent;
  font-size:14px; font-weight:600; color:var(--text); appearance:none; cursor:pointer;
  touch-action:manipulation;}
.filter-select select:focus-visible{outline:3px solid var(--accent); outline-offset:-3px; border-radius:var(--radius-btn);}
/* `margin-left:auto` vì `<select>` đã ra khỏi dòng flex, không còn đẩy mũi tên sang phải. */
.filter-select svg.chev{width:11px; height:11px; color:var(--text-2); flex-shrink:0; margin-left:auto; pointer-events:none;}
.filter-search-btn{height:48px; padding:0 32px; white-space:nowrap; border-radius:var(--radius-btn); font-weight:800;}
.filter-bottom{display:flex; align-items:center; gap:12px; margin-top:18px; flex-wrap:wrap;}
.filter-bottom .lbl{font-size:13px; color:var(--text-2); font-weight:600; white-space:nowrap;}
.chip{padding:7px 15px; border-radius:8px; background:var(--bg-2); border:1px solid var(--border); font-size:13px; font-weight:600; color:var(--text);}
.chip:hover{border-color:var(--accent); color:var(--accent);}
.adv-link{margin-left:auto; font-size:13.5px; font-weight:700; color:var(--accent); display:flex; align-items:center; gap:6px;}
.adv-link svg{width:15px; height:15px;}
.filter-empty{text-align:center; padding:40px 0; color:var(--text-2); font-size:14.5px;}
.filter-empty a{color:var(--accent); font-weight:700;}

/* ---------- section head ---------- */
.section-head{display:flex; align-items:flex-end; justify-content:space-between; margin-bottom:40px; gap:16px; flex-wrap:wrap;}
.section-head h2{font-size:30px; font-weight:800; letter-spacing:-.01em; color:var(--primary); margin:0; line-height:1.25;}
.section-head .eyebrow{margin-bottom:8px;}
.section-head .see-all{font-size:13.5px; font-weight:700; color:var(--accent); white-space:nowrap; transition:color .18s ease-out;}
.section-head .see-all:hover{color:var(--primary); text-decoration:underline; text-underline-offset:3px;}

/* ---------- featured car row ---------- */
.car-row{display:flex; gap:20px; overflow-x:auto; padding-bottom:8px; scroll-snap-type:x proximity;}
.car-row::-webkit-scrollbar{height:6px;}
.car-row::-webkit-scrollbar-thumb{background:var(--border); border-radius:6px;}
.car-card{flex:0 0 246px; scroll-snap-align:start; background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); overflow:hidden; transition:box-shadow .3s ease-out, transform .3s ease-out; position:relative;}
.car-card:hover{box-shadow:var(--shadow-card-hover); transform:translateY(-4px);}
.car-card.is-hidden{display:none;}
/* Nền trắng cho khung ảnh thẻ xe — RC12.
   RC11 đã đổi khung ảnh lớn ở trang chi tiết xe sang trắng vì nền xanh–xám hắt sắc lên
   thân xe trắng và bạc. Thẻ xe thì bị bỏ quên, thành ra CÙNG một chiếc xe hiện trên hai
   nền khác nhau giữa trang chủ và trang chi tiết. Đổi nốt ở đây cho khớp. */
.car-img{aspect-ratio:4/3; position:relative; overflow:hidden; display:flex; align-items:center; justify-content:center; background:#fff;}
.car-img::before{content:""; position:absolute; left:50%; bottom:16%; transform:translateX(-50%); width:62%; height:12%; background:radial-gradient(ellipse, rgba(0,44,95,.28) 0%, rgba(0,44,95,0) 72%);}
.car-img img{width:100%; height:100%; object-fit:contain; position:relative; z-index:1; filter:drop-shadow(0 10px 10px rgba(0,44,95,.12)); transition:transform .35s ease-out;}
.car-card:hover .car-img img{transform:scale(1.04);}
/* VÒNG 18b (11/08/2026) — `.seat-badge` THAY CHO `.fav` (icon trái tim).
   `.fav` là `<div>` trang trí, KHÔNG có JavaScript nào bám vào — bấm không làm gì cả.
   Đã xoá cả markup lẫn hai luật CSS của nó: CSS không khớp markup nào là thứ phiên sau
   đọc sẽ tưởng tính năng vẫn còn.
   Nhãn số chỗ đặt đúng chỗ icon cũ (góc trên phải) nên KHÔNG chạm dải "HOT" chéo góc
   (dải đó ở góc trên TRÁI, `left:-26px`). Navy trên trắng 94% cho ~13:1. */
.seat-badge{position:absolute; top:10px; right:10px; z-index:2;
  background:rgba(255,255,255,.94); color:var(--primary);
  font-size:11.5px; font-weight:700; letter-spacing:.01em; line-height:1;
  padding:5px 9px; border-radius:7px; white-space:nowrap;
  box-shadow:0 2px 8px rgba(0,0,0,.12);}
.car-body{padding:18px 20px 22px;}
.car-name{font-size:17px; font-weight:800; margin:0 0 4px;}
.car-spec{font-size:12px; color:var(--text-2); margin-bottom:8px;}
.car-price-row{display:flex; align-items:baseline; gap:8px; margin-bottom:10px; flex-wrap:wrap;}
.car-price{font-size:19px; font-weight:800; color:var(--primary); letter-spacing:-.01em;}
.car-price-old{font-size:12px; color:var(--price-old); text-decoration:line-through;}
/* Giá dự kiến của xe chưa ra mắt. Nhỏ hơn giá thật (19px → 14,5px) vì chuỗi dài
   gấp đôi một con số, mà thẻ ở lưới 2 cột chỉ rộng 166px. Cũng cố ý KHÔNG dùng
   class .num: font bảng số làm chữ "Dự kiến" trông như một con số. */
.car-price--sap{font-size:14.5px; font-weight:800; color:var(--primary); line-height:1.35;}

/* ---------- DẢI XE SẮP RA MẮT (trang xe) — 21/08/2026 ----------
   Đứng đúng chỗ thẻ giá thường đứng, nên phải nặng ký ngang thẻ giá: cùng bo góc,
   cùng lề. Nền navy đặc để mắt rơi vào đây trước, vì nội dung của nó là một lời
   đính chính ("chưa có giá") và lời đính chính đọc sau con số thì vô nghĩa. */
.srm-band{background:var(--primary); color:#fff; border-radius:var(--radius-card);
  padding:20px 22px; margin:18px 0 0;}
.srm-nhan{display:inline-block; font-size:11px; font-weight:900; letter-spacing:.1em;
  color:#E5B94E; box-shadow:inset 0 0 0 1px #E5B94E; padding:3px 9px; border-radius:5px;
  margin-bottom:11px;}
.srm-chinh{font-size:15.5px; font-weight:700; line-height:1.5; margin:0;}
/* #C8D6E8 trên #002C5F = 9,7:1. KHÔNG hạ xuống rgba(255,255,255,.7): trên nền navy
   này mức đó chỉ còn 4,2 và trượt chuẩn ở cỡ chữ 13,5px. */
.srm-phu{font-size:13.5px; line-height:1.6; color:#C8D6E8; margin:9px 0 0;}
.srm-phu b{color:#fff;}
.srm-band .btn{margin-top:16px;}
/* Nút xanh mặc định chìm nghỉm trên nền navy — đổi sang nền trắng chữ navy. */
.srm-band .btn-primary{background:#fff; color:var(--primary); border-color:#fff;}
.srm-band .btn-primary:hover{background:#E5B94E; color:#00203F; border-color:#E5B94E;}

/* Khối thay chỗ bảng giá 4 cột ở trang Bảng giá xe, cho xe chưa ra mắt.
   Nền vàng rất nhạt + vạch vàng bên trái: đủ để mắt biết "dòng này khác mấy dòng
   kia" mà không hét lên như dải navy ở trang xe — ở đây nó đứng cạnh 10 khối giá
   thật, nổi quá thì phá nhịp cả trang. */
.price-srm{background:#FDFAF1; border-left:3px solid var(--gold); border-radius:0 10px 10px 0;
  padding:16px 18px; margin-top:4px;}
.price-srm p{font-size:13.5px; line-height:1.65; color:var(--text-2); margin:0 0 8px;}
.price-srm p:last-child{margin-bottom:0;}
.price-srm b{color:var(--text);}

/* ===========================================================================
   DẢI QUẢNG CÁO XE SẮP RA MẮT (.pl-bn) — dựng theo ảnh mẫu anh Vũ gửi 21/08/2026
   ===========================================================================
   Dùng ở HAI nơi, cùng một khối markup: trang chủ (ngay dưới đầu trang) và đầu
   bài chương trình đặt cọc. Xem hnt_sap_ra_mat_banner() trong inc/sap-ra-mat.php.

   🔴🔴 MỌI CỠ CHỮ VÀ KHOẢNG CÁCH ĐO BẰNG `cqw`, KHÔNG PHẢI `px`.
        `container-type:inline-size` biến chính khối này thành mốc đo, nên 1cqw =
        1% bề ngang của nó. Ảnh mẫu rộng 1727px, nên một chữ 105px trong ảnh =
        105/1727 = 6,08cqw. Nhờ vậy khối giữ ĐÚNG tỉ lệ ảnh mẫu ở mọi bề ngang,
        không cần một điểm ngắt nào cho quãng 820px tới 1920px.
        Đổi bất kỳ dòng nào sang px là vỡ tỉ lệ ở khổ giữa mà khổ 1440 vẫn trông
        đúng, tức là kiểu lỗi rất khó thấy.

   🔴 Nền đêm, vòng sáng, đường chân trời, sàn ướt: tất cả vẽ bằng CSS/SVG, KHÔNG
      tải thêm byte ảnh nào. Chỉ chiếc xe là ảnh thật (nền trong suốt sẵn).
   =========================================================================== */
#sap-ra-mat{padding:40px 0 8px;}

.pl-bn{container-type:inline-size; position:relative; isolation:isolate;
  aspect-ratio:1727/924; width:100%; overflow:hidden;
  border-radius:18px; box-shadow:0 18px 48px rgba(2,10,24,.34);
  background:
    radial-gradient(120% 90% at 62% 34%, rgba(24,64,120,.55) 0%, transparent 60%),
    linear-gradient(155deg,#0C2247 0%,#081A35 42%,#040E1F 100%);}

/* Vòng sáng lớn sau xe. Hai lớp: viền sáng mảnh + quầng toả. */
.pl-bn-vong{position:absolute; z-index:0; left:12cqw; top:6cqw;
  width:40cqw; height:40cqw; border-radius:50%;
  border:0.16cqw solid rgba(255,214,140,.85);
  box-shadow:0 0 3cqw rgba(255,201,110,.5), inset 0 0 4cqw rgba(255,201,110,.22);
  background:radial-gradient(circle, rgba(255,208,128,.16) 0%, transparent 62%);}

/* Đường chân trời thành phố, chìm sau vòng sáng và sau xe. */
.pl-bn-pho{position:absolute; z-index:0; left:0; right:0; bottom:19cqw;
  width:100%; height:14cqw; fill:rgba(120,168,225,.17);}

/* Mặt sàn ướt: một vệt sáng ngang cộng bóng đổ dưới bánh xe. */
.pl-bn-san{position:absolute; z-index:0; left:0; right:0; bottom:0; height:26cqw;
  background:
    radial-gradient(60% 42% at 28% 8%, rgba(150,196,255,.20) 0%, transparent 70%),
    linear-gradient(180deg, rgba(10,26,52,0) 0%, rgba(6,16,34,.85) 55%, #05101F 100%);}

/* ---------- ruy băng vàng góc trái trên ---------- */
.pl-bn-ruy{position:absolute; z-index:3; left:3.4cqw; top:0;
  width:8.1cqw; padding:1.5cqw 0 2.3cqw; text-align:center;
  display:flex; flex-direction:column; align-items:center; gap:.35cqw;
  color:#3A2A05; background:linear-gradient(160deg,#F7DC94 0%,#D8A93C 48%,#B9862A 100%);
  /* Đuôi cờ khía chữ V ở đáy, đúng như ảnh mẫu. */
  clip-path:polygon(0 0,100% 0,100% 100%,50% 84%,0 100%);
  box-shadow:0 .5cqw 1.4cqw rgba(0,0,0,.34);}
.pl-bn-ruy-ic svg{width:2.5cqw; height:2.5cqw; stroke-width:1.6;}
.pl-bn-ruy b{font-size:.98cqw; font-weight:700; letter-spacing:.06em; text-transform:uppercase; line-height:1.1;}
.pl-bn-ruy i{font-size:1.34cqw; font-weight:900; font-style:normal; letter-spacing:.04em; text-transform:uppercase; line-height:1.1;}

/* ---------- chiếc xe ---------- */
.pl-bn-xe{position:absolute; z-index:2; left:2cqw; bottom:12cqw; width:47cqw;}
.pl-bn-xe img{display:block; width:100%; height:auto;
  filter:drop-shadow(0 2.4cqw 2.2cqw rgba(0,0,0,.55));}

/* ---------- cột chữ bên phải ---------- */
/* 🔴 NHỊP DỌC ĐO TỪ TOẠ ĐỘ THẬT TRONG ẢNH MẪU (ảnh rộng 1727px), không ước lượng.
   Chia mỗi toạ độ cho 1727 ra cqw: nhãn 5,5 · Hyundai 8,98 · PALISADE 12,4 ·
   Hybrid 18,8 · địa điểm 22,9 · giá 27,2 · nút 36,5 · dải chân 43,1.
   Bản đầu để top:7cqw và các lề rộng hơn, cộng dồn lại đẩy nút xuống 44cqw — tức
   NẰM DƯỚI dải chân, và vì dải chân đứng sau trong DOM ở cùng z-index nên nó phủ
   lên nút. Nhìn ảnh chụp mới thấy; mọi phép đo kích thước đều báo đạt. */
.pl-bn-chu{position:absolute; z-index:3; left:53.5cqw; right:3cqw; top:5.5cqw;}

.pl-bn-pill{display:inline-block; padding:.55cqw 1.5cqw; border-radius:.5cqw;
  border:.1cqw solid #E7C778; color:#F2D79A;
  font-size:1.28cqw; font-weight:800; letter-spacing:.22em; text-transform:uppercase;}

.pl-bn-hang{margin:.8cqw 0 0; color:#fff; font-size:3.3cqw; font-weight:800;
  letter-spacing:-.01em; line-height:1;}
/* Chữ vàng chuyển sắc. -webkit-background-clip vẫn cần cho Safari. */
.pl-bn-ten{margin:.1cqw 0 0; font-size:6.4cqw; font-weight:900; font-style:italic;
  letter-spacing:.005em; line-height:1;
  background:linear-gradient(178deg,#FFF4D2 6%,#F3D189 32%,#C9962F 62%,#F6DFA8 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  filter:drop-shadow(0 .18cqw .3cqw rgba(0,0,0,.45));}
/* Đời xe, hai bên có vạch kẻ như ảnh mẫu. */
.pl-bn-doi{display:flex; align-items:center; gap:1cqw; margin:.15cqw 0 0;
  color:#E8F0FB; font-size:2.7cqw; font-weight:700; line-height:1.1;}
.pl-bn-doi::before,.pl-bn-doi::after{content:""; height:.1cqw; flex:1 1 auto;
  background:linear-gradient(90deg,transparent,rgba(150,196,255,.75),transparent);}
.pl-bn-doi span{flex:0 0 auto;}

/* ---------- dòng địa điểm ---------- */
.pl-bn-noi{display:flex; align-items:center; gap:.8cqw; margin:1.1cqw 0 0;
  padding:.62cqw .62cqw .62cqw 1.1cqw; border-radius:.75cqw;
  background:rgba(10,30,62,.62); border:.06cqw solid rgba(126,170,228,.3);}
.pl-bn-noi-ic{flex:none; color:#F2C868;}
.pl-bn-noi-ic svg{width:1.9cqw; height:1.9cqw; stroke-width:1.8;}
/* 1,42cqw chu khong phai 1,55 */
.pl-bn-noi-t{flex:1 1 auto; color:#EAF1FA; font-size:1.42cqw; font-weight:600; white-space:nowrap;}
.pl-bn-ngay{flex:none; padding:.5cqw 1.05cqw; border-radius:.5cqw; color:#3A2A05;
  background:linear-gradient(160deg,#F7DC94,#D8A93C);
  font-size:1.42cqw; font-weight:900; white-space:nowrap;}

/* ---------- giá ---------- */
.pl-bn-gia{display:flex; align-items:center; gap:1.9cqw; margin:1.2cqw 0 0;}
.pl-bn-gia-so{flex:none;}
.pl-bn-gia-so span{display:block; color:#E8F0FB; font-size:1.55cqw; font-weight:700; line-height:1.2;}
.pl-bn-gia-so strong{display:block; margin-top:.15cqw; font-size:4.5cqw; font-weight:900; line-height:1;
  background:linear-gradient(176deg,#FFF4D2 8%,#F0CB80 46%,#CE9C35 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;}
/* Vạch dọc ngăn cách, vẽ bằng viền trái của đoạn chữ. */
.pl-bn-gia-chu{flex:1 1 auto; margin:0; padding-left:1.9cqw;
  border-left:.08cqw solid rgba(126,170,228,.38);
  color:#D3E0F2; font-size:1.35cqw; line-height:1.62;}
.pl-bn-gia-chu b{color:#F2D79A;}

/* ---------- nút ---------- */
.pl-bn-nut{display:inline-flex; align-items:center; gap:1.2cqw; margin-top:2.9cqw;
  padding:.95cqw 1cqw .95cqw 2.4cqw; border-radius:99px;
  border:.11cqw solid #E7C778; color:#F6E3B4;
  font-size:1.6cqw; font-weight:800; letter-spacing:.02em; text-transform:uppercase;
  background:rgba(255,214,140,.08);
  box-shadow:0 0 1.4cqw rgba(240,203,128,.28);
  transition:background .18s ease-out, color .18s ease-out, box-shadow .18s ease-out;}
.pl-bn-nut i{display:inline-flex; align-items:center; justify-content:center; flex:none;
  width:2.6cqw; height:2.6cqw; border-radius:50%; color:#3A2A05;
  background:linear-gradient(160deg,#F7DC94,#D8A93C);}
.pl-bn-nut i svg{width:1.5cqw; height:1.5cqw; stroke-width:2.2;}
.pl-bn-nut:hover{background:linear-gradient(160deg,#F7DC94,#D8A93C); color:#3A2A05;
  box-shadow:0 0 2.2cqw rgba(240,203,128,.5);}

/* ---------- dải chân ---------- */
.pl-bn-day{position:absolute; z-index:3; left:3.4cqw; right:3.4cqw; bottom:3cqw;
  display:flex; align-items:stretch; gap:1.4cqw;}
.pl-bn-camket{flex:1 1 auto; display:flex; align-items:center; justify-content:space-around;
  gap:1cqw; margin:0; padding:1.1cqw 1.4cqw; list-style:none;
  border-radius:.9cqw; background:rgba(11,32,64,.62);
  border:.06cqw solid rgba(126,170,228,.26);}
.pl-bn-camket li{display:flex; align-items:center; gap:.85cqw;}
.pl-bn-ck-ic{flex:none; display:inline-flex; align-items:center; justify-content:center;
  width:2.9cqw; height:2.9cqw; border-radius:50%; color:#F2C868;
  border:.07cqw solid rgba(242,200,104,.5); background:rgba(242,200,104,.1);}
.pl-bn-ck-ic svg{width:1.6cqw; height:1.6cqw;}
.pl-bn-ck-t{display:flex; flex-direction:column; line-height:1.18;}
.pl-bn-ck-t b{color:#EAF1FA; font-size:1.12cqw; font-weight:700; text-transform:uppercase; letter-spacing:.02em;}
.pl-bn-ck-t i{color:#F2D79A; font-size:1.26cqw; font-weight:900; font-style:normal; text-transform:uppercase;}

.pl-bn-lienhe{flex:none; display:flex; align-items:center; gap:1.2cqw;
  padding:.9cqw 1.6cqw; border-radius:.9cqw; background:#fff;
  box-shadow:0 .5cqw 1.4cqw rgba(0,0,0,.26);}
.pl-bn-lh{display:flex; align-items:center; gap:.8cqw;}
.pl-bn-lh-ic{flex:none; display:inline-flex; align-items:center; justify-content:center;
  width:2.6cqw; height:2.6cqw; border-radius:50%;}
.pl-bn-lh-goi{background:var(--primary); color:#fff;}
.pl-bn-lh-goi svg{width:1.4cqw; height:1.4cqw;}
.pl-bn-lh-zalo{background:#0068FF; color:#fff; font-size:.92cqw; font-weight:900; letter-spacing:.01em;}
.pl-bn-lh-t{display:flex; flex-direction:column; line-height:1.2;}
.pl-bn-lh-t b{color:#5A6472; font-size:1.05cqw; font-weight:600;}
/* Số điện thoại và chữ "Tư vấn ngay" phải đậm ngang nhau — chúng là hai lối liên
   hệ song song, cho một bên nổi hơn là khách chỉ thấy một lối. */
.pl-bn-lh-t i{color:var(--primary); font-size:1.5cqw; font-weight:900; font-style:normal; text-transform:uppercase;}
.pl-bn-lh-vach{width:.06cqw; align-self:stretch; background:#D8DEE7;}

/* ---------- điện thoại: bỏ tỉ lệ ảnh mẫu, xếp dọc ---------- */
/* 🔴 820px chứ không phải 768px. Ở 800px thì cột chữ bên phải chỉ còn ~370px mà
   chữ PALISADE cỡ 6,4cqw đã là 51px, hai thứ bắt đầu chen nhau. Đo bằng cách thu
   dần bề ngang chứ không lấy điểm ngắt quen tay. */
@media (max-width:820px){
  /* =========================================================================
     BẢN ĐIỆN THOẠI DỰNG LẠI 21/08/2026 — anh Vũ: "trên đt thì mất cân đối quá".
     =========================================================================
     Bản đầu chỉ là bản máy tính xếp dọc lại, và nó hỏng bốn chỗ ĐO ĐƯỢC ở 390px:
       1. cao 993px cho MỘT dải, dài gấp rưỡi màn hình
       2. số điện thoại gãy làm hai dòng: "087 687 / 6979"
       3. "TƯ VẤN NGAY" và "GIAO XE ĐỢT ĐẦU" cũng gãy dòng
       4. viên ngày "29 & 30/8" chiếm trọn một dòng riêng, thừa một khoảng trống
     🔴 Bài học: xếp dọc KHÔNG PHẢI là thiết kế cho điện thoại. Phải định lại thứ
        tự quan trọng và cắt bớt, chứ không phải hạ cỡ chữ rồi xuống dòng.
     ⚪ Mốc nhắm: dải cao dưới 640px ở khổ 390, và KHÔNG chữ nào gãy dòng giữa từ.
     ========================================================================= */
  #sap-ra-mat{padding:22px 0 4px;}
  .pl-bn{aspect-ratio:auto; container-type:normal; border-radius:14px; padding:0 0 15px;}

  /* Nền: vòng sáng nhỏ lại và nâng lên ôm lấy xe, đường chân trời hạ xuống ngang bánh. */
  /* 🔴 left:22% chứ không phải 12% — SỬA 22/08/2026, đi CẶP với .pl-bn-xe bên dưới.
     12% đặt tâm vòng ở 40% bề ngang dải. Xe thì bị margin-left:auto ẩn sát mép phải,
     nên tâm xe rơi vào 64% — lệch 82px, đo được. Anh Vũ nhìn trên iPhone thật:
     "chiếc xe đang bị lệch lên góc".
     → 22% đưa tâm vòng về đúng 50%, và xe cũng đặt tâm 50%. Hai thứ chung một tâm,
       hai bên chừa đều 53px.
     ⚠️ Đổi một trong hai con số mà quên con số kia là lệch trở lại. */
  .pl-bn-vong{left:22%; top:26px; width:56%; height:auto; aspect-ratio:1;
    border-width:1px; box-shadow:0 0 20px rgba(255,201,110,.45);}
  .pl-bn-pho{bottom:auto; top:126px; height:56px;}
  .pl-bn-san{height:170px;}

  /* Ruy băng nhỏ hẳn: ở khổ này nó là dấu hiệu, không phải tiêu đề. */
  .pl-bn-ruy{left:12px; width:56px; padding:9px 0 15px; gap:2px;}
  .pl-bn-ruy-ic svg{width:16px; height:16px;}
  .pl-bn-ruy b{font-size:6.5px; letter-spacing:.04em;}
  .pl-bn-ruy i{font-size:9.5px;}

  /* 🔴 SỬA 22/08/2026 — anh Vũ: "chỉnh chiếc xe đang bị lệch lên góc, phóng to lên 20%".
     Ba con số đổi, mỗi con số một việc:
       width 72% → 86.4%   đúng +20% bề ngang. Phần XE THẬT 195px → 237px.
       margin-left auto → 6.8%   đặt tâm ảnh vào 50% dải, trùng tâm vòng (xem .pl-bn-vong).
                                 6.8% = 50% − 86.4%/2, tính chứ không mò.
       margin-bottom −22px + padding-top 18→14px   lấy lại chiều cao mà cỡ ảnh mới ăn thêm.
     🔑 VÌ SAO −22px KHÔNG LÀM XE CHẠM CHỮ: đọc kênh alpha của chính file ảnh ra
        lề trong suốt trên 12,9% · dưới 22,0% · hai bên 7,0%. Tức đáy ảnh có 45px
        rỗng hoàn toàn. Thu 22px vẫn còn 27px thật từ bánh xe tới viền "SẮP RA MẮT".
        ⚠️ Đổi sang ảnh xe khác là ba con số này phải đo lại — ảnh khác thì lề khác.
     ⚪ Cảnh báo cũ "72% chứ không phải 84%, ở 84% khối ảnh ăn 239px" vẫn đúng về
        nguyên nhân, nhưng đã xử lý được: dải chỉ cao thêm 11px (641 → 652), không
        phải 37px, nhờ thu chỗ rỗng ở đáy chứ không nhờ hạ cỡ xe. */
  .pl-bn-xe{position:relative; z-index:2; left:auto; right:auto; top:auto; bottom:auto;
    width:86.4%; margin:0 auto -22px 6.8%; padding:14px 10px 0;}
  .pl-bn-xe img{filter:drop-shadow(0 10px 14px rgba(0,0,0,.55));}

  .pl-bn-chu{position:relative; z-index:3; left:auto; right:auto; top:auto; bottom:auto;
    padding:2px 15px 0;}
  .pl-bn-pill{padding:4px 10px; border-width:1px; border-radius:5px; font-size:10px; letter-spacing:.16em;}
  .pl-bn-hang{margin-top:9px; font-size:21px;}
  .pl-bn-ten{font-size:38px;}
  .pl-bn-doi{gap:8px; margin-top:3px; font-size:16.5px;}
  .pl-bn-doi::before,.pl-bn-doi::after{height:1px;}

  /* 🔴 ĐẢO THỨ TỰ: NGÀY ĐỨNG TRƯỚC, CHỮ CHẢY SAU.
     Hai bản trước đều để ngày ở CUỐI, và cả hai đều hỏng cùng một kiểu: dòng chữ
     "Trưng bày tại đại lý Hyundai Nha Trang" dài 267px trong khi lòng hộp chỉ 290px,
     nên viên ngày 73px không đủ chỗ và rơi xuống một dòng riêng, để lại một mảng
     trống bên phải. Đo ở 390px mới thấy; ở 320px chữ tự gãy sớm nên lại vừa.
     → Đưa ngày lên ngay sau biểu tượng thì nó luôn nằm dòng đầu, còn chữ tự gãy
       hai dòng bên cạnh. Ngày cũng là thứ khách cần thấy trước. */
  .pl-bn-noi{display:flex; flex-wrap:nowrap; align-items:center; gap:7px;
    margin-top:12px; padding:8px 10px; border-radius:9px; border-width:1px;}
  .pl-bn-noi-ic{order:1;}
  .pl-bn-noi-ic svg{width:15px; height:15px;}
  .pl-bn-ngay{order:2; flex:0 0 auto; padding:3px 8px; border-radius:5px; font-size:12px;}
  .pl-bn-noi-t{order:3; flex:1 1 auto; font-size:12.5px; line-height:1.35; white-space:normal;}

  /* Giá: nhãn trái, số phải, cùng một dòng — bản cũ xếp dọc tốn hai dòng cho hai chữ. */
  /* 🔴 `flex-wrap:wrap` BẮT BUỘC. Thiếu nó thì đoạn chú thích mang `flex:1 1 100%`
     vẫn bị ép nằm cùng hàng với hai mảnh giá rồi co lại còn một cột chữ hẹp —
     phép đo kích thước vẫn đạt, chỉ nhìn ảnh mới thấy. */
  .pl-bn-gia{display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between;
    gap:0 12px; margin-top:12px;}
  /* `display:contents` để nhãn và số thành hai con trực tiếp của hàng flex, nhờ vậy
     căn được theo đường chân chữ và đẩy ra hai mép. */
  .pl-bn-gia-so{display:contents;}
  .pl-bn-gia-so span{font-size:13px;}
  .pl-bn-gia-so strong{margin-top:0; font-size:32px;}
  .pl-bn-gia-chu{order:3; flex:1 1 100%; margin-top:8px; padding:8px 0 0; border-left:0;
    border-top:1px solid rgba(126,170,228,.32); font-size:12.5px; line-height:1.5;}

  .pl-bn-nut{width:100%; justify-content:center; gap:9px; margin-top:14px;
    padding:11px 14px; border-width:1px; font-size:13.5px; letter-spacing:.01em;}
  .pl-bn-nut i{width:24px; height:24px;}
  .pl-bn-nut i svg{width:13px; height:13px;}

  .pl-bn-day{position:relative; z-index:3; left:auto; right:auto; top:auto; bottom:auto;
    flex-direction:column; gap:8px; margin-top:14px; padding:0 15px;}

  /* Bốn cam kết thành MỘT HÀNG NGANG, biểu tượng trên chữ dưới.
     Bản 2x2 tốn 90px chiều cao cho thứ chỉ là dòng trấn an; kiểu một hàng còn 62px
     mà vẫn đọc được cả bốn. Bỏ luôn dòng nhãn nhỏ phía trên (b) vì ở cỡ 9px nó
     không đọc được, chỉ làm rối.
     white-space:nowrap giữ nguyên: thiếu nó thì "giao xe đợt đầu" gãy dòng và bốn
     ô cao lệch nhau. */
  .pl-bn-camket{flex-wrap:nowrap; justify-content:space-between; gap:4px;
    padding:9px 6px; border-radius:11px; border-width:1px;}
  .pl-bn-camket li{flex:1 1 0; flex-direction:column; align-items:center; gap:5px; min-width:0; text-align:center;}
  .pl-bn-ck-ic{width:26px; height:26px; border-width:1px;}
  .pl-bn-ck-ic svg{width:13px; height:13px;}
  .pl-bn-ck-t{min-width:0; align-items:center;}
  .pl-bn-ck-t b{display:none;}
  .pl-bn-ck-t i{font-size:9.5px; line-height:1.25; letter-spacing:0; white-space:nowrap;}

  /* 🔴🔴 BỎ HẲN TẤM LIÊN HỆ TRÊN ĐIỆN THOẠI.
     Site đã có ba nút nổi (gọi · Zalo · chat) bám đáy màn hình suốt mọi lúc, và
     ở khổ này chúng NẰM ĐÈ ĐÚNG LÊN tấm liên hệ trong dải — chụp ảnh 390px thấy
     nút chat che mất ô cam kết cuối. Tức là ta đang vẽ hai lần cùng một thứ, rồi
     hai thứ đó chồng lên nhau.
     Bỏ đi vừa hết chồng lấn, vừa bớt 48px chiều cao. Khổ máy tính KHÔNG bỏ: ở đó
     không có nút nổi nào, tấm liên hệ là đường liên hệ duy nhất trong dải.
     ⚠️ Nếu sau này gỡ nút nổi ở điện thoại thì phải bật lại chỗ này. */
  .pl-bn-lienhe{display:none;}
}

/* Màn rất hẹp (dưới 360px): hạ thêm một nấc chữ lớn, kẻo PALISADE tràn mép. */
@media (max-width:359px){
  .pl-bn-ten{font-size:33px;}
  .pl-bn-gia-so strong{font-size:30px;}
  .pl-bn-ck-t i{font-size:10px;}
  .pl-bn-lh-t i{font-size:12px;}
}

/* Khối này đứng ngay ĐẦU bài chương trình cọc, trên cả tiêu đề bài. */
.pl-bn-bai{margin:0 0 30px;}
.tag{display:inline-block; font-size:11px; font-weight:700; padding:4px 10px; border-radius:6px; margin-bottom:10px; background:var(--orange-bg); color:var(--orange);}
.tag.orange{background:var(--orange-bg); color:var(--orange);}
.tag.teal{background:var(--teal-bg); color:var(--teal);}
.tag.blue{background:var(--blue-bg); color:var(--blue);}
.tag.green{background:var(--green-bg); color:var(--green);}
/* Nhãn vàng cho tin xe sắp ra mắt (buổi trưng bày). Viền thay cho nền, đúng nếp
   .vbadge dòng ~906: --gold đạt 4,61 trên nền TRẮNG, còn đặt nó lên một nền vàng
   nhạt thì tụt xuống 4,27 và trượt chuẩn. Viền vẽ bằng box-shadow inset để thẻ
   không bị đội lên 1px so với mấy nhãn màu khác đứng cùng hàng. */
.tag.gold{background:#fff; color:var(--gold); box-shadow:inset 0 0 0 1px var(--gold);}
/* Không dùng var(--text-2) ở đây: #6B7280 đạt 4,83 trên nền trắng nhưng chỉ còn 4,39
   trên nền xám --grey-bg. Khai riêng đúng một chỗ này thay vì hạ token dùng chung. */
.tag.grey{background:var(--grey-bg); color:#686F7C;}   /* 4,59 trên --grey-bg */
.car-link{display:inline-block; font-size:13px; font-weight:700; color:var(--primary); transition:color .18s ease-out;}
.car-link:hover{color:var(--accent); text-decoration:underline; text-underline-offset:3px;}

/* ---------- promo banner (large, replaces the old 3-card grid) ---------- */
.promo-banner{background:linear-gradient(125deg,#0b4380 0%, var(--primary) 45%, #00142f 100%); border-radius:var(--radius-card); box-shadow:var(--shadow-card); overflow:hidden; display:grid; grid-template-columns:1fr 1fr; align-items:center; color:#fff; min-height:440px; position:relative;}
.promo-banner-text{padding:56px 56px;}
.promo-banner .lbl{font-size:13px; font-weight:800; letter-spacing:.1em; color:#9fc1e8; margin-bottom:18px; text-transform:uppercase;}
.promo-banner .headline{font-size:22px; font-weight:700; line-height:1.3; margin:0 0 4px; color:#dce9f9;}
.promo-banner .headline b{display:block; font-size:2.1em; font-weight:800; color:#fff; line-height:1.15; margin-top:4px;}
.promo-banner .sub{font-size:15px; color:#cfe0f5; margin:20px 0 30px; max-width:36ch; line-height:1.6;}
.promo-banner-text .btn-primary{background:#fff; color:var(--primary); height:56px; padding:0 32px;}
.promo-banner-text .btn-primary:hover{background:#eaf1fe; box-shadow:0 10px 24px rgba(0,0,0,.25);}
.promo-banner-car{height:100%; min-height:320px; position:relative; display:flex; align-items:center; justify-content:center;}
.promo-banner-car::before{content:""; position:absolute; left:50%; bottom:16%; transform:translateX(-50%); width:66%; height:16px; background:radial-gradient(ellipse, rgba(0,0,0,.35) 0%, rgba(0,0,0,0) 72%);}
.promo-banner-car img{position:relative; width:94%; max-width:480px; aspect-ratio:4/3; object-fit:contain; filter:drop-shadow(0 16px 16px rgba(0,0,0,.28)); margin:0 auto;}
/* Ba luật `span` này là bản cũ, markup hiện tại dùng `button` (xem khối `.promo-dots button`).
   Vẫn nâng theo vòng 16 để hai bản không lệch nhau — bản lệch là bẫy cho phiên sau. */
.promo-dots{position:absolute; bottom:26px; left:56px; display:flex; gap:32px;}
.promo-dots span{width:12px; height:12px; border-radius:50%; background:rgba(255,255,255,.35);}
.promo-dots span.active{background:#fff; width:30px; border-radius:6px;}

/* ---------- tools ---------- */
.tools-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:24px;}
.tool-card{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:46px 34px; text-align:center; transition:box-shadow .3s ease-out, transform .3s ease-out;}
.tool-icon{width:56px; height:56px; border-radius:16px; margin:0 auto 22px; display:flex; align-items:center; justify-content:center;}
.tool-icon svg{width:26px; height:26px;}
.tool-icon.o{background:var(--orange-bg); color:var(--orange);}
.tool-icon.t{background:var(--teal-bg); color:var(--teal);}
.tool-icon.b{background:var(--blue-bg); color:var(--blue);}
.tool-icon.g{background:#F3E8FF; color:#9333EA;}
.tool-card h4, .tool-card h3{font-size:15.5px; font-weight:700; margin:0 0 8px;}
.tool-card p{font-size:13.5px; color:var(--text-2); margin:0; line-height:1.6;}

/* ---------- vì sao chọn Hyundai Nha Trang ---------- */
.why-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:24px; margin-bottom:40px;}
.why-card{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:38px 32px; transition:box-shadow .3s ease-out, transform .3s ease-out;}
.why-icon{width:60px; height:60px; border-radius:16px; background:var(--accent-soft); color:var(--accent); display:flex; align-items:center; justify-content:center; margin-bottom:24px;}
.why-icon svg{width:27px; height:27px;}
.why-card h3{font-size:17px; font-weight:800; margin:0 0 12px;}
.why-card p{font-size:14px; color:var(--text-2); line-height:1.72; margin:0;}

/* shared hover lift for the standard content cards (not the featured car cards, which lift further) */
.tool-card:hover, .why-card:hover, .news-card:hover{box-shadow:var(--shadow-card-hover); transform:translateY(-4px);}
.why-stats{display:grid; grid-template-columns:repeat(4,1fr); background:var(--primary); border-radius:var(--radius-card); overflow:hidden; box-shadow:var(--shadow-card);}
.why-stats .stat{background:transparent; padding:30px 20px; text-align:center; border-right:1px solid rgba(255,255,255,.12);}
.why-stats .stat:last-child{border-right:none;}
.why-stats .stat .n{font-size:32px; font-weight:800; color:#fff;}
.why-stats .stat .l{font-size:12px; color:#a8c2e0; text-transform:uppercase; letter-spacing:.04em; margin-top:6px;}

/* ══ "ĐIỀU KHÁCH HÀNG HAY CHIA SẺ" — trang chủ + trang chi tiết xe ═════════════
   VÒNG 21 đã BỎ HẲN bộ `.review-*` / `.stars` / `.avatar` cũ: markup của chúng là
   3 thẻ đánh giá gắn TÊN NGƯỜI BỊA và số sao, giống hệt nhau trên 12 trang xe.
   Khối này thay thế và KHÁC BẢN CHẤT — đại lý kể lại điều khách hay nói, không tên,
   không sao. Lý do đầy đủ (gồm điều luật cấm so sánh đích danh đối thủ) ở đầu file
   `inc/trai-nghiem.php`.
   ⚠️ KHÔNG thêm dấu ngoặc kép trang trí — ngoặc kép ngụ ý trích dẫn nguyên văn lời
      một người, mà đây không phải. Cũng đừng thêm số sao. */
.tn-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:20px;}
.tn-card{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card);
  padding:26px 28px; border-left:3px solid var(--accent);}
.tn-nhan{font-size:16px; font-weight:800; color:var(--primary); margin:0 0 9px; line-height:1.3;}
.tn-noi-dung{font-size:14.5px; line-height:1.75; color:var(--text-2); margin:0;}
/* Dòng nói rõ nguồn — bắt buộc giữ, nó là thứ phân biệt "đại lý tổng hợp" với
   "trích lời khách". Bỏ nó đi là khối này quay về chỗ mập mờ ban đầu. */
.tn-ghi-chu{margin:18px 0 0; font-size:12px; line-height:1.6; color:var(--text-2);}
.tn-ghi-chu a{color:var(--accent); font-weight:700;}

/* Trang chủ có 3 mục (nói về dịch vụ đại lý) chứ không phải 4 như trang xe, nên
   lưới 3 cột. Khoanh trong `body.home` — trang xe phải giữ 2×2. */
body.home .tn-grid{grid-template-columns:repeat(3,1fr);}

@media (max-width:900px){
  .tn-grid, body.home .tn-grid{grid-template-columns:1fr; gap:14px;}
  .tn-card{padding:18px 20px;}
  .tn-nhan{font-size:15px;}
  .tn-noi-dung{font-size:14px; line-height:1.7;}
}


/* ---------- tin tức & sự kiện ---------- */
.news-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:24px;}
.news-card{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); overflow:hidden; transition:box-shadow .3s ease-out, transform .3s ease-out;}
.news-img{aspect-ratio:1/1; background:linear-gradient(135deg,#eef3f9,#d7e2ee); position:relative; overflow:hidden;}
.news-img img{width:100%; height:100%; object-fit:cover; transition:transform .4s ease-out;}
.news-card:hover .news-img img{transform:scale(1.04);}
.news-body{padding:24px 26px 28px;}
.news-date{font-size:11px; color:var(--accent); font-weight:700; letter-spacing:.05em; text-transform:uppercase; margin-bottom:14px;}
.news-title{font-size:17.5px; font-weight:800; line-height:1.4; margin:0 0 18px; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;}
.news-link{font-size:13px; font-weight:700; color:var(--primary); transition:color .18s ease-out;}
.news-card:hover .news-link{color:var(--accent); text-decoration:underline; text-underline-offset:3px;}

/* ---------- CTA / lead form band ---------- */
.cta-band{background:linear-gradient(180deg,#ffffff 0%,#f3f7fd 100%); box-shadow:var(--shadow-card); display:flex; justify-content:space-between; align-items:center; gap:32px; flex-wrap:wrap; border-radius:var(--radius-card); margin:0 40px; padding:64px 64px; max-width:calc(var(--container) - 80px); margin-inline:auto;}
.cta-band-copy{display:flex; flex-direction:column; gap:14px;}
.cta-band h2{font-size:clamp(24px,3vw,32px); font-weight:800; margin:0; max-width:20ch; text-wrap:balance; color:var(--primary); line-height:1.25;}

/* --------------------------------------------------------------------------
   VÒNG 17 — biến thể `.cta-band-stack`: khối form xếp dọc, dùng ở trang chi tiết xe.

   🔴 Bốn luật dưới đây trước là INLINE STYLE trong single-product.php. Chuyển ra đây
      vì inline style thắng mọi luật CSS không `!important` — để nguyên thì mọi media
      query cho điện thoại đều bị đè, im lặng, không dấu hiệu gì.
      Giá trị giữ ĐÚNG như inline cũ nên desktop không đổi một pixel.
   -------------------------------------------------------------------------- */
.cta-band-stack{flex-direction:column; align-items:stretch; text-align:center;}
.cta-band-stack .cta-band-copy{align-items:center;}
.cta-band-stack h2{max-width:none;}
.cta-band-lede{max-width:56ch; color:var(--text-2); font-size:14.5px; margin:0;}
.cta-form-stack{justify-content:center; margin-top:28px;}
/* Vòng 18 — thay `style="justify-content:center; margin-top:0"` từng nằm inline trên
   `.final-cta-actions` ở single-product.php.

   🔴 `flex:1 1 100%` LÀ BẮT BUỘC, và nó là hệ quả của việc bỏ ô email.
   `.final-cta-actions` là một ô flex `flex:0 1 auto` nên nó co theo NỘI DUNG. Trước đây
   ô nhập email nằm bên trong nó rộng 237px và chính nó giữ chiều rộng cho cả cụm. Bỏ ô
   email đi thì nội dung rộng nhất còn lại là chữ trên nút → cụm tụt xuống 150px, trong
   khi các ô nhập bên trên rộng 278px. Hai nút hẹp bằng nửa ô nhập, trông như lỗi.
   Cho nó `flex:1 1 100%` giống các ô nhập thì `width:100%` của nút mới ra đủ 278px.

   Bài học: bỏ một phần tử khỏi cụm flex thì phải đo lại chiều rộng của CẢ CỤM — phần tử
   bị bỏ có thể đang là thứ định kích thước cho những phần tử còn lại. */
.final-cta-stack{justify-content:center; margin-top:0; flex:1 1 100%;}
/* ba điểm tin cậy: ở desktop là ba chip như cũ */
.cta-trust{display:flex; gap:10px; flex-wrap:wrap; justify-content:center; margin:0;}
.cta-badge{display:inline-flex; align-items:center; gap:7px; font-size:12px; font-weight:700; color:var(--green); background:var(--green-bg); padding:6px 14px; border-radius:8px; width:fit-content;}
.cta-badge::before{content:""; width:6px; height:6px; border-radius:50%; background:var(--green); flex-shrink:0;}
.cta-form{display:flex; gap:12px; flex-wrap:wrap;}
.cta-form input{height:52px; padding:0 20px; border:1px solid var(--border); background:#fff; font-size:14.5px; min-width:220px; border-radius:var(--radius-btn); transition:border-color .18s ease-out;}
.cta-form input:focus{outline:2px solid var(--accent); outline-offset:-1px;}
.cta-form .btn{height:52px; padding:0 38px; box-shadow:0 10px 24px rgba(0,44,95,.18);}
.cta-form .btn:hover{box-shadow:0 14px 30px rgba(0,44,95,.26);}

/* ---------- footer (corporate) ---------- */
/* VÒNG 19 — nền cũ #04162E gần như đen, khách thấy nặng. Nâng một bậc lên #071F3C
   (cùng sắc, chỉ sáng hơn ~3% độ sáng HSL). Đo lại sau khi đổi: tiêu đề trắng 16,53:1,
   chữ thân 62% trắng 7,02:1 — vẫn trên mốc 4,5:1.
   ⚠️ Sửa TẠI CHỖ, không đè bằng luật `.site-footer{}` thứ hai: LiteSpeed minify gộp
      selector trùng và giữ giá trị khai TRƯỚC, luật đè sau sẽ bị nuốt im lặng. */
.site-footer{background:#071F3C; color:rgba(255,255,255,.62);}
.footer-top{padding:64px 0 40px; border-bottom:1px solid rgba(255,255,255,.08);}
.footer-brand-row{display:flex; justify-content:space-between; align-items:flex-start; gap:40px; flex-wrap:wrap;}
.footer-brand h3{color:#fff; font-size:19px; font-weight:800; margin:0 0 12px;}
.footer-brand p{max-width:38ch; font-size:13.5px; line-height:1.8; margin:0;}
.footer-social{display:flex; gap:10px;}
.footer-social a{width:40px; height:40px; border-radius:11px; background:rgba(255,255,255,.06); display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:800; color:#fff; transition:background .18s ease-out, transform .18s ease-out;}
.footer-social a:hover{background:rgba(255,255,255,.16); transform:translateY(-2px);}
/* 5 cột: thương hiệu (rộng hơn) + 4 cột liên kết. Trước đây thương hiệu nằm ở
   một hàng riêng phía trên, chân trang cao thêm khoảng 100px so với tỉ lệ của mẫu. */
.footer-cols{padding:56px 0 48px; display:grid; grid-template-columns:1.6fr 1fr 1fr 1fr 1fr; gap:36px;}
.footer-cols .footer-brand{padding-right:12px;}
.footer-cols .footer-brand p{margin-bottom:20px;}
.footer-cols h4{color:#fff; font-size:12.5px; text-transform:uppercase; letter-spacing:.06em; margin:0 0 18px;}
.footer-cols a,.footer-cols p{display:block; font-size:13.5px; line-height:2.2; margin:0;}
.footer-cols a{color:rgba(255,255,255,.62); transition:color .18s ease-out;}
/* Link nằm trong câu (số hotline) phải inline, nếu không quy tắc display:block ở trên sẽ ngắt dòng. */
.footer-cols p a{display:inline;}
.footer-cols a:hover{color:#fff;}

/* 🔴 VÒNG 19 — SỬA LỖI TƯƠNG PHẢN CÓ SẴN Ở BA CHẤM MẠNG XÃ HỘI.
   `.footer-cols a` ngay trên hạ MỌI link chân trang xuống 62% trắng — đúng cho link
   chữ trên nền navy, nhưng nó vơ luôn cả ba chấm Zalo/Facebook/TikTok, vốn có nền
   MÀU RIÊNG của thương hiệu. Đo được: chữ "Z" trên #0068FF chỉ 2,70:1 và "f" trên
   #1877F2 chỉ 2,54:1 — dưới mốc 4,5:1, nhìn gần như mất chữ.

   Vì sao luật `.social-dot{color:#fff}` ở dòng 75 không cứu được: nó chỉ có độ ưu
   tiên (0,1,0), thua `.footer-cols a` (0,1,1). Còn `.footer-social a` (dòng 361)
   tuy cũng khai #fff nhưng NGANG ĐIỂM (0,1,1) và đứng TRƯỚC nên bị đè.
   → Phải nhắm bằng hai lớp (0,2,0) mới thắng cả hai.

   ⚠️ Chỉ khoanh trong `.footer-cols`. Bộ chấm này CÒN DÙNG Ở header.php, mà trên đó
      luật dòng 75 vẫn đúng — sửa luật gốc là đụng cả đầu trang không cần thiết.

   Đo lại sau khi sửa: Z 4,75:1 · f 4,73:1 (nhờ hạ nền Facebook, xem chú thích ở khối
   `.social-dot.*` phía trên) · T 18,88:1 — cả ba trên mốc 4,5:1.
   ⚠️ Trả chữ về trắng MỚI CHỈ LÀ MỘT NỬA. Riêng Facebook vẫn trượt sau bước này
      (4,23:1) và phải hạ thêm nền. Đừng tưởng đổi màu chữ là xong.

   🔴 VÀ CÙNG DÒNG 369 ĐÓ CÒN GIẾT LUÔN CANH GIỮA — lỗi thứ hai, khách nhìn ra trước tôi.
   `.footer-cols a{display:block; line-height:2.2}` đè `.footer-social a{display:flex;
   align-items:center; justify-content:center}` (dòng 361) — lại NGANG ĐIỂM (0,1,1) và
   đứng sau nên thắng. Mất `flex` thì chữ rơi về dòng chảy thường: dính mép TRÁI, còn
   `line-height:2.2` đẩy nó lên TRÊN tâm. Đo được lệch tâm X −15…−17px, Y −6px trong
   khung 40px — tức chữ nằm hẳn ở góc trên trái, không phải "hơi lệch".
   Dòng 369 cũng là thứ đè cỡ chữ 12px của `.footer-social a` thành 13,5px.
   → Trả lại đủ bộ canh giữa, và cho chữ 22px (55% khung) theo khách chọn.
     Phóng to chữ MỘT MÌNH không cứu được — chỉ thành chữ to nằm lệch góc.
   Đo lại sau khi sửa: lệch tâm 0,00px cả ba chữ.
   ⚪ 22px + w800 đã vượt mốc "chữ lớn" của WCAG (≥18,66px đậm → chỉ cần 3:1), nên ba
     chấm giờ dư biên tương phản; vẫn giữ nền Facebook đã hạ để có thêm lề an toàn. */
.footer-cols .social-dot{color:#fff; display:flex; align-items:center; justify-content:center;
  line-height:1; padding:0; text-align:center; font-size:22px;}
.footer-bottom{border-top:1px solid rgba(255,255,255,.08); padding:24px 0; display:flex; justify-content:space-between; font-size:12.5px; flex-wrap:wrap; gap:10px;}
.footer-bottom a{color:rgba(255,255,255,.62); transition:color .18s ease-out;}
.footer-bottom a:hover{color:#fff;}

/* ---------- desktop sticky action bar ---------- */
/* 🔴 VÒNG 16 — `env(safe-area-inset-bottom)` LÀ BẮT BUỘC TRÊN iPHONE CÓ VẠCH HOME.
   Thanh cao 60px (điện thoại) mà không trừ safe-area thì 34px cuối — 57% chiều cao —
   nằm trong vùng cử chỉ home indicator: chạm vào đó iOS ưu tiên cử chỉ vuốt lên của hệ
   thống, nên nút bấm hay không ăn, mà `innerHeight` vẫn tính cả dải đó nên mọi phép đo
   chiều cao đều báo "đủ 60px".
   `env()` trả 0 trên máy không có vạch home, nên máy tính và Android cũ không đổi gì.
   Dùng `sticky` chứ không `fixed` là chủ ý: hết trang thì thanh trở về dòng chảy, không
   che vĩnh viễn nội dung cuối — nhờ vậy không cần `padding-bottom` cho `body`. */
/* 🔴 VÒNG 19 — nền KHÔNG còn là `var(--primary)`. Khách chọn nhạt hơn một bậc (#04356C)
   cho riêng thanh này. Phải khai màu thẳng chứ TUYỆT ĐỐI không sửa token `--primary`:
   token đó dùng ở hàng trăm chỗ khắp site, đổi nó là đổi cả nút, cả tiêu đề, cả 12 trang.
   Thanh này nằm ở footer.php nên nó hiện trên MỌI trang — đổi ở đây là đổi cả 12 trang,
   đúng như khách duyệt. */
.sticky-bar{position:sticky; bottom:0; z-index:150; background:#04356C; box-shadow:0 -6px 20px rgba(0,0,0,.15);
  padding-bottom:env(safe-area-inset-bottom, 0px);}
.sticky-bar .wrap{display:grid; grid-template-columns:repeat(5,1fr); align-items:stretch; height:68px; padding:0;}
.sticky-item{display:flex; align-items:center; gap:10px; color:#fff; height:100%; justify-content:center; border-right:1px solid rgba(255,255,255,.12);}
.sticky-item:last-child{border-right:none;}
.sticky-item svg{width:20px; height:20px; flex-shrink:0;}
.sticky-item .txt{display:flex; flex-direction:column;}
.sticky-item .t1{font-size:13px; font-weight:700; line-height:1.3;}
.sticky-item .t2{font-size:11px; color:#a8c2e0; line-height:1.3;}
.sticky-item.active{background:var(--accent);}
/* Chỉ mục đang active mới đổi màu chữ phụ. Nền của nó là --accent #0066CC sáng hơn hẳn
   nền --primary của cả thanh, nên #A8C2E0 rơi từ 7,51 xuống 3,03. Các mục còn lại giữ
   nguyên #A8C2E0 vì trên nền navy chúng vẫn đạt thoải mái — đổi cả loạt là làm nhạt oan. */
.sticky-item.active .t2{color:#E2EBF5;}   /* 4,62 trên --accent */

/* Nhãn một dòng dành riêng cho điện thoại. Trên máy tính .txt đã hiện đủ hai dòng
   nên nhãn này nằm im. Không dùng display:none cho .txt ở mobile mà giấu bằng clip,
   để trình đọc màn hình vẫn đọc được nội dung đầy đủ. */
.sticky-item .t-ngan{display:none;}
/* Cụm nút nổi CHỈ có ở điện thoại. Máy tính vẫn dùng thanh đáy 5 nút như cũ.
   Bật lên ở @media dưới 900px, cuối file. */
.hnt-noi{display:none;}

/* Nút Chat AI: CHỈ có mặt trên điện thoại. Máy tính vẫn đi qua nút tròn nổi.
   Là <button> nên phải gỡ nền và viền mặc định của trình duyệt, nếu không nó hiện
   ra một ô xám giữa thanh navy. */
.sticky-chat-ai{display:none; -webkit-appearance:none; appearance:none; border:0; background:none;
  font:inherit; color:#fff; cursor:pointer; text-align:center;}

/* ---------- reveal (fade-up) ---------- */
.reveal{opacity:0; transform:translateY(16px); transition:opacity .34s ease-out, transform .34s ease-out;}
.reveal.in{opacity:1; transform:translateY(0);}
@media (prefers-reduced-motion:reduce){.reveal{opacity:1; transform:none; transition:none;}}

/* ---------- vertical rhythm (RC1) ----------
   Mặc định section{padding:96px 0} tạo khoảng cách bằng nhau ở mọi nơi (96 + 96 = 192px giữa 2 section),
   khiến trang dài và các khối nội dung rời rạc. Hero giữ nguyên nhịp lớn nhất; các section nội dung
   được kéo gần nhau hơn bằng cách giảm padding-top riêng; CTA cuối và Footer gần nhau nhất.
   #reviews và #lead-form dùng chung ở cả Homepage lẫn Product Detail nên tự động đồng bộ nhịp giữa 2 trang. */
#featured, #cost{padding-top:48px;}
#tools, #quick-info{padding-top:56px;}
#promo, #versions, #why-this-car, #gallery, #offers, #why-us, #reviews, #news, #faq, #commitments{padding-top:64px;}
#lead-form{padding-top:40px; padding-bottom:56px;}

/* ---------- generic page hero (about, price list, archive) ---------- */
.page-hero{background:linear-gradient(180deg,#f5f8fc,#fff); padding:64px 0 40px; border-bottom:1px solid var(--border);}
.page-hero .eyebrow{color:var(--accent); font-size:13px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; margin:0 0 10px;}
.page-hero h1{font-size:clamp(28px,4vw,42px); font-weight:800; color:var(--primary); margin:0; text-wrap:balance;}

/* ---------- tabs (category filter, spec tabs) ---------- */
.tabs{display:flex; gap:8px; margin-bottom:32px; flex-wrap:wrap;}
.tab{padding:10px 18px; border:1px solid var(--border); background:#fff; border-radius:10px; font-size:13px; font-weight:700; letter-spacing:.02em; cursor:pointer; color:var(--text-2); transition:background .2s ease-out, color .2s ease-out, border-color .2s ease-out;}
.tab.active, .tab:hover{background:var(--primary); color:#fff; border-color:var(--primary);}
/* Trang danh mục xe: tab là link điều hướng thật, không phải nút lọc JS. Nhìn giống hệt .tabs. */
.tabs-nav{display:flex; gap:8px; margin-bottom:32px; flex-wrap:wrap;}
.tabs-nav .tab{display:inline-block; text-decoration:none;}

/* ---------- model grid (archive / price list, reuse car-card styling) ---------- */
.model-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:20px;}
@media (max-width:1100px){.model-grid{grid-template-columns:repeat(2,1fr);}}
@media (max-width:640px){.model-grid{grid-template-columns:1fr;}}
.model-card{background:#fff; border:1px solid var(--border); border-radius:14px; overflow:hidden; position:relative; transition:box-shadow .2s ease-out, transform .2s ease-out;}
.model-card:hover{box-shadow:0 10px 26px rgba(0,0,0,.09); transform:translateY(-3px);}
.model-card .tag{position:absolute; top:12px; left:12px; z-index:2;}
.model-card .card-img{aspect-ratio:4/3; position:relative; overflow:hidden; display:flex; align-items:center; justify-content:center; background:radial-gradient(ellipse at 50% 32%,#eef3f9 0%,#e3ebf4 55%,#d7e2ee 100%);}
.model-card .card-img::before{content:""; position:absolute; left:50%; bottom:16%; transform:translateX(-50%); width:62%; height:12%; background:radial-gradient(ellipse, rgba(0,44,95,.28) 0%, rgba(0,44,95,0) 72%);}
.model-card .card-img img{width:100%; height:100%; object-fit:contain; position:relative; z-index:1; filter:drop-shadow(0 10px 10px rgba(0,44,95,.12));}
.model-card h3{font-size:16.5px; font-weight:800; margin:14px 16px 4px;}
.model-card .old-price{margin:0 16px; font-size:12px; color:var(--price-old); text-decoration:line-through;}
.model-card .price{margin:0 16px; font-size:16px; font-weight:800; color:var(--primary);}
.model-card a{display:inline-flex; align-items:center; gap:6px; margin:12px 16px 16px; color:var(--primary); text-decoration:none; font-size:13px; font-weight:700;}
.model-card a:hover{color:var(--accent);}

/* ---------- lớp tương thích ngược (dùng chung giữa các trang) ---------- */
.section-inner{max-width:var(--container); margin:0 auto; padding:0 40px;}
.eyebrow, .hero-eyebrow{font-size:13px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--accent); margin:0 0 10px;}
.hero-actions{display:flex; gap:14px; flex-wrap:wrap;}
.btn-ghost{display:inline-flex; align-items:center; justify-content:center; gap:8px; height:48px; border-radius:var(--radius-btn); font-weight:700; font-size:14.5px; padding:0 22px; background:#fff; color:var(--primary); border:1.5px solid var(--border); transition:border-color .18s ease-out, transform .18s ease-out;}
.btn-ghost:hover{border-color:var(--primary); transform:translateY(-2px);}
@media (max-width:900px){.section-inner{padding:0 16px;}}

/* ---------- single product ---------- */
.product-hero{background:linear-gradient(180deg,#f5f8fc,#fff); padding:56px 0; border-bottom:1px solid var(--border);}
/* VÒNG 22b (14/08) — `align-items:start` chứ KHÔNG phải `center`.
   Hàng lưới cao 512px (cột trái = khung ảnh 430 + dải ảnh nhỏ), cột phải chỉ cao 423px.
   `center` đem cột phải đặt giữa hàng nên nó tụt xuống 44px (Santa Fe 47px — mỗi xe một
   khác vì lượng chữ khác nhau, tức lệch KHÔNG đều giữa các trang xe). Khách nhìn ra ngay
   là breadcrumb không thẳng hàng với mép trên khung ảnh.
   Đo 3 xe: lệch 44/47/44 → 0px, chiều cao trang KHÔNG đổi một pixel (hàng vẫn 512px do
   cột trái quyết định), điện thoại y nguyên (dưới 900px lưới còn 1 cột, align-items vô can).
   Đánh đổi đã báo khách và khách duyệt: 89px trống trước đây chia 44 trên / 45 dưới,
   nay dồn hết xuống dưới cột phải. */
.product-hero-grid{display:grid; grid-template-columns:1fr 1fr; gap:56px; align-items:start;}
.product-hero-grid > *{min-width:0;}
/* Khung ảnh chính — RC11 đổi sang NỀN TRẮNG.
   Nền xanh–xám cũ tạo cảm giác "sàn studio" nhưng hắt sắc xanh lên thân xe trắng và bạc,
   làm màu xe nhìn không đúng. Cả 12/12 ảnh đại diện đều là ảnh cắt nền nên nền khung
   chính là nền khách nhìn thấy sau lưng xe. */
.product-gallery-main{background:#fff; border:1px solid var(--border); border-radius:16px; display:flex; align-items:center; justify-content:center; padding:24px; min-height:340px; position:relative; overflow:hidden;}
/* Bóng gầm xe CHỈ vẽ khi ảnh đang xem là ảnh cắt nền. Với ảnh chụp thật thì một vệt bóng
   nằm dưới tấm ảnh phong cảnh trông rất sai — JS bật/tắt lớp is-cutout theo ảnh đang chọn. */
.product-gallery-main.is-cutout::before{content:""; position:absolute; left:50%; bottom:12%; transform:translateX(-50%); width:56%; height:20px; background:radial-gradient(ellipse, rgba(0,44,95,.28) 0%, rgba(0,44,95,0) 72%);}
.product-main-img{width:100%; aspect-ratio:4/3; max-height:380px; object-fit:contain; margin:0 auto; position:relative; z-index:1;}
.product-gallery-main.is-cutout .product-main-img{filter:drop-shadow(0 14px 12px rgba(0,44,95,.14));}
/* Ảnh chụp thật phủ kín khung thay vì để viền trắng quanh — khung không còn là "sàn" nữa.
   Trải bằng inset:0 chứ không bằng height:100%: chiều cao khung do `#pdp-hero` đặt riêng
   (420px) chứ không phải min-height 340 ở trên, gán height cứng là hụt mất một dải. */
.product-gallery-main:not(.is-cutout){padding:0;}
.product-gallery-main:not(.is-cutout) .product-main-img{position:absolute; inset:0; width:100%; height:100%;
  aspect-ratio:auto; max-height:none; object-fit:cover; border-radius:15px;}
/* VÒNG 22 — GỢI Ý CUỘN NGANG cho dải ảnh nhỏ. Đo 14/08: cuộn 358→434px ở 390px,
   không có dấu hiệu nào → khách tưởng xe chỉ có 5 ảnh trong khi có 6.
   Cùng cách với `.compare-scroll`, nhưng màu lớp che là `--page` (#F7F8FA) chứ KHÔNG
   phải #fff: nền thật phía sau dải này là body, đã đo — dùng trắng sẽ để lại vệt sáng.
   Hai lớp che `local` tự trôi theo nội dung nên bóng tắt khi cuộn hết — xe nào ít ảnh
   (Accent 3 ảnh) không cuộn được thì KHÔNG hiện bóng, không cần media query riêng. */
.product-gallery-thumbs{display:flex; gap:10px; margin-top:14px; overflow-x:auto; padding-bottom:4px;
  background-image:
    linear-gradient(90deg,var(--page) 30%,rgba(247,248,250,0)),
    linear-gradient(90deg,rgba(247,248,250,0),var(--page) 70%),
    radial-gradient(farthest-side at 0 50%,rgba(0,44,95,.13),rgba(0,44,95,0)),
    radial-gradient(farthest-side at 100% 50%,rgba(0,44,95,.13),rgba(0,44,95,0));
  background-position:left center, right center, left center, right center;
  background-repeat:no-repeat;
  background-size:30px 100%, 30px 100%, 13px 100%, 13px 100%;
  background-attachment:local, local, scroll, scroll;}
/* Mỗi ảnh bọc trong <button> để bàn phím tới được; nút chỉ là vỏ, không có hình dáng riêng */
.product-gallery-thumbs .thumb-btn{flex-shrink:0; padding:0; border:0; background:none; line-height:0; cursor:pointer; border-radius:8px; transition:transform .2s ease-out;}
.product-gallery-thumbs .thumb-btn:focus-visible{outline:3px solid var(--accent); outline-offset:2px;}
.product-gallery-thumbs img{width:64px; height:64px; object-fit:cover; border:2px solid var(--border); border-radius:8px; cursor:pointer; background:#fff; transition:border-color .2s ease-out, opacity .2s ease-out; opacity:.7; display:block;}
/* Nhấc nhẹ khi rê chuột: dải ảnh này từng bị hiểu là hình trang trí, phải cho thấy bấm được */
.product-gallery-thumbs .thumb-btn:hover{transform:translateY(-3px);}
.product-gallery-thumbs .thumb-btn:hover img{opacity:1; border-color:var(--accent);}
.product-gallery-thumbs img.is-active{opacity:1; border-color:var(--primary);}
@media (prefers-reduced-motion:reduce){
  .product-gallery-thumbs .thumb-btn{transition:none;}
  .product-gallery-thumbs .thumb-btn:hover{transform:none;}
}

/* ---------- CHỌN MÀU XE (14/08/2026) ----------
   Dải ô màu nằm ngay dưới dải ảnh nhỏ, điều khiển chính khung ảnh phía trên.
   Dữ liệu và lý do chọn từng tấm ảnh: inc/mau-xe.php.

   Ô màu KHÔNG tô bằng mã màu phẳng mà cắt ra từ một tấm lưới ảnh chung
   (assets/img/mau/o-mau.webp, 7 cột × 8 hàng, ô 68px). Lý do dài, ghi ở
   inc/mau-xe.php mục 4 — tóm tắt: ô màu chính hãng có loại vẽ mặt cong phản
   quang, suy ra mã màu phẳng kiểu gì cũng sai ít nhất một màu.
   PHP gán --c (cột) và --r (hàng) cho từng nút, --luoi (đường dẫn ảnh) cho thẻ bọc.

   🔴 --o là CẠNH MỘT Ô KHI HIỆN, và cả background-size lẫn background-position đều
      tính từ nó. Đổi một chỗ mà quên chỗ kia là ô màu lệch sang màu bên cạnh, mà
      trông vẫn ra một ô màu tử tế nên rất khó thấy. */
.pdp-mau{margin-top:14px; padding:14px 16px 16px; border:1px solid var(--border); border-radius:14px; background:#fff;}
.pdp-mau-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-bottom:12px;}
.pdp-mau-lb{font-size:12px; font-weight:700; letter-spacing:.09em; text-transform:uppercase; color:var(--text-2);}
.pdp-mau-ten{font-size:15px; font-weight:700; color:var(--primary);}
.pdp-mau-list{display:flex; flex-wrap:wrap; gap:12px; margin:0; padding:0; list-style:none; --o:34px;}
/* Vùng chạm 46px bọc ngoài ô màu 34px: ô 34px là dưới mốc 44px của WCAG 2.5.5.
   Đo vùng chạm bằng qa/ban-ngon-tay-that.js, đừng đo bằng getBoundingClientRect
   của cái chấm — hai số đó khác nhau, xem logweb mục 0y. */
.pdp-mau-o{width:46px; height:46px; padding:0; border:0; background:none; cursor:pointer;
  display:flex; align-items:center; justify-content:center; position:relative; flex:none;}
.pdp-mau-chip{width:var(--o); height:var(--o); border-radius:50%; display:block;
  background-image:var(--luoi); background-repeat:no-repeat;
  background-size:calc(var(--o) * 7) calc(var(--o) * 8);
  background-position:calc(var(--c) * var(--o) * -1) calc(var(--r) * var(--o) * -1);
  box-shadow:inset 0 0 0 1px rgba(17,24,39,.18), 0 1px 3px rgba(15,23,42,.18);
  transition:transform .16s ease-out;}
.pdp-mau-o:hover .pdp-mau-chip{transform:scale(1.08);}
.pdp-mau-o::after{content:""; position:absolute; inset:0; border-radius:50%;
  box-shadow:0 0 0 2px var(--primary); opacity:0; transition:opacity .16s ease-out;}
.pdp-mau-o[aria-pressed="true"]::after{opacity:1;}
.pdp-mau-o:focus-visible{outline:3px solid var(--accent); outline-offset:2px; border-radius:50%;}
/* Ảnh màu vốn đã có sẵn bóng gầm xe in trong ảnh. Lớp is-cutout vẽ thêm một vệt bóng
   nữa nên thành hai bóng chồng nhau — tắt vệt của CSS đi, giữ nguyên bóng của ảnh. */
.product-gallery-main.is-mau::before{display:none;}
.product-gallery-main.is-mau .product-main-img{filter:none;}
@media (prefers-reduced-motion:reduce){
  .pdp-mau-chip, .pdp-mau-o::after{transition:none;}
  .pdp-mau-o:hover .pdp-mau-chip{transform:none;}
}

/* ---------- 4 CTA trang xe: một hàng, cùng khung (RC11) ----------
   Class riêng, KHÔNG dùng lại `.hero-actions`/`.contact-row`: hai class đó đang phục vụ
   trang Bảng giá, Giới thiệu và Liên hệ. */
.pdp-actions{display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-top:24px;}
.pdp-act{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:7px;
  min-height:92px; padding:14px 10px; text-align:center;
  border-radius:var(--radius-btn); border:1.5px solid var(--border); background:#fff; color:var(--primary);
  transition:transform .2s ease-out, box-shadow .2s ease-out, border-color .2s ease-out, background .2s ease-out;}
.pdp-act .ic{display:flex; align-items:center; justify-content:center; width:34px; height:34px;
  border-radius:9px; background:var(--accent-soft); color:var(--accent); flex:none;}
.pdp-act .ic svg{width:18px; height:18px;}
.pdp-act .t1{font-size:14px; font-weight:800; line-height:1.2;}
.pdp-act .t2{font-size:11.5px; font-weight:600; color:var(--text-2); line-height:1.2;}
/* z-index khi rê chuột: ô phóng to phải nằm trên hai ô cạnh nó, không bị viền chúng cắt ngang */
.pdp-act:hover{transform:scale(1.05); box-shadow:0 12px 26px rgba(15,23,42,.12); border-color:var(--primary); z-index:2;}
/* Ô chính cùng hình dáng, khác màu: đồng bộ mà vẫn giữ được thứ bậc */
.pdp-act.is-primary{background:var(--primary); border-color:var(--primary); color:#fff;}
.pdp-act.is-primary .ic{background:rgba(255,255,255,.16); color:#fff;}
.pdp-act.is-primary .t2{color:#B9D2EE;}
.pdp-act.is-primary:hover{background:var(--primary-2); box-shadow:0 14px 30px rgba(0,44,95,.30);}
@media (prefers-reduced-motion:reduce){
  .pdp-act{transition:none;}
  .pdp-act:hover{transform:none;}
}
.product-title{font-size:clamp(30px,4.5vw,48px); font-weight:800; color:var(--primary); margin:0 0 16px; text-wrap:balance;}
.product-info .hero-price{display:flex; align-items:baseline; gap:10px; margin:18px 0 20px;}
.product-info .label{font-size:12.5px; text-transform:uppercase; letter-spacing:.06em; color:var(--text-2);}
.product-info .old-price{font-size:14px; color:var(--price-old); text-decoration:line-through;}
.product-info .value{font-size:28px; font-weight:800; color:var(--primary);}

/* breadcrumb */
.breadcrumb{display:flex; align-items:center; gap:8px; font-size:13px; color:var(--text-2); margin-bottom:18px; flex-wrap:wrap;}
.breadcrumb a{color:var(--text-2); transition:color .18s ease-out;}
.breadcrumb a:hover{color:var(--accent);}
.breadcrumb span{color:#c9d0da;}
.breadcrumb .current{color:var(--primary); font-weight:700;}

/* hero meta row: tag + offer badges */
/* .hero-meta đã bỏ ở RC11 cùng dải nhãn của nó — không còn template nào dùng. */
.badge-orange{display:inline-flex; align-items:center; gap:8px; font-size:13px; font-weight:800; color:var(--orange); background:var(--orange-bg); padding:8px 16px; border-radius:9px;}
.badge-orange::before{content:""; width:7px; height:7px; border-radius:50%; background:var(--orange); flex-shrink:0;}
.badge-green{display:inline-flex; align-items:center; gap:8px; font-size:13px; font-weight:800; color:var(--green); background:var(--green-bg); padding:8px 16px; border-radius:9px;}
.badge-green::before{content:""; width:7px; height:7px; border-radius:50%; background:var(--green); flex-shrink:0;}

/* hero: ảnh lớn hơn + giá nổi bật hơn, phạm vi riêng trang chi tiết xe */
#pdp-hero .product-gallery-main{min-height:420px;}
#pdp-hero .hero-price{margin:20px 0 24px;}
#pdp-hero .hero-price .value{font-size:38px;}
#pdp-hero .hero-price .old-price{font-size:16px;}
#pdp-hero .hero-price .label{font-size:13px; font-weight:700; letter-spacing:.06em;}

/* ---------- khối giá trang chi tiết xe ----------
   Điểm neo của hero: giá ưu đãi + số tiền tiết kiệm. Đây là chỗ duy nhất trong hero
   được dùng màu cam, mọi thứ còn lại giữ tông xanh của Design System. */
.price-card{background:#fff; border:1px solid var(--border); border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:22px 24px; margin:0 0 22px;}
.price-card-head{display:flex; align-items:baseline; gap:9px; flex-wrap:wrap; margin-bottom:3px; min-height:18px;}
.price-card-head .label{font-size:11.5px; font-weight:700; text-transform:uppercase; letter-spacing:.07em; color:var(--text-2);}
.price-card-head .strike{font-size:15px; color:var(--price-old); text-decoration:line-through;}
.price-card-main{display:flex; align-items:center; gap:14px; flex-wrap:wrap;}
.price-card-main .value{font-size:40px; font-weight:800; color:var(--primary); letter-spacing:-.02em; line-height:1.1;}
.save-pill{display:inline-flex; align-items:center; gap:6px; background:var(--orange-bg); color:#C2410C; font-size:13.5px; font-weight:800; padding:7px 13px; border-radius:99px; white-space:nowrap;}
.save-pill svg{width:14px; height:14px; flex-shrink:0;}
.price-card-foot{display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap; margin-top:15px; padding-top:14px; border-top:1px solid #F1F3F5;}
.price-card-foot .facts{font-size:13px; color:var(--text-2);}
.price-card-foot .facts b{color:var(--text); font-weight:700;}
.price-card-foot a{font-size:13px; font-weight:700; color:var(--accent);}
.price-card-foot a:hover{text-decoration:underline;}

/* thanh lợi ích ngay dưới Hero — reuse .hh trong 1 card nổi (giống filter-card) */
.benefit-bar{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:28px 40px; display:flex; justify-content:space-between; gap:24px; flex-wrap:wrap; margin-top:-40px; position:relative; z-index:5;}
.benefit-bar .hh{flex:1; min-width:180px;}

/* hàng liên hệ nhanh (hotline + zalo) dưới CTA hero */
.contact-row{display:flex; align-items:center; gap:24px; margin-top:24px; flex-wrap:wrap;}
.contact-row .item{display:flex; align-items:center; gap:10px;}
.contact-row .ic{width:38px; height:38px; border-radius:10px; background:var(--accent-soft); color:var(--accent); display:flex; align-items:center; justify-content:center; flex-shrink:0;}
.contact-row .ic svg{width:18px; height:18px;}
.contact-row .t1{font-size:11.5px; color:var(--text-2);}
.contact-row .t2{font-size:14.5px; font-weight:800; color:var(--text);}

/* ---------- chi phí sở hữu — reuse gradient/radius/shadow của promo-banner ----------
   27/08/2026 — GỘP KHỐI ƯU ĐÃI VÀO ĐÂY.
   🔴 Thẻ nay `padding:0` và ba phần con tự mang lề của mình. Lý do: dải ưu đãi và lưới
      chi phí phải chạm hai mép thẻ. Cách cũ (thẻ có padding 56px, dải dùng lề âm để thò
      ra) đòi lề âm phải khớp padding ở TỪNG khổ màn — lệch một khổ là dải thụt vào hoặc
      tràn ra, mà số đo chiều rộng vẫn báo đạt. Cho padding xuống phần con thì không có
      cặp số nào phải khớp nhau nữa. */
.cost-card{background:linear-gradient(125deg,#0b4380 0%, var(--primary) 45%, #00142f 100%); border-radius:var(--radius-card); box-shadow:var(--shadow-card); color:#fff; padding:0; overflow:hidden;}
.cost-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:1px; background:rgba(255,255,255,.12);}
.cost-grid.cost-grid-3{grid-template-columns:repeat(3,1fr);}
.cost-item{background:#0a2e58; padding:26px 22px;}
.cost-item .k{font-size:12px; color:#9fc1e8; text-transform:uppercase; letter-spacing:.04em; margin-bottom:10px;}
.cost-item .v{font-size:22px; font-weight:800; color:#fff;}
.cost-item .v.old{font-size:14px; font-weight:600; color:rgba(255,255,255,.45); text-decoration:line-through; margin-bottom:2px;}
.cost-item .v.accent{color:#7fd9c4;}
.cost-item .note{font-size:11px; color:rgba(255,255,255,.45); margin-top:6px;}
/* 🔴 CHÚ THÍCH TRONG PHP TỪ GÓI 6 GHI "luật CSS ẩn dòng này từ 641px lên" — LUẬT ĐÓ CHƯA
   BAO GIỜ TỒN TẠI. Kết quả: ở máy tính khách đọc giá niêm yết BA LẦN (ô riêng gạch ngang,
   dòng này, và bảng phiên bản ngay dưới). Ở điện thoại thì đúng, vì ô riêng bị ẩn.
   Nay khai thật cái luật mà chú thích đã hứa. Bắt được bằng ẢNH CHỤP, không phép đo nào
   hỏi "con số này có xuất hiện mấy lần". */
.cost-item .v-old-mo{display:none;}
.cost-card-foot{display:flex; align-items:center; justify-content:space-between; gap:20px; flex-wrap:wrap; padding:26px 30px;}
.cost-card-foot p{font-size:13px; color:rgba(255,255,255,.55); margin:0; max-width:44ch;}
.cost-card .btn-primary{background:#fff; color:var(--primary); box-shadow:0 10px 26px rgba(0,0,0,.28);}
.cost-card .btn-primary:hover{background:#eaf1fe; box-shadow:0 14px 32px rgba(0,0,0,.34);}

/* ---------- dải chip CHỌN PHIÊN BẢN trong thẻ giá (27/08/2026) ----------
   Thay khối `#versions` cũ (3–6 thẻ lớn). Tiền tố `pbx-` đã dò trước, không trùng.

   🔴 VÌ SAO CUỘN NGANG chứ không xếp lưới: đo chiều cao vùng chọn ở màn điện thoại
      trên bốn xe 3/4/5/6 phiên bản —
        hai cột      98 · 81 · 142 · 125px
        gộp dòng máy 57 · 101 · 182 · 168px   (xe càng nhiều bản càng CAO)
        cuộn ngang   65 · 65 · 65 · 65px      ← chọn cái này
        ô chọn xổ    49 · 49 · 49 · 49px      (gọn hơn nhưng phải bấm hai lần mới thấy)
      Chỉ cuộn ngang giữ nguyên chiều cao bất kể xe có mấy bản. */
.pbx{margin-top:18px; padding-top:16px; border-top:1px solid var(--border);}
.pbx-cap{font-size:11px; font-weight:800; letter-spacing:.1em; text-transform:uppercase;
  color:var(--text-2); margin:0 0 9px;}
.pbx-wrap{position:relative;}
.pbx-dai{display:flex; gap:7px; overflow-x:auto; scroll-snap-type:x proximity; padding-bottom:3px;
  scrollbar-width:thin; -webkit-overflow-scrolling:touch;}
.pbx-nut{flex:none; scroll-snap-align:start; font:inherit; font-size:13.5px; font-weight:700;
  line-height:1.25; cursor:pointer; padding:9px 14px; border-radius:11px;
  background:var(--bg); border:1.5px solid var(--border); color:var(--text);
  transition:border-color .15s ease-out, background .15s ease-out, color .15s ease-out;}
.pbx-nut:hover{border-color:var(--accent);}
.pbx-nut:focus-visible{outline:3px solid var(--accent); outline-offset:2px;}
.pbx-nut[aria-pressed="true"]{background:var(--primary); border-color:var(--primary); color:#fff;}
/* 🔴🔴 KHÔNG CẮT CỤT TÊN PHIÊN BẢN — đừng thêm `text-overflow:ellipsis` vào đây.
   Santa Fe có "2.5 4WD Calligraphy" và "2.5 Turbo 4WD Calligraphy"; cắt xong hai bản
   chênh nhau 50 triệu trông y hệt nhau. Ở dải cuộn ngang thì tên dài chỉ làm dải dài
   thêm, không làm vỡ gì cả. */
.pbx-nut{white-space:nowrap;}

/* 🔴🔴 BA CHỐT CHỐNG "KHÁCH KHÔNG BIẾT CÒN NÚT BÊN PHẢI" — ĐỪNG GỠ CÁI NÀO.
   Đây là điểm yếu duy nhất của cuộn ngang, và nó nguy hiểm vì bản đắt nhất nằm cuối dải.
     1. bóng mờ này — JS bật lớp `.con` khi thật sự còn nội dung chưa cuộn tới
     2. dòng đếm `.pbx-dem` ("Bản 1 trên 6")
     3. JS kéo nút đang chọn vào tầm nhìn sau mỗi lượt bấm
   Bóng mờ phải ĐỦ ĐẬM để thấy: bản đầu tôi để 34px và gradient tới 75%, nhìn ảnh chụp
   gần như không ra. */
.pbx-mo{position:absolute; top:0; bottom:3px; right:-1px; width:46px; pointer-events:none;
  opacity:0; transition:opacity .18s ease-out;
  background:linear-gradient(90deg, rgba(255,255,255,0), var(--bg) 62%);}
.pbx-wrap.con .pbx-mo{opacity:1;}
/* Bóng mờ bên TRÁI: khách vuốt sang phải rồi thì cũng cần biết còn nút phía sau lưng.
   Không có nó, ở giữa dải khách thấy hai đầu đều cụt như nhau nhưng chỉ một đầu có
   tín hiệu. Dùng chung một lớp `.pbx-mo` sẽ hỏng vì hai bên khác chiều gradient. */
.pbx-mo-t{position:absolute; top:0; bottom:3px; left:-1px; width:34px; pointer-events:none;
  opacity:0; transition:opacity .18s ease-out;
  background:linear-gradient(270deg, rgba(255,255,255,0), var(--bg) 62%);}
.pbx-wrap.con-t .pbx-mo-t{opacity:1;}
.pbx-dem{font-size:11.5px; color:var(--text-2); margin:8px 0 0;}
@media (prefers-reduced-motion:reduce){
  .pbx-mo, .pbx-nut{transition:none;}
  .pbx-dai{scroll-behavior:auto;}
}

/* Chương trình riêng của phiên bản, nằm dưới số tiền ưu đãi trong thẻ chi phí */
.cost-strip-ct{display:flex; flex-wrap:wrap; gap:8px; margin-top:9px;}
.cost-strip-ct span{display:inline-flex; align-items:center; gap:6px; font-size:12.5px;
  font-weight:600; color:#dceaf9; background:rgba(127,217,196,.14);
  border:1px solid rgba(127,217,196,.3); padding:5px 11px; border-radius:8px;}
.cost-strip-ct span::before{content:""; width:5px; height:5px; border-radius:50%;
  background:#7fd9c4; flex-shrink:0;}

/* `hidden` phải thắng mọi luật display của các lớp trên. Ô chi phí và dải ưu đãi đều
   được ẩn/hiện bằng thuộc tính này, mà `.cost-item`/`.cost-strip` có khai `display`
   ở vài khổ màn — thiếu dòng này là ô "đã ẩn" vẫn hiện ở đúng một khổ nào đó. */
#cost [hidden], .price-card [hidden]{display:none !important;}

/* ---------- dải ưu đãi trên đỉnh thẻ chi phí (27/08/2026) ----------
   Tiền tố `cost-strip-` đã dò trước, không trùng class nào đang có. */
.cost-strip{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:22px;
  padding:22px 30px; background:rgba(255,255,255,.07); border-bottom:1px solid rgba(255,255,255,.12);}
.cost-strip-l{display:flex; flex-direction:column; gap:4px; min-width:0;}
.cost-strip-lbl{font-size:11.5px; font-weight:800; letter-spacing:.11em; text-transform:uppercase; color:#9fc1e8;}

/* 🔴🔴 CON SỐ KHÔNG BAO GIỜ PHỤ THUỘC HIỆU ỨNG.
   `<b>` là chữ trắng đặc, nằm trên `z-index:2`. Quầng sáng nằm DƯỚI, lớp quét nằm TRÊN,
   cả hai đều `pointer-events:none` và đều bắt đầu từ `opacity:0`. Hiệu ứng không chạy
   thì mất đúng hai lớp trang trí, con số còn nguyên.
   Đừng bao giờ tô con số bằng `background-clip:text` + `color:transparent` — đó chính
   là kiểu đã để một khung chat đứng nguyên TRONG SUỐT khi hiệu ứng không chạy. */
.cost-strip-money{position:relative; display:inline-flex; align-items:baseline; width:fit-content;}
.cost-strip-money b{position:relative; z-index:2; font-size:44px; font-weight:800; line-height:1.05;
  color:#fff; letter-spacing:-.02em;}
.cost-strip-glow{position:absolute; inset:-14px -22px; z-index:0; opacity:0; border-radius:999px;
  pointer-events:none; background:radial-gradient(ellipse at center, rgba(255,193,94,.55) 0%, rgba(255,193,94,0) 70%);
  animation:hnt-uudai-tho 3.8s ease-in-out infinite;}
.cost-strip-sheen{position:absolute; inset:0; z-index:3; opacity:0; pointer-events:none;
  background:linear-gradient(100deg,transparent 38%,rgba(255,255,255,.75) 50%,transparent 62%);
  background-size:280% 100%; mix-blend-mode:overlay;
  animation:hnt-uudai-quet 4.6s ease-in-out infinite;}

@keyframes hnt-uudai-tho{0%,100%{opacity:.18} 50%{opacity:.5}}
@keyframes hnt-uudai-quet{
  0%{background-position:170% 0; opacity:0}
  12%{opacity:.9} 45%{opacity:.9}
  60%,100%{background-position:-70% 0; opacity:0}
}
/* Khách bật giảm chuyển động thì gỡ hẳn hai lớp trang trí — KHÔNG chỉ dừng animation.
   Dừng animation ở giữa chừng là để lại một vệt sáng đứng im vắt ngang con số. */
@media (prefers-reduced-motion:reduce){
  .cost-strip-glow{animation:none; opacity:.3;}
  .cost-strip-sheen{animation:none; opacity:0;}
}


/* ---------- A1 · bảng giá lăn bánh từng phiên bản (14/08/2026) ----------
   Đặt ngay dưới .cost-card trong #cost. Khác .cost-card ở chỗ khối kia là thẻ
   nền navy đậm chữ trắng, còn khối này nằm thẳng trên nền trắng của trang
   (#cost không khai background nên nhận --bg) nên dùng chữ tối. Đừng chép màu
   từ .cost-card sang: chữ trắng trên nền trắng là vô hình.
   Tiền tố lbp- chọn vì lb- đã bị máy tính trả góp dùng 47 chỗ trong CSS. */
.lbp-card{margin-top:28px; background:var(--bg); border:1px solid var(--border); border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:32px;}
.lbp-title{font-size:22px; font-weight:800; color:var(--text); margin:0 0 8px;}
.lbp-lede{font-size:14px; color:var(--text-2); margin:0 0 20px; max-width:70ch;}
/* Cuộn ngang chỉ là lưới an toàn cho tên phiên bản dài bất thường; ở 390px bảng
   4 cột đã vừa. Bóng gợi ý cuộn dùng lại mẹo background-attachment:local của
   vòng 22 — bóng tự tắt khi cuộn hết, không cần một dòng JS nào. */
.lbp-wrap{overflow-x:auto; -webkit-overflow-scrolling:touch;
  background:linear-gradient(to right, var(--bg) 30%, rgba(255,255,255,0)),
             linear-gradient(to right, rgba(255,255,255,0), var(--bg) 70%) 100% 0,
             radial-gradient(farthest-side at 0 50%, rgba(15,23,42,.10), transparent),
             radial-gradient(farthest-side at 100% 50%, rgba(15,23,42,.10), transparent) 100% 0;
  background-repeat:no-repeat; background-size:40px 100%, 40px 100%, 14px 100%, 14px 100%;
  background-attachment:local, local, scroll, scroll;}
.lbp-table{width:100%; border-collapse:collapse; font-size:14px;}
.lbp-table th, .lbp-table td{padding:12px 14px; text-align:right; border-bottom:1px solid var(--border); white-space:nowrap;}
.lbp-table thead th{font-size:11.5px; font-weight:800; letter-spacing:.04em; text-transform:uppercase;
  color:var(--text-2); background:var(--bg-2); border-bottom:1px solid var(--border);}
.lbp-table th:first-child, .lbp-table tbody th{text-align:left; font-weight:700; color:var(--text); white-space:normal;}
.lbp-uu-dai{display:block; margin-top:3px; font-size:11.5px; font-weight:700; color:var(--green); white-space:nowrap;}
.lbp-table tbody tr:last-child th, .lbp-table tbody tr:last-child td{border-bottom:0;}
.lbp-table td{color:var(--text-2);}
.lbp-tong{font-weight:800; color:var(--primary); font-size:15px;}
/* Dòng xe chưa ra mắt trong bảng giá. Ba ô số thành chữ, nên bỏ canh phải và bỏ
   white-space:nowrap của .lbp-table td, kẻo "Chưa có giá chính thức" đẩy bảng
   rộng ra và sinh thanh cuộn ngang trên điện thoại. */
.lbp-sap td{text-align:left; white-space:normal; font-style:normal;}
.lbp-nhan{display:inline-block; margin-left:8px; vertical-align:2px;
  font-size:10.5px; font-weight:800; letter-spacing:.05em; white-space:nowrap;
  color:var(--gold); box-shadow:inset 0 0 0 1px var(--gold);
  padding:2px 7px; border-radius:5px;}
/* Khối gập liệt kê 8 khoản phí đã BỎ theo yêu cầu khách 14/08 — xem chú thích ở
   single-product.php. CSS của nó (.lbp-fold .lbp-phi .lbp-vd-note) đã dọn cùng lúc
   để không để lại luật chết; đừng thêm lại nếu không có markup dùng tới. */
.lbp-chan{font-size:12.5px; color:var(--text-2); margin:16px 0 0; line-height:1.6;}

@media (max-width:640px){
  /* Cùng đánh đổi mật độ đã chốt ở vòng 16–18: ô bảng thông số được giữ dưới 16px
     có chủ ý, đổi lại bảng không phình thêm mấy trăm pixel trên điện thoại. */
  .lbp-card{padding:20px 16px; margin-top:20px;}
  .lbp-title{font-size:18px;}
  .lbp-lede{font-size:13.5px; margin-bottom:16px;}
  /* 🔴 XẾP CHỒNG, KHÔNG CUỘN NGANG. Bảng 4 cột ở 390px cắt mất đúng cột "Giá lăn
     bánh" — con số khách cần nhất — và phải vuốt ngang mới thấy. Tràn cấp trang
     vẫn 0px nên máy đo báo đạt; chỉ nhìn ảnh chụp mới phát hiện. Mỗi phiên bản
     thành một thẻ, nhãn lấy từ data-lbl nên không phải in nhãn hai lần vào HTML. */
  .lbp-wrap{overflow-x:visible; background:none;}
  .lbp-table, .lbp-table tbody, .lbp-table tr, .lbp-table th, .lbp-table td{display:block; width:auto;}
  .lbp-table thead{display:none;}
  .lbp-table tbody tr{border:1px solid var(--border); border-radius:14px; padding:12px 14px; margin-bottom:10px;}
  .lbp-table tbody tr:last-child{margin-bottom:0;}
  .lbp-table tbody th{font-size:14.5px; padding:0 0 8px; border-bottom:1px solid var(--border); margin-bottom:8px;}
  .lbp-table tbody td{display:flex; align-items:baseline; justify-content:space-between; gap:12px;
    padding:5px 0; border-bottom:0; font-size:13px; white-space:nowrap;}
  .lbp-table tbody td::before{content:attr(data-lbl); font-weight:600; color:var(--text-2); white-space:normal;}
  .lbp-table tbody td.lbp-tong{margin-top:6px; padding-top:9px; border-top:1px solid var(--border); font-size:16px;}
  .lbp-table tbody td.lbp-tong::before{color:var(--text); font-weight:800; font-size:13px;}
}

/* ---------- phiên bản — card thay cho bảng ---------- */
.version-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:20px;}
.version-card{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:32px 26px; display:flex; flex-direction:column; transition:box-shadow .3s ease-out, transform .3s ease-out; cursor:pointer;}
.version-card:hover{box-shadow:var(--shadow-card-hover); transform:translateY(-4px);}
.version-card .vbadge{align-self:flex-start; margin-bottom:14px; font-size:12px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--gold); border:1px solid var(--gold); padding:3px 9px; border-radius:6px;}
.version-card h3{font-size:17px; font-weight:800; margin:0 0 8px; color:var(--text);}
.version-card .vprice{font-size:22px; font-weight:800; color:var(--primary); margin:0 0 14px;}
.version-card .vpromo{align-self:flex-start; font-size:11.5px; font-weight:700; color:var(--accent); background:var(--accent-soft); padding:5px 10px; border-radius:6px; margin-bottom:14px;}
.version-card ul{list-style:none; margin:0 0 26px; padding:0; display:flex; flex-direction:column; gap:10px; flex:1;}
.version-card li{display:flex; align-items:flex-start; gap:9px; font-size:13px; color:var(--text-2); line-height:1.5;}
.version-card li svg{width:16px; height:16px; color:var(--accent); flex-shrink:0; margin-top:1px;}
.version-card.is-active{background:linear-gradient(135deg,#0a3d73 0%, var(--primary) 100%);}
.version-card.is-active h3, .version-card.is-active .vprice{color:#fff;}
.version-card.is-active .vpromo{background:rgba(255,255,255,.15); color:#fff;}
.version-card.is-active li{color:rgba(255,255,255,.75);}
.version-card.is-active li svg{color:#7fd9c4;}
.version-card.is-active .vbadge{color:#ffe9a8; border-color:#ffe9a8;}
.version-card.is-active .btn-outline{background:#fff; color:var(--primary); border-color:#fff;}
/* Dấu tích xanh lá trên nút "Đã chọn". Nằm sẵn trong DOM ở MỌI thẻ, chỉ hiện ở thẻ
   đang chọn — xem chú thích trong single-product.php để biết vì sao không nhét bằng JS.
   Màu #16A34A trên nền trắng đo được 3,30:1, đạt mức 3:1 mà WCAG 1.4.11 đòi cho hình
   không phải chữ. Nút giữ min-width để lúc đổi chọn, cột chữ bên cạnh không bị xô. */
.version-card .v-tick{display:none; color:#16A34A;}
.version-card.is-active .v-tick{display:block;}
.version-card > .btn-outline{min-width:168px;}
.version-card.is-active{transform:scale(1.045); z-index:2; box-shadow:var(--shadow-card-hover), 0 0 0 3px rgba(0,102,204,.18);}
.version-card.is-active:hover{transform:scale(1.045) translateY(-4px);}

/* ---------- thư viện hình ảnh — ảnh sản phẩm thật, layout thoáng kiểu Apple ---------- */
.gallery-grid{display:grid; grid-template-columns:repeat(4,1fr); grid-auto-rows:210px; gap:28px;}
.gallery-tile{position:relative; border-radius:var(--radius-card); overflow:hidden; box-shadow:var(--shadow-card); background:radial-gradient(ellipse at 50% 35%,#eef3f9 0%,#e3ebf4 55%,#d7e2ee 100%); transition:box-shadow .3s ease-out, transform .3s ease-out;}
.gallery-tile:hover{box-shadow:var(--shadow-card-hover); transform:translateY(-4px);}
.gallery-tile.big{grid-column:span 2; grid-row:span 2;}
.gallery-tile img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;}
.gallery-tile .cap{position:absolute; left:16px; bottom:14px; font-size:12.5px; font-weight:700; color:#fff; background:rgba(0,20,45,.55); padding:6px 12px; border-radius:8px; backdrop-filter:blur(2px); z-index:1;}

/* ---------- accordion "xem thông số đầy đủ" ---------- */
.spec-toggle{margin-top:28px; text-align:center;}
.spec-toggle summary{list-style:none; cursor:pointer; display:inline-flex; align-items:center; gap:8px; font-size:13.5px; font-weight:700; color:var(--accent); padding:12px 22px; border:1px solid var(--border); border-radius:var(--radius-btn); transition:border-color .18s ease-out;}
.spec-toggle summary::-webkit-details-marker{display:none;}
/* Vòng 16 — bấm bằng bàn phím tới đây trước đó không thấy gì: đo 11/08 ra đúng 1 nút
   `<summary>` trên trang xe không có viền focus, và đây là nó. */
.spec-toggle summary:focus-visible{outline:3px solid var(--accent); outline-offset:3px;}
.spec-toggle summary svg{width:14px; height:14px; transition:transform .25s ease-out;}
.spec-toggle[open] summary svg{transform:rotate(180deg);}
.spec-toggle:hover summary{border-color:var(--accent);}
.spec-toggle .spec-group{margin-top:28px; text-align:left;}
.spec-toggle .spec-group-title{font-size:13px; font-weight:800; letter-spacing:.04em; text-transform:uppercase; color:var(--primary); margin:0 0 12px;}
.spec-toggle .spec-grid{margin-top:0; text-align:left;}

/* ---------- FAQ ---------- */
.faq-list{display:flex; flex-direction:column; gap:14px; max-width:820px; margin:0 auto;}
.faq-item{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); overflow:hidden;}
.faq-item summary{list-style:none; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:16px; padding:22px 26px; font-size:15px; font-weight:700; color:var(--text); transition:color .18s ease-out;}
.faq-item summary::-webkit-details-marker{display:none;}
.faq-item summary:hover{color:var(--accent);}
.faq-item summary .chev{width:20px; height:20px; color:var(--accent); flex-shrink:0; transition:transform .25s ease-out;}
.faq-item[open] summary .chev{transform:rotate(180deg);}
.faq-item .faq-a{padding:0 26px 24px; font-size:14px; color:var(--text-2); line-height:1.7; max-width:70ch;}

/* CTA cuối trang chi tiết xe: nhiều nút */
.final-cta-actions{display:flex; gap:12px; flex-wrap:wrap; margin-top:18px;}

/* sticky CTA nhỏ khi cuộn qua khỏi Hero (desktop) */
.mini-sticky{position:fixed; left:0; right:0; bottom:0; z-index:200; background:#fff; border-top:1px solid var(--border); box-shadow:0 -8px 24px rgba(15,23,42,.08); transform:translateY(100%); transition:transform .3s ease-out; display:none;}
.mini-sticky.is-visible{transform:translateY(0);}
.mini-sticky .wrap{display:flex; align-items:center; justify-content:space-between; gap:24px; height:76px;}
.mini-sticky .info{display:flex; align-items:center; gap:16px;}
.mini-sticky .name{font-size:14.5px; font-weight:800; color:var(--text);}
.mini-sticky .price{font-size:16px; font-weight:800; color:var(--primary);}
.mini-sticky .actions{display:flex; gap:10px;}
@media (min-width:901px){.mini-sticky{display:block;}}

/* trang chi tiết xe: dùng lại đúng sticky-bar toàn site, chỉ giữ 3 mục đầu (Gọi ngay/Zalo/Nhận báo giá) */
body.single-product .sticky-bar .wrap{grid-template-columns:repeat(3,1fr);}
body.single-product .sticky-item:nth-child(4), body.single-product .sticky-item:nth-child(5){display:none;}
/* 🔴 Trên điện thoại trang xe có THÊM nút Chat AI nên thành 4 mục, phải mở thêm một
   cột. Luật 3 cột ở trên đặc hiệu cao hơn luật mobile chung (`body.single-product`
   cộng thêm một lớp), nên nó THẮNG bất kể thứ tự dòng — không khai lại ở đây thì
   trang xe có 4 nút nhét vào 3 cột và nút cuối tràn ra ngoài. */
@media (max-width:900px){
  body.single-product .sticky-bar .wrap{grid-template-columns:repeat(4,1fr);}
}

/* ---------- spec sheet on single product ---------- */
.spec-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:1px; background:var(--border); border:1px solid var(--border); border-radius:12px; overflow:hidden;}
.spec-item{display:flex; justify-content:space-between; align-items:center; gap:16px; background:#fff; padding:14px 20px;}
.spec-label{color:var(--text-2); font-size:13.5px;}
.spec-value{color:var(--text); font-weight:700; font-size:13.5px; text-align:right;}
@media (max-width:700px){.spec-grid{grid-template-columns:1fr;}}

/* ---------- about / story-ish content reuse ---------- */
.story{background:var(--bg-2); border-radius:var(--radius-card); margin:0 40px; max-width:calc(var(--container) - 80px); margin-inline:auto;}
.story .eyebrow{color:var(--accent);}
.story h2{color:var(--primary); font-size:clamp(26px,3vw,36px); font-weight:800; margin:0 0 18px;}
.story p{color:var(--text-2); font-size:15.5px; line-height:1.75;}
.stat-row{display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--border); border:1px solid var(--border); border-radius:var(--radius-card); overflow:hidden; margin-top:32px;}
.stat{background:#fff; padding:22px 18px;}
.stat .n{font-size:30px; font-weight:800; color:var(--primary);}
.stat .l{font-size:12px; color:var(--text-2); text-transform:uppercase; letter-spacing:.04em; margin-top:6px;}

/* ---------- generic article content (Giới thiệu, etc) ---------- */
.article-content{max-width:820px; font-size:16px; line-height:1.8; color:var(--text);}
.article-content h2,.article-content h3{font-weight:800; color:var(--primary); margin-top:1.4em;}
.article-content a{color:var(--accent); text-decoration:underline;}
.article-content img{border-radius:12px; margin:24px 0;}

/* ---------- mobile nav drawer ---------- */
.nav-scrim{display:none; position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:98;}
.nav-scrim.is-open{display:block;}

@media (max-width:1100px){
  .wrap{padding:0 24px;}
  .hero-inner{grid-template-columns:1fr; min-height:0; padding:56px 0;}
  .hero-car{order:-1; min-height:340px;}
  .filter-grid{grid-template-columns:repeat(2,1fr);}
  .filter-search-btn{grid-column:1/-1;}
  .tools-grid, .why-grid, .news-grid{grid-template-columns:repeat(2,1fr);}
  .why-stats{grid-template-columns:repeat(2,1fr);}
  .promo-banner{grid-template-columns:1fr; min-height:0;}
  .promo-banner-car{display:none;}
  .footer-cols{grid-template-columns:1fr 1fr;}
  .product-hero-grid{grid-template-columns:1fr;}

  .cost-grid{grid-template-columns:repeat(2,1fr);}
  .version-grid{grid-template-columns:repeat(2,1fr);}
  .version-card.is-active{transform:none;}
  .version-card.is-active:hover{transform:translateY(-4px);}
  .gallery-grid{grid-template-columns:repeat(2,1fr); grid-auto-rows:170px; gap:20px;}
  .gallery-tile.big{grid-column:span 2; grid-row:span 1;}
  .benefit-bar{margin-top:-28px; padding:24px 28px;}
}

@media (max-width:900px){
  nav.main-menu{display:none; position:fixed; top:0; right:0; height:100vh; width:78vw; max-width:340px; background:#fff; transform:translateX(100%); transition:transform .3s ease; padding:90px 28px 32px; z-index:99; box-shadow:-10px 0 30px rgba(0,0,0,.1); overflow-y:auto;}
  nav.main-menu.is-open{display:block; transform:translateX(0);}
  nav.main-menu ul{flex-direction:column; align-items:flex-start; gap:0;}
  nav.main-menu li{width:100%; border-bottom:1px solid var(--border);}
  nav.main-menu a{padding:16px 0;}
  .header-call-btn{display:none;}
  .hamburger{display:flex;}


  section{padding:56px 0;}
  .cta-band{margin:0 16px; padding:28px 24px;}
  .story{margin:0 16px;}

  .hero-arrow, .hero-dots{display:none;}
  .hero-text h1{font-size:32px; line-height:1.25;}
  .hero-inner{min-height:0; padding:40px 0;}
  .hero-car{min-height:240px;}
  .hero-cta{flex-direction:column;}
  .hero-cta .btn{width:100%;}

  .filter-card{margin-top:-30px; padding:18px;}
  .filter-grid{grid-template-columns:1fr 1fr;}

  .tools-grid, .why-grid, .news-grid{grid-template-columns:1fr;}
  .why-stats{grid-template-columns:1fr 1fr;}
  .promo-banner-text{padding:32px 28px;}
  .footer-cols{grid-template-columns:1fr;}

  /* ---------- Thanh đáy trên điện thoại — anh Vũ duyệt 19/08 theo ảnh mẫu ----------
     Bốn nút: Gọi ngay · Chat Zalo · Nhận báo giá · Chat AI. Icon trên, chữ dưới, bọc
     trong một khung bo tròn có viền như ảnh.
     🔴 Bốn nút đó là con thứ 1, 2, 3 và 6 — KHÔNG liền nhau. Con 4 (Messenger) và
        con 5 (Chỉ đường) bị ẩn. Thêm hay bớt nút trong footer.php là phải rà lại
        toàn bộ mấy luật nth-child ở đây, không thì ẩn nhầm nút. */
  /* 🔴 ĐỆM ĐẶT Ở .sticky-bar, KHÔNG PHẢI margin CỦA .wrap. Dùng margin thì nó thoát
     hết ra ngoài thanh (margin collapsing): đo được chừa trên 0px, chừa dưới 0px,
     khung viền dính sát mép và mất hẳn dải navy bao quanh. Mọi phép đo khác vẫn
     báo đạt, chỉ nhìn ảnh mới thấy. */
  /* 🔴🔴 PHẢI CHỪA MÉP DƯỚI, VÀ KHÔNG ĐƯỢC TRÔNG CHỜ VÀO env().
     `env(safe-area-inset-bottom)` chỉ có giá trị khi meta viewport khai
     `viewport-fit=cover`. Site này KHÔNG khai (header.php dòng 6), nên env() luôn
     trả 0 và luật cũ `calc(9px + env(...))` thực tế chỉ còn 9px.
     Hậu quả đo được trên iPhone (video khách quay 19/08): khi Safari thu thanh
     điều hướng, thanh nút nằm sát đáy màn hình tuyệt đối. Vùng đó iOS dành cho cử
     chỉ gọi lại thanh Safari, nên nó NUỐT CÚ CHẠM ĐẦU TIÊN — khách phải bấm hai
     lần mới vào được nút.
     → max() giữ sàn 24px dù env() có chạy hay không. Không sửa bằng cách thêm
       viewport-fit=cover: cái đó cho trang tràn ra vùng tai thỏ, phải rà lại lề
       của cả 12 trang khi xoay ngang, mà header.php lại là file deploy.js từ chối. */
  .sticky-bar{padding:7px 10px; padding-bottom:max(22px, calc(7px + env(safe-area-inset-bottom, 0px)));}

  /* ---------- LẤY LẠI CHỖ CHO NỘI DUNG (chốt 19/08 vòng 3) ----------
     Đo trên iPhone 13 (viewport 664px): thanh trên 75px + thanh dưới 93px = 168px,
     tức 25,3% màn hình mất trước khi khách đọc được chữ nào. Anh Vũ chốt làm cả
     hai việc: thu gọn, VÀ cho hai thanh tự trượt đi khi khách cuộn xuống đọc.

     🔴 Tên đại lý CHỈ ẨN BẰNG MẮT, vẫn nằm trong mã nguồn cho Google đọc. Dùng
        display:none là mất luôn khỏi cây accessibility lẫn khỏi nội dung trang. */
  .hd-brand .dealer-name{position:absolute; width:1px; height:1px; padding:0; margin:-1px;
    overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;}

  /* ---------- tự trượt đi khi cuộn xuống ----------
     🔴 KHÔNG dùng display:none — mất hẳn thì lúc hiện lại bị giật và trình đọc màn
        hình mất phần tử. Trượt bằng transform, phần tử vẫn còn nguyên.
     🔴 Thanh dưới trượt xuống phải cộng cả phần chừa mép, không thì còn ló một dải. */
  .site-header, .sticky-bar{transition:transform .22s ease-out;}
  body.hnt-an-thanh .site-header{transform:translateY(-100%);}
  body.hnt-an-thanh .sticky-bar{transform:translateY(110%);}
  /* 🔴 Chat đang mở thì TUYỆT ĐỐI không ẩn thanh dưới: lúc đó nút thứ tư chính là
     nút "Đóng", ẩn đi là nhốt khách trong khung chat. */
  body.hnt-chat-dang-mo .sticky-bar{transform:none;}
  @media (prefers-reduced-motion:reduce){
    .site-header, .sticky-bar{transition:none;}
  }
  .sticky-bar .wrap{grid-template-columns:repeat(4,1fr); height:auto; margin:0; max-width:none;
    border:1px solid rgba(255,255,255,.34); border-radius:30px; overflow:hidden;}
  /* Giấu nhãn hai dòng nhưng vẫn để trình đọc màn hình đọc được (không dùng display:none),
     rồi cho nhãn một dòng lên thay. */
  .sticky-item .txt{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;}
  /* ⚠️ Số đo thu gọn (19/08 vòng 3) GỘP THẲNG VÀO LUẬT NÀY, không viết một luật
     `.sticky-item{...}` mới ở phía trên: cùng đặc hiệu thì luật ĐỨNG SAU thắng,
     nên luật mới đặt trước luật này sẽ bị chính nó đè và không đổi được gì.
     Đã cắn đúng một lần ở vòng đo trước — thanh vẫn 60px như cũ. */
  .sticky-item{flex-direction:column; gap:3px; padding:6px 2px; border-right:1px solid rgba(255,255,255,.22);}
  .sticky-item svg{width:20px; height:20px;}
  .sticky-item .t-ngan{display:block; font-size:11.5px; line-height:1.2;}
  .sticky-item:nth-child(4), .sticky-item:nth-child(5){display:none;} /* Messenger · Chỉ đường */
  /* Điểm nhấn dời sang Chat AI. Nút "Nhận báo giá" bỏ nền xanh, nếu để cả hai cùng
     tô thì thanh có hai chỗ sáng và không chỗ nào còn là điểm nhấn. */
  .sticky-item.active{background:none;}
  .sticky-chat-ai{display:flex; align-items:center; justify-content:center; background:#1F6FEB; border-right:none;}
  /* Hai bộ mặt của nút. Lúc chat đóng chỉ có icon robot + "Chat AI"; lúc mở đổi
     sang dấu × + "Đóng". Dùng .t-ngan trong bộ chọn để chắc chắn thắng luật
     `.sticky-item .t-ngan{display:block}` ở trên, không phải trông vào thứ tự dòng. */
  .sticky-chat-ai .cw-i-dong, .sticky-chat-ai .t-ngan.cw-chu-dong{display:none;}

  /* 🔴 NÂNG THANH LÊN TRÊN NỀN MỜ khi chat đang mở. Nền mờ là ::before của
     .hnt-chat-root (z-index 9000) còn thanh chỉ 150, nên trước đây cú bấm vào nút
     Chat AI rơi vào nền mờ chứ không vào nút. Chat đóng lại thì thanh trả về 150,
     không việc gì phải nằm trên mọi thứ suốt ngày. */
  body.hnt-chat-dang-mo .sticky-bar{z-index:9001;}
  body.hnt-chat-dang-mo .sticky-chat-ai{background:#0B3B78;}
  body.hnt-chat-dang-mo .sticky-chat-ai .cw-i-mo,
  body.hnt-chat-dang-mo .sticky-chat-ai .t-ngan.cw-chu-mo{display:none;}
  body.hnt-chat-dang-mo .sticky-chat-ai .cw-i-dong{display:block;}
  body.hnt-chat-dang-mo .sticky-chat-ai .t-ngan.cw-chu-dong{display:block;}

  /* ==========================================================================
     NÚT NỔI THAY THANH ĐÁY — anh Vũ chốt 20/08/2026, mẫu A nấc "Gọn"
     ==========================================================================
     Thanh cũ là dải ngang 390×80px, che 12,0% màn hình và chặn hẳn một dải lúc
     nào cũng có. Cụm mới: hai nút tròn trái 52×115 (che 2,3%) và tab phải 50×92
     (che 2,8%), không chặn dải nào.

     ⚠️ Mọi luật .sticky-* ở trên GIỮ NGUYÊN, không xoá: thanh cũ vẫn là thứ chạy
        trên máy tính. Ở đây chỉ ẩn nó đi cho khổ điện thoại.
     🔴 Đặt CUỐI khối @media, sau mọi luật .sticky-*, để khỏi phải cân đặc hiệu. */
  .sticky-bar{display:none;}
  .hnt-noi{display:block;}

  /* ---------- cụm bám mép phải, ba nút ----------
     ⚪ 20/08 vòng 2: anh Vũ bỏ hẳn hai nút tròn bên trái, gộp Zalo vào cụm này.
        Còn đúng một khối: Chat AI · Zalo · Báo giá.
     🔴 KHÔNG trông chờ vào env(safe-area-inset-bottom): nó chỉ có giá trị khi meta
        viewport khai `viewport-fit=cover`, mà site này không khai (header.php dòng
        6) nên env() luôn trả 0. Sàn cứng giữ cụm khỏi vùng iOS dành cho cử chỉ gọi
        lại thanh Safari — vùng đó NUỐT cú chạm đầu tiên. Đo được từ video khách
        quay 19/08. */
  /* ---------- 20/08/2026 tối: BA KHỐI TRÒN RỜI, KHÔNG NHÃN CHỮ ----------
     Anh Vũ chốt kiểu A: bỏ hẳn dải trắng liền, ba nút tách rời, không nút nào mang
     chữ. Cụm 52×176 (trước là 50×138) — cao thêm 38px, và rời khỏi mép màn hình
     12px nên ăn thêm chút bề ngang.

     🔴 KHÔNG NÚT NÀO CÒN CHỮ nên tên của chúng nằm HẾT ở `aria-label` trong
        footer.php và inc/chat-ai.php. Đừng gỡ mấy cái aria-label đó: gỡ là axe báo
        `link-name` / `button-name`, và trình đọc màn hình đọc ra ba nút trống.
     ⚪ Đánh đổi đã nói rõ với anh Vũ trước khi làm: ba nút cùng họ màu xanh và
        không có chữ, nên khách nhìn lướt khó tách con robot với tờ giấy. Anh Vũ
        xem ảnh rồi vẫn chốt kiểu này. Muốn gỡ sau thì đổi nút Báo giá sang xanh lá
        (một dải màu ở footer.php) hoặc bật lại nhãn chữ.
     🔴 52×52 là vùng chạm thật, trên sàn WCAG 44×44. Đừng thu nhỏ tiếp — không còn
        nhãn chữ để bù thì nút bé lại là khách bấm trượt sang nút bên. */
  /* 🔴 26/08 — HẠ TIẾP 44 → 32px. Anh Vũ xem trên máy thật rồi bảo vẫn còn cao.
     Lịch sử con số này: 80 → 56 (20/08) → 44 → 32 (26/08).

     ⚪ VÌ SAO NHÌN VẪN CAO DÙ SỐ ĐÃ NHỎ. Trên iPhone, `position:fixed` đo từ mép
        TRÊN thanh công cụ Safari chứ không phải mép dưới màn hình. Phần lớn
        khoảng trống anh Vũ nhìn thấy là thanh Safari, không phải lề của mình.
        Kể cả hạ về 0px thì nút cũng chỉ nhích thêm được đúng ngần này nữa.

     🔴🔴 ĐÁNH ĐỔI ĐÃ NÓI RÕ VÀ ANH VŨ CHỌN: ở 32px thì **12px dưới cùng của nút**
        nằm trong dải 44px mà Safari dùng cho cử chỉ "chạm để gọi thanh về", nên
        cú chạm rơi đúng dải đó bị nuốt. 40px phía trên vẫn bấm ăn bình thường.
        Đây là lỗi có thật, không phải suy đoán: anh Vũ quay video hôm 19/08.
     🔴 HẠ TIẾP THÌ PHẢI ĐO LẠI TRÊN MÁY THẬT. Mốc còn lại trong bản mẫu: 20px
        (nửa nút nằm trong dải) và 8px (gần như cả nút). Đừng tự hạ thêm.

     🔴 20/08 tối — HẠ CỤM XUỐNG GẦN THANH TRÌNH DUYỆT theo yêu cầu anh Vũ: 80 → 56px.
     ⚠️ ĐÂY LÀ MỘT ĐÁNH ĐỔI CÓ THẬT, ĐÃ BÁO ANH VŨ. Sàn 80px không phải chọn bừa:
        nó sinh ra từ video anh Vũ quay 19/08 — khi thanh Safari thu lại, dải đáy
        màn hình thành vùng "chạm để gọi thanh về" và NÓ NUỐT CÚ CHẠM ĐẦU TIÊN vào
        nút nằm trong đó. 56px vẫn nằm trên dải đó, nhưng biên an toàn hẹp hơn hẳn.
        Nếu anh Vũ báo lại là phải bấm hai lần mới ăn thì nâng số này lên, đừng đi
        tìm nguyên nhân ở chỗ khác.
     🔴 `env(safe-area-inset-bottom)` LUÔN TRẢ 0 ở site này vì thẻ viewport không
        khai `viewport-fit=cover` (header.php). Giữ lại chỉ để phòng khi khai thêm;
        thứ thật sự quyết định là con số 56px. */
  /* 🔴🔴 `flex-end` CHỨ KHÔNG PHẢI `center`. Đây là một lỗi ĐÃ ĐẨY LÊN THẬT ngày
     26/08 và anh Vũ bắt được ngay: "sao cái icon chat AI nhảy ra giữa vậy".
     Lý do: lớp trượt của nút Zalo lúc đóng dùng `visibility:hidden`, mà thứ đó
     VẪN CHIẾM CHỖ trong bố cục — rộng khoảng 124px. Cột căn giữa thì nút Chat AI
     (52px) bị căn giữa so với cái cụm 176px đó, tức lệch sang trái ~62px và
     trông như rơi ra giữa màn hình.
     ⚠️ Đừng chữa bằng cách cho lớp trượt `display:none`: mất luôn hiệu ứng trượt,
        vì phần tử không có bố cục thì không có gì để chạy từ đó ra. */
  .hnt-noi-phai{position:fixed; z-index:150; right:12px;
    display:flex; flex-direction:column; align-items:flex-end; gap:10px;
    bottom:max(32px, calc(20px + env(safe-area-inset-bottom, 0px)));}
  .hnt-noi-muc{-webkit-appearance:none; appearance:none; border:0; margin:0; padding:0; font:inherit;
    background:none; cursor:pointer; position:relative;
    width:52px; height:52px; border-radius:50%;
    display:block; line-height:0;
    filter:drop-shadow(0 5px 14px rgba(4,53,108,.30));}
  /* 🔴 Bóng đổ vẽ bằng `filter: drop-shadow` chứ KHÔNG dùng `box-shadow`. Hộp của
     nút là hình VUÔNG, còn thứ khách nhìn thấy là hình TRÒN — box-shadow đổ bóng
     theo hộp vuông nên bốn góc lòi ra bốn mẩu bóng thừa. */
  /* 🔴 11/09: ảnh thật đã tự vẽ sẵn quả cầu xanh "đang trực" trong chính nó, nên
     `.hnt-noi-cham` (chấm CSS riêng, dựng cho SVG cũ) BỎ HẲN — phần tử HTML tương
     ứng cũng đã gỡ, giữ rule chết ở đây chỉ tổ gây nhầm khi đọc lại sau này. */
  .hnt-noi-ico{width:52px; height:52px; display:block; object-fit:cover;}
  .hnt-noi-muc:focus-visible{outline:3px solid #1F6FEB; outline-offset:3px;}


  /* ══════════════ LỚP TRƯỢT CỦA NÚT ZALO — 26/08/2026 ══════════════ */
  .hnt-noi-cum{display:flex; align-items:center; justify-content:flex-end;}
  .hnt-noi-o{position:relative; display:block; line-height:0;}

  /* 🔴 `visibility` CHỨ KHÔNG PHẢI CHỈ `opacity`. Chỉ mờ đi thì hai nút vẫn nằm
     trong thứ tự Tab và trình đọc màn hình vẫn đọc ra, tức khách dùng bàn phím
     nhảy vào được một nút đang vô hình. `visibility:hidden` gỡ hẳn khỏi cả hai.
     ⚠️ Phải khai `visibility` trong `transition` nữa, không thì lúc đóng nó tắt
        ngay lập tức và hiệu ứng trượt vào không kịp chạy. */
  .hnt-noi-truot{display:flex; align-items:center; gap:10px; margin-right:10px;
    opacity:0; visibility:hidden; transform:translateX(16px);
    transition:opacity .22s ease, transform .3s cubic-bezier(.32,.72,.35,1), visibility .3s;}
  .hnt-noi-cum.hnt-mo .hnt-noi-truot{opacity:1; visibility:visible; transform:translateX(0);}

  /* Nhãn chữ chỉ hiện khi cụm đang mở, cho CẢ BA nút. Xem chú thích dài ở
     footer.php: nút Zalo mang hai công dụng nên nó cần nhãn hơn cả hai nút kia. */
  .hnt-noi-nhan{position:absolute; bottom:-18px; left:50%; transform:translateX(-50%);
    font-size:10.5px; font-weight:600; line-height:1.5; color:#fff; white-space:nowrap;
    background:rgba(12,25,44,.86); padding:1px 7px; border-radius:99px;
    opacity:0; visibility:hidden; transition:opacity .2s ease .06s, visibility .2s;
    pointer-events:none;}
  .hnt-noi-cum.hnt-mo .hnt-noi-nhan{opacity:1; visibility:visible;}

  /* 🔴🔴 11/09: nhãn nút AI KHÔNG theo luật "chỉ hiện khi mở cụm" ở trên —
     nút AI đứng ngoài .hnt-noi-cum nên luật đó không với tới nó, nhưng đây là
     CHỦ Ý: khác ba nút kia (ẩn nhãn cho gọn, chỉ lộ khi khách chạm vào Zalo),
     nút AI cần nhãn LUÔN NHÌN THẤY ĐƯỢC ngay từ đầu — anh Vũ đo được rất ít
     cuộc chat tới từ nút này vì nó đứng câm giữa các nút có chữ. Đặc hiệu bằng
     nhau với `.hnt-noi-nhan` gốc, đứng SAU trong file nên thắng mà không cần
     !important. */
  /* 🔴 11/09 (đợt 2): anh Vũ chụp màn hình bắt được — nhãn "Trợ lý ảo" kế thừa
     `bottom:-18px` của `.hnt-noi-nhan` gốc, đặt PHÍA DƯỚI nút. Ba nút kia (Báo
     giá/Gọi/Zalo) là item CUỐI CÙNG trong cột flex nên dưới chúng là đáy màn
     hình, trống. Nút AI lại là item ĐẦU TIÊN — ngay dưới nó là nút Zalo, nên
     nhãn đè thẳng lên chữ "Zalo". Đổi sang phía TRÊN nút, nơi không có gì. */
  .hnt-noi-nhan-ai{opacity:1; visibility:visible; bottom:auto; top:-18px;}

  /* 🔴 11/09: hiệu ứng động RIÊNG cho nhãn "Trợ lý ảo" — thay bong bóng chào đã
     tắt hẳn (xem inc/chat-ai.php). `translateX(-50%)` phải đi CÙNG trong mỗi
     khung hình, không thì animation ghi đè mất giá trị căn giữa của `.hnt-noi-nhan`
     gốc và nhãn lệch khỏi tâm nút. */
  @media (prefers-reduced-motion: no-preference){
    .hnt-noi-nhan-ai{ animation: hnt-noi-nhan-song 1.8s ease-in-out infinite; }
  }
  @keyframes hnt-noi-nhan-song{
    0%, 100% { transform: translateX(-50%) scale(1); }
    50%      { transform: translateX(-50%) scale(1.08); }
  }

  /* ══════════════ NÚT CHAT AI — hiệu ứng mức Mạnh (anh Vũ chốt 26/08) ══════════════
     🔴 CHỈ `transform` VÀ `opacity`. Đụng vào `width`/`height`/`display` là nút
        nhảy chỗ mỗi khung hình, và cú chạm của khách rơi vào chỗ nút VỪA RỜI ĐI.
     🔴 Vòng sáng là một phần tử ::after RIÊNG, không phải viền của chính nút.
        Cho nút tự phóng to thì vùng chạm 52px thay đổi liên tục.
     ⚠️ Tôn trọng `prefers-reduced-motion`: có người tắt hiệu ứng vì chóng mặt
        thật, và một nút nhấp nháy liên tục ở góc màn hình là đúng thứ họ tắt. */
  .hnt-noi-ai{isolation:isolate;}
  .hnt-noi-ai::after{content:''; position:absolute; inset:0; border-radius:50%;
    border:2.5px solid #2B86FF; opacity:0; pointer-events:none;}
  @media (prefers-reduced-motion: no-preference){
    .hnt-noi-ai::after{animation:hnt-noi-song 2s ease-out infinite;}
    .hnt-noi-ai{animation:hnt-noi-nhun 2s ease-in-out infinite;}
  }
  @keyframes hnt-noi-song{
    0%{transform:scale(1); opacity:.55}
    70%,100%{transform:scale(1.55); opacity:0}
  }
  /* 🔴 11/09: MẠNH HƠN bản cũ (chỉ translateY -4px) — anh Vũ đo được nút ít cuộc
     chat, xin "nhảy lên, lắc đầu, gật đầu qua lại mạnh hơn". Bounce rõ rệt trong
     nửa đầu chu kỳ rồi NGHỈ ở nửa sau (55%→100% đứng yên) thay vì lắc suốt —
     liên tục toàn bộ 2s dễ gây chóng mặt hơn là thu hút. */
  @keyframes hnt-noi-nhun{
    0%, 55%, 100% { transform: translateY(0) rotate(0deg); }
    8%  { transform: translateY(-3px)  rotate(-10deg); }
    16% { transform: translateY(-13px) rotate(9deg); }
    24% { transform: translateY(-4px)  rotate(-7deg); }
    32% { transform: translateY(-9px)  rotate(5deg); }
    40% { transform: translateY(-2px)  rotate(-3deg); }
    48% { transform: translateY(0)     rotate(0deg); }
  }
  /* Đang mở lớp trượt thì nút Chat AI đứng yên, để mắt khách dồn vào ba lựa chọn. */
  .hnt-noi-phai:has(.hnt-noi-cum.hnt-mo) .hnt-noi-ai,
  .hnt-noi-phai:has(.hnt-noi-cum.hnt-mo) .hnt-noi-ai::after{animation:none;}

  /* ---------- chat đang mở: giấu cả cụm ----------
     🔴🔴 BẢN MẪU 20/08 SAI CHỖ NÀY, phát hiện lúc thi công. Bản mẫu cho cụm phải
          thu thành một nút × tròn ở góc dưới phải. Nhưng khung chat mở ra cũng
          nằm sát đáy, và góc dưới phải của nó CHÍNH LÀ NÚT GỬI. Hai thứ chồng
          lên nhau: khách định bấm gửi thì trúng nút đóng.
          Đẩy khung chat lên cho tránh thì mất 84px chiều cao khung — đúng bằng
          thứ cả vòng này đang giành lại.
     → Giấu hẳn cụm khi chat mở. Khung chat có SẴN hai đường thoát: dấu × trên
       thanh tiêu đề của chính nó, và bấm ra nền mờ bên ngoài. Không nhốt ai cả.
     ⚠️ Khác với thanh cũ: hồi đó nút thứ tư của thanh là đường thoát nên CẤM ẩn.
        Nay không còn thanh, ràng buộc đó cũng hết. */
  body.hnt-chat-dang-mo .hnt-noi{display:none;}

  /* 🔴 Anh Vũ chốt 20/08: KHÔNG ẩn cụm nút khi khách cuộn. Thanh cũ phải ẩn vì nó
     chặn nguyên một dải ngang; cụm này nhỏ hơn bốn lần nên ẩn đi chỉ tổ làm khách
     đang đọc tới đoạn muốn gọi thì không thấy nút đâu. Thanh TRÊN vẫn tự ẩn.
     ⚠️ Viết hẳn ra thay vì im lặng dựa vào chuyện không có luật nào ẩn nó: người
        sau đọc main.js thấy hnt-an-thanh sẽ tưởng đây là thiếu sót. */
  body.hnt-an-thanh .hnt-noi-trai,
  body.hnt-an-thanh .hnt-noi-phai{transform:none;}
  .cost-grid, .cost-grid.cost-grid-3{grid-template-columns:1fr;}
  .cost-item .v{font-size:19px;}
  .version-grid{grid-template-columns:1fr;}
  .gallery-grid{grid-template-columns:1fr 1fr;}
  /* Thẻ chi phí nay padding:0 — lề đi xuống từng phần con (xem chú thích ở .cost-card).
     Sửa `.cost-card{padding}` ở đây là dải ưu đãi thụt vào khỏi mép thẻ. */
  .cost-strip{padding:20px 22px; gap:16px;}
  .cost-card-foot{flex-direction:column; align-items:flex-start; padding:22px 22px;}
  .cost-strip-money b{font-size:38px;}
  /* Đồng hồ xuống hàng riêng thì trải hết bề ngang, đừng để nó dính mép phải. */
  .cost-strip .promo-cd--toi{align-items:flex-start; width:100%;}
  .cost-strip .promo-cd--toi .promo-cd-boxes{width:100%;}
  .cost-strip .promo-cd--toi .promo-cd-box{min-width:0; flex:1 1 0;}
  .cost-strip .promo-cd--toi .promo-cd-bar{max-width:none;}
  .benefit-bar{flex-direction:column; margin-top:20px;}
  #pdp-hero .hero-price .value{font-size:28px;}
  /* Ở màn hẹp, giá và viên "Tiết kiệm" xuống 2 dòng cho dễ đọc thay vì bóp chữ. */
  .price-card{padding:16px;}
  .price-card-main{flex-direction:column; align-items:flex-start; gap:8px;}
  .price-card-main .value{font-size:28px;}
  .price-card-foot{margin-top:12px; padding-top:11px;}
  .price-card-foot .facts, .price-card-foot a{font-size:12.5px;}
  .hero-actions .btn-lg{flex:1 1 100%;}
  /* 4 ô CTA xuống 2×2: xếp 4 ô ngang trên màn 390px thì mỗi ô còn ~86px, số điện thoại
     và chữ "Đăng ký lái thử" đều bị bóp xuống 2–3 dòng. */
  .pdp-actions{grid-template-columns:repeat(2,1fr); gap:10px;}
  /* min-height:420px vốn để giữ khung ảnh cân ở desktop, nhưng trên mobile ảnh 4:3 chỉ cao
     ~268px nên nó tạo ra hơn 120px khoảng trắng chết, đẩy giá và nút CTA xuống dưới màn hình. */
  #pdp-hero .product-gallery-main{min-height:0; padding:14px;}
  /* Ảnh chụp thật trên mobile: không còn khung cao cố định để trải inset:0, nên trả về
     luồng bình thường và giữ tỉ lệ 4:3 cho khỏi sập chiều cao về 0. */
  #pdp-hero .product-gallery-main:not(.is-cutout){padding:0;}
  #pdp-hero .product-gallery-main:not(.is-cutout) .product-main-img{position:relative; inset:auto; aspect-ratio:4/3;}
}

/* ==========================================================================
   BẢNG GIÁ XE — bảng phiên bản theo từng dòng xe.
   Chỉ thêm mới, không sửa token hay component nào của Design System RC1.
   ========================================================================== */

.sr-only{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;}

/* --- hero: mở rộng .page-hero sẵn có --- */
.price-hero .updated{display:inline-flex; align-items:center; gap:8px; font-size:12.5px; font-weight:700; color:var(--green); background:var(--green-bg); padding:6px 14px; border-radius:8px; margin-top:16px;}
.price-hero .updated::before{content:""; width:6px; height:6px; border-radius:50%; background:var(--green);}
.price-hero .lede{font-size:15.5px; color:var(--text-2); margin:16px 0 0; max-width:60ch; line-height:1.7;}
/* ⚪ .price-hero-stats đã gỡ 20/08/2026 cùng với markup ở page-bang-gia-xe.php.
   Anh Vũ bỏ hẳn bốn ô số liệu: hai trong bốn con số nhắc lại thứ đã có sẵn trên
   cùng màn hình (câu .lede và bộ đếm .price-count ở thanh lọc). */
.price-hero-actions{display:flex; gap:12px; margin-top:30px; flex-wrap:wrap;}

/* --- thanh lọc dính dưới header --- */
.price-toolbar{position:sticky; top:var(--header-h); z-index:90; background:rgba(247,248,250,.88); backdrop-filter:blur(12px); border-bottom:1px solid var(--border); padding:14px 0;}
.price-toolbar-inner{display:flex; align-items:center; gap:14px; flex-wrap:wrap;}
.price-toolbar .tabs{margin-bottom:0;}
.price-toolbar .filter-select{background:#fff; height:42px; min-width:180px;}
.price-count{margin-left:auto; font-size:13px; color:var(--text-2); white-space:nowrap;}
.price-count b{color:var(--primary); font-weight:800;}

/* --- khối giá theo từng dòng xe --- */
.price-block{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); overflow:hidden; margin-bottom:28px; transition:box-shadow .3s ease-out;}
.price-block:hover{box-shadow:var(--shadow-card-hover);}
.price-block.is-hidden{display:none;}
.price-block-head{display:grid; grid-template-columns:196px 1fr auto; gap:30px; align-items:center; padding:26px 32px; background:linear-gradient(180deg,#f6fafd 0%,#fff 100%); border-bottom:1px solid var(--border);}
.price-block-img{aspect-ratio:4/3; border-radius:14px; overflow:hidden; position:relative; display:flex; align-items:center; justify-content:center; background:radial-gradient(ellipse at 50% 32%,#eef3f9 0%,#e3ebf4 55%,#d7e2ee 100%);}
.price-block-img::before{content:""; position:absolute; left:50%; bottom:15%; transform:translateX(-50%); width:62%; height:12%; background:radial-gradient(ellipse, rgba(0,44,95,.28) 0%, rgba(0,44,95,0) 72%);}
.price-block-img img{width:100%; height:100%; object-fit:contain; position:relative; z-index:1; filter:drop-shadow(0 10px 10px rgba(0,44,95,.12)); transition:transform .35s ease-out;}
.price-block:hover .price-block-img img{transform:scale(1.04);}
.price-block-noimg{position:relative; z-index:1; font-size:12.5px; font-weight:600; color:var(--text-2); text-align:center; padding:0 12px;}
.price-block-tags{display:flex; gap:8px; flex-wrap:wrap; margin-bottom:10px;}
.price-block-tags .tag{margin-bottom:0;}
.price-block-title h2{font-size:23px; font-weight:800; color:var(--primary); margin:0; letter-spacing:-.01em;}
.price-block-meta{font-size:13.5px; color:var(--text-2); margin:8px 0 0;}
.price-block-aside{display:flex; flex-direction:column; align-items:flex-end; gap:14px; text-align:right;}
.price-from .k{display:block; font-size:11.5px; text-transform:uppercase; letter-spacing:.06em; color:var(--text-2); margin-bottom:3px;}
.price-from .v{font-size:26px; font-weight:800; color:var(--primary); letter-spacing:-.01em;}
.price-block-aside .btn{height:44px; padding:0 20px; font-size:13.5px;}

/* --- bảng phiên bản --- */
.price-table-scroll{overflow-x:auto;}
.price-table{width:100%; border-collapse:collapse;}
.price-table th{font-size:11.5px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--text-2); text-align:left; padding:13px 32px; background:var(--bg-2); border-bottom:1px solid var(--border); white-space:nowrap;}
.price-table td{padding:15px 32px; border-bottom:1px solid var(--border); font-size:14.5px; vertical-align:middle;}
.price-table tbody tr{transition:background .18s ease-out;}
.price-table tbody tr:hover{background:var(--accent-soft);}
.price-table tbody tr:last-child td{border-bottom:none;}
.price-table .c-num{text-align:right;}
.price-table .c-cta{text-align:right; width:1%; white-space:nowrap;}
/* 🔴 VÒNG 16 — LUẬT MẶC ĐỊNH NÀY LÀ BẮT BUỘC, KHÔNG PHẢI DƯ.
   Mỗi ô giá xuất HAI dạng số: `.pt-day` ("360.000.000") và `.pt-gon` ("360 triệu").
   Bản đầu tôi chỉ khai đảo dạng trong khối `@media (max-width:900px)` và bỏ quên mặc
   định — desktop hiện CẢ HAI, ra "360.000.000360 triệu", và trang @1440 dài thêm 33px.
   Đo trên LocalWP mới lộ, vì mọi phép kiểm mobile đều báo đạt.
   → Mặc định (desktop + bản in) = số đầy đủ; khối ≤900px đảo lại thành dạng ngắn. */
.pt-gon{display:none;}
.pt-name{font-weight:700; color:var(--text);}
.pt-name-link{display:inline-block; text-decoration:none;}
.pt-name-link:hover .pt-name, .pt-name-link:focus-visible .pt-name{color:var(--primary); text-decoration:underline; text-underline-offset:3px;}
.pt-name-link:focus-visible{outline:3px solid var(--accent); outline-offset:2px; border-radius:3px;}
.pt-badges{display:flex; flex-wrap:wrap; gap:6px; margin-top:7px;}
/* 🔴 VÒNG 21 — KHÔNG dùng `var(--text-2)` ở đây. Đúng lớp lỗi RC9 đã gặp với
   `.tag.grey`: `--text-2` (#6B7280) đạt 4,83 trên nền TRẮNG nhưng chỉ **4,39** trên
   `--grey-bg` (#F3F4F6) — dưới mốc 4,5. axe bắt được ngày 11/08, chữ "Lót sàn 5D".
   Hạ token dùng chung là làm đậm oan hàng trăm chỗ đang đúng, nên khai riêng một chỗ.
   Dùng luôn `#686F7C` của `.tag.grey` cho hai loại chip xám cùng tông — 4,59 trên
   `--grey-bg`, đã có biên trên mốc.
   ⚠️ Đổi `--grey-bg` thì phải đo lại CẢ HAI chỗ này. */
.pt-perk{font-size:11px; font-weight:600; color:#686F7C; background:var(--grey-bg); padding:3px 9px; border-radius:6px;}
.pt-list{color:var(--text);}
.pt-off{color:var(--green); font-weight:700;}
.pt-final{font-weight:800; color:var(--primary); font-size:15.5px;}
.pt-none{color:var(--text-2); font-size:13.5px;}
.pt-cta{font-size:13px; font-weight:700; color:var(--accent); white-space:nowrap; transition:color .18s ease-out;}
.price-table tbody tr:hover .pt-cta{color:var(--primary); text-decoration:underline; text-underline-offset:3px;}

/* --- ghi chú minh bạch giá --- */
.price-note{background:#fff; border:1px solid var(--border); border-radius:var(--radius-card); padding:26px 32px; margin-top:8px;}
.price-note h3{font-size:13px; font-weight:800; letter-spacing:.05em; text-transform:uppercase; color:var(--primary); margin:0 0 14px;}
.price-note ul{margin:0; padding-left:20px; display:flex; flex-direction:column; gap:9px;}
.price-note li{font-size:13.5px; color:var(--text-2); line-height:1.65;}

/* --- CTA giữa trang: dùng lại .promo-banner, chỉ đổi thành 1 cột --- */
.price-cta-banner{grid-template-columns:1fr; min-height:0; text-align:center;}
.price-cta-banner .promo-banner-text{padding:56px 40px; display:flex; flex-direction:column; align-items:center;}
.price-cta-banner .sub{max-width:52ch;}
.price-cta-actions{display:flex; gap:12px; flex-wrap:wrap; justify-content:center;}
.price-cta-banner .btn-outline{background:transparent; color:#fff; border-color:rgba(255,255,255,.4);}
.price-cta-banner .btn-outline:hover{border-color:#fff; background:rgba(255,255,255,.08);}

/* --- nhịp dọc, theo đúng quy ước RC1 --- */
#price-list{padding-top:48px;}
#price-cta{padding-top:64px;}

@media (max-width:1100px){
  .price-block-head{grid-template-columns:150px 1fr; gap:22px; row-gap:20px;}
  .price-block-aside{grid-column:1/-1; flex-direction:row; align-items:center; justify-content:space-between; text-align:left; width:100%;}
  .price-table th, .price-table td{padding-left:24px; padding-right:24px;}
}

@media (max-width:900px){
  /* thanh lọc nén còn 2 hàng: tabs cuộn ngang (không wrap) + select & bộ đếm.
     Chỉ override trong phạm vi .price-toolbar, không đụng .tabs dùng chung. */
  .price-toolbar{top:64px; padding:10px 0;}
  .price-toolbar-inner{gap:10px;}
  /* VÒNG 16 — dải tab cuộn ngang nhưng KHÔNG có dấu hiệu nào cho biết cuộn được: đo
     11/08 thì tab thứ 4 "Xe MPV / cỡ lớn" bị cắt ngang chữ ở mép phải, trơ không có
     vệt mờ nào. Thêm vệt mờ mép phải + `scroll-snap` để vừa báo còn nội dung, vừa dừng
     gọn từng tab.

     🔴 Dùng `mask-image` trên CHÍNH dải cuộn, không dùng `::after` của thẻ bao.
     Bản đầu tôi đặt `::after` lên `.price-toolbar-inner` với `right:0` — nhưng thẻ đó
     tính cả lề của `.wrap` nên vệt mờ rơi vào khoảng 356–390px, trong khi dải tab kết
     thúc ở 366px. Kết quả: vệt mờ nằm trên phần lề trống, chữ bị cắt vẫn trơ nguyên.
     Chụp ảnh mới thấy — số đo `backgroundImage` vẫn báo "có gradient".
     `mask-image` ăn theo hộp của chính phần tử nên khớp mép dải tab, và nó KHÔNG trôi
     theo nội dung khi cuộn (mask áp lên hộp, không áp lên nội dung đã cuộn). */
  .price-toolbar .tabs{flex-wrap:nowrap; overflow-x:auto; width:100%; scrollbar-width:none; padding-bottom:2px;
    scroll-snap-type:x proximity; -webkit-overflow-scrolling:touch;
    -webkit-mask-image:linear-gradient(90deg,#000 0, #000 calc(100% - 34px), transparent 100%);
    mask-image:linear-gradient(90deg,#000 0, #000 calc(100% - 34px), transparent 100%);}
  .price-toolbar .tabs::-webkit-scrollbar{display:none;}
  /* 38px → 44px cho đủ mốc WCAG 2.5.5. Chỉ trong .price-toolbar nên `.tabs` dùng chung
     ở trang danh mục xe và desktop không đổi. */
  .price-toolbar .tab{flex:0 0 auto; white-space:nowrap; min-height:44px; display:inline-flex;
    align-items:center; scroll-snap-align:start; touch-action:manipulation;}
  /* VÒNG 22 — thêm `height:44px` TẠI CHỖ (đo 14/08 ra 40px). Luật gốc dòng ~959 khai
     42px; khai lần hai ở khối khác sẽ bị minify nuốt nên phải gộp vào đây. */
  /* 46px chứ không phải 44: thẻ `<select>` bên trong đặt `position:absolute; inset:0`
     nên nó nằm TRONG viền 1px của bọc ngoài — bọc 44 thì ngón tay chỉ chạm được 42.
     Bọc 46 → vùng chạm thật của select đúng 44. */
  .price-toolbar .filter-select{min-width:0; flex:1; height:46px;}
  .price-count{margin-left:0; flex:0 0 auto; font-size:12.5px;}
  /* rút gọn bộ đếm cho vừa 1 hàng, giữ chữ đầy đủ cho screen reader (không dùng display:none) */
  .pc-prefix{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;}
  .price-block-head{grid-template-columns:1fr; padding:22px 20px;}
  .price-block-img{max-width:220px;}
  .price-block-title h2{font-size:20px;}

  /* ------------------------------------------------------------------------
     VÒNG 16 — HÀNG PHIÊN BẢN: BỎ NHÃN LẶP, SỐ DẠNG NGẮN, CẢ DÒNG LÀ VÙNG BẤM

     Đo 11/08/2026 @390px: 40 hàng ăn 5.762px = 144px/hàng, so với 54px ở desktop.
     Ba nguyên nhân, sửa cả ba:

     1. NHÃN LẶP 120 LƯỢT. Trên desktop `Giá niêm yết · Giảm giá · Giá sau giảm` là
        tiêu đề cột, hiện ĐÚNG 1 LẦN mỗi xe. Bản mobile cũ gãy bảng thành thẻ dọc nên
        mỗi phiên bản gánh lại đủ 3 nhãn → 3 × 40 = 120 lượt nhãn dư thuần.
        Bỏ `::before` đi. `<thead>` vẫn còn trong DOM (chỉ sr-only) nên trình đọc màn
        hình vẫn ghép được ô với tiêu đề cột — không mất gì về a11y.
     2. SỐ 9 CHỮ SỐ. "529.000.000" chiếm gần cả dòng, trong khi chính đầu xe ngay trên
        đã dùng "375 triệu". Đổi sang `.pt-gon`, `.pt-day` để dành cho bản in A4.
     3. NÚT CTA 99×20px. Dưới mốc 44px. Nay CẢ DÒNG là vùng bấm (~360×77px) bằng lớp
        phủ `::after` của chính link — `<tr>` không thể bọc trong `<a>` (HTML không cho),
        nên đây là cách duy nhất giữ được thẻ `<table>` thật.
     ------------------------------------------------------------------------ */
  .price-table, .price-table tbody{display:block; width:100%;}
  .price-table thead{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;}
  /* 🔴 BỐN CỘT, MỖI Ô MỘT CỘT RIÊNG — KHÔNG DÙNG `display:inline` ĐỂ HAI <td> CHẢY CHUNG.
     Bản đầu tôi đặt `display:inline` cho ô "Giá niêm yết" và "Giá sau giảm" rồi cho cả
     hai vào `grid-row:2; grid-column:1`, tưởng chúng sẽ chảy cạnh nhau. Trong lưới thì
     `display:inline` bị VÔ HIỆU (ô lưới luôn bị blockify), nên hai ô CHỒNG ĐÚNG LÊN NHAU:
     "355 triệu" gạch ngang in đè lên "350 triệu".
     Không một phép đo nào bắt được — chiều cao đúng, tràn ngang 0, bấm thử 22/22 đạt.
     Chỉ ảnh chụp mới lộ. Đây là lần thứ ba trong dự án số liệu một mình không đủ.

     Bố cục hàng: hàng 1 tên phiên bản trải hết; hàng 2 bốn cột
       [giá cũ gạch] [giá sau giảm] [chip giảm, dạt phải] [mũi tên 34px] */
  .price-table tbody tr{display:grid; grid-template-columns:auto auto 1fr 34px; gap:3px 8px; align-items:center;
    padding:12px 13px 12px 15px; min-height:56px; position:relative; border-bottom:1px solid var(--border);}
  .price-table tbody tr:hover{background:transparent;}
  .price-table tbody tr:active{background:var(--accent-soft);}
  .price-table td{display:block; padding:0; border:none; text-align:left;}
  .price-table td[data-label]::before{display:none;}
  .price-table td[data-label="Phiên bản"]{grid-column:1/-1; grid-row:1; font-size:14px;}
  .price-table td[data-label="Giá niêm yết"]{grid-column:1; grid-row:2; font-size:13px; color:var(--price-old);}
  .price-table td[data-label="Giá niêm yết"] .pt-list{text-decoration:line-through; text-decoration-thickness:1px;}
  .price-table td[data-label="Giá sau giảm"]{grid-column:2; grid-row:2; font-size:15px; font-weight:800; color:var(--primary); letter-spacing:-.012em;}
  .price-table td[data-label="Giảm giá"]{grid-column:3; grid-row:2; justify-self:end; font-size:11.5px; font-weight:700;}
  .price-table td[data-label="Giảm giá"] .pt-off{background:var(--green-bg); color:var(--green); padding:2px 7px; border-radius:6px; white-space:nowrap;}
  .pt-day{display:none;}
  .pt-gon{display:inline;}
  .price-table .c-cta{grid-column:4; grid-row:2; justify-self:end; width:34px;}
  .price-table .pt-cta{display:flex; align-items:center; justify-content:center; width:34px; height:34px;
    border-radius:9px; background:var(--accent-soft); font-size:14px;}
  /* chữ ẩn kiểu sr-only, KHÔNG display:none — trình đọc màn hình vẫn phải nghe được */
  .pt-cta-t{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;}
  /* lớp phủ biến cả dòng thành vùng bấm; `<tr>` ở trên đã có position:relative */
  .price-table .pt-cta::after{content:""; position:absolute; inset:0; z-index:1;}
  .price-table .pt-cta:focus-visible{outline:3px solid var(--accent); outline-offset:2px;}
  .price-note{padding:22px 20px;}
  .price-cta-banner .promo-banner-text{padding:36px 24px;}
}

/* nút CTA luôn bám đáy thẻ phiên bản, kể cả khi số gạch đầu dòng chênh nhau */
.version-card > .btn{margin-top:auto;}

/* ==========================================================================
   CAROUSEL TRANG CHỦ — Hero (xe nổi bật) và banner ưu đãi.
   Mũi tên/chấm tròn trước đây chỉ là hình trang trí; nay là nút thật.
   ========================================================================== */

/* Các slide chồng lên nhau bằng grid thay vì position:absolute — khung tự lấy chiều cao
   slide cao nhất nên không nhảy layout khi đổi xe, và không cần set chiều cao cứng. */
.hero-slides{display:grid; width:100%;}
.hero-slide{grid-area:1/1; display:flex; flex-direction:column; align-items:center; justify-content:center;
  opacity:0; visibility:hidden; transition:opacity .45s ease-out, visibility .45s; pointer-events:none;}
.hero-slide.is-active{opacity:1; visibility:visible; pointer-events:auto;}
@media (prefers-reduced-motion:reduce){.hero-slide{transition:none;}}

/* nhãn tên xe + giá, góc trên trái khung xe */
.hero-slide-cap{position:absolute; top:6%; left:5%; z-index:3; display:flex; flex-direction:column; gap:2px;
  background:rgba(255,255,255,.82); backdrop-filter:blur(6px); border-radius:12px; padding:10px 16px;
  box-shadow:0 6px 18px rgba(0,44,95,.10); transition:transform .2s ease-out, box-shadow .2s ease-out;}
.hero-slide-cap:hover{transform:translateY(-2px); box-shadow:0 10px 24px rgba(0,44,95,.16);}
.hero-slide-cap .n{font-size:13.5px; font-weight:800; color:var(--primary); line-height:1.3;}
.hero-slide-cap .p{font-size:12.5px; color:var(--text-2); font-weight:600;}

/* mũi tên: nút thật, nằm trong khung xe nên không còn đè lên nút "Xem bảng giá" */
button.hero-arrow{border:none; padding:0; cursor:pointer; transition:background .18s ease-out, transform .18s ease-out, box-shadow .18s ease-out;}
button.hero-arrow:hover{background:var(--primary); transform:translateY(-50%) scale(1.06); box-shadow:0 10px 24px rgba(0,44,95,.28);}
button.hero-arrow:hover svg{color:#fff;}
button.hero-arrow:active{transform:translateY(-50%) scale(.98);}

/* chấm tròn: nút thật, đặt trong khung xe */
.hero-car .hero-dots{bottom:4%;}
.hero-dots button{width:12px; height:12px; border-radius:50%; background:#c9d6e6; border:none; padding:0; cursor:pointer;
  position:relative; touch-action:manipulation; transition:width .25s ease-out, background .25s ease-out;}
.hero-dots button:hover{background:#9db4d0;}
.hero-dots button.active{background:var(--primary); width:30px; border-radius:6px;}

/* 🔴 VÒNG 16 — CHẤM PHẢI TO LÊN THẬT, KHÔNG NỚI ẢO ĐƯỢC NỮA.
   Bản trước: chấm 7px + gap 18px + `::after inset:-9px` → vùng chạm 25×25px. Đo lại
   11/08/2026 thì đúng 25×25px, tức vẫn dưới mốc 44px của WCAG 2.5.5.

   Và ĐÃ HẾT CHỖ NỚI: công thức bắt buộc là **nới × 2 ≤ gap**, gap 18px nên tối đa
   9px mỗi bên. Nới thêm là vùng chạm hai chấm cạnh nhau ĐÈ LÊN NHAU — bấm vào giữa
   không biết trúng cái nào, còn tệ hơn chấm nhỏ ban đầu (dự án đã mắc đúng lỗi này ở RC12).

   Nên phải đi cả hai đường cùng lúc: chấm 7 → 12px, gap 18 → 32px, nới -9 → -16px.
   Kiểm lại: 12 + 2×16 = 44px vừa đủ, và 16×2 = 32 = gap nên hai vùng chỉ VỪA CHẠM
   nhau chứ không đè. Đổi một trong ba số thì phải tính lại cả ba.

   `gap` sửa ngay tại chỗ khai gốc của `.hero-dots` và `.promo-slides > .promo-dots`,
   KHÔNG đè bằng một luật `.hero-dots{gap:...}` thứ hai ở đây: LiteSpeed gộp các selector
   trùng nhau khi minify, hai luật `.hero-dots{}` sẽ bị nhập làm một và giữ giá trị khai
   trước, nên luật đè phía sau biến mất không dấu vết trong file đã tối ưu. */
.hero-dots button::after, .promo-dots button::after{content:""; position:absolute; inset:-16px;}

/* banner ưu đãi */
.promo-slides{display:grid; position:relative;}
.promo-banner{grid-area:1/1;}
.promo-banner.is-hidden{visibility:hidden; pointer-events:none;}
.promo-dots button{width:12px; height:12px; border-radius:50%; background:rgba(255,255,255,.35); border:none; padding:0; cursor:pointer;
  position:relative; touch-action:manipulation; transition:width .25s ease-out, background .25s ease-out;}
.promo-dots button:hover{background:rgba(255,255,255,.6);}
.promo-dots button.active{background:#fff; width:30px; border-radius:6px;}
/* gap 32px (vòng 16, trước là 18px): xem ghi chú vùng chạm ở khối chấm tròn phía trên —
   đổi số này thì phải tính lại cả chấm 12px và `::after inset:-16px`. */
.promo-slides > .promo-dots{position:absolute; bottom:26px; left:56px; z-index:4; display:flex; gap:32px;}

@media (max-width:1100px){
  .promo-slides > .promo-dots{left:28px; bottom:20px;}
}

@media (max-width:900px){
  /* 🔴 20/08/2026 tối — ANH VŨ CHỐT BỎ CHẤM TRÒN Ở KHỔ ĐIỆN THOẠI.
     Luật cũ ở đây CỐ Ý bật chấm tròn lên (đè luật `display:none` của khối 900px),
     lý do ghi là "giữ để vuốt/bấm được". Nay bỏ hẳn để nhường chỗ cho ảnh xe to hơn.
     ✅ Khách KHÔNG bị mất đường điều khiển: `carousel()` trong home.js có sẵn thao
        tác VUỐT NGANG (touchstart/touchend, ngưỡng 45px) và vẫn TỰ CHUYỂN mỗi 6
        giây. Đã đọc mã và đo lại, không phải đoán.
     ⚠️ Muốn bật lại thì đổi `none` thành `flex` — nhưng nhớ hạ ảnh xe xuống, không
        thì chấm tròn nằm đè lên bánh xe. */
  .hero-car .hero-dots{display:none;}
  .hero-slide-cap{top:4%; left:4%; padding:8px 12px;}
  .hero-slide-cap .n{font-size:12.5px;}
  .hero-slide-cap .p{font-size:11.5px;}
  .promo-slides > .promo-dots{left:24px; bottom:16px;}
}

/* ==========================================================================
   TIN TỨC — trang danh sách (archive.php) và trang chi tiết (single.php).
   Chỉ thêm mới, tái dùng .page-hero / .news-grid / .news-card / .article-content
   đã có sẵn của Design System RC1.
   ========================================================================== */

.page-hero-intro{max-width:720px; margin:14px 0 0; color:var(--text-2); font-size:15px;}
.page-hero-count{margin:12px 0 0; font-size:13px; color:var(--text-2); font-weight:700;}

/* Thẻ bài viết trong danh sách có thêm 2 dòng tóm tắt so với thẻ ở trang chủ */
.news-excerpt{margin:0 0 16px; font-size:13.5px; line-height:1.65; color:var(--text-2);
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;}

/* Phân trang — trước đây không có, 13/23 bài không tới được bằng cách bấm */
.hnt-pagination{display:flex; justify-content:center; align-items:center; gap:8px;
  flex-wrap:wrap; margin-top:44px;}
.hnt-pagination .page-numbers{display:inline-flex; align-items:center; justify-content:center;
  min-width:44px; height:44px; padding:0 14px; border:1px solid var(--border); border-radius:var(--radius-btn);
  background:#fff; color:var(--text-2); font-size:14px; font-weight:700;
  transition:border-color .18s ease-out, color .18s ease-out, background .18s ease-out;}
.hnt-pagination .page-numbers:hover{border-color:var(--primary); color:var(--primary);}
.hnt-pagination .page-numbers.current{background:var(--primary); border-color:var(--primary); color:#fff;}
.hnt-pagination .page-numbers.dots{border-color:transparent; background:transparent;}

/* --- trang chi tiết bài viết --- */
.article-hero .breadcrumb{margin-bottom:16px;}
.article-hero h1{max-width:900px;}
.article-meta{display:flex; align-items:center; gap:9px; flex-wrap:wrap;
  margin-top:16px; font-size:13px; color:var(--text-2);}
.article-meta a{color:var(--accent); font-weight:700;}
.article-meta a:hover{text-decoration:underline;}
.article-meta .dot{opacity:.45;}

.article-cover{margin:0 0 34px; max-width:820px; border-radius:var(--radius-card);
  overflow:hidden; box-shadow:var(--shadow-card);}
.article-cover img{display:block; width:100%; height:auto;}

/* Nội dung bài viết cũ chứa nhiều bảng và ảnh rộng — chặn tràn ngang */
.article-content img{max-width:100%; height:auto;}
.article-content iframe{max-width:100%;}
.article-content table{width:100%; border-collapse:collapse; margin:22px 0; font-size:14.5px;}
.article-content table td,.article-content table th{border:1px solid var(--border); padding:9px 12px;}
.article-content ul,.article-content ol{padding-left:22px;}
.article-content li{margin:6px 0;}
.article-content p{margin:0 0 1.1em;}

.article-foot{display:flex; gap:12px; flex-wrap:wrap; align-items:center;
  max-width:820px; margin-top:38px; padding-top:28px; border-top:1px solid var(--border);}

@media (max-width:640px){
  .article-cover{margin-bottom:24px;}
  .article-foot{margin-top:28px;}
  .article-foot .btn{flex:1 1 100%;}
  .hnt-pagination{margin-top:32px;}
  /* VÒNG 22 — 40→44px. Sửa TẠI CHỖ vì luật này đã nằm sẵn trong media query;
     khai lần hai ở khối khác thì LiteSpeed minify gộp lại và giữ giá trị TRƯỚC. */
  .hnt-pagination .page-numbers{min-width:44px; height:44px; padding:0 11px; font-size:13.5px;}
}

/* ==========================================================================
   GIỚI THIỆU & LIÊN HỆ — chỉ thêm mới, tái dùng .why-card / .contact-row / .cta-band.
   ========================================================================== */

.about-grid-2{grid-template-columns:repeat(2,1fr);}

/* ====== Ảnh showroom thật trên trang Giới thiệu — 21/08/2026 ==============
   Ba tấm NGANG và ba tấm DỌC nằm chung một lưới. Ô cố định 4:3 + object-fit:cover
   là cách duy nhất giữ lưới thẳng hàng; bù lại ảnh dọc bị cắt nhiều, nên chỗ cắt
   của từng tấm được canh tay bằng object-position khai ngay trong thẻ img
   (danh sách ở hnt_showroom_anh(), inc/hnt-schema.php).
   🔴 ĐỪNG bỏ aspect-ratio để "cho ảnh hiện đủ": lưới sẽ răng cưa vì ảnh dọc cao
      gấp rưỡi ảnh ngang, và trang giật khi ảnh về vì không còn chỗ chừa sẵn. */
.about-anh-dau{margin-top:28px; border-radius:var(--radius-card); overflow:hidden; box-shadow:var(--shadow-card);}
.about-anh-dau img{display:block; width:100%; height:auto; aspect-ratio:4/3; object-fit:cover; object-position:50% 55%;}

.showroom-luoi{display:grid; grid-template-columns:repeat(2,1fr); gap:12px;}
.showroom-o{margin:0; border-radius:var(--radius-card); overflow:hidden; background:var(--bg-2);}
.showroom-o img{display:block; width:100%; aspect-ratio:4/3; object-fit:cover;}

@media (min-width:721px){
  /* Máy tính: đầu trang dùng khổ 21/9 cho gọn bề dọc. Ở màn hẹp khổ này mỏng
     như một cái vạch nên chỉ bật từ 721px trở lên. */
  .about-anh-dau img{aspect-ratio:21/9;}
}
@media (min-width:761px){
  .showroom-luoi{grid-template-columns:repeat(3,1fr); gap:16px;}
}

/* ====== Ba khu giới thiệu hai cột: chữ một bên, video một bên ==============
   Thay cho lưới 3 video nằm chung section với dải ảnh (bản 21/08 sáng). Anh Vũ
   xem live và bảo nó "dính cùng kho ảnh, nhìn không đẹp và chuyên nghiệp".

   🔴 KHUNG VIDEO DỌC 9/16, không phải 16/9. Cả ba là Shorts. Khai nhầm 16/9 là
      ảnh bìa cụt còn một dải ngang, mà không phép đo nào báo lỗi.
   🔴 Video khoá cứng 300px. Bỏ khoá là ô cao gần 1.000px trên máy tính, nuốt
      trọn màn hình vì khung dọc cao gấp 1,8 lần bề ngang. */
.gt-doi{padding:var(--section-space) 0;}
.gt-doi:nth-of-type(odd){background:var(--bg-2);}
.gt-doi-hang{display:grid; grid-template-columns:1fr; gap:26px; align-items:center;}
/* Chặn bề ngang cột chữ. Để cột giãn tự do thì ở khổ 1280px dòng chữ dài hơn
   1.300px, mắt phải quét ngang cả màn rồi mới xuống dòng. */
.gt-doi-chu{max-width:58ch;}
.gt-doi-chu .eyebrow{margin:0 0 8px;}
.gt-doi-chu h2{margin:0 0 16px;}
.gt-doi-chu p{margin:0 0 14px; font-size:16px; line-height:1.72; color:var(--text);}
.gt-doi-chu p:last-child{margin-bottom:0;}

.gt-doi-video{width:min(300px,100%); margin:0 auto;}
.gt-doi-khung{
  position:relative; aspect-ratio:9/16; overflow:hidden;
  border-radius:var(--radius-card); background:var(--primary);
  box-shadow:0 14px 40px rgba(0,44,95,.18);
}
.gt-doi-khung img,.gt-doi-khung iframe{display:block; width:100%; height:100%; object-fit:cover; border:0;}
.gt-doi-nut{position:absolute; inset:0; width:100%; padding:0; border:0; background:transparent; cursor:pointer;}
.gt-doi-nut:focus-visible{outline:3px solid var(--accent); outline-offset:2px;}
.gt-doi-play{position:absolute; inset:0; display:flex; align-items:center; justify-content:center; pointer-events:none;}
.gt-doi-play svg{width:56px; height:40px; filter:drop-shadow(0 2px 8px rgba(0,0,0,.35));}
/* 🔴 Nhãn này KHÔNG phải trang trí. Trình duyệt nào cũng chặn video tự phát có
   tiếng, nên clip chạy câm. Không báo trước thì khách tưởng video hỏng. */
.gt-doi-tieng{
  position:absolute; left:10px; bottom:10px; padding:4px 9px; border-radius:8px;
  background:rgba(0,0,0,.66); color:#fff; font-size:12px; font-weight:600; line-height:1.5;
  pointer-events:none;
}

@media (min-width:861px){
  /* Cột chữ co theo nội dung chứ không giãn hết chỗ, nên hai cột đứng gần nhau
     thay vì hở một mảng trống ở giữa. Video luôn 300px, không co.

     🔴🔴 ĐẶT CHỖ BẰNG `grid-column`, TUYỆT ĐỐI KHÔNG ĐẢO BẰNG `order`.
        Bản đầu dùng `order` cho khu so le và nó HỎNG THẬT: `order` chỉ đổi chỗ
        phần tử, KHÔNG đổi bề rộng cột. Video nhảy vào cột "co theo nội dung"
        rồi tự tính bề rộng từ chính mình nên ra ĐÚNG 0px, còn cột chữ lãnh
        khuôn 300px. Đo ra `rongVideo:[300, 0, 300]` và `rongChu:[585, 300, 585]`
        — mắt thường nhìn qua rất dễ tưởng chỉ là "khu giữa hơi lệch".
        Khai chỗ tường minh thì bề rộng đi liền với cột, đảo kiểu gì cũng đúng. */
  .gt-doi-hang{grid-template-columns:minmax(0,auto) 300px; gap:64px; justify-content:center;}
  /* 🔴 PHẢI KHAI CẢ `grid-row:1`, KHÔNG CHỈ `grid-column`.
     Ở khu so le, chữ đứng trước trong mã nhưng được đặt vào CỘT 2. Con trỏ xếp
     tự động của lưới đã đi qua cột 1 của hàng 1, nên video xin cột 1 thì bị đẩy
     xuống HÀNG 2 — khu so le xếp dọc trong khi hai khu kia nằm ngang. Đo được:
     khu so le cao 1.001px so với 725px, hai cột lệch tâm 436px.
     Ghim cả hai vào hàng 1 thì thứ tự trong mã không còn quyết định hàng nữa. */
  .gt-doi-chu{grid-column:1; grid-row:1;}
  .gt-doi-video{grid-column:2; grid-row:1;}
  .gt-doi--trai .gt-doi-hang{grid-template-columns:300px minmax(0,auto);}
  .gt-doi--trai .gt-doi-chu{grid-column:2; grid-row:1;}
  .gt-doi--trai .gt-doi-video{grid-column:1; grid-row:1;}
}

/* Dải xe đang bán: lưới ảnh nhỏ, bấm vào ra trang chi tiết */
.about-car-strip{display:grid; grid-template-columns:repeat(6,1fr); gap:16px;}
.about-car{display:block; text-align:center; color:var(--text);}
.about-car-img{aspect-ratio:4/3; border-radius:14px; overflow:hidden; background:radial-gradient(ellipse at 50% 32%,#eef3f9 0%,#e3ebf4 55%,#d7e2ee 100%);
  display:flex; align-items:center; justify-content:center; margin-bottom:9px;
  transition:box-shadow .25s ease-out, transform .25s ease-out;}
.about-car-img img{width:100%; height:100%; object-fit:contain; filter:drop-shadow(0 8px 8px rgba(0,44,95,.12)); transition:transform .3s ease-out;}
.about-car:hover .about-car-img{box-shadow:var(--shadow-card); transform:translateY(-4px);}
.about-car:hover .about-car-img img{transform:scale(1.04);}
.about-car span{font-size:12.5px; font-weight:700; line-height:1.35; display:block;}
.about-car:hover span{color:var(--accent);}

/* Liên hệ: thông tin bên trái, bản đồ bên phải */
.about-contact-grid{display:grid; grid-template-columns:1fr 1.15fr; gap:32px; align-items:stretch;}
/* VÒNG 16 — `min-width:0` chữa tràn ngang 11px ở 320px (iPhone SE đời đầu).
   Ô lưới mặc định là `min-width:auto`, tức KHÔNG co nhỏ hơn nội dung của nó. Địa chỉ
   showroom và iframe bản đồ đủ rộng để đẩy khối ra 315px trong khung nội dung 288px.
   Đây là cách chữa đúng và không đổi gì ở các bề ngang khác: `min-width:0` chỉ có tác
   dụng khi nội dung rộng hơn ô, mà ở ≥360px thì nó không rộng hơn. */
.about-contact-info{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:32px 34px; min-width:0;}
.about-contact-info .contact-row .item{align-items:flex-start;}
.about-contact-info .contact-row .t2{font-size:14px; line-height:1.55; font-weight:700;}
.about-map{border-radius:var(--radius-card); overflow:hidden; box-shadow:var(--shadow-card); min-height:340px; background:var(--bg-2); min-width:0;}
/* `max-width:100%` để iframe không tự đặt chiều rộng theo thuộc tính `width` của thẻ —
   Google Maps xuất `width="600"` trong mã nhúng, và `width:100%` một mình không chặn được
   nó góp vào chiều rộng nội dung tối thiểu của ô lưới. */
.about-map iframe{display:block; width:100%; max-width:100%; height:100%; min-height:340px;}

@media (max-width:1100px){
  .about-car-strip{grid-template-columns:repeat(4,1fr);}
  .about-contact-grid{grid-template-columns:1fr;}
}
@media (max-width:768px){
  .about-grid-2{grid-template-columns:1fr;}
}
@media (max-width:640px){
  .about-car-strip{grid-template-columns:repeat(2,1fr); gap:12px;}
  .about-contact-info{padding:24px 22px;}
  .about-map{min-height:260px;}
  .about-map iframe{min-height:260px;}
}

/* --- trang Liên hệ: 3 thẻ kênh liên hệ lớn, bấm được cả thẻ --- */
.contact-cards{display:grid; grid-template-columns:repeat(3,1fr); gap:24px;}
.contact-card{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card);
  padding:32px 30px; display:block; color:var(--text);
  transition:box-shadow .3s ease-out, transform .3s ease-out;}
.contact-card:hover{box-shadow:var(--shadow-card-hover); transform:translateY(-4px);}
.cc-icon{width:56px; height:56px; border-radius:16px; background:var(--accent-soft); color:var(--accent);
  display:flex; align-items:center; justify-content:center; margin-bottom:22px;}
.cc-icon svg{width:25px; height:25px;}
.contact-card h3, .contact-card h2{font-size:14px; font-weight:700; color:var(--text-2); margin:0 0 6px;
  text-transform:uppercase; letter-spacing:.05em;}
.cc-value{font-size:19px; font-weight:800; color:var(--primary); margin:0 0 8px; line-height:1.35;}
.cc-note{font-size:13px; color:var(--text-2);}
.contact-info-title{font-size:19px; font-weight:800; color:var(--primary); margin:0;}
.contact-select{min-width:200px;}

@media (max-width:900px){
  .contact-cards{grid-template-columns:1fr;}
}

/* Từ 901–1200px menu vẫn ở dạng ngang (drawer chỉ bật dưới 900px). Với 6 mục thì
   khoảng cách 34px làm chữ rớt xuống 2 dòng, nên co lại trong khoảng này. */
@media (min-width:1151px) and (max-width:1280px){
  nav.main-menu ul{gap:20px;}
  nav.main-menu a{font-size:13.5px;}
}

/* Dưới 1024px thì brand + 6 mục menu + nút "Gọi ngay" không còn đủ chỗ trên một dòng.
   Chuyển sang menu trượt sớm hơn (trước đây chỉ bật dưới 900px) thay vì để chữ rớt 2 dòng. */
@media (max-width:1150px){
  nav.main-menu{display:none; position:fixed; top:0; right:0; height:100vh; width:78vw; max-width:340px;
    background:#fff; transform:translateX(100%); transition:transform .3s ease; padding:90px 28px 32px;
    z-index:99; box-shadow:-10px 0 30px rgba(0,0,0,.1); overflow-y:auto;}
  nav.main-menu.is-open{display:block; transform:translateX(0);}
  nav.main-menu ul{flex-direction:column; align-items:flex-start; gap:0;}
  nav.main-menu li{width:100%; border-bottom:1px solid var(--border);}
  nav.main-menu a{padding:16px 0; font-size:15px;}
  .hamburger{display:flex;}
}

/* ==========================================================================
   XEM ẢNH LỚN (lightbox) — ô ảnh trong Thư viện hình ảnh trước đây là <div> trơ.
   Tự viết, không thêm thư viện ngoài.
   ========================================================================== */

/* .gallery-tile giờ là <button>, phải gỡ style mặc định của nút */
.gallery-tile{border:0; padding:0; margin:0; font:inherit; text-align:left; cursor:zoom-in; width:100%; display:block;}
.gallery-tile:focus-visible{outline:3px solid var(--accent); outline-offset:3px;}
.gallery-tile .zoom{position:absolute; top:14px; right:14px; width:34px; height:34px; border-radius:50%;
  background:rgba(255,255,255,.92); color:var(--primary); display:flex; align-items:center; justify-content:center;
  opacity:0; transform:scale(.85); transition:opacity .22s ease-out, transform .22s ease-out; z-index:2;}
.gallery-tile .zoom svg{width:17px; height:17px;}
.gallery-tile:hover .zoom, .gallery-tile:focus-visible .zoom{opacity:1; transform:scale(1);}

body.hnt-lb-open{overflow:hidden;}
.hnt-lightbox{position:fixed; inset:0; z-index:9999; display:flex; align-items:center; justify-content:center;}
.hnt-lightbox[hidden]{display:none;}
.lb-backdrop{position:absolute; inset:0; background:rgba(4,14,28,.9); cursor:zoom-out;}
.lb-panel{position:relative; z-index:1; display:flex; align-items:center; gap:14px;
  width:min(1180px,94vw); max-height:92vh;}
.lb-figure{margin:0; flex:1; min-width:0; display:flex; flex-direction:column; align-items:center; gap:14px;}
.lb-figure img{max-width:100%; max-height:78vh; border-radius:14px; display:block; background:#0b1a2e;}
.lb-figure figcaption{color:#fff; font-size:14px; font-weight:700; text-align:center;}
.lb-close{position:absolute; top:-46px; right:0; width:40px; height:40px; border-radius:50%; border:0;
  background:rgba(255,255,255,.14); color:#fff; display:flex; align-items:center; justify-content:center;
  cursor:pointer; transition:background .18s ease-out;}
.lb-close:hover{background:rgba(255,255,255,.28);}
.lb-close svg{width:19px; height:19px;}
.lb-nav{flex:0 0 46px; width:46px; height:46px; border-radius:50%; border:0; background:rgba(255,255,255,.14);
  color:#fff; display:flex; align-items:center; justify-content:center; cursor:pointer; transition:background .18s ease-out;}
.lb-nav:hover{background:rgba(255,255,255,.28);}
.lb-nav svg{width:22px; height:22px;}
.hnt-lightbox.is-single .lb-nav{visibility:hidden;}
.lb-close:focus-visible, .lb-nav:focus-visible{outline:3px solid #fff; outline-offset:2px;}

@media (max-width:768px){
  /* Mũi tên nổi lên trên ảnh thay vì chiếm chỗ hai bên, để ảnh dùng hết bề ngang màn hình. */
  .lb-panel{width:100vw; gap:0; padding:0 8px;}
  .lb-close{top:auto; bottom:-52px; right:50%; transform:translateX(50%);}
  .lb-nav{position:absolute; top:50%; transform:translateY(-50%); z-index:2; flex:0 0 auto;
    width:40px; height:40px; background:rgba(4,14,28,.55); backdrop-filter:blur(3px);}
  .lb-prev{left:10px;} .lb-next{right:10px;}
  .lb-figure img{max-height:64vh; width:100%; object-fit:contain;}
  .gallery-tile .zoom{opacity:1; transform:scale(1); width:30px; height:30px; top:10px; right:10px;}
}

/* .car-card giờ là thẻ <a>: cả thẻ bấm được, không chỉ mỗi chữ "Xem chi tiết".
   .car-link đổi từ <a> sang <span> nên hiệu ứng hover phải bám theo thẻ cha. */
.car-card{display:block; color:inherit;}
.car-card:hover .car-link{color:var(--accent); text-decoration:underline; text-underline-offset:3px;}
.car-card:focus-visible{outline:3px solid var(--accent); outline-offset:3px;}

/* Logo chính hãng ở footer: nền xanh đậm nên đảo sang trắng, giữ nguyên file SVG gốc. */
.footer-logo{height:22px; width:auto; display:block; margin-bottom:16px; filter:brightness(0) invert(1); opacity:.95;}
@media (max-width:640px){
  .brand .hlogo{height:19px;}
  .footer-logo{height:20px;}
}

/* Khối thương hiệu chỉ được phép giữ nguyên bề ngang ở desktop — dưới 1024px header
   phải co được, nếu không nút hamburger bị đẩy ra ngoài mép màn hình. */
@media (min-width:1151px){
  .brand{flex-shrink:0; margin-right:8px;}
}

/* Ghi chú phiên bản trong khối thông số đầy đủ — nói rõ số liệu thuộc bản nào. */
.spec-note{margin:0 0 20px; padding:12px 16px; background:var(--accent-soft); border-left:3px solid var(--accent);
  border-radius:0 10px 10px 0; font-size:13.5px; color:var(--text-2); line-height:1.6;}
.spec-note b{color:var(--primary);}

/* ==========================================================================
   TÌM KIẾM · TRANG 404 · MENU CON
   ========================================================================== */

/* --- ô tìm kiếm dùng chung --- */
.hnt-search{display:flex; align-items:center; gap:8px; background:#fff; border:1px solid var(--border);
  border-radius:var(--radius-btn); padding:6px 6px 6px 14px; max-width:560px;}
.hnt-search-ic{width:18px; height:18px; color:var(--text-2); flex-shrink:0;}
.hnt-search input[type="search"]{flex:1; min-width:0; border:0; outline:0; background:transparent;
  font-family:inherit; font-size:14.5px; color:var(--text); padding:8px 0;}
.hnt-search input[type="search"]::placeholder{color:#9CA3AF;}
.hnt-search button{height:38px; padding:0 18px; border:0; border-radius:9px; background:var(--primary);
  color:#fff; font-family:inherit; font-size:13.5px; font-weight:700; cursor:pointer;
  transition:background .18s ease-out;}
.hnt-search button:hover{background:var(--primary-2);}
.hnt-search:focus-within{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft);}

.nav-search{display:none;}

/* --- trang 404 --- */
.err-search{margin-top:24px; max-width:560px;}
.err-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:24px;}
.err-card{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:28px 26px;
  display:block; color:var(--text); transition:box-shadow .3s ease-out, transform .3s ease-out;}
.err-card:hover{box-shadow:var(--shadow-card-hover); transform:translateY(-4px);}
.err-ic{width:48px; height:48px; border-radius:14px; background:var(--accent-soft); color:var(--accent);
  display:flex; align-items:center; justify-content:center; margin-bottom:18px;}
.err-ic svg{width:22px; height:22px;}
.err-card h3, .err-card h2{font-size:16px; font-weight:800; margin:0 0 8px;}
.err-card p{font-size:13.5px; color:var(--text-2); line-height:1.6; margin:0;}
.err-card:hover h3, .err-card:hover h2{color:var(--accent);}

/* --- gợi ý từ khoá khi không có kết quả --- */
.search-hints{display:flex; align-items:center; gap:9px; flex-wrap:wrap; margin-top:20px; font-size:13.5px; color:var(--text-2);}
.search-hints .chip{background:#fff; border:1px solid var(--border); border-radius:99px; padding:7px 15px;
  font-size:13px; font-weight:700; color:var(--primary); transition:border-color .18s ease-out;}
.search-hints .chip:hover{border-color:var(--primary);}

/* --- menu con dòng xe (depth 2) --- */
nav.main-menu li{position:relative;}
/* VÒNG 20 — `left` đổi từ −14px sang −2px. Con số cũ căn theo mục menu có
   `padding:8px 0`; nay mục cấp một có `padding:0 20px`, mà menu con lại tự đệm
   8px + link đệm 14px = chữ bắt đầu ở 22px. Muốn chữ menu con thẳng hàng với chữ
   mục cha: 20 − 22 = −2px. Đổi đệm mục menu thì phải tính lại con số này. */
nav.main-menu .sub-menu{display:none; flex-direction:column; list-style:none; margin:0; padding:8px; position:absolute; top:100%; left:-2px;
  min-width:230px; background:#fff; border:1px solid var(--border); border-radius:14px;
  box-shadow:var(--shadow-card-hover); opacity:0; visibility:hidden; transform:translateY(6px);
  transition:opacity .18s ease-out, transform .18s ease-out, visibility .18s; z-index:60;}
nav.main-menu li:hover > .sub-menu, nav.main-menu li:focus-within > .sub-menu{display:block; opacity:1; visibility:visible; transform:translateY(0);}
nav.main-menu .sub-menu a{display:block; padding:9px 14px; border-radius:9px; font-size:13.5px; font-weight:600; white-space:nowrap;}
nav.main-menu .sub-menu a:hover{background:var(--bg-2); color:var(--primary);}
.submenu-toggle{display:none;}

@media (max-width:1100px){
  .err-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:1150px){
  /* Trong menu trượt: ô tìm kiếm lên đầu, menu con thành accordion bấm mũi tên */
  .nav-search{display:block; margin-bottom:18px;}
  nav.main-menu .sub-menu{position:static; opacity:1; visibility:visible; transform:none; box-shadow:none;
    border:0; border-radius:0; padding:0 0 10px 14px; min-width:0; display:none;}
  nav.main-menu li.is-open > .sub-menu{display:block;}
  nav.main-menu .sub-menu li{border-bottom:0;}
  nav.main-menu .sub-menu a{padding:11px 0; font-size:14px; color:var(--text-2); white-space:normal;}
  .submenu-toggle{display:flex; align-items:center; justify-content:center; position:absolute; right:0; top:6px;
    width:40px; height:40px; border:0; background:transparent; color:var(--text-2); cursor:pointer;}
  .submenu-toggle svg{width:13px; height:13px; transition:transform .2s ease-out;}
  li.is-open > .submenu-toggle svg{transform:rotate(180deg);}
}
@media (max-width:640px){
  .err-grid{grid-template-columns:1fr;}
  .hnt-search{padding:5px 5px 5px 12px;}
  .hnt-search button{padding:0 14px; font-size:13px;}
}

/* --- công cụ dự toán trả góp ở trang chủ --- */
.loan-calc{display:grid; grid-template-columns:1fr 1fr; gap:0; background:#fff;
  border-radius:var(--radius-card); box-shadow:var(--shadow-card); overflow:hidden; margin-bottom:24px;}
.loan-form{padding:34px 36px;}
.loan-form h3{font-size:18px; font-weight:800; color:var(--primary); margin:0 0 22px;}
.loan-field{margin-bottom:20px;}
.loan-field label{display:flex; justify-content:space-between; align-items:baseline; gap:10px;
  font-size:13px; color:var(--text-2); font-weight:700; margin-bottom:9px;}
.loan-field label b{color:var(--primary); font-size:14.5px; font-weight:800;}
.loan-field .filter-select{width:100%;}
.loan-field input[type="range"]{width:100%; accent-color:var(--primary); height:22px; cursor:pointer;}
.loan-field input[type="range"]:focus-visible{outline:3px solid var(--accent); outline-offset:3px;}

.loan-result{padding:34px 36px; background:linear-gradient(180deg,#f5f8fc,#eef3fa); border-left:1px solid var(--border);}
.loan-label{margin:0 0 4px; font-size:12px; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; color:var(--text-2);}
.loan-month{margin:0 0 4px; font-size:36px; font-weight:800; color:var(--primary); letter-spacing:-.02em; line-height:1.1;}
.loan-month-sub{margin:0 0 20px; font-size:12.5px; color:var(--text-2); line-height:1.4;}
.loan-rows{display:flex; flex-direction:column; gap:9px; padding-top:16px; border-top:1px solid var(--border);}
.loan-rows > div{display:flex; justify-content:space-between; gap:12px; font-size:13.5px;}
.loan-rows span{color:var(--text-2);}
.loan-rows b{font-weight:800; color:var(--text);}
.loan-note{margin:16px 0 0; font-size:12px; line-height:1.6; color:var(--text-2);}
.loan-actions{display:flex; gap:10px; flex-wrap:wrap; margin-top:20px;}
.loan-actions .btn{flex:1 1 auto;}

/* Công cụ giá lăn bánh — tiền tố lb- để chắc chắn không đụng class nào đã có.
   Đã dò main.css trước khi khai: cả 8 tên dưới đều chưa từng xuất hiện. */
.lb-seg-label{display:block; font-size:13px; font-weight:600; color:var(--text-2); margin-bottom:7px;}
.lb-seg{display:flex; border:1px solid var(--border); border-radius:var(--radius-btn); overflow:hidden;}
.lb-seg button{flex:1; min-height:44px; padding:6px 10px; border:0; background:#fff; font:inherit;
  font-size:13.5px; font-weight:700; color:var(--text-2); cursor:pointer; transition:background .15s, color .15s;}
.lb-seg button + button{border-left:1px solid var(--border);}
.lb-seg button:hover{background:var(--accent-soft); color:var(--primary);}
.lb-seg button[aria-pressed="true"]{background:var(--primary); color:#fff;}
.lb-seg button:focus-visible{outline:3px solid var(--accent); outline-offset:-3px;}
.lb-seg-hint{margin:6px 0 0; font-size:11.5px; line-height:1.5; color:var(--text-2);}

.lb-break{margin-top:15px; padding-top:13px; border-top:1px solid var(--border);}
.lb-break summary{cursor:pointer; font-size:13px; font-weight:700; color:var(--accent);
  list-style:none; display:flex; align-items:center; gap:6px; min-height:24px;}
.lb-break summary::-webkit-details-marker{display:none;}
.lb-break summary::after{content:"\25BE"; font-size:11px; transition:transform .2s;}
.lb-break[open] summary::after{transform:rotate(180deg);}
.lb-break summary:focus-visible{outline:3px solid var(--accent); outline-offset:3px; border-radius:4px;}
.lb-break-list{margin-top:12px; display:flex; flex-direction:column; gap:7px;}
.lb-break-list > div{display:flex; justify-content:space-between; gap:12px; font-size:12.5px; color:var(--text-2);}
.lb-break-list b{color:var(--text); font-weight:700;}
.lb-break-list .is-tang b{color:#11813a;}
.lb-break-sum{border-top:1px dashed var(--border); padding-top:8px; margin-top:3px; color:var(--text) !important;}
.lb-break-src{margin:11px 0 0; font-size:11px; line-height:1.55; color:var(--text-2);}
.loan-rows .lb-sum b{color:var(--primary); font-size:15px;}

/* Các thẻ tiện ích giờ là link thật */
a.tool-card{display:block; color:inherit;}
a.tool-card:hover h4, a.tool-card:hover h3{color:var(--accent);}

@media (max-width:900px){
  .loan-calc{grid-template-columns:1fr;}
  .loan-result{border-left:0; border-top:1px solid var(--border);}
}
@media (max-width:640px){
  .loan-form, .loan-result{padding:24px 22px;}
  .loan-month{font-size:29px;}
  .loan-actions .btn{flex:1 1 100%;}
}

/* Hai khối này chỉ có 3 thẻ nhưng dùng lưới 4 cột nên hụt hẳn một cột bên phải. */
#similar-cars .model-grid{grid-template-columns:repeat(3,1fr);}
#tools .tools-grid{grid-template-columns:repeat(3,1fr);}
@media (max-width:900px){
  #similar-cars .model-grid, #tools .tools-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:640px){
  #similar-cars .model-grid, #tools .tools-grid{grid-template-columns:1fr;}
}

/* ==========================================================================
   VÙNG CHẠM TRÊN ĐIỆN THOẠI
   Rà soát 05/08: 14 link/nút ở header–footer chỉ cao ~30px. Nâng lên >= 40px
   cho ngón tay bấm trúng, không đổi giao diện desktop.
   ========================================================================== */
@media (max-width:1150px){
  .hamburger{width:44px; height:44px; justify-content:center; padding:0;}
}
@media (max-width:900px){
  /* VÒNG 16 — đo 11/08/2026: 15/15 link chân trang cao 38–42px, tức bản vá 05/08 chỉ
     đưa được tới mốc 40px chứ chưa đạt 44px của WCAG 2.5.5.
     Dùng `min-height` thay vì tăng `padding` thêm: min-height chỉ kéo giãn đúng những
     link đang thiếu, nên chân trang cao thêm ít nhất có thể. Đã đo lại sau khi sửa —
     xem con số trong logweb.md mục vòng 16. */
  .footer-cols a{line-height:1.5; padding:12px 0; min-height:44px;}
  /* 🔴 VÒNG 19 — ba chấm mạng xã hội cũng là `.footer-cols a` nên luật ngay trên bắt
     vào chúng, và nó chỉ kéo CHIỀU CAO: chấm 40px rộng thành 40×44px, méo hẳn.
     Tệ hơn, bề rộng vẫn 40px nên vùng chạm VẪN DƯỚI mốc 44px của WCAG 2.5.5 — luật
     cũ không đạt được mục đích của chính nó ở đúng ba phần tử này.
     `.social-dot::after{inset:-6px}` không cứu được vì nó nằm trong khối ≤768px,
     còn dải 769–900px thì không có gì.
     → Phóng to CHÍNH CÁI CHẤM lên 44×44 thay vì nới ảo, đúng công thức ở khối
       "vùng chạm trên điện thoại": muốn đủ 44px thì phóng chấm, đừng chỉ nới.
       Ở ≤768px chấm 44px + `::after` nới 6px = vùng chạm 56px, gap 12px nên
       6×2 = 12 ≤ 12 — hai vùng chạm vừa chạm mép, không đè nhau. */
  .footer-cols .social-dot{width:44px; height:44px; min-height:44px;}
  /* Link hotline nằm TRONG `<p>` nên nó `display:inline`, mà `min-height` KHÔNG có tác
     dụng lên phần tử inline — bấm thử trên LocalWP thấy đúng nó còn 40px trong khi 14
     link kia đã 44px. Đổi sang `inline-flex` cho min-height ăn, cùng nếp với bản vá
     05/08 đã dùng cho số điện thoại trên topbar. Là số gọi thật nên nó là nút điều
     khiển, không phải link nằm trong câu văn. */
  .footer-cols p a{display:inline-flex; align-items:center; min-height:44px;}
  .footer-cols p{line-height:1.9;}
  .brand{min-height:44px;}
}

/* ==========================================================================
   SO SÁNH XE
   ========================================================================== */
.compare-picker{display:grid; grid-template-columns:repeat(3,1fr) auto; gap:16px; align-items:end;
  background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:24px 26px; margin-bottom:16px;}
.compare-slot label{display:block; font-size:13px; font-weight:700; color:var(--text-2); margin-bottom:8px;}
.compare-slot .filter-select{width:100%;}
.compare-picker .btn{height:46px;}
.compare-hint{margin:0 0 22px; font-size:13.5px; color:var(--text-2);}

/* VÒNG 22 — GỢI Ý CUỘN NGANG cho bảng so sánh.
   Đo 14/08: bảng cuộn 328→560px ở 390px mà KHÔNG có dấu hiệu nào cho biết cuộn được
   → khách tưởng bảng chỉ có 2 cột đầu, mất luôn cột thứ ba.
   🔴 Sửa TẠI CHỖ, không đè bằng luật thứ hai: LiteSpeed minify gộp selector trùng và
      giữ giá trị khai TRƯỚC, nên `background` khai lần hai sẽ bị nuốt.
   🔴 KHÔNG dùng `mask-image` như dải tab bảng giá (vòng 16) — ở đây thẻ có `box-shadow`,
      mà mask cắt luôn bóng đổ của thẻ.
   Cách dùng: `background-attachment:local` cho hai lớp TRẮNG (chúng trôi theo nội dung,
   nên khi đã cuộn tới đầu/cuối thì chúng che mất vệt bóng) và `scroll` cho hai lớp BÓNG
   (đứng yên theo hộp). Kết quả: bóng chỉ hiện ở phía CÒN chỗ để cuộn. Tự tắt khi hết,
   không cần một dòng JS nào. */
.compare-scroll{overflow-x:auto; border-radius:var(--radius-card); box-shadow:var(--shadow-card);
  background-color:#fff;
  background-image:
    linear-gradient(90deg,#fff 30%,rgba(255,255,255,0)),
    linear-gradient(90deg,rgba(255,255,255,0),#fff 70%),
    radial-gradient(farthest-side at 0 50%,rgba(0,44,95,.15),rgba(0,44,95,0)),
    radial-gradient(farthest-side at 100% 50%,rgba(0,44,95,.15),rgba(0,44,95,0));
  background-position:left center, right center, left center, right center;
  background-repeat:no-repeat;
  background-size:38px 100%, 38px 100%, 16px 100%, 16px 100%;
  background-attachment:local, local, scroll, scroll;}
.compare-table{width:100%; border-collapse:collapse; font-size:14px; min-width:640px;}
.compare-table th, .compare-table td{padding:14px 18px; border-bottom:1px solid var(--border); text-align:left; vertical-align:middle;}
.compare-table tbody th{width:190px; font-weight:700; color:var(--text-2); font-size:13.5px; background:var(--bg-2);}
.compare-table thead th{background:#fff; border-bottom:2px solid var(--border); vertical-align:bottom; padding-bottom:18px;}
.compare-table thead th:first-child{width:190px; background:var(--bg-2);}
.compare-table tbody tr:last-child th, .compare-table tbody tr:last-child td{border-bottom:0;}
.compare-table td{font-weight:700; color:var(--text);}

.compare-car{display:block; color:inherit;}
.compare-img{display:block; aspect-ratio:4/3; border-radius:12px; overflow:hidden; margin-bottom:10px;
  background:radial-gradient(ellipse at 50% 32%,#eef3f9 0%,#e3ebf4 55%,#d7e2ee 100%);}
.compare-img img{width:100%; height:100%; object-fit:contain; filter:drop-shadow(0 8px 8px rgba(0,44,95,.12));}
.compare-name{display:block; font-size:16px; font-weight:800; color:var(--primary);}
.compare-car:hover .compare-name{color:var(--accent);}

.compare-table td.is-best{background:var(--green-bg); color:#14532D;}
.compare-table td.is-best::after{content:" ✓"; font-weight:800;}
.compare-empty{color:#C3CBD6; font-weight:400;}
.compare-cta-row td{padding-top:20px; padding-bottom:20px;}
.compare-cta-row .btn{width:100%; height:44px; font-size:13.5px; padding:0 14px;}
.compare-note{margin:20px 0 0; font-size:13px; color:var(--text-2); line-height:1.7; max-width:860px;}
.compare-note a{color:var(--accent); font-weight:700;}

@media (max-width:900px){
  .compare-picker{grid-template-columns:1fr 1fr; }
  .compare-picker .btn{grid-column:1 / -1;}
}
@media (max-width:640px){
  .compare-picker{grid-template-columns:1fr; padding:20px;}
  .compare-table{font-size:13px; min-width:560px;}
  .compare-table th, .compare-table td{padding:11px 13px;}
  .compare-table tbody th, .compare-table thead th:first-child{width:130px; font-size:12.5px;}
  .compare-name{font-size:14px;}
}

/* --- đếm ngược ưu đãi tháng (ngày thật từ bảng giá, không phải đồng hồ giả) --- */
.promo-countdown{display:inline-flex; align-items:center; gap:8px; background:var(--orange-bg); color:#C2410C;
  font-size:13px; font-weight:700; padding:8px 14px; border-radius:99px; white-space:nowrap;}
.promo-countdown svg{width:15px; height:15px; flex-shrink:0;}
.promo-countdown b{font-weight:800;}
.promo-countdown--pill{margin-top:12px;}
.promo-countdown--bar{margin-top:14px; font-size:14px; padding:10px 18px;}
.promo-countdown.is-urgent{background:#FEF2F2; color:#B91C1C;}
@media (max-width:640px){
  .promo-countdown{font-size:12.5px; padding:7px 12px; white-space:normal;}
}

/* --- đếm ngược dạng khối ô (kiểu 'block', hiện chỉ trang chủ dùng) — RC10 ---------------
   Tiền tố `promo-cd-` đã dò trước, không trùng class nào đang có. KHÔNG khai chung selector
   với `.promo-countdown` ở trên: LiteSpeed minify gộp selector trùng và giữ giá trị khai trước.

   Ô Giây do PHP render sẵn nhưng ẩn bằng CSS khi chưa tới hạn khẩn — `display:none` cũng gỡ
   luôn khỏi cây trợ năng, nên trình đọc màn hình không đọc phải một ô rỗng nghĩa.
   Dãy số đã `aria-hidden` từ PHP; câu đầy đủ nằm ở `.sr-only` bên cạnh. */
.promo-cd{display:inline-flex; flex-direction:column; align-items:center; gap:11px; position:relative;
  margin-top:14px; padding:15px 22px 13px; overflow:hidden;
  background:var(--orange-bg); border:1px solid #F6D9BE; border-radius:16px;}
.promo-cd-lbl{display:flex; align-items:center; gap:7px; text-align:center;
  font-size:12px; font-weight:800; letter-spacing:.09em; text-transform:uppercase; color:var(--orange);}
.promo-cd-lbl svg{width:15px; height:15px; flex-shrink:0;}
.promo-cd-boxes{display:flex; align-items:flex-start; gap:8px;}
.promo-cd-box{display:block; min-width:64px; padding:9px 6px 8px; text-align:center;
  background:#fff; border-radius:11px; box-shadow:0 2px 6px rgba(184,78,5,.10);}
.promo-cd-box .v{display:block; font-size:27px; font-weight:800; line-height:1.05;
  letter-spacing:-.02em; color:var(--primary);}
.promo-cd-box .u{display:block; margin-top:3px; font-size:12px; font-weight:800;
  letter-spacing:.07em; text-transform:uppercase; color:var(--orange);}
.promo-cd-bar{position:absolute; left:0; bottom:0; width:100%; height:3px; background:rgba(184,78,5,.14);}
.promo-cd-bar i{display:block; height:100%; background:var(--orange); border-radius:0 3px 3px 0;}
/* Ô Giây chỉ xuất hiện cùng lúc với trạng thái khẩn — cùng một tín hiệu, cùng một ngưỡng 7 ngày */
.promo-cd:not(.is-urgent) .promo-cd-sec{display:none;}
.promo-cd.is-urgent{background:#FEF2F2; border-color:#F7C9C9;}
.promo-cd.is-urgent .promo-cd-lbl, .promo-cd.is-urgent .promo-cd-box .u{color:#B91C1C;}
.promo-cd.is-urgent .promo-cd-bar{background:rgba(185,28,28,.14);}
.promo-cd.is-urgent .promo-cd-bar i{background:#B91C1C;}
/* Nhịp nảy của ô Giây: chỉ đổi transform nên không gây reflow, và tắt hẳn khi khách giảm chuyển động */
.promo-cd-box.promo-cd-sec .v{transition:transform .16s ease-out;}
.promo-cd-box.promo-cd-sec.is-tick .v{transform:scale(1.13);}
@media (prefers-reduced-motion:reduce){
  .promo-cd-box.promo-cd-sec .v{transition:none;}
  .promo-cd-box.promo-cd-sec.is-tick .v{transform:none;}
}
@media (max-width:640px){
  .promo-cd{padding:13px 14px 12px; width:100%;}
  .promo-cd-box{min-width:0; flex:1 1 0; padding:8px 2px 7px;}
  .promo-cd-boxes{width:100%; gap:5px;}
  .promo-cd-box .v{font-size:22px;}
}

/* Đồng hồ đếm ngược trên nền tối — đè lên bản gốc vẽ cho nền sáng của trang chủ.
   🔴 Bản gốc là nền cam nhạt + chữ cam (--orange-bg / --orange). Bê nguyên lên thẻ navy
      là một mảng cam chói giữa thẻ. Chỉ đổi MÀU và khung, giữ nguyên cấu trúc và JS. */
.promo-cd--toi{margin-top:0; padding:0; background:none; border:0; border-radius:0; align-items:flex-end; overflow:visible;}
.promo-cd--toi .promo-cd-lbl{color:#9fc1e8;}
.promo-cd--toi .promo-cd-boxes{gap:7px;}
.promo-cd--toi .promo-cd-box{min-width:58px; padding:9px 8px 7px; border-radius:11px;
  background:rgba(255,255,255,.10); border:1px solid rgba(255,255,255,.16);}
.promo-cd--toi .promo-cd-box .v{font-size:23px; color:#fff;}
.promo-cd--toi .promo-cd-box .u{font-size:9.5px; color:#9fc1e8;}
.promo-cd--toi .promo-cd-bar{position:static; width:100%; max-width:270px; height:3px;
  border-radius:2px; background:rgba(255,255,255,.14); overflow:hidden;}
.promo-cd--toi .promo-cd-bar i{background:linear-gradient(90deg,var(--accent),#ffc15e); border-radius:2px;}
/* Dưới 7 ngày — hổ phách #FFC15E. ĐÃ ĐO THẬT trên trang dựng xong, không khai bừa:
   số 5,52:1 · nhãn 7,01:1, đều qua mốc AA 4,5.
   ⚠️ Con số 5,52 thấp hơn tôi ước lượng ban đầu (8,4) vì chính ô đồng hồ có nền hổ phách
   mờ 13% làm nền sáng lên — nền sau con số là rgb(49,76,104) chứ không phải navy trần.
   → Đổi độ mờ của `.promo-cd--toi.is-urgent .promo-cd-box` thì phải ĐO LẠI, đừng suy.
   Đỏ #B91C1C của bản nền sáng chỉ được ~2,1:1 trên navy, đọc không ra. */
.promo-cd--toi.is-urgent{background:none;}
.promo-cd--toi.is-urgent .promo-cd-lbl{color:#ffc15e;}
.promo-cd--toi.is-urgent .promo-cd-box{background:rgba(255,193,94,.13); border-color:rgba(255,193,94,.5);}
.promo-cd--toi.is-urgent .promo-cd-box .v{color:#ffc15e;}
.promo-cd--toi.is-urgent .promo-cd-box .u{color:#ffc15e;}
.promo-cd--toi.is-urgent .promo-cd-bar{background:rgba(255,193,94,.16);}
.promo-cd--toi.is-urgent .promo-cd-bar i{background:linear-gradient(90deg,#ffc15e,#ff7a66);}

/* --- trang cảm ơn --- */
.thanks-hero{text-align:center;}
.thanks-hero .page-hero-intro{margin-left:auto; margin-right:auto;}
.thanks-check{width:64px; height:64px; border-radius:50%; background:var(--green-bg); color:var(--green);
  display:flex; align-items:center; justify-content:center; margin:0 auto 20px;}
.thanks-check svg{width:30px; height:30px;}
#thanks-next .err-card h2, #thanks-next .err-card h3{font-size:16px;}

/* ĐÃ BỎ 13/08/2026 — TOÀN BỘ BỘ CSS IN KHỔ A4 ("Bảng giá in được": 2 khối @media print,
   phần tử .hnt-print-foot trong page-bang-gia-xe.php, cụm beforeprint trong price-list.js).
   Khách chốt bỏ hẳn — nối tiếp quyết định bỏ chức năng tải bảng giá 11/08 (logweb §0k):
   đường vào duy nhất của bản in là nút tải đã bỏ, giữ CSS in chỉ nuôi đồ mồ côi.
   Bản đầy đủ nếu cần khôi phục: qa/backup-deploy/20260813-bo-css-in/ */

/* ĐÃ BỎ 11/08/2026 — `.price-download` (thẻ mời tải bảng giá, đổi lấy số điện thoại)
   và `.thanks-download` (nút "Mở bảng giá để tải về" ở trang cảm ơn).
   Chủ đại lý không cho khách tải bảng giá về máy. Markup của cả hai đã xoá khỏi
   `page-bang-gia-xe.php` và `page-cam-on.php`, nên hai bộ luật này không còn khớp gì.
   Xoá hẳn thay vì giữ lại: CSS không khớp markup nào là thứ phiên sau đọc sẽ tưởng
   tính năng vẫn còn. */

/* Bằng chứng xã hội: đếm thật từ lead, tự ẩn khi chưa đủ số */
.social-proof{display:inline-flex; align-items:center; gap:9px; margin:0 0 16px;
  background:var(--green-bg); color:#14532D; font-size:13px; font-weight:600;
  padding:8px 14px; border-radius:99px;}
.social-proof svg{width:15px; height:15px; flex-shrink:0;}
.social-proof b{font-weight:800;}

/* ==========================================================================
   TRANG CHỦ — bố cục RC6 theo tỉ lệ mẫu đại lý ô tô đã duyệt.

   Vì sao mọi thứ ở đây đều khoanh trong `body.home`: `.car-row`, `.car-card`,
   `.section-head`, `.why-stats`, `.promo-banner`... đang dùng chung với cửa hàng,
   tìm kiếm, 404, cảm ơn, giới thiệu và trang chi tiết xe. Sửa thẳng là vỡ 8 trang khác.

   Cũng vì thế các luật dưới đây cố ý KHÔNG trùng selector với luật gốc phía trên
   (`.hero` ↔ `body.home .hero`): LiteSpeed minify gộp selector trùng nhau và giữ
   giá trị khai trước, luật đè viết sau sẽ biến mất không dấu vết.
   ========================================================================== */

/* nhịp dọc chặt hơn bản cũ (96px) — mẫu dồn nhiều khối hơn trong cùng chiều cao */
body.home section{padding:72px 0;}
/* nền xám nhạt cho khối tiện ích, tạo nhịp sáng–xám–sáng như mẫu.
   Khai gộp một chỗ, không tách làm hai luật `body.home #tools{}` — xem ghi chú
   về LiteSpeed gộp selector trùng ở đầu khối này. */
body.home #tools{background:var(--bg-2);}

/* ---------- KHỐI TỐI ĐẦU TRANG: ảnh showroom làm nền cho cả hero + thanh tìm xe ----------
   Ảnh đặt ở thẻ bọc `.home-top` chứ không đặt riêng cho `.hero`, để nó chạy liền một mạch
   qua cả thanh tìm xe thay vì bị cắt ngang ở ranh giới hai khối.

   Lớp phủ tối là bắt buộc, không phải để cho đẹp: chữ hero màu trắng, đặt thẳng lên ảnh
   showroom (trời sáng, kính phản chiếu) thì tương phản rớt xuống dưới 2:1. Phủ đậm phía
   trái nơi có chữ, nhạt dần sang phải để vẫn nhìn ra showroom. */
.home-top, body.home #lead-form .cta-band{position:relative; background:#0A3D7A;}
.home-top.has-bg::before, body.home #lead-form .cta-band.has-bg::before{content:""; position:absolute; inset:0; z-index:0;
  background-image:var(--home-bg); background-size:cover; background-position:center 62%;}
.home-top.has-bg::after, body.home #lead-form .cta-band.has-bg::after{content:""; position:absolute; inset:0; z-index:1;
  background:linear-gradient(100deg, rgba(4,42,88,.95) 0%, rgba(7,52,106,.92) 38%, rgba(11,62,124,.78) 68%, rgba(15,70,138,.58) 100%);}
.home-top > *, body.home #lead-form .cta-band > *{position:relative; z-index:2;}
/* Khối form cuối trang bo góc nên lớp ảnh và lớp phủ phải bo theo, nếu không ảnh
   tràn ra bốn góc vuông. */
body.home #lead-form .cta-band.has-bg::before, body.home #lead-form .cta-band.has-bg::after{border-radius:inherit;}

/* Khối này vốn là nền sáng chữ navy. Đắp ảnh tối vào sau lưng mà quên đổi màu chữ thì
   tiêu đề chìm hẳn — phải đảo sang chữ sáng cho khớp nền mới. */
body.home #lead-form .cta-band{background-image:none; box-shadow:none;}
body.home #lead-form .cta-band h2{color:#fff;}
body.home #lead-form .cta-band input{background:rgba(255,255,255,.96); border-color:transparent; color:var(--text);}
body.home #lead-form .cta-band input::placeholder{color:#6B7280;}
body.home #lead-form .cta-band .btn-primary{background:#fff; color:var(--primary);}
body.home #lead-form .cta-band .btn-primary:hover{background:#EAF1FE;}

/* Trên khung hẹp, khối này cao và hẹp nên `cover` cắt vào mảng trời sáng của ảnh, còn đầu
   nhạt của dải phủ chéo lại rơi xuống đúng chỗ có chữ — đo được 1.0:1, chữ trắng trên nền
   trắng. Đổi sang phủ dọc và gần như đặc; ảnh chỉ còn thấp thoáng, nhưng chữ phải đọc được. */
@media (max-width:900px){
  /* Không tải ảnh nền trên khung hẹp. Lớp phủ ở đây phải đục ~93% để chữ đọc được,
     nghĩa là ảnh chỉ còn đóng góp vài phần trăm màu — bỏ đi thì gần như không ai thấy
     khác, mà tiết kiệm 302 KB trên đúng nhóm khách hay dùng 3G/4G. */
  .home-top.has-bg::before, body.home #lead-form .cta-band.has-bg::before{background-image:none;}
  .home-top.has-bg::after, body.home #lead-form .cta-band.has-bg::after{
    background:linear-gradient(180deg, rgba(4,42,88,.95) 0%, rgba(6,48,100,.93) 50%, rgba(9,56,112,.91) 100%);}
}

/* ---------- VÒNG 19 — ẢNH SHOWROOM CHO DẢI CAM KẾT + THANH SỐ LIỆU ----------
   Khách xem mockup rồi chốt: hai khối này GIỮ NGUYÊN nền navy #002C5F, chỉ đắp ảnh
   sau lưng. Nên lớp phủ ở đây đục hơn hẳn lớp phủ của `.home-top` (93%→86% thay vì
   95%→58%): nền không được sáng lên, ảnh chỉ đóng vai chất liệu.
   Dùng lại biến `--home-bg` do front-page.php gắn inline — cùng URL với khối hero nên
   trình duyệt đã có sẵn ảnh, không phát sinh request nào.

   🔴 PHỦ DỌC, KHÔNG PHỦ CHÉO như `.home-top`. Ở khối kia chữ dồn hết bên trái nên đầu
      nhạt của dải chéo rơi vào chỗ trống. Hai khối này chữ trải ĐỀU hết bề ngang (lưới
      4 cột), nên dải chéo sẽ đặt đúng đầu nhạt nhất xuống dưới cột thứ tư.

   🔴 KHOANH TRONG `body.home` VÌ `.why-stats` CÒN DÙNG Ở page-gioi-thieu.php.
      Trang đó không khai `--home-bg`, nhưng `::after` thì không cần ảnh vẫn phủ được —
      để luật trần là đổi màu một khối ở trang không nằm trong phạm vi vòng này, mà
      không có dấu hiệu gì báo. Lớp `has-bg` cũng chỉ gắn trong front-page.php.

   Đo sau khi áp (nền đặc, chưa tính ảnh): tiêu đề trắng 13,77:1 · chữ phụ #A8C2E0 7,51:1
   — giữ nguyên như trước vòng này, vì màu nền không đổi. */
body.home .trust-strip, body.home .why-stats{position:relative;}
body.home .trust-strip.has-bg::before, body.home .why-stats.has-bg::before{content:""; position:absolute; inset:0; z-index:0;
  background-image:var(--home-bg); background-size:cover; background-position:center 62%; border-radius:inherit;}
body.home .trust-strip.has-bg::after, body.home .why-stats.has-bg::after{content:""; position:absolute; inset:0; z-index:1;
  background:linear-gradient(180deg, rgba(0,44,95,.93) 0%, rgba(0,44,95,.86) 100%); border-radius:inherit;}
/* Không có dòng này thì nội dung nằm DƯỚI hai lớp phủ và biến mất — cùng nếp với
   `.home-top > *` ở khối trên. */
body.home .trust-strip.has-bg > *, body.home .why-stats.has-bg > *{position:relative; z-index:2;}

@media (max-width:900px){
  /* Cùng lý do với `.home-top`: lớp phủ đục 86–93% nên ảnh chỉ đóng góp vài phần trăm
     màu, bỏ đi gần như không ai thấy khác mà đỡ băng thông cho khách đi 4G. */
  body.home .trust-strip.has-bg::before, body.home .why-stats.has-bg::before{background-image:none;}
}

/* ---------- HERO: tỉ lệ ~3,2:1, chữ 46% / xe 54% ----------
   padding:0 vì `.hero` là thẻ <section>, nếu để nguyên nó ăn luôn `padding:72px 0`
   ở trên và cộng thêm 144px chiều cao vô ích cho cả khối tối. */
body.home .hero{background:transparent; padding:0;}
body.home .hero::before{background:radial-gradient(ellipse 62% 58% at 78% 45%, rgba(255,255,255,.08) 0%, rgba(255,255,255,0) 70%);}
body.home .hero::after{background:none;}
body.home .hero-inner{grid-template-columns:46% 54%; min-height:360px; padding:0; gap:0;}
/* Đệm dưới lớn hơn đệm trên vì thẻ tìm xe thụt lên đè vào đáy hero. */
body.home .hero-text{padding:40px 40px 60px 0;}
/* Viết đủ `body.home .hero-text p.hero-eyebrow` vì `.hero-eyebrow` là thẻ <p>, mà luật
   `body.home .hero-text p` bên dưới có độ đặc hiệu cao hơn nên sẽ nuốt mất màu này. */
body.home .hero-text p.hero-eyebrow{font-size:12px; font-weight:800; letter-spacing:.14em;
  text-transform:uppercase; color:#7FB3EA; margin:0 0 10px;}
body.home .hero-text h1{font-size:42px; line-height:1.1; color:#fff; margin:0 0 26px;}
body.home .hero-text h1 .hl{display:block; color:#7FB3EA;}
body.home .hero-text p{font-size:15.5px; color:#C6D4E6; margin-bottom:4px;}
/* 🔴 Khoảng cách dọc nay do BA MỤC ĐIỂM NHẤN gánh, không phải hai đoạn văn — hai
   đoạn đó đã bỏ theo ảnh mẫu 20/08. Thứ tự trong trang là h1 → điểm nhấn → nút. */
body.home .hero-cta{margin:0;}
body.home .hero-cta .btn{height:48px; padding:0 26px; font-size:15px;}
body.home .hero-cta .btn-outline{color:#fff; border-color:rgba(255,255,255,.5); background:transparent;}
body.home .hero-cta .btn-outline:hover{background:rgba(255,255,255,.12);}
/* 3 điểm nhấn xếp lưới 3 cột thay vì flex-wrap: trước đây chúng tự xuống 2 dòng,
   đẩy cả khối tối cao thêm ~50px.
   🔴 `white-space:nowrap` là thứ giữ đúng hình ảnh mẫu. Cột trái chỉ rộng 478px ở
      khổ 1206px; không khoá thì lưới `auto` vẫn bóp từng cột cho vừa và chữ lại vỡ
      dòng như bản cũ. Chữ đã rút còn hai từ nên khoá được mà không tràn.
   ⚠️ Ai định đổi chữ dài hơn thì phải bỏ nowrap, không thì chữ tràn ra ngoài cột. */
body.home .hero-highlights{display:grid; grid-template-columns:repeat(3,auto); gap:36px; margin:0 0 28px; justify-content:start;}
body.home .hero-highlights .hh{gap:10px; align-items:center; white-space:nowrap;}
body.home .hero-highlights .hh-icon{width:30px; height:30px; border-radius:9px;}
body.home .hero-highlights .hh-icon svg{width:16px; height:16px;}
body.home .hero-highlights .t1{font-size:12.5px; line-height:1.25;}
body.home .hero-highlights .t2{font-size:12px; line-height:1.25; margin-top:1px;}
body.home .hero-highlights .hh-icon{background:rgba(255,255,255,.10);}
body.home .hero-highlights .hh-icon svg{color:#7FB3EA;}
body.home .hero-highlights .t1{color:#fff;}
body.home .hero-highlights .t2{color:#A8C2E0;}

/* khung xe: bỏ tấm nền sáng và bóng đổ tối vì giờ nền đã tối */
body.home .hero-car{min-height:360px;}
body.home .hero-car::before{background:none;}
body.home .hero-car::after{background:radial-gradient(ellipse, rgba(0,0,0,.35) 0%, rgba(0,0,0,0) 72%);}
body.home .hero-car img{max-width:720px; filter:drop-shadow(0 30px 36px rgba(0,0,0,.45));}
body.home .hero-arrow{background:rgba(255,255,255,.16); box-shadow:none;}
body.home .hero-arrow svg{color:#fff;}
body.home .hero-dots{bottom:56px;}
body.home .hero-dots button{background:rgba(255,255,255,.45);}
body.home .hero-dots button.active{background:#fff;}

/* ---------- TÌM XE NHANH: thẻ tối đè lên đáy hero, nằm trong dải tối ---------- */
/* nền trong suốt: ảnh showroom nằm ở .home-top phía dưới, chạy liền qua khối này */
body.home .filter-wrap{background:transparent; padding-bottom:40px;}
/* Nền thẻ đậm hơn nền chung: sau khi làm nhạt nền trang, nhãn `#A8C2E0` trên thẻ
   chỉ còn 3,08:1 (cần 4,5). Thẻ là mặt nổi nên đậm hơn là hợp lý, không phá cảm
   giác nền nhạt của cả khối. */
body.home .filter-card{background:rgba(1,17,38,.80); border:1px solid rgba(255,255,255,.20);
  box-shadow:none; padding:20px 24px; margin-top:-44px; backdrop-filter:blur(8px);}
body.home .filter-title{color:#fff; letter-spacing:.12em; margin-bottom:12px;}
body.home .filter-title svg{color:#7FB3EA;}
body.home .filter-field label{color:#A8C2E0; font-size:12.5px; margin-bottom:6px;}
body.home .filter-select{background:rgba(255,255,255,.09); border-color:rgba(255,255,255,.2); height:46px;}
body.home .filter-select:hover{border-color:#7FB3EA;}
body.home .filter-select select{color:#fff;}
body.home .filter-select select option{color:var(--text);}
body.home .filter-select svg.ic, body.home .filter-select svg.chev{color:#A8C2E0;}
body.home .filter-search-btn{height:46px;}
body.home .filter-bottom .lbl{color:#A8C2E0;}
body.home .filter-bottom .chip{background:rgba(255,255,255,.10); color:#fff; border-color:transparent;}
body.home .filter-bottom .chip:hover{background:rgba(255,255,255,.2);}
body.home .filter-bottom .adv-link{color:#7FB3EA; margin-left:auto;}

/* ---------- ĐẦU MỤC căn giữa ---------- */
.section-head.centered{flex-direction:column; align-items:center; text-align:center; margin-bottom:36px;}
.section-head.centered .eyebrow{color:var(--accent);}
.section-head.centered h2{font-size:34px;}
.section-foot{display:flex; justify-content:center; margin-top:36px;}
/* Nút "Xem tất cả" dùng lại .btn-ghost đã khai ở trên (trang chi tiết xe cũng dùng).
   Không khai lại luật `.btn-ghost{}` thứ hai ở đây: vừa đổi nhầm giao diện trang đó,
   vừa dính bẫy LiteSpeed gộp selector trùng và giữ giá trị khai trước. */

/* ---------- LƯỚI XE 4 cột thay cho hàng cuộn ngang ----------
   Dùng flex-wrap chứ KHÔNG dùng grid, dù grid gọn hơn: `main.js` gán thẳng
   `carRow.style.display = 'flex'` mỗi lần đổi bộ lọc, nên để grid thì hễ khách
   động vào ô lọc là lưới sập thành một hàng. Quy tắc dự án cấm sửa main.js,
   nên bố cục phải tự khớp với thứ JS gán. */
body.home .car-row{display:flex; flex-wrap:wrap; gap:24px; overflow:visible; padding-bottom:0;}
body.home .car-card{flex:0 0 calc(25% - 18px); border:1px solid var(--border); box-shadow:none;}
body.home .car-card:hover{box-shadow:var(--shadow-card-hover);}
/* Dải "HOT" chéo góc trên–trái. Ruy băng phải đủ dài để hai đầu ăn ra ngoài khung
   ảnh, nếu không sẽ hở hai góc nhọn; `.car-img` đã có overflow:hidden để cắt phần thừa. */
.car-badge{position:absolute; top:16px; left:-38px; z-index:3; width:150px; text-align:center;
  transform:rotate(-45deg); background:#DC2626; color:#fff; font-size:11.5px; font-weight:900;
  letter-spacing:.14em; padding:5px 0; box-shadow:0 2px 10px rgba(0,0,0,.22);}
/* Dải "SẮP RA MẮT" (21/08/2026). Navy Hyundai + vàng, lấy đúng tông poster đại lý,
   và cố ý KHÁC hẳn dải HOT đỏ để hai loại tin không lẫn vào nhau.
   Tương phản #E5B94E trên #002C5F = 7,46:1.
   Chữ dài gấp hơn ba lần "HOT" nên phải hạ cỡ chữ và giãn cách, giữ nguyên bề rộng
   150px của dải để hình học hai đầu ăn ra ngoài khung ảnh vẫn đúng như cũ. */
.car-badge--sap{background:var(--primary); color:#E5B94E; font-size:10px; letter-spacing:.05em;}

/* ---------- DẢI CAM KẾT nền tối, tràn viền ---------- */
.trust-strip{background:var(--primary); color:#fff; padding:40px 0;}
.trust-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:28px;}
.trust-grid .ti{display:flex; gap:14px; align-items:flex-start;}
.trust-grid .ti-icon{width:42px; height:42px; border-radius:11px; background:rgba(255,255,255,.10);
  display:flex; align-items:center; justify-content:center; flex:none;}
.trust-grid .ti-icon svg{width:21px; height:21px; color:#7FB3EA;}
.trust-grid h3{font-size:14px; font-weight:800; margin:0 0 5px; text-transform:uppercase; letter-spacing:.03em;}
.trust-grid p{font-size:13px; line-height:1.6; color:#A8C2E0; margin:0;}

/* ---------- ƯU ĐÃI: tỉ lệ chữ 62% / xe 38% như ô ưu đãi của mẫu ----------
   Nền sáng, KHÔNG dùng nền navy như các trang khác: khối này nằm ngay dưới dải cam kết
   nền tối, để hai khối tối liền nhau là mất nhịp sáng–tối của cả trang. Từ RC10 thanh số
   liệu (cũng nền navy) đã dời xuống dưới, nên khối ưu đãi áp thẳng vào dải cam kết —
   lý do giữ nền sáng ở đây còn đúng hơn trước.

   RC10 làm nó nổi lên bằng ĐỘ NỔI KHỐI thay vì bằng màu: nền trắng thay xám phẳng, viền 2px
   chuyển sắc navy → xanh, bóng nổi thật. Cố ý không đưa màu cam vào viền: cam là tín hiệu
   "sắp hết hạn" của khối đếm ngược ngay phía trên, dùng lại ở đây là loãng mất tín hiệu đó. */
body.home .promo-banner{
  background:linear-gradient(#fff,#fff) padding-box,
             linear-gradient(118deg, var(--primary) 0%, var(--accent) 55%, #7FB3EA 100%) border-box;
  color:var(--text); box-shadow:var(--shadow-float);
  border:2px solid transparent; grid-template-columns:62% 38%; min-height:250px;
  transition:transform .28s ease-out, box-shadow .28s ease-out;}
body.home .promo-banner:hover{transform:translateY(-5px); box-shadow:0 28px 60px rgba(0,44,95,.20);}

/* Vệt sáng quét MỘT LẦN khi khối lướt vào tầm mắt, bám vào chính `.reveal.in` mà main.js
   gắn sẵn — không cần thêm JS, và cũng không cần sửa main.js (file đang bị khoá).
   Cố ý chỉ chạy một lần: quy tắc UX "Continuous Animation" dành hiệu ứng lặp vô hạn cho thứ
   báo trạng thái đang chạy, không cho trang trí. Ba banner ưu đãi đều nhận `.in` cùng lúc
   nhưng hai cái đang ẩn có `visibility:hidden` nên không thấy gì. */
body.home .promo-banner::after{
  content:""; position:absolute; top:-60%; left:0; width:34%; height:220%; z-index:3;
  pointer-events:none; opacity:0; transform:rotate(16deg) translateX(-160%);
  background:linear-gradient(90deg, rgba(255,255,255,0), rgba(0,102,204,.10) 45%, rgba(255,255,255,0));}
body.home .promo-banner.in::after{animation:hnt-promo-sweep 1.1s ease-out .25s 1;}
@keyframes hnt-promo-sweep{
  from{transform:rotate(16deg) translateX(-160%); opacity:1;}
  to  {transform:rotate(16deg) translateX(560%);  opacity:1;}
}
@media (prefers-reduced-motion:reduce){
  body.home .promo-banner{transition:none;}
  body.home .promo-banner:hover{transform:none;}
  body.home .promo-banner.in::after{animation:none;}
}
body.home .promo-banner-text{padding:36px 40px;}
body.home .promo-banner .lbl{color:var(--accent); font-size:11px; margin-bottom:10px;}
body.home .promo-banner .headline{font-size:20px; color:var(--text-2); margin-bottom:0;}
body.home .promo-banner .headline b{font-size:1.7em; color:var(--primary); margin-top:2px;}
body.home .promo-banner .sub{color:var(--text-2); font-size:14px; margin:12px 0 20px;}
body.home .promo-banner-text .btn-primary{background:var(--accent); color:#fff; height:48px; padding:0 26px;}
body.home .promo-banner-text .btn-primary:hover{background:#0052a6; box-shadow:none;}
body.home .promo-banner-car{min-height:0;}
body.home .promo-banner-car::before{background:radial-gradient(ellipse, rgba(0,44,95,.22) 0%, rgba(0,44,95,0) 72%);}
body.home .promo-dots{left:40px; bottom:20px;}
body.home .promo-dots button{background:rgba(0,44,95,.25);}
/* Chấm đang chọn thành cái MÁNG, phần màu là lớp ::before chạy đầy trong 7 giây — đúng bằng
   `interval: 7000` của carousel ưu đãi trong home.js. Đây là hiệu ứng lặp vô hạn duy nhất được
   phép ở khối này vì nó báo một trạng thái CÓ THẬT: còn bao lâu nữa thì tự chuyển ưu đãi.
   ⚠️ Dùng ::before chứ KHÔNG dùng ::after — ::after đang là phần nới vùng chạm 25px của chấm
   tròn (xem ghi chú ở khối chấm tròn phía trên). Cũng vì thế tuyệt đối không đặt overflow:hidden
   lên nút: nó sẽ cắt mất chính phần nới đó. */
body.home .promo-dots button.active{background:rgba(0,44,95,.22);}
body.home .promo-dots button.active::before{content:""; position:absolute; inset:0; z-index:1;
  background:var(--accent); border-radius:inherit; transform-origin:left; transform:scaleX(1);
  animation:hnt-dot-fill 7s linear infinite;}
@keyframes hnt-dot-fill{from{transform:scaleX(0);} to{transform:scaleX(1);}}
/* home.js dừng bộ hẹn giờ khi khách rê chuột hoặc dùng bàn phím trong #promo — thanh chạy phải
   dừng theo, không thì nó chạy hết vòng trong khi ưu đãi đứng yên, thành ra nói dối. */
body.home #promo:hover .promo-dots button.active::before,
body.home #promo:focus-within .promo-dots button.active::before{animation-play-state:paused;}
/* Giảm chuyển động: home.js cũng không tự chuyển slide, nên chấm đứng yên đầy màu như trước RC10 */
@media (prefers-reduced-motion:reduce){
  body.home .promo-dots button.active::before{animation:none;}
}

/* ---------- SỐ LIỆU: từ RC10 nằm TRONG khối đánh giá, không còn là section riêng ----------
   Khoảng cách với lưới đánh giá do margin này quyết định. 44px chứ không phải 144px như hồi
   nó còn đứng riêng (72px đệm dưới của #reviews + 72px đệm trên của #stats) — mục đích của
   việc gộp chính là bỏ khoảng trống đó đi. */
body.home .why-stats{margin-top:44px;}

@media (max-width:1100px){
  body.home .hero-inner{grid-template-columns:1fr; min-height:0;}
  body.home .hero-text{padding:48px 0 8px;}
  body.home .hero-car{min-height:300px;}
  body.home .hero-text h1{font-size:36px;}
  body.home .car-card{flex:0 0 calc(50% - 12px);}
  .trust-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:640px){
  /* RC14 — 52px → 32px, khớp với `section{padding:32px 0}` khai ở khối RC14
     cuối file. Sửa TẠI CHỖ vì trùng cả selector lẫn thuộc tính với luật đó. */
  body.home section{padding:32px 0;}
  /* RC13 — giữ 2 cột xuống dưới 640px thay vì hạ về 1 cột. Sửa TẠI CHỖ giá trị
     này chứ không đè bằng luật thứ hai cùng selector: LiteSpeed minify gộp
     selector trùng nhau và giữ giá trị khai TRƯỚC, luật đè sau sẽ bị nuốt.
     Lý do đầy đủ ở khối RC13 cuối file. */
  body.home .car-card{flex:0 0 calc(50% - 5px);}
  .trust-grid{grid-template-columns:1fr;}
  body.home .filter-card{margin-top:-28px; padding:18px;}
  /* RC14 — 26px → 23px, khớp `.section-head h2{font-size:23px}` ở khối RC14 cuối file */
  .section-head.centered h2{font-size:23px;}

  /* RC12 — thẻ "Tìm xe nhanh" đè lên 3 ô thông tin ở hero.
     `margin-top:-28px` ở trên cố ý kéo thẻ lọc thụt vào dải tối, nhưng ở mobile lưới
     3 ô xếp sát ngay trên nó nên bị che mất 20px — đo được, chữ KHÔNG bị cắt mà bị ĐÈ.
     Chừa thêm lề dưới cho lưới thay vì bỏ hiệu ứng thụt: giữ được thiết kế, hết đè. */
  body.home .hero-highlights{margin-bottom:36px;}

  /* 🔴🔴 20/08 tối — MỤC THỨ BA CHẠY RA NGOÀI MÀN HÌNH ở 320 · 360 · 390px.
     Khối máy tính đặt `gap:36px` cộng `white-space:nowrap`; ba mục cộng lại là
     363px trong khi cột chữ chỉ còn 358px, nên chữ "toàn quốc" bị cắt cụt.
     🔴 VÀ ĐÂY LÀ CHỖ ĐÁNG NHỚ: phép đo "trang có tràn ngang không" vẫn báo 0px,
        vì trang không cuộn ngang được — thứ tràn là NỘI DUNG bên trong, bị xén
        im lặng. Muốn bắt được thì phải đo MÉP PHẢI CỦA TỪNG MỤC so với bề ngang
        khung nhìn, đừng hỏi `scrollWidth`. Đúng họ bẫy "đo đúng, hỏi sai câu".
     Thu khoảng cách xuống 12px là vừa: 3 mục ~97px + 2 khe 12px = 315 < 358. */
  body.home .hero-highlights{gap:12px;}

  /* RC12 — khối ưu đãi bị bóp nát.
     `body.home .promo-banner-text{padding:36px 40px}` không có bản mobile, nên thẻ rộng
     342px chỉ còn 130px cho chữ: tiêu đề 34px phải xuống 3 dòng. 23% bề ngang đổ vào
     khoảng trắng. Luật `.promo-banner-text{padding:32px 28px}` ở khối 640px phía trên
     thua về độ ưu tiên nên không với tới được — phải khai lại có `body.home`. */
  /* 🔴 Gốc rễ nằm ở đây, không phải ở padding: `.promo-banner{grid-template-columns:1fr}`
     của khối 900px thua `body.home .promo-banner{grid-template-columns:62% 38%}` về độ ưu
     tiên. Cột ảnh đã `display:none` nhưng LƯỚI VẪN GIỮ CHỖ 38% — chữ chỉ được 62% của
     342px = 212px, trừ đệm còn 130px. Trả về 1 cột thì chữ được đủ 294px. */
  body.home .promo-banner{grid-template-columns:1fr; min-height:0;}
  body.home .promo-banner-text{padding:24px 20px;}
  body.home .promo-banner .headline{font-size:17px;}
  body.home .promo-banner .headline b{font-size:1.45em;}
  body.home .promo-banner .sub{margin:10px 0 16px;}

  /* Tiêu đề tin cắt giữa chữ ở 2 dòng trong khi mobile còn thừa chiều dọc */
  .news-title{-webkit-line-clamp:3;}

  /* Cả 3 ô nhập lẫn nút gửi đều tràn hết bề ngang, thành một cột thẳng hàng.
     Ô nhập để `min-width:220px` với flex-grow mặc định là 0 nên chúng dừng ở 237px
     trong khung 262px — lệch 25px so với nút, nhìn ra ngay là so le. */
  .cta-form input{flex:1 1 100%; min-width:0;}
  .cta-form .btn{flex:1 1 100%; padding:0 24px;}

  /* Biểu tượng đầu ô chọn ăn mất 25px trong một ô chỉ rộng ~155px, làm "Chọn khoảng giá"
     cụt thành "Chọn khoả". Bỏ biểu tượng, giữ mũi tên xổ xuống là đủ dấu hiệu. */
  .filter-select svg.ic{display:none;}
  /* `--fs-pad-l` giảm theo vì icon đã ẩn — nếu để 39px thì chữ thụt vào một khoảng trống.
     Đổi biến ở đây thay vì khai `.filter-select select{padding-left:...}` lần thứ hai,
     để không có hai luật cùng selector cho minify gộp nhầm. Xem khối gốc ở đầu file. */
  .filter-select{gap:6px; padding:0 10px; --fs-pad-l:10px;}
}

/* Bản vá RC12 ở đây (hạ logo còn 16px và thu chữ "NHA TRANG") đã BỎ ở vòng 21.
   Lý do gốc của nó là chữ "NHA TRANG" nằm cùng hàng với logo nên tràn 24px và đè
   nút hamburger ở 390px. Vòng 20 đã tách tên đại lý xuống hàng riêng nên nguyên
   nhân đó không còn, và luật hạ logo chỉ làm logo nhỏ đi vô cớ.
   Chiều cao logo trên điện thoại nay do `.hd-brand .brand .hlogo{height:19px}`
   ở khối ≤1150px quyết định. */
@media (max-width:414px){
  .brand{gap:8px;}
}

/* RC12 — vùng chạm của chấm mạng xã hội trên đầu trang mới 24×24px (chuẩn 44).
   ⚠️ Phép tính phải khớp với `gap`, không nới bừa: nới mỗi bên 10px trong khi hai chấm
   chỉ cách nhau 8px thì hai vùng chạm ĐÈ NHAU 12px — bấm vào giữa không biết trúng chấm
   nào, còn tệ hơn nút nhỏ. Bản đầu của RC12 đã sai đúng chỗ này.
   Công thức đúng: (nới × 2) ≤ gap. Ở mobile phóng chấm lên 32px, gap 12px, nới 6px
   → vùng chạm 44px vừa đủ chuẩn, và hai vùng chạm cạnh nhau vừa chạm mép chứ không đè. */
.social-dot{position:relative;}
@media (max-width:768px){
  .social-dot{width:32px; height:32px; font-size:12px;}
  .social-dot::after{content:""; position:absolute; inset:-6px;}
}

/* RC12 — Safari trên iPhone TỰ PHÓNG TO cả trang khi khách bấm vào ô nhập có cỡ chữ
   dưới 16px, và không tự thu lại. 4 ô ở "Tìm xe nhanh" + 1 ô ở Bảng giá đang để 14px.
   Chỉ nâng ở mobile, desktop giữ 14px như thiết kế. */
@media (max-width:768px){
  /* `select.filter-select` (ô chọn xe trong công cụ trả góp) mang class ngay trên chính thẻ
     select chứ không nằm trong bọc `.filter-select`, nên `.filter-select select` không với
     tới — nó rơi về cỡ mặc định 13,3px của trình duyệt. Phải kể tên cả hai dạng. */
  .filter-select select, select.filter-select, .price-toolbar select, .contact-select{font-size:16px;}
  /* Ô tìm kiếm ở đầu trang cũng dính bẫy này — 14,5px, khách bấm vào là trang phóng to */
  .hnt-search input[type="search"]{font-size:16px;}
}

/* ==========================================================================
   RC13 — GỌN GIAO DIỆN ĐIỆN THOẠI TRANG CHỦ  ·  08/08/2026
   Khách phản hồi: "giao diện trên đt xấu quá, khó theo dõi thông tin,
   hình ảnh to quá". Đo ở 390px/DPR3 trên site thật:

     Trang chủ 11.390px = 13,5 lần cuộn màn hình 844px
     Xe nổi bật 3.878px (34%) · Tin tức 1.901px (17%) · Đánh giá 1.469px (13%)
     = 64% toàn trang nằm ở 3 khối này

   ⚠️ Ảnh KHÔNG nặng quá — đo được 0/17 ảnh vượt kích thước cần thiết ở DPR 3
   (thực tế còn hơi thiếu nét). Nợ kỹ thuật "ảnh dư 2,2–2,6×" ghi trong log là
   số đo ở DPR 1, không đúng với điện thoại thật. Vấn đề là ảnh chiếm quá nhiều
   CHIỀU CAO: mỗi ảnh xe 257px = 30% màn hình, mỗi ảnh tin 342px = 41%.

   Vì sao mỗi thẻ xe cao 485px: ảnh xe là ảnh CẮT NỀN, RC11 đã đo 12/12 ảnh
   đại diện trong suốt 55–70%. Hơn nửa khung ảnh là khoảng trắng rỗng. Desktop
   lưới 4 cột nên không ai thấy; mobile xếp dọc 8 xe thì thành ~1.000px trống.

   Khách đã duyệt PA1 (2 cột) + gọn Tin tức & Đánh giá + bớt khoảng trống
   hero/chân trang. KHÔNG nâng cỡ chữ then chốt (khách để trống ô đó).

   PHẠM VI: chỉ CSS, chỉ dưới 640px. Desktop không đổi một pixel nào.

   🔴 Vì sao mọi luật ở đây đều khoanh `body.home .car-row .car-card` chứ không
      phải `.car-card`: đã grep, `.car-card` dùng chung với 6 template
      (404.php, page-cam-on.php, search.php, woocommerce/archive-product.php,
      woocommerce/single-product.php, front-page.php). `.news-card` dùng chung
      với 5 (archive, index, search, single, front-page). `.review-card` với 2
      (front-page, woocommerce/single-product). Khai trần là hỏng cả cửa hàng,
      danh mục xe, trang tin và trang chi tiết xe.

   🔴 Vì sao `flex` của `.car-card` được sửa TẠI CHỖ ở dòng 1687 chứ không đè
      bằng luật thứ hai: LiteSpeed minify gộp selector trùng nhau và giữ giá trị
      khai TRƯỚC khi trùng CÙNG thuộc tính — luật đè sau sẽ bị nuốt mất.
   ========================================================================== */
@media (max-width:640px){

  /* ---------- 1. XE NỔI BẬT — 2 cột (PA1) ----------
     Bố cục 2 cột đã có sẵn từ mốc 1100px (`flex:0 0 calc(50% - 12px)`), dòng
     1687 mới là chỗ hạ về 1 cột. Đã sửa dòng đó thành `calc(50% - 5px)`.
     Ở 390px: khung 358px (trừ 16px đệm mỗi bên) − gap 10px = 174px mỗi thẻ.
     Khung ảnh giữ tỉ lệ 4/3 nên cao 130px thay vì 257px. */
  body.home .car-row{gap:10px;}
  body.home .car-row .car-card{border-radius:14px;}
  body.home .car-row .car-card .car-body{padding:10px 11px 12px;}
  body.home .car-row .car-card .car-name{font-size:15px; margin:0 0 2px;}
  body.home .car-row .car-card .car-price-row{gap:5px; margin-bottom:5px;}
  body.home .car-row .car-card .car-price{font-size:16px;}

  /* Giá cũ gạch ngang bị ẩn ở mobile: trong 174px nó phải xuống dòng riêng,
     mà nhãn "Ưu đãi -65 triệu" ngay dưới đã nói đúng số tiền tiết kiệm —
     giữ cả hai là lặp thông tin và tốn thêm ~18px mỗi thẻ. Desktop vẫn hiện. */
  body.home .car-row .car-card .car-price-old{display:none;}

  /* Nhãn ưu đãi lên 11,5px và bỏ lề dưới: nó là dòng cuối của thẻ rồi. */
  body.home .car-row .car-card .tag{font-size:11.5px; padding:3px 8px; margin-bottom:0;}

  /* "Xem chi tiết →" ẩn ở mobile: cả thẻ đã là <a> bấm được (dòng 1064
     `.car-card{display:block}`), nên dòng chữ này chỉ tốn 30px mà không thêm
     đường dẫn nào. Desktop giữ lại vì ở đó nó là dấu hiệu bấm được. */
  body.home .car-row .car-card .car-link{display:none;}

  /* Nút trái tim 30px trên thẻ 166px trông quá to so với ảnh xe */

  /* Dải "HOT" có `width:150px` cố định (dòng 1587). Thẻ nhỏ đi một nửa thì dải
     chiếm tỉ lệ gấp đôi — nó che mất một phần đầu xe. Thu lại theo tỉ lệ.
     ⚠️ Không thu bừa: comment dòng 1585 ghi dải PHẢI đủ dài để hai đầu ăn ra
     ngoài khung ảnh, nếu không sẽ hở hai góc nhọn. Tính lại hình học:
     dải rộng 104px quay -45° quanh tâm → nửa chiều dài 52px, hình chiếu 36,8px.
     Với left:-26px, top:11px thì đầu dưới ra khỏi mép trái ở x=-10,8 (y=57,8,
     nằm trong khung ảnh cao 123px) và đầu trên ra khỏi mép trên ở y=-15,8
     (x=62,8, nằm trong thẻ rộng 166px). Cả hai đầu đều ăn ra ngoài → kín góc. */
  /* Vòng 18b — nhãn số chỗ nhỏ lại trên thẻ 2 cột, đúng nếp .fav cũ từng dùng.
     Không chạm dải HOT: nhãn ở góc PHẢI, dải HOT ở góc TRÁI. */
  body.home .car-row .car-card .seat-badge{top:7px; right:7px; font-size:11px; padding:4px 8px;}
  body.home .car-row .car-card .car-badge{top:11px; left:-26px; width:104px;
    font-size:10px; padding:4px 0; letter-spacing:.12em;}

  /* ---------- 2. TIN TỨC — hàng danh sách ngang ----------
     Gốc rễ: `.news-img{aspect-ratio:1/1}` (dòng 260) làm ảnh VUÔNG, nên ở
     342px rộng thì cao đúng 342px = 41% màn hình. Mỗi thẻ tin 634px cho một
     tiêu đề 3 dòng. Chuyển sang hàng ngang: ảnh 104×78 bên trái. */
  body.home .news-grid{gap:9px;}
  body.home .news-card{display:flex; gap:12px; align-items:flex-start;
    padding:10px; border-radius:12px;}
  body.home .news-card .news-img{flex:0 0 104px; width:104px; aspect-ratio:4/3;
    border-radius:8px;}
  body.home .news-card .news-body{padding:0; min-width:0;}
  body.home .news-card .news-date{font-size:12.5px; margin-bottom:3px;
    text-transform:none; letter-spacing:0;}
  body.home .news-card .news-title{font-size:14.5px; line-height:1.35; margin:0;
    -webkit-line-clamp:3;}
  body.home .news-card .news-link{display:none;}

  /* ---------- 3. ĐÁNH GIÁ — gọn lề ----------
     Gốc rễ: `.review-card{padding:38px 34px}` (dòng 248) = 76px lề dọc, cộng
     `.avatar{width:64px}` và `.stars{margin-bottom:20px}` → 490px mỗi mục cho
     3 dòng chữ. Đây là khối chữ, không có ảnh, nên chỉ cần siết lề. */

  /* ---------- 4. HERO — bớt khoảng trống chết ----------
     Đo ở 390px: hero 842px = đúng 1 màn hình cho 1 ảnh xe + 1 tiêu đề + 2 nút.
     Phần lớn là `hero-car{min-height:300px}` và đệm 48px của `hero-text`.
     🔴🔴 CẢNH BÁO CŨ ĐÃ LẠC HẬU — ĐỌC KỸ TRƯỚC KHI SỬA CHỖ NÀY.
        Bản cũ ghi: "KHÔNG giảm hero-highlights{margin-bottom:36px} — RC12 đặt 36px
        đó để chống thẻ Tìm xe nhanh đè lên 3 ô hero". Cảnh báo ấy bảo vệ PHẦN TỬ
        ĐỨNG CUỐI CÙNG trong cột chữ, chứ không bảo vệ riêng cụm điểm nhấn.
        Ngày 20/08 tôi dời cụm điểm nhấn LÊN TRÊN hai nút theo ảnh mẫu anh Vũ. Cụm
        vẫn giữ nguyên 36px như cảnh báo dặn — nhưng nó không còn đứng cuối nữa, nên
        36px đó rơi vào giữa hai khối và KHOẢNG CHỪA Ở ĐÁY BIẾN MẤT. Thẻ "Tìm xe
        nhanh" cắt mất 24px đáy của cả hai nút, ở cả 360 · 390 · 430px. Anh Vũ bắt
        được bằng mắt trên iPhone thật; không phép đo nào của tôi báo, vì đè nhau
        không làm trang cao thêm cũng không làm tràn ngang.
     → LUẬT: khoảng chừa phải bám vào PHẦN TỬ CUỐI của `.hero-text`, không bám vào
        một class cụ thể. Nay phần tử cuối là `.hero-cta`, nên lề dưới nằm ở đó.
        Đổi thứ tự lần nữa thì phải dời lề dưới theo.
     ⚠️ Đo bằng phép GIAO NHAU của hai hình chữ nhật (`do-dau-trang-dt.js`), đừng
        đo bằng chiều cao trang. */
  /* 🔴 20/08 tối — ẢNH XE TO LÊN theo yêu cầu anh Vũ, ăn vào chỗ vừa dọn được từ
     hàng chấm tròn. Ảnh tràn qua hai mép lề của `.wrap` bằng lề âm: xe cắt nền
     nên phần thừa hai bên là khoảng trong suốt, tràn ra không lộ mép hộp.
     🔴 `max-width:none` là BẮT BUỘC — không có nó thì `max-width:720px` ở khối máy
        tính vẫn khoá và `width:118%` không ăn một chút nào.
     🔴 118% LÀ TRẦN ĐO ĐƯỢC, không phải con số chọn cho đẹp. Đo bằng
        `qa/do-be-rong-xe.js`: nó đọc kênh alpha để biết THÂN XE thật nằm đâu, trên
        CẢ BỐN slide (mỗi ảnh có khoảng trong suốt quanh xe khác nhau).
            112% → xe cách mép trái 21–33px
            118% → xe cách mép trái  7–19px   ← trần
            124% → 3 trong 4 xe BỊ CẮT (−7, −5, −1)
     🔴 Đừng dùng phép đo "trang có tràn ngang không" để canh chỗ này: nó báo 0px
        ở cả mức 130% trong khi xe đã cụt đầu, vì phần tràn bị hộp cha cắt chứ không
        làm trang cuộn. Phải đo pixel của xe, hoặc nhìn ảnh chụp. */
  body.home .hero-car{min-height:250px;}
  body.home .hero-car img{width:118%; max-width:none; margin-left:-9%;}
  body.home .hero-text{padding:26px 0 4px;}
  body.home .hero-text h1{font-size:30px; margin:0 0 8px;}
  body.home .hero-text p{font-size:15px;}
  body.home .hero-cta{margin:14px 0 44px;}

  /* ---------- 5. CHÂN TRANG — ĐÃ RÚT, KHÔNG SỬA ----------
     🔴 Bản đầu của RC13 có siết lề chân trang. Đo A/B ra kết quả NGƯỢC:
        chân trang 1.110px → 1.151px, TĂNG 41px.

     Nguyên nhân: dòng 1255 đã có `@media (max-width:900px){.footer-cols a{
     line-height:1.5; padding:11px 0}}` — comment ở dòng 1248 ghi rõ đó là bản
     vá a11y ngày 05/08: "14 link/nút ở header–footer chỉ cao ~30px, nâng lên
     >= 40px" cho đủ chuẩn vùng chạm. Luật `line-height:1.95` của bản đầu đè
     lên `1.5`, làm mỗi link cao thêm ~6px × 15 link ≈ +90px, ăn hết phần
     tiết kiệm được từ đệm.

     → Bỏ hẳn. Chân trang đang vừa: mỗi link 42px là đúng chuẩn vùng chạm,
       siết nữa là phá bản vá a11y. 1.110px trên tổng 7.028px chỉ còn 16%,
       không còn là chỗ đáng sửa.
     → Bài học: grep luật cũ ĐỪNG cắt bằng `head`. Bản đầu tôi grep
       `head -20` nên không thấy dòng 1255. */
}

/* ==========================================================================
   RC14 — TRANG BÀI VIẾT & TRANG CHI TIẾT XE TRÊN ĐIỆN THOẠI · 08/08/2026
   Khách duyệt qua mockup. Gói 1–4 ở đây (chỉ CSS). Gói 5 (accordion, sửa PHP)
   tách riêng vì cần kiểm axe trước.
   ========================================================================== */

/* --------------------------------------------------------------------------
   GÓI 1 — SỬA LỖI: ảnh trong bài viết đẩy cả tài liệu rộng ra
   ⚠️ ĐÂY LÀ LỖI HỎNG LAYOUT, không phải chuyện gọn đẹp. Áp ở MỌI bề ngang,
      không đặt trong @media.

   Đo ngày 08/08/2026 ở khung 390px: 3/6 bài viết mẫu có tài liệu rộng
   746px · 926px · 1047px. Bài `/5530-2/` còn tệ hơn: 2058px.
   Hậu quả: Safari phải thu nhỏ cả trang cho vừa, nên thanh header (rộng 100%
   khung nhìn = 390px) chỉ còn chiếm 390/1047 ≈ 37% màn hình — đúng cái khách
   chụp lại: header và thanh CTA đáy chỉ phủ ~43%, còn lại trắng trơn.

   🔴 Vì sao luật `.article-content img{max-width:100%}` ở dòng 915 KHÔNG cứu được:
      thủ phạm không phải `<img>` mà là thẻ BỌC NGOÀI. WordPress cổ điển xuất
        <div id="attachment_5521" style="width: 2058px" class="wp-caption aligncenter">
      Ảnh bên trong đúng là 100% — nhưng của khung 2058px. Phải nhắm vào .wp-caption.

   🔴 Vì sao cần `!important`: chiều rộng nằm trong `style=""` INLINE, mà inline
      thắng mọi luật CSS thường. Đây là một trong rất ít chỗ `!important` là
      đúng chứ không phải cách làm tắt.
   -------------------------------------------------------------------------- */
.article-content .wp-caption{width:auto !important; max-width:100% !important;}
.article-content figure,
.article-content .wp-block-image{max-width:100%;}
.article-content .wp-caption-text{max-width:100%; box-sizing:border-box;}
.article-content table{max-width:100%;}
/* URL dài dán thẳng trong bài cũng đẩy khung rộng ra */
.article-content{overflow-wrap:break-word;}


@media (max-width:640px){

  /* ------------------------------------------------------------------------
     GÓI 2 — KHUNG MỖI KHỐI GỌN LẠI (áp cho MỌI trang)
     Đo trang chi tiết xe: 18.914px = 22,4 lần cuộn, chia đều cho 14 khối,
     KHÔNG khối nào vượt 13%. Nên thủ phạm là thứ dùng chung — chrome của khối:

       đệm khối 56px × 2   (`section{padding:56px 0}`, dòng 632, mốc 900px)
     + nhãn nhỏ           ~28px
     + tiêu đề 30px 2 dòng ~76px
     + `.section-head{margin-bottom:40px}` (dòng 162)
     = ~256px mỗi khối × 14 khối ≈ 3.584px = 4,2 lần cuộn CHỈ ĐỂ NGĂN CÁCH.

     Khách đã đồng ý áp toàn site (12 trang), không riêng trang xe.
     `body.home section` và `.section-head.centered h2` được sửa TẠI CHỖ ở
     khối 640px phía trên — vì trùng cả selector lẫn thuộc tính, mà LiteSpeed
     minify giữ giá trị khai TRƯỚC nên luật đè sau sẽ bị nuốt.
     ------------------------------------------------------------------------ */
  section{padding:32px 0;}
  .section-head{margin-bottom:22px;}
  .section-head h2{font-size:23px;}

  /* ------------------------------------------------------------------------
     GÓI 3 — "XE CÙNG TẦM GIÁ" THÀNH 2 CỘT
     Dùng lại đúng công thức đã duyệt ở RC13 cho trang chủ, để hai nơi nhất quán.
     Khối này dùng `.model-grid` (không phải `.car-row` như trang chủ) — dòng 351
     hạ nó về 1 cột ở 640px. Khoanh trong `#similar-cars` nên KHÔNG đụng
     `.model-grid` ở các trang khác, và không đụng `.car-card` của 6 template
     dùng chung (404, cảm ơn, tìm kiếm, cửa hàng, trang xe, trang chủ).
     ------------------------------------------------------------------------ */
  #similar-cars .model-grid{grid-template-columns:1fr 1fr; gap:10px;}
  #similar-cars .car-card{border-radius:14px;}
  #similar-cars .car-card .car-body{padding:10px 11px 12px;}
  #similar-cars .car-card .car-name{font-size:15px; margin:0 0 2px;}
  #similar-cars .car-card .car-spec{font-size:12px; margin-bottom:5px; gap:8px;}
  #similar-cars .car-card .car-price-row{gap:5px; margin-bottom:5px;}
  #similar-cars .car-card .car-price{font-size:16px;}
  #similar-cars .car-card .car-price-old{display:none;}
  #similar-cars .car-card .tag{font-size:11.5px; padding:3px 8px; margin-bottom:0;}
  #similar-cars .car-card .car-link{display:none;}
  /* Hình học dải HOT tính lại cho thẻ ~166px — xem chú thích RC13 cuối file */
  #similar-cars .car-card .car-badge{top:11px; left:-26px; width:104px;
    font-size:10px; padding:4px 0; letter-spacing:.12em;}

  /* ------------------------------------------------------------------------
     GÓI 4 — "CAM KẾT" VÀ "VÌ SAO XE NÀY" THÀNH 2 CỘT GỌN
     Đây đúng khối trong ảnh thứ hai khách gửi: 4 dòng, mỗi dòng ~155px cho
     một câu ngắn. Gốc rễ ở dòng 232–236:
       `.why-card{padding:38px 32px}`  = 76px lề dọc
       `.why-icon{width:60px;height:60px;margin-bottom:24px}`
     và dòng 646 hạ `.why-grid` về 1 cột ở 640px.

     ⚠️ Khoanh trong `#commitments` và `#why-this-car` chứ KHÔNG khai trần
        `.why-card`: class này dùng chung với trang Giới thiệu (dòng 935 ghi rõ
        "tái dùng .why-card") và trang chủ. Khai trần là đổi luôn hai trang đó.
     ------------------------------------------------------------------------ */
  #commitments .why-grid,
  #why-this-car .why-grid{grid-template-columns:1fr 1fr; gap:9px; margin-bottom:0;}
  #commitments .why-card,
  #why-this-car .why-card{padding:13px 12px; border-radius:12px;}
  #commitments .why-icon,
  #why-this-car .why-icon{width:32px; height:32px; border-radius:9px; margin-bottom:9px;}
  #commitments .why-icon svg,
  #why-this-car .why-icon svg{width:17px; height:17px;}
  #commitments .why-card h3,
  #why-this-car .why-card h3{font-size:13.5px; margin:0 0 5px; line-height:1.32;}
  #commitments .why-card p,
  #why-this-car .why-card p{font-size:12.5px; line-height:1.5;}
}

/* ==========================================================================
   RC15 — GẬP 4 KHỐI DÀI Ở TRANG XE + GỌN Ở 768px (iPad dọc) · 08/08/2026
   ========================================================================== */

/* --------------------------------------------------------------------------
   GÓI 5 — `.pdp-fold`: GẬP 4 KHỐI DÀI CỦA TRANG XE, CHỈ TRÊN ĐIỆN THOẠI
   Đo 08/08/2026 ở 390px trên site thật: 15.133px (17,9 lần cuộn) → 11.619px
   (13,8 lần cuộn). Bốn khối: #why-this-car 827 · #quick-info 1.698 ·
   #reviews 1.088 · #commitments 530 = 4.143px, gập còn 629px.

   ✅ CÁCH ĐANG DÙNG — PHP quyết định, CSS không dính dáng gì tới việc mở/gập:
      `hnt_pdp_fold_mo()` ở functions.php xuất `<details class="pdp-fold">` khi
      `wp_is_mobile()`, còn máy tính thì xuất ĐÚNG markup cũ (`div.section-head`),
      không thêm một thẻ nào. Desktop giống hệt trước gói 5 theo CẤU TRÚC chứ
      không phải giống nhờ đo rồi chỉnh cho khớp.
      ⚠️ Kèm theo đó, LiteSpeed PHẢI bật Cache → Cache Mobile, và functions.php
         có bộ lọc `wp_is_mobile` ép hai bên dùng chung một định nghĩa. Xem chú
         thích dài ở functions.php trước khi đụng vào bất kỳ phần nào.

   🔴 CÁCH ĐÃ THỬ VÀ THẤT BẠI (RC15, đã đẩy lên site thật rồi phải hoàn tác):
      bọc `<details>` ở MỌI bề ngang rồi `@media (min-width:641px){.pdp-fold{
      display:contents}}` để mở lại ở desktop. **`display:contents` KHÔNG mở
      được `<details>` đang đóng** — Chromium ẩn nội dung bằng cơ chế riêng
      (`content-visibility`), không phải bằng `display` của thẻ cha. Trang xe
      desktop tụt 10.203px → 8.411px vì nội dung 4 khối không được vẽ.
      ĐỪNG LÀM LẠI THEO HƯỚNG ĐÓ.

   💡 Bẫy đo đi kèm: `getBoundingClientRect()` của phần tử CON trong `<details>`
      đóng **vẫn trả kích thước thật**, và axe-core cũng báo 0 lỗi, vì cả hai
      đều không kiểm "nội dung có được vẽ hay không". Phép đo đúng duy nhất là
      chiều cao của `<section>` BAO NGOÀI hoặc `document.scrollHeight`.

   ✅ SEO an toàn: nội dung gập vẫn nằm nguyên trong HTML, Google đọc đủ.
   -------------------------------------------------------------------------- */
/* 🔴 KHÔNG có media query nào ở khối này, và đó là chủ ý.
   `.pdp-fold` CHỈ tồn tại trong HTML khi PHP đã xác định là điện thoại
   (`hnt_pdp_fold_mo()` ở functions.php). Máy tính nhận đúng markup cũ — một
   `<div class="section-head">` — nên không cần luật nào để "mở lại" ở desktop.

   Nếu khoá theo `@media (max-width:640px)` thì điện thoại XOAY NGANG (844px)
   sẽ vừa đang gập vừa mất mũi tên và mất vùng chạm 48px — gập mà không có
   dấu hiệu nào cho biết bấm được. Khoá theo sự tồn tại của class thì đúng ở
   mọi bề ngang của máy đó. */
.pdp-fold{display:block;}
/* 🔴 `flex-wrap:nowrap` là BẮT BUỘC, không phải làm đẹp. `.section-head` (dòng 162)
   khai `flex-wrap:wrap`; tiêu đề 2 dòng của khối "Vì sao chọn X" đủ rộng để đẩy
   mũi tên xuống DÒNG FLEX THỨ HAI — mũi tên rơi xuống dưới, nằm lệch trái, và
   sinh thêm một khoảng trống bằng chiều cao dòng đó. Chỉ nhìn số đo thì không
   thấy; phải chụp ảnh mới lộ. */
.pdp-fold > summary{list-style:none; cursor:pointer; min-height:48px;
  padding:4px 0; align-items:center; flex-wrap:nowrap;}
.pdp-fold > summary::-webkit-details-marker{display:none;}
.pdp-fold > summary::marker{content:"";}
.pdp-fold > summary:focus-visible{outline:3px solid var(--accent); outline-offset:3px;}
/* Ký tự mũi tên đặt bằng CSS để PHP không phải mang theo ký tự đặc biệt. */
.pdp-fold-ar{color:var(--text-2); font-size:16px; flex:none; line-height:1;
  transition:transform .2s ease-out;}
.pdp-fold-ar::before{content:"\25BE";}
.pdp-fold[open] > summary .pdp-fold-ar{transform:rotate(180deg);}
/* `.section-head{margin-bottom:22px}` của RC14 là khoảng cách tới nội dung —
   khi đang gập thì không có nội dung nào bên dưới, khoảng đó thành trống. */
.pdp-fold:not([open]) > summary{margin-bottom:0;}
/* Vòng 16 — dòng phụ nói rõ bên trong khối gập có gì ("5 phiên bản · 39 dòng thông số").
   Chỉ có trên điện thoại, vì tham số $sub của hnt_pdp_fold_mo() chỉ xuất ở nhánh mobile. */
.pdp-fold-sub{margin:5px 0 0; font-size:12.5px; font-weight:600; color:var(--text-2); line-height:1.4;}
@media (prefers-reduced-motion:reduce){
  .pdp-fold-ar{transition:none;}
}


/* --------------------------------------------------------------------------
   VÒNG 16 — `.pb-fold`: GẬP TỪNG DÒNG XE Ở TRANG BẢNG GIÁ, CHỈ TRÊN ĐIỆN THOẠI

   Đo 11/08/2026 @390px trên site thật: trang bảng giá 15.732px = 18,6 lần cuộn,
   trang DÀI NHẤT của cả site và chưa được soi vòng nào. `#price-list` chiếm
   11.342px (72%), bóc ra thành:
     · 12 đầu xe   × 402px = 4.824px  ← desktop chỉ 200px cho cùng lượng thông tin
     · 40 hàng trim         = 5.762px  ← desktop 54px/hàng, mobile 144px

   Gập từng dòng xe + nén đầu xe: đầu xe 402 → ~165px, hàng trim 144 → ~77px.

   🔴 KHÔNG có media query, cùng lý do với `.pdp-fold` ở trên: `.pb-fold` chỉ tồn
      tại trong HTML khi PHP đã xác định là điện thoại (`hnt_gia_fold_dau()`).
      Khoá theo sự tồn tại của class thì đúng ở mọi bề ngang của máy đó, kể cả khi
      xoay ngang 844px.

   🔴 Con số then chốt PHẢI nằm ngoài khối gập. Đây là trang khách vào để TRA GIÁ —
      gập hết giá lại là phá đúng việc chính của trang. Nên `<summary>` vẫn hiện
      "Giá từ 375 triệu · 3 phiên bản" và nhãn "Giảm đến 5 triệu".

   🔴 Link "Xem chi tiết xe" KHÔNG được nằm trong `<summary>`: link lồng trong
      summary là lỗi `nested-interactive`, và bấm vào nó sẽ gập/mở khối chứ không
      điều hướng. Xem `.pb-fold-link` cuối khối này.
   -------------------------------------------------------------------------- */
.pb-fold{display:block;}
.pb-fold > summary{list-style:none; cursor:pointer; touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
  display:grid; grid-template-columns:104px 1fr; gap:13px; align-items:center;
  padding:14px 15px; background:linear-gradient(180deg,#f8fbfd 0%,#fff 100%);}
.pb-fold > summary::-webkit-details-marker{display:none;}
.pb-fold > summary::marker{content:"";}
.pb-fold > summary:focus-visible{outline:3px solid var(--accent); outline-offset:-3px;}
.pb-fold[open] > summary{border-bottom:1px solid var(--border);}
/* ảnh 104px thay vì 220px: RC11 đã đo 12/12 ảnh đại diện là ảnh cắt nền, trong suốt
   55–70% — hơn nửa khung ảnh là khoảng trắng thật, xếp dọc 12 xe thì thành ~1.000px rỗng */
.pb-fold > summary .price-block-img{max-width:none; aspect-ratio:4/3; border-radius:11px;}
.pb-fold > summary .price-block-tags{margin-bottom:5px;}
/* 12px theo đúng gói 2, không hạ xuống 10,5px cho vừa mắt: cột chữ rộng 213px
   (330 − 104 ảnh − 13 gap), hai nhãn "Đô thị" + "Giảm đến 5 triệu" ở 12px ≈ 180px
   nên vẫn một hàng. Đã đo lại sau khi đẩy. */
.pb-fold > summary .price-block-tags .tag{font-size:12px; padding:2px 8px;}
.pb-fold > summary .price-block-title h2{font-size:17px; line-height:1.2;}
.pb-fold > summary .price-block-meta{margin-top:3px; font-size:12.5px;}
/* dải tóm tắt: chỗ giữ con số then chốt khi khối đang gập. min-height 44px cho vùng chạm. */
.pb-fold-foot{grid-column:1/-1; display:flex; align-items:center; gap:9px; min-height:44px;
  margin-top:9px; padding-top:9px; border-top:1px solid var(--border);}
.pb-fold-from{font-size:12.5px; color:var(--text-2);}
.pb-fold-from b{font-size:16.5px; font-weight:800; color:var(--primary); letter-spacing:-.015em;}
.pb-fold-n{font-size:12px; font-weight:600; color:var(--text-2);}
.pb-fold-ar{margin-left:auto; flex:none; width:30px; height:30px; border-radius:9px;
  background:var(--accent-soft); color:var(--accent); display:flex; align-items:center;
  justify-content:center; font-size:12px; line-height:1; transition:transform .2s ease-out;}
.pb-fold-ar::before{content:"\25BE";}
.pb-fold[open] .pb-fold-ar{transform:rotate(180deg);}
/* link sang trang xe, đặt NGOÀI summary (xem lý do nested-interactive ở đầu khối) */
.pb-fold-link{display:flex; align-items:center; justify-content:center; gap:7px; min-height:48px;
  padding:0 16px; font-size:13.5px; font-weight:700; color:var(--accent);
  border-top:1px solid var(--border); touch-action:manipulation;}
.pb-fold-link:active{background:var(--accent-soft);}
.pb-fold-link:focus-visible{outline:3px solid var(--accent); outline-offset:-3px;}
@media (prefers-reduced-motion:reduce){
  .pb-fold-ar{transition:none;}
}


/* --------------------------------------------------------------------------
   GÓI 6 — 768px (iPad dọc). Khách xác nhận có làm.
   Ở 768px trang chủ 10.312px và trang xe 17.194px — gần như không được hưởng
   gì từ RC13/RC14 vì hai vòng đó chỉ áp dưới 640px.

   🔴 Thủ phạm nặng nhất ở dải này: dòng 646 hạ `.news-grid` về **1 cột** từ mốc
      900px, cộng `.news-img{aspect-ratio:1/1}` (dòng 260) → ở 768px ảnh tin
      rộng ~736px thì **cao đúng 736px**, gần bằng cả màn hình.

   ⚠️ KHÔNG nới thẳng các luật 640px lên 900px: ở 768px thẻ xe 2 cột đã có sẵn
      (dòng 1682, mốc 1100px), còn hàng tin dạng ngang với ảnh 104px thì chữ bị
      kéo rộng 600px trông loãng. Dải này cần biến thể riêng: **2 cột**, không
      phải hàng danh sách.
   -------------------------------------------------------------------------- */
@media (min-width:641px) and (max-width:900px){
  section{padding:40px 0;}
  .section-head{margin-bottom:26px;}
  .section-head h2{font-size:26px;}

  /* Tin tức: 2 cột, ảnh 16/10 thay vì vuông */
  .news-grid{grid-template-columns:1fr 1fr; gap:14px;}
  .news-img{aspect-ratio:16/10;}
  .news-body{padding:16px 16px 18px;}
  .news-date{margin-bottom:9px;}
  .news-title{font-size:16px; margin:0 0 12px;}

  /* Đánh giá: 2 cột, siết lề (mặc định 38px 34px) */

  /* Cam kết & "vì sao xe này": 2 cột (mặc định 1 cột từ dòng 646) */
  #commitments .why-grid,
  #why-this-car .why-grid{grid-template-columns:1fr 1fr; gap:14px; margin-bottom:0;}
  #commitments .why-card,
  #why-this-car .why-card{padding:18px 16px;}
  #commitments .why-icon,
  #why-this-car .why-icon{width:42px; height:42px; border-radius:12px; margin-bottom:14px;}
  #commitments .why-icon svg,
  #why-this-car .why-icon svg{width:21px; height:21px;}
}

/* ==========================================================================
   GÓI 6 — MẬT ĐỘ TRANG CHI TIẾT XE + SO SÁNH PHIÊN BẢN · 08/08/2026
   Bản gốc khối CSS đã áp vào main.css, giữ kèm toàn bộ lý do — đọc file này
   nhanh hơn dò trong main.css hơn 2.100 dòng. Cùng nếp rc13/rc14/rc15/goi5.css.

   🔴 MỌI luật đè lên class có sẵn đều dùng SELECTOR DÀI HƠN luật gốc
      (`#cost .cost-item` chứ không phải `.cost-item`). LiteSpeed minify gộp các
      selector TRÙNG NHAU và giữ giá trị khai TRƯỚC — đè bằng luật thứ hai cùng
      selector là mất trắng, không có dấu hiệu gì.

   🔴 Bốn class dưới đây DÙNG CHUNG với template khác nên không nhắm class trần:
      `.tool-card` `.tools-grid` — còn ở #tools và trang Giới thiệu
      `.hh` `.hh-icon`           — còn ở khối hero trang chủ
   ========================================================================== */

.hnt-ic{display:block; flex:none;}

/* ── Dải thông số, gộp từ #quick-info · ÁP CẢ MÁY TÍNH ─────────────────────
   Thay 6 thẻ `.tool-card` (mỗi thẻ 244px ở điện thoại = 1.464px) bằng ô nhỏ. */
/* Con số là nhân vật chính. Trước đây nhãn và giá trị gần bằng nhau về sức nặng
   nên cả dải đọc ra như một bảng dữ liệu — đúng nhưng nhạt. Nay giá trị to gấp
   đôi nhãn, nhãn lùi về chữ nhỏ in hoa. Cùng một dữ liệu, khác hẳn cách đọc.
   Vạch accent trên đầu mỗi ô để cả dải đọc thành MỘT dải thông số, không phải 6
   cái thẻ rời. */
.spec-strip{display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:26px;}
.spec-strip .spec-cell{
  position:relative; display:flex; align-items:center; gap:12px;
  background:#fff; border-radius:14px; box-shadow:var(--shadow-card);
  padding:16px 18px; overflow:hidden;
}
.spec-strip .spec-cell::before{content:""; position:absolute; inset:0 auto 0 0; width:3px; background:var(--accent); opacity:.85;}
.spec-strip .sc-ic{width:36px; height:36px; flex:none; border-radius:11px; background:var(--accent-soft); color:var(--accent); display:flex; align-items:center; justify-content:center;}
.spec-strip .sc-k{font-size:12px; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:var(--text-2); line-height:1;}
.spec-strip .sc-v{font-size:19px; font-weight:800; color:var(--primary); margin-top:5px; line-height:1.2; letter-spacing:-.01em;}

/* Thẻ "vì sao chọn" — phần GIỚI THIỆU, nên để chữ dẫn dắt chứ không phải khung.
   Icon vào vòng tròn đặc màu accent để bắt mắt trước, tiêu đề nặng hơn, đoạn văn
   nhẹ và thoáng hơn để đọc trôi. */
#why-this-car .why-card{text-align:left; padding:22px 20px;}
#why-this-car .why-card .why-icon{
  width:44px; height:44px; border-radius:50%; margin:0 0 14px;
  background:var(--primary); color:#fff;
  display:flex; align-items:center; justify-content:center;
}
#why-this-car .why-card .why-icon svg{width:21px; height:21px;}
#why-this-car .why-card h3{font-size:16.5px; font-weight:800; color:var(--primary); margin:0 0 7px; line-height:1.28;}
#why-this-car .why-card p{font-size:13px; line-height:1.62; color:var(--text-2); margin:0;}

/* ── Kết quả máy tính: một số chính thay cho 10 dòng ──────────────────────── */
.loan-result .lb-hero{padding-bottom:16px; margin-bottom:4px; border-bottom:1px solid var(--border);}
.loan-result .lb-hero .loan-month{margin:2px 0 0; font-size:30px; font-weight:800; color:var(--primary); letter-spacing:-.01em; line-height:1.15;}
.loan-result .lb-hero .loan-month-sub{margin:4px 0 0; font-size:12px; color:var(--text-2); line-height:1.45;}

/* ── Khối so sánh phiên bản ────────────────────────────────────────────────
   Hai cột thay vì năm: ở 390px thì năm cột còn ~60px mỗi cột, không đọc được. */
#so-sanh-phien-ban .ss{background:#fff; border-radius:var(--radius-card); box-shadow:var(--shadow-card); padding:22px 24px;}
#so-sanh-phien-ban .ss-slots{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:16px;}
#so-sanh-phien-ban .ss-slot{display:flex; flex-direction:column; align-items:flex-start; gap:2px; text-align:left; font:inherit; cursor:pointer; background:#f7fafd; border:1.6px solid var(--border); border-radius:14px; padding:11px 13px; min-height:64px; transition:border-color .18s ease-out;}
#so-sanh-phien-ban .ss-slot:hover,
#so-sanh-phien-ban .ss-slot.is-open{border-color:var(--accent);}
#so-sanh-phien-ban .ss-sl{font-size:12px; font-weight:800; letter-spacing:.05em; text-transform:uppercase; color:var(--accent);}
#so-sanh-phien-ban .ss-sn{font-size:14px; font-weight:800; color:var(--primary); line-height:1.25;}
#so-sanh-phien-ban .ss-doi{font-size:11px; font-weight:700; color:var(--text-2);}
#so-sanh-phien-ban .ss-pick{border:1px solid var(--border); border-radius:14px; padding:10px; margin-bottom:16px; background:#f7fafd;}
#so-sanh-phien-ban .ss-pick-t{margin:0 0 8px; padding:0 3px; font-size:12px; font-weight:800; letter-spacing:.05em; text-transform:uppercase; color:var(--text-2);}
#so-sanh-phien-ban .ss-opt{display:block; width:100%; text-align:left; font:inherit; font-size:13.5px; font-weight:700; color:var(--primary); background:#fff; border:1.4px solid var(--border); border-radius:10px; padding:11px 12px; margin-bottom:7px; min-height:44px; cursor:pointer; transition:border-color .18s ease-out;}
#so-sanh-phien-ban .ss-opt:last-child{margin-bottom:0;}
#so-sanh-phien-ban .ss-opt:hover{border-color:var(--accent);}
#so-sanh-phien-ban .ss-opt.is-chon{border-color:var(--accent); background:var(--accent-soft);}
#so-sanh-phien-ban .ss-opt.is-dung{opacity:.42; cursor:not-allowed;}
#so-sanh-phien-ban .ss-scroll{overflow-x:auto;}
#so-sanh-phien-ban .ss-tbl{width:100%; border-collapse:collapse; font-size:13.5px;}
#so-sanh-phien-ban .ss-tbl th,
#so-sanh-phien-ban .ss-tbl td{padding:10px 10px; text-align:right; vertical-align:top; border-bottom:1px solid var(--border);}
#so-sanh-phien-ban .ss-tbl th[scope=row]{text-align:left; width:36%; font-weight:600; font-size:12.5px; color:var(--text-2); line-height:1.4;}
#so-sanh-phien-ban .ss-tbl td{font-weight:700; color:var(--primary); font-variant-numeric:tabular-nums;}

/* Chỉ ô của phiên bản đang chọn được vẽ. Mọi ô khác VẪN nằm trong DOM, nên tắt
   JS thì bảng vẫn đọc được với cặp mặc định do PHP kết xuất sẵn. */
#so-sanh-phien-ban .ss-v{display:none;}
#so-sanh-phien-ban .ss-v.on{display:block;}

#so-sanh-phien-ban .ss-grp th{text-align:left; padding-top:22px; font-size:12px; font-weight:800; letter-spacing:.05em; text-transform:uppercase; color:var(--accent); border-bottom:0;}
#so-sanh-phien-ban .ss-tag{margin-left:7px; font-size:11.5px; letter-spacing:.03em; color:var(--gold); border:1px solid var(--gold); border-radius:5px; padding:1px 5px;}

/* Dòng hai bên giống nhau thì làm mờ — mắt đi thẳng vào chỗ KHÁC nhau, đó là
   việc duy nhất của một bảng so sánh. */
#so-sanh-phien-ban .ss-same th[scope=row],
#so-sanh-phien-ban .ss-same td{color:var(--text-2); font-weight:600;}
#so-sanh-phien-ban .ss-diff{background:#f4f9ff;}

/* Bên tốt hơn: xanh lá + dấu tích. Luật quyết định bên nào tốt hơn nằm ở hàm
   benTot() trong single-product.js — nó CỐ Ý chỉ kết luận ở hai trường hợp chắc
   chắn (có/không có trang bị, và thông số số học biết rõ chiều nào tốt), còn lại
   để trung tính. Tô nhầm bên là nói với khách rằng bản kém hơn thì tốt hơn.
   Dùng --green (#11803A) vì nó đã đạt tương phản 4,58 trên nền trắng ở RC9. */
#so-sanh-phien-ban .ss-td.ss-tot{color:var(--green); font-weight:800;}
#so-sanh-phien-ban .ss-td.ss-tot::after{
  content:"✓"; display:inline-block; margin-left:6px;
  font-size:11px; font-weight:800; color:var(--green);
  vertical-align:1px;
}

/* 🔴 MẶC ĐỊNH ẨN DÒNG GIỐNG NHAU. Đo ở 390px: bảng đủ cao 4.716px, trong đó 36/80
   hàng là dòng hai bản giống hệt và chiếm 2.002px. Bảng so sánh mà bắt khách tự
   lọc bằng mắt qua hàng chục dòng vô nghĩa là đi ngược mục đích của nó.
   Bấm `.ss-loc` thì thêm class `.ss-du` để xem đủ — không giấu dữ liệu nào. */
#so-sanh-phien-ban .ss-same{display:none;}
#so-sanh-phien-ban .ss-du .ss-same{display:table-row;}
/* Nhóm mà mọi dòng đều bị ẩn thì giấu nốt tiêu đề — không thì trơ lại cái tiêu đề
   không có dòng nào bên dưới, trông như bảng lỗi. Class do JS gắn (veLai). */
#so-sanh-phien-ban .ss-grp-rong{display:none;}
#so-sanh-phien-ban .ss-loc{display:block; width:100%; font:inherit; font-size:12.5px; font-weight:700; color:var(--accent); background:var(--accent-soft); border:0; border-radius:10px; padding:11px 14px; margin-bottom:14px; min-height:44px; cursor:pointer;}
#so-sanh-phien-ban .ss-loc .ss-loc-off{display:none;}
#so-sanh-phien-ban .ss-du .ss-loc .ss-loc-on{display:none;}
#so-sanh-phien-ban .ss-du .ss-loc .ss-loc-off{display:inline;}
#so-sanh-phien-ban .ss-nguon{margin:16px 0 14px; font-size:11.5px; color:var(--text-2); line-height:1.5;}

/* ══ VÒNG 21 — BẢNG THÔNG SỐ NẰM SAU MỘT NÚT ═══════════════════════════════
   Khách: "chỉ hiện sẵn 2 khung của 2 phiên bản thôi, và nút xem đầy đủ thì mới
   hiện ra các thông số. trên mobile cũng vậy."

   Dùng <details>/<summary> chứ không phải class + JS: mở được kể cả khi JS hỏng,
   bàn phím và trình đọc màn hình xử lý đúng mà không phải tự dựng ARIA. Cùng nếp
   với `.pdp-fold`, `.pb-fold`, `.fc-fold`, `.spec-toggle` của dự án.

   ⚠️ Bỏ mũi tên mặc định phải khai ĐỦ BA DÒNG — `list-style` cho Firefox,
      `::-webkit-details-marker` cho Safari/WebKit cũ, `::marker` cho Chromium.
      Thiếu một dòng là một trình duyệt nào đó vẫn hiện tam giác thừa.
   ⚠️ Khối này thay LỚP GẬP NGOÀI của vòng 16 (đã bỏ) — nay chỉ gập bảng, còn hai
      khung chọn phiên bản luôn hiện. Đừng thêm lại lớp gập ngoài. */
/* 🔴 NỀN NHẠT, KHÔNG PHẢI NAVY ĐẶC. Bản đầu tôi để `background:var(--primary)` —
   ảnh chụp lộ ngay: nó nằm sát nút CTA "Nhận tư vấn chọn phiên bản" cũng navy đặc,
   thành hai nút trông ngang hàng. Nhưng một cái chỉ MỞ THÊM NỘI DUNG, còn cái kia là
   nút chuyển đổi — để cùng trọng lượng là làm loãng mất CTA thật.
   Số đo không bắt được lỗi này: cả hai nút đều đủ tương phản, đủ vùng chạm.

   ⚠️ CẬP NHẬT 14/08/2026: nút CTA nói trên ĐÃ BỊ XOÁ theo yêu cầu khách. Lý do gốc của
   luật này vì thế không còn — NHƯNG VẪN GIỮ NỀN NHẠT, và đây là lý do mới: `.ss-xem`
   chỉ MỞ THÊM NỘI DUNG chứ không phải nút chuyển đổi, nên nó không được mang trọng
   lượng thị giác của một CTA. Đừng đọc thấy "nút CTA cạnh nó đã xoá" rồi đổi sang navy đặc. */
#so-sanh-phien-ban .ss-xem{display:flex; align-items:center; justify-content:center; gap:10px;
  list-style:none; cursor:pointer; min-height:48px; padding:12px 18px; border-radius:12px;
  background:var(--accent-soft); color:var(--primary); border:1.5px solid var(--border);
  font-size:14.5px; font-weight:700; line-height:1.35; text-align:center;
  transition:border-color .18s ease-out, background .18s ease-out;}
#so-sanh-phien-ban .ss-xem::-webkit-details-marker{display:none;}
#so-sanh-phien-ban .ss-xem::marker{content:"";}
#so-sanh-phien-ban .ss-xem:hover{border-color:var(--accent);}
#so-sanh-phien-ban .ss-xem:focus-visible{outline:3px solid var(--accent); outline-offset:3px;}

/* Mở rồi thì hạ tiếp một bậc: nền xám phẳng, để bảng bên dưới là thứ nổi. */
#so-sanh-phien-ban .ss-du-fold[open] > .ss-xem{background:var(--bg-2); border-color:transparent; margin-bottom:14px;}
#so-sanh-phien-ban .ss-xem-off{display:none;}
#so-sanh-phien-ban .ss-du-fold[open] > .ss-xem .ss-xem-on{display:none;}
#so-sanh-phien-ban .ss-du-fold[open] > .ss-xem .ss-xem-off{display:inline;}

/* Mũi tên đặt bằng CSS để PHP không phải mang ký tự đặc biệt — nếp của `.pdp-fold-ar`. */
#so-sanh-phien-ban .ss-xem-ar{font-size:15px; line-height:1; flex:none; transition:transform .2s ease-out;}
#so-sanh-phien-ban .ss-xem-ar::before{content:"\25BE";}
#so-sanh-phien-ban .ss-du-fold[open] > .ss-xem .ss-xem-ar{transform:rotate(180deg);}
@media (prefers-reduced-motion:reduce){
  #so-sanh-phien-ban .ss-xem-ar{transition:none;}
}

/* ══ DƯỚI 640px — CHỈ ĐIỆN THOẠI ═══════════════════════════════════════════ */
@media (max-width:640px){

  /* 4 cam kết: 4 dòng dọc 60px (296px) → 2×2 (~150px). Đây là thông tin QUÉT
     MẮT, không phải để đọc kỹ, nên icon 20px nội tuyến đúng vai hơn ô 44px. */
  .section-inner .benefit-bar{display:grid; grid-template-columns:1fr 1fr; gap:8px; padding:12px 12px;}
  .section-inner .benefit-bar .hh{flex:0 1 auto; min-width:0; gap:9px; padding:10px 11px; margin:0; min-height:56px; background:#f3f6fb;}
  .section-inner .benefit-bar .hh:hover{transform:none;}
  .section-inner .benefit-bar .hh-icon{width:20px; height:20px; border-radius:0; background:none;}
  .section-inner .benefit-bar .hh-icon svg{width:20px; height:20px;}
  .section-inner .benefit-bar .hh .t1{font-size:12.5px; line-height:1.32;}

  /* Chi phí sở hữu: 1.030px → ~450px.
     Tiêu đề "Ước tính chi phí sở hữu" trong thẻ đã bỏ hẳn ở bản 27/08 (nó lặp ý của
     tiêu đề khối ngay phía trên) — không còn luật ẩn nào cần cho nó nữa.
     Ô "Giá niêm yết" đứng riêng bị ẩn; giá gạch ngang chuyển vào cạnh giá ưu đãi
     để thấy mức giảm bằng một lần đọc. Lăn bánh và trả góp xếp 2 cột.

     🔴🔴 ĐẾM THEO TÊN LỚP, KHÔNG ĐẾM THEO VỊ TRÍ (sửa 27/08/2026).
     Trước đây hai luật dưới là `:first-child` và `:nth-child(2)`. Đúng khi mọi xe đều
     có bốn ô. Nhưng từ 27/08 xe KHÔNG có ưu đãi chỉ còn BA ô, và ô đầu của nó chính là
     giá xe — `:first-child{display:none}` sẽ GIẤU MẤT GIÁ trên điện thoại, còn
     `:nth-child(2)` thì phóng to nhầm ô "Giá lăn bánh". Cả hai đều im lặng: HTML vẫn
     đủ ô, không lỗi nào báo, chỉ khách cầm điện thoại là không thấy giá.
     `.ci-chinh` = ô giá chính (ưu đãi nếu có, niêm yết nếu không) — luôn đúng một ô. */
  #cost .cost-grid{grid-template-columns:1fr 1fr;}
  #cost .cost-item{padding:12px 14px;}
  #cost .cost-item.ci-niemyet{display:none;}
  #cost .cost-item.ci-chinh{grid-column:1 / -1;}
  #cost .cost-item .k{font-size:12px; margin-bottom:4px;}
  #cost .cost-item .v{font-size:15.5px;}
  #cost .cost-item.ci-chinh .v{font-size:25px; letter-spacing:-.01em;}
  #cost .cost-item .note{font-size:12px; margin-top:3px; line-height:1.4;}
  #cost .cost-item .v-old-mo{display:block; font-size:12.5px; color:rgba(255,255,255,.5); text-decoration:line-through; margin-top:3px;}
  #cost .cost-card-foot p{font-size:12px; margin-bottom:12px;}
  /* Dải ưu đãi ở khổ hẹp nhất — 320px là mốc phải đo, không phải 390px. */
  #cost .cost-strip{padding:18px 16px; gap:14px;}
  #cost .cost-strip-money b{font-size:34px;}
  #cost .cost-card-foot{padding:20px 16px;}

  /* Thẻ phiên bản: 305px → ~118px mỗi thẻ (1.910px → ~723px).
     Ẩn `.v-fill` = thông số chung của xe, giống hệt ở mọi phiên bản nên không
     giúp so sánh, và nay đã có trong dải thông số. `.v-perk` = quà tặng RIÊNG
     từng bản thì GIỮ — đã đo: Tucson cả 5 bản khác nhau, Accent cả 4 bản khác. */
  /* 🔴 Dùng GRID CÓ VÙNG ĐẶT TÊN, không dùng flex + `order` + `flex-wrap`.
     Bản đầu tôi xếp bằng order và để wrap tự xuống dòng — với tên phiên bản dài
     ("2.5 Turbo 4WD Calligraphy") thì nút bị đẩy xuống dòng riêng và chừa một
     khoảng trống lớn giữa tiêu đề với giá. Số đo chiều cao KHÔNG bắt được, chỉ
     ảnh chụp mới lộ. Grid thì vị trí xác định hẳn, dài mấy cũng không xô nhau. */
  /* 🔴🔴 HÀNG NHÃN TRẢI HẾT HAI CỘT ("vb vb"), ĐỪNG NHÉT NÓ VÀO CỘT TRÁI.
     Anh Vũ báo 26/08: hai nhãn "Phổ biến nhất" và "Giảm 70 triệu" DÍNH VÀO NHAU
     ở mọi xe. Đo thật 124 thẻ trên 4 khổ màn thì nặng hơn thế: chúng CHỒNG LÊN
     nhau, khe âm tới **-88px** ở màn 320px, -48px ở 360px, -18px ở 390px. Chỉ
     màn 430px mới đủ chỗ.

     Vì sao: hai nhãn cùng nằm trong MỘT ô lưới, một cái `justify-self:start`,
     một cái `justify-self:end`. Hai thứ trong cùng một ô thì không có gì giữ
     khoảng cách cho nhau — hết chỗ là đè lên nhau chứ không đẩy nhau ra.
     Mà ô đó lại là cột `1fr` hẹp, vì cột nút "Chọn phiên bản" đã ăn ~150px.

     🔴 CÁCH SỬA: cho hàng nhãn chiếm CẢ HAI CỘT. Nút lùi xuống ôm hai hàng tên
        và giá thay vì ba hàng, nên thẻ KHÔNG cao thêm một pixel nào. Ở màn
        320px khe đo lại được ~94px.
     ⚠️ Đừng chữa bằng cách thu nhỏ chữ hay cắt bớt nhãn: tên nhãn là thứ giúp
        khách chọn bản, cắt đi là mất nghĩa. */
  #versions .version-card{
    display:grid; grid-template-columns:1fr auto;
    grid-template-areas:"vb vb" "ten btn" "gia btn" "uu uu";
    align-items:center; column-gap:10px; row-gap:3px;
    padding:12px 13px; border-radius:14px;
  }
  /* ⚠️ HAI NHÃN VẪN NẰM CHUNG MỘT Ô, chỉ là ô đó nay rộng gấp đôi. Cách sửa này
     mua thêm chỗ chứ KHÔNG dựng được đường lui: nhãn dài bất thường thì vẫn
     chồng nhau. Biên an toàn đo được ở khổ hẹp nhất (320px) là ~94px, đủ cho
     mọi nhãn đang có. Thêm nhãn mới dài hơn thì PHẢI đo lại bằng
     `node qa-thu-nhan-phien-ban.mjs`, đừng ước lượng bằng mắt. */
  #versions .version-card .vbadge{grid-area:vb; justify-self:start; align-self:center;
    margin:0; font-size:12px; padding:2px 7px; letter-spacing:.03em;}
  #versions .version-card .vpromo{grid-area:vb; justify-self:end; align-self:center;
    margin:0; font-size:12px; padding:2px 7px;}
  #versions .version-card h3{grid-area:ten; margin:0; font-size:15px; line-height:1.25;}
  #versions .version-card .vprice{grid-area:gia; margin:0; font-size:18px;}
  #versions .version-card ul{grid-area:uu; margin:5px 0 0; gap:4px;}
  #versions .version-card li.v-fill{display:none;}
  #versions .version-card li.v-perk{font-size:11.5px; line-height:1.35;}
  #versions .version-card li.v-perk svg{width:13px; height:13px; margin-top:2px;}
  #versions .version-card .btn-outline{grid-area:btn; align-self:center; margin:0; padding:12px 15px; min-height:44px; font-size:12.5px; border-radius:11px; white-space:nowrap;}
  /* Hẹp hơn mốc 168px của máy tính: ở đây nút nằm cùng hàng với tên xe và giá, để
     rộng là bóp mất cột chữ. Con số lấy từ bề ngang đo được của "Chọn phiên bản". */
  #versions .version-card > .btn-outline{min-width:132px;}
  #versions .version-card .v-tick{width:14px; height:14px;}

  /* Hiệu ứng bấm: lún nhẹ + bóng lõm. Làm bằng CSS `:active` nên KHÔNG cần JS,
     và thẻ vẫn KHÔNG mang role="button" — nút "Chọn phiên bản" bên trong là điều
     khiển thật, đúng bản vá a11y `nested-interactive` ở RC9. */
  #versions .version-card:active{transform:scale(.985); box-shadow:inset 0 1px 7px rgba(0,44,95,.1);}
  #versions .version-card:hover{transform:none;}
  #versions .version-card.is-active{transform:none; box-shadow:var(--shadow-card), 0 0 0 3px rgba(0,102,204,.2);}

  /* 3 thẻ tiện ích: 244px mỗi thẻ → hàng 64px. Nhắm `#tools` vì `.tool-card`
     còn dùng ở trang Giới thiệu. */
  #tools .tool-card{display:flex; align-items:center; gap:12px; text-align:left; padding:11px 13px; min-height:64px; border-radius:14px;}
  #tools .tool-card .tool-icon{width:34px; height:34px; flex:none; margin:0; border-radius:10px;}
  #tools .tool-card .tool-icon svg{width:17px; height:17px;}
  #tools .tool-card h4{font-size:13.5px; margin:0;}
  #tools .tool-card p{font-size:11.5px; line-height:1.35; margin:1px 0 0;}
  #tools .tools-grid{gap:8px;}
  #tools .loan-result .lb-hero .loan-month{font-size:24px;}

  /* Dải thông số 2 cột, thẻ "vì sao" 2 cột */
  .spec-strip{grid-template-columns:1fr 1fr; gap:8px; margin-bottom:14px;}
  .spec-strip .spec-cell{padding:10px 11px; gap:8px; border-radius:12px;}
  .spec-strip .sc-ic{width:26px; height:26px; border-radius:8px;}
  .spec-strip .sc-v{font-size:12.5px;}
  /* `.why-grid` ở đây KHÔNG cần khai lại: luật gói 5 phía trên (dòng ~2003) đã đặt
     2 cột · gap 9px · margin-bottom 0 trong cùng khối media này. Khai lại là trùng
     cả selector LẪN thuộc tính → LiteSpeed minify gộp và giữ giá trị khai TRƯỚC,
     luật sau mất trắng không dấu hiệu. Máy dò: qa/do-trung-goi6.js. */

  /* So sánh: bảng giữ 2 cột, siết đệm cho vừa 390px */
  #so-sanh-phien-ban .ss{padding:14px; border-radius:16px;}
  #so-sanh-phien-ban .ss-tbl{font-size:12.5px;}
  #so-sanh-phien-ban .ss-tbl th,
  #so-sanh-phien-ban .ss-tbl td{padding:8px 6px;}
  #so-sanh-phien-ban .ss-tbl th[scope=row]{width:34%; font-size:11.5px;}
  #so-sanh-phien-ban .ss-slot{min-height:60px; padding:9px 10px;}
  #so-sanh-phien-ban .ss-sn{font-size:13px;}
}


/* ==========================================================================
   VÒNG 17 — MẬT ĐỘ NGANG TRÊN ĐIỆN THOẠI · 11/08/2026

   Vòng 13→16 đều siết CHIỀU CAO. Vòng này chữa một bệnh khác hẳn, do chủ đại lý
   chỉ ra bằng ảnh chụp iPhone: **chiều ngang bị bỏ trống**. Chữ và nút xếp dọc
   trong khi hai bên còn chỗ, hàng thì wrap để lại dòng lẻ.

   Đo trên site thật @390px (nội dung khả dụng chỉ 342px):
     · `.price-hero-stats`  4 số → 2 dòng, "85%" rớt riêng, DÒNG CUỐI TRỐNG 76%
     · 8 cụm nút xếp dọc rộng 38–78% khung → mép phải trống, các nút lệch nhau
     · 3 điểm tin cậy trang xe: mỗi cái MỘT DÒNG, căn giữa, cao 112px
     · 5 khối chữ căn giữa 3–6 dòng → mất mép đọc bên trái
     · đầu trang bảng giá: 3 nhãn chồng nhau, mỗi nhãn dùng ~60% bề ngang

   🔴 ĐÂY LÀ VÒNG ĐỂ TRÔNG ĐÚNG, KHÔNG PHẢI ĐỂ BỚT CUỘN.
      Tổng chỉ giảm ~136px ≈ 0,16 lần cuộn. R1 và R2 gần như KHÔNG đổi chiều cao —
      thứ chúng sửa là hết dòng lẻ và hết mép nút lệch. Đừng kỳ vọng con số cuộn.

   🔴 R2 KHÔNG đặt `width:100%` lên chính `.btn`. `.btn` dùng chung ở hàng chục chỗ,
      ép lên nó thì mọi nút nằm trong HÀNG NGANG cũng bị giãn ra. Nên liệt kê đúng
      8 cụm cha. Cùng lý do với luật "CSS trang chủ phải khoanh trong body.home".
   ========================================================================== */
@media (max-width:640px){

  /* ---- R1 · hàng số liệu → ĐÃ GỠ 20/08/2026 ----
     Luật cũ ép bốn ô thành lưới 2×2 cho khỏi rơi dòng lẻ. Anh Vũ bỏ hẳn bốn ô đó,
     nên luật này cũng đi theo. Bài học vòng 17 vẫn còn giá trị và giữ ở chú thích
     đầu khối: hàng flex 4 mục ở khổ hẹp thì wrap thành dòng lẻ trống 76%. */

  /* ---- R2 · nút xếp dọc → đầy hàng ----
     8 cụm cha, liệt kê rõ. Chỉ ép khi cụm đã xếp DỌC (`flex-direction:column`)
     hoặc khi nút là con duy nhất trên dòng của nó. */
  /* 🔴 `flex-wrap:nowrap` VÀ `flex:0 0 auto` LÀ BẮT BUỘC, KHÔNG PHẢI CHO GỌN.
     Bản đầu tôi chỉ đặt `flex-direction:column; align-items:stretch` và nó gây
     TRÀN NGANG 650px trên trang chi tiết xe. Cơ chế:
       · `.cta-form` cho các con `flex:1 1 100%`
       · trong cột thì `flex-basis:100%` là 100% chiều CAO, không phải chiều rộng
       · cột lại còn `flex-wrap:wrap` (thừa hưởng từ `.final-cta-actions`)
       → mỗi nút chiếm hết chiều cao cột rồi ĐẨY NÚT SAU SANG MỘT CỘT MỚI BÊN PHẢI.
         Ba nút thành ba cột × 249px = tràn ra ngoài khung 650px.
     Cùng họ với bẫy `flex-wrap:nowrap` ở `.pdp-fold > summary` (gói 5): hễ đổi một
     hàng flex thành cột thì phải xử luôn `flex-wrap` và `flex-basis` của các con. */
  .price-hero-actions,
  .price-cta-actions,
  .final-cta-actions,
  .section-foot{flex-direction:column; flex-wrap:nowrap; align-items:stretch;}
  .price-hero-actions > .btn,
  .price-cta-actions > .btn,
  .final-cta-actions > .btn,
  .final-cta-actions > input,
  .section-foot > .btn,
  .version-card > .btn,
  .promo-banner-text > .btn,
  #so-sanh-phien-ban .ss > .btn{flex:0 0 auto; width:100%;}

  /* ---- R3 · chip → hàng ngang, không mỗi cái một dòng ----
     Ba điểm tin cậy trang xe: 112px → một dòng chữ ngăn bằng dấu ·, bỏ nền chip.
     Ghép ngang mà giữ nền chip thì vẫn phải 2 dòng (155+78+95px > 310px khả dụng),
     mà ba chip nền xanh xếp dọc chính là thứ làm khối trông rẻ. */
  .cta-trust{display:block; text-align:inherit;}
  /* `white-space:nowrap` để MỖI ĐIỂM giữ nguyên khối. Với `normal` thì "Không phát sinh
     chi phí" bị ngắt giữa câu thành "Không phát sinh / chi phí" — ba điểm này là ba lời
     hứa riêng, ngắt giữa câu đọc ra nghĩa khác. Điểm dài nhất ~170px < 310px nên nowrap
     không gây tràn. Chỉ ảnh chụp mới thấy, chiều cao vẫn báo đúng 48px.
     `::before` là chấm tròn 6px của dạng chip — ẩn đi, vì ở dạng chữ chạy dòng thì đã có
     dấu `·` làm việc ngăn cách, thêm chấm nữa là rối. */
  .cta-trust .cta-badge{display:inline; background:none; border:0; padding:0;
    font-size:12.5px; white-space:nowrap;}
  .cta-trust .cta-badge::before{display:none;}
  /* 🔴 `\00a0·` (khoảng trắng KHÔNG NGẮT + dấu chấm giữa), không phải `" · "`.
     Với `" · "` thì trình duyệt được phép ngắt dòng ngay tại khoảng trắng đứng trước
     dấu chấm, nên dấu `·` rơi xuống ĐẦU dòng sau — "· Không spam". Chụp ảnh mới thấy,
     số đo chiều cao vẫn đúng 48px.
     Dùng nbsp thì dấu chấm dính chặt vào chữ cuối của điểm trước, còn khoảng trắng
     giữa hai `<span>` trong markup vẫn là chỗ ngắt dòng bình thường. */
  .cta-trust .cta-badge:not(:last-child)::after{content:"\00a0·"; color:var(--border); font-weight:400;}

  /* 6 chip xe ở thẻ "Tìm xe nhanh": đã tự bọc sẵn, chỉ siết gap cho gọn thêm */
  .filter-bottom{gap:7px;}
  .filter-bottom .chip{padding:6px 11px;}
  .filter-bottom .lbl{flex:1 1 100%;}

  /* ---- R4 · bỏ căn giữa cho khối chữ dài ----
     Căn giữa đẹp với tiêu đề 1–2 dòng. Từ 3 dòng trở lên mỗi dòng bắt đầu ở một
     vị trí khác nhau nên mắt phải tìm lại điểm vào — ở khung 390px thì rõ nhất. */
  .cta-band-stack{text-align:left;}
  .cta-band-stack .cta-band-copy{align-items:flex-start;}
  .cta-band-stack h2{font-size:21px;}
  .cta-band-lede{font-size:14px;}
  /* `justify-content:flex-start`, KHÔNG phải `stretch`: `stretch` không hợp lệ cho
     `justify-content` ở flex nên bị bỏ, và luật desktop `center` lại thắng — im lặng. */
  .cta-form-stack{justify-content:flex-start; margin-top:18px;}
  .cta-band{padding:20px 16px;}

  .price-cta-banner .promo-banner-text{text-align:left;}
  .price-cta-banner .headline{text-align:left;}
  .price-cta-banner .sub{text-align:left;}
}


/* ==========================================================================
   VÒNG 18 — BỐN CHỖ CHỦ ĐẠI LÝ CHỈ RA QUA ẢNH CHỤP iPHONE · 11/08/2026

   Ba con số nền, đều ĐO ĐƯỢC:
     · nút hero "Xem bảng giá": nền nút rgb(2,25,52) trên nền rgb(8,56,111),
       lấy từ PIXEL ảnh chụp = 1,52:1. WCAG 1.4.11 đòi ranh giới thành phần
       giao diện ≥ 3:1 → nút chưa đạt nửa mức tối thiểu.
     · thẻ "Tìm xe nhanh" @390px cao 435px, chiếm gần cả màn.
     · chấm carousel đè lên nút "Nhận ưu đãi ngay" 12px, cả 3 vùng chạm chồng 38px.
   ========================================================================== */

/* --------------------------------------------------------------------------
   VIỆC 1a · MÀU NÚT HERO — ÁP MỌI BỀ NGANG, không chỉ điện thoại.

   Đây là lỗi TƯƠNG PHẢN, không phải lỗi bố cục: máy tính cũng có nút navy
   #002C5F nằm trên dải hero navy, cùng mức 1,29–1,52:1. Khoá vào media query thì
   desktop vẫn sai. Nền trắng chữ navy cho ~10,7:1 và trùng đúng kiểu khung form
   mà chủ đại lý đã chọn làm mẫu.
   -------------------------------------------------------------------------- */
body.home .hero-cta .btn-primary{background:#fff; color:var(--primary);}
body.home .hero-cta .btn-primary:hover{background:#EAF1FE;}
/* viền TRẮNG ĐẶC 1,5px thay vì trắng 50% mờ 1px — viền 50% trên navy gần như không thấy */
body.home .hero-cta .btn-outline{color:#fff; border:1.5px solid #fff; background:rgba(255,255,255,.08);}
body.home .hero-cta .btn-outline:hover{background:rgba(255,255,255,.18);}

/* --------------------------------------------------------------------------
   VIỆC 4 · KIỂU FORM NAVY CHO CẢ 7 TRANG — áp mọi bề ngang.

   Trang chủ đã dùng kiểu này từ trước (thẻ navy + ô nhập trắng + nút trắng) và
   chủ đại lý chọn nó làm mẫu. 6 trang kia đang là thẻ trắng + nút navy.
   ⚠️ Trang cửa hàng bọc `.cta-band` trong `#shop-cta` chứ không phải `#lead-form`
      — phải liệt kê cả hai, nếu không trang đó bị bỏ sót mà không có dấu hiệu gì.
   ⚠️ Đặt SAU khối `body.home #lead-form .cta-band` ở trên để trang chủ giữ nguyên
      phần ảnh nền `has-bg` của nó; các luật dưới đây chỉ lấp cho 6 trang còn lại.
   -------------------------------------------------------------------------- */
#lead-form .cta-band, #shop-cta .cta-band{background:#0A3D7A; background-image:none; box-shadow:none;}
#lead-form .cta-band h2, #shop-cta .cta-band h2{color:#fff;}
#lead-form .cta-band .cta-band-lede,
#lead-form .cta-band > .cta-band-copy p,
#shop-cta .cta-band > .cta-band-copy p{color:#D3E1F2;}
#lead-form .cta-band input, #shop-cta .cta-band input{background:rgba(255,255,255,.96); border-color:transparent; color:var(--text);}
#lead-form .cta-band input::placeholder, #shop-cta .cta-band input::placeholder{color:#6B7280;}
#lead-form .cta-band .btn-primary, #shop-cta .cta-band .btn-primary{background:#fff; color:var(--primary);}
#lead-form .cta-band .btn-primary:hover, #shop-cta .cta-band .btn-primary:hover{background:#EAF1FE;}
#lead-form .cta-band .btn-outline, #shop-cta .cta-band .btn-outline{color:#fff; border-color:rgba(255,255,255,.55); background:rgba(255,255,255,.08);}
/* 🔴🔴 SỬA LỖI CỦA CHÍNH VÒNG 18 — 11/08/2026, chủ đại lý phát hiện bằng ảnh chụp.
   Bản đầu tôi viết đúng một dòng `#lead-form .cta-band .btn-ghost{color:#fff}` — đổi
   MÀU CHỮ mà KHÔNG kiểm `.btn-ghost` có nền gì. Mà `.btn-ghost` (dòng ~423) khai
   `background:#fff; color:var(--primary)`. Kết quả: chữ trắng trên nền trắng, tương phản
   **1:1**, nút "Gọi ngay" ở trang chi tiết xe thành một khung trắng TRỐNG RỖNG.

   Bài học đã ghi vào logweb: hễ đổi màu CHỮ của một class dùng chung, phải xem class đó
   khai NỀN gì trước. Đổi một nửa cặp màu là cách chắc chắn nhất để tạo ra 1:1.

   Nay `.btn-ghost` trong thẻ navy dùng cùng cách với `.btn-outline`: nền trắng mờ + viền
   trắng 45%. Chọn 45% chứ không 32% vì WCAG 1.4.11 đòi ranh giới thành phần ≥3:1 —
   45% trên navy cho ~3,5:1, còn 32% chỉ ~2,6:1. Hai nút phụ trông giống nhau là ĐÚNG:
   "Đăng ký lái thử" và "Gọi ngay" đều là hành động phụ ngang cấp. */
#lead-form .cta-band .btn-ghost, #shop-cta .cta-band .btn-ghost{
  background:rgba(255,255,255,.08); color:#fff; border-color:rgba(255,255,255,.45);}
#lead-form .cta-band .btn-ghost:hover, #shop-cta .cta-band .btn-ghost:hover{
  background:rgba(255,255,255,.18); border-color:#fff;}
#lead-form .cta-band .cta-badge{background:rgba(255,255,255,.16); color:#fff;}
#lead-form .cta-band .cta-badge::before{background:#9FE8B8;}
/* dải 3 điểm tin cậy của vòng 17 ở dạng chữ chạy dòng — trên nền navy phải sáng lên */
#lead-form .cta-band .cta-trust .cta-badge{background:none; color:#9FE8B8;}

/* --------------------------------------------------------------------------
   VIỆC 3a · CHẤM CAROUSEL HẾT ĐÈ NÚT — áp mọi bề ngang.

   Chấm đang `position:absolute; bottom:20px` nên nằm ĐÈ lên nút "Nhận ưu đãi
   ngay". Đo bằng cách tiêm lại giá trị cũ: chồng lấn đã có TỪ TRƯỚC vòng 16
   (7px), nhưng vòng 16 phóng chấm 7→12px cho đủ mốc chạm 44px nên nó rõ hơn gần
   gấp đôi, và vùng chạm chồng từ 25→38px. Phần làm nặng thêm là của vòng 16.

   Đưa chấm ra khỏi `absolute` → nó thành ô lưới của `.promo-slides` và tự rơi
   xuống hàng 2 (các `.promo-banner` đều `grid-area:1/1`). Không thể đè nữa, và
   vẫn giữ nguyên vùng chạm 44px của vòng 16.
   -------------------------------------------------------------------------- */
.promo-slides > .promo-dots{position:static; justify-content:center; margin-top:16px;
  bottom:auto; left:auto;}
body.home .promo-dots{left:auto; bottom:auto;}

@media (max-width:640px){

  /* ---- VIỆC 1b · hai nút hero MỘT HÀNG CHIA ĐÔI ----
     Khối ≤900px đang có `.hero-cta{flex-direction:column}` + `.btn{width:100%}`.
     Đảo lại thành hàng, mỗi nút `flex:1 1 0` để chia đôi đều tuyệt đối.
     🔴 `min-width:0` là BẮT BUỘC — không có nó thì ô flex không co nhỏ hơn nội
     dung của nó và "Đăng ký lái thử" sẽ đẩy hàng bị tràn ngang. Cùng họ với bẫy
     `min-width:0` ở `.about-contact-info` của vòng 16. */
  .hero-cta{flex-direction:row; flex-wrap:nowrap; gap:10px;}
  .hero-cta .btn{flex:1 1 0; min-width:0; width:auto; padding:0 10px;}
  body.home .hero-cta .btn{padding:0 10px; font-size:14.5px;}
  .hero-cta .btn svg{flex:none;}

  /* ---- VIỆC 2 · thẻ "Tìm xe nhanh" gập thành một thanh ----
     `.fc-fold` CHỈ tồn tại khi PHP xác định là điện thoại (xem front-page.php),
     nên phần mở/gập không cần media query — nhưng vẫn đặt trong ≤640px vì phần
     nén cỡ chữ và đệm chỉ dành cho điện thoại. */
  body.home .filter-card{background:#011126; border-color:rgba(255,255,255,.28); padding:0;
    overflow:hidden;}
  .fc-fold{display:block;}
  .fc-fold > summary{list-style:none; cursor:pointer; touch-action:manipulation;
    -webkit-tap-highlight-color:transparent;
    display:flex; align-items:center; gap:10px; min-height:56px; padding:0 16px;}
  .fc-fold > summary::-webkit-details-marker{display:none;}
  .fc-fold > summary::marker{content:"";}
  .fc-fold > summary:focus-visible{outline:3px solid #fff; outline-offset:-3px;}
  .fc-ic{width:18px; height:18px; color:#8FB8E8; flex:none;}
  .fc-t{font-size:13px; font-weight:800; letter-spacing:.1em; text-transform:uppercase; color:#fff;}
  .fc-n{font-size:12.5px; color:#A8C2E0;}
  .fc-ar{margin-left:auto; flex:none; width:30px; height:30px; border-radius:9px;
    background:rgba(255,255,255,.14); color:#fff; display:flex; align-items:center;
    justify-content:center; font-size:12px; line-height:1; transition:transform .2s ease-out;}
  .fc-ar::before{content:"\25BE";}
  .fc-fold[open] .fc-ar{transform:rotate(180deg);}
  /* tiêu đề cũ thành dư khi thanh gập đã mang đúng chữ đó */
  .fc-fold .filter-title{display:none;}
  .fc-fold[open] > summary{border-bottom:1px solid rgba(255,255,255,.14);}
  .fc-fold .filter-grid{padding:14px 16px 0;}
  .fc-fold #hnt-filter-btn{margin:13px 16px 0; width:calc(100% - 32px);}
  .fc-fold .filter-bottom{padding:0 16px 16px; margin-top:14px;}

  /* Ô CHỌN THÀNH TRẮNG — đây là phần "khó thấy" mà chủ đại lý chỉ ra.
     Trước: nền `rgba(255,255,255,.09)` trên thẻ tối → ô chọn gần như tan vào thẻ. */
  body.home .filter-select{background:#fff; border-color:#fff;}
  body.home .filter-select select{color:var(--primary); font-weight:600;}
  body.home .filter-select svg.chev{color:var(--text-2);}
  body.home #hnt-filter-btn{background:#fff; color:var(--primary);}

  /* ---- VIỆC 3b · TRẢ LẠI ẢNH XE trong khối ưu đãi ----
     `.promo-banner-car{display:none}` (dòng ~664, trong @media max-width:1100px)
     là quyết định của RC12 — ẩn để tiết kiệm chiều cao mobile — KHÔNG phải hồi quy.
     Chủ đại lý muốn trả lại: khối ưu đãi xe hơi mà không có ảnh xe thì mất phần
     lớn sức thuyết phục. Cao thêm ~188px, đã báo trước và được đồng ý.
     ⚠️ Chỉ trả lại ở ≤640px. Dải 641–1100px VẪN ẨN, vì chưa có ảnh tablet để kiểm.
     Ảnh xếp TRÊN chữ bằng `grid-row`, vì trong markup nó nằm SAU khối chữ. */
  body.home .promo-banner{grid-template-columns:1fr;}
  body.home .promo-banner-car{display:flex; grid-row:1; aspect-ratio:16/9; min-height:0;
    height:auto; border-radius:18px 18px 0 0; overflow:hidden;
    background:radial-gradient(ellipse at 50% 42%,#eef3f9 0%,#dde7f2 62%,#cfdcea 100%);}
  body.home .promo-banner-car img{width:86%; max-width:none; margin:0 auto;}
  body.home .promo-banner-text{grid-row:2;}
}

/* ══════════════════════════════════════════════════════════════════════════════
   VIỆC 3.2 · CỠ CHỮ NỘI DUNG ≥ 16px TRÊN ĐIỆN THOẠI  (12/08/2026)

   Tiêu chí đòi "tối thiểu 16px cho nội dung chính". Đo ở 390px UA iPhone thì trang
   xe có 278 khối chữ dưới 16px, bảng giá 405 khối — nhưng ĐẾM SỐ KHỐI là cách nhìn
   sai. Sắp lại theo TỔNG SỐ KÝ TỰ thì ra bức tranh khác hẳn: phần lớn khối nhỏ là
   nhãn, chip, số liệu — mỗi khối vài chữ. Văn xuôi khách thật sự phải ĐỌC chỉ nằm
   ở một nhúm selector, và đó là những selector dưới đây.

   🔒 CỐ Ý KHÔNG NÂNG — đừng "làm nốt cho đủ":
   · `th` / `td` bảng thông số (39 ô ở 11.5px trên trang xe, 36 ô ở bảng giá) —
     11.5–13px là đánh đổi mật độ có chủ ý của vòng 16–18. Nâng lên là bảng 75 dòng
     phình lại đúng thứ vừa mất 7 vòng để gập.
   · `.pt-*` (tên phiên bản, giá gọn, chip khuyến mãi trong bảng giá) — cùng lý do.
   · `.why-card p` và `.tool-card p` — hai khối này xếp LƯỚI 2 CỘT ở mobile, mỗi thẻ
     chỉ rộng ~175px. Đặt chữ 16px vào đó thì mỗi dòng còn ~11 ký tự, xuống dòng liên
     tục — đọc còn khó hơn lúc chữ nhỏ. Muốn nâng thì phải hạ về 1 cột trước, mà đó
     là đổi bố cục, không nằm trong phạm vi việc này.
   · Chú thích nhỏ (`.loan-note` `.ss-nguon` `.tn-ghi-chu` `.spec-note` `.cost-card-foot p`)
     — là chữ nhỏ đúng vai trò của nó, tiêu chí nói "nội dung chính" chứ không phải
     mọi dòng chữ trên trang.
   · Chân trang — bản vá a11y ngày 05/08 đã tính vùng chạm theo cỡ chữ hiện tại.

   ⚠️ Mọi selector dưới đây CỐ TÌNH dài hơn luật gốc nó đè (thêm tên thẻ, thêm cấp
      cha). LiteSpeed minify gộp các selector GIỐNG HỆT nhau rồi giữ giá trị khai
      TRƯỚC — đè bằng selector y hệt là bị nuốt im lặng. Đây là bẫy đã ghi ở RC13.
   ══════════════════════════════════════════════════════════════════════════════ */
@media (max-width: 640px) {
  /* Bốn đoạn "điều khách hay chia sẻ" — khối văn xuôi dài nhất trang xe (~750 ký tự) */
  .tn-card p.tn-noi-dung{font-size:16px; line-height:1.65;}

  /* Câu trả lời FAQ — dài nhất trang bảng giá (~790 ký tự) và thứ nhì trang xe.
     🔴 Lần đầu tôi viết `div.faq-item .faq-a` và luật KHÔNG ăn: khối FAQ là
        `details.faq-item` chứ không phải div, nên selector không khớp gì cả —
        mà CSS không khớp thì im lặng, không có lỗi nào báo.
        Nay nhân đôi class để nâng độ ưu tiên lên (0,3,0) mà KHÔNG phải đoán tên
        thẻ cha. Cách này còn đúng cả khi markup đổi từ details sang div. */
  .faq-item .faq-a.faq-a{font-size:16px; line-height:1.65;}

  /* "Lưu ý về giá" — 3 gạch đầu dòng giải thích giá niêm yết vs giá lăn bánh */
  .price-note ul li{font-size:16px; line-height:1.6;}

  /* Câu dẫn đầu trang bảng giá và câu dẫn khối kêu gọi — vốn đã 15–15.5px */
  .price-hero p.lede{font-size:16px;}
  p.cta-band-lede{font-size:16px; line-height:1.6;}
  .promo-banner-text p.sub{font-size:16px;}
}

/* ══════════════════════════════════════════════════════════════════════════════
   VIỆC 4.1 · BỘ LỌC TRÊN TRANG CỬA HÀNG  (12/08/2026)

   Dùng lại nguyên bộ `.filter-card` của trang chủ nên gần như không cần CSS mới.
   Chỉ phải trung hoà đúng MỘT thứ: luật gốc `.filter-card{margin-top:-64px}`
   (dòng ~260) cố ý kéo thẻ lên đè đáy hero trang chủ. Trang Cửa hàng không có
   hero tối để đè, để nguyên thì thẻ trèo lên tiêu đề trang.

   ⚠️ Khoanh trong `.shop-filter-wrap` chứ KHÔNG sửa luật gốc — luật đó đang đúng
      cho trang chủ, và `.filter-card` còn dùng ở đó với bố cục hoàn toàn khác.
   ⚠️ Không đụng `body.home .filter-card` (kiểu kính tối, dòng ~1948/2088/3030):
      ở trang Cửa hàng nền sáng nên thẻ trắng của luật gốc mới là đúng.
   ══════════════════════════════════════════════════════════════════════════════ */
.shop-filter-wrap{margin:0 0 28px;}
.shop-filter-wrap .filter-card{margin-top:0;}

/* 🔴 BẪY ĐÃ SUÝT MẮC — ghi lại vì nó vô hình với mọi phép đo kích thước.
   Bộ luật `.fc-*` (thanh gập trên điện thoại, dòng ~3032) KHÔNG khoanh trong
   `body.home`, nên nó áp luôn sang đây. Nhưng màu của nó viết cho THẺ NỀN TỐI
   của trang chủ: `.fc-t{color:#fff}` · `.fc-n{color:#A8C2E0}` ·
   `.fc-ar{background:rgba(255,255,255,.14)}`. Thẻ ở trang Cửa hàng dùng luật gốc
   nền TRẮNG → chữ trắng trên nền trắng, mũi tên trắng trên nền trắng: thanh gập
   trông như trống không, mà chiều cao, vùng chạm và số đo đều báo đạt.
   Chỉ đổi màu trong phạm vi `.shop-filter-wrap`, KHÔNG sửa luật gốc — trang chủ
   đang đúng với nền tối của nó. */
.shop-filter-wrap .fc-t{color:var(--primary);}
.shop-filter-wrap .fc-n{color:var(--text-2);}
.shop-filter-wrap .fc-ic{color:var(--accent);}
.shop-filter-wrap .fc-ar{background:var(--grey-bg); color:var(--primary);}
.shop-filter-wrap .fc-fold[open] > summary{border-bottom-color:var(--border);}
.shop-filter-wrap .fc-fold > summary:focus-visible{outline:3px solid var(--accent);}

@media (max-width: 640px) {
  .shop-filter-wrap{margin-bottom:16px;}
  /* Gập lại thì thanh phải chạm sát mép thẻ, cùng cách trang chủ làm ở dòng ~3030
     (luật đó khoanh `body.home` nên không với tới đây). */
  .shop-filter-wrap .filter-card{padding:0; overflow:hidden;}
}

/* ==========================================================================
   TRANG KHU VỰC (D2, 13/08/2026) — mọi class tiền tố .kv- để không đụng 8
   template dùng chung. Mockup khách duyệt: hero navy như trang chủ, dải số,
   3 bước, 4 thẻ dịch vụ, 4 thẻ xe, FAQ tái dùng .faq-item có sẵn.
   ========================================================================== */
.kv-hero{background:linear-gradient(160deg,#0C2140 0%,#123563 100%); color:#fff; padding:52px 0 0;}
.kv-bc{font-size:12px; color:#9DB4D6; margin:0 0 14px;}
.kv-bc b{color:#CFE0F5; font-weight:600;}
.kv-hero h1{font-size:clamp(26px,3.6vw,38px); font-weight:800; color:#fff; margin:0; text-wrap:balance; max-width:680px;}
.kv-hero h1 .hl{color:#7CC0FF;}
.kv-lede{margin:14px 0 0; color:#C9D8EE; font-size:15px; max-width:600px; line-height:1.65;}
.kv-cta{display:flex; gap:12px; margin:24px 0 40px; flex-wrap:wrap;}
/* nút trên nền navy: theo đúng khuôn body.home .hero-cta — primary đổi sang accent
   cho đủ tương phản (bài học vòng 18: navy trên navy = 1,52:1), outline trong suốt */
.kv-hero .btn-primary{background:var(--accent);}
.kv-hero .btn-primary:hover{background:#0A79E8;}
.kv-hero .btn-outline{color:#fff; border-color:rgba(255,255,255,.5); background:transparent;}
.kv-hero .btn-outline:hover{background:rgba(255,255,255,.12); border-color:#fff;}
.kv-strip{background:#0A1B33;}
.kv-strip-in{display:grid; grid-template-columns:repeat(4,1fr); gap:0;}
.kv-strip-in>div{padding:14px 16px 14px 0; display:flex; flex-direction:column; gap:2px; border-right:1px solid #1C3050; font-size:12.5px; color:#B9CCE8; margin-right:16px;}
.kv-strip-in>div:last-child{border-right:0; margin-right:0;}
.kv-strip-in b{color:#fff; font-size:15px;}
.kv-strip-in a{color:#7CC0FF; text-decoration:none;}
.kv-strip-in a:hover{text-decoration:underline;}

.kv-sec{padding:44px 0;}
.kv-sec-alt{background:#F5F8FC; border-top:1px solid var(--border); border-bottom:1px solid var(--border);}
.kv-sec h2{font-size:clamp(21px,2.6vw,27px); font-weight:800; color:var(--primary); margin:0 0 6px; text-wrap:balance;}
.kv-sub{color:var(--text-2); font-size:14px; margin:0 0 22px; max-width:62ch;}
.kv-sub a{color:var(--accent); font-weight:700; text-decoration:none;}
.kv-sub a:hover{text-decoration:underline;}

.kv-steps{display:grid; grid-template-columns:repeat(3,1fr); gap:14px;}
.kv-step{background:#fff; border:1px solid var(--border); border-radius:var(--radius-card); padding:20px;}
.kv-step-n{font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--accent);}
.kv-step h3{font-size:16px; color:var(--primary); margin:8px 0 6px;}
.kv-step p{font-size:13.5px; color:var(--text-2); margin:0; line-height:1.6;}

.kv-svc{display:grid; grid-template-columns:repeat(4,1fr); gap:14px;}
.kv-c{background:#fff; border:1px solid var(--border); border-radius:var(--radius-card); padding:18px;}
.kv-c h3{font-size:14.5px; color:var(--primary); margin:0 0 6px;}
.kv-c p{font-size:13px; color:var(--text-2); margin:0; line-height:1.6;}

.kv-cars{display:grid; grid-template-columns:repeat(4,1fr); gap:14px;}
.kv-car{background:#fff; border:1px solid var(--border); border-radius:var(--radius-card); overflow:hidden; text-decoration:none; transition:transform .18s ease-out, box-shadow .18s ease-out;}
.kv-car:hover{transform:translateY(-3px); box-shadow:var(--shadow-card);}
.kv-car img{width:100%; height:auto; display:block; background:#F5F8FC;}
.kv-car-i{display:block; padding:12px 14px;}
.kv-car-i b{display:block; font-size:14px; color:var(--primary);}
.kv-car-i span{font-size:12.5px; color:var(--text-2);}

.kv-faq{display:grid; gap:10px; max-width:780px;}

.kv-end{background:linear-gradient(160deg,#0C2140,#123563); color:#fff; border-radius:var(--radius-card); padding:26px 28px; display:flex; align-items:center; gap:20px; flex-wrap:wrap;}
.kv-end-t b{display:block; font-size:18px; margin-bottom:4px;}
.kv-end-t span{font-size:13.5px; color:#C2D3EC;}
.kv-end-b{margin-left:auto; display:flex; gap:10px;}
.kv-end .btn-primary{background:var(--accent);}
.kv-end .btn-outline{color:#fff; border-color:rgba(255,255,255,.5); background:transparent;}
.kv-end .btn-outline:hover{background:rgba(255,255,255,.12);}
.kv-nap{margin:18px 0 0; font-size:12px; color:var(--text-2);}

@media (max-width:900px){
  .kv-steps,.kv-svc{grid-template-columns:1fr 1fr;}
  .kv-cars{grid-template-columns:1fr 1fr;}
}
@media (max-width:640px){
  .kv-hero{padding-top:32px;}
  .kv-cta .btn{flex:1 1 auto;}
  .kv-strip-in{grid-template-columns:1fr 1fr;}
  .kv-strip-in>div{border-bottom:1px solid #1C3050; padding:11px 12px 11px 0; margin-right:12px;}
  .kv-strip-in>div:nth-child(even){border-right:0; margin-right:0;}
  .kv-strip-in>div:nth-last-child(-n+2){border-bottom:0;}
  .kv-sec{padding:32px 0;}
  .kv-steps{grid-template-columns:1fr;}
  .kv-end{flex-direction:column; align-items:stretch; text-align:center;}
  .kv-end-b{margin-left:0; flex-direction:column;}
}

/* ══════════════════════════════════════════════════════════════════════════════
   VÒNG 22 · VÙNG CHẠM TRÊN ĐIỆN THOẠI — 14/08/2026
   ══════════════════════════════════════════════════════════════════════════════
   Nguồn: quét 16 trang × 3 bề ngang (360/390/430) + BẮN NGÓN TAY ẢO bằng
   `document.elementFromPoint()` (qa/ban-ngon-tay-that.js).

   🔴 VÌ SAO PHẢI BẮN NGÓN TAY CHỨ KHÔNG ĐO HỘP CSS: `getBoundingClientRect()` đo hộp,
      không đo vùng ngón tay chạm tới. Nút "Nhận báo giá" ở bảng giá đo ra 34×34 nên
      trông như lỗi nặng nhất toàn site — bắn ngón tay thì ra **86×81px** vì
      `.price-table .pt-cta::after{inset:0}` đã phủ cả ô. Phóng nó lên 44px sẽ làm
      trang bảng giá dài thêm ~400px ĐỔI LẤY CON SỐ 0. Đừng "sửa" nó.
      Cùng lý do: 3 chấm mạng xã hội chân trang (53×55), dải tab bảng giá (44px),
      `.pb-fold-link` (342×48) đều ĐÃ ĐẠT — không có luật nào cho chúng ở đây.

   Chỉ những phần tử ngón tay thật KHÔNG với tới 44px mới nằm dưới đây.
   ══════════════════════════════════════════════════════════════════════════════ */
@media (max-width:640px){

  /* ── Nhóm A · nới bằng ::after — KHÔNG tốn một pixel chiều cao nào ──────────
     Dùng lại đúng nếp đã có của dự án (chấm carousel, chấm mạng xã hội). Chỉ nới
     THEO CHIỀU DỌC: nới ngang sẽ đè lên link bên cạnh (breadcrumb cách nhau 21px)
     và ngón tay bấm vào khe sẽ rơi nhầm link — hỏng nặng hơn nút nhỏ. */

  /* breadcrumb 62×20 → 62×44. Khoảng trống dọc đo được 60px nên nới ±12 rất an toàn. */
  .breadcrumb a{position:relative;}
  /* ±13 chứ không phải ±12: chữ cao 20,5px (số lẻ), ±12 ra 44,5px — đúng vạch quá sát,
     làm tròn nửa điểm ảnh là tụt xuống 43. Lấy biên 2px cho chắc, vẫn còn xa mức 60px
     khoảng trống dọc đo được. Cùng lý do với mốc 4,6 thay vì 4,5 ở bảng màu RC9. */
  .breadcrumb a::after{content:""; position:absolute; left:0; right:0; top:-13px; bottom:-13px;}

  /* "Xem tất cả →" 85×20 → 85×44. Nới LỆCH (trên 16 / dưới 8) có chủ ý: phía dưới chỉ
     còn 22px tới thẻ đầu tiên, nới đều ±12 là hai vùng chạm chồng nhau 2px. Phía trên
     là khoảng trắng của tiêu đề h2 (không phải phần tử bấm được) nên mượn được. */
  .section-head .see-all{position:relative;}
  .section-head .see-all::after{content:""; position:absolute; left:0; right:0; top:-17px; bottom:-9px;}

  /* ── Nhóm B · phóng thật, nhưng nằm trong hàng đã cao sẵn nên gần như miễn phí ── */

  /* 9 chip lọc xe (6 trang chủ + 3 cửa hàng): 34 → 44px. Không nới bằng ::after được
     vì chip cách nhau 7px, nới ngang là chồng lên nhau.
     ⚠️ Cố ý KHÔNG đụng `padding` — `.filter-bottom .chip{padding:6px 11px}` đã khai ở
     media query khác; đặt padding lần hai là dính bẫy minify. `min-height` không trùng
     thuộc tính nào nên hai luật cộng hưởng thay vì chọi nhau. */
  .chip{display:inline-flex; align-items:center; min-height:44px;}

  /* "Bộ lọc nâng cao" / "Xoá bộ lọc" 125×20 → 125×44. Nằm CÙNG HÀNG với chip nên khi
     chip đã 44px thì hàng vốn đã cao 44 — luật này tốn 0px. */
  .adv-link{min-height:44px; align-items:center;}

  /* ── Nhóm C · phóng thật, CÓ tốn chiều cao. Đây là phần đánh đổi thật ──────── */

  /* 3 thanh trượt công cụ trả góp 298×22 → 298×44 (+66px trang chi tiết xe).
     Thanh trượt là thứ khách KÉO chứ không chỉ bấm — 22px là quá mỏng để kéo trúng.
     Rãnh trượt vẫn mảnh như cũ, chỉ vùng chạm dày lên. */
  /* `margin:0` dọn nốt một báo động giả VĨNH VIỄN: trình duyệt đặt sẵn `margin:2px` cho
     `input[type=range]`, cộng với `width:100%` thành ra khối cha "tràn 4px". Vô hình,
     nhưng mọi lần quét sau đều báo lại và mọi phiên sau đều phải đi xác minh lại. */
  .loan-field input[type="range"]{height:44px; margin:0;}

  /* "Xem tất cả →" ở chân thẻ giá trang xe (`single-product.php:226`) — link này KHÔNG
     có class nên luật `.section-head .see-all` phía trên không với tới. Đo 78×19. */
  .price-card-foot a{position:relative;}
  .price-card-foot a::after{content:""; position:absolute; left:0; right:0; top:-13px; bottom:-13px;}

  /* Hotline + Zalo ở trang Giới thiệu/Liên hệ: 39 → 44px (+5px × 2 ô). */
  .contact-row .item{min-height:44px;}

  /* Ô tìm kiếm trang 404 và trang Tìm kiếm: 36 → 44px. Nút gửi nâng theo cho cân hàng.
     ⚠️ Không đụng `font-size` — RC12 đã ép ≥16px để Safari iOS không tự phóng to trang. */
  .hnt-search input[type="search"]{min-height:44px;}
  .hnt-search button{height:44px;}
}

/* ═══════════════════════════════════════════════════════════════════════════
   BÀI "GIẢM 100% TRƯỚC BẠ" — biểu đồ & bảng trong ruột bài viết (14/08/2026)
   ---------------------------------------------------------------------------
   MỌI luật ở đây khoá trong `.article-content` và mang tiền tố `.lpt-`.
   Lý do: 8 template dùng chung class của theme, khai trần là rò sang chỗ khác.

   Ba luật cũ của `.article-content` sẽ đè lên khối này nếu không cẩn thận,
   nên bên dưới cố ý dùng selector 2 lớp để thắng đúng luật, KHÔNG dùng !important:
     · dòng 931  `.article-content img{border-radius:12px; margin:24px 0}`
     · dòng 1336 `.article-content table td,th{border:1px solid var(--border)}`
     · dòng 930  `.article-content a{color:var(--accent); text-decoration:underline}`

   Màu lấy từ token của theme, KHÔNG đặt màu mới. Đã chạy bộ kiểm màu của skill
   dataviz trên chính hai token này: --accent #0066CC + --green #11803A đạt cả 5
   phép (lệch màu mù màu ΔE 24,3 · tương phản nền ≥3:1).
   🔴 --primary #002C5F thì TRƯỢT khi làm màu tô biểu đồ (quá tối, quá xám) —
      nó chỉ dùng làm chữ và đường kẻ ở đây, đừng đem đi tô cột.

   Hình học biểu đồ cột: khung vẽ 224px, chừa 24px trên đỉnh cho nhãn số, nên
   1% = 1,6667px và vạch 100% nằm ở 166,7px. Cột cao nhất (114%) là 189,7px.
   ⚠️ Đổi chiều cao khung thì phải đổi cả bottom của .lpt-ref trong ruột bài —
      hai số đó do qa sinh ra cùng nhau, sửa tay một bên là lệch.
   ═══════════════════════════════════════════════════════════════════════════ */
.article-content .lpt-num{font-family:ui-monospace,"Cascadia Mono","SFMono-Regular",Menlo,Consolas,monospace; font-variant-numeric:tabular-nums; font-size:.94em; letter-spacing:-.012em;}
.article-content .lpt-fig{margin:34px 0; padding:0;}
.article-content .lpt-fig-title{font-size:12px; text-transform:uppercase; letter-spacing:.14em; font-weight:700; color:var(--text-2); margin:0 0 14px;}
.article-content .lpt-cap{margin:14px 0 0; font-size:13.5px; line-height:1.58; color:var(--text-2); border-top:1px solid var(--border); padding-top:9px;}
.article-content .lpt-flow svg{display:block; width:100%; height:auto; font-family:inherit;}

/* ── khối trích ── */
.article-content .lpt-pull{margin:24px 0; padding:16px 20px; background:var(--accent-soft); border-left:3px solid var(--primary);}
.article-content .lpt-pull p{margin:0;}

/* ── biểu đồ thanh ngang ── */
.article-content .lpt-bars{display:flex; flex-direction:column; gap:9px;}
.article-content .lpt-row{display:grid; grid-template-columns:196px 1fr 96px; gap:12px; align-items:center;}
.article-content .lpt-row.has-xe{grid-template-columns:58px 150px 1fr 96px;}
.article-content .lpt-lab{font-size:13px; line-height:1.35; color:var(--text);}
.article-content .lpt-lab small{display:block; color:var(--text-2); font-size:11.5px;}
.article-content .lpt-track{background:var(--grey-bg); height:20px; border-radius:2px; overflow:hidden;}
.article-content .lpt-fill{height:100%; background:var(--accent); border-radius:0 4px 4px 0; min-width:3px;}
.article-content .lpt-fill.is-rest{background:var(--text-2); opacity:.5;}
.article-content .lpt-val{text-align:right; font-family:ui-monospace,"Cascadia Mono","SFMono-Regular",Menlo,Consolas,monospace; font-variant-numeric:tabular-nums; font-size:12.5px;}
.article-content .lpt-val.is-b{font-weight:700;}
.article-content .lpt-sum{display:grid; grid-template-columns:1fr auto; gap:12px; margin-top:14px; padding-top:11px; border-top:1px solid var(--border); font-size:13.5px;}
.article-content .lpt-sum b{color:var(--primary);}
.article-content .lpt-sum span:last-child{font-family:ui-monospace,Consolas,monospace; font-weight:700;}

/* Thắng `.article-content img{border-radius:12px; margin:24px 0}` bằng 2 lớp class. */
.article-content .lpt-row .lpt-xe,
.article-content .lpt-col .lpt-xe{width:100%; height:38px; object-fit:contain; object-position:left center; display:block; margin:0; border-radius:0;}

/* ── biểu đồ cột đứng ── */
.article-content .lpt-colwrap{overflow-x:auto; padding-bottom:4px; -webkit-overflow-scrolling:touch;}
.article-content .lpt-cols{display:grid; grid-template-columns:repeat(6,1fr); gap:8px; min-width:440px;}
.article-content .lpt-col{display:flex; flex-direction:column; align-items:center;}
.article-content .lpt-col .lpt-xe{height:44px; object-position:center; margin-bottom:8px;}
.article-content .lpt-plot{position:relative; height:224px; width:100%; border-bottom:1.5px solid var(--border);}
.article-content .lpt-bar{position:absolute; bottom:0; left:8%; right:8%; background:var(--accent); border-radius:4px 4px 0 0;}
.article-content .lpt-cval{position:absolute; left:0; right:0; text-align:center; font-family:ui-monospace,Consolas,monospace; font-variant-numeric:tabular-nums; font-size:13px; font-weight:700; color:var(--text);}
.article-content .lpt-cval.is-over{color:var(--green);}
.article-content .lpt-ref{position:absolute; left:0; right:0; border-top:1.5px dashed var(--primary); opacity:.75;}
.article-content .lpt-cname{font-size:12px; text-align:center; margin-top:9px; line-height:1.3; color:var(--text);}
.article-content .lpt-cname small{display:block; color:var(--text-2); font-size:11.5px;}
.article-content .lpt-legend{display:flex; flex-wrap:wrap; gap:6px 18px; margin-top:16px; font-size:12.5px; color:var(--text-2); align-items:center;}
.article-content .lpt-legend i{display:inline-block; width:12px; height:12px; border-radius:2px; margin-right:6px; vertical-align:-1px;}
.article-content .lpt-legend i.is-blue{background:var(--accent);}
.article-content .lpt-legend i.is-green{background:var(--green);}
.article-content .lpt-legend i.is-dash{background:transparent; border-top:2px dashed var(--primary); height:0; border-radius:0;}
/* Gợi ý cuộn chỉ hiện ở khổ điện thoại — trên máy tính bảng cột đã đủ chỗ, hiện ra là nói dối. */
.article-content .lpt-cuon{display:none; font-size:12.5px; color:var(--text-2); margin:10px 0 0;}
.article-content .lpt-cuon b{color:var(--primary);}

/* ── bảng số ── */
.article-content .lpt-tbl{overflow-x:auto; margin:24px 0;}
.article-content .lpt-tbl table{width:100%; min-width:560px; border-collapse:collapse; font-size:14.5px; margin:0;}
.article-content .lpt-tbl caption{caption-side:top; text-align:left; font-size:12px; text-transform:uppercase; letter-spacing:.14em; font-weight:700; color:var(--text-2); padding-bottom:10px;}
/* Bỏ khung ô của luật chung, dùng kẻ ngang cho dễ dò theo hàng. */
.article-content .lpt-tbl th,
.article-content .lpt-tbl td{border:0; border-bottom:1px solid var(--border); padding:10px 12px; text-align:right;}
.article-content .lpt-tbl th:first-child,
.article-content .lpt-tbl td:first-child{text-align:left;}
.article-content .lpt-tbl thead th{border-bottom:1.5px solid var(--primary); font-size:12px; font-weight:700; color:var(--text-2); white-space:nowrap;}
.article-content .lpt-tbl td.lpt-hi{color:var(--accent); font-weight:700;}
.article-content .lpt-tbl td.lpt-hi.is-over{color:var(--green);}

/* ── khối chốt số ── */
.article-content .lpt-calc{margin:26px 0; border:1px solid var(--border); border-top:3px solid var(--green); background:var(--green-bg); padding:20px 22px;}
.article-content .lpt-calc-lb{font-size:11.5px; text-transform:uppercase; letter-spacing:.15em; font-weight:700; color:var(--text-2); margin:0 0 12px;}
.article-content .lpt-calc dl{margin:0; display:grid; grid-template-columns:1fr auto; gap:7px 16px; font-size:15px;}
.article-content .lpt-calc dt{color:var(--text);}
.article-content .lpt-calc dd{margin:0; text-align:right;}
.article-content .lpt-calc .is-tot{border-top:1px solid var(--border); padding-top:9px; margin-top:3px; font-weight:700; color:var(--green);}
.article-content .lpt-calc .is-gap{color:var(--orange); font-weight:700;}

/* ── chân bài ── */
.article-content .lpt-nguon{margin-top:36px; padding-top:18px; border-top:2px solid var(--primary); font-size:13.5px; color:var(--text-2); line-height:1.65;}
.article-content .lpt-nguon p{margin:8px 0;}

@media (max-width:640px){
  .article-content .lpt-row{grid-template-columns:120px 1fr 84px; gap:8px;}
  .article-content .lpt-row.has-xe{grid-template-columns:42px 96px 1fr 84px; gap:7px;}
  .article-content .lpt-row .lpt-xe{height:30px;}
  .article-content .lpt-lab{font-size:12px;}
  .article-content .lpt-val{font-size:11.5px;}
  .article-content .lpt-cuon{display:block;}
  .article-content .lpt-calc{padding:16px 15px;}
}


/* ═══════════════════════════════════════════════════════════════════════════
   CĂN GIỮA CỘT ĐỌC CỦA TRANG BÀI VIẾT (14/08/2026)
   ---------------------------------------------------------------------------
   Khách nhìn ra: bài viết "lệch một bên". Đo lại thì khung `.section-inner`
   căn giữa hoàn hảo, nhưng cột đọc rộng 820px lại dính lề TRÁI của khung 1200px
   đó, chừa 420px trống bên phải. Ở khung nhìn 1860px thì lệch 380px, thấy rõ.

   🔴 Lỗi này CÓ TỪ ĐẦU, không phải do vòng nào gây ra. Bài chưa hề sửa lần nào
      (`/o-to-no-may-bat-dieu-hoa-co-ton-xang-khong/`) đo ra lệch đúng 380px y hệt.

   Vì sao khoá trong `body.single-post` chứ không khai trần `.article-content`:
     1. LiteSpeed minify GỘP selector trùng và giữ giá trị khai TRƯỚC, nên luật
        đè khai sau với cùng selector sẽ bị nuốt im lặng (bài học RC13).
        Selector dài hơn thì không trùng, không bị gộp.
     2. Khoá đúng bài viết. Trang sản phẩm là `single-product`, không dính.

   Đã cân nhắc và BỎ phương án thu hẹp cả `.section-inner` xuống 900px: nó kéo
   ba thẻ "Bài viết liên quan" từ 384px xuống 257px, hẹp đi một phần ba. Khối đó
   với form cuối trang vốn được thiết kế cho khổ rộng, không nên co lại.
   ═══════════════════════════════════════════════════════════════════════════ */
body.single-post .article-hero .breadcrumb,
body.single-post .article-hero h1,
body.single-post .article-hero .article-meta,
body.single-post .article-cover,
body.single-post .article-content,
body.single-post .article-foot{max-width:820px; margin-left:auto; margin-right:auto;}

/* ==========================================================================
   MÀN HÌNH RẤT HẸP (≤374px) — ba điểm nhấn đầu trang phải co thêm
   ==========================================================================
   20/08/2026 tối. Ở 320px (iPhone SE đời đầu) cụm ba điểm nhấn rộng 331px trong
   khi cột chữ chỉ có 288px, nên mục "Giao xe · toàn quốc" bị xén mất đuôi.

   🔴 Khổ 320px KHÔNG nằm trong 5 mốc chuẩn của dự án (1440/1280/768/430/390) và
      vốn đã tràn 27px từ trước vòng này. Khối dưới đây KHÔNG sửa cái tràn cũ đó —
      nó chỉ lo cho cụm điểm nhấn khỏi bị vòng này làm tệ thêm.
   🔴 Đặt CUỐI FILE, sau mọi khối @media khác, để khỏi phải cân độ đặc hiệu với
      luật `body.home .hero-highlights{gap:12px}` trong khối 900px.
   ⚠️ Không dùng lại `white-space:normal` để chữ tự xuống dòng: chữ vỡ dòng chính
      là thứ ảnh mẫu 20/08 loại bỏ. Thu nhỏ đều cả icon lẫn chữ thì giữ được hình.
   ========================================================================== */
@media (max-width:374px){
  body.home .hero-highlights{gap:8px;}
  body.home .hero-highlights .hh{gap:7px;}
  body.home .hero-highlights .hh-icon{width:26px; height:26px; border-radius:8px;}
  body.home .hero-highlights .hh-icon svg{width:14px; height:14px;}
  body.home .hero-highlights .t1{font-size:11.5px;}
  body.home .hero-highlights .t2{font-size:11px;}
}

/* ===========================================================================
   ĐẦU TRANG "CHƯƠNG TRÌNH ĐẶC BIỆT" — 21/08/2026, dựng theo ảnh mẫu anh Vũ gửi
   ===========================================================================
   Đặt ở CUỐI FILE có chủ ý: mấy khối `body.home` ở vòng 18–22 nằm phía trên và
   cũng động tới .hero-*, để đây thì không phải đấu độ đặc hiệu với chúng.

   ⚪ Bản live vốn đã có sẵn phần lớn ảnh mẫu: nền tối + ảnh showroom mờ, tấm giá
      nổi, ba điểm nhấn, hai nút, mũi tên, chấm tròn, khối tìm xe nền tối. Khối này
      chỉ thêm bốn thứ còn thiếu: viên nhãn vàng, tiêu đề ưu đãi, KHUNG VÀNG và
      BỤC SÁNG. Không dựng lại thứ đang chạy tốt.

   🔴 Khung vàng và bục sáng vẽ 100% bằng CSS. KHÔNG cắt ảnh mẫu ra làm nền: chữ
      nằm trong ảnh thì điện thoại đọc không nổi, trình đọc màn hình mù, Google mù,
      và mỗi tháng đổi con số lại phải đi sửa ảnh.
   =========================================================================== */

/* ---------- viên nhãn vàng thay dòng chữ nhỏ cũ ---------- */
.hero-pill{display:inline-flex; align-items:center; gap:9px; margin:0 0 18px;
  padding:8px 16px 8px 12px; border-radius:99px;
  border:1px solid rgba(233,188,85,.75); background:rgba(233,188,85,.10);
  color:#F2D79A; font-size:13px; font-weight:800; letter-spacing:.09em; text-transform:uppercase;
  text-shadow:none;}
.hero-pill svg{width:19px; height:19px; color:#E9BC55; flex:none;}

/* ---------- tiêu đề ưu đãi ---------- */
/* "hot" tô ánh kim: cùng cách với chữ PALISADE ở dải xe sắp ra mắt, để hai khối
   trên cùng một trang nhìn ra cùng một bàn tay. */
.hero-h1-uu-dai{font-size:clamp(34px,3.6vw,52px); font-weight:900; line-height:1.06;
  letter-spacing:-.02em; margin:0 0 22px; text-wrap:balance;}
.hero-h1-uu-dai em{font-style:italic;
  background:linear-gradient(176deg,#FFFFFF 4%,#DCE7F5 38%,#93AAC6 72%,#EEF4FC 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;}
.hero-h1-uu-dai .lua{-webkit-text-fill-color:initial; font-size:.78em; margin-left:.1em;}
.hero-h1-uu-dai .hl{display:block; font-size:.66em; font-weight:800; font-style:italic;
  letter-spacing:-.01em; margin-top:2px;}

/* ---------- khung vàng ưu đãi ---------- */
/* Ba cạnh sáng, cạnh đáy để xe tràn qua — đúng như ảnh mẫu. Không dùng ảnh nào. */
.hero-slide{position:relative;}
.hero-khung{position:absolute; z-index:0; top:1%; right:1.5%; width:66%; min-height:46%;
  display:flex; align-items:flex-start; gap:5%;
  padding:26px 26px 64px; border-radius:26px;
  border:2px solid rgba(233,188,85,.9);
  box-shadow:0 0 26px rgba(233,188,85,.34), inset 0 0 40px rgba(233,188,85,.07);
  background:linear-gradient(180deg, rgba(10,32,62,.34) 0%, rgba(10,32,62,0) 68%);}
.hk-o{flex:1 1 0; min-width:0; display:flex; flex-direction:column; line-height:1.12;}
.hk-nhan{font-size:clamp(11px,.92vw,14px); font-weight:800; letter-spacing:.05em;
  text-transform:uppercase; color:#F2D79A;}
.hk-lon{margin-top:4px; font-size:clamp(20px,1.9vw,29px); font-weight:900;
  letter-spacing:-.01em; text-transform:uppercase; color:#fff;}
/* Ô mang con số thì số to gấp đôi và tô vàng, đơn vị tụt xuống dòng dưới. */
.hk-o--so .hk-lon{font-size:clamp(42px,4.4vw,68px); line-height:.95; margin-top:2px;
  background:linear-gradient(176deg,#FFF4D2 8%,#F0CB80 44%,#CE9C35 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;}
.hk-phu{margin-top:3px; font-size:clamp(11px,.95vw,14.5px); font-weight:700;
  text-transform:uppercase; letter-spacing:.03em; color:#DCE7F5;}
.hk-o--so .hk-phu{color:#F2D79A;}

/* ---------- bục sáng dưới xe ---------- */
/* Hai lớp: quầng xanh toả rộng, và một vệt sáng hẹp ngay dưới bánh cho ra mặt bục. */
.hero-buc{position:absolute; z-index:0; left:50%; bottom:9%; transform:translateX(-50%);
  width:64%; aspect-ratio:5/1; border-radius:50%; pointer-events:none;
  background:
    radial-gradient(ellipse at 50% 50%, rgba(120,190,255,.55) 0%, rgba(60,140,225,.28) 42%, rgba(20,70,140,0) 72%);
  box-shadow:0 0 60px rgba(90,170,255,.35);}
.hero-buc::after{content:""; position:absolute; left:14%; right:14%; top:38%; height:26%;
  border-radius:50%; background:radial-gradient(ellipse, rgba(210,235,255,.6) 0%, rgba(210,235,255,0) 70%);}

/* Ảnh xe phải nổi TRÊN khung vàng và bục. */
.hero-car img{position:relative; z-index:1;}

/* ---------- khổ vừa: khung vàng thu lại cho khỏi chèn chữ ---------- */
@media (max-width:1180px){
  .hero-khung{width:72%; padding:20px 20px 54px; border-radius:22px; gap:4%;}
}

/* ---------- điện thoại ---------- */
/* Ảnh mẫu ở khổ này xếp dọc: nhãn → tiêu đề → 3 điểm nhấn → 2 nút → khung vàng +
   xe. Bản live vốn đã xếp đúng thứ tự đó, nên chỉ cần chỉnh cỡ. */
@media (max-width:820px){
  .hero-pill{margin-bottom:13px; padding:6px 13px 6px 10px; font-size:11px; letter-spacing:.07em;}
  .hero-pill svg{width:16px; height:16px;}
  .hero-h1-uu-dai{font-size:31px; margin-bottom:16px;}
  .hero-h1-uu-dai .hl{font-size:.68em;}

  /* Khung vàng trải hết bề ngang và hai ô đứng cạnh nhau. Xếp dọc hai ô thì khung
     cao gần gấp đôi mà chẳng thêm thông tin gì. */
  .hero-khung{top:0; right:0; left:0; width:auto; min-height:0;
    padding:15px 14px 44px; border-radius:18px; border-width:1.5px; gap:12px;
    box-shadow:0 0 18px rgba(233,188,85,.3), inset 0 0 26px rgba(233,188,85,.06);}
  .hk-nhan{font-size:9.5px; letter-spacing:.04em;}
  .hk-lon{font-size:16px;}
  .hk-o--so .hk-lon{font-size:40px;}
  .hk-phu{font-size:10px;}
  .hero-buc{bottom:6%; width:78%;}
}
@media (max-width:359px){
  .hero-h1-uu-dai{font-size:27px;}
  .hk-o--so .hk-lon{font-size:34px;}
  .hk-lon{font-size:14px;}
}

@media (prefers-reduced-motion:reduce){
  .hero-car img{animation:none;}
}

/* ---------- chỉnh lượt 2 sau khi so ảnh chụp với ảnh mẫu ---------- */
/* 🔴 Bốn chỗ ảnh chụp lộ ra mà số đo không nói được:
   1. chữ "TRIỆU ĐỒNG" nằm DƯỚI số 75 nên bị nóc xe che mất
   2. khung vàng quá cao, xe trèo lên chữ
   3. bục sáng không thấy đâu (quá mờ và quá thấp)
   4. tiêu đề chữ thường trong khi ảnh mẫu là chữ IN HOA và to hơn hẳn */

/* 1. Số và đơn vị nằm CẠNH nhau, đúng như ảnh mẫu: "75" to bên trái, "TRIỆU
      ĐỒNG" hai dòng nhỏ bên phải, cùng đứng trên một đường chân chữ. */
.hk-o--so{display:grid; grid-template-columns:auto minmax(0,1fr);
  grid-template-areas:"nhan nhan" "lon phu"; align-items:end; column-gap:10px;}
.hk-o--so .hk-nhan{grid-area:nhan;}
.hk-o--so .hk-lon{grid-area:lon;}
.hk-o--so .hk-phu{grid-area:phu; margin:0 0 .42em; max-width:5.2em; line-height:1.08;}

/* 2. Khung thấp lại, lùi vào trong, và chữ dồn lên đỉnh khung. */
.hero-khung{top:2%; right:3%; width:60%; min-height:0;
  padding:20px 22px 40px; align-items:flex-start;}

/* 3. Bục sáng: nâng lên ngang bánh xe và tăng độ sáng. Bản đầu để bottom:9% và
      màu quá nhạt nên nó nằm khuất dưới phần trong suốt của ảnh xe. */
.hero-buc{bottom:15%; width:70%; aspect-ratio:4.4/1;
  background:
    radial-gradient(ellipse at 50% 50%, rgba(150,210,255,.72) 0%, rgba(70,150,235,.4) 38%, rgba(20,70,140,0) 74%);
  box-shadow:0 0 70px rgba(110,185,255,.45);}
.hero-buc::after{left:18%; right:18%; top:34%; height:34%;
  background:radial-gradient(ellipse, rgba(232,245,255,.85) 0%, rgba(232,245,255,0) 72%);}

/* 4. Tiêu đề IN HOA và to hơn, đúng sức nặng của ảnh mẫu. */
.hero-h1-uu-dai{text-transform:uppercase; font-size:clamp(36px,4.1vw,58px);}
.hero-h1-uu-dai .hl{font-size:.6em; letter-spacing:0;}

@media (max-width:820px){
  .hero-khung{top:0; right:0; left:0; width:auto; padding:14px 13px 34px;}
  .hero-h1-uu-dai{font-size:33px;}
  .hk-o--so .hk-phu{max-width:4.6em; margin-bottom:.35em;}
  .hero-buc{bottom:11%; width:82%;}
}
@media (max-width:359px){ .hero-h1-uu-dai{font-size:28px;} }

/* ---------- lượt 3: bục sáng phải RA HÌNH BỤC, không chỉ là quầng mờ ---------- */
/* 🔴 Bản trước vẽ đúng (đo được 454x103, z-index 0, opacity 1) nhưng NHÌN KHÔNG
   THẤY: nền đầu trang vốn đã là xanh navy, một quầng xanh mờ đặt lên nền xanh thì
   biến mất. Đây là bẫy "đo thấy có, mắt thấy không" — phần tử tồn tại không có
   nghĩa là người ta nhìn ra nó.
   → Ảnh mẫu vẽ bục có VÀNH SÁNG rõ và lõi trắng xanh. Thêm vành bằng một lớp
     ::before riêng, và kéo lõi sáng hẳn lên. */
.hero-buc{bottom:16%; width:74%; aspect-ratio:4.2/1; overflow:visible;
  background:
    radial-gradient(ellipse at 50% 50%, rgba(214,240,255,.85) 0%, rgba(96,176,255,.55) 30%,
      rgba(38,112,205,.34) 55%, rgba(12,50,110,0) 78%);
  box-shadow:0 0 90px rgba(120,195,255,.5), 0 6px 40px rgba(60,150,240,.4);}
/* vành bục: một vòng elip mảnh sáng, cho ra cảm giác mặt bục có mép */
.hero-buc::before{content:""; position:absolute; inset:6% 3%;
  border-radius:50%; border:1.5px solid rgba(190,230,255,.55);
  box-shadow:0 0 18px rgba(150,210,255,.55), inset 0 0 24px rgba(150,210,255,.28);}
/* lõi sáng ngay dưới gầm xe */
.hero-buc::after{left:20%; right:20%; top:30%; height:40%;
  background:radial-gradient(ellipse, rgba(240,250,255,.95) 0%, rgba(190,230,255,.45) 45%, rgba(190,230,255,0) 75%);}

@media (max-width:820px){
  .hero-buc{bottom:12%; width:86%;}
}

/* ---------- lượt 4: bản điện thoại xếp lại theo đúng ảnh mẫu ---------- */
/* Đo bằng UA điện thoại thật (không chỉ đặt bề ngang 390px — `wp_is_mobile()` đọc
   User-Agent, đặt mỗi viewport thì máy chủ vẫn trả bản máy tính và mọi kết luận
   về bản điện thoại đều sai). Hai lỗi thật lộ ra:
     1. `.hero-car{order:-1}` (dòng ~1338) đẩy khối xe LÊN TRÊN cột chữ, trong khi
        ảnh mẫu xếp chữ trước rồi mới tới xe.
     2. Tấm giá nổi đè chồng lên ô ưu đãi đầu tiên, che mất "ƯU ĐÃI LÊN ĐẾN 75".  */
@media (max-width:1100px){
  /* 1. Trả khối xe về sau cột chữ. */
  body.home .hero-car{order:0;}
}
@media (max-width:820px){
  /* 2. Trong khổ này CHO CẢ BA THỨ VÀO DÒNG CHẢY thay vì chồng tuyệt đối lên nhau:
        tấm tên xe → khung ưu đãi → ảnh xe. Chồng tuyệt đối là cách của khổ máy tính,
        ở đó có chỗ rộng; ép nguyên cách đó xuống màn hẹp thì thứ nọ đè thứ kia.
     ⚪ Ảnh mẫu để tấm tên xe trôi lên tận đỉnh trang, tách rời khỏi xe. Em đặt nó
        ngay TRÊN khung ưu đãi, vẫn thuộc khối xe mà nó đang gọi tên — ở đỉnh trang
        nó đứng một mình, khách không biết nó nói về cái gì. */
  body.home .hero-slide{flex-direction:column; align-items:stretch;}
  body.home .hero-slide-cap{position:static; order:1; align-self:center;
    margin:0 0 9px; padding:7px 14px; border-radius:10px;}
  body.home .hero-slide-cap .n{font-size:12.5px;}
  body.home .hero-slide-cap .p{font-size:11.5px;}
  body.home .hero-khung{position:static; order:2; width:auto; padding:13px 13px 26px;}
  body.home .hero-slide img{order:3; margin-top:-30px;}
  /* Bục sáng vẫn tuyệt đối, nhưng bám theo ẢNH chứ không theo cả slide nữa. */
  body.home .hero-buc{bottom:6%; width:80%;}
}

/* ===========================================================================
   ĐẦU TRANG DÙNG ẢNH NỀN NGHỆ THUẬT (.home-top.co-anh-nen) — 21/08/2026
   ===========================================================================
   Anh Vũ tạo ảnh bằng ChatGPT: nền showroom đêm + khung vàng phát sáng + bục
   tròn phát sáng, KHÔNG có chữ và KHÔNG có xe. Chữ, số và xe là thứ thật đè lên.

   🔴🔴 CÁCH NEO CHỮ VÀO ĐÚNG LÒNG KHUNG VÀNG. `.hero-car` được ép ĐÚNG TỈ LỆ
        tấm ảnh (1536/1024) và mang chính tấm ảnh làm nền ở chế độ `cover`. Nhờ
        vậy KHÔNG có phần nào bị cắt, và mọi toạ độ % bên trong nó ăn khớp 1:1 với
        toạ độ % đo trên tấm ảnh. Đây là mấu chốt: nếu để ảnh làm nền cho cả khối
        đầu trang rồi cắt theo chiều cao, thì mỗi bề ngang màn hình lại cắt một
        kiểu và chữ trôi khỏi khung — sai kiểu đó rất khó lần ra.

   🔴 `.hero-car` tràn sang mép phải màn hình bằng `margin-right:calc(-50vw + 50%)`.
      Ảnh mẫu để khung vàng chạm mép phải; bó trong khung nội dung là hụt hẳn.
   ⚪ Phần trống bên trái ảnh nối liền với nền trang nhờ `--dt-mau` lấy đúng mã màu
      mép trái ảnh (#07142D, đo bằng sharp), nên không thấy đường ghép.
   =========================================================================== */
.home-top.co-anh-nen{background:var(--dt-mau, #07142D);}
/* Tắt hẳn lớp ảnh showroom mờ và lớp phủ của bản cũ — hai nền chồng nhau chỉ đục. */
.home-top.co-anh-nen::before,
.home-top.co-anh-nen::after{display:none;}

.co-anh-nen .hero{background:none;}
.co-anh-nen .hero::before,
.co-anh-nen .hero::after{display:none;}
.co-anh-nen .hero-inner{align-items:center; min-height:0; padding:0;}

/* Khối xe = đúng khuôn tấm ảnh. */
/* 🔴🔴 `align-self:center` LÀ BẮT BUỘC, đừng bỏ cho gọn.
   Mặc định ô lưới bị KÉO GIÃN cho bằng chiều cao hàng. Khi đó `aspect-ratio` tính
   ngược: nó lấy chiều cao đã bị kéo (696px) rồi nhân 1,5 ra bề ngang 1044px — tràn
   khỏi màn hình 276px, khung vàng và xe văng ra ngoài. Đo mới thấy; nhìn ảnh chụp
   chỉ thấy "ảnh nền phóng to quá" mà không đoán được vì sao.
   Chặn giãn thì bề ngang do lưới quyết (768px) và chiều cao suy ra (512px). */
/* 🔴🔴 LỀ ÂM PHẢI TÍNH BẰNG ĐƠN VỊ TUYỆT ĐỐI, KHÔNG DÙNG `%`.
   Mẹo quen tay `margin-right:calc(-50vw + 50%)` SAI ở đây: với một ô lưới, `%` quy
   chiếu theo BỀ NGANG Ô LƯỚI (648px) chứ không phải theo khung nội dung (1200px).
   Nên nó ra -720+324 = -396px, hộp phình thành 1044px và tràn khỏi màn hình 276px.
   Đo ra đúng con số 1044 mới lần được ra; nhìn ảnh chỉ thấy "nền phóng to quá".

   Công thức đúng: khoảng thừa bên phải khung nội dung = (100vw - --container) / 2.
   `min(0px, …)` để màn hẹp hơn khung nội dung thì không sinh lề DƯƠNG đẩy hộp vào. */
.co-anh-nen .hero-car{position:relative; align-self:center;
  height:auto; min-height:0; aspect-ratio:1536/1024;
  margin-right:min(0px, calc((var(--container) - 100vw) / 2 - 40px));
  background:var(--dt-nen-pc) center/cover no-repeat;}
.co-anh-nen .hero-car::before,
.co-anh-nen .hero-car::after{display:none;}

/* Hai ô ưu đãi nằm gọn trong lòng khung vàng. */
.co-anh-nen .hero-khung{position:absolute; z-index:2;
  left:var(--dt-k-trai); top:var(--dt-k-tren);
  width:var(--dt-k-rong); height:var(--dt-k-cao);
  right:auto; min-height:0;
  display:flex; align-items:center; gap:6%;
  padding:0; border:0; box-shadow:none; background:none; border-radius:0;}
.co-anh-nen .hk-o{flex:1 1 0;}

/* Xe đặt lên mặt bục. `day` là mép dưới xe tính từ đáy ảnh — ảnh xe là ảnh cắt
   nền nên phần dưới bánh gần như trong suốt, đã trừ hao trong con số đó. */
.co-anh-nen .hero-slide{position:absolute; inset:0;}
.co-anh-nen .hero-slide img{position:absolute; z-index:1;
  left:var(--dt-b-giua); bottom:var(--dt-b-day); transform:translateX(-50%);
  width:var(--dt-b-rong); max-width:none; height:auto; aspect-ratio:4/3;
  object-fit:contain; filter:drop-shadow(0 14px 22px rgba(0,0,0,.5));}
/* Bục sáng vẽ bằng CSS của bản trước KHÔNG dùng nữa — bục nay nằm trong ảnh. */
.co-anh-nen .hero-buc{display:none;}

/* Tấm tên xe: giữ nguyên vai trò, dời lên góc trên trái vùng ảnh cho khỏi đè khung. */
.co-anh-nen .hero-slide-cap{top:3%; left:2%;}

/* Cột chữ nằm trên phần trống bên trái của ảnh. */
.co-anh-nen .hero-text{position:relative; z-index:3; padding:0;}

@media (max-width:1100px){
  /* Khổ vừa và điện thoại dùng tấm ảnh DỌC, và khối xe trở lại dòng chảy bình thường. */
  .co-anh-nen .hero-car{aspect-ratio:1024/1536; margin-right:0;
    background-image:var(--dt-nen-dt);}
  .co-anh-nen .hero-khung{left:var(--dt-kd-trai); top:var(--dt-kd-tren);
    width:var(--dt-kd-rong); height:var(--dt-kd-cao);}
  .co-anh-nen .hero-slide img{left:var(--dt-bd-giua); bottom:var(--dt-bd-day);
    width:var(--dt-bd-rong);}
  /* 🔴 Cột chữ KHÔNG nằm đè lên ảnh dọc nữa mà đứng TRÊN nó. Ảnh dọc dành nửa trên
     cho chữ, nhưng nửa đó chỉ đủ chỗ khi chữ nhỏ xíu; để chữ đứng riêng thì nó tự
     giãn theo nội dung và không bao giờ tràn vào khung vàng. */
  .co-anh-nen .hero-inner{grid-template-columns:1fr;}
  .co-anh-nen .hero-text{padding:34px 0 4px;}
}

/* ---------- chỉnh lượt 2 sau khi so ảnh chụp ---------- */

/* 🔴 XE ĐẶT BẰNG `left` + `calc`, KHÔNG dùng `translateX(-50%)`.
   Ảnh xe đang chạy `animation:float` (khai ở .hero-car img), mà animation GHI ĐÈ
   thuộc tính `transform`. Nên translateX bị nuốt sạch, xe không lùi được nửa bề
   ngang và văng ra mép phải, nửa thân bị cắt. Đo ra: hộp ảnh nằm ở đúng toạ độ
   `left` chưa trừ, tức translate không hề chạy.
   → Trừ thẳng vào `left`. Hai biến cùng quy chiếu một hộp nên phép trừ này đúng. */
.co-anh-nen .hero-slide img{
  left:calc(var(--dt-b-giua) - var(--dt-b-rong) / 2);
  transform:none; animation:none;}

/* Ô ưu đãi phải nằm gọn trong lòng khung vàng. Khung rộng 42,6% của khối 768px =
   327px cho hai ô, nên chữ phải nhỏ hơn hẳn bản vẽ tay trước đó. */
.co-anh-nen .hk-nhan{font-size:clamp(9px,.78vw,12px); letter-spacing:.03em;}
.co-anh-nen .hk-lon{font-size:clamp(14px,1.35vw,21px); line-height:1.05;}
.co-anh-nen .hk-o--so .hk-lon{font-size:clamp(30px,3.1vw,48px);}
.co-anh-nen .hk-phu{font-size:clamp(8.5px,.72vw,11.5px); line-height:1.15;}
.co-anh-nen .hk-o--so .hk-phu{max-width:4.4em;}

/* 🔴 XOÁ ĐƯỜNG NỐI GIỮA ẢNH VÀ NỀN TRANG.
   Nền trang và mép trái ảnh cùng mã màu #07142D, nhưng ảnh có nhiễu và dải chuyển
   màu rất nhẹ nên vẫn lộ một vệt dọc ở chỗ ghép. Cho mép trái ảnh mờ dần vào nền
   thì hết hẳn, mà không mất gì: phần đó của ảnh vốn để trống. */
.co-anh-nen .hero-car{
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 22%);
  mask-image:linear-gradient(90deg, transparent 0, #000 22%);}

/* ---------- chỉnh lượt 3 ---------- */
/* 🔴 LỚP MỜ PHẢI ĐẶT RIÊNG, ĐỪNG MASK CẢ KHỐI.
   Bản trước mask thẳng `.hero-car`, mà mask ăn xuống MỌI thứ bên trong: tấm giá
   "Hyundai Tucson" nằm ở lề trái nên bị làm mờ theo, trông như lỗi vẽ. Đưa ảnh nền
   xuống một lớp ::before riêng rồi chỉ mask lớp đó — chữ và ảnh xe không dính. */
.co-anh-nen .hero-car{background:none; -webkit-mask-image:none; mask-image:none;}
.co-anh-nen .hero-car::before{content:""; display:block; position:absolute; inset:0; z-index:0;
  background:var(--dt-nen-pc) center/cover no-repeat;
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 22%);
  mask-image:linear-gradient(90deg, transparent 0, #000 22%);}
@media (max-width:1100px){
  .co-anh-nen .hero-car::before{background-image:var(--dt-nen-dt);
    -webkit-mask-image:none; mask-image:none;}
}

/* 🔴 VIẾT TÁCH TỪNG THUỘC TÍNH, ĐỪNG VIẾT GỘP `background:` KHI CÓ `var()`.
   Bản trước dùng `background:var(--dt-nen-pc) center/cover no-repeat` trên ::before
   và trình duyệt tính ra `background-image: none` — ảnh nền biến mất sạch, trong khi
   CSS trong file nhìn hoàn toàn đúng. Viết gộp mà một mảnh var() không thay được thì
   CẢ khai báo hỏng và mọi thuộc tính con rơi về mặc định, không có cảnh báo nào.
   Viết tách thì hỏng mảnh nào chỉ mất mảnh đó. */
.co-anh-nen .hero-car::before{
  background-image:var(--dt-nen-pc);
  background-size:cover; background-position:center; background-repeat:no-repeat;}
@media (max-width:1100px){
  .co-anh-nen .hero-car::before{background-image:var(--dt-nen-dt);}
}

/* 🔴🔴 ĐỘ ĐẶC HIỆU: PHẢI CÓ `body.home` Ở ĐẦU.
   Dòng 2628 có `body.home .hero-car::before{background:none}` — độ đặc hiệu (0,2,2),
   trong khi `.co-anh-nen .hero-car::before` chỉ (0,2,1). Luật cũ THẮNG, nên ảnh nền
   bị xoá sạch dù CSS mới nhìn hoàn toàn đúng và nằm cuối file.
   Mất bốn lượt thử mới lần ra: biến CSS đúng, đường dẫn đúng, phần tử có kích thước
   đúng, chỉ mỗi `background-image` tính ra `none` mà không ai báo gì.
   → Bài học: đè một luật cũ thì phải ĐẾM ĐỘ ĐẶC HIỆU, đừng tin vào "nằm sau thì thắng". */
body.home .co-anh-nen .hero-car::before{
  content:""; display:block; position:absolute; inset:0; z-index:0;
  background-image:var(--dt-nen-pc);
  background-size:cover; background-position:center; background-repeat:no-repeat;
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 22%);
  mask-image:linear-gradient(90deg, transparent 0, #000 22%);}
body.home .co-anh-nen .hero-car::after{display:none;}
@media (max-width:1100px){
  body.home .co-anh-nen .hero-car::before{background-image:var(--dt-nen-dt);
    -webkit-mask-image:none; mask-image:none;}
}

/* ---------- ẢNH NỀN Ở KHỔ ĐIỆN THOẠI: CẮT LẤY PHẦN DƯỚI ---------- */
/* 🔴 Ảnh dọc dành nửa TRÊN cho chữ, nhưng ở đây chữ đã đứng riêng phía trên rồi,
   nên nửa đó thành một mảng tối trống trơn cao gần 500px và đẩy khung vàng cùng
   chiếc xe rơi xuống tận đáy, bị cắt.
   → Ép khối xe về tỉ lệ 1024/845 và neo ảnh vào ĐÁY, tức chỉ lấy 55% dưới của ảnh
     (từ 45% trở xuống) — đúng vùng có khung vàng và bục.
   ⚠️ Cắt ảnh thì MỌI toạ độ % phải quy đổi lại theo hộp đã cắt, không dùng chung
      số với ảnh nguyên. Bộ số khung_dt/buc_dt trong inc/dau-trang-thang.php đã là
      số của hộp đã cắt: lấy toạ độ trên ảnh trừ 45 rồi chia 55. */
@media (max-width:1100px){
  body.home .co-anh-nen .hero-car{aspect-ratio:1024/845;}
  body.home .co-anh-nen .hero-car::before{background-position:center bottom;}
  /* Tấm tên xe trở lại kiểu neo tuyệt đối, đặt trên đỉnh vùng ảnh. Kiểu "trôi theo
     dòng" của bản không-ảnh làm nó lửng lơ giữa mảng tối. */
  body.home .co-anh-nen .hero-slide-cap{position:absolute; order:0; top:2%; left:50%;
    transform:translateX(-50%); margin:0;}
  body.home .co-anh-nen .hero-slide{position:absolute; inset:0; flex-direction:row; align-items:stretch;}
  body.home .co-anh-nen .hero-slide img{margin-top:0;}
  /* Chữ trong khung vàng ở khổ này rộng chỗ hơn nên nâng cỡ lên cho dễ đọc. */
  body.home .co-anh-nen .hero-khung{gap:8px; align-items:center;}
  body.home .co-anh-nen .hk-nhan{font-size:9.5px;}
  body.home .co-anh-nen .hk-lon{font-size:17px;}
  body.home .co-anh-nen .hk-o--so .hk-lon{font-size:38px;}
  body.home .co-anh-nen .hk-phu{font-size:9.5px;}
}

/* ---------- điện thoại: trả xe về đúng bộ toạ độ của khổ này ---------- */
/* 🔴🔴 LUẬT THÊM SAU ĐÈ LÊN LUẬT TRONG @media. Ở lượt trước em thêm dòng
   `left:calc(var(--dt-b-giua) - …)` KHÔNG bọc trong media query, đặt ở cuối file.
   Nó thắng luôn luật trong khối `@media (max-width:1100px)` viết phía trên, nên ở
   điện thoại chiếc xe vẫn ăn toạ độ của khổ MÁY TÍNH: to gấp rưỡi, lệch sang phải,
   đè kín chữ trong khung vàng.
   → Mỗi lần thêm một luật không có media query vào cuối file thì phải tự hỏi: nó có
     đè lên khối điện thoại nào không. Đây là lần thứ hai trong phiên này. */
@media (max-width:1100px){
  body.home .co-anh-nen .hero-slide img{
    left:calc(var(--dt-bd-giua) - var(--dt-bd-rong) / 2);
    bottom:var(--dt-bd-day); width:var(--dt-bd-rong);}

  /* Tấm tên xe ra HẲN ngoài vùng ảnh, đứng trên nó. Đặt trong vùng ảnh thì kiểu gì
     cũng chồng lên khung vàng — khung chiếm gần nửa trên của vùng đó. */
  body.home .co-anh-nen .hero-car{margin-top:56px;}
  body.home .co-anh-nen .hero-slide-cap{position:absolute; top:-46px; left:50%;
    transform:translateX(-50%); margin:0; white-space:nowrap;}
}

/* ===========================================================================
   SỬA BỐ CỤC — 21/08/2026, sau khi anh Vũ chỉ ra khoảng trống chết ở giữa
   ===========================================================================
   Đo được: chữ hết ở 672px, xe bắt đầu ở 1028px → 356px trống, đúng 25% bề ngang,
   và giữ nguyên 24–25% ở cả bốn khổ 1280/1440/1680/1920. Khối đầu trang vỡ thành
   hai hòn đảo dạt hai mép. Ảnh mẫu chỉ trống 11%.

   🔴 VÌ SAO KHÔNG SỬA ĐƯỢC BẰNG CÁCH DỜI RIÊNG CHIẾC XE. Xe phải đứng trên bục,
      mà bục nằm cố định ở 71% bề ngang TẤM ẢNH. Dời xe là xe rời khỏi bục. Muốn
      xe vào giữa màn thì phải dời CẢ TẤM ẢNH sang trái.

   ⚪ CÁCH LÀM: cho khối ảnh thò sang trái, chui xuống dưới cột chữ. Phần trái tấm
      ảnh vốn để trống và đã làm mờ dần, nên chữ nằm đè lên vẫn đọc rõ — đây đúng là
      thứ tấm ảnh được vẽ ra để làm. Kèm theo phải cắt bớt ảnh theo chiều dọc
      (xem qa/cat-nen-pc.js), không thì khối rộng ra bao nhiêu là cao thêm bấy nhiêu.
   =========================================================================== */
body.home .co-anh-nen .hero-car{
  /* Tỉ lệ mới của ảnh đã cắt. Sai số này là vỡ hết toạ độ chữ. */
  aspect-ratio:1536/870;
  /* Thò sang trái 34% bề ngang ô lưới. Dùng % để tự co giãn theo khổ màn: gõ cứng
     px thì ở 1920 khoảng trống lại hở ra. */
  margin-left:-34%;}
/* Vệt mờ phải phủ rộng hơn vì khối nay thò sâu xuống dưới cột chữ. */
body.home .co-anh-nen .hero-car::before{
  -webkit-mask-image:linear-gradient(90deg, transparent 0, #000 34%);
  mask-image:linear-gradient(90deg, transparent 0, #000 34%);}
/* Cột chữ phải nổi hẳn lên trên khối ảnh vừa chui xuống dưới nó. */
body.home .co-anh-nen .hero-text{position:relative; z-index:4;}

/* Tấm giá nổi đã gỡ khỏi HTML. Xoá nốt mấy luật cũ của nó cho khỏi để lại rác. */
body.home .co-anh-nen .hero-slide-cap{display:none;}

@media (max-width:1100px){
  /* Khổ điện thoại KHÔNG thò trái: ở đó cột chữ đứng riêng phía trên, không có
     chỗ nào để chui xuống, mà thò ra là ảnh lệch khỏi màn. */
  body.home .co-anh-nen .hero-car{margin-left:0; aspect-ratio:1024/845;}
  body.home .co-anh-nen .hero-car::before{-webkit-mask-image:none; mask-image:none;}
}

/* Màn 1280x800 (laptop phổ biến): khối ảnh cao 514px đẩy đáy thẻ Tìm xe xuống 810px,
   tức thò khỏi màn 10px. Thu bớt phần thò trái ở khổ này — mất vài phần trăm khoảng
   trống nhưng đổi lại cả thẻ Tìm xe nằm trọn màn đầu, thứ đáng giá hơn nhiều. */
@media (max-width:1400px){
  body.home .co-anh-nen .hero-car{margin-left:-22%;}
}

/* ===========================================================================
   BẢN TẠM: ĐẦU TRANG LÀ DẢI XE SẮP RA MẮT (.hero-tam-dai) — 21/08/2026
   ===========================================================================
   Bật/tắt ở hnt_dau_trang_tam_dai_xe() trong inc/dau-trang-thang.php.
   Khối này CỐ Ý ngắn: nó chỉ dựng chỗ cho dải .pl-bn vốn đã tự lo giao diện, và
   tắt mấy thứ của khối "Ưu đãi hot" không còn dùng tới. */
body.home .hero-tam-dai{background:none; padding:28px 0 0; min-height:0;}
body.home .hero-tam-dai::before,
body.home .hero-tam-dai::after{display:none;}
/* Dải tự có bóng và bo góc riêng, nên nền tối của .home-top chỉ làm khung viền. */
body.home .hero-tam-dai .pl-bn{box-shadow:0 20px 50px rgba(2,10,24,.45);}

/* Tiêu đề chính: một dòng gọn, không tranh chỗ với dải. */
.hero-tam-h1{margin:0 0 16px; font-size:clamp(15px,1.5vw,19px); font-weight:800;
  letter-spacing:.02em; color:#E8F0FB; line-height:1.35;}
.hero-tam-h1 span{display:inline; font-weight:600; color:#9FC4EE;}
.hero-tam-h1 span::before{content:" · ";}

/* Thẻ Tìm xe bình thường thụt lên đè đáy hero. Ở bản tạm thì dải có bo góc và
   bóng riêng, thụt lên là cắt mất góc dưới của nó. */
body.home .hero-tam-dai + .filter-wrap .filter-card{margin-top:26px;}

@media (max-width:820px){
  body.home .hero-tam-dai{padding:18px 0 0;}
  .hero-tam-h1{margin-bottom:12px; font-size:14px;}
  .hero-tam-h1 span{display:block;}
  .hero-tam-h1 span::before{content:none;}
  body.home .hero-tam-dai + .filter-wrap .filter-card{margin-top:18px;}
}

/* Dải cao 642px ở bề ngang 1200. Cộng thanh menu 142 + lề + dòng h1 thì ở màn
   1280x800 (laptop rất phổ biến) chính cái dải bị cắt mất 42px đáy.
   🔴 Đã cân nhắc và BỎ phương án ép dải hẹp lại theo chiều cao màn: ở 800px cao thì
      dải chỉ còn rộng 691px, lọt thỏm giữa khung 1200px, nhìn như lỗi.
   → Thu bề ngang một nấc vừa phải (1120px) và bóp lề dọc. Đủ để cả dải nằm trọn
     màn đầu ở 800px, mà vẫn gần như tràn hết khung nội dung.
   ⚪ Thẻ "Tìm xe nhanh" khi đó nằm ngay dưới mép màn ở laptop thấp. Chấp nhận: đây
      là bản tạm, và dải chính là thứ anh Vũ muốn khách thấy trước. */
body.home .hero-tam-dai{padding:16px 0 0;}
body.home .hero-tam-dai .pl-bn{max-width:1120px; margin:0 auto;}
.hero-tam-h1{margin-bottom:10px;}

/* ==========================================================================
   KHỐI ĐẶT COC THIỆN CHÍ — 24/08/2026  ·  markup ở inc/dat-coc.php
   ==========================================================================
   Khối này thay đoạn "Quyền lợi khi đặt cọc thiện chí" trong bài của xe sắp ra
   mắt. Anh Vũ chốt kiểu nút VÀNG ngày 24/08 (bản mẫu có hai kiểu, xanh và vàng)
   vì cả trang đã toàn xanh đậm, nút xanh nữa thì chìm.

   🔴 BẢNG ẨN BẰNG CSS, KHÔNG BẰNG THUỘC TÍNH `hidden`. Luật `.dc-man:target`
      bên dưới là đường mở khi máy khách không chạy được JavaScript. Đặt `hidden`
      lên thẻ đó là thắng cả `:target` và khoá luôn đường đó — khách vẫn thấy nút
      phát sáng mà bấm không ra gì, và không chỗ nào báo.

   🔴 MỌI HIỆU ỨNG PHẢI TẮT KHI MÁY KHAI "bớt chuyển động". Nút vẫn nổi nhờ màu
      và bóng chứ không nhờ chuyển động, nên tắt đi không mất gì.
   ========================================================================== */

.dc-hop{position:relative; background:#fff; border:1px solid #DCE3EC; border-radius:14px;
  padding:22px 22px 20px; margin:26px 0;
  box-shadow:0 1px 2px rgba(0,44,95,.05), 0 12px 30px rgba(0,44,95,.07);}
.dc-hop::before{content:""; position:absolute; inset:0 0 auto 0; height:4px;
  background:linear-gradient(90deg,#002C5F,#0A4E96 55%,#C9A227); border-radius:14px 14px 0 0;}

.dc-dau{display:flex; align-items:flex-start; gap:13px;}
.dc-ic{width:40px; height:40px; flex:none; border-radius:11px; background:#EAF1FA;
  display:grid; place-items:center;}
.dc-ic svg{width:21px; height:21px; stroke:#002C5F; fill:none; stroke-width:1.9;}
/* Ghi đè cỡ h2 mặc định của thân bài: trong hộp thì tiêu đề nhỏ lại một nấc. */
.article-content .dc-hop h2.dc-tieu{margin:0; font-size:21px; font-weight:800;
  color:#002C5F; letter-spacing:-.015em; line-height:1.3;}
.dc-muc{margin:3px 0 0; font-size:15px; line-height:1.6; color:#41506B;}
.dc-muc b{color:#002C5F; font-weight:700;}

/* ── Danh sách quyền lợi: dấu tích xanh thay chấm tròn ──
   🔴 PHẢI KHAI CẢ HAI VẾ. Vế `.article-content` là để thắng luật danh sách của
      thân bài; vế trần là để khối còn chạy được ở TRANG CHI TIẾT XE, nơi không
      có `.article-content` nào cả.
      Bản đầu chỉ khai vế đầu: trên trang xe danh sách rơi về kiểu mặc định, mỗi
      dòng hiện CẢ chấm đen LẪN dấu tích, và chữ tụt xuống dòng dưới dấu tích.
      Và 39 phép kiểm vẫn xanh hết, vì chúng đếm số dấu tích chứ không hỏi
      "chấm đầu dòng đã tắt chưa" và "chữ có nằm cùng hàng với dấu tích không".
      Cùng họ với vụ nút bị gạch chân sáng nay: neo vào một lớp chỉ có ở một
      trang, rồi đem khối sang trang khác. */
ul.dc-ql,
.article-content ul.dc-ql{list-style:none; margin:16px 0 0; padding:0;
  display:grid; gap:11px;}
ul.dc-ql > li,
.article-content ul.dc-ql li{display:flex; align-items:flex-start; gap:11px;
  margin:0; padding:0; font-size:16px; line-height:1.55; color:#111827;
  list-style:none;}
ul.dc-ql > li::marker{content:"";}
.dc-tk{width:23px; height:23px; flex:none; margin-top:1px; border-radius:50%;
  background:#E8F5EE; display:grid; place-items:center;}
.dc-tk svg{width:13px; height:13px; stroke:#0F7A3D; fill:none; stroke-width:2.9;
  stroke-linecap:round; stroke-linejoin:round;}

/* ── Nút phát sáng ── */
.dc-nut-boc{margin-top:20px; display:flex; flex-direction:column; align-items:center; gap:8px;}
/* 🔴 PHẢI KÈM `.article-content` PHÍA TRƯỚC. Nút này là thẻ <a> và nó nằm trong
   thân bài, mà thân bài có sẵn luật `.article-content a{color:#0066CC;
   text-decoration:underline}`. Luật đó ĐẶC HIỆU HƠN `.dc-nut` trần, nên bản đầu
   ra một cái nút vàng có chữ xanh gạch chân.

   ⚠️ Và axe KHÔNG bắt được lỗi này: nó không chấm được tương phản khi nền là
      chuyển sắc, nên nó bỏ qua đúng cái nút — im lặng, không kêu. Chỗ này phải
      đo bằng mắt và đo bằng phép so màu riêng, xem qa-thu-dat-coc.mjs. */
.article-content a.dc-nut,
.dc-nut{position:relative; display:inline-flex; align-items:center; justify-content:center;
  gap:10px; overflow:hidden; text-decoration:none; cursor:pointer;
  font-size:17px; font-weight:700; letter-spacing:.01em; padding:15px 30px; border-radius:12px;
  color:#3A2A00; background:linear-gradient(180deg,#F0C244,#D8A31C);
  box-shadow:0 6px 18px rgba(184,134,11,.34);
  transition:transform .16s ease, box-shadow .16s ease;
  animation:dc-tho 2.4s ease-in-out infinite;}
.article-content a.dc-nut:hover,
.dc-nut:hover{transform:translateY(-2px); color:#3A2A00; text-decoration:none;}
.dc-nut:active{transform:translateY(0);}
.dc-nut svg{width:19px; height:19px; stroke:currentColor; fill:none; stroke-width:2;}
.dc-nut-phu{font-size:13.5px; color:#55637A;}

@keyframes dc-tho{
  0%,100%{box-shadow:0 6px 18px rgba(184,134,11,.34), 0 0 0 0 rgba(216,163,28,.45);}
  50%    {box-shadow:0 6px 22px rgba(184,134,11,.42), 0 0 0 12px rgba(216,163,28,0);}
}
/* Vệt chớp sáng quét ngang. */
.dc-nut::after{content:""; position:absolute; top:0; bottom:0; width:42%; left:-60%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.72),transparent);
  transform:skewX(-18deg); animation:dc-quet 3.6s ease-in-out infinite;}
@keyframes dc-quet{0%{left:-60%} 55%,100%{left:130%}}

/* ── Bảng giữ suất ── */
.dc-man{position:fixed; inset:0; z-index:120; padding:18px;
  background:rgba(6,14,28,.55); display:none; place-items:center;}
.dc-man:target,
.dc-man.dc-mo{display:grid;}
.dc-bang{background:#fff; width:100%; max-width:470px; max-height:92vh; overflow:auto;
  border-radius:16px; padding:24px; box-shadow:0 24px 60px rgba(0,20,45,.4);}
.dc-bang-dau{display:flex; align-items:flex-start; justify-content:space-between; gap:12px;}
.dc-bang-dau h3{margin:0; font-size:20px; font-weight:800; color:#002C5F; letter-spacing:-.015em;}
.dc-dan{margin:7px 0 0; font-size:14.5px; line-height:1.6; color:#41506B;}
/* Cùng lý do với .dc-nut: nút đóng cũng là thẻ <a> trong thân bài. */
.article-content a.dc-dong,
.dc-dong{flex:none; width:32px; height:32px; border-radius:9px; background:#F1F4F9;
  display:grid; place-items:center; font-size:19px; line-height:1; color:#55637A;
  text-decoration:none; cursor:pointer;}
.article-content a.dc-dong:hover,
.dc-dong:hover{background:#E6EBF3; color:#334; text-decoration:none;}

.dc-o{margin-top:14px;}
.dc-o label{display:block; font-size:13px; font-weight:700; color:#334; margin-bottom:5px;}
/* 🔴 CỠ CHỮ 16px LÀ BẮT BUỘC. Dưới 16px thì iOS Safari tự phóng to cả trang khi
   khách bấm vào ô nhập, bố cục nhảy một cái và không lùi lại được. */
.dc-o input,.dc-o select{width:100%; font-family:inherit; font-size:16px; color:#111827;
  padding:11px 12px; border:1px solid #C2CDDC; border-radius:10px; background:#fff;}
.dc-o input:focus,.dc-o select:focus{outline:2px solid #0A4E96; outline-offset:1px;
  border-color:#0A4E96;}
.dc-hai{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
.dc-note{margin:14px 0 0; font-size:13.5px; line-height:1.6; color:#41506B;
  background:#F7F8FA; border:1px solid #DCE3EC; border-radius:10px; padding:10px 12px;}
.dc-gui{width:100%; margin-top:16px; padding:14px; border:0; border-radius:12px;
  background:#002C5F; color:#fff; font-family:inherit; font-size:16px; font-weight:700;
  cursor:pointer;}
.dc-gui:hover{background:#013A78;}

@media (max-width:560px){
  .dc-hai{grid-template-columns:1fr;}
  .dc-hop{padding:18px 16px 16px;}
  .dc-nut{width:100%; padding:15px 18px;}
}

@media (prefers-reduced-motion:reduce){
  .dc-nut{animation:none; transition:none;}
  .dc-nut::after{display:none;}
  .dc-nut:hover{transform:none;}
}

/* ── Khối đặt cọc khi đứng riêng một khu ở TRANG CHI TIẾT XE ──────────────
   Ở bài tin tức khối nằm lọt trong thân bài nên tự có lề. Ở trang xe nó là một
   khu riêng, phải tự lo khoảng cách và bề ngang. */
.dc-khu{padding:34px 0;}
.dc-khu .dc-hop{margin:0 auto; max-width:820px;}
/* Ảnh chương trình trưng bày, ngay trên khối quyền lợi. Cùng bề ngang với .dc-hop
   để hai khối thẳng mép nhau; lệch mép là nhìn ra ngay trên màn rộng.
   ⚪ aspect-ratio khai đúng tỉ lệ ảnh gốc 1536x1024 để chỗ trống được giữ sẵn,
      ảnh tải xong không đẩy nội dung bên dưới nhảy xuống. */
.dc-poster{margin:0 auto 18px; max-width:820px;}
.dc-poster-anh{display:block; width:100%; height:auto; aspect-ratio:3/2;
  object-fit:cover; border-radius:14px; border:1px solid #DCE3EC;
  box-shadow:0 1px 2px rgba(0,44,95,.05), 0 12px 30px rgba(0,44,95,.07);}
@media (max-width:820px){ .dc-poster{margin-bottom:14px;} .dc-poster-anh{border-radius:12px;} }
@media (max-width:820px){ .dc-khu{padding:22px 0;} }

/* ── Nháy sáng cho nút "Xem chương trình đặt cọc" trên dải banner ──────────
   Anh Vũ yêu cầu 24/08: nút này cũng phát sáng như nút đặt cọc trong bài.

   🔴 KHÔNG đổi màu, không đổi cỡ, không đổi chữ. Nút này nằm trong dải banner
      đo mọi thứ bằng `cqw` (phần trăm bề ngang khối chứa nó) — đụng vào cỡ là
      vỡ tỉ lệ ở khổ màn giữa. Chỉ thêm chuyển động.

   🔴 `:hover` PHẢI TẮT HIỆU ỨNG. Chuyển động ghi đè lên `box-shadow` thường,
      nên không tắt thì luật `:hover` có sẵn của nút không bao giờ hiện ra —
      rê chuột vào mà nút không phản ứng gì, trông như hỏng.

   ⚪ Vòng sáng lan ra dùng `px` chứ không `cqw`: ở khổ điện thoại dải banner
      đổi hẳn bố cục, `cqw` lúc đó ra một con số khác hẳn ý định. */
.pl-bn-nut{position:relative; overflow:hidden;
  animation:pl-nut-tho 2.4s ease-in-out infinite;}
@keyframes pl-nut-tho{
  0%,100%{box-shadow:0 0 1.4cqw rgba(240,203,128,.28), 0 0 0 0 rgba(240,203,128,.40);}
  50%    {box-shadow:0 0 2.2cqw rgba(240,203,128,.50), 0 0 0 10px rgba(240,203,128,0);}
}
.pl-bn-nut::after{content:""; position:absolute; top:0; bottom:0; left:-60%; width:42%;
  background:linear-gradient(100deg,transparent,rgba(255,236,190,.55),transparent);
  transform:skewX(-18deg); pointer-events:none;
  animation:dc-quet 3.6s ease-in-out infinite;}
.pl-bn-nut:hover{animation:none;}
.pl-bn-nut:hover::after{animation:none; opacity:0;}

@media (prefers-reduced-motion:reduce){
  .pl-bn-nut{animation:none;}
  .pl-bn-nut::after{display:none;}
}

/* ── Nút đang gửi: vòng xoay + mờ đi, để bấm cái là thấy phản hồi ────────── */
.hnt-dang-gui{position:relative; opacity:.72; cursor:wait;}
.hnt-dang-gui::before{content:""; display:inline-block; width:15px; height:15px;
  margin-right:9px; vertical-align:-2px; border-radius:50%;
  border:2px solid currentColor; border-top-color:transparent;
  animation:hnt-xoay .7s linear infinite;}
@keyframes hnt-xoay{to{transform:rotate(360deg);}}
/* 🔴 Máy khai "bớt chuyển động" thì bỏ vòng xoay, nhưng VẪN phải mờ đi và vẫn
   đổi chữ — đó mới là tín hiệu chính. Bỏ cả hai là quay về đúng lỗi vừa sửa. */
@media (prefers-reduced-motion:reduce){
  .hnt-dang-gui::before{animation:none; border-top-color:currentColor; opacity:.5;}
}

/* ── Thẻ báo "Chưa gửi được" khi lượt gửi bị lớp chặn tạm dừng ────────────
   Markup ở functions.php · hnt_lead_bao_loi(). Xem chú thích tại đó: khối này
   sinh ra để THÔI NÓI DỐI, bản cũ chặn xong vẫn đưa khách tới trang cảm ơn.
   🔴 z-index phải CAO HƠN bảng đặt cọc (120), không thì khách mở bảng là thẻ báo
      nằm khuất bên dưới, đúng lúc cần đọc nhất. */
.hnt-bao-loi{position:fixed; inset:auto 0 0 0; z-index:200; padding:14px;
  display:flex; justify-content:center; pointer-events:none;}
.hnt-bao-loi-hop{pointer-events:auto; position:relative; display:flex; gap:13px;
  align-items:flex-start; width:100%; max-width:560px; background:#fff;
  border:1px solid #F0C9C0; border-left:4px solid #B4372A; border-radius:14px;
  padding:16px 44px 16px 16px; box-shadow:0 14px 40px rgba(10,20,35,.22);}
.hnt-bao-loi-ic{flex:none; width:34px; height:34px; border-radius:50%; background:#FDECE8;
  display:grid; place-items:center;}
.hnt-bao-loi-ic svg{width:19px; height:19px; stroke:#B4372A; fill:none; stroke-width:2;}
.hnt-bao-loi-tieu{margin:0 0 3px; font-size:16px; font-weight:800; color:#8E2A1F;}
.hnt-bao-loi-chu{margin:0; font-size:14.5px; line-height:1.6; color:#41506B;}
.hnt-bao-loi-nut{display:flex; gap:9px; flex-wrap:wrap; margin-top:11px;}
.hnt-bao-loi-nut a{display:inline-flex; align-items:center; text-decoration:none;
  font-size:14px; font-weight:700; padding:9px 15px; border-radius:10px;}
.hnt-bl-goi{background:#002C5F; color:#fff;}
.hnt-bl-goi:hover{background:#013A78; color:#fff; text-decoration:none;}
.hnt-bl-zalo{background:#fff; color:#002C5F; border:1px solid #C2CDDC;}
/* Thẻ báo đang hiện thì giấu cụm ba nút nổi đi. Đo 26/08 khổ 390px: thẻ báo trải
   hết bề ngang và đè gần kín cụm nút, chỉ chừa ĐÚNG 1px mép trên nên nhìn như lỗi
   vẽ. Không mất chức năng nào vì thẻ báo đã có sẵn nút Gọi và nút Zalo.
   Lớp này do hnt_lead_body_class() gắn, main.js gỡ ra khi khách bấm đóng thẻ. */
body.hnt-co-bao-loi .hnt-noi-phai{display:none;}
.hnt-bl-zalo:hover{background:#F1F4F9; color:#002C5F; text-decoration:none;}
.hnt-bao-loi-dong{position:absolute; top:10px; right:10px; width:30px; height:30px;
  border:0; border-radius:8px; background:#F1F4F9; color:#55637A; font-size:18px;
  line-height:1; cursor:pointer;}
.hnt-bao-loi-dong:hover{background:#E6EBF3; color:#334;}
@media (max-width:560px){
  .hnt-bao-loi{padding:10px;}
  .hnt-bao-loi-hop{padding:14px 40px 14px 14px;}
  .hnt-bao-loi-nut a{flex:1; justify-content:center;}
}

/* ══ DƯỚI 360px — MÀN HẸP NHẤT CÒN GẶP THẬT (27/08/2026) ═══════════════════
   🔴 Lỗi này CÓ SẴN từ trước bản gộp ưu đãi, không phải do nó đẻ ra: đo bản đang
      chạy trên web thật ở 320px thì "523.486.000 đ" và "5,89 → 3,37 triệu*" đều
      gãy hai dòng, riêng Santa Fe gãy BA dòng (70px). Ở 390px thì không sao —
      đúng kiểu bẫy "chỉ đo một khổ màn rồi kết luận cho cả loạt".
   Hai cột ở 320px cho mỗi ô ~112px chữ, mà con số dài nhất cần ~130px. Không có
   cách nào bóp chữ cho vừa mà vẫn đọc được, nên xếp một cột.
   Đặt CUỐI FILE có chủ ý: cùng độ đặc hiệu với luật ≤640px ở trên, phải đứng sau
   mới thắng. Dời lên trên là luật này thua và không có gì báo. */
@media (max-width:360px){
  #cost .cost-grid, #cost .cost-grid.cost-grid-3{grid-template-columns:1fr;}
}

/* ==========================================================================
   ALBUM ẢNH XE — BĂNG CHUYỀN VÒNG CUNG (30/08/2026)
   Anh Vũ chọn mẫu 2 trong bốn mẫu đã dựng. Ảnh giữa đứng thẳng và lớn, hai bên
   xoay nghiêng lùi vào chiều sâu; trên điện thoại lướt tay để chuyển.

   🔴 KHỐI NÀY PHẢI NẰM CUỐI FILE. Luật cũ của album ở dòng ~1418, ~1517, ~1789,
      ~2341 và ~2379 dùng đúng những tên lớp này. `.hnt-cung .gallery-tile` hơn
      `.gallery-tile` một bậc nên thắng, nhưng `.gallery-tile.big` cũng hai bậc —
      hoà thì AI KHAI SAU THẮNG. Dời khối này lên trên là băng chuyền vỡ về lưới
      mà không có gì báo. Cùng loại bẫy với khối #cost ngay trên đây.

   🔴 LỚP `hnt-cung` DO JS GẮN VÀO. Không có JS thì mọi luật dưới đây câm, và khối
      ảnh vẫn là lưới như trước — đủ ảnh, bấm phóng to được. Hiệu ứng chỉ là lớp
      phủ, không phải chỗ chứa nội dung.
   ========================================================================== */
.gallery-grid.hnt-cung{
  display:block; position:relative; height:430px;
  grid-template-columns:none; grid-auto-rows:auto; gap:0;
  perspective:1300px; perspective-origin:50% 46%;
  /* Thẻ tràn ra hai mép là cố ý — nhưng đừng để nó đẩy ngang cả trang. */
  overflow:hidden; margin-inline:calc(var(--cung-le, 0px) * -1);
}
.gallery-grid.hnt-cung .gallery-tile{
  position:absolute; top:50%; left:50%;
  width:min(52%,520px); height:auto; aspect-ratio:3/2;
  margin:0; border-radius:var(--radius-card); overflow:hidden;
  box-shadow:var(--shadow-card); cursor:pointer;
  transform-origin:50% 50%; will-change:transform,opacity;
  transition:transform .55s cubic-bezier(.22,.72,.24,1), opacity .55s, box-shadow .55s, filter .55s;
}
/* Ảnh giữa mới là ảnh bấm để phóng to — hai bên bấm là xoay tới, nên đổi con trỏ. */
.gallery-grid.hnt-cung .gallery-tile{cursor:pointer;}
.gallery-grid.hnt-cung .gallery-tile.la-giua{cursor:zoom-in; box-shadow:var(--shadow-float); z-index:6;}
.gallery-grid.hnt-cung .gallery-tile:not(.la-giua){filter:saturate(.62) brightness(.84);}
.gallery-grid.hnt-cung .gallery-tile:not(.la-giua) .cap,
.gallery-grid.hnt-cung .gallery-tile:not(.la-giua) .zoom{opacity:0;}
.gallery-grid.hnt-cung .gallery-tile.big{grid-column:auto; grid-row:auto;}
/* Luật cũ nhấc ô lên khi rê chuột sẽ đá nhau với phép biến hình của băng chuyền. */
.gallery-grid.hnt-cung .gallery-tile:hover{transform:none;}
.gallery-grid.hnt-cung .gallery-tile img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover;}
/* 🔴 Không có hai luật này thì lướt tay CHẾT: nhích 10px là trình duyệt khởi động
   lượt kéo-thả ảnh, bắn `pointercancel`, chuỗi lướt đứt giữa chừng mà không báo gì.
   Đi kèm bộ chặn `dragstart` trong single-product.js — cần cả hai. */
.gallery-grid.hnt-cung .gallery-tile img{-webkit-user-drag:none; user-select:none; -webkit-user-select:none;}
.gallery-grid.hnt-cung{user-select:none; -webkit-user-select:none;}

/* Thanh điều khiển */
.cung-dieu{display:flex; align-items:center; justify-content:center; gap:16px; margin-top:22px;}
.cung-dieu[hidden]{display:none;}
.cung-nut{
  width:44px; height:44px; border-radius:var(--radius-btn); border:1px solid var(--border);
  background:var(--bg); color:var(--primary); cursor:pointer;
  display:flex; align-items:center; justify-content:center; padding:0;
  transition:background .2s, border-color .2s, color .2s;
}
.cung-nut:hover{background:var(--accent-soft); border-color:var(--accent); color:var(--accent);}
.cung-nut:focus-visible{outline:3px solid var(--accent); outline-offset:3px;}
.cung-nut svg{width:20px; height:20px;}
.cung-dem{margin:0; font-size:14px; font-weight:600; color:var(--text-2); min-width:64px; text-align:center; font-variant-numeric:tabular-nums;}
.cung-dem span{color:var(--text);}

@media (max-width:1150px){
  .gallery-grid.hnt-cung{height:340px;}
  .gallery-grid.hnt-cung .gallery-tile{width:min(66%,420px);}
}
@media (max-width:640px){
  /* Ngón tay lướt được nên nút chỉ còn là đường phụ; giữ lại cho ai không lướt. */
  .gallery-grid.hnt-cung{height:250px; touch-action:pan-y;}
  .gallery-grid.hnt-cung .gallery-tile{width:74%;}
  .cung-dieu{gap:12px; margin-top:16px;}
  .cung-nut{width:40px; height:40px;}
}
@media (prefers-reduced-motion:reduce){
  .gallery-grid.hnt-cung .gallery-tile{transition-duration:.01ms;}
}
