/* VHHC Agritech Premium — component & layout styles, built on ported design tokens. */

/* Thang chữ/nút mới, chủ site duyệt 29/09/2026 (docs/ux/sizing-audit-2026-09-29.md).
   Ghi đè biến token tại đây (không sửa tokens/*.css). Điểm neo: 375 và 1280. */
:root {
	--text-display: clamp(32px, 22.055px + 2.6519vw, 56px);
	--text-h1: clamp(30px, 22.542px + 1.9890vw, 48px);
	--text-h2: clamp(24px, 20.685px + .8840vw, 32px);
	--text-h3: clamp(18px, 1rem + .3vw, 20px);
	--text-micro: 13px;
	--control-h-lg: 48px;
}

.vhhc-skip-link {
	position: absolute;
	left: -9999px;
	top: 0;
	background: var(--color-primary);
	color: var(--text-inverse);
	padding: var(--space-3) var(--space-4);
	z-index: 100;
}
.vhhc-skip-link:focus { left: var(--space-4); top: var(--space-4); }

/* ---------- Layout ---------- */
.vhhc-container {
	max-width: calc(var(--layout-max) + 2 * var(--layout-gutter));
	margin: 0 auto;
	padding: 0 var(--layout-gutter);
}
.vhhc-section { padding: var(--section-pad-y) 0; }
.vhhc-section--sm { padding: var(--section-pad-y-sm) 0; }
.vhhc-section--soft { background: var(--color-surface-soft); }
.vhhc-section--full-bleed { padding-left: 0; padding-right: 0; }
/* One rhythm, one separator: consecutive sections get a hairline instead of
   alternating backgrounds/padding tricks (§3.3). Every section element must
   carry the base .vhhc-section class (in addition to --sm/--soft modifiers)
   for this to apply. */
.vhhc-section + .vhhc-section { border-top: 1px solid var(--border-subtle); }

img { max-width: 100%; display: block; }

/* ---------- Type helpers ---------- */
/* GĐ3 vòng 6, 17/09/2026 (T5): inline-flex để eyebrow ngồi cùng dòng với
   link email lớn theo sau (Contact header, khối báo giá Home) thay vì xuống
   dòng riêng như thiết kế — luôn đứng đầu khối, đổi sang flex (khối riêng). */
.vhhc-eyebrow {
	display: flex;
	align-items: center;
	gap: var(--space-2);
	font: var(--type-eyebrow);
	letter-spacing: var(--tracking-eyebrow);
	text-transform: uppercase;
	color: var(--text-secondary);
}
/* 17/09/2026 GĐ2 Đợt 4: dropped the repeating Lime dot (modernize-2026-09-17.md
   §3.5/§3.10) — it read as a template flourish stamped on every label. */
/* GĐ3 vòng 2, 17/09/2026 (V9): tránh mồ côi 1 chữ ở dòng cuối tiêu đề; tiếng
   Việt nhiều dấu/thanh điệu cần line-height rộng hơn và ngắn dòng hơn tiếng Anh. */
h1, h2, h3 { text-wrap: balance; }
:lang(vi) .vhhc-display, :lang(vi) .vhhc-h1 { line-height: 1.14; }
:lang(vi) .vhhc-display { max-width: 13em; }
.vhhc-h1 { font: var(--type-h1); letter-spacing: var(--tracking-display); margin: 0 0 var(--space-4); }
.vhhc-display { font: var(--type-display); letter-spacing: var(--tracking-display); margin: 0 0 var(--space-4); }
.vhhc-h2 { font: var(--type-h2); letter-spacing: var(--tracking-heading); margin: 0 0 var(--space-4); max-width: 22ch; }
.vhhc-h3 { font: var(--type-h3); margin: 0 0 var(--space-3); }
/* T12, GĐ3 vòng 6, 17/09/2026: thay 4 style="margin-top:...;font-size:..."
   giống hệt nhau (page-products-services.php) bằng 1 class dùng chung. */
.vhhc-h3--subsection { margin-top: var(--space-6); }
/* Body copy defaults to Deep Canopy, not Moss Grey — Moss Grey is reserved for
   captions/meta/secondary text (§3.6). Elements that need the muted tone add
   .vhhc-caption or set color explicitly (e.g. inverse CTA bands). */
.vhhc-body { font: var(--type-body); color: var(--text-primary); max-width: 64ch; } /* 29/09/2026: cột 1 hàng ở tablet dài 100+ ký tự/dòng */
.vhhc-body + .vhhc-body { margin-top: 1em; }
.vhhc-param-line { margin-top: var(--space-5, 1.5rem); }
.vhhc-param-line__label { margin: 0 0 var(--space-2); font: var(--type-eyebrow); letter-spacing: var(--tracking-eyebrow); text-transform: uppercase; color: var(--text-secondary); }
.vhhc-param-line__list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--space-8); }
.vhhc-param-line__list li { position: relative; padding: var(--space-2) 0 var(--space-2) var(--space-5); color: var(--text-primary); font-size: var(--text-body); line-height: 1.4; }
.vhhc-param-line__list li::before { content: ""; position: absolute; left: 0; top: 1.05em; width: 8px; height: 8px; background: var(--color-accent-growth); }
.vhhc-param-line__unit { margin-left: var(--space-1); font-size: 13px; color: var(--text-secondary); }
@media (max-width: 639px) { .vhhc-param-line__list { grid-template-columns: 1fr; } }
.vhhc-sample__list { list-style: none; margin: 0; padding: 0; max-width: 28rem; }
.vhhc-sample__list li { display: flex; justify-content: space-between; gap: var(--space-4); padding: var(--space-2) 0; border-bottom: 1px solid var(--border-subtle); color: var(--text-primary); line-height: 1.4; }
.vhhc-sample__val { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.vhhc-sample__ratio { font-weight: var(--weight-semibold); }
.vhhc-sample .vhhc-link-cta { margin-top: var(--space-2); }
.vhhc-caption { font: var(--type-caption); color: var(--text-secondary); }
figcaption.vhhc-caption { max-width: 80ch; }
/* Rà soát mobile 23/09/2026 (docs/ux/mobile-audit-2026-09-23.md): link mailto
   "Or email trade@vhhc.vn" trong .vhhc-caption (Products, mã hàng riêng) chỉ
   cao ~19px. <a> vẫn là inline mặc định (không đổi display) — padding dọc
   mở rộng vùng bấm/vẽ nhưng không cộng vào chiều cao dòng theo spec CSS
   inline, nên không đẩy "Or email" hay dòng dưới. */
.vhhc-caption a[href^="mailto:"] { padding: 13px 0; }
.vhhc-lead { font-size: var(--text-body-lg); line-height: var(--leading-lead, 1.5); color: var(--text-primary); max-width: 60ch; margin: 0; }

/* ---------- NavBar ---------- */
.vhhc-navbar {
	position: sticky;
	top: 0;
	z-index: 40;
	height: 72px;
	display: flex;
	align-items: center;
	/* Solid Clean Grain, no translucent veil/blur (§3.7) — a header that's
	   always legible instead of only "mostly" opaque over content. */
	background: var(--color-surface);
	border-bottom: 1px solid var(--border-subtle);
}
.vhhc-navbar__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	width: 100%;
}
/* GĐ3 vòng 2, 17/09/2026 (V7): <nav> đứng sau .vhhc-navbar__cta trong DOM
   (header.php) để thứ tự Tab từ nút menu mobile đi vào menu; `order` phục
   hồi thứ tự hiển thị desktop logo → nav → CTA. */
/* GĐ3 vòng 7, 17/09/2026 (C-1): logo không bao giờ bị bóp — flex-shrink:0 +
   kích thước cố định (trước đây width:auto để flex co lại thành 0px/méo ở
   1024–1100px khi menu vẫn nằm ngang). */
/* Rà soát mobile 23/09/2026 (docs/ux/mobile-audit-2026-09-23.md): vùng bấm
   41×32px < 44px — min-height mở rộng vùng bấm dọc, logo giữ nguyên kích
   thước/căn giữa (align-items:center có sẵn). */
.vhhc-navbar__logo { order: 1; display: flex; align-items: center; gap: var(--space-2); margin-right: var(--space-6); flex-shrink: 0; min-height: 44px; min-width: 44px; }
.vhhc-navbar__logo img { width: 41px; height: 32px; flex-shrink: 0; }
.vhhc-navbar__nav { order: 2; }
/* T-1: nút menu mobile đứng riêng trong DOM (không còn con của .vhhc-navbar__cta)
   để Tab desktop đi qua menu chính trước nút báo giá — `order` giữ nguyên vị trí
   hiển thị (logo → nav → nút báo giá, nút menu luôn đứng cuối/ẩn ở desktop). */
.vhhc-navbar__toggle { order: 4; }
.vhhc-navbar__cta { order: 3; }
.vhhc-navbar__links {
	display: flex;
	align-items: center;
	gap: var(--space-8);
	list-style: none;
	margin: 0;
	padding: 0;
}
/* Trailing "row" inside the link list carrying the EN/VI switcher
   (desktop: inline after the 5 links; mobile: last rows of the open menu,
   see the <1024 override below). Without this it inherits <li>'s block-ish
   default and stacks its two children, overgrowing the 72px navbar. */
.vhhc-navbar__links-foot { display: flex; align-items: center; gap: var(--space-4); }
.vhhc-navbar__links a {
	color: var(--text-primary);
	font: var(--type-body);
	font-weight: var(--weight-medium);
	padding-bottom: var(--space-1);
	border-bottom: 2px solid transparent;
	text-decoration: none;
	white-space: nowrap;
	transition: var(--transition-control);
}
.vhhc-navbar__links a:hover,
.vhhc-navbar__links a[aria-current="page"] {
	color: var(--text-primary);
	border-bottom-color: var(--color-primary);
	text-decoration: none;
}
.vhhc-navbar__cta { display: flex; align-items: center; gap: var(--space-4); }
.vhhc-navbar__cta .vhhc-btn { white-space: nowrap; }
.vhhc-navbar__toggle { display: none; position: relative; }
/* GĐ3 vòng 2 (V7): 2 icon menu/x chồng nhau trong cùng nút, đổi bằng class .is-open
   thay vì thay đổi DOM khi mỗi lần bấm. */
.vhhc-navbar__toggle-icon--close { display: none; }
.vhhc-navbar__toggle.is-open .vhhc-navbar__toggle-icon--open { display: none; }
.vhhc-navbar__toggle.is-open .vhhc-navbar__toggle-icon--close { display: inline-flex; }

/* GĐ3 vòng 2, 17/09/2026 (C2): menu VI vỡ dòng ở 1024–1359px — chữ dài hơn EN,
   giảm gap để nav vừa một dòng (đã thử trong trình duyệt). */
@media (min-width: 1200px) and (max-width: 1359px) {
	.vhhc-navbar__links { gap: var(--space-5); }
}

/* 14/10/2026: công tắc ngôn ngữ gộp — 2 ô chung một khung (viền 1px Pale Moss, bo 6px, cao 32px, vùng chạm 44px bằng ::before). */
.vhhc-lang-switcher { display: inline-flex; align-items: stretch; gap: 2px; height: 30px; padding: 2px; border: 1px solid var(--color-neutral); border-radius: 999px; }
.vhhc-lang-switcher a {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	padding: 0 var(--space-3);
	border-radius: 999px;
	color: var(--color-muted);
	font-size: 12px;
	font-weight: var(--weight-medium);
	letter-spacing: .06em;
	line-height: 1;
	text-decoration: none;
}
.vhhc-lang-switcher a::before { content: ""; position: absolute; inset: -10px -2px; }
.vhhc-lang-switcher a:hover { color: var(--color-primary); }
.vhhc-lang-switcher a[aria-current="true"] { background: var(--color-surface-soft); color: var(--color-primary); font-weight: var(--weight-semibold); }
.vhhc-lang-switcher a:focus-visible { outline: 3px solid var(--color-accent-growth); outline-offset: 1px; box-shadow: none; }
.vhhc-navbar__cta .vhhc-lang-switcher { margin-right: var(--space-4); }
.vhhc-lang-switcher--menu { display: none; }
@media (max-width: 1199px) {
	.vhhc-lang-switcher--header { display: none; }
	.vhhc-lang-switcher--menu { display: inline-flex; }
}

/* Mobile/compact header: one 64px row — logo | 44px quote button | 44px menu
   toggle (§3.7). EN/VI and the trade@ email move out of the bar and into the
   full-screen menu the toggle opens, instead of crowding a second row.
   GĐ3 vòng 7, 17/09/2026 (C-1): 1023px → 1199px — ở 1024–1199px menu ngang
   không còn đủ chỗ mà không bóp logo hoặc dính nút VI/báo giá; dùng menu gọn
   ☰ như mobile tới hết 1199px (khuyến nghị a trong báo cáo polish round 2). */
@media (max-width: 1199px) {
	.vhhc-navbar { height: 64px; }
	/* 23/09/2026: .vhhc-navbar__nav (order:2) stays a flex item even while its
	   <ul> content is display:none — with justify-content:space-between that
	   left the quote button floating mid-header instead of flush against the
	   ☰ toggle (reported at ~940px). flex-start + margin-left:auto on the CTA
	   group pushes logo left / (button + toggle) right as one cluster. */
	.vhhc-navbar__inner { flex-wrap: nowrap; justify-content: flex-start; gap: var(--space-3); }
	.vhhc-navbar__cta { margin-left: auto; gap: var(--space-3); }
	/* Chủ site chốt 23/09/2026: chữ gọn hơn dưới 1200px, giữ chiều cao 44px
	   (--control-h mặc định) và cụm nút+☰ cách nhau 12px (var(--space-3)).
	   Ghép class .vhhc-btn để thắng đặc tả (0,0,2,0 > 0,0,1,0) — .vhhc-btn ở
	   dưới trong file (font/padding mặc định) nếu không sẽ thắng theo thứ tự,
	   bất kể đứng trong @media hay không. */
	/* 29/09/2026: nhìn thấy 40px, vùng bấm 44px bằng ::before vô hình (inset -3px = 2px ngoài viền 1px, như .vhhc-rfq-chip). */
	.vhhc-navbar__cta-btn.vhhc-btn { position: relative; height: 40px; font-size: 14px; padding: 0 14px; }
	.vhhc-navbar__cta-btn.vhhc-btn::before { content: ""; position: absolute; inset: -3px; }
	.vhhc-navbar__links {
		display: none;
		position: fixed;
		inset: 64px 0 0 0;
		flex-direction: column;
		/* GĐ3 vòng 2 (V7): bỏ align-items:center thừa kế từ desktop — hàng full-width,
		   chữ căn trái, thay vì chỉ rộng bằng chữ. */
		align-items: stretch;
		gap: 0;
		width: auto;
		margin: 0;
		padding: 0 var(--layout-gutter);
		background: var(--color-surface);
		overflow-y: auto;
		z-index: 39;
	}
	.vhhc-navbar__links.is-open { display: flex; }
	.vhhc-navbar__links li { width: 100%; border-bottom: 1px solid var(--border-subtle); }
	.vhhc-navbar__links a {
		display: flex;
		align-items: center;
		min-height: 52px;
		font-size: 18px;
		font-weight: var(--weight-semibold);
		border-bottom: none;
		padding-bottom: 0;
	}
	.vhhc-navbar__links-foot {
		display: flex;
		align-items: center;
		justify-content: space-between;
		flex-wrap: wrap;
		gap: var(--space-3);
		padding: var(--space-4) 0;
	}
	.vhhc-navbar__toggle {
		display: inline-flex;
		align-items: center;
		justify-content: center;
		width: 40px;
		height: 40px;
		padding: 0;
		/* 23/09/2026: no explicit color → iOS Safari paints <button> content (the
		   currentColor icon) in system blue. */
		color: var(--text-primary);
		background: none;
		border: 1px solid var(--border-subtle);
		border-radius: var(--radius-control);
		cursor: pointer;
		-webkit-tap-highlight-color: transparent;
	}
	.vhhc-navbar__toggle::before { content: ""; position: absolute; inset: -3px; }
	.vhhc-navbar__toggle:hover,
	.vhhc-navbar__toggle.is-open { background: var(--color-surface-soft); }
}

