/* Màu/kích thước đọc qua biến --dlb-mm-* — PHP/JS đẩy giá trị thật vào inline style
   ngay trên khối .dlb-main-menu theo cấu hình chọn trong Inspector Controls (xem
   includes/modules/dlb-main-menu-rz84.php). Giá trị sau dấu phẩy trong var() chỉ là
   fallback khi chưa có giá trị nào được set.

   Di động dùng class ".dlb-main-menu--is-mobile" do JS TỰ THÊM (so sánh window.innerWidth
   với data-breakpoint, xem assets/js/dlb-main-menu-rz84-frontend.js) — KHÔNG dùng
   @media query tĩnh, vì "Điểm chuyển di động" (mobileBreakpoint) là 1 thuộc tính do
   người dùng tự chọn mỗi block, còn @media query CSS không đọc được biến CSS tuỳ chỉnh
   trong điều kiện của nó. Đánh đổi: nếu JS chưa kịp chạy/lỗi, khối hiện tạm dạng desktop
   (không vỡ hẳn) — chấp nhận được, và nút "xem trước theo thiết bị" trong trình soạn
   thảo Gutenberg không kích hoạt được layout di động (không có JS này trong editor). */

/* "Chiều rộng khối" — checklist bắt buộc cho MỌI block (xem
   WP_PLUGIN_DLB::content_width_attrs()) — cùng 1 tên class/biến CSS lặp lại y hệt ở
   MỌI file CSS của plugin, không dùng chung 1 file CSS được ("1 module = 1 file"). */
.dlb-width-limited {
	max-width: var(--dlb-max-width, 1200px);
	margin-left: auto;
	margin-right: auto;
}

/* KHONG dat overflow-x:hidden o day (tung co, da go 2026-08-23): browser tu dong ep
   overflow-y thanh "auto" (khong con la "visible" that) bat cu khi nao overflow-x khac
   "visible" tren cung 1 phan tu - khong the "chi an rieng truc X". .dlb-main-menu__submenu
   la position:absolute, tran ra khoi khung nav theo truc Y de xoe xuong - bi chinh nav cha
   (ancestor gan nhat co overflow!=visible) clip vo hinh du DOM/aria-expanded van dung,
   submenu opacity:1 nhung khong ai thay duoc gi tren man hinh (bug thuc te 2026-08-23:
   bam mo menu cap 2 khong co gi hien ra). max-width:100% + flex-wrap:nowrap + JS tu chuyen
   sang che do --is-mobile truoc khi kip tran ngang da du chan lo hong vien khung ma
   overflow-x:hidden dinh phong ngua (xem bai hoc "viewport-poisoning" 2026-08-19 trong
   forMe.md). */
.dlb-main-menu {
	position: relative;
	display: flex;
	align-items: center;
	flex-wrap: nowrap;
	gap: 24px;
	box-shadow: var(--dlb-mm-shadow, none);
	max-width: 100%;
	min-height: var(--dlb-mm-header-height, 0px);
}
.dlb-main-menu--vertical {
	flex-direction: column;
	align-items: stretch;
}
.dlb-main-menu__notice {
	color: #666666;
	font-style: italic;
}

/* --- UI picker logo trong sidebar Inspector Controls (chỉ hiện trong trình soạn thảo,
   xem panel "Logo" ở dlb-main-menu-rz84.js) — KHÔNG liên quan tới .dlb-main-menu__logo
   thật hiện ở canvas/trang thật bên dưới. --- */
.dlb-mm-logo-picker {
	display: flex;
	align-items: center;
	gap: 8px;
	margin-bottom: 8px;
}
.dlb-mm-logo-picker__preview {
	height: 32px;
	width: auto;
	max-width: 80px;
}

/* --- Logo + tên shop (thêm 2026-08-16) — LUÔN đứng đầu trong DOM, xem ghi chú thứ tự
   "order" ở phần di động bên dưới. --- */
.dlb-main-menu__brand {
	display: inline-flex;
	align-items: center;
	gap: var(--dlb-mm-brand-gap, 12px);
	text-decoration: none;
	flex-shrink: 0;
}
/* Bỏ gạch chân khi rê chuột/chạm/bấm vào logo (thêm 2026-09-03, theo yêu cầu người
   dùng "Khi bấm vào logo hoặc menu thì hiện gạch dưới hãy bỏ hiệu ứng này đi").
   GỐC RỄ: style chung toàn site của theme.json tự thêm gạch chân khi ":hover" cho
   MỌI thẻ <a> (selector thật sự là ":root :where(a:where(:not(.wp-element-button))
   :hover)"), dùng ":where()" nên độ đặc hiệu của phần bên trong = 0, chỉ còn tính
   ":root" (1 lớp) — TRÙNG đúng độ đặc hiệu với ".dlb-main-menu__brand{text-decoration:
   none}" (cũng 1 lớp) → hoà, rule nạp SAU (style toàn site của theme.json) thắng, gạch
   chân tự hiện ra khi hover/chạm dù trông như "không có rule nào" đổi được. Xác nhận
   qua "document.styleSheets" khi mô phỏng hover thật bằng Playwright. Sửa bằng cách
   thêm hẳn ":hover/:focus/:active" (độ đặc hiệu 2 lớp, tự thắng) thay vì "!important"
   — sạch hơn, không cần ép cứng. */
.dlb-main-menu__brand:hover,
.dlb-main-menu__brand:focus,
.dlb-main-menu__brand:active {
	text-decoration: none;
}
/* Chọn theo ".dlb-main-menu__brand .dlb-main-menu__logo" (2 class) thay vì 1 class đơn —
   trên trang Giỏ hàng/Thanh toán, <body> có thêm class "woocommerce"/"woocommerce-page" nên
   rule reset ảnh toàn cục của chính WooCommerce (".woocommerce img { height:auto }", đặc
   hiệu 1 class + 1 thẻ) đè mất height ở đây nếu chỉ dùng 1 class — logo phồng về kích thước
   gốc của file ảnh (vd 512×512px) và đẩy tràn cả thanh menu. */