/* ---------- Footer (GĐ2 Đợt 4, 17/09/2026 — §3.8) ---------- */
.vhhc-footer {
	position: relative;
	overflow: hidden;
	background: var(--surface-inverse);
	color: var(--text-inverse);
	padding: clamp(64px, 8vw, 120px) 0 var(--space-8);
}
/* Network pattern, tucked in the top-right corner and faded toward the
   content — same visual language as the Home hero, used sparingly (§3.11). */
.vhhc-footer__pattern {
	position: absolute;
	top: 0;
	right: 0;
	height: 60%;
	width: 46%;
	max-width: 640px;
	object-fit: cover;
	object-position: right top;
	opacity: .06;
	pointer-events: none;
	mask-image: linear-gradient(to left, black, transparent);
	-webkit-mask-image: linear-gradient(to left, black, transparent);
}
/* GĐ3 vòng 5, 17/09/2026 (V2): object-fit:cover kéo ảnh 900×700 gốc thành dải
   hẹp 173×730 trên mobile — không còn đọc ra hình mạng lưới, chỉ còn vệt mờ.
   Ẩn hẳn dưới 640px thay vì kéo méo (nhất quán với quyết định "không ảnh
   trang trí trên mobile" đã áp dụng cho hero Home). */
@media (max-width: 639px) {
	.vhhc-footer__pattern { display: none; }
}
.vhhc-footer__invite {
	position: relative;
	display: flex;
	justify-content: space-between;
	align-items: flex-end;
	flex-wrap: wrap;
	gap: var(--space-8);
	padding-bottom: var(--space-12);
}
.vhhc-footer__invite h2 { color: var(--text-inverse); margin: 0; }
.vhhc-footer__invite-cta { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-3); }
.vhhc-footer__invite-text { max-width: 56ch; }
.vhhc-footer__invite-lead { margin: var(--space-3) 0 0; color: var(--text-inverse); }
.vhhc-footer__invite-alt { color: var(--text-inverse); }
.vhhc-footer__invite-mail { font-weight: var(--weight-semibold); color: var(--text-inverse); display: inline-flex; align-items: center; min-height: 44px; text-decoration: underline; text-underline-offset: 3px; }
.vhhc-footer__invite-mail:hover { color: var(--text-inverse); }
.vhhc-footer__grid {
	position: relative;
	display: grid;
	grid-template-columns: 1.2fr 1fr 1fr 1fr;
	gap: var(--space-12);
	padding: var(--space-12) 0;
	border-top: 1px solid var(--border-inverse);
	border-bottom: 1px solid var(--border-inverse);
}
/* 29/09/2026: 4 cột chỉ khi đủ rộng (≥1200); 781–1199px thì logo/mô tả một hàng, 3 nhóm liên kết bên dưới (cột 4 ở 1024 chỉ còn ~220px, địa chỉ xuống 7 dòng). */
@media (max-width: 1199px) {
	.vhhc-footer__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-8); }
	.vhhc-footer__brand { grid-column: 1 / -1; }
}
.vhhc-footer__brand img { height: 30px; margin-bottom: var(--space-4); }
.vhhc-footer__brand p { color: rgba(247,248,241,.68); max-width: 36ch; }
/* V10, GĐ3 vòng 5, 17/09/2026: đổi từ <h4> sang <h3> trong footer.php — ngay
   sau <h2> "Send your specification" nên <h4> nhảy 2 cấp. */
.vhhc-footer h3 {
	font-size: var(--text-micro);
	font-weight: var(--weight-semibold);
	letter-spacing: var(--tracking-eyebrow);
	text-transform: uppercase;
	color: rgba(247,248,241,.64);
	margin: 0 0 var(--space-4);
}
.vhhc-footer ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0; }
/* T6, GĐ3 vòng 6, 17/09/2026: icon thư dính sát chữ "trade@vhhc.vn" — thêm gap. */
.vhhc-footer ul a { display: inline-flex; align-items: center; gap: var(--space-2); min-height: 32px; font-size: 15px; text-decoration: none; }
.vhhc-footer a { color: rgba(247,248,241,.82); }
.vhhc-footer a:hover { color: var(--text-inverse); }
/* .vhhc-btn already sets its own color per variant (e.g. --inverse is Deep
   Canopy on Clean Grain) — the generic footer link color must not win over
   it, or the invite row's button renders near-invisible light-on-light. */
.vhhc-footer a.vhhc-btn { color: inherit; }
.vhhc-footer a.vhhc-btn--inverse,
.vhhc-footer a.vhhc-btn--inverse:hover { color: var(--color-primary); }
.vhhc-footer__bottom {
	position: relative;
	padding-top: var(--space-6);
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: var(--space-4);
	color: rgba(247,248,241,.56);
	font-size: 13px;
	/* Dry Gold divider, 23/09/2026 — 1px, chỉ ở đây, không lan ra toàn footer. */
	border-top: 1px solid var(--divider-premium);
}
@media (max-width: 780px) {
	.vhhc-footer__invite { align-items: flex-start; }
}
.vhhc-footer__address {
	display: flex;
	align-items: flex-start;
	gap: var(--space-2);
	color: rgba(247,248,241,.82);
	line-height: var(--leading-body);
	min-height: auto;
	padding: var(--space-2) 0;
}
.vhhc-footer__address svg { flex: none; margin-top: 3px; }
/* 17/09/2026: lang switcher trên nền tối — ghi đè màu chữ mặc định (Moss Grey) để đủ tương phản AA */
.vhhc-footer .vhhc-lang-switcher { border-color: rgba(247,248,241,.25); }
.vhhc-footer .vhhc-lang-switcher a { color: rgba(247,248,241,.6); }
.vhhc-footer .vhhc-lang-switcher a:hover { color: var(--text-inverse); }
.vhhc-footer .vhhc-lang-switcher a[aria-current="true"] { background: rgba(247,248,241,.12); color: var(--text-inverse); }
@media (max-width: 780px) {
	/* GĐ3 vòng 4, 17/09/2026 (C5): footer ~1.240px trên mobile (4 cột xếp dọc,
	   khoảng cách 48px mỗi cột) — góp phần vào tổng chiều cao trang; giảm
	   nhịp dọc riêng ở mobile, không đổi ở desktop. */
	.vhhc-footer { padding-top: 48px; }
	.vhhc-footer__invite { padding-bottom: var(--space-8); }
	/* 23/09/2026: Sản phẩm | Công ty đứng cạnh nhau; email đã có ở hàng mời
	   phía trên nên ẩn dòng email lặp trong nhóm Liên hệ (chỉ mobile). */
	.vhhc-footer__grid { grid-template-columns: 1fr 1fr; gap: var(--space-6) var(--space-5); padding: var(--space-6) 0; }
	.vhhc-footer__brand,
	.vhhc-footer__contact { grid-column: 1 / -1; }
	.vhhc-footer__mail-item { display: none; }
	.vhhc-footer__bottom { flex-direction: column; align-items: flex-start; gap: var(--space-3); }
}

/* ---------- Buttons ---------- */
.vhhc-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--space-2);
	height: var(--control-h);
	padding: 0 var(--space-6);
	border-radius: var(--radius-control);
	font: var(--type-body);
	font-size: 16px;
	font-weight: var(--weight-semibold);
	border: 1px solid transparent;
	cursor: pointer;
	transition: var(--transition-control);
	text-decoration: none !important;
}
.vhhc-btn:active { transform: scale(var(--press-scale)); }
.vhhc-btn--lg { height: var(--control-h-lg); padding: 0 28px; }
.vhhc-btn--sm { height: var(--control-h-sm); padding: 0 var(--space-4); font-size: var(--text-body-sm); }
.vhhc-btn--primary { background: var(--color-primary); color: var(--text-inverse); }
/* T11, GĐ3 vòng 6, 17/09/2026: #123524→#0D281C chỉ khác 1.1:1, gần như không
   thấy — thêm gạch chân cho MỌI nút chính khi hover (trước chỉ nút có icon
   mới có mũi tên trượt), không chỉ dựa vào đổi màu nền. */
.vhhc-btn--primary:hover { background: var(--color-primary-hover); color: var(--text-inverse); text-decoration: underline !important; text-underline-offset: 3px; }
.vhhc-btn--secondary { background: transparent; color: var(--text-primary); border-color: var(--border-strong); }
.vhhc-btn--secondary:hover { background: var(--color-surface-soft); }
/* 17/09/2026: mũi tên trượt khi hover nút chính (chỉ áp dụng khi vhhc_button() có $icon) */
.vhhc-btn__icon { transition: transform var(--duration-fast) var(--ease-standard); }
.vhhc-btn--primary:hover .vhhc-btn__icon { transform: translateX(3px); }
.vhhc-btn--ghost { background: transparent; color: var(--text-primary); }
.vhhc-btn--ghost:hover { background: var(--color-surface-soft); }
.vhhc-btn--inverse { background: var(--color-surface); color: var(--color-primary); }
.vhhc-btn--inverse:hover { background: var(--color-surface-soft); }
.vhhc-btn--on-inverse { background: transparent; color: var(--text-inverse); border-color: var(--border-inverse); }
.vhhc-btn--on-inverse:hover { background: rgba(247,248,241,.1); }
.vhhc-btn--full { width: 100%; }
.vhhc-btn:focus-visible { outline: 2px solid transparent; outline-offset: 2px; box-shadow: var(--shadow-focus); }

/* ---------- Tag ---------- */
.vhhc-tag {
	display: inline-flex;
	align-items: center;
	height: 26px;
	padding: 0 var(--space-3);
	border-radius: var(--radius-sm);
	background: var(--color-neutral);
	color: var(--text-primary);
	font: var(--type-caption);
	font-weight: var(--weight-medium);
}
.vhhc-tag-row { display: flex; gap: var(--space-2); margin: var(--space-4) 0; }

/* ---------- Card ---------- */
.vhhc-card {
	background: var(--surface-card);
	color: var(--text-primary);
	border: 1px solid var(--border-subtle);
	border-radius: var(--radius-card);
	padding: clamp(24px, 3vw, 40px);
	transition: var(--transition-surface);
}
.vhhc-card .vhhc-caption { color: var(--text-secondary); }
.vhhc-card dl { margin: 0; }
/* Sustainability "Supply chain documentation" CTA card: hairline top border,
   square top corners (sits right under a ruled list), text + link side by
   side on desktop. */
.vhhc-card--doc-cta {
	border-top: 2px solid var(--color-primary);
	border-radius: 0 0 var(--radius-card) var(--radius-card);
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: var(--space-8);
	flex-wrap: wrap;
}
/* .vhhc-card__icon-chip removed (GĐ2 Đợt 4, 17/09/2026) — the icon-box
   pattern it styled was replaced by ruled lists (.vhhc-ruled-grid) on
   About/Products; no template references it any more. */

/* ---------- Ruled list (replaces icon/gold-bar card grids, §3.5) ---------- */
/* Mọi nơi dùng .vhhc-ruled-grid đều đặt cách phần trên đúng var(--space-8);
   3 cột là mặc định (--cols fallback), .vhhc-ruled-grid--cols-4 cho khi cần 4. */
.vhhc-ruled-grid { display: grid; grid-template-columns: repeat(var(--cols, 3), 1fr); gap: var(--space-8) var(--space-8); margin-top: var(--space-8); }
.vhhc-ruled-grid--cols-4 { --cols: 4; }
.vhhc-ruled-grid--cols-2 { --cols: 2; }
/* 29/09/2026: 4 cột × ~206px ở 1024 (chữ 8 dòng) → 2×2 dưới 1200px. */
@media (max-width: 1199px) { .vhhc-ruled-grid--cols-4 { --cols: 2; } }
.vhhc-ruled-item { border-top: 1px solid var(--color-primary); padding-top: var(--space-6); }
/* GĐ3 vòng 5, 17/09/2026 (V10): chỉ set font-size khiến <h3> trần kế thừa
   weight 700 mặc định của trình duyệt + line-height của body — khác mọi H3
   khác (600/1.3 qua .vhhc-h3). Dùng chung token `font` như .vhhc-h3 để nhất
   quán ở mọi nơi dùng .vhhc-ruled-item (About, Products), không cần sửa
   từng file thêm class. */
.vhhc-ruled-item h3 { font: var(--type-h3); margin: 0 0 var(--space-3); }
.vhhc-ruled-item p { font-size: 16px; line-height: var(--leading-body); color: var(--text-secondary); max-width: 36ch; margin: 0; }
@media (max-width: 900px) {
	.vhhc-ruled-grid { grid-template-columns: 1fr; gap: var(--space-8); }
}

/* ---------- Divider ---------- */
.vhhc-divider { border: none; border-top: 1px solid var(--border-subtle); margin: var(--space-8) 0; }
.vhhc-divider--premium { border-top-color: var(--divider-premium); width: 120px; }

/* ---------- Breadcrumb ---------- */
.vhhc-breadcrumb { display: flex; align-items: center; gap: var(--space-2); font: var(--type-caption); color: var(--text-secondary); margin-bottom: var(--space-4); }
.vhhc-breadcrumb a { color: var(--text-secondary); text-decoration: none; }
.vhhc-breadcrumb a:hover { color: var(--text-link-hover); }
/* T-2, GĐ3 vòng 7, 17/09/2026: vùng bấm < 44px trên mobile (breadcrumb 21px,
   link footer 32px, "Full form with delivery month…" 26px, email hero 19px,
   "Open in Google Maps" 22px). */
/* 29/09/2026 (docs/ux/tablet-audit-2026-09-29.md): vùng bấm 44px áp dụng tới 1199px
   (cùng ngưỡng menu ☰), không chỉ điện thoại — máy tính bảng cũng là màn hình cảm ứng. */
@media (max-width: 1199px) {
	.vhhc-breadcrumb a,
	.vhhc-footer ul a,
	.vhhc-home-hero__email-note a,
	.vhhc-contact-block a {
		min-height: 44px;
		min-width: 44px;
		display: inline-flex;
		align-items: center;
	}
	/* Rà soát mobile 23/09/2026 (docs/ux/mobile-audit-2026-09-23.md): mã hàng
	   ngắn như "RSO" vẫn hẹp ~30–33px dù đã cao 44px — min-width mở vùng bấm
	   ngang, justify-content căn giữa chữ trong vùng đó (các link dài hơn đã
	   rộng hơn 44px sẵn, không bị ảnh hưởng). Chỉ ở mobile — desktop giữ nguyên. */
	.vhhc-footer ul a {
		min-width: 44px;
		justify-content: flex-start;
	}
}

.vhhc-contact-layout {
	display: grid;
	grid-template-columns: 1.15fr .85fr;
	gap: var(--space-10);
	align-items: start;
}
@media (max-width: 900px) {
	.vhhc-contact-layout { grid-template-columns: 1fr; }
}
/* GĐ3 vòng 6, 17/09/2026 (T4): cột phải (WhatsApp/Office/Company) ngắn hơn
   form ~350px trên desktop, để trống bên dưới — giữ trong tầm nhìn khi cuộn
   qua form dài. */
@media (min-width: 901px) {
	.vhhc-contact-layout > div:last-child { position: sticky; top: 96px; }
}
.vhhc-whatsapp-qr { margin-bottom: var(--space-8); }
.vhhc-whatsapp-qr img { width: 120px; height: 120px; display: block; }
/* GĐ3 vòng 5, 17/09/2026 (V12): QR WhatsApp vô dụng trên chính điện thoại
   đang xem nó — ẩn dưới 1024px. Quyết định đã chốt: không dùng link wa.me. */
@media (max-width: 1023px) {
	.vhhc-whatsapp-qr { display: none; }
}
/* Contact page: khối Office/Company bên cột phải — mỗi khối một nhịp cách. */
.vhhc-contact-block { margin-bottom: var(--space-8); }

/* ---------- Table ---------- */
.vhhc-table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.vhhc-table { width: 100%; border-collapse: collapse; }
.vhhc-table th, .vhhc-table td {
	text-align: left;
	padding: var(--space-5) var(--space-6) var(--space-5) 0;
	border-bottom: 1px solid var(--border-subtle);
	font: var(--type-body);
}
.vhhc-table th {
	font: var(--type-eyebrow);
	text-transform: uppercase;
	letter-spacing: var(--tracking-eyebrow);
	color: var(--text-secondary);
	/* No Mint Air fill on table headers (§3.9) — a 2px rule does the job the
	   background used to, matching the family/document tables. */
	border-bottom: 2px solid var(--color-primary);
}
.vhhc-table tbody th[scope="row"] {
	font: var(--type-body); font-weight: var(--weight-semibold); text-transform: none; letter-spacing: inherit; color: inherit;
	border-bottom: 1px solid var(--border-subtle);
}
.vhhc-table td:first-child, .vhhc-table th:first-child { font-weight: var(--weight-semibold); }
.vhhc-table td:last-child, .vhhc-table th:last-child { font-variant-numeric: tabular-nums; }
.vhhc-table-scroll:has(a) .vhhc-table tbody tr:hover { background: var(--color-surface-soft); }
/* GĐ3 vòng 4, 17/09/2026 (C5): bảng 4 cột vỡ vụn ở 375px (tên chỉ tiêu xuống
   3 dòng, "% wt"/"On request" xuống 2 dòng, mỗi hàng ~86px, trang dài
   >10.000px). Dưới 640px: mỗi hàng thành khối 2 dòng — dòng 1 tên chỉ tiêu +
   đơn vị (Moss Grey, không xuống dòng), dòng 2 giá trị. */
@media (max-width: 639px) {
	.vhhc-table thead { display: none; }
	.vhhc-table, .vhhc-table tbody, .vhhc-table tr, .vhhc-table td, .vhhc-table tbody th { display: block; width: auto; }
	.vhhc-table tr {
		display: grid;
		grid-template-columns: 1fr auto;
		column-gap: var(--space-2);
		padding: var(--space-1) 0;
		border-bottom: 1px solid var(--border-subtle);
	}
	.vhhc-table tr:first-child { border-top: 2px solid var(--color-primary); }
	.vhhc-table td, .vhhc-table tbody th[scope="row"] { padding: 0; border: 0; }
	.vhhc-table td:first-child, .vhhc-table tbody th { grid-column: 1; }
	.vhhc-table td:nth-child(2) { grid-column: 2; color: var(--text-secondary); white-space: nowrap; text-align: right; }
	.vhhc-table td:last-child { grid-column: 1 / -1; margin-top: var(--space-1); font-weight: var(--weight-medium); }
	/* C-2, GĐ3 vòng 7, 17/09/2026: bảng 2 cột (Chỉ tiêu | Đơn vị, không có cột
	   Value) — cột đơn vị là nth-child(2) VÀ last-child cùng lúc; giữ cách
	   trình bày của nth-child(2) (cùng hàng, căn phải) thay vì xuống hàng full-
	   width như cột Value 3 cột cũ. */
	.vhhc-table--2col td:last-child { grid-column: 2; margin-top: 0; font-weight: var(--weight-medium); }
	/* Bảng 2 cột giá trị (Latex HA | LA, 13/10/2026): dòng 3 chia đôi, mỗi giá trị kèm nhãn cột (data-label). */
	.vhhc-table--alt tr { grid-template-columns: 1fr 1fr; }
	.vhhc-table--alt td:nth-child(2) { grid-column: 2; grid-row: 1; }
	.vhhc-table--alt td:nth-child(3), .vhhc-table--alt td:nth-child(4) { grid-row: 2; margin-top: var(--space-1); font-weight: var(--weight-medium); }
	.vhhc-table--alt td:nth-child(3) { grid-column: 1; }
	.vhhc-table--alt td:nth-child(4) { grid-column: 2; text-align: right; }
	.vhhc-table--alt td[data-label]::before { content: attr(data-label) " "; color: var(--text-secondary); font-weight: var(--weight-regular, 400); }
}

/* ---------- Alert ---------- */
.vhhc-alert {
	display: flex;
	gap: var(--space-3);
	align-items: flex-start;
	padding: var(--space-4) var(--space-5);
	border-radius: var(--radius-md);
	border: 1px solid transparent;
	font: var(--type-body-sm, var(--type-body));
	margin-bottom: var(--space-5);
}
.vhhc-alert--positive { background: var(--status-positive-soft); border-color: var(--status-positive); color: var(--color-primary); }
.vhhc-alert--attention { background: var(--status-attention-soft); border-color: var(--status-attention); color: var(--color-primary); }
.vhhc-alert[hidden] { display: none; }

/* ---------- Forms ---------- */
.vhhc-field { display: flex; flex-direction: column; gap: var(--space-2); margin-bottom: var(--space-5); }
.vhhc-field label { font: var(--type-caption); font-weight: var(--weight-semibold); color: var(--text-primary); }
/* Bẫy spam ẩn (honeypot) trên form RFQ — đẩy ra ngoài màn hình, chỉ bot điền. */
.vhhc-honeypot { position: absolute; left: -9999px; top: -9999px; }
.vhhc-field--row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-4); }
@media (max-width: 560px) {
	/* GĐ3 vòng 5, 17/09/2026 (V11): gap:var(--space-4) của grid CỘNG THÊM vào
	   margin-bottom sẵn có của mỗi .vhhc-field khi xếp dọc, tạo 2 khoảng cách
	   khác nhau xen kẽ (109px/93px) — bỏ gap của grid khi 1 cột, chỉ dùng
	   margin-bottom của field cho một nhịp duy nhất. */
	.vhhc-field--row { grid-template-columns: 1fr; gap: 0; }
}
/* Ô form 40px, chữ 16px (không dưới 16px để iOS không tự phóng to); nút vẫn dùng --control-h. */
.vhhc-input, .vhhc-select, .vhhc-textarea {
	--field-h: 40px;
	height: var(--field-h);
	padding: 0 var(--space-3);
	border: 1px solid var(--color-neutral);
	border-radius: var(--radius-control);
	background: var(--surface-card);
	font: var(--type-body);
	font-size: 16px;
	color: var(--text-primary);
	transition: var(--transition-control);
	width: 100%;
	font-family: var(--font-sans);
}
.vhhc-textarea { height: auto; padding: var(--space-3); min-height: 120px; resize: vertical; }
/* GĐ3 vòng 5, 17/09/2026 (V11): appearance:auto khiến mũi tên/khoảng đệm của
   select do trình duyệt vẽ khác các input khác (vd "Tấn/MT" thụt vào lệch) —
   tự vẽ mũi tên bằng chevron-down (Moss Grey), tắt appearance mặc định. */
.vhhc-select {
	appearance: none;
	-webkit-appearance: none;
	padding-right: 36px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23587062' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right var(--space-3) center;
	background-size: 16px;
}
.vhhc-input:focus, .vhhc-select:focus, .vhhc-textarea:focus {
	outline: none;
	border-color: var(--color-primary);
	box-shadow: var(--shadow-focus);
}
/* GĐ3 vòng 1, 17/09/2026 (C6): #B08900/trắng = 3.27, trượt AA cho chữ 14px;
   brand cũng cấm Dry Gold/vàng cho cảnh báo. Dùng --status-critical (8.25:1). */
.vhhc-field-error { font: var(--type-caption); color: var(--status-critical); }
.vhhc-field--has-error .vhhc-input, .vhhc-field--has-error .vhhc-select, .vhhc-field--has-error .vhhc-textarea { border-color: var(--status-critical); }

/* ---------- Media placeholder ---------- */
.vhhc-media {
	background: var(--gradient-premium-growth);
	border-radius: var(--radius-card);
	display: flex;
	align-items: flex-end;
	width: 100%;
	min-height: 320px;
	padding: var(--space-6);
	position: relative;
	overflow: hidden;
}
.vhhc-media__label {
	color: var(--text-inverse);
	font: var(--type-caption);
	background: rgba(18,53,36,.35);
	padding: var(--space-2) var(--space-3);
	border-radius: var(--radius-sm);
}
.vhhc-media--ratio-34 { aspect-ratio: 3 / 4; }
.vhhc-media--ratio-169 { aspect-ratio: 16 / 9; }
/* Ảnh ngang 600×335: giữ tỉ lệ gốc, không min-height để khỏi phóng/crop (29/09/2026). */
.vhhc-media--ratio-natural { aspect-ratio: 600 / 335; min-height: 0; }
/* GĐ3 vòng 4, 17/09/2026 (C5): min-height:320px ép ảnh 16:9 cao hơn tỉ lệ thật
   ở 375px (211px theo tỉ lệ) — góp phần vào trang Products dài >10.000px. */
@media (max-width: 639px) {
	.vhhc-media--ratio-169 { min-height: 0; aspect-ratio: 21 / 9; }
}
/* GĐ3 vòng 4, 17/09/2026 (C5): "Grade index" ở đầu trang Products chỉ có giá
   trị như thanh điều hướng nhảy-tới-mục cho desktop (sidebar cạnh H1) — trên
   mobile các mục đã nằm ngay bên dưới theo đúng thứ tự, ẩn để giảm chiều cao
   trang (góp phần đưa Products 375px về ≤ 7.000px). */
@media (max-width: 900px) {
	.vhhc-grade-index { display: none; }
}
/* GĐ3 vòng 4, 17/09/2026 (C5): riêng trang Products ở mobile có 4 mục lặp lại
   cấu trúc giống nhau (không phải section rời của cùng 1 trang như Home) —
   giảm nhịp dọc để về ≤ 7.000px, không đổi nhịp section chung của site. */
@media (max-width: 639px) {
	.page-template-page-products-services-php .vhhc-section { padding: var(--section-pad-y-sm) 0; }
}
.vhhc-media--photo { background: var(--color-neutral); }
.vhhc-media--photo img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.vhhc-media--photo .vhhc-media__label { position: relative; z-index: 1; }
.vhhc-media--photo::after {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--gradient-protect-bottom);
}

/* ---------- Grids ---------- */
.vhhc-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-8); align-items: center; }
/* GĐ3 vòng 4, 17/09/2026 (V5): ảnh 584×329 chỉ chiếm đầu mục, để lại ~1.000px
   trống bên dưới khi cột chữ dài hơn (Products, desktop) — giữ ảnh trong tầm
   nhìn khi cuộn qua phần chữ dài. */
@media (min-width: 901px) {
	.vhhc-grid-2 > .vhhc-media { position: sticky; top: 96px; }
}
@media (max-width: 900px) {
	.vhhc-grid-2 { grid-template-columns: 1fr; }
}
/* .vhhc-grid-2--top: mọi nơi dùng .vhhc-grid-2 hiện nay đều cần 2 cột thẳng
   hàng theo mép trên (chữ dài hơn ảnh) thay vì canh giữa mặc định. */
.vhhc-grid-2--top { align-items: start; }

/* ---------- Section head ---------- */
.vhhc-sechd { display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-6); flex-wrap: wrap; margin-bottom: var(--space-8); }
.vhhc-sechd h2 { margin: 0; }
.vhhc-sechd__text { max-width: 64ch; }
.vhhc-sechd__lead { margin: var(--space-3) 0 0; color: var(--text-secondary); }

/* ---------- Page header band — one shared style for About / Products /
   Sustainability / Contact (GĐ2 Đợt 4, 17/09/2026 — §3.4). Light Clean Grain,
   large H1, one-line lead, a bold hairline at the bottom instead of each page
   inventing its own gradient/photo/dark-inverse treatment. Only Home keeps a
   dark hero. */
.vhhc-page-header {
	background: var(--color-surface);
	padding: clamp(56px, 6vw, 104px) 0 clamp(40px, 4vw, 72px);
	border-bottom: 2px solid var(--color-primary);
}
/* Legacy modifiers kept for any future dark/photo header, unused by the four
   pages above after this pass. */