.dlb-main-menu__brand .dlb-main-menu__logo {
	display: block;
	height: var(--dlb-mm-logo-height, 40px);
	width: auto;
	box-sizing: border-box;
	border-radius: var(--dlb-mm-logo-radius, 0px);
	background: var(--dlb-mm-logo-bg, transparent);
	padding: var(--dlb-mm-logo-padding, 0px);
	border: var(--dlb-mm-logo-border-thickness, 0px) solid var(--dlb-mm-logo-border-tint, #e5e5e5);
	transition: transform 0.2s ease, opacity 0.2s ease;
}
/* Hover ở CẢ brand link (ảnh + tên) để vùng bấm rộng hơn, không chỉ đúng khung ảnh nhỏ. */
.dlb-main-menu--logo-hover-scale .dlb-main-menu__brand:hover .dlb-main-menu__logo {
	transform: scale(1.08);
}
.dlb-main-menu--logo-hover-rotate .dlb-main-menu__brand:hover .dlb-main-menu__logo {
	transform: rotate(-6deg);
}
.dlb-main-menu--logo-hover-fade .dlb-main-menu__brand:hover .dlb-main-menu__logo {
	opacity: 0.7;
}
.dlb-main-menu__shop-name {
	white-space: nowrap;
	font-size: clamp(13px, 5.33vw, var(--dlb-mm-shopname-size, 20px));
	font-weight: var(--dlb-mm-shopname-weight, 700);
	font-family: var(--dlb-mm-shopname-family, inherit);
	color: var(--dlb-mm-shopname-color, #111111);
}

/* --- Danh sách cấp 1 --- */
.dlb-main-menu__list {
	display: flex;
	list-style: none;
	margin: 0;
	padding: 0;
	flex: 1 1 auto;
	min-width: 0;
	gap: var(--dlb-mm-gap, 28px);
	justify-content: var(--dlb-mm-justify, flex-start);
	/* box-sizing:border-box BAT BUOC (sua 2026-09-01, CUNG PATTERN loi da ghi o
	   .dlb-main-menu__cart-badge phia tren): mac dinh content-box khong sao khi panel nay
	   khong co padding (desktop) — nhung panel di dong (".dlb-main-menu--is-mobile
	   .dlb-main-menu__list") dat "padding: 104px 24px 24px" + "height: 100vh/100dvh" cung
	   luc. Voi content-box, padding bi CONG THEM ra ngoai height khai bao — do that: panel
	   cao 664px (100dvh) + 128px padding = 792px, TRAN qua day man hinh 128px. border-box
	   lam padding tinh vao trong ngan sach height co san — panel dung khop 100dvh, khong
	   con phan man hinh nao lo noi dung trang phia sau qua lop overlay. */
	box-sizing: border-box;
}
.dlb-main-menu--vertical .dlb-main-menu__list {
	flex-direction: column;
	align-items: flex-start;
}

/* --- Giỏ hàng (thêm 2026-08-16, cần WooCommerce) --- */
.dlb-main-menu__cart {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	margin-left: 14px;
	z-index: 2;
	color: var(--dlb-mm-cart-icon-color, #111111);
}
.dlb-main-menu__cart svg {
	width: var(--dlb-mm-cart-icon-size, 22px);
	height: var(--dlb-mm-cart-icon-size, 22px);
}
.dlb-main-menu__cart-badge {
	position: absolute;
	top: var(--dlb-mm-cart-badge-top, -6px);
	right: var(--dlb-mm-cart-badge-right, -9px);
	/* box-sizing:border-box BAT BUOC (sua 2026-08-26): mac dinh content-box thi
	   "padding: 0 4px" bi CONG THEM ra ngoai min-width/height thay vi nam gon
	   BEN TRONG - do that: badge 20x20 nhung padding lam rong thanh 28x20 (meo
	   thanh oval, khong con la hinh tron du border-radius:999px). border-box lam
	   padding tinh vao trong ngan sach width/height co san: so 1 chu so vua du gon
	   trong khung vuong (tron that), 2+ chu so moi tu no rong ra thanh vien thuoc
	   (dung UX, khong bi cat chu). */
	box-sizing: border-box;
	min-width: var(--dlb-mm-cart-badge-size, 16px);
	height: var(--dlb-mm-cart-badge-size, 16px);
	padding: 0 4px;
	border-radius: 999px;
	background: var(--dlb-mm-cart-badge-bg, #ef4444);
	color: var(--dlb-mm-cart-badge-text, #ffffff);
	/* font-size DUNG CHUNG bien voi height/line-height (khong tach rieng) de so
	   luon can giua doc dung tam bat ke doi co badge (2026-08-26). */
	font-size: var(--dlb-mm-cart-badge-font-size, 10px);
	font-weight: 700;
	line-height: var(--dlb-mm-cart-badge-size, 16px);
	text-align: center;
}
.dlb-main-menu__cart-badge--hidden {
	display: none;
}
/* JS frontend thêm/bỏ class "is-bump" mỗi khi wc-cart-fragments.js cập nhật số lượng
   thật (thêm giỏ hàng AJAX, kể cả từ dlb-item-grid-di90) — xem
   assets/js/dlb-main-menu-rz84-frontend.js. */
.dlb-main-menu--cart-anim-bounce .dlb-main-menu__cart-badge.is-bump {
	animation: dlb-mm-cart-bounce 0.4s ease;
}
.dlb-main-menu--cart-anim-pulse .dlb-main-menu__cart-badge.is-bump {
	animation: dlb-mm-cart-pulse 0.5s ease;
}
@keyframes dlb-mm-cart-bounce {
	0%, 100% { transform: scale(1); }
	40% { transform: scale(1.4); }
}
@keyframes dlb-mm-cart-pulse {
	0% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.25); }
	100% { box-shadow: 0 0 0 7px rgba(0, 0, 0, 0); }
}

/* min-width:0 + text-overflow BAT BUOC (them 2026-08-26): moi <li> flex mac dinh
   min-width:auto (khong phai 0), khien no KHONG THE co nho hon do rong noi dung
   that su du .dlb-main-menu__list cha da co san min-width:0. Khi tong 3 muc menu
   khong du cho (o do rong hep hon noi dung can), muc DAU/CUOI se TRAN ra ngoai
   khung UL de len logo/icon gio hang ben canh - bug that phat hien 2026-08-26
   (nguoi dung bao "chong ten shop va menu khi keo co man hinh"). Nguyen nhan goc
   thuc su la mobileBreakpoint site nay dat qua thap (690px) so voi kich thuoc
   logo/chu da tuy chinh lon hon mac dinh nhieu - da nang len 1024px (xem
   dlb_my_code Logseq de biet chi tiet do ngat). Layer nay chi la PHONG NGUA them
   (khong con kich hoat trong dieu kien binh thuong sau khi sua breakpoint), giup
   chu tu dong rut gon "..." thay vi de len nhau neu lo roi vao tinh huong tuong
   tu lan nua (VD ai do sau nay chinh breakpoint qua thap tro lai). */
.dlb-main-menu__item {
	position: relative;
	min-width: 0;
}
.dlb-main-menu__item-row {
	display: inline-flex;
	align-items: center;
	gap: 2px;
}

/* --- Dấu ngăn cách GIỮA các mục cấp 1 (thêm 2026-08-16 vòng 2) — CHỈ áp dụng bố cục
   ngang KHÔNG phải di động (":not(.dlb-main-menu--is-mobile)"): trên di động, panel luôn
   xếp dọc trong khung hẹp nên dấu ngăn cách kiểu "giữa 2 mục cùng hàng" không còn hợp lý
   — dùng "::before" định vị NGAY GIỮA khoảng "gap" của mục đó với mục liền trước. --- */
.dlb-main-menu--horizontal:not(.dlb-main-menu--is-mobile).dlb-main-menu--separator-line .dlb-main-menu__item:not(:first-child)::before,
.dlb-main-menu--horizontal:not(.dlb-main-menu--is-mobile).dlb-main-menu--separator-dot .dlb-main-menu__item:not(:first-child)::before,
.dlb-main-menu--horizontal:not(.dlb-main-menu--is-mobile).dlb-main-menu--separator-slash .dlb-main-menu__item:not(:first-child)::before {
	position: absolute;
	left: calc(var(--dlb-mm-gap, 28px) / -2);
	top: 50%;
	transform: translate(-50%, -50%);
	color: var(--dlb-mm-separator-color, rgba(0, 0, 0, 0.15));
	pointer-events: none;
}
.dlb-main-menu--horizontal:not(.dlb-main-menu--is-mobile).dlb-main-menu--separator-line .dlb-main-menu__item:not(:first-child)::before {
	content: '';
	width: 1px;
	height: 14px;
	background: var(--dlb-mm-separator-color, rgba(0, 0, 0, 0.15));
}
.dlb-main-menu--horizontal:not(.dlb-main-menu--is-mobile).dlb-main-menu--separator-dot .dlb-main-menu__item:not(:first-child)::before {
	content: '\2022';
	font-size: 12px;
}
.dlb-main-menu--horizontal:not(.dlb-main-menu--is-mobile).dlb-main-menu--separator-slash .dlb-main-menu__item:not(:first-child)::before {
	content: '/';
	font-size: 14px;
}

.dlb-main-menu__link {
	display: inline-block;
	position: relative;
	text-decoration: none;
	white-space: nowrap;
	color: var(--dlb-mm-text-color, #111111);
	font-size: clamp(11px, 4.0vw, var(--dlb-mm-font-size, 15px));
	font-family: var(--dlb-mm-font-family, inherit);
	font-weight: var(--dlb-mm-font-weight, 500);
	letter-spacing: var(--dlb-mm-letter-spacing, 0px);
	padding: 10px 0;
	transition: color 0.2s ease, transform 0.2s ease;
	max-width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
	vertical-align: bottom;
}
.dlb-main-menu--uppercase .dlb-main-menu__link {
	text-transform: uppercase;
}
/* Thêm 2026-09-01: mục cấp 1 CÓ mục con giờ render bằng <span role="button">
   thay vì <a href>, không tự có con trỏ tay của trình duyệt như link thật —
   thêm lại thủ công + bỏ outline focus mặc định xấu (đã có :focus-visible
   riêng ở dưới nếu cần, hiện dùng tạm outline nhẹ cho rõ khi bấm Tab). */
.dlb-main-menu__link--toggle {
	cursor: pointer;
}
.dlb-main-menu__link--toggle:focus-visible {
	outline: 2px solid var(--dlb-mm-hover-color, #2563eb);
	outline-offset: 2px;
}
.dlb-main-menu__link:hover {
	color: var(--dlb-mm-hover-color, #2563eb);
}
/* Bỏ gạch chân khi rê chuột/chạm/bấm vào mục menu — CÙNG GỐC RỄ với logo phía trên
   (xem giải thích chi tiết ở rule ".dlb-main-menu__brand:hover" đầu file), style
   toàn site của theme.json thắng ".dlb-main-menu__link{text-decoration:none}" đúng
   lúc hover/chạm do hoà độ đặc hiệu + nạp sau. */
.dlb-main-menu__link:hover,
.dlb-main-menu__link:focus,
.dlb-main-menu__link:active {
	text-decoration: none;
}
.dlb-main-menu__item.is-current > .dlb-main-menu__item-row .dlb-main-menu__link {
	color: var(--dlb-mm-active-color, #2563eb);
}

/* --- Mũi tên submenu --- */
.dlb-main-menu__caret {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 18px;
	height: 18px;
	padding: 0;
	border: none;
	background: transparent;
	color: var(--dlb-mm-text-color, #111111);
	cursor: pointer;
	transition: transform 0.2s ease;
}
.dlb-main-menu__caret svg {
	width: 13px;
	height: 13px;
}
.dlb-main-menu__item--has-children:hover > .dlb-main-menu__item-row .dlb-main-menu__caret,
.dlb-main-menu__item--has-children.is-caret-open > .dlb-main-menu__item-row .dlb-main-menu__caret {
	transform: rotate(180deg);
}

/* --- "Mục đang xem" — 3 kiểu chỉ báo, xem "Chỉ báo mục đang xem" trong Inspector Controls --- */
.dlb-main-menu--indicator-underline .dlb-main-menu__item.is-current > .dlb-main-menu__item-row .dlb-main-menu__link::after {
	content: '';
	position: absolute;
	left: 0;
	right: 0;
	bottom: 4px;
	height: 2px;
	background: var(--dlb-mm-active-color, #2563eb);
}
.dlb-main-menu--indicator-background .dlb-main-menu__item.is-current > .dlb-main-menu__item-row {
	background: var(--dlb-mm-active-color, #2563eb);
	border-radius: 6px;
	padding: 2px 10px;
}
.dlb-main-menu--indicator-background .dlb-main-menu__item.is-current > .dlb-main-menu__item-row .dlb-main-menu__link {
	color: var(--dlb-mm-indicator-text, #ffffff);
}
.dlb-main-menu--indicator-dot .dlb-main-menu__item.is-current > .dlb-main-menu__item-row .dlb-main-menu__link::after {
	content: '';
	position: absolute;
	left: 50%;
	bottom: 0;
	width: 5px;
	height: 5px;
	border-radius: 50%;
	background: var(--dlb-mm-active-color, #2563eb);
	transform: translateX(-50%);
}

/* --- Hiệu ứng khi hover (mọi mục, không chỉ mục đang xem) — "fade" (mặc định) chỉ cần
   transition color đã có sẵn ở trên, không cần rule riêng. --- */
.dlb-main-menu--hover-underline-grow .dlb-main-menu__link::before {
	content: '';
	position: absolute;
	left: 50%;
	bottom: 4px;
	width: 0;
	height: 2px;
	background: currentColor;
	transition: width 0.25s ease, left 0.25s ease;
}
.dlb-main-menu--hover-underline-grow .dlb-main-menu__link:hover::before {
	width: 100%;
	left: 0;
}
.dlb-main-menu--hover-lift .dlb-main-menu__link:hover {
	transform: translateY(-2px);
}
.dlb-main-menu--hover-scale .dlb-main-menu__link:hover {
	transform: scale(1.08);
}
.dlb-main-menu--hover-glow .dlb-main-menu__link:hover {
	text-shadow: 0 0 8px var(--dlb-mm-hover-color, #2563eb);
}
/* Pill nền TẠM THỜI khi hover (khác "background" của indicatorStyle — cái đó LUÔN hiện
   cho mục đang xem, cái này chỉ hiện lúc di chuột) — dùng "::before" định vị tuyệt đối
   + z-index âm để không đẩy layout các mục xung quanh (không dùng padding trực tiếp). */
.dlb-main-menu--hover-background .dlb-main-menu__item-row {
	position: relative;
}
.dlb-main-menu--hover-background .dlb-main-menu__item:hover > .dlb-main-menu__item-row::before {
	content: '';
	position: absolute;
	inset: -4px -10px;
	background: var(--dlb-mm-hover-color, #2563eb);
	border-radius: 6px;
	z-index: -1;
}
.dlb-main-menu--hover-background .dlb-main-menu__item:hover > .dlb-main-menu__item-row .dlb-main-menu__link,
.dlb-main-menu--hover-background .dlb-main-menu__item:hover > .dlb-main-menu__item-row .dlb-main-menu__caret {
	color: var(--dlb-mm-hover-text, #ffffff);
}

/* --- Submenu (dropdown desktop, dạng nổi tuyệt đối trên mục cha) --- */
.dlb-main-menu__submenu {
	list-style: none;
	margin: 0;
	padding: 8px 0;
	position: absolute;
	top: 100%;
	left: 0;
	min-width: var(--dlb-mm-submenu-width, 220px);
	background: var(--dlb-mm-submenu-bg, #ffffff);
	border-radius: var(--dlb-mm-submenu-radius, 8px);
	box-shadow: var(--dlb-mm-submenu-shadow, none);
	z-index: 999;
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
}
.dlb-main-menu--vertical .dlb-main-menu__submenu {
	top: 0;
	left: 100%;
}
/* Mở khi hover (desktop, CSS thuần) HOẶC khi JS thêm class "is-caret-open" (bấm mũi tên —
   cần cho bàn phím/touch, xem assets/js/dlb-main-menu-rz84-frontend.js). */
.dlb-main-menu__item--has-children:hover > .dlb-main-menu__submenu,
.dlb-main-menu__item--has-children.is-caret-open > .dlb-main-menu__submenu {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
}

.dlb-main-menu--submenu-anim-fade .dlb-main-menu__submenu {
	transition: opacity 0.2s ease, visibility 0.2s ease;
}
.dlb-main-menu--submenu-anim-slide-down .dlb-main-menu__submenu {
	transform: translateY(-8px);
	transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;
}
.dlb-main-menu--submenu-anim-slide-down .dlb-main-menu__item--has-children:hover > .dlb-main-menu__submenu,
.dlb-main-menu--submenu-anim-slide-down .dlb-main-menu__item--has-children.is-caret-open > .dlb-main-menu__submenu {
	transform: translateY(0);
}
.dlb-main-menu--submenu-anim-scale .dlb-main-menu__submenu {
	transform: scale(0.95);
	transform-origin: top left;
	transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;
}
.dlb-main-menu--submenu-anim-scale .dlb-main-menu__item--has-children:hover > .dlb-main-menu__submenu,
.dlb-main-menu--submenu-anim-scale .dlb-main-menu__item--has-children.is-caret-open > .dlb-main-menu__submenu {
	transform: scale(1);
}

/* Khoảng cách GIỮA các mục con (thêm 2026-08-16 vòng 2) — mặc định 0 = khít như trước. */
.dlb-main-menu__subitem:not(:last-child) {
	margin-bottom: var(--dlb-mm-subitem-gap, 0px);
}

.dlb-main-menu__sublink {
	display: block;
	padding: 9px 18px;
	color: var(--dlb-mm-submenu-text, #111111);
	text-decoration: none;
	font-size: calc(var(--dlb-mm-font-size, 15px) - 1px);
	white-space: nowrap;
	transition: background-color 0.15s ease, color 0.15s ease, padding-left 0.15s ease;
}
.dlb-main-menu__sublink:hover {
	color: var(--dlb-mm-submenu-hover, #2563eb);
}
/* Bỏ gạch chân khi rê chuột/chạm/bấm vào mục menu CẤP 2 (submenu) — CÙNG GỐC RỄ với
   logo/menu cấp 1/nút "Mua ngay" đã sửa (xem giải thích chi tiết ở rule
   ".dlb-main-menu__brand:hover" đầu file) — lúc đó CHỈ quét đúng 3 chỗ người dùng
   chỉ ra, BỎ SÓT hẳn class này (không cùng 1 lần quét toàn file) nên bug vẫn còn ở
   đây, người dùng bắt được qua ảnh chụp menu di động thật (mục "Giấy Vệ Sinh Cuộn").
   Nhân tiện quét lại TOÀN BỘ file lần này, sửa gộp luôn 3 chỗ <a> thật khác cũng
   dính y hệt lỗi trong khay giỏ hàng (xem các rule "__drawer-item-name"/
   "__drawer-empty-btn"/"__drawer-btn" phía dưới) để không phải quay lại vá tiếp
   từng chỗ một lần nữa. */
.dlb-main-menu__sublink:hover,
.dlb-main-menu__sublink:focus,
.dlb-main-menu__sublink:active {
	text-decoration: none;
}
/* "background" (mặc định) — dải màu nền khi hover, màu tự chọn riêng (submenuItemHoverBg)
   — "indent" — thụt chữ vào khi hover — "none" — chỉ đổi màu chữ như rule chung ở trên. */
.dlb-main-menu--subitem-hover-background .dlb-main-menu__sublink:hover {
	background: var(--dlb-mm-subitem-hover-bg, rgba(0, 0, 0, 0.05));
}
.dlb-main-menu--subitem-hover-indent .dlb-main-menu__sublink:hover {
	padding-left: 26px;
}
.dlb-main-menu__subitem.is-current .dlb-main-menu__sublink {
	color: var(--dlb-mm-submenu-hover, #2563eb);
	font-weight: 600;
}

/* --- Hamburger (ẨN mặc định — JS thêm class "--is-mobile" mới hiện, xem ghi chú đầu file) --- */
.dlb-main-menu__hamburger {
	display: none;
	flex-direction: column;
	justify-content: center;
	gap: 5px;
	width: 32px;
	height: 32px;
	padding: 0;
	border: none;
	background: transparent;
	cursor: pointer;
	position: relative;
	z-index: 1000;
}
.dlb-main-menu--is-mobile .dlb-main-menu__hamburger {
	display: flex;
}
/* Thanh trên cùng khi di động chỉ còn brand + giỏ hàng + hamburger hiện ra (list đã tự
   tách khỏi dòng chảy bình thường qua position:fixed ở dưới) — dùng "order" xếp lại
   ĐÚNG thứ tự người dùng quen thấy (brand trái, giỏ hàng+hamburger phải) mà KHÔNG cần
   đổi thứ tự thật trong DOM (đổi DOM sẽ ảnh hưởng theo dõi/gắn sự kiện JS). */
.dlb-main-menu--is-mobile .dlb-main-menu__brand {
	order: 1;
}
.dlb-main-menu--is-mobile .dlb-main-menu__cart {
	order: 2;
	/* Day gio hang (+ hamburger dung sau no, cung "order" 3) sat ra le PHAI -- thieu dong
	   nay thi 3 phan tu (brand/cart/hamburger) chi dong gon o dau hang (ke thua
	   justify-content:flex-start mac dinh cua khoi goc), de trong khoang lon vo ich ben
	   phai vi ".dlb-main-menu__list" (von lap day khoang giua tren desktop) da tach khoi
	   dong chay qua position:fixed. Bao cao nguoi dung 2026-08-19 kem anh chup, dung y
	   thiet ke von ghi san o comment ngay tren nhung chua co CSS thuc hien. */
	margin-left: auto;
}
.dlb-main-menu--is-mobile .dlb-main-menu__hamburger {
	order: 3;
}
/* Thanh trên cùng di động LUÔN là 1 hàng ngang (brand/giỏ hàng/hamburger cạnh nhau), bất
   kể "Hướng menu" desktop đang chọn ngang hay dọc — "dọc" (sidebar) chỉ có ý nghĩa ở
   desktop, trên di động menu nào cũng thu gọn về hamburger + panel giống nhau. Cùng độ
   đặc hiệu 1 class với rule ".dlb-main-menu--vertical" ở trên nhưng đứng SAU trong file
   nên thắng theo thứ tự nguồn — không cần !important. */
.dlb-main-menu--is-mobile {
	flex-direction: row;
	align-items: center;
}
/* An toàn cho màn hình máy tính bảng và màn hình vừa (<= 1280px):
   Ngăn chặn việc padding ngang quá lớn (VD 300px mỗi bên trong cài đặt khối) làm ép nghẽn
   thanh menu, khiến các mục menu và icon giỏ hàng bị đè chồng lên nhau khi co nhỏ cửa sổ. */
@media (max-width: 1280px) {
	.dlb-main-menu:not(.dlb-main-menu--is-mobile) {
		padding-left: clamp(16px, 3.5vw, 40px) !important;
		padding-right: clamp(16px, 3.5vw, 40px) !important;
	}
}

.dlb-main-menu--is-mobile {
	padding-left: 16px !important;
	padding-right: 16px !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
	/* Lỗi thật phát hiện 2026-08-19: badge số lượng giỏ hàng (.dlb-main-menu__cart-badge)
	   cố ý lồi ra ngoài góc icon bằng "top:-6px" (kiểu chấm thông báo tiêu chuẩn) — trên
	   trang chưa từng đặt padding-top riêng (padding-top:0px đo được thật), icon giỏ hàng
	   nằm sát y=0 nên phần lồi ra của badge bị THANH VIEWPORT của trình duyệt cắt mất
	   (không phải overflow của phần tử nào, chỉ đơn giản không có gì render được phía trên
	   y=0). Ép tối thiểu 1 khoảng đệm trên đủ để badge không còn lồi ra ngoài viewport. */
	padding-top: 8px !important;
	/* Lỗi thật phát hiện 2026-09-01 (người dùng gửi ảnh chụp thật, khoanh vùng
	   header "trống" bất thường): "min-height: var(--dlb-mm-header-height)" ở rule
	   gốc .dlb-main-menu lấy NGUYÊN giá trị đặt cho desktop (115px, đủ chỗ cho
	   logo to + menu ngang) — di động không có bản riêng nên vẫn ép tối thiểu
	   115px dù nội dung thật (logo 44px + icon nhỏ) chỉ cần khoảng 60px, thừa
	   khoảng trắng trên/dưới. Trả về auto để cao đúng bằng nội dung thật. */
	min-height: auto !important;
}
/* Cùng lý do ở trên: logoHeight/shopNameFontSize/brandGap cũng là px THUẦN chọn cho
   desktop (VD logo 100px + tên 33px + gap 40px có thể chiếm gần hết 1 màn hình điện
   thoại), không có bản riêng cho di động — giới hạn lại kích thước brand khi thu gọn để
   luôn còn đủ chỗ cho giỏ hàng + hamburger. Không cần !important — 2 class
   (".dlb-main-menu--is-mobile .dlb-main-menu__logo") đặc hiệu hơn rule gốc 1 class, tự
   thắng qua cascade bình thường; "max-height" cũng tự giới hạn "height" gốc mà không cần
   ép buộc gì thêm. */
.dlb-main-menu--is-mobile .dlb-main-menu__logo {
	max-height: 44px;
}
/* Số lượng giỏ hàng (badge tròn đỏ trên icon) — thêm 2026-09-01 theo yêu cầu
   người dùng "chỉnh lại số hàng trên giỏ hàng đang mobile nhỏ lại": cùng lý do
   logo/tên shop ở trên, "--dlb-mm-cart-badge-size"/"-font-size" là 1 giá trị
   PX THUẦN dùng chung mọi kích thước màn hình (đang đặt 20px/15px cho desktop),
   không có bản riêng di động — badge trông to bất cân xứng cạnh icon giỏ hàng
   đã thu nhỏ. Giảm riêng mobile, đủ đặc hiệu hơn rule gốc 1 class nên tự thắng
   qua cascade, không cần !important. */
.dlb-main-menu--is-mobile .dlb-main-menu__cart-badge {
	min-width: 15px;
	height: 15px;
	line-height: 15px;
	font-size: 9px;
}
.dlb-main-menu--is-mobile .dlb-main-menu__shop-name {
	font-size: 16px;
}
.dlb-main-menu--is-mobile .dlb-main-menu__brand {
	gap: 8px;
}
/* Logo lon hon (44px, tang tu 32px) + giỏ hang/hamburger nho gon lai theo yeu cau nguoi
   dung "logo lon hon giỏ hang va dau menu nho hon" (2026-08-19) -- can bang lai ty le,
   logo la thuong hieu nen la diem nhan chinh, 2 icon chuc nang (gio hang/menu) chi can
   du nho de nhan dung, khong can to bang logo. */
.dlb-main-menu--is-mobile .dlb-main-menu__cart svg {
	width: 18px;
	height: 18px;
}
.dlb-main-menu--is-mobile .dlb-main-menu__hamburger {
	width: 22px;
	height: 22px;
	gap: 4px;
}
.dlb-main-menu__hamburger-line {
	display: block;
	width: 100%;
	height: 2px;
	background: var(--dlb-mm-hamburger-color, #006d4c);
	transition: transform 0.25s ease, opacity 0.25s ease;
}
.dlb-main-menu.is-menu-open .dlb-main-menu__hamburger-line:nth-child(1) {
	transform: translateY(7px) rotate(45deg);
}
.dlb-main-menu.is-menu-open .dlb-main-menu__hamburger-line:nth-child(2) {
	opacity: 0;
}
.dlb-main-menu.is-menu-open .dlb-main-menu__hamburger-line:nth-child(3) {
	transform: translateY(-7px) rotate(-45deg);
}

/* --- Lớp phủ tối phía sau panel di động --- */
.dlb-main-menu__overlay {
	display: none;
	position: fixed;
	inset: 0;
	background: var(--dlb-mm-overlay-color, rgba(0, 0, 0, 0.5));
	z-index: 997;
	opacity: 0;
	transition: opacity 0.3s ease;
	pointer-events: none;
}
.dlb-main-menu--is-mobile.is-menu-open .dlb-main-menu__overlay {
	display: block;
	opacity: 1;
	pointer-events: auto;
}

/* --- Panel di động (thay hẳn .dlb-main-menu__list từ hàng ngang sang panel trượt) --- */
.dlb-main-menu--is-mobile .dlb-main-menu__list {
	position: fixed;
	top: 0;
	right: 0;
	left: auto;
	height: 100vh;
	width: min(320px, 85vw);
	background: var(--dlb-mm-mobile-bg, #ffffff);
	flex-direction: column;
	align-items: flex-start;
	/* LỖI THẬT phát hiện 2026-08-19 (báo cáo người dùng qua ảnh chụp: panel mở ra trống
	   trơn, các mục menu bị dồn xuống sát đáy, để lại khoảng trắng lớn phía trên): panel
	   này KẾ THỪA "justify-content: var(--dlb-mm-justify, flex-start)" từ rule gốc
	   ".dlb-main-menu__list" (dòng ~122) — giá trị đó do người dùng tự chọn "Canh phải"
	   cho hàng menu NGANG ở desktop (đo được thật "safe flex-end" trên site này qua
	   Inspector Controls). Với layout NGANG (desktop), "flex-end" nghĩa là "dồn sang bên
	   PHẢI" (đúng ý muốn). Nhưng rule mobile bên dưới đổi "flex-direction" sang "column"
	   MÀ KHÔNG đặt lại "justify-content" — với layout CỘT, CÙNG GIÁ TRỊ "flex-end" đó lại
	   nghĩa là "dồn xuống ĐÁY" (trục chính đổi từ ngang sang dọc), đẩy toàn bộ mục menu
	   xuống gần cuối panel 100vh, để lại khoảng trắng khổng lồ phía trên — không phải lỗi
	   hiển thị gì bí ẩn, chỉ đơn giản là quên đặt lại "justify-content" khi đổi hướng flex.
	   Ép cứng "flex-start" ở đây — panel di động LUÔN canh đầu, không phụ thuộc bất kỳ lựa
	   chọn "Canh menu" nào đã chọn cho riêng layout ngang desktop. */
	justify-content: flex-start;
	/* Padding-top tang tu 72px len 104px theo yeu cau nguoi dung "doi menu xuong duoi chut,
	   cach dau dong X chut nua" (2026-08-19) -- them khoang tho cho ro rang giua nut dong
	   (dung o thanh header phia tren, khong nam trong panel nay) va muc menu dau tien. */
	padding: 104px 24px 24px;
	gap: 2px;
	overflow-y: auto;
	z-index: 999;
	transition: transform 0.3s ease, opacity 0.3s ease;
}
/* Logo trong panel di động (thêm 2026-09-01, "trượt ngang như giỏ hàng... và có logo")
   — ẩn hẳn mặc định (chỉ tồn tại vì lý do kỹ thuật: <li> cần đứng NGOÀI mọi điều kiện
   ẩn/hiện của desktop để không lẫn vào hàng menu ngang) — CHỈ hiện đúng lúc panel di
   động đang dùng, viền dưới tách biệt rõ với các mục menu — cùng tinh thần thanh
   header của khay giỏ hàng (".dlb-main-menu__drawer-header", border-bottom tương tự). */
.dlb-main-menu__mobile-logo-item {
	display: none;
}
.dlb-main-menu--is-mobile .dlb-main-menu__mobile-logo-item {
	display: flex;
	width: 100%;
	padding-bottom: 20px;
	margin-bottom: 12px;
	border-bottom: 1px solid var(--dlb-mm-drawer-item-border, #eeeeee);
}
.dlb-main-menu--is-mobile .dlb-main-menu__mobile-logo-item .dlb-main-menu__brand {
	/* Logo trong panel to hơn 1 chút so với logo thu nhỏ trên thanh header (dễ nhận diện
	   thương hiệu hơn khi đây là điểm nhấn đầu tiên của panel, không phải chen chúc cạnh
	   giỏ hàng/hamburger như ở thanh header). */
	--dlb-mm-logo-height: 44px;
}

/* Thanh tìm kiếm trong panel di động (thêm 2026-09-01, "thêm thanh tìm kiếm trên cùng
   của menu mobile") — cùng cách ẩn/hiện với mục logo ở trên (ẩn hẳn mặc định, chỉ hiện
   khi panel di động đang dùng). Dáng viên thuốc (pill) bo tròn, khớp đúng ngôn ngữ
   thiết kế "chip"/"pill" đã dùng xuyên suốt site (chip lọc danh mục, nhãn tính năng...). */
.dlb-main-menu__mobile-search-item {
	display: none;
}
.dlb-main-menu--is-mobile .dlb-main-menu__mobile-search-item {
	display: block;
	width: 100%;
	margin-bottom: 16px;
}
.dlb-main-menu__mobile-search-form {
	display: flex;
	align-items: center;
	width: 100%;
	background: #f3f5f4;
	border: 1px solid var(--dlb-mm-drawer-item-border, #eeeeee);
	border-radius: 999px;
	padding: 4px 4px 4px 16px;
	transition: border-color 0.2s ease;
}
.dlb-main-menu__mobile-search-form:focus-within {
	border-color: #006d4c;
}
.dlb-main-menu__mobile-search-input {
	flex: 1 1 auto;
	min-width: 0;
	border: none;
	background: transparent;
	outline: none;
	font-size: 14px;
	color: #111111;
	padding: 8px 0;
}
.dlb-main-menu__mobile-search-input::placeholder {
	color: #888888;
}
.dlb-main-menu__mobile-search-submit {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	width: 36px;
	height: 36px;
	border: none;
	border-radius: 50%;
	background: #006d4c;
	color: #ffffff;
	cursor: pointer;
	transition: transform 0.15s ease;
}
.dlb-main-menu__mobile-search-submit:hover {
	transform: scale(1.06);
}
.dlb-main-menu__mobile-search-submit svg {
	width: 16px;
	height: 16px;
}

.dlb-main-menu--is-mobile .dlb-main-menu__item,
.dlb-main-menu--is-mobile .dlb-main-menu__item-row {
	width: 100%;
}
.dlb-main-menu--is-mobile .dlb-main-menu__item-row {
	justify-content: space-between;
}
/* Submenu trên di động: KHÔNG nổi tuyệt đối (sẽ vỡ trong panel hẹp) — mở kiểu "accordion"
   xổ xuống ngay dưới mục cha bằng max-height, tách hẳn khỏi cơ chế hover/opacity của
   desktop (opacity/visibility ở trên vô nghĩa khi max-height:0 + overflow:hidden). */
.dlb-main-menu--is-mobile .dlb-main-menu__submenu {
	position: static;
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
	box-shadow: none;
	min-width: 0;
	width: 100%;
	max-height: 0;
	overflow: hidden;
	padding: 0;
	transform: none;
	transition: max-height 0.25s ease;
}
.dlb-main-menu--is-mobile .dlb-main-menu__item--has-children.is-caret-open .dlb-main-menu__submenu {
	max-height: 600px;
	padding: 4px 0;
}
.dlb-main-menu--is-mobile .dlb-main-menu__sublink {
	padding: 8px 12px;
	/* LỖI THẬT phát hiện 2026-09-01 (người dùng báo "chỉnh lại kích thước font chữ sao
	   cho cân đối hơn" kèm ảnh — mục con to hẳn hơn mục cha, nhìn ngược đời): rule gốc
	   ".dlb-main-menu__sublink" (không điều kiện di động) đọc thẳng
	   "calc(var(--dlb-mm-font-size,15px) - 1px)" — biến này đang được site đặt THẬT là
	   24px (dùng cho menu NGANG desktop, hợp lý ở đó) nên sublink ra hẳn 23px. Mục CHA
	   cùng hàng lại dùng "clamp(11px, 4vw, var(--dlb-mm-font-size,15px))" — có trần
	   clamp nên trên mobile chỉ ra 15.6px (4vw ở 390px), không bị ăn theo giá trị 24px
	   kia. Sublink hoàn toàn KHÔNG có phần co giãn nào cho di động — nhận nguyên giá trị
	   desktop. Ép cứng cỡ nhỏ hơn hẳn mục cha cho di động, đúng thứ bậc cha/con thông
	   thường, không phụ thuộc "--dlb-mm-font-size" nữa (biến đó chỉ nên dùng cho NGANG
	   desktop, không phải panel dọc di động). */
	font-size: 14px;
}

/* 4 kiểu hiệu ứng mở panel — mặc định (không class nào khớp) tương đương "slide-right". */
.dlb-main-menu--is-mobile .dlb-main-menu__list {
	transform: translateX(100%);
}
.dlb-main-menu--is-mobile.is-menu-open .dlb-main-menu__list {
	transform: translateX(0);
}
.dlb-main-menu--mobile-anim-slide-left.dlb-main-menu--is-mobile .dlb-main-menu__list {
	right: auto;
	left: 0;
	transform: translateX(-100%);
}
.dlb-main-menu--mobile-anim-slide-left.dlb-main-menu--is-mobile.is-menu-open .dlb-main-menu__list {
	transform: translateX(0);
}
/* LỖI THẬT phát hiện 2026-09-01 (báo cáo người dùng qua ảnh chụp: mở menu di động ra,
   panel trắng chỉ cao vừa đủ nội dung — khoảng 314px trên màn 664px — phần còn lại của
   màn hình lộ ra nội dung trang phía sau (mờ qua lớp overlay đen 50%), trông như menu
   "bị lỗi/thiếu". Root cause đo được qua Playwright: "height: auto; max-height: 85vh" ở
   đây khiến panel chỉ cao bằng nội dung thật (4 mục menu + padding ≈ 314px), KHÔNG bao
   giờ chạm mốc 85vh trừ khi menu có rất nhiều mục — không phải lỗi hiển thị ngẫu nhiên,
   chỉ là panel kiểu "dropdown xổ xuống" chưa được ép phủ kín màn hình như overlay đứng
   sau nó. Ép "height: 100dvh" (kèm fallback 100vh cho trình duyệt cũ) + bỏ trần
   "max-height" — panel LUÔN phủ kín từ trên xuống dưới màn hình khi mở, đồng bộ với
   overlay, không còn lộ nội dung trang phía sau. Vẫn giữ hiệu ứng trượt từ trên xuống
   (translateY) như người dùng đã chọn, chỉ đổi chiều cao. */
.dlb-main-menu--mobile-anim-slide-down.dlb-main-menu--is-mobile .dlb-main-menu__list {
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	width: 100%;
	height: 100vh;
	height: 100dvh;
	max-height: none;
	transform: translateY(-100%);
}
.dlb-main-menu--mobile-anim-slide-down.dlb-main-menu--is-mobile.is-menu-open .dlb-main-menu__list {
	transform: translateY(0);
}
.dlb-main-menu--mobile-anim-fade.dlb-main-menu--is-mobile .dlb-main-menu__list {
	right: 0;
	transform: none;
	opacity: 0;
	pointer-events: none;
}
.dlb-main-menu--mobile-anim-fade.dlb-main-menu--is-mobile.is-menu-open .dlb-main-menu__list {
	opacity: 1;
	pointer-events: auto;
}

/* ============================== GIỎ HÀNG TRƯỢT (CART DRAWER) ==============================
   Đặt NGOÀI <nav> (anh em, không phải con) trong DOM — position:fixed phủ toàn màn hình,
   biến CSS --dlb-mm-drawer-* đọc qua inline style trên .dlb-main-menu__cart-drawer (xem
   dlb_main_menu_rz84_render_drawer_shell() trong PHP). JS chỉ thêm/gỡ class "is-open".
   overflow-x:hidden trên html — panel đóng dùng translateX(100%) nằm ngoài viewport, nhưng
   một số trình duyệt vẫn tính phần "ink overflow" đó vào scrollWidth của trang, làm lòi
   thanh cuộn ngang + lộ 1 mép panel ở mọi trang có block Main Menu này. */
html {
	overflow-x: hidden;
}
.dlb-main-menu__cart-drawer-overlay {
	position: fixed;
	inset: 0;
	z-index: 9998;
	background: var(--dlb-mm-drawer-overlay, rgba(0, 0, 0, 0.5));
	opacity: 0;
	pointer-events: none;
	transition: opacity var(--dlb-mm-drawer-speed, 350ms) ease;
}
.dlb-main-menu__cart-drawer-overlay.is-open {
	opacity: 1;
	pointer-events: auto;
}

.dlb-main-menu__cart-drawer {
	position: fixed;
	top: 0;
	bottom: 0;
	z-index: 9999;
	width: var(--dlb-mm-drawer-width, 400px);
	/* "92vw" ở đây vô hại — chỉ THẬT SỰ nguy hiểm trên di động thật (xem ghi chú đầy đủ ở
	   @media bên dưới, nơi rule an toàn cho di động đã lỡ dùng lại đúng kiểu đơn vị này). */
	max-width: 92vw;
	background: var(--dlb-mm-drawer-bg, #ffffff);
	display: flex;
	flex-direction: column;
	box-shadow: 0 0 32px rgba(0, 0, 0, 0.2);
	transition: transform var(--dlb-mm-drawer-speed, 350ms) ease;
}
.dlb-main-menu__cart-drawer--right {
	right: 0;
	transform: translateX(100%);
}
.dlb-main-menu__cart-drawer--right.is-open {
	transform: translateX(0);
}
.dlb-main-menu__cart-drawer--left {
	left: 0;
	transform: translateX(-100%);
}
.dlb-main-menu__cart-drawer--left.is-open {
	transform: translateX(0);
}

.dlb-main-menu__drawer-header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 18px 20px;
	background: var(--dlb-mm-drawer-header-bg, #ffffff);
	border-bottom: 1px solid var(--dlb-mm-drawer-item-border, #eeeeee);
	flex-shrink: 0;
}
.dlb-main-menu__drawer-title {
	font-size: 17px;
	font-weight: 700;
	color: var(--dlb-mm-drawer-header-text, #111111);
}
.dlb-main-menu__drawer-close {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	border: none;
	background: transparent;
	color: var(--dlb-mm-drawer-header-text, #111111);
	cursor: pointer;
	border-radius: 50%;
	transition: background-color 0.2s ease, transform 0.2s ease;
}
.dlb-main-menu__drawer-close:hover {
	background: rgba(0, 0, 0, 0.06);
	transform: rotate(90deg);
}
.dlb-main-menu__drawer-close svg {
	width: 18px;
	height: 18px;
}

.dlb-main-menu__drawer-body {
	flex: 1;
	overflow-y: auto;
	/* Thu gọn 2026-09-01 theo yêu cầu người dùng "thu nhỏ phần giỏ hàng của bạn
	   lại": giảm đệm 2 bên 20px→16px, cùng các giá trị thu gọn khác bên dưới
	   (ảnh, đệm từng dòng, khoảng cách) để danh sách gọn hơn, thấy được nhiều
	   sản phẩm hơn mà không cần cuộn nhiều. */
	padding: var(--dlb-mm-drawer-body-padding-top, 8px) 16px 8px 16px;
}
.dlb-main-menu__drawer-loading {
	padding: 40px 0;
	text-align: center;
	color: #888888;
	font-size: 14px;
}
.dlb-main-menu__drawer-body.is-updating {
	opacity: 0.5;
	pointer-events: none;
	transition: opacity 0.15s ease;
}

.dlb-main-menu__drawer-item {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	padding: 12px 0;
	border-bottom: 1px solid var(--dlb-mm-drawer-item-border, #eeeeee);
	animation: dlb-mm-drawer-item-in 0.3s ease;
}
@keyframes dlb-mm-drawer-item-in {
	from { opacity: 0; transform: translateY(6px); }
	to { opacity: 1; transform: translateY(0); }
}
.dlb-main-menu__drawer-item:last-child {
	border-bottom: none;
}
.dlb-main-menu__drawer-item-thumb {
	flex-shrink: 0;
	display: block;
	width: 52px;
	height: 52px;
	border-radius: 8px;
	overflow: hidden;
	/* Viền xanh lá quanh ảnh — thêm 2026-09-01 theo yêu cầu người dùng "ảnh có
	   viền xanh". Dùng thẳng mã màu (không qua biến CSS riêng, khối này chưa có
	   thuộc tính Inspector Control cho viền ảnh) — nếu sau này cần đổi màu theo
	   từng instance thì tách thành thuộc tính PHP riêng như các màu khác. */
	border: 2px solid #006d4c;
	box-sizing: border-box;
}
.dlb-main-menu__drawer-item-thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}
.dlb-main-menu__drawer-item-info {
	flex: 1;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: 4px;
}
.dlb-main-menu__drawer-item-name {
	font-size: 13px;
	font-weight: 600;
	/* Đổi 2026-09-01 theo yêu cầu người dùng "chữ thành xanh và vàng phối hợp"
	   — tên sản phẩm màu xanh lá (thương hiệu), giá/nút "Thanh toán ngay" vẫn
	   giữ vàng qua --dlb-mm-drawer-accent (không đụng, xem thuộc tính khối) để
	   tạo đúng cặp 2 màu xen kẽ thay vì cả khay chỉ 1 màu. */
	color: #006d4c;
	text-decoration: none;
	line-height: 1.4;
	transition: color 0.2s ease;
}
.dlb-main-menu__drawer-item-name:hover {
	color: var(--dlb-mm-drawer-accent, #006d4c);
}
/* Bỏ gạch chân hover/chạm — cùng gốc rễ, xem giải thích ở ".dlb-main-menu__brand:hover". */
.dlb-main-menu__drawer-item-name:hover,
.dlb-main-menu__drawer-item-name:focus,
.dlb-main-menu__drawer-item-name:active {
	text-decoration: none;
}
.dlb-main-menu__drawer-item-variation {
	font-size: 11px;
	color: #888888;
}
.dlb-main-menu__drawer-item-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-top: 4px;
}
.dlb-main-menu__drawer-qty {
	display: inline-flex;
	align-items: center;
	border: 1px solid var(--dlb-mm-drawer-item-border, #eeeeee);
	border-radius: 999px;
	overflow: hidden;
}
.dlb-main-menu__drawer-qty-btn {
	width: 22px;
	height: 22px;
	display: flex;
	align-items: center;
	justify-content: center;
	border: none;
	background: transparent;
	cursor: pointer;
	font-size: 13px;
	color: #444444;
	transition: background-color 0.2s ease;
}
.dlb-main-menu__drawer-qty-btn:hover {
	background: rgba(0, 0, 0, 0.06);
}
.dlb-main-menu__drawer-qty-value {
	min-width: 20px;
	text-align: center;
	font-size: 12px;
	font-weight: 600;
}
.dlb-main-menu__drawer-item-total {
	font-size: 13px;
	font-weight: 700;
	color: var(--dlb-mm-drawer-accent, #006d4c);
	white-space: nowrap;
}
/* Tiết kiệm từng dòng hàng (thêm 2026-09-01) — cùng màu xanh lá đậm với tab tiết
   kiệm tổng ở footer khay, nhỏ hơn + canh phải để nằm gọn dưới đúng số tiền của
   dòng đó, không tranh chú ý với tổng tiền chính. */
.dlb-main-menu__drawer-item-savings {
	font-size: 10.5px;
	font-weight: 700;
	color: #006d4c;
	text-align: right;
	margin-top: 3px;
}
.dlb-main-menu__drawer-item-remove {
	flex-shrink: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	border: none;
	background: transparent;
	color: #bbbbbb;
	cursor: pointer;
	border-radius: 50%;
	transition: color 0.2s ease, background-color 0.2s ease, transform 0.2s ease;
}
.dlb-main-menu__drawer-item-remove:hover {
	color: #ef4444;
	background: rgba(239, 68, 68, 0.08);
	transform: scale(1.08);
}
.dlb-main-menu__drawer-item-remove svg {
	width: 15px;
	height: 15px;
}

.dlb-main-menu__drawer-empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
	gap: 14px;
	padding: 60px 20px;
	color: #999999;
}
.dlb-main-menu__drawer-empty svg {
	width: 56px;
	height: 56px;
	opacity: 0.4;
}
.dlb-main-menu__drawer-empty p {
	margin: 0;
	font-size: 14px;
}
.dlb-main-menu__drawer-empty-btn {
	display: inline-block;
	padding: 10px 24px;
	border-radius: 999px;
	background: var(--dlb-mm-drawer-empty-btn-bg, #006d4c);
	color: var(--dlb-mm-drawer-empty-btn-text, #ffffff);
	text-decoration: none;
	font-size: 13px;
	font-weight: 600;
	transition: transform 0.2s ease, opacity 0.2s ease;
}
.dlb-main-menu__drawer-empty-btn:hover {
	transform: translateY(-2px);
	opacity: 0.9;
}
/* Bỏ gạch chân hover/chạm — cùng gốc rễ, xem giải thích ở ".dlb-main-menu__brand:hover". */
.dlb-main-menu__drawer-empty-btn:hover,
.dlb-main-menu__drawer-empty-btn:focus,
.dlb-main-menu__drawer-empty-btn:active {
	text-decoration: none;
}

.dlb-main-menu__drawer-footer {
	flex-shrink: 0;
	padding: 14px 16px 18px;
	border-top: 1px solid var(--dlb-mm-drawer-item-border, #eeeeee);
}
/* "Tab tiết kiệm" — thêm 2026-09-01 theo yêu cầu người dùng, hiện NGAY TRÊN
   "Tạm tính" khi giỏ hàng có ít nhất 1 dòng đang thật sự rẻ hơn giá gốc (PHP tự
   tính, không hiện nếu = 0). Nền xanh nhạt + chữ xanh lá đậm — tách biệt rõ với
   "Tạm tính" (chữ vàng, dùng accent) ngay dưới, đúng tinh thần "xanh và vàng
   phối hợp" đã áp dụng cho cả khay ở vòng trước. */
.dlb-main-menu__drawer-savings {
	display: flex;
	align-items: center;
	justify-content: space-between;
	background: #e8f1ed;
	color: #006d4c;
	font-size: 12px;
	font-weight: 700;
	padding: 8px 12px;
	border-radius: 8px;
	margin-bottom: 10px;
}
.dlb-main-menu__drawer-savings-value {
	font-weight: 800;
}
.dlb-main-menu__drawer-subtotal {
	display: flex;
	align-items: center;
	justify-content: space-between;
	font-size: 14px;
	font-weight: 700;
	color: #111111;
	margin-bottom: 12px;
}
.dlb-main-menu__drawer-subtotal-value {
	color: var(--dlb-mm-drawer-accent, #006d4c);
}
.dlb-main-menu__drawer-actions {
	display: flex;
	gap: 8px;
}
.dlb-main-menu__drawer-btn {
	flex: 1;
	text-align: center;
	padding: 10px 10px;
	border-radius: 999px;
	font-size: 12px;
	font-weight: 700;
	text-decoration: none;
	transition: transform 0.2s ease, opacity 0.2s ease;
	box-sizing: border-box;
}
.dlb-main-menu__drawer-btn:hover {
	transform: translateY(-2px);
}
/* Bỏ gạch chân hover/chạm — cùng gốc rễ, xem giải thích ở ".dlb-main-menu__brand:hover". */
.dlb-main-menu__drawer-btn:hover,
.dlb-main-menu__drawer-btn:focus,
.dlb-main-menu__drawer-btn:active {
	text-decoration: none;
}
.dlb-main-menu__drawer-btn--outline {
	border: 1.5px solid var(--dlb-mm-drawer-view-cart-color, #006d4c);
	color: var(--dlb-mm-drawer-view-cart-color, #006d4c);
	background: transparent;
}
.dlb-main-menu__drawer-btn--solid {
	border: 1.5px solid transparent;
	background: var(--dlb-mm-drawer-checkout-bg, #006d4c);
	color: var(--dlb-mm-drawer-checkout-text, #ffffff);
}

@media (max-width: 480px) {
	/* LỖI THẬT phát hiện 2026-08-19 (báo cáo người dùng qua nhiều ảnh chụp mobile, chỉ tái
	   hiện được khi Playwright giả lập ĐÚNG thiết bị di động thật — User-Agent + cảm ứng
	   qua devices['iPhone SE'], KHÔNG tái hiện được chỉ bằng page.setViewportSize() đổi
	   kích thước cửa sổ suông): "width:100%"/"max-width:100%" ở đây tưởng là "an toàn cho
	   di động" nhưng CHÍNH nó là nguồn lỗi — trên trình duyệt di động thật, 1 phần tử
	   position:fixed dùng đơn vị %/vw mà bị vẽ tràn ra ở LẦN VẼ ĐẦU TIÊN (trước khi trình
	   duyệt xử lý xong thẻ viewport meta) khiến trình duyệt tự nới RỘNG hẳn "layout
	   viewport" ra để chứa vừa nội dung đó — và viewport bị nới rộng này (đo được thật
	   ~895px thay vì đúng 320-375px) KHÔNG BAO GIỜ tự co lại trong suốt vòng đời trang.
	   Hậu quả dây chuyền cực kỳ khó thấy: MỌI đơn vị %/vw khác trên trang (kể cả
	   `window.innerWidth` mà JS đọc được) từ đó tính sai theo viewport đã bị nới rộng —
	   khiến điều kiện `window.innerWidth <= 782` ở dlb-main-menu-rz84-frontend.js KHÔNG
	   BAO GIỜ đúng nữa, cả header kẹt vĩnh viễn ở chế độ desktop (không hamburger) trên
	   di động thật, dù panel này ("an toàn cho di động") tưởng như đang làm đúng việc của
	   nó. Sửa bằng PX THUẦN — không phụ thuộc bất kỳ đơn vị tương đối viewport nào, miễn
	   nhiễm hoàn toàn với lỗi "layout viewport bị nới rộng" này. 320px vừa đủ cho hầu hết
	   điện thoại phổ biến (kể cả model nhỏ nhất ~320px màn hình vẫn còn margin an toàn),
	   không cần "vừa khít 100% màn hình" — có khoảng hở 2 bên là UX bình thường cho drawer. */
	.dlb-main-menu__cart-drawer {
		width: 320px !important;
		max-width: 320px !important;
	}
}

/* ============================== TIỆN ÍCH TRÊN CÙNG (TOPBAR) ==============================
   Thêm 2026-08-30 — đối chiếu demo-ui/index.html theo yêu cầu người dùng. Đứng NGOÀI <nav>
   (xem PHP) nên KHÔNG dùng biến --dlb-mm-* (những biến đó gán trên <nav>, topbar không kế
   thừa) — màu đọc thẳng từ style="" gắn ngay trên .dlb-main-menu__topbar. */
.dlb-main-menu__topbar {
	font-size: 13px;
}
.dlb-main-menu__topbar-inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	max-width: 1200px;
	margin: 0 auto;
	padding: 8px 24px;
	min-height: 24px;
}
.dlb-main-menu__topbar-list {
	display: flex;
	list-style: none;
	margin: 0;
	padding: 0;
	gap: 22px;
	flex-wrap: wrap;
}
.dlb-main-menu__topbar-list li {
	display: flex;
	align-items: center;
	gap: 7px;
	white-space: nowrap;
}
.dlb-main-menu__topbar-list svg {
	flex-shrink: 0;
}
.dlb-main-menu__topbar a {
	color: inherit;
	text-decoration: none;
}
.dlb-main-menu__topbar a:hover {
	color: #ffffff;
	text-decoration: underline;
}
/* Thu gọn dần giống demo-ui: > 900px giữ cả 4 dòng; 900px bớt dòng phụ bên trái (chỉ còn
   "Giao hàng nhanh chóng..."); 640px chỉ còn 1 dòng mỗi bên (gọn cho màn hẹp). Riêng dòng
   TRÁI giờ nằm trong marquee (xem khối bên dưới) — rule "n+2 { display:none }" gốc này
   vẫn ĐÚNG ý (chỉ 1 dòng khi không marquee), nhưng bị khối marquee override lại thành
   HIỆN ĐỦ để cuộn, xem giải thích ngay dưới. */
@media (max-width: 900px) {
	.dlb-main-menu__topbar-list:first-child li:nth-child(n+2) { display: none; }
}
@media (max-width: 640px) {
	.dlb-main-menu__topbar-list:last-child li:nth-child(n+2) { display: none; }
	.dlb-main-menu__topbar-inner { padding: 8px 18px; }
}

/* Chữ chạy (marquee) dòng trái topbar trên di động — thêm 2026-09-01 theo yêu cầu
   người dùng "chữ chạy từ trái qua phải, chạm bên phải tiếp tục xuất hiện đầu trái và
   cuộn tiếp. Icon đi trước nội dung đi sau". PHP (xem dlb-main-menu-rz84.php) đã nhân
   đôi y hệt nội dung dòng trái thành 2 bản trong track — animate track từ
   "translateX(-50%)" về "0%" chạy vô hạn: tại 0%, track lộ ĐÚNG bản 1 (giống hệt trạng
   thái tĩnh cũ); trôi dần về 0% nghĩa là bản 1 trượt VÀO từ bên trái, bản 2 trượt dần
   ra bên phải rồi mất hút — đúng chiều "trái qua phải", điểm nối liền mạch vì 2 bản
   giống hệt nhau tuyệt đối. */
.dlb-main-menu__topbar-marquee {
	overflow: hidden;
}
.dlb-main-menu__topbar-marquee-track {
	display: flex;
	width: max-content;
}
.dlb-main-menu__topbar-marquee-track .dlb-main-menu__topbar-list {
	flex-shrink: 0;
	flex-wrap: nowrap;
}
/* LỖI THẬT phát hiện 2026-09-01 (tự chụp ảnh desktop kiểm tra mới lộ ra, không thấy
   qua đọc code): ".topbar-marquee" là 1 flex-item con của ".topbar-inner" (flex),
   KHÔNG có width/flex-basis riêng nên tự co khít theo nội dung bên trong — mà track
   bên trong lại "width:max-content" ôm CẢ 2 bản (gấp đôi) — kết quả container tự nở
   rộng ra vừa đủ chứa CẢ 2 bản, "overflow:hidden" không còn gì để cắt, bản sao
   aria-hidden LỘ HẲN ra ngoài y hệt 1 dòng lặp lại nhìn rất kỳ (xem trên desktop:
   nút "Kiểm tra..." xuất hiện 2 lần liền nhau). Sửa gốc: ẨN HẲN bản sao (display:none)
   làm mặc định — container khi đó chỉ còn đúng 1 bản, tự co khít bình thường như
   trước khi có marquee, không tràn. CHỈ hiện lại bản sao (display:flex) trong đúng
   @media di động bên dưới, nơi animation thật sự chạy và cần cả 2 bản để cuộn. */
.dlb-main-menu__topbar-marquee-track .dlb-main-menu__topbar-list[aria-hidden="true"] {
	display: none;
}
@media (max-width: 900px) {
	/* Ghi đè LẠI rule "n+2 { display:none }" ở trên — marquee cần ĐỦ mọi mục ở CẢ
	   2 bản (không phải chỉ mục đầu) để 2 bản khớp nhau tuyệt đối, vòng lặp mới
	   liền mạch. Specificity cao hơn (thêm 1 lớp tổ tiên) + đứng SAU trong file
	   nên thắng chắc chắn dù cùng @media. */
	.dlb-main-menu__topbar-marquee-track .dlb-main-menu__topbar-list li:nth-child(n+2) {
		display: flex;
	}
	.dlb-main-menu__topbar-marquee-track .dlb-main-menu__topbar-list[aria-hidden="true"] {
		display: flex;
	}
	.dlb-main-menu__topbar-marquee-track {
		animation: dlb-topbar-marquee 10s linear infinite;
	}
}
@keyframes dlb-topbar-marquee {
	from { transform: translateX(-50%); }
	to { transform: translateX(0%); }
}
@media (prefers-reduced-motion: reduce) {
	.dlb-main-menu__topbar-marquee-track {
		animation: none;
	}
}

/* ============================== YÊU THÍCH (WISHLIST ICON) ==============================
   Thêm 2026-08-30 — CHỈ hiện số lượng (đọc localStorage dùng chung với dlb-item-grid-di90,
   xem frontend.js), badge để [hidden] mặc định cho tới khi JS xác nhận có ít nhất 1 sản
   phẩm đã lưu, tránh chớp "0" rồi biến mất ngay khi tải trang. */
.dlb-main-menu__wishlist {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	margin-left: 14px;
	z-index: 2;
	color: var(--dlb-mm-wishlist-color, #111111);
}
.dlb-main-menu__wishlist svg {
	width: 22px;
	height: 22px;
}
.dlb-main-menu__wishlist-badge {
	position: absolute;
	top: -6px;
	right: -9px;
	box-sizing: border-box; /* xem giải thích ở .dlb-main-menu__cart-badge phía trên — tránh méo oval */
	min-width: 16px;
	height: 16px;
	padding: 0 4px;
	border-radius: 999px;
	background: #fcb900;
	color: #111111;
	font-size: 10px;
	font-weight: 700;
	line-height: 16px;
	text-align: center;
}
.dlb-main-menu__wishlist-badge[hidden] {
	display: none;
}

/* ============================== NÚT "MUA NGAY" (CTA) ==============================
   Thêm 2026-08-30. */
.dlb-main-menu__buy-now {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
	margin-left: 14px;
	padding: 10px 22px;
	border-radius: 6px;
	font-size: 14px;
	font-weight: 700;
	white-space: nowrap;
	background: var(--dlb-mm-buynow-bg, #fcb900);
	color: var(--dlb-mm-buynow-text, #111111);
	text-decoration: none;
	transition: filter .15s ease;
}
.dlb-main-menu__buy-now:hover {
	filter: brightness(0.94);
}
/* Bỏ gạch chân khi hover/chạm — CÙNG GỐC RỄ với logo/menu phía trên (xem giải
   thích ở ".dlb-main-menu__brand:hover" đầu file). Nút này TRƯỚC ĐÓ chưa từng có
   "text-decoration:none" riêng (chỉ dựa mặc định toàn site) nên bị gạch chân xấu
   đè lên nền vàng khi hover — thêm luôn vào rule nền + đúng 3 trạng thái để chắc
   ăn, cùng cách làm với logo/menu. */
.dlb-main-menu__buy-now:hover,
.dlb-main-menu__buy-now:focus,
.dlb-main-menu__buy-now:active {
	text-decoration: none;
}
/* Di động (đồng bộ class "--is-mobile" do JS gán trên <nav> theo mobileBreakpoint tuỳ
   chỉnh, xem frontend.js) — ẩn nút CTA chữ cho gọn giống demo-ui, giữ icon yêu thích/giỏ
   hàng cạnh hamburger (không ẩn, khác nút CTA). */
.dlb-main-menu--is-mobile .dlb-main-menu__buy-now {
	display: none;
}