.vhhc-page-header--inverse {
	background: var(--surface-inverse);
	color: var(--text-inverse);
}
.vhhc-page-header--photo {
	background-size: cover;
	background-position: center;
}
.vhhc-page-header--inverse .vhhc-breadcrumb,
.vhhc-page-header--inverse .vhhc-breadcrumb a {
	color: rgba(247,248,241,.68);
}
.vhhc-page-header--inverse .vhhc-breadcrumb a:hover { color: var(--text-inverse); }

/* ---------- Home (GĐ2 Đợt 1, 17/09/2026 — docs/ux/design-export/Trang - Home.dc.html, phương án A) ---------- */
.vhhc-home-hero { position: relative; overflow: hidden; color: var(--text-inverse); background: var(--color-primary); }
/* GĐ2 Đợt 3, 17/09/2026: SVG network pattern instead of a photo, biased to
   the right so it never sits under the heading/lead; hidden below 900px so
   it can't crowd the stacked mobile layout (Q: no decorative image on mobile). */
/* GĐ3 vòng 5, 17/09/2026 (V3): "right center" đặt vòng tròn/chấm Lime ngay sau
   chữ "Latex LA", "SVR CV50" trong panel "Go to a grade" — dời khung nhìn lên
   trên/sang phải để vòng tròn lớn nằm ngoài vùng chữ của panel. */
/* V-6, GĐ3 vòng 7, 17/09/2026: trade-network-mono.svg (đơn sắc, không chấm
   màu) thay cho hero-network.svg — độ mờ thấp như footer (§3.11) để không đè
   lên chữ "SVR CV50"/"Latex LA" trong panel "Go to a grade". */
.vhhc-home-hero__pattern { position: absolute; top: 0; right: 0; height: 100%; width: 62%; max-width: 900px; object-fit: cover; object-position: right top; opacity: .12; pointer-events: none; }
/* padding-top/bottom only (not shorthand "padding") — this element is also
   .vhhc-container, so a shorthand here overwrote its horizontal padding and
   pinned the H1 to the viewport edge at 1440px and 375px (GĐ2 Đợt 3 fix). */
.vhhc-home-hero__inner { position: relative; z-index: 1; padding-top: 112px; padding-bottom: 72px; }
.vhhc-home-hero__grid { display: grid; grid-template-columns: 1fr; gap: var(--space-12); align-items: center; }
/* 13/10/2026 (phương án A, docs/ux/hero-redesign-2026-10-13.md): ảnh <img> phủ toàn khổ hero, lớp phủ Deep Canopy
   95% → 50% trái sang phải (::before). Dưới 901px ảnh nằm ở dải dưới hero, không dưới chữ. */
.vhhc-home-hero picture { display: contents; }
.vhhc-home-hero__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 62%; }
.vhhc-home-hero--photo::before { content: ""; position: absolute; inset: 0; z-index: 1; background: linear-gradient(90deg, rgba(18,53,36,.95) 0%, rgba(18,53,36,.88) 48%, rgba(18,53,36,.5) 100%); }
.vhhc-home-hero--photo .vhhc-home-hero__pattern { display: none; }
.vhhc-home-hero__grid > div { max-width: 640px; }
.vhhc-home-hero__lead { color: rgba(247,248,241,.86); max-width: 60ch; margin-top: var(--space-4); }
.vhhc-home-hero__ctas { display: flex; align-items: center; gap: var(--space-6); flex-wrap: wrap; margin-top: var(--space-8); }
.vhhc-home-hero__email-note { font: var(--type-caption); color: rgba(247,248,241,.86); }
.vhhc-home-hero__email-note a { color: var(--text-inverse); font-weight: var(--weight-semibold); }
/* 29/09/2026: lưới tự tính số cột theo bề rộng mã (cột thẳng hàng, không cắt chữ; hàng cuối có thể lẻ). */
.vhhc-grade-links { display: grid; grid-template-columns: repeat(auto-fill, minmax(88px, 1fr)); gap: 0 var(--space-4); }
.vhhc-grade-links--long { grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); }
.vhhc-grade-links--long:has(> :nth-child(4):last-child) { grid-template-columns: repeat(auto-fill, minmax(max(168px, calc(50% - 16px)), 1fr)); } /* 4 mã dài: tối đa 2 cột (2/2) */
.vhhc-grade-links:not(.vhhc-grade-links--long):has(> :nth-child(5):last-child) { grid-template-columns: repeat(auto-fill, minmax(max(88px, calc(33% - 16px)), 1fr)); } /* 5 mã ngắn: tối đa 3 cột (3/2) */
.vhhc-grade-links a { font-weight: var(--weight-semibold); color: var(--text-inverse); min-height: 44px; min-width: 44px; display: inline-flex; align-items: center; font-variant-numeric: tabular-nums; text-decoration: none; }
@media (max-width: 900px) {
	.vhhc-home-hero__inner { padding-top: 96px; padding-bottom: 40px; }
	.vhhc-home-hero__grid { gap: var(--space-8); }
	/* GĐ3 vòng 5, 17/09/2026 (V3): thu nhỏ vẫn để đường cong cắt qua H1 và đoạn
	   dẫn ở 375px — ẩn hẳn, nhất quán với quyết định "không ảnh trang trí trên
	   mobile" đã áp dụng nơi khác trên trang. */
	.vhhc-home-hero__pattern { display: none; }
}
/* 13/10/2026: hero 2 tab (WAI-ARIA tabs, assets/js/main.js) — khôi phục từ bản 29/09. Không JS: thanh tab
   ẩn, 2 panel nối tiếp nhau. Có JS (.is-tabs): từ 901px 2 panel chồng cùng 1 ô lưới nên chiều cao hero
   luôn bằng panel cao nhất — đổi tab không làm trang nhảy; mọi độ rộng panel không chọn dùng visibility:hidden (không nhận focus, ẩn với trình đọc màn hình). Không hiệu ứng chuyển. */
.vhhc-hero-tabs__bar { display: flex; align-items: center; flex-wrap: nowrap; gap: var(--space-3) var(--space-4); margin-bottom: var(--space-8); }
.vhhc-hero-tabs__list { display: flex; flex-wrap: nowrap; flex: 0 0 auto; gap: 0 28px; }
.vhhc-hero-tabs__list[hidden], .vhhc-hero-tabs__pause[hidden] { display: none; }
.vhhc-hero-tabs__tab {
	position: relative; font: var(--weight-semibold) 16px/1.2 var(--font-sans); min-height: 48px; padding: 0; white-space: nowrap;
	color: rgba(247,248,241,.65); background: none; border: 0; border-radius: var(--radius-control); cursor: pointer;
}
.vhhc-hero-tabs__tab:hover { color: rgba(247,248,241,.9); }
.vhhc-hero-tabs__tab[aria-selected="true"] { color: var(--color-surface); }
.vhhc-hero-tabs__tab[aria-selected="true"]::after { content: ""; position: absolute; left: 0; right: 0; bottom: 5px; height: 2px; background: var(--color-accent-growth); }
.vhhc-hero-tabs__pause {
	position: relative; display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0;
	margin-left: 6px; color: rgba(247,248,241,.85); background: none; border: 0; cursor: pointer;
}
.vhhc-hero-tabs__pause::before { content: ""; position: absolute; top: 6px; left: 6px; width: 32px; height: 32px; box-sizing: border-box; border: 1px solid rgba(247,248,241,.4); border-radius: 50%; }
.vhhc-hero-tabs__ico { position: relative; }
.vhhc-hero-tabs__pause[data-state="play"] .vhhc-hero-tabs__ico--pause,
.vhhc-hero-tabs__pause:not([data-state="play"]) .vhhc-hero-tabs__ico--play { display: none; }
.vhhc-hero-tabs__pause:hover::before { border-color: rgba(247,248,241,.8); background: rgba(247,248,241,.1); }
/* Vòng focus Lime Harvest 3px đặc (token --shadow-focus trong suốt, gần như vô hình trên nền Deep Canopy). */
.vhhc-home-hero .vhhc-hero-tabs__tab:focus-visible { outline: 3px solid var(--color-accent-growth); outline-offset: 4px; box-shadow: none; }
.vhhc-home-hero .vhhc-hero-tabs__pause:focus-visible { outline: 0; box-shadow: none; }
.vhhc-hero-tabs__pause:focus-visible::before { border: 3px solid var(--color-accent-growth); }
/* 21/10/2026: không JS, Sustain Agri đứng trước nên vạch ngăn nằm ở panel Products. */
.vhhc-hero-tabs:not(.is-tabs) .vhhc-hero-panel:not(.vhhc-hero-panel--sustain) { margin-top: var(--space-12); padding-top: var(--space-12); border-top: 1px solid rgba(247,248,241,.2); }
.vhhc-hero-tabs.is-tabs .vhhc-hero-tabs__panels { display: grid; }
.vhhc-hero-tabs.is-tabs .vhhc-hero-panel { grid-area: 1 / 1; min-width: 0; }
.vhhc-hero-tabs.is-tabs .vhhc-hero-panel.is-inactive { visibility: hidden; }
@media (max-width: 900px) {
	.vhhc-hero-tabs__bar { margin-bottom: var(--space-6); }
	/* 22/10/2026: chỉ panel đang chọn chiếu chỗ (banner cao vừa tab); không tự chuyển tab nên ẩn nút tạm dừng. Không JS (không .is-tabs) vẫn hiện cả hai. */
	.vhhc-hero-tabs.is-tabs .vhhc-hero-panel.is-inactive { display: none; }
	.vhhc-hero-tabs__pause { display: none; }
}
/* 13/10/2026: dải 3 ô ngay dưới hero (số mã đếm động từ CPT vhhc_grade). */
.vhhc-home-facts { background: var(--color-surface); border-bottom: 1px solid var(--border-subtle); }
.vhhc-home-facts__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.vhhc-home-facts__cell { display: block; position: relative; padding: var(--space-6) var(--space-10) var(--space-6) 0; margin-right: var(--space-6); border-right: 1px solid var(--border-subtle); text-decoration: none; color: var(--text-primary); }
.vhhc-home-facts__cell:last-child { border-right: 0; margin-right: 0; }
.vhhc-home-facts__line { display: block; font: var(--type-eyebrow); letter-spacing: var(--tracking-eyebrow); text-transform: uppercase; color: var(--text-secondary); }
.vhhc-home-facts__n { display: block; margin-top: var(--space-2); font: var(--weight-bold) 32px/1.1 var(--font-sans); font-variant-numeric: tabular-nums; }
.vhhc-home-facts__n small { font: var(--weight-medium) var(--text-body)/1 var(--font-sans); color: var(--text-secondary); margin-left: var(--space-1); }
.vhhc-home-facts__desc { display: block; margin-top: var(--space-2); font: var(--type-caption); color: var(--text-secondary); max-width: 34ch; }
.vhhc-home-facts__go { position: absolute; right: var(--space-4); top: var(--space-6); display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; color: var(--color-primary); }
.vhhc-home-facts__cell:hover .vhhc-home-facts__n { text-decoration: underline; text-decoration-color: var(--color-accent-growth); text-decoration-thickness: 2px; text-underline-offset: 5px; }
.vhhc-home-facts__cell:focus-visible { outline: 3px solid var(--color-primary); outline-offset: -3px; box-shadow: none; }
@media (max-width: 639px) {
	.vhhc-home-facts__grid { grid-template-columns: 1fr; padding: 0; }
	.vhhc-home-facts__cell { margin-right: 0; border-right: 0; border-bottom: 1px solid var(--border-subtle); padding: var(--space-4) var(--space-12) var(--space-4) var(--space-5); min-height: 44px; }
	.vhhc-home-facts__cell:last-child { border-bottom: 0; }
	.vhhc-home-facts__go { right: var(--space-6); top: var(--space-4); }
}
/* 13/10/2026: tab Sustain Agri — nền Deep Canopy trơn (không ảnh kho, không lớp phủ), ảnh app lớn trong khung cửa sổ.
   :has() ẩn ảnh nền + lớp phủ của hero khi panel này đang hiện (không JS: cả hai panel đọc nối tiếp, giữ ảnh). */
.vhhc-home-hero:has(#vhhc-hero-panel-sustain:not(.is-inactive)) { background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-hover) 100%); }
.vhhc-home-hero:has(.is-tabs #vhhc-hero-panel-sustain:not(.is-inactive)) .vhhc-home-hero__bg,
.vhhc-home-hero:has(.is-tabs #vhhc-hero-panel-sustain:not(.is-inactive))::before { display: none; }
.vhhc-hero-panel--sustain.vhhc-trace__grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr); }
.vhhc-hero-panel--sustain .vhhc-trace__frame { overflow: hidden; border: 1px solid rgba(247,248,241,.2); border-radius: var(--radius-card); box-shadow: 0 8px 24px rgba(0,0,0,.25); background: var(--color-primary-hover); }
.vhhc-hero-panel--sustain .vhhc-trace__frame img { display: block; width: 100%; height: auto; border: 0; border-radius: 0; }
.vhhc-hero-panel--sustain .vhhc-trace__figure figcaption { font-size: 12px; line-height: 1.4; color: rgba(247,248,241,.7); max-width: none; }
.vhhc-hero-panel--sustain .vhhc-trace__points { max-width: 52ch; }
.vhhc-hero-panel--sustain .vhhc-trace__points li { font-size: var(--text-body); line-height: 1.45; padding: var(--space-2) 0 var(--space-2) var(--space-6); color: var(--text-inverse); }
.vhhc-hero-panel--sustain .vhhc-trace__points li::before { top: 1em; width: 8px; height: 8px; background: var(--color-accent-growth); }
@media (max-width: 900px) {
	.vhhc-hero-panel--sustain.vhhc-trace__grid { grid-template-columns: 1fr; }
}
/* 19/10/2026 (docs/ux/tablet-hero-fix-2026-10-19.md), mở rộng 22/10/2026 cho điện thoại (docs/ux/hero-mobile-overlap-2026-10-22.md):
   ≤900px — chữ ở trên, ảnh trong khung bo góc ở dưới chữ (cả 2 tab), nền Deep Canopy trơn, không lớp phủ. ≥901px giữ nguyên.
   Khung ảnh kho ẩn ở ≥901px. */
.vhhc-home-hero__photo { display: none; }
@media (max-width: 900px) {
	.vhhc-home-hero--photo { background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-hover) 100%); }
	.vhhc-home-hero--photo::before, .vhhc-home-hero__bg { display: none; }
	.vhhc-home-hero__grid > div { max-width: none; }
	.vhhc-home-hero__grid > div > :not(.vhhc-home-hero__photo) { max-width: 640px; }
	.vhhc-hero-tabs.is-tabs .vhhc-hero-panel { align-self: start; }
	.vhhc-home-hero__photo { display: block; margin: var(--space-10) 0 0; aspect-ratio: 16 / 10; overflow: hidden; border: 1px solid rgba(247,248,241,.2); border-radius: var(--radius-card); box-shadow: 0 8px 24px rgba(0,0,0,.25); }
	.vhhc-home-hero__photo img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center 62%; }
	.vhhc-hero-panel--sustain .vhhc-trace__figure figcaption { margin-top: var(--space-3); }
}
/* 05/10/2026: mục "Truy xuất nguồn gốc" riêng (dải Deep Canopy) sau mục Mã hàng,
   thay panel Sustain Agri trong hero. Chữ trái, ảnh phải; 1 cột dưới 901px. */
.vhhc-trace__grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: var(--space-12); align-items: center; }
@media (max-width: 900px) { .vhhc-trace__grid { grid-template-columns: 1fr; gap: var(--space-8); } }
.vhhc-trace__text { min-width: 0; }
.vhhc-trace__sub { font-size: var(--text-h4); line-height: 1.3; font-weight: var(--weight-semibold); margin: var(--space-4) 0 0; color: var(--text-inverse); }
.vhhc-trace__lead { color: rgba(247,248,241,.86); max-width: 60ch; margin-top: var(--space-4); }
.vhhc-trace__points { list-style: none; margin: var(--space-5) 0 0; padding: 0; max-width: 60ch; }
.vhhc-trace__points li { position: relative; padding: 0 0 var(--space-2) var(--space-5); color: rgba(247,248,241,.86); }
.vhhc-trace__points li::before { content: ""; position: absolute; left: 0; top: .6em; width: 8px; height: 2px; background: var(--text-inverse); }
.vhhc-trace__link { margin-top: var(--space-3); color: var(--text-inverse); }
/* a:hover chung (styles.css) đặc hiệu cao hơn → chữ đổi sang màu tối, chìm vào nền tối. */
.vhhc-trace__link:hover { color: var(--text-inverse); }
.vhhc-trace__figure { margin: 0; min-width: 0; }
.vhhc-trace__figure img { width: 100%; height: auto; border: 1px solid rgba(247,248,241,.5); border-radius: var(--radius-card); }
.vhhc-trace__figure figcaption { margin-top: var(--space-2); color: rgba(247,248,241,.8); }

.vhhc-footer__sustain { margin: var(--space-3) 0 0; }
.vhhc-footer__sustain a { color: var(--text-inverse); text-decoration: underline; }
.vhhc-about-sustain { max-width: 64ch; padding-top: var(--space-8); border-top: 1px solid var(--border-subtle); }

.vhhc-family-table { width: 100%; border-collapse: collapse; font-size: var(--text-body); }
.vhhc-family-table th {
	font: var(--type-eyebrow); text-transform: uppercase; letter-spacing: var(--tracking-eyebrow);
	color: var(--text-secondary); text-align: left; padding: 0 var(--space-6) var(--space-3) 0;
	border-bottom: 2px solid var(--color-primary);
}
.vhhc-family-table td { padding: var(--space-5) var(--space-6) var(--space-5) 0; border-bottom: 1px solid var(--border-subtle); vertical-align: top; line-height: var(--leading-body); }
.vhhc-family-table__name { font-weight: var(--weight-semibold); font-size: var(--text-h4); }
/* 1.3.1: ô tên họ là <th scope="row"> — trả về đúng kiểu ô thường, không kế thừa kiểu nhãn cột. */
.vhhc-family-table th.vhhc-family-table__name {
	font: inherit; font-size: var(--text-h4); font-weight: var(--weight-semibold); text-transform: none; letter-spacing: inherit; color: inherit;
	line-height: var(--leading-body); padding: var(--space-5) var(--space-6) var(--space-5) 0; border-bottom: 1px solid var(--border-subtle); vertical-align: top;
}
.vhhc-family-table .vhhc-grade-links a { color: var(--text-primary); }
/* A1, 30/09/2026: mã trong bảng xếp 1 hàng, ngăn bằng " · ", tự xuống dòng; link cao 44px (mobile) / 32px (desktop, ≥24px WCAG 2.5.8). */
/* 14/10/2026 (staging review 4.4): chip per code — never split inside a name, and no "·" left dangling at the end of a wrapped line. */
/* 14/10/2026 (chủ site): mã trong bảng không viền/nền — chữ Deep Canopy 600 + mũi tên Moss Grey; hover gạch chân Lime 2px.
   Dưới 640px xếp dọc, từ 640px xếp ngang tự xuống dòng. Vùng chạm cao 44px bằng min-height. */
.vhhc-family-table .vhhc-grade-links, .vhhc-family-table .vhhc-grade-links--long { display: flex; flex-direction: column; flex-wrap: nowrap; gap: 0; }
.vhhc-family-table .vhhc-grade-links a { font-size: 16px; min-height: 44px; min-width: 44px; padding: 0; justify-content: flex-start; white-space: nowrap; border: 0; border-radius: var(--radius-sm); background: none; }
.vhhc-family-table .vhhc-grade-links a, .vhhc-family-table td.vhhc-caption a { text-decoration: underline; text-decoration-color: var(--color-neutral); text-decoration-thickness: 1px; text-underline-offset: 4px; }
.vhhc-family-table .vhhc-grade-links a:hover, .vhhc-family-table td.vhhc-caption a:hover { text-decoration: underline; text-decoration-color: var(--color-accent-growth); text-decoration-thickness: 2px; text-underline-offset: 4px; }
.vhhc-family-table .vhhc-grade-links a:focus-visible { outline: 3px solid var(--color-accent-growth); outline-offset: 2px; box-shadow: none; }
@media (min-width: 640px) { .vhhc-family-table .vhhc-grade-links, .vhhc-family-table .vhhc-grade-links--long { flex-direction: row; flex-wrap: wrap; gap: var(--space-2) var(--space-6); } }
.vhhc-nr-strip { padding-top: 0; }
.vhhc-family-table .vhhc-caption { color: var(--text-secondary); margin: 0; }
@media (max-width: 780px) {
	.vhhc-family-table thead { display: none; }
	.vhhc-family-table, .vhhc-family-table tbody, .vhhc-family-table tr, .vhhc-family-table td, .vhhc-family-table th.vhhc-family-table__name { display: block; width: auto; }
	.vhhc-family-table tr { padding: var(--space-4) 0; border-bottom: 1px solid var(--border-subtle); }
	.vhhc-family-table tbody:first-of-type tr:first-child { border-top: 2px solid var(--color-primary); }
	.vhhc-family-table td, .vhhc-family-table th.vhhc-family-table__name { padding: var(--space-1) 0; border: 0; }
	.vhhc-family-table td.vhhc-family-table__used-in--empty { display: none; }
}


.vhhc-order-list { border-top: 2px solid var(--color-primary); }
.vhhc-order-list__row { display: grid; grid-template-columns: minmax(0,1fr); gap: var(--space-4); padding: var(--space-6) 0; border-bottom: 1px solid var(--border-subtle); }
.vhhc-order-list__n { font: var(--type-caption); font-weight: var(--weight-semibold); color: var(--text-secondary); font-variant-numeric: tabular-nums; padding-top: 3px; }
@media (max-width: 780px) { .vhhc-order-list__row { padding: var(--space-5) 0; } }

/* 29/09/2026: 3 tầng nhóm hàng (Natural rubber / Rubber seed oil / Plastic resin)
   — bảng họ hàng Home và mục lục Products. */
/* Tên mã dài (tên mã nhà sản xuất) không vừa 3 cột ngắn: 2 cột. */
.vhhc-family-table .vhhc-family-table__tier th { padding: var(--space-5) 0 var(--space-1); border-bottom: 0; }
@media (max-width: 780px) {
	.vhhc-family-table .vhhc-family-table__tier { padding: var(--space-4) 0 0; border-bottom: 0; }
	.vhhc-family-table .vhhc-family-table__tier th { display: block; padding: 0; }
}
.vhhc-index-list__tier + .vhhc-index-list__tier { margin-top: var(--space-4); }
.vhhc-index-list__tier > .vhhc-eyebrow { margin: 0 0 var(--space-1); }

/* 29/09/2026: khối Sustain Agri (Sustainability) — tính năng theo nhãn trạng
   thái + lưới ảnh chụp màn hình. Màu VHHC, không dùng Deep Forest của ứng dụng. */
.vhhc-feature-status { margin: var(--space-6) 0 var(--space-3); }
.vhhc-feature-list { list-style: none; margin: 0; padding: 0; max-width: 72ch; border-top: 2px solid var(--color-primary); }
.vhhc-feature-list li { padding: var(--space-4) 0; border-bottom: 1px solid var(--border-subtle); font: var(--type-body); }
.vhhc-feature-list strong { display: block; font-weight: var(--weight-semibold); margin-bottom: var(--space-1); }
.vhhc-feature-list span { color: var(--text-secondary); }
.vhhc-trace-shots { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-6); margin-top: var(--space-8); }
.vhhc-trace-shot { margin: 0; }
.vhhc-trace-shot img { width: 100%; height: auto; object-fit: contain; border: 1px solid var(--border-subtle); border-radius: var(--radius-card); }
.vhhc-trace-shot figcaption { margin-top: var(--space-2); }
@media (max-width: 900px) { .vhhc-trace-shots { grid-template-columns: 1fr; } }
.vhhc-steps { list-style: none; margin: var(--space-8) 0 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-8); }
.vhhc-steps__item { border-top: 2px solid var(--color-primary); padding-top: var(--space-4); }
.vhhc-steps__n { display: block; font: var(--type-caption); font-weight: var(--weight-semibold); color: var(--text-secondary); font-variant-numeric: tabular-nums; margin-bottom: var(--space-2); }
.vhhc-steps__item .vhhc-h3 { margin: 0 0 var(--space-2); }
/* Home "Why VHHC": 3 cards, one accent rule each; single column on mobile. */
.vhhc-why-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-6); }
.vhhc-why-card { border-top: 3px solid var(--color-accent-growth); }
.vhhc-why-card .vhhc-h3 { margin: 0 0 var(--space-3); }
.vhhc-why-card .vhhc-body { margin: 0; }
@media (max-width: 900px) { .vhhc-why-grid { grid-template-columns: 1fr; } }
.vhhc-eudr { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--space-12); align-items: start; }
.vhhc-eudr .vhhc-feature-list { max-width: none; }
@media (max-width: 1000px) { .vhhc-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 900px) { .vhhc-eudr { grid-template-columns: 1fr; gap: var(--space-8); } }
@media (max-width: 600px) { .vhhc-steps { grid-template-columns: 1fr; gap: var(--space-6); } }

/* 14/10/2026: trang Truy xuất dạng giới thiệu giải pháp (page-sustainability.php; mockup docs/ux/traceability-solution-mockups/). */
.vhhc-sa-hero { background: var(--color-primary); color: var(--text-inverse); padding: clamp(48px, 5vw, 88px) 0; }
.vhhc-sa-hero__grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: var(--space-12); align-items: center; }
.vhhc-sa-hero__grid--solo { grid-template-columns: minmax(0, 1fr); }
.vhhc-sa-hero__lead { font-size: var(--text-body-lg); line-height: 1.5; color: rgba(247,248,241,.92); max-width: 56ch; margin: var(--space-4) 0 0; }
.vhhc-sa-hero__lead strong { font-weight: var(--weight-semibold); color: var(--text-inverse); }
.vhhc-sa-shot { margin: 0; min-width: 0; }
.vhhc-sa-shot img { width: 100%; height: auto; background: #fff; border: 1px solid var(--border-subtle); border-radius: var(--radius-card); }
.vhhc-sa-shot figcaption { margin-top: var(--space-2); }
.vhhc-sa-shot--hero img { border-color: rgba(247,248,241,.5); }
.vhhc-sa-shot--hero figcaption { color: rgba(247,248,241,.88); }

.vhhc-sa-flow { list-style: none; margin: var(--space-10) 0 0; padding: 0; display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-6); }
.vhhc-sa-flow__card { position: relative; background: var(--surface-card); border: 1px solid var(--border-subtle); border-top: 3px solid var(--color-primary); border-radius: var(--radius-card); padding: var(--space-4) var(--space-5); }
.vhhc-sa-flow__n { display: block; font: var(--type-caption); font-weight: var(--weight-semibold); color: var(--text-secondary); font-variant-numeric: tabular-nums; }
.vhhc-sa-flow__title { font: var(--type-h3); margin: var(--space-1) 0 var(--space-2); }
.vhhc-sa-flow__body { font: var(--type-caption); margin: 0; }
/* Mũi nối giữa các thẻ (chỉ trang trí): đứng, giữa 2 thẻ xếp dọc. */
.vhhc-sa-flow__card:not(:last-child)::after { content: ""; position: absolute; left: var(--space-5); bottom: calc(-1 * var(--space-6) - 1px); width: 2px; height: var(--space-6); background: var(--color-primary); }
@media (min-width: 1100px) {
	.vhhc-sa-flow { grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--space-3); }
	.vhhc-sa-flow__title { font: var(--weight-bold) var(--text-h4)/1.3 var(--font-sans); }
	.vhhc-sa-flow__card:not(:last-child)::after { left: auto; right: calc(-1 * var(--space-3) - 1px); bottom: auto; top: 50%; width: var(--space-3); height: 2px; }
}

.vhhc-sa-feat { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: var(--space-12); align-items: center; padding: var(--space-10) 0; border-top: 1px solid var(--border-subtle); }
.vhhc-sa-feat:first-of-type { margin-top: var(--space-6); }
.vhhc-sa-feat--rev { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.vhhc-sa-feat--rev .vhhc-sa-feat__txt { order: 2; }
.vhhc-sa-feat--solo, .vhhc-sa-feat--solo.vhhc-sa-feat--rev { grid-template-columns: minmax(0, 1fr); }
.vhhc-sa-feat__txt .vhhc-body { max-width: 46ch; }

.vhhc-sa-aud { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--space-12); align-items: start; margin-top: var(--space-10); }
.vhhc-sa-aud .vhhc-feature-list { max-width: none; }
.vhhc-sa-other { margin-top: var(--space-16); padding-top: var(--space-12); border-top: 1px solid var(--border-subtle); }
.vhhc-sa-other > .vhhc-body { max-width: 64ch; }
.vhhc-sa-roles { list-style: none; margin: var(--space-8) 0 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-4); }
.vhhc-sa-roles__item { background: var(--surface-card); border: 1px solid var(--border-subtle); border-radius: var(--radius-card); padding: var(--space-4); }
.vhhc-sa-roles__item p { font: var(--type-caption); margin: 0; }
.vhhc-sa-roles__title { font: var(--weight-bold) var(--text-body)/1.3 var(--font-sans); margin: 0 0 var(--space-2); }
.vhhc-sa-pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-8); margin-top: var(--space-8); }
.vhhc-sa-pair__item .vhhc-sa-roles__title { margin-top: var(--space-3); }
.vhhc-sa-pair__item .vhhc-body { font: var(--type-caption); }
@media (min-width: 1100px) { .vhhc-sa-roles { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

.vhhc-sa-scope { background: var(--color-primary); color: var(--text-inverse); }
.vhhc-sa-scope .vhhc-eyebrow { color: rgba(247,248,241,.85); }
.vhhc-sa-scope__grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: var(--space-12); }
.vhhc-sa-scope__list { list-style: none; margin: 0; padding: 0; }
.vhhc-sa-scope__list li { padding: var(--space-3) 0; border-top: 1px solid rgba(247,248,241,.25); }
.vhhc-sa-scope__list li:last-child { border-bottom: 1px solid rgba(247,248,241,.25); }
.vhhc-sa-cta { margin-top: var(--space-8); }

@media (max-width: 900px) {
	.vhhc-sa-hero__grid, .vhhc-sa-feat, .vhhc-sa-feat--rev, .vhhc-sa-aud, .vhhc-sa-scope__grid, .vhhc-sa-pair { grid-template-columns: minmax(0, 1fr); gap: var(--space-6); }
	.vhhc-sa-feat--rev .vhhc-sa-feat__txt { order: 0; }
	.vhhc-sa-feat { padding: var(--space-8) 0; }
}
@media (max-width: 639px) {
	/* 19/10/2026: ảnh dọc điện thoại chỉ cap 560px ở ≤639px; tablet dùng ảnh ngang rộng hết container. */
	.vhhc-sa-shot { max-width: 560px; }
	.vhhc-sa-roles { grid-template-columns: minmax(0, 1fr); }
	.vhhc-sa-cta .vhhc-btn { width: 100%; justify-content: center; }
}

.vhhc-mail-lg { font-size: var(--text-h3); font-weight: var(--weight-semibold); min-height: 44px; display: inline-flex; align-items: center; }

/* .vhhc-cta-band removed (GĐ2 Đợt 4, 17/09/2026) — the rounded end-of-page
   CTA it styled was dropped from About/Products/Sustainability; the
   footer's invite row (§3.8) now does that job on every page. */

/* ---------- About / Sustainability (GĐ2 Đợt 2, 17/09/2026 — docs/ux/design-export/Trang - About.dc.html, Trang - Sustainability.dc.html) ---------- */
.vhhc-header-grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: var(--space-12); align-items: start; }
@media (max-width: 900px) { .vhhc-header-grid { grid-template-columns: 1fr; gap: var(--space-8); } }

.vhhc-dl__row { display: flex; justify-content: space-between; gap: var(--space-4); padding: var(--space-3) 0; border-bottom: 1px solid var(--border-subtle); }
.vhhc-dl__row:last-child { border-bottom: none; }
.vhhc-dl__row dt { color: var(--text-secondary); font: var(--type-caption); }
/* GĐ3 vòng 5, 17/09/2026 (V8): text-align:right trên chữ nhiều dòng (tên
   pháp lý, địa chỉ) làm mỗi dòng lệch phải khác nhau, rất khó đọc — căn trái. */
.vhhc-dl__row dd { margin: 0; text-align: left; font-weight: var(--weight-semibold); max-width: 62%; }
@media (max-width: 639px) {
	.vhhc-dl__row { flex-direction: column; gap: var(--space-1); }
	.vhhc-dl__row dd { max-width: none; }
}

.vhhc-index-list a { display: flex; justify-content: space-between; gap: var(--space-4); padding: var(--space-3) 0; border-bottom: 1px solid var(--border-subtle); min-height: 44px; align-items: center; font-weight: var(--weight-semibold); text-decoration: none; }
.vhhc-index-list a:last-child { border-bottom: none; }
.vhhc-index-list a > span:last-child { text-align: right; }

/* GĐ2 Đợt 3 — Products grade anchors (id="<code>" on .vhhc-dl__row, e.g.
   #svr-3l, #rss-3, #latex-ha, #rso): offset for the sticky navbar (76px) so a
   jump from Home doesn't land the target under it. */
.vhhc-index-list a[id] { scroll-margin-top: 96px; }

/* Sustainability CTA — link + icon giữ gạch chân mặc định (§V1), khác
   .vhhc-doc-table__go a (không gạch chân). */
.vhhc-link-cta { font-weight: var(--weight-semibold); display: inline-flex; align-items: center; gap: var(--space-2); min-height: 44px; white-space: nowrap; }

/* GĐ3 vòng 1, 17/09/2026 (C1): vòng focus mặc định (--shadow-focus) dùng viền
   Deep Canopy 2px trùng màu nền tối (hero Home, footer) → gần như vô hình.
   Đặt cuối file để thắng .vhhc-btn:focus-visible (cùng độ đặc hiệu, phải
   thắng bằng thứ tự) — đổi viền trong sang Clean Grain để luôn có tỉ lệ ≥ 3:1. */
.vhhc-home-hero :focus-visible,
.vhhc-footer :focus-visible {
	box-shadow: 0 0 0 2px var(--color-surface), 0 0 0 5px rgba(183,227,58,.45);
}

/* ---------- Section rhythm (f, spec 23/09/2026 liveliness-spec) ----------
   Dark (Deep Canopy) band — at most 1 per page outside the Home hero, and
   Mint Air (.vhhc-section--soft, already existed) at most 1 per page; every
   other section stays Clean Grain. Overrides cover every component already
   used inside a section (table, ruled list, order list, card, links) so a
   section can flip dark without each template hand-tuning colors. */
.vhhc-section--dark { background: var(--color-primary); color: var(--text-inverse); }
.vhhc-section--dark .vhhc-h2, .vhhc-section--dark .vhhc-h3, .vhhc-section--dark .vhhc-lead { color: var(--text-inverse); }
.vhhc-section--dark .vhhc-body, .vhhc-section--dark .vhhc-caption, .vhhc-section--dark .vhhc-eyebrow,
.vhhc-section--dark .vhhc-order-list__n, .vhhc-section--dark .vhhc-grade-group__name { color: rgba(247,248,241,.82); }
.vhhc-section--dark .vhhc-ruled-item, .vhhc-section--dark .vhhc-order-list, .vhhc-section--dark .vhhc-order-list__row { border-color: rgba(247,248,241,.28); }
.vhhc-section--dark .vhhc-ruled-item p { color: rgba(247,248,241,.82); }
.vhhc-section--dark .vhhc-divider--premium { border-top-color: var(--color-accent-premium); }
.vhhc-section--dark a:not(.vhhc-btn):not(.vhhc-link-cta) { color: var(--text-inverse); }
.vhhc-section--dark .vhhc-card { background: var(--surface-inverse-deep); border-color: rgba(247,248,241,.18); color: var(--text-inverse); }
.vhhc-section--dark .vhhc-card .vhhc-caption { color: rgba(247,248,241,.7); }
.vhhc-section--dark .vhhc-link-cta { color: var(--text-inverse); }
.vhhc-section--dark .vhhc-table th, .vhhc-section--dark .vhhc-table td { border-bottom-color: rgba(247,248,241,.24); color: var(--text-inverse); }
.vhhc-section--dark .vhhc-table th { color: rgba(247,248,241,.7); border-bottom-color: var(--color-accent-premium); }
.vhhc-section--dark .vhhc-table tbody th[scope="row"] { color: var(--text-inverse); border-bottom-color: rgba(247,248,241,.24); }
.vhhc-section--dark .vhhc-table td:nth-child(2) { color: rgba(247,248,241,.7); }
.vhhc-section--dark .vhhc-table-scroll:has(a) .vhhc-table tbody tr:hover { background: rgba(247,248,241,.08); }
.vhhc-section--dark .vhhc-media--photo::after { background: linear-gradient(180deg, rgba(18,53,36,0) 0%, rgba(18,53,36,.55) 100%); }
/* A dark/mint section sits flush against its neighbours — the shared hairline
   (.vhhc-section + .vhhc-section) would otherwise draw a pale line across a
   solid band edge. */
.vhhc-section--dark + .vhhc-section, .vhhc-section + .vhhc-section--dark,
.vhhc-section--soft + .vhhc-section, .vhhc-section + .vhhc-section--soft { border-top: none; }

/* Offset 7/5 column layout — an alternative to the site's usual ~1.15/.85
   two-column ratio, used at least once per long page per the spec. */
.vhhc-grid-7-5 { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
/* 29/09/2026: 1000 → 1199 — ở 1024–1100 cột 7fr còn ~510px (bảng họ hàng Home, khối Giới thiệu bị bóp). */
@media (max-width: 1199px) { .vhhc-grid-7-5 { grid-template-columns: minmax(0, 1fr); } }
/* A1, 30/09/2026: bảng Danh mục mã hàng rộng hơn (cột Ứng dụng không bị ép hẹp), cột phải chỉ còn chú thích + link. */
@media (min-width: 1200px) { .vhhc-grid-7-5.vhhc-grades-grid { grid-template-columns: minmax(0, 9fr) minmax(0, 3fr); } }
/* 14/10/2026 (chủ site: căn lề lại): cột cố định thẳng giữa các hàng; tên họ, link mã đầu tiên và ô cột 3 cùng một đường cơ sở
   (link mã cao 44px nên ô mã bớt padding trên/dưới 10px để chữ vẫn nằm ngang với tên họ). */
@media (min-width: 781px) {
	.vhhc-family-table { table-layout: fixed; }
	.vhhc-family-table thead th:nth-child(1) { width: 22%; }
	.vhhc-family-table thead th:nth-child(2) { width: 48%; }
	.vhhc-family-table thead th:nth-child(3) { width: 30%; padding-right: 0; }
	.vhhc-family-table tbody tr:not(.vhhc-family-table__tier) > * { vertical-align: baseline; }
	.vhhc-family-table tbody tr:not(.vhhc-family-table__tier) > td:nth-child(2) { padding-top: calc(var(--space-5) - 10px); padding-bottom: calc(var(--space-5) - 10px); }
	.vhhc-family-table tbody tr:not(.vhhc-family-table__tier) > td:nth-child(3) { padding-right: 0; }
}

/* ---------- Stamp (c, spec 23/09/2026 liveliness-spec) ----------
   Technical-stamp value + caption: a 2px Deep Canopy top rule, tabular
   figures, Manrope 700 (never 800). Reused by grade cards (b) for the grade
   code itself. */
.vhhc-stamp-row { display: flex; flex-wrap: wrap; gap: var(--space-6); margin-top: var(--space-6); }
.vhhc-stamp { border-top: 2px solid var(--color-primary); padding-top: var(--space-3); min-width: 128px; }
.vhhc-stamp__value { display: block; font-family: var(--font-sans); font-weight: var(--weight-bold); font-size: var(--text-h3); font-variant-numeric: tabular-nums; line-height: var(--leading-tight); color: var(--text-primary); }
.vhhc-stamp__caption { display: block; font: var(--type-caption); color: var(--text-secondary); margin-top: var(--space-1); max-width: 22ch; }
.vhhc-section--dark .vhhc-stamp { border-top-color: var(--color-accent-premium); }
.vhhc-section--dark .vhhc-stamp__value { color: var(--text-inverse); }
.vhhc-section--dark .vhhc-stamp__caption { color: rgba(247,248,241,.7); }
@media (max-width: 639px) {
	.vhhc-stamp-row { flex-direction: column; gap: var(--space-4); }
	.vhhc-stamp { min-width: 0; }
}

/* ---------- Grade list (chủ site chốt 29/09/2026): danh sách kẻ dòng thay thẻ có
   khung — mã hàng trái, "View specs" + mũi tên phải, cùng kiểu .vhhc-index-list. ---------- */
.vhhc-grade-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--space-8); margin-top: var(--space-4); align-items: start; grid-auto-flow: column; grid-template-rows: repeat(var(--rows, 1), auto); } /* xếp theo cột: n mã → ceil(n/2) hàng (5 → 3+2); --rows in từ PHP */
@media (max-width: 599px) { .vhhc-grade-cards { grid-template-columns: 1fr; grid-auto-flow: row; grid-template-rows: none; } }
.vhhc-grade-card {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-3);
	min-height: 44px;
	/* negative side margin = padding: hover background bleeds out, code text lines up with the "Grades" heading */
	margin-inline: calc(-1 * var(--space-2));
	padding: var(--space-2) var(--space-2);
	border-bottom: 1px solid var(--border-subtle);
	text-decoration: none;
	color: var(--text-primary);
	transition: var(--transition-surface);
	scroll-margin-top: 96px;
}
.vhhc-grade-card:hover { background: var(--color-surface-soft); }
.vhhc-grade-card:hover .vhhc-grade-card__code,
.vhhc-grade-card:hover .vhhc-grade-card__cta { color: var(--color-primary); }
.vhhc-grade-card:focus-visible { outline: 2px solid var(--color-primary); outline-offset: -2px; background: var(--color-surface-soft); }
.vhhc-grade-card__photo { display: block; flex: 0 0 auto; width: 40px; height: 40px; background: var(--color-neutral); }
.vhhc-grade-card__photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.vhhc-grade-card__code { flex: 1 1 auto; min-width: 0; font-size: 17px; font-weight: var(--weight-semibold); line-height: var(--leading-tight); font-variant-numeric: tabular-nums; color: var(--text-primary); overflow-wrap: anywhere; }
.vhhc-grade-card__meta { font: var(--type-caption); color: var(--text-secondary); white-space: nowrap; }
.vhhc-grade-card__cta { flex: 0 0 auto; display: inline-flex; align-items: center; gap: var(--space-2); font: var(--type-caption); color: var(--text-secondary); white-space: nowrap; }
.vhhc-grade-card__icon { flex: 0 0 auto; }
.vhhc-section--dark .vhhc-grade-card { color: var(--text-inverse); border-bottom-color: rgba(247,248,241,.18); }
.vhhc-section--dark .vhhc-grade-card__code { color: var(--text-inverse); }
.vhhc-section--dark .vhhc-grade-card__meta { color: rgba(247,248,241,.7); }
.vhhc-section--dark .vhhc-grade-card__cta { color: rgba(247,248,241,.7); }
.vhhc-section--dark .vhhc-grade-card:hover { background: rgba(247,248,241,.08); }
.vhhc-section--dark .vhhc-grade-card:hover .vhhc-grade-card__code,
.vhhc-section--dark .vhhc-grade-card:hover .vhhc-grade-card__cta { color: var(--text-inverse); }

/* ---------- Route map (d, spec 23/09/2026 liveliness-spec) ----------
   Schematic flow, not a geographic map: origin → export ports → buyer
   regions, three columns joined by an arrow — solid colors, no gradients. */
.vhhc-route-map { display: flex; align-items: flex-start; gap: var(--space-6); flex-wrap: wrap; margin-top: var(--space-8); }
.vhhc-route-map__col { flex: 1 1 200px; min-width: 160px; }
.vhhc-route-map__col .vhhc-eyebrow { margin-bottom: var(--space-3); }
.vhhc-route-map__node {
	border: 1px solid var(--border-subtle);
	border-radius: var(--radius-sm);
	padding: var(--space-3) var(--space-4);
	font-weight: var(--weight-semibold);
	margin-bottom: var(--space-2);
	background: var(--surface-card);
}
.vhhc-route-map__node--origin { background: var(--color-primary); color: var(--text-inverse); border-color: var(--color-primary); }
.vhhc-route-map__arrow { color: var(--text-secondary); padding-top: 40px; flex: 0 0 auto; }
@media (max-width: 780px) {
	.vhhc-route-map { flex-direction: column; }
	.vhhc-route-map__arrow { display: none; }
}

/* ---------- Document samples (Home, under the grades table) ----------
   05/10/2026: 2 small thumbnails (top of the redacted sample photo, ~104px
   wide) + one line "COA per lot · C/O per shipment · TDS on request". Each
   thumbnail is a <button> opening the shared sample <dialog>. Reference only:
   quiet, no fill, small magnifier — it must not compete with the grades table. */
.vhhc-grades-main { min-width: 0; }
.vhhc-doc-line { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-4) var(--space-8); margin-top: var(--space-6); }
.vhhc-doc-line__text { margin: 0; flex: 1 1 260px; }
.vhhc-doc-set { display: flex; flex-wrap: wrap; gap: var(--space-4); }
.vhhc-doc-mini {
	display: flex;
	flex-direction: column;
	gap: var(--space-2);
	width: 104px;
	padding: 0;
	margin: 0;
	font: inherit;
	text-align: left;
	color: var(--text-primary);
	background: none;
	border: 0;
	cursor: pointer;
}
.vhhc-doc-mini__img { position: relative; display: block; aspect-ratio: 1 / 1; overflow: hidden; background: #fff; border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); }
.vhhc-doc-mini__photo { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top; }
.vhhc-doc-mini__zoom { position: absolute; right: var(--space-1); bottom: var(--space-1); display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: var(--color-primary); color: var(--text-inverse); }
.vhhc-doc-mini__zoom-icon { width: 14px; height: 14px; }
.vhhc-doc-mini__label { display: block; min-height: 44px; font: var(--type-caption); font-weight: var(--weight-semibold); color: var(--color-primary); text-decoration: underline; text-decoration-color: var(--color-accent-premium); text-underline-offset: 4px; }
.vhhc-doc-mini:hover .vhhc-doc-mini__img { border-color: var(--color-primary); }
.vhhc-doc-mini:hover .vhhc-doc-mini__zoom { background: var(--color-primary-hover); }
.vhhc-doc-mini:focus-visible { outline: 3px solid var(--color-primary); outline-offset: 2px; }

/* ---------- Shared dialog shell (review fixes 24/09/2026) — base look for
   every native <dialog> on the site (document-sample popup, grade quick view):
   card surface, backdrop tint, close button hit target, reduced-motion. Each
   dialog keeps its own modifier class (.vhhc-doc-dialog/.vhhc-grade-dialog)
   for size/layout differences only. */
.vhhc-dialog {
	border: 0;
	border-radius: var(--radius-md);
	padding: 0;
	background: var(--surface-card);
	color: var(--text-primary);
}
.vhhc-dialog::backdrop { background: rgba(18, 53, 36, .6); }
.vhhc-dialog__close {
	position: absolute;
	top: var(--space-3);
	right: var(--space-3);
	z-index: 1;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	background: none;
	border: 0;
	border-radius: var(--radius-sm);
	color: var(--text-primary);
	cursor: pointer;
}

@media (prefers-reduced-motion: reduce) {
	.vhhc-dialog, .vhhc-dialog::backdrop { transition: none; animation: none; }
}

.vhhc-doc-dialog {
	max-width: 480px;
	width: calc(100vw - var(--space-8));
}
.vhhc-doc-dialog__panel { position: relative; padding: var(--space-6); }
.vhhc-doc-dialog__title { margin: 0 var(--space-8) var(--space-4) 0; }
.vhhc-doc-dialog__image-wrap { position: relative; overflow: hidden; border-radius: var(--radius-sm); border: 1px solid var(--border-subtle); }
.vhhc-doc-dialog__image { display: block; width: 100%; height: auto; }
.vhhc-doc-dialog__note { margin: var(--space-4) 0 0; color: var(--color-muted); font: var(--type-caption); }

@media (max-width: 640px) {
	.vhhc-doc-dialog {
		width: 100vw;
		max-width: 100vw;
		max-height: 100vh;
		height: 100%;
		margin: 0;
		border-radius: 0;
		overflow-y: auto;
	}
}

/* ---------- Grade quick-view popup (Products), chủ site chốt 24/09/2026 —
   one shared <dialog> for every grade card (review fixes 24/09/2026), shell
   from .vhhc-dialog above. Desktop: centered, max-width ~560px, max-height
   ~85dvh (vh fallback for browsers without dvh support), body scrolls inside
   a flex column so the "Send inquiry" footer stays pinned at the bottom.
   Mobile (<600px): bottom sheet, full width, rounded top corners, 90dvh so
   the close button isn't hidden under the iOS Safari toolbar. ---------- */
.vhhc-grade-dialog {
	max-width: 560px;
	width: calc(100vw - var(--space-8));
	max-height: 85vh;
	max-height: 85dvh;
}
.vhhc-grade-dialog__panel {
	position: relative;
	display: flex;
	flex-direction: column;
	max-height: 85vh;
	max-height: 85dvh;
}
.vhhc-grade-dialog__body { overflow-y: auto; min-height: 0; padding: var(--space-6); padding-top: var(--space-8); }
.vhhc-grade-dialog__title { margin: 0 var(--space-8) var(--space-3) 0; font: var(--type-h2); letter-spacing: var(--tracking-heading); }
/* 29/09/2026: tiêu đề mã lớn hơn mục "Specifications" bên trong. */
.vhhc-grade-dialog .vhhc-h3 { font-size: var(--text-body-lg); }
.vhhc-grade-dialog__link { display: inline-flex; align-items: center; min-height: 44px; margin-top: var(--space-1); }
.vhhc-grade-dialog__footer {
	flex: 0 0 auto;
	padding: var(--space-4) var(--space-6);
	border-top: 1px solid var(--border-subtle);
	background: var(--surface-card);
}
.vhhc-grade-dialog__footer .vhhc-btn { width: 100%; justify-content: center; }

@media (max-width: 599px) {
	.vhhc-grade-dialog[open] {
		position: fixed;
		inset-block-start: auto;
		inset-block-end: 0;
		left: 0;
		margin: 0;
		width: 100%;
		max-width: 100%;
		max-height: 90vh;
		max-height: 90dvh;
		border-radius: var(--radius-md) var(--radius-md) 0 0;
	}
	.vhhc-grade-dialog__panel { max-height: 90vh; max-height: 90dvh; }
}

/* ---------- Utilities (R1, 17/09/2026) ----------
   Chỉnh nhịp cách một lần cho một chỗ — thay cho style="..." trong template.
   Đặt cuối file để thắng margin mặc định của các class thành phần (cùng độ
   đặc hiệu 1 class, thắng bằng thứ tự — theo đúng quy ước C1 phía trên). */
.u-mt-2 { margin-top: var(--space-2); }
.u-mt-3 { margin-top: var(--space-3); }
.u-mt-4 { margin-top: var(--space-4); }
.u-mt-8 { margin-top: var(--space-8); }
.u-mb-0 { margin-bottom: 0; }
.u-mb-2 { margin-bottom: var(--space-2); }
.u-mb-3 { margin-bottom: var(--space-3); }
.u-mb-4 { margin-bottom: var(--space-4); }
.u-mb-6 { margin-bottom: var(--space-6); }
.u-m-0 { margin: 0; }
.u-max-w-64ch { max-width: 64ch; }
.u-text-lg { font-size: var(--text-body-lg); }

/* ---------- News list (R3b, 17/09/2026) — home.php/archive.php ---------- */
.vhhc-news-list { border-top: 2px solid var(--color-primary); }
.vhhc-news-item { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: var(--space-6); padding: var(--space-8) 0; border-bottom: 1px solid var(--border-subtle); }
.vhhc-news-item--no-thumb { grid-template-columns: minmax(0, 1fr); }
.vhhc-news-item__thumb img { width: 96px; height: 96px; object-fit: cover; border-radius: var(--radius-sm); }
.vhhc-news-item__date { font: var(--type-caption); color: var(--text-secondary); font-variant-numeric: tabular-nums; margin: 0; }
.vhhc-news-item__title { font: var(--type-h3); margin: var(--space-2) 0; }
.vhhc-news-item__title a { color: inherit; text-decoration: none; }
.vhhc-news-item__title a:hover { text-decoration: underline; text-underline-offset: 3px; }
.vhhc-news-item__excerpt { color: var(--text-secondary); max-width: 70ch; margin: 0; }
@media (max-width: 639px) {
	.vhhc-news-item, .vhhc-news-item--no-thumb { grid-template-columns: minmax(0, 1fr); }
	.vhhc-news-item__thumb { display: none; }
}

/* ---------- Pagination (R3b) ---------- */
.vhhc-pagination { margin-top: var(--space-10); }
.vhhc-pagination ul { list-style: none; display: flex; flex-wrap: wrap; gap: var(--space-2); padding: 0; margin: 0; }
.vhhc-pagination .page-numbers {
	display: inline-flex; align-items: center; justify-content: center;
	min-width: 40px; height: 40px; padding: 0 var(--space-3);
	border: 1px solid var(--border-subtle); border-radius: var(--radius-sm);
	font: var(--type-caption); color: var(--text-primary); text-decoration: none;
}
.vhhc-pagination a.page-numbers:hover { background: var(--color-surface-soft); }
.vhhc-pagination .page-numbers.current { border-color: var(--color-primary); font-weight: var(--weight-semibold); }
.vhhc-pagination .page-numbers.dots { border-color: transparent; }

/* ---------- Post CTA row (R3b, single.php) ---------- */
.vhhc-post-cta__actions { display: flex; align-items: center; gap: var(--space-6); flex-wrap: wrap; }
.vhhc-post-thumb { margin-bottom: var(--space-8); }
.vhhc-post-thumb img { width: 100%; border-radius: var(--radius-card); }

/* ---------- Entry content (R3b) — post body typography, kept inside the
   same system as the rest of the site (no shadows, hairlines not boxes). ---------- */
.entry-content { color: var(--text-primary); font: var(--type-body); max-width: 72ch; }
.entry-content > * + * { margin-top: 1.25em; }
.entry-content h2 { font: var(--type-h2); letter-spacing: var(--tracking-heading); margin: 1.5em 0 .5em; max-width: none; }
.entry-content h3 { font: var(--type-h3); margin: 1.4em 0 .5em; }
.entry-content h4 { font-size: var(--text-h4); font-weight: var(--weight-semibold); margin: 1.2em 0 .5em; }
.entry-content p { margin: 0; }
.entry-content ul, .entry-content ol { padding-left: 1.25em; }
.entry-content li + li { margin-top: .4em; }
.entry-content blockquote { border-left: 2px solid var(--color-primary); padding-left: var(--space-6); margin-left: 0; color: var(--text-secondary); font-style: normal; }
.entry-content img { border-radius: var(--radius-sm); }
.entry-content figcaption { font: var(--type-caption); color: var(--text-secondary); margin-top: var(--space-2); }
.entry-content table { width: 100%; border-collapse: collapse; }
.entry-content table th, .entry-content table td { text-align: left; padding: var(--space-3) var(--space-4) var(--space-3) 0; border-bottom: 1px solid var(--border-subtle); }
.entry-content table th { border-bottom: 2px solid var(--color-primary); font: var(--type-eyebrow); text-transform: uppercase; letter-spacing: var(--tracking-eyebrow); color: var(--text-secondary); }
.entry-content a { color: var(--text-link); text-underline-offset: 3px; }
.entry-content a:hover { color: var(--text-link-hover); }
.entry-content hr { border: none; border-top: 1px solid var(--border-subtle); margin: var(--space-8) 0; }

/* ---------- Block patterns (R3c, 17/09/2026) ----------
   core/table only applies a custom className to the <figure> wrapper, not
   the <table> itself — scoped selector so the "Bảng thông số" pattern reads
   like the page-level .vhhc-table without touching that ruleset. */
.wp-block-table.vhhc-table table { width: 100%; border-collapse: collapse; }
.wp-block-table.vhhc-table th, .wp-block-table.vhhc-table td { text-align: left; padding: var(--space-5) var(--space-6) var(--space-5) 0; border-bottom: 1px solid var(--border-subtle); font: var(--type-body); }
.wp-block-table.vhhc-table th { font: var(--type-eyebrow); text-transform: uppercase; letter-spacing: var(--tracking-eyebrow); color: var(--text-secondary); border-bottom: 2px solid var(--color-primary); }
.wp-block-table.vhhc-table td:first-child, .wp-block-table.vhhc-table th:first-child { font-weight: var(--weight-semibold); }

/* Core button block used inside VHHC patterns/flexible pages: brand radius
   and height, matching --radius-sm/--control-h without reusing .vhhc-btn
   (that class stays reserved for vhhc_button()'s own markup). */
.wp-block-button .wp-element-button { border-radius: var(--radius-sm); min-height: var(--control-h); padding: 0 var(--space-6); display: inline-flex; align-items: center; font-weight: var(--weight-semibold); }

/* ---------- RFQ form — dòng hàng (Đợt A/B 23/09/2026, dòng hàng 29/09/2026) ---------- */
.vhhc-checkbox { display: flex; align-items: center; gap: var(--space-2); min-height: 44px; font: var(--type-body); }
.vhhc-checkbox input { width: 20px; height: 20px; }

/* Dòng hàng (29/09/2026): mỗi dòng = select mã + số lượng (MT) + nút xoá 44px.
   ≥600px một hàng, cột thẳng hàng với nhãn cột; <600px select full width,
   dưới là số lượng + nút xoá. Không JS: nút xoá/thêm có thuộc tính hidden. */
.vhhc-rfq-lines__head,
.vhhc-rfq-line {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 160px 44px;
	column-gap: var(--space-3);
	align-items: center;
}
.vhhc-rfq-lines__head { margin: 0 0 var(--space-2); font-weight: var(--weight-semibold); color: var(--text-secondary); }
.vhhc-rfq-lines__note { margin: var(--space-2) 0 0; color: var(--text-secondary); }
.vhhc-rfq-lines__list { display: flex; flex-direction: column; gap: 12px; }
.vhhc-rfq-line { row-gap: var(--space-1); }
.vhhc-rfq-line__qty { position: relative; display: block; }
.vhhc-rfq-line__qty .vhhc-input { padding-right: 48px; }
.vhhc-rfq-line__unit { position: absolute; right: var(--space-3); top: 50%; transform: translateY(-50%); font: var(--type-caption); font-weight: var(--weight-semibold); color: var(--text-secondary); pointer-events: none; }
.vhhc-rfq-line__error { grid-column: 1 / -1; }
.vhhc-rfq-line [aria-invalid="true"] { border-color: var(--status-critical); }
.vhhc-rfq-products-error { margin: 0; }
.vhhc-rfq-line__remove {
	width: 44px; height: 44px; padding: 0; border: 0; border-radius: var(--radius-control);
	display: inline-flex; align-items: center; justify-content: center;
	background: transparent; color: var(--text-secondary); font-size: 16px; line-height: 1; cursor: pointer;
	transition: background-color .15s ease, color .15s ease;
}
.vhhc-rfq-line__remove[hidden] { display: none; }
.vhhc-rfq-line__remove:hover { background: var(--color-surface-soft); color: var(--text-primary); }
.vhhc-rfq-line__remove:focus-visible { outline: 2px solid transparent; box-shadow: var(--shadow-focus); }
.vhhc-rfq-add {
	display: inline-flex; align-items: center; gap: var(--space-2); min-height: 44px; margin-top: var(--space-2); padding: 0;
	border: 0; background: none; color: var(--color-primary);
	font: var(--type-body); font-weight: var(--weight-semibold); cursor: pointer;
}
.vhhc-rfq-add[hidden] { display: none; }
.vhhc-fieldset { border: 0; padding: 0; min-width: 0; }
.vhhc-fieldset legend { padding: 0; margin-bottom: var(--space-2); font: var(--type-caption); font-weight: var(--weight-semibold); color: var(--text-primary); }
.vhhc-rfq-clear {
	align-self: flex-start; min-height: 44px; padding: 0; border: 0; background: none; color: var(--color-primary);
	font: var(--type-body); font-size: 15px; font-weight: var(--weight-semibold); cursor: pointer;
}
.vhhc-rfq-clear[hidden] { display: none; }
.vhhc-rfq-clear:hover { text-decoration: underline; text-underline-offset: 3px; }
.vhhc-rfq-clear:focus-visible { outline: 2px solid transparent; box-shadow: var(--shadow-focus); border-radius: var(--radius-control); }
.vhhc-rfq-add:hover { text-decoration: underline; text-underline-offset: 3px; }
.vhhc-rfq-add:focus-visible { outline: 2px solid transparent; box-shadow: var(--shadow-focus); border-radius: var(--radius-control); }
@media (max-width: 599px) {
	.vhhc-rfq-lines__head { display: none; }
	.vhhc-rfq-line { grid-template-columns: minmax(0, 1fr) 44px; row-gap: var(--space-2); }
	.vhhc-rfq-line__grade { grid-column: 1 / -1; }
	/* Trong dòng 8px; giữa 2 dòng 16px + đường kẻ + 16px, để nhìn ra ô số thuộc mã nào. */
	.vhhc-rfq-lines__list { gap: var(--space-4); }
	.vhhc-rfq-line { align-items: start; }
	.vhhc-rfq-line__remove { margin: -2px 0; } /* nút 44px chồng 2px lên/xuống để hàng số lượng cao đúng 40px, khoảng cách 8px chính xác */
	.vhhc-rfq-line + .vhhc-rfq-line { padding-top: var(--space-4); border-top: 1px solid var(--border-subtle); }
	.vhhc-rfq-line__error { margin-top: calc(var(--space-1) - var(--space-2)); }
}

/* Badge ✓ ở góc nút Incoterm (absolute, không chiếm chỗ, không đổi độ rộng khi chọn). */
.vhhc-segmented__check {
	position: absolute;
	top: -7px;
	right: -7px;
	width: 18px;
	height: 18px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	background: var(--color-primary);
	color: var(--text-inverse);
	font-size: 11px;
	line-height: 1;
	visibility: hidden;
}

/* Incoterm segmented control: thanh liền full ngang, radio thật, 3 phần bằng nhau,
   viền chung 1px (margin -1px chồng viền), bo góc chỉ ở đầu và cuối. */
.vhhc-segmented { display: flex; width: 100%; }
.vhhc-segmented__option {
	position: relative;
	flex: 1 1 0;
	min-width: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 40px;
	padding: 0 var(--space-2);
	border: 1px solid var(--color-neutral);
	border-radius: 0;
	background: var(--surface-card);
	color: var(--text-primary);
	font: var(--type-body);
	font-size: 15px;
	font-weight: var(--weight-semibold);
	white-space: nowrap;
	cursor: pointer;
	transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.vhhc-segmented__option +.vhhc-segmented__option { margin-left: -1px; }
.vhhc-segmented__option:first-child { border-radius: var(--radius-control) 0 0 var(--radius-control); }
.vhhc-segmented__option:last-child { border-radius: 0 var(--radius-control) var(--radius-control) 0; }
.vhhc-segmented__option input { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; }
.vhhc-segmented__option:has(input:checked) .vhhc-segmented__check { visibility: visible; }
.vhhc-segmented__option:has(input:checked) { z-index: 1; background: var(--color-surface-soft); border-color: var(--color-primary); color: var(--color-primary); }
.vhhc-segmented__option:has(input:focus-visible) { z-index: 2; outline: 2px solid transparent; outline-offset: 2px; box-shadow: var(--shadow-focus); }

/* "Add details (optional)" — closed by default, opened server-side when a
   failed resubmit had a value inside it (page-request-quote.php). */
.vhhc-rfq-details { margin: var(--space-6) 0; padding-top: var(--space-4); border-top: 1px solid var(--border-subtle); }
.vhhc-rfq-details summary { cursor: pointer; min-height: 44px; display: flex; align-items: center; font-weight: var(--weight-semibold); }
.vhhc-rfq-details summary:focus-visible { outline: 2px solid transparent; outline-offset: 2px; box-shadow: var(--shadow-focus); border-radius: var(--radius-control); }
.vhhc-rfq-details__body { padding-top: var(--space-4); }

@media (prefers-reduced-motion: reduce) {
	.vhhc-segmented__option, .vhhc-rfq-line__remove { transition: none; }
}

/* ---------- RFQ phương án C (29/09/2026): 3 nhóm đánh số, khung tóm tắt dính,
   thanh đáy mobile. Khung + thanh chỉ hiện khi JS bật (thuộc tính hidden). ---------- */
.vhhc-rfq-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-10); align-items: start; }
.vhhc-rfq-step { border-top: 1px solid var(--border-subtle); margin-top: var(--space-8); padding-top: var(--space-6); }
.vhhc-rfq-step--first { margin-top: var(--space-4); }
.vhhc-rfq-step__title { display: flex; align-items: center; gap: var(--space-3); margin: 0 0 var(--space-4); }
.vhhc-rfq-step__num {
	flex: none; width: 26px; height: 26px; border-radius: var(--radius-pill);
	display: inline-flex; align-items: center; justify-content: center;
	background: var(--color-primary); color: var(--text-inverse);
	font: var(--type-caption); font-weight: var(--weight-semibold); font-variant-numeric: tabular-nums;
}
.vhhc-rfq-submit { margin-top: var(--space-2); }
@media (max-width: 599px) {
	.vhhc-rfq-delivery-row { grid-template-columns: 1fr; gap: 0; }
}
.vhhc-rfq-summary { display: none; }
/* 29/09/2026: 1000 → 1100 — ở 1000–1023 cột form chỉ ~500px (<520). */
@media (min-width: 1100px) {
	.vhhc-rfq-layout { grid-template-columns: minmax(0, 1fr) 360px; }
	.vhhc-rfq-side { position: sticky; top: 96px; max-height: calc(100dvh - 96px - var(--space-6)); display: flex; flex-direction: column; min-height: 0; }
	.vhhc-rfq-summary:not([hidden]) {
		display: flex; flex-direction: column; min-height: 0; flex: 0 1 auto;
		margin-bottom: var(--space-6); padding: var(--space-6);
		background: var(--surface-card); border: 1px solid var(--border-subtle); border-radius: var(--radius-card);
	}
	.vhhc-rfq-side > .vhhc-contact-block { flex: none; margin-bottom: 0; }
}
.vhhc-rfq-summary__body { min-height: 0; overflow-y: auto; margin-bottom: var(--space-4); }
.vhhc-rfq-summary__empty { margin: 0; color: var(--text-secondary); }
.vhhc-rfq-summary__list { list-style: none; margin: 0; padding: 0; }
.vhhc-rfq-summary__list li, .vhhc-rfq-summary__meta > div {
	display: flex; justify-content: space-between; gap: var(--space-3);
	padding: var(--space-2) 0; border-bottom: 1px solid var(--border-subtle);
	font: var(--type-caption);
}
.vhhc-rfq-summary__list li span:first-child { font-weight: var(--weight-semibold); color: var(--text-primary); }
.vhhc-rfq-summary__list li span:last-child { font-variant-numeric: tabular-nums; white-space: nowrap; }
.vhhc-rfq-summary__meta { margin: var(--space-3) 0 0; }
.vhhc-rfq-summary__meta dt { color: var(--text-secondary); }
.vhhc-rfq-summary__meta dd { margin: 0; text-align: right; overflow-wrap: anywhere; color: var(--text-primary); }

.vhhc-rfq-bar {
	position: fixed; left: 0; right: 0; bottom: 0; z-index: 30;
	display: flex; align-items: center; justify-content: space-between; gap: var(--space-3);
	padding: var(--space-3) var(--space-4); padding-bottom: calc(var(--space-3) + env(safe-area-inset-bottom));
	background: var(--color-primary); color: var(--text-inverse);
}
.vhhc-rfq-bar[hidden] { display: none; }
.vhhc-rfq-bar__text { display: flex; flex-direction: column; min-width: 0; }
.vhhc-rfq-bar__text strong { font-weight: var(--weight-bold); font-variant-numeric: tabular-nums; }
.vhhc-rfq-bar__text span { font: var(--type-caption); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.vhhc-rfq-bar__text span:empty { display: none; }
.vhhc-rfq-bar__btn {
	flex: none; min-height: 44px; padding: 0 var(--space-5); border: 0; border-radius: var(--radius-control);
	background: var(--text-inverse); color: var(--color-primary);
	font: var(--type-body); font-weight: var(--weight-semibold); cursor: pointer;
}
.vhhc-rfq-bar__btn:focus-visible { outline: 2px solid transparent; box-shadow: 0 0 0 3px var(--color-primary), 0 0 0 5px var(--text-inverse); }
body.has-rfq-bar { padding-bottom: var(--rfq-bar-h, 0); }
@media (min-width: 1100px) {
	.vhhc-rfq-bar { display: none; }
}

/* ---------- RFQ status lookup page (Đợt B, 23/09/2026) ---------- */
.vhhc-rfq-status-badge {
	display: inline-flex;
	align-items: center;
	padding: var(--space-1) var(--space-3);
	border-radius: var(--radius-pill, 999px);
	border: 1px solid transparent;
	background: var(--color-surface-soft);
	color: var(--color-primary);
	font: var(--type-caption);
	font-weight: var(--weight-semibold);
}
/* Dry Gold "Premium" badge — chỉ dùng cho trạng thái Quoted/Đã báo giá (tín
   hiệu "đã xác minh/đã có giá"), 23/09/2026. Không dùng cho các trạng thái
   khác — badge trung tính (Mint Air) ở trên vẫn là mặc định. */
.vhhc-rfq-status-badge--premium {
	background: rgba(216, 197, 111, .18);
	border-color: var(--color-accent-premium);
	color: var(--color-primary);
}
.vhhc-rfq-history { list-style: none; margin: 0; padding: 0; }
.vhhc-rfq-history li { padding: var(--space-2) 0; border-bottom: 1px solid var(--border-subtle); }
.vhhc-rfq-action { max-width: 560px; }
.vhhc-rfq-action__en { display: block; font: var(--type-caption); color: var(--text-secondary); font-weight: var(--weight-regular, 400); }
.vhhc-rfq-action .vhhc-eyebrow { display: block; }
.vhhc-rfq-action__row { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: var(--space-3); padding: var(--space-2) 0; }
.vhhc-rfq-action .vhhc-rfq-status-badge { justify-self: end; white-space: nowrap; }
.vhhc-rfq-action .vhhc-rfq-status-badge small { font: inherit; margin-left: .25em; }
.vhhc-rfq-action .vhhc-btn { margin-top: var(--space-2); }
.vhhc-rfq-lookup-form { display: flex; flex-direction: column; gap: var(--space-4); max-width: 480px; }

/* Chữ chỉ dành cho trình đọc màn hình (caption bảng, nhãn cột rỗng). */
.screen-reader-text { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
/* Caption ẩn: absolute làm hàng bảng đầu tiên lệch 1px — giữ trong luồng, cao 0. */
caption.screen-reader-text { position: static; width: auto; height: 0; margin: 0; padding: 0; clip: auto; white-space: normal; } /* normal: a long caption (VI Latex) must not widen the table */

/* 14/10/2026: công tắc ngôn ngữ trong menu mobile — thắng quy tắc `.vhhc-navbar__links a` (chữ 18px, cao 52px). Từ 1200px công tắc nằm cạnh nút báo giá, ô menu ẩn. */
.vhhc-navbar__links .vhhc-lang-switcher a { display: inline-flex; min-height: 0; font-size: 12px; font-weight: var(--weight-medium); padding: 0 var(--space-3); border-bottom: 0; color: var(--color-muted); }
.vhhc-navbar__links .vhhc-lang-switcher a:hover { color: var(--color-primary); }
.vhhc-navbar__links .vhhc-lang-switcher a[aria-current="true"] { color: var(--color-primary); font-weight: var(--weight-semibold); }
@media (min-width: 1200px) { .vhhc-navbar__links-foot { display: none; } }
