/* =========================================================
   Partners marquee
   ========================================================= */
/* Continuous-scroll partner strip (auto-loops via an animated marquee).
   .partners-track is the real content list PLUS one aria-hidden duplicate
   of the same list back to back — animating it -50% on the X axis (its own
   doubled width) loops seamlessly with no jump/reset. Pause-on-hover so a
   name is easy to read; math only works if both halves stay identical, so
   add/remove a partner in BOTH copies.

   .partners-marquee sits OUTSIDE .container (a sibling, not a child — see
   the markup) so it isn't width-limited by default, unlike everything else
   on the page. That's fine up to a point, but the "-50%" loop technique
   only ever has (list width) of real distance to travel before it must
   already be back at a duplicate-content position — i.e. it's only gap-free
   as long as the VISIBLE window (.partners-marquee's own width) stays
   smaller than half the doubled track. With only 6 real logos (~1300px
   list, ~2620px doubled), any viewport/window wider than ~1300px lets the
   window outrun the content and show blank space for part of each cycle —
   invisible on a normal laptop screen, but visible on a wide monitor.
   Capping this to var(--container-width) (max
   1200-ish) keeps the window comfortably under that ~1300px ceiling
   regardless of how wide the actual screen is. */
.partners-marquee {
	max-width: var(--container-width);
	margin: 0 auto;
	padding: 0 20px;
	overflow: hidden;
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
}

.partners-track {
	display: flex;
	width: max-content;
	gap: 20px;
	animation: partners-scroll 32s linear infinite;
}

.partners-marquee:hover .partners-track {
	animation-play-state: paused;
}

@keyframes partners-scroll {
	from { transform: translateX(0); }
	to { transform: translateX(-50%); }
}

.partner-logo {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 200px;
	height: 76px;
	border: 1px solid var(--color-border);
	border-radius: var(--radius);
	color: var(--color-text-light);
	font-weight: 600;
	font-size: 0.85rem;
	text-align: center;
	padding: 0 16px;
	background: var(--color-bg);
	filter: grayscale(1);
	opacity: 0.75;
	transition: opacity 0.15s ease, filter 0.15s ease;
}
@media (max-width: 900px) {
	.partner-logo {
		width: 160px;
	}
}
@media (max-width: 782px) {
	.partner-logo {
		width: 140px;
		height: 64px;
		font-size: 0.75rem;
	}
}

/* Real logo image once a placeholder <div class="partner-logo">Name</div> is
   swapped for <div class="partner-logo"><img ...></div> — box only sets
   height above, so without this the image would render at its native pixel
   size and overflow the 76px tile. */
.partner-logo img {
	max-width: 100%;
	max-height: 40px;
	object-fit: contain;
}

.partner-logo:hover {
	filter: grayscale(0);
	opacity: 1;
}

/* A viewer who asks for reduced motion gets a static, scrollable strip
   instead of the auto-playing loop. overflow-x:auto belongs on
   .partners-marquee (the element that's actually narrower than its
   content) rather than .partners-track (whose own width:max-content means
   its box always equals its content's size — there's nothing for IT to
   scroll). The aria-hidden duplicate tiles (only there to make the animated
   loop seamless) are hidden so a manual swipe doesn't show the same 6
   logos twice. */
@media (prefers-reduced-motion: reduce) {
	.partners-marquee {
		overflow-x: auto;
	}

	.partners-track {
		animation: none;
	}
@media (max-width: 782px) {
	.partners-track {
		gap: 12px;
	}
}

	.partner-logo[aria-hidden="true"] {
		display: none;
	}
}

/* =========================================================
   Home sections
   ========================================================= */
/* Homepage Cẩm Nang teaser (`[knt_cam_nang_teaser limit="3"]`, section
   id="guide" — NOT "guide-latest", a different section on cam-nang.html)
   can't rely on the base .post-grid's `auto-fit` above, which picks its
   own column count purely from container width, independent of how many
   items actually exist. With exactly 3 posts, a mid-width viewport (narrow
   enough to fit only 2 of the 260-360px columns, but not yet at the mobile
   breakpoint) would auto-fit to 2 columns, orphaning the 3rd card alone on
   a new row with an empty gap beside it. Fixed the same way as
   `#guide-latest` above: a real fixed-count grid, with its own matching
   breakpoints below (900px/480px) instead of leaving it to `auto-fit`. */
#guide .post-grid {
	grid-template-columns: repeat(3, 1fr);
}
@media (max-width: 900px) {
	/* Superseded — #guide .post-grid is now a swipeable
	   horizontal row instead (see the later @media 900px block, near
	   .guide-teaser-layout, which sets display:flex + gap etc.; that rule
	   comes later in the file so it wins the cascade over this one's
	   grid-template-columns). Left here rather than deleted, same
	   dead-code convention as elsewhere in this file — do not treat this
	   1-column rule as what #guide .post-grid actually looks like now. */
	#guide .post-grid {
		grid-template-columns: 1fr;
	}
}
@media (max-width: 900px) {
	/* Swipeable horizontal row instead of a single stacked column — same
	   full-bleed + scroll-padding technique as
	   ul.products.products-scroll/.discover-grid/.travel-style-grid above,
	   EXCEPT the card size itself is untouched — one post fills the same
	   width it always had (the old single-column stack's full container
	   width), not shrunk to fit 2-up like the product rows, since a
	   smaller card reads as too cramped for a post card's amount of text.
	   See ul.products.products-scroll's big comment (main.css, ≤900px
	   block) for the full reasoning behind full-bleed + scroll-padding. */
	#guide .post-grid {
		display: flex;
		grid-template-columns: none;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		gap: 20px;
		padding-bottom: 4px;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		margin-right: calc(50% - 50vw);
		scroll-padding-left: 20px;
		scroll-padding-right: 20px;
	}
}

/* The shortcode fetches 5 posts, but this grid is a fixed 3-column layout
   on desktop — showing all 5 would orphan 2 cards on their own row with an
   empty gap beside them. Cap the desktop GRID to the first 3; the 4th/5th
   only exist for the ≤900px swipeable row below, which un-hides them again. */
#guide .post-grid .post-card:nth-child(n+4) {
	display: none;
}
@media (max-width: 900px) {
	/* Un-hides the 4th/5th post again — the desktop-only nth-child(n+4)
	   cap above (main.css, near #guide .post-grid's own definition) is
	   what limits the fixed 3-column GRID to 3 cards; this swipeable row
	   has no such column-count constraint, so all 5 fetched posts should
	   show here. */
	#guide .post-grid .post-card:nth-child(n+4) {
		display: block;
	}
}

/* =========================================================
   Popular destinations grid
   ========================================================= */









/* =========================================================
   Flash sale / deals carousel row
   ========================================================= */








/* =========================================================
   Testimonials
   ========================================================= */








/* =========================================================
   App download banner
   ========================================================= */







/* =========================================================
   Newsletter signup
   ========================================================= */





/* =========================================================
   Hero with photo background (replaces the flat-color .hero
   on pages/sections that opt into it via .hero-photo)
   ========================================================= */
.hero-photo {
	position: relative;
	min-height: 560px;
	color: #fff;
	overflow: hidden;
	background-color: var(--color-primary-dark);
}
@media (max-width: 782px) {
	.hero-photo {
		min-height: auto;
	}
}

.hero-photo-bg {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background-size: cover;
	background-position: center;
	z-index: 0;
}

/* Multi-image hero carousel — a SEPARATE modifier class, not a
   change to the shared .hero-photo-bg rule above, since that class is also
   used for plain single-image sections elsewhere (.travel-style/.journey
   backgrounds) that must keep rendering at opacity:1 with no JS involved.
   Stacks every slide (already absolutely positioned, full-bleed, from the
   base rule above) and crossfades via opacity — main.js's hero-carousel
   block toggles .is-active every data-hero-interval ms. */
.hero-photo-bg--slide {
	opacity: 0;
	transition: opacity 1.2s ease;
}

.hero-photo-bg--slide.is-active {
	opacity: 1;
	z-index: 1;
}

.hero-photo::after {
	content: "";
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: linear-gradient(90deg, rgba(9, 20, 23, 0.8) 0%, rgba(9, 20, 23, 0.4) 55%, rgba(9, 20, 23, 0.1) 100%);
	z-index: 1;
}

.hero-photo-inner {
	position: relative;
	z-index: 2;
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-height: 560px;
	width: 100%;
	padding-top: 70px;
	padding-bottom: 60px;
	box-sizing: border-box;
}
@media (max-width: 782px) {
	.hero-photo-inner {
		min-height: auto;
		padding-top: 40px;
		padding-bottom: 30px;
	}
}

.hero-eyebrow {
	text-transform: uppercase;
	letter-spacing: 0.12em;
	font-size: 0.75rem;
	font-weight: 700;
	color: #ffd699;
	margin-bottom: 14px;
}
@media (max-width: 782px) {
	.hero-eyebrow {
		font-size: 0.6875rem;
	}
}

.hero-photo-title {
	margin: 0 0 8px;
	font-size: clamp(2rem, 4.2vw, 3.4rem);
	letter-spacing: -0.03em;
	color: #fff;
	max-width: 700px;
}
@media (max-width: 782px) {
	/* Mobile type scale — none of these had any mobile-specific reduction
	   at all; .hero-photo-title only had a clamp() floor that never
	   actually got small on a phone (clamp(2rem, 4.2vw, 3.4rem)'s
	   2rem/32px minimum is bigger than 4.2vw already below ~760px, so the
	   floor is what phones were always seeing) — a desktop-authored
	   clamp()/fixed rem doesn't automatically scale down to real mobile
	   sizes. Covers the homepage hero
	   + section headers, the shop listing pages' hero, and the product/
	   detail pages' <h1> (.tour-title, shared by tour/hotel/ticket detail
	   templates). */
	.hero-photo-title {
		font-size: 1.75rem;
	}
}
/* =========================================================================
   Hero: uppercase title, script overlay, location/dots badge
   ========================================================================= */
.hero-photo-title {
	text-transform: uppercase;
}

.hero-photo-subtitle {
	font-size: 1.125rem;
	color: rgba(255, 255, 255, 0.9);
	max-width: 560px;
	margin-bottom: 1.8em;
}
@media (max-width: 782px) {
	.hero-photo-subtitle {
		font-size: 0.9375rem;
	}
}

.hero-photo-actions {
	display: flex;
	gap: 14px;
	flex-wrap: wrap;
}
@media (max-width: 782px) {
	/* The two hero CTAs (.btn + .btn-ghost-white) are just barely too wide
	   combined for a phone-width container at their desktop padding/font-
	   size, so flex-wrap (base .hero-photo-actions rule) drops the second
	   one to its own line. Shrink padding/font enough for both to fit one
	   row instead of
	   changing the wrap behavior itself. */
	.hero-photo-actions {
		flex-wrap: nowrap;
	}
}

.btn-ghost-white {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	background: rgba(255, 255, 255, 0.12);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	border: 1.5px solid rgba(255, 255, 255, 0.7);
	color: #fff;
	padding: 12px 24px;
	border-radius: 999px;
	font-weight: 600;
	font-size: 1rem;
	cursor: pointer;
}

.btn-ghost-white:hover {
	background: rgba(255, 255, 255, 0.22);
	color: #fff;
}

/* Same glass-card treatment + container-aligned positioning as
   .shop-hero-badge (tour.html/khach-san.html/ve-tham-quan.html). */
.hero-stat-badge {
	position: absolute;
	z-index: 3;
	top: 50%;
	transform: translateY(-50%);
	right: max(20px, calc((100% - var(--container-width)) / 2 + 20px));
	background: rgba(255, 255, 255, 0.14);
	border: 1px solid rgba(255, 255, 255, 0.35);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	color: #fff;
	border-radius: var(--radius);
	padding: 16px 20px;
	display: flex;
	align-items: center;
	gap: 12px;
}
@media (max-width: 782px) {
	/* Same call as .shop-hero-badge above, applied site-wide: hide on
	   mobile instead of collapsing to static — it's decorative ("Đội ngũ
	   địa phương" + a star rating) restating trust
	   messaging already covered by the hero copy/CTAs, and dropping it
	   recovers real hero height on a phone screen. */
	.hero-stat-badge {
		display: none;
	}
}

.hero-stat-icon {
	width: 44px;
	height: 44px;
	border-radius: 50%;
	background-color: rgba(255, 255, 255, 0.18);
	display: flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
}

.hero-stat-value {
	font-size: 1.125rem;
	font-weight: 800;
	line-height: 1.2;
}

.hero-stat-label {
	font-size: 0.75rem;
	color: rgba(255, 255, 255, 0.85);
}

.hero-stat-stars {
	color: #ffd166;
	font-size: 0.75rem;
	margin-top: 2px;
}

/* =========================================================
   Hero: search-card tabs, hero script/photo-meta decorations
   ========================================================================= */
.hero-script {
	position: absolute;
	z-index: 3;
	right: max(20px, calc((100% - var(--container-width)) / 2 + 20px));
	bottom: 118px;
	text-align: right;
	color: rgba(255, 255, 255, 0.92);
	font-size: clamp(1.05rem, 1.9vw, 1.5rem);
	font-weight: 600;
	text-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);
}

.hero-script span {
	display: block;
}

.hero-photo-meta {
	position: absolute;
	z-index: 3;
	right: max(20px, calc((100% - var(--container-width)) / 2 + 20px));
	bottom: 78px;
	display: flex;
	align-items: center;
	gap: 10px;
	color: #fff;
	font-size: 0.8125rem;
	font-weight: 600;
}

.hero-photo-meta .icon {
	width: 14px;
	height: 14px;
}

.hero-photo-dots {
	display: flex;
	align-items: center;
	gap: 5px;
}

.hero-photo-dots span,
.hero-photo-dots button {
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.45);
	transition: all 0.2s ease;
}

/* Real slides render <button>s (click-to-jump) instead of decorative
   <span>s — reset native button chrome so they still just look like dots. */
.hero-photo-dots button {
	border: none;
	padding: 0;
	cursor: pointer;
}

.hero-photo-dots span.is-active,
.hero-photo-dots button.is-active {
	background: #fff;
	width: 16px;
	border-radius: 3px;
}

@media (max-width: 900px) {
	.hero-script,
	.hero-photo-meta {
		display: none;
	}
}

/* ---- Search-card tabs (real — switching tabs re-points the search form at
   that type's catalog archive; see main.js's .hero-search-tab click handler
   and inc/shortcodes.php's [knt_hero] docblock) ---- */
.hero-search-tabs {
	display: flex;
	gap: 4px;
	width: fit-content;
	max-width: 100%;
	overflow-x: auto;
	background: #fff;
	border: 1px solid #edf3f4;
	border-bottom: none;
	border-radius: var(--radius-lg) var(--radius-lg) 0 0;
	padding: 10px 10px 0;
	position: relative;
	z-index: 5;
	/* No box-shadow here (only .hero-search-card below casts one) — this
	   class only ever appears directly above .hero-search-card, so its own
	   shadow just fell across the seam between the two, reading as a gap
	   between two stacked cards instead of one continuous block. */
}

.hero-search-tab {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 10px 18px;
	border: none;
	background: transparent;
	border-radius: var(--radius) var(--radius) 0 0;
	font-weight: 700;
	font-size: 0.9375rem;
	color: var(--color-text-light);
	cursor: pointer;
	white-space: nowrap;
	flex-shrink: 0;
}

.hero-search-tab .icon {
	width: 18px;
	height: 18px;
}

.hero-search-tab.is-active {
	background: var(--color-bg-alt);
	color: var(--color-primary-dark);
}

/* Flattens the card's own top corners only when tabs sit directly above it
   (homepage), so the two read as one merged block — scoped via adjacent-
   sibling, .hero-search-card itself (shared with tour.html/khach-san.html/
   ve-tham-quan.html, none of which have tabs) is untouched. */
.hero-search-tabs + .hero-search-card {
	border-top-left-radius: 0;
	border-top-right-radius: 0;
}

@media (max-width: 600px) {
	.hero-search-tab {
		padding: 10px 12px;
		font-size: 0.8125rem;
	}
}

/* =========================================================================
   "Discover" bento grid — Trải Nghiệm Phú Quốc Trọn Vẹn
   ========================================================================= */
.btn-outline-accent {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 10px 20px;
	border-radius: 999px;
	border: 1.5px solid var(--color-accent);
	color: var(--color-accent);
	font-weight: 700;
	font-size: 0.875rem;
	white-space: nowrap;
}

.btn-outline-accent:hover {
	background: var(--color-accent);
	color: #fff;
}

.discover-grid {
	display: grid;
	grid-template-columns: 1.05fr 1fr 1fr;
	grid-template-rows: repeat(2, minmax(210px, 1fr));
	gap: 20px;
}

.discover-card {
	position: relative;
	display: block;
	border-radius: var(--radius-lg);
	overflow: hidden;
	min-width: 0;
	min-height: 0;
	color: #fff;
	box-shadow: var(--shadow-sm);
}

.discover-card--tour {
	grid-column: 1 / 2;
	grid-row: 1 / 3;
}

.discover-card--tickets {
	grid-column: 2 / 4;
	grid-row: 1 / 2;
}

.discover-card--hotel {
	grid-column: 2 / 3;
	grid-row: 2 / 3;
}

.discover-card--transfer {
	grid-column: 3 / 4;
	grid-row: 2 / 3;
}

.discover-card-bg {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	transition: transform 0.35s ease;
}

.discover-card:hover .discover-card-bg {
	transform: scale(1.05);
}

.discover-card::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(6, 20, 23, 0) 32%, rgba(6, 20, 23, 0.82) 100%);
}

.discover-card-badge {
	position: absolute;
	top: 16px;
	left: 16px;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	background: #fff;
	color: var(--color-primary-dark);
	padding: 7px 13px;
	border-radius: 999px;
	font-size: 0.6875rem;
	font-weight: 800;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
}

.discover-card-badge .icon {
	width: 14px;
	height: 14px;
}

.discover-badge--tickets {
	color: var(--color-accent);
}

.discover-badge--hotel {
	color: #059669;
}

.discover-badge--transfer {
	color: #2563eb;
}

.discover-card-script {
	position: absolute;
	left: 26px;
	bottom: 176px;
	z-index: 2;
	color: rgba(255, 255, 255, 0.92);
	font-size: 1.125rem;
}

.discover-card-body {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 2;
	padding: 22px 26px;
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 14px;
}

.discover-card--tour .discover-card-body {
	padding: 28px;
}

.discover-card-text {
	min-width: 0;
}

.discover-card-title {
	display: block;
	font-size: 1.25rem;
	font-weight: 800;
	color: #fff;
	margin: 0 0 6px;
}

.discover-card--tour .discover-card-title {
	font-size: 1.75rem;
}

.discover-card-desc {
	display: block;
	font-size: 0.8125rem;
	color: rgba(255, 255, 255, 0.88);
	max-width: 320px;
	margin: 0;
	line-height: 1.5;
}

/* .product-card-lead's own text row: "Vuốt ngang để xem thêm" swipe hint,
   replacing the badge/description/link — this card
   is purely decorative (no href, see the <div> not <a> in
   knt_store_home_product_row(), functions.php), just an intro tile
   leading into the real product cards beside it. */
.discover-card-swipe-hint {
	display: flex;
	align-items: center;
	gap: 6px;
	font-size: 0.8125rem;
	font-weight: 600;
	color: rgba(255, 255, 255, 0.88);
	margin: 0;
}

.discover-card-arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border-radius: 50%;
	background: #fff;
	color: var(--color-primary-dark);
	font-weight: 800;
	flex-shrink: 0;
}

.discover-card-arrow:hover {
	background: var(--color-accent);
	color: #fff;
}

@media (max-width: 900px) {
	.discover-grid {
		grid-template-columns: 1fr 1fr;
		grid-template-rows: none;
		gap: 16px;
	}

	.discover-card--tour {
		grid-column: 1 / 3;
		grid-row: auto;
		min-height: 340px;
	}

	.discover-card--tickets {
		grid-column: 1 / 3;
		grid-row: auto;
		min-height: 220px;
	}

	.discover-card--hotel,
	.discover-card--transfer {
		grid-row: auto;
		min-height: 220px;
	}
}

@media (max-width: 600px) {
	/* Swipeable horizontal row instead of 4 stacked full-width cards —
	   same "feels like an app" pattern as ul.products.products-scroll and
	   .tour-gallery elsewhere in this file. Full-bleed (smooth drag to the
	   true edge) + scroll-padding (always a 20px gutter once settled, for
	   ANY card, not just the true first/last) + gap matched to that same
	   20px (so the revealed gutter is blank, never a sliver of the
	   neighboring card) — see ul.products.products-scroll's identical
	   fix/reasoning above for the full explanation of why both pieces are
	   needed together. */
	.discover-grid {
		display: flex;
		grid-template-columns: none;
		grid-template-rows: none;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		gap: 20px;
		padding-bottom: 4px;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		margin-right: calc(50% - 50vw);
		scroll-padding-left: 20px;
		scroll-padding-right: 20px;
	}

	.discover-grid::-webkit-scrollbar {
		display: none;
	}

	/* Scoped to .discover-grid's own direct children specifically — a bare
	   .discover-card:first-child/:last-child matches ANY .discover-card
	   anywhere on the page whose own parent happens to have it as the
	   first/last (here: only) child, which is exactly what
	   .product-card-lead's <a class="discover-card discover-card--tickets">
	   is (the sole child of its <li>) — it would silently pick up BOTH
	   rules at once (being simultaneously its parent's first AND last
	   child), adding 20px margin-left AND 20px margin-right, squeezing it
	   40px narrower than its sibling .product-card with no relation at all
	   to the flex-basis/scroll-padding tuning done elsewhere in this row. */
	.discover-grid > .discover-card:first-child {
		margin-left: 20px;
	}

	.discover-grid > .discover-card:last-child {
		margin-right: 20px;
	}

	.discover-card--tour,
	.discover-card--tickets,
	.discover-card--hotel,
	.discover-card--transfer {
		grid-column: auto;
		grid-row: auto;
		flex: 0 0 80%;
		min-height: 260px;
		scroll-snap-align: start;
	}

	.discover-card-script {
		display: none;
	}
}

/* =========================================================================
   Bestseller layout (tour + hotel "nổi bật" rows) — one large feature card
   + a short list column, replacing the old horizontal-scroll carousel for
   these two rows on the homepage (ticket row keeps a fixed grid instead,
   see .ticket-highlight-* below — carousel CSS itself is untouched/still
   used elsewhere, e.g. #chon-phong on the hotel detail page).
   ========================================================================= */
.bestseller-layout {
	display: grid;
	grid-template-columns: 1.3fr 1fr;
	gap: 24px;
	align-items: stretch;
}

.bestseller-feature {
	position: relative;
	display: block;
	border-radius: var(--radius-lg);
	overflow: hidden;
	min-height: 420px;
	color: #fff;
}

.bestseller-feature-bg {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	transition: transform 0.35s ease;
}

.bestseller-feature:hover .bestseller-feature-bg {
	transform: scale(1.05);
}

.bestseller-feature::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(6, 20, 23, 0) 30%, rgba(6, 20, 23, 0.85) 100%);
}

.bestseller-feature-badge {
	position: absolute;
	top: 18px;
	left: 18px;
	z-index: 2;
}

.bestseller-feature-body {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 2;
	padding: 26px;
}

.bestseller-feature-title {
	display: block;
	font-size: 1.5rem;
	font-weight: 800;
	color: #fff;
	margin: 0 0 12px;
	max-width: 420px;
}

.bestseller-feature-meta {
	display: flex;
	flex-wrap: wrap;
	gap: 14px;
	margin-bottom: 18px;
	font-size: 0.8125rem;
	color: rgba(255, 255, 255, 0.9);
}

.bestseller-feature-meta-item {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

.bestseller-feature-meta-item .icon {
	width: 15px;
	height: 15px;
	flex-shrink: 0;
}

.bestseller-feature-foot {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
}

.bestseller-feature-price-label {
	display: block;
	font-size: 0.75rem;
	color: rgba(255, 255, 255, 0.75);
}

.bestseller-feature-price {
	font-size: 1.375rem;
	font-weight: 800;
	color: #fff;
}

.bestseller-list {
	display: flex;
	flex-direction: column;
	gap: 14px;
}

.bestseller-list-item {
	display: flex;
	gap: 14px;
	align-items: flex-start;
	padding: 14px;
	background: #fff;
	border: 1px solid var(--color-border);
	border-radius: var(--radius);
	flex: 1;
	transition: box-shadow 0.15s ease, transform 0.15s ease;
}

.bestseller-list-item:hover {
	box-shadow: var(--shadow-md);
	transform: translateY(-2px);
}

.bestseller-list-thumb {
	flex-shrink: 0;
	width: 84px;
	height: 84px;
	border-radius: var(--radius);
	overflow: hidden;
}

.bestseller-list-thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.bestseller-list-body {
	min-width: 0;
	flex: 1;
	display: flex;
	flex-direction: column;
	gap: 4px;
}

.bestseller-list-title {
	font-size: 0.9375rem;
	font-weight: 800;
	color: var(--color-text);
	margin: 0;
}

.bestseller-list-desc {
	font-size: 0.75rem;
	color: var(--color-text-light);
	line-height: 1.5;
	margin: 0;
}

.bestseller-list-meta {
	font-size: 0.6875rem;
	color: var(--color-text-light);
}

.bestseller-list-price {
	font-size: 0.875rem;
	font-weight: 800;
	color: var(--color-accent);
	margin-top: 2px;
}

.bestseller-list-price--muted {
	color: var(--color-text-light);
	font-weight: 700;
}

@media (max-width: 900px) {
	.bestseller-layout {
		grid-template-columns: 1fr;
	}

	.bestseller-feature {
		min-height: 340px;
	}
}

/* =========================================================================
   Dark "travel style" row — Bạn Muốn Một Chuyến Đi Như Thế Nào?
   ========================================================================= */
.travel-style-section {
	position: relative;
	background: linear-gradient(180deg, #06323a 0%, #0a4750 100%);
	color: #fff;
	overflow: hidden;
}

.travel-style-head {
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 24px;
	flex-wrap: wrap;
	margin-bottom: 2em;
}

.travel-style-head .section-title {
	text-align: left;
	color: #fff;
	margin-bottom: 0.5em;
}

.travel-style-head p {
	color: rgba(255, 255, 255, 0.78);
	max-width: 620px;
	margin: 0;
}

.travel-style-script {
	color: rgba(255, 255, 255, 0.92);
	font-size: 1.375rem;
	text-align: right;
	flex-shrink: 0;
}

.travel-style-grid {
	display: grid;
	grid-template-columns: repeat(5, 1fr);
	gap: 18px;
}

.travel-style-card {
	position: relative;
	display: block;
	border-radius: var(--radius-lg);
	overflow: hidden;
	aspect-ratio: 3 / 4;
	color: #fff;
	border: 1px solid rgba(255, 255, 255, 0.18);
}

.travel-style-bg {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	transition: transform 0.35s ease;
}

.travel-style-card:hover .travel-style-bg {
	transform: scale(1.06);
}

.travel-style-card::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(4, 16, 19, 0.05) 40%, rgba(4, 16, 19, 0.9) 100%);
}

.travel-style-body {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 2;
	padding: 16px;
}

.travel-style-icon {
	width: 26px;
	height: 26px;
	margin-bottom: 10px;
}

.travel-style-name {
	display: block;
	font-size: 1.0625rem;
	font-weight: 800;
	margin-bottom: 4px;
}

.travel-style-desc {
	display: block;
	font-size: 0.75rem;
	color: rgba(255, 255, 255, 0.82);
	line-height: 1.4;
	margin-bottom: 12px;
}

.travel-style-foot {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
}

.travel-style-cta {
	font-size: 0.75rem;
	font-weight: 700;
	color: #ffd699;
}

.travel-style-arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.16);
	color: #fff;
	flex-shrink: 0;
}

.travel-style-card:hover .travel-style-arrow {
	background: var(--color-accent);
}

@media (max-width: 900px) {
	.travel-style-grid {
		grid-template-columns: repeat(3, 1fr);
	}

	.travel-style-script {
		display: none;
	}
}

@media (max-width: 600px) {
	/* Swipeable horizontal row instead of a 2-column grid — same pattern as
	   .discover-grid's mobile tier just above: full-bleed (smooth drag to
	   the true edge) + scroll-padding (always a 20px gutter once settled,
	   for ANY card) + gap matched to that same 20px — a margin on only the
	   true first/last card would mean a tiny swipe snapping to the 2nd
	   card, which has none, looks like it "slid all the way to the true
	   left edge"; see ul.products.products-scroll's identical fix above
	   for the full reasoning. Exactly 2 cards fill
	   the row with no partial 3rd peeking. */
	.travel-style-grid {
		display: flex;
		grid-template-columns: none;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		gap: 20px;
		padding-bottom: 4px;
		width: 100vw;
		margin-left: calc(50% - 50vw);
		margin-right: calc(50% - 50vw);
		scroll-padding-left: 20px;
		scroll-padding-right: 20px;
	}

	.travel-style-grid::-webkit-scrollbar {
		display: none;
	}

	.travel-style-card {
		flex: 0 0 calc((100% - 60px) / 2);
		scroll-snap-align: start;
	}

	.travel-style-card:first-child {
		margin-left: 20px;
	}

	.travel-style-card:last-child {
		margin-right: 20px;
	}
}

/* =========================================================================
   Ticket highlight grid — Vé Tham Quan Phú Quốc
   ========================================================================= */
.ticket-highlight-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 20px;
}

.ticket-highlight-card {
	display: flex;
	flex-direction: column;
	background: #fff;
	border-radius: var(--radius-lg);
	overflow: hidden;
	box-shadow: var(--shadow-sm);
	transition: box-shadow 0.15s ease, transform 0.15s ease;
}

.ticket-highlight-card:hover {
	box-shadow: var(--shadow-md);
	transform: translateY(-3px);
}

.ticket-highlight-thumb img {
	width: 100%;
	aspect-ratio: 4 / 3.1;
	object-fit: cover;
}

.ticket-highlight-body {
	padding: 16px 18px 20px;
	display: flex;
	flex-direction: column;
	gap: 5px;
	flex: 1;
}

.ticket-highlight-cat {
	font-size: 0.6875rem;
	font-weight: 800;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--color-primary);
}

.ticket-highlight-title {
	font-size: 1.0625rem;
	font-weight: 800;
	color: var(--color-text);
	margin: 0;
}

.ticket-highlight-desc {
	font-size: 0.8125rem;
	color: var(--color-text-light);
	line-height: 1.5;
	margin: 0;
	flex: 1;
}

.ticket-highlight-price-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	margin-top: 10px;
}

.ticket-highlight-price-label {
	font-size: 0.75rem;
	font-weight: 600;
	color: var(--color-text-light);
	margin-right: 4px;
}

.ticket-highlight-price {
	font-size: 1.25rem;
	font-weight: 800;
	color: var(--color-accent);
}

.ticket-highlight-arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	border-radius: 50%;
	border: 1.5px solid var(--color-accent);
	color: var(--color-accent);
	font-weight: 800;
	flex-shrink: 0;
}

.ticket-highlight-arrow:hover {
	background: var(--color-accent);
	color: #fff;
}

@media (max-width: 900px) {
	.ticket-highlight-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 480px) {
	.ticket-highlight-grid {
		grid-template-columns: 1fr;
	}
}

/* =========================================================================
   Journey map section — Hành Trình Riêng, Trải Nghiệm Khác Biệt
   ========================================================================= */
.journey-section {
	position: relative;
	overflow: hidden;
	background: var(--color-bg-alt);
}

.journey-layout {
	display: grid;
	grid-template-columns: 1fr 1.1fr;
	gap: 40px;
	align-items: center;
}

.journey-title {
	font-size: clamp(1.5rem, 2.6vw, 2.1rem);
	text-align: left;
	line-height: 1.3;
	margin-bottom: 0.6em;
}

.journey-desc {
	color: var(--color-text-light);
	margin-bottom: 1.6em;
}
@media (max-width: 782px) {
	/* Same "trim decorative intro copy on mobile" treatment as
	   .section-subtitle (main.css). */
	.journey-desc {
		display: none;
	}
}

.journey-trust-row {
	display: flex;
	gap: 18px;
	margin-top: 2em;
}

.journey-trust-item {
	display: flex;
	align-items: center;
	gap: 10px;
	padding-right: 18px;
	border-right: 1px solid var(--color-border);
}

.journey-trust-item:last-child {
	border-right: none;
	padding-right: 0;
}

.journey-trust-icon {
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: rgba(14, 124, 134, 0.1);
	color: var(--color-primary);
	display: flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
}

.journey-trust-icon .icon {
	width: 18px;
	height: 18px;
}

.journey-trust-label {
	font-size: 0.8125rem;
	font-weight: 700;
	color: var(--color-text);
	line-height: 1.3;
}

.journey-script {
	margin-top: 1.8em;
	color: var(--color-primary-dark);
	font-size: 1.25rem;
}

.journey-map {
	position: relative;
	aspect-ratio: 4 / 3.3;
}

.journey-map-bg {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
}

.journey-map-svg {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	z-index: 1;
}

.journey-pin {
	position: absolute;
	z-index: 2;
	transform: translate(-50%, -50%);
	display: flex;
	align-items: center;
	gap: 8px;
}

.journey-pin-dot {
	width: 16px;
	height: 16px;
	border-radius: 50%;
	background: #fff;
	border: 4px solid var(--color-accent);
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
	flex-shrink: 0;
}

.journey-pin-label {
	background: #fff;
	color: var(--color-text);
	font-size: 0.75rem;
	font-weight: 700;
	padding: 4px 10px;
	border-radius: 999px;
	white-space: nowrap;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}

.journey-pin--photo {
	background: #fff;
	padding: 4px 12px 4px 4px;
	border-radius: 999px;
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.22);
}

.journey-pin--photo .journey-pin-label {
	background: none;
	padding: 0;
	box-shadow: none;
}

.journey-pin-thumb {
	width: 38px;
	height: 38px;
	border-radius: 50%;
	overflow: hidden;
	flex-shrink: 0;
	border: 2px solid #fff;
}

.journey-pin-thumb img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.journey-map-script {
	position: absolute;
	left: 20px;
	bottom: 16px;
	z-index: 2;
	color: #fff;
	font-size: 1.0625rem;
	text-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
}

@media (max-width: 900px) {
	.journey-layout {
		grid-template-columns: 1fr;
	}

	.journey-trust-row {
		flex-wrap: wrap;
		gap: 14px 24px;
	}

	.journey-trust-item {
		border-right: none;
		padding-right: 0;
	}

	/* Stacked mobile layout puts the text column full-width over whatever
	   the cover-sized photo happens to crop to — no longer just the left
	   "white fade" half like on desktop. Keep the shared photo showing
	   (hiding it would fall back to .journey-section's flat --color-bg-alt,
	   which then visually merges with #hotels' identical grey right below —
	   the exact "two sections, no visible boundary" bug fixed for
	   #home-trust-badges) and instead give the text its own opaque card so
	   it stays readable over whatever part of the photo lands behind it. */
	.journey-content {
		background: rgba(255, 255, 255, 0.94);
		border-radius: var(--radius-lg);
		padding: 24px 20px;
	}
}

@media (max-width: 480px) {
	.journey-pin-label {
		display: none;
	}

	.journey-pin--photo {
		padding: 4px;
	}
}

/* =========================================================================
   Stats + partner-logo row (replaces the homepage's old 4-icon
   .trust-badges row and auto-scrolling .partners-marquee — both classes
   are left in place/unused rather than removed since khach-san.html still
   uses .trust-badges-grid for its own, different trust row)
   ========================================================================= */
.stats-partners-section {
	border-top: 1px solid var(--color-border);
	border-bottom: 1px solid var(--color-border);
}

.stats-partners-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 32px;
	flex-wrap: wrap;
}

.stats-row {
	display: flex;
	gap: 32px;
	flex-wrap: wrap;
}

.stat-tile {
	display: flex;
	align-items: center;
	gap: 10px;
}

.stat-tile-icon {
	width: 34px;
	height: 34px;
	border-radius: 50%;
	background: rgba(14, 124, 134, 0.1);
	color: var(--color-primary);
	display: flex;
	align-items: center;
	justify-content: center;
	flex-shrink: 0;
}

.stat-tile-icon .icon {
	width: 17px;
	height: 17px;
}

.stat-tile-value {
	font-size: 1.125rem;
	font-weight: 800;
	color: var(--color-primary-dark);
	line-height: 1.2;
}

.stat-tile-label {
	font-size: 0.75rem;
	color: var(--color-text-light);
}

.stats-partners-logos {
	display: flex;
	align-items: center;
	gap: 16px;
	flex-wrap: wrap;
}

.stats-partners-logos-label {
	font-size: 0.75rem;
	font-weight: 700;
	color: var(--color-text-light);
	white-space: nowrap;
}

.stats-partners-logos .partner-logo {
	width: 64px;
	height: 40px;
}

@media (max-width: 900px) {
	.stats-partners-row {
		flex-direction: column;
		align-items: flex-start;
	}

	.stats-row {
		gap: 20px 28px;
	}
}

/* =========================================================================
   Footer: "Kết Nối Với Chúng Tôi" column (social + newsletter), replacing
   the payment-badge column on the homepage only (other pages keep the
   payment column — see the summary note about this being homepage-scoped)
   ========================================================================= */
.footer-newsletter-title {
	font-size: 0.8125rem;
	font-weight: 700;
	color: #fff;
	margin: 20px 0 10px;
}

.footer-newsletter-form {
	display: flex;
	gap: 8px;
}

.footer-newsletter-form input[type="email"] {
	flex: 1;
	min-width: 0;
	border: 1px solid rgba(255, 255, 255, 0.25);
	background: rgba(255, 255, 255, 0.08);
	border-radius: 999px;
	padding: 10px 16px;
	color: #fff;
	font: inherit;
	font-size: 0.8125rem;
}

.footer-newsletter-form input[type="email"]::placeholder {
	color: rgba(255, 255, 255, 0.5);
}

.footer-newsletter-form input[type="email"]:focus {
	outline: none;
	border-color: var(--color-primary-light);
}

.footer-newsletter-submit {
	flex-shrink: 0;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	border: none;
	background: linear-gradient(135deg, var(--color-accent), var(--color-accent-light));
	color: #1f2937;
	display: flex;
	align-items: center;
	justify-content: center;
	font-weight: 800;
	cursor: pointer;
}

.footer-newsletter-submit:hover {
	box-shadow: 0 6px 16px rgba(247, 147, 30, 0.4);
}

.footer-script {
	margin-top: 18px;
	text-align: right;
	color: rgba(255, 255, 255, 0.55);
	font-size: 1rem;
}

@media (max-width: 782px) {
	.footer-script {
		text-align: left;
	}
}

/* =========================================================================
   Hotel bestseller layout (intro column + 1 large feature card + a short
   stacked list) — Khách Sạn Phú Quốc. Distinct from .bestseller-* above:
   every card here (feature + list) shares one component, .hotel-highlight-
   card, just sized differently, since the mockup uses the same photo-top/
   white-body card shape at both sizes (no per-property star rating is
   rendered — see the session summary for why).
   ========================================================================= */
.hotel-bestseller-layout {
	display: grid;
	grid-template-columns: 280px 1.5fr 1fr;
	gap: 24px;
	align-items: start;
}

.hotel-bestseller-intro .section-eyebrow,
.hotel-bestseller-intro .section-title {
	text-align: left;
}

.hotel-bestseller-intro .section-title {
	margin-bottom: 0.5em;
}

.hotel-bestseller-intro p {
	color: var(--color-text-light);
	margin-bottom: 1.4em;
}

.hotel-highlight-card {
	background: #fff;
	border: 1px solid var(--color-border);
	border-radius: var(--radius-lg);
	overflow: hidden;
	display: flex;
	flex-direction: column;
	transition: box-shadow 0.15s ease, transform 0.15s ease;
}

.hotel-highlight-card:hover {
	box-shadow: var(--shadow-md);
	transform: translateY(-2px);
}

.hotel-highlight-photo {
	position: relative;
}

.hotel-highlight-photo img {
	width: 100%;
	object-fit: cover;
}

.hotel-highlight-card--feature .hotel-highlight-photo img {
	aspect-ratio: 16 / 11;
}

.hotel-highlight-card--sm {
	flex-direction: row;
}

.hotel-highlight-card--sm .hotel-highlight-photo {
	flex-shrink: 0;
	width: 40%;
}

.hotel-highlight-card--sm .hotel-highlight-photo img {
	height: 100%;
	aspect-ratio: auto;
}

.hotel-highlight-badge {
	position: absolute;
	top: 12px;
	left: 12px;
	background: var(--color-accent);
	color: #1f2937;
	font-size: 0.75rem;
	font-weight: 800;
	padding: 5px 12px;
	border-radius: 999px;
}

.hotel-highlight-script {
	position: absolute;
	left: 16px;
	bottom: 14px;
	color: rgba(255, 255, 255, 0.92);
	font-size: 1.0625rem;
	text-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
}

.hotel-highlight-card--feature .hotel-highlight-photo::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(6, 20, 23, 0) 55%, rgba(6, 20, 23, 0.55) 100%);
}

.hotel-highlight-body {
	padding: 16px 18px;
	display: flex;
	flex-direction: column;
	gap: 8px;
	flex: 1;
}

.hotel-highlight-title {
	font-size: 1.125rem;
	font-weight: 800;
	color: var(--color-text);
	margin: 0;
}

.hotel-highlight-card--sm .hotel-highlight-title {
	font-size: 0.9375rem;
}

.hotel-highlight-location {
	display: flex;
	align-items: center;
	gap: 6px;
	font-size: 0.8125rem;
	color: var(--color-text-light);
}

.hotel-highlight-location .icon {
	width: 14px;
	height: 14px;
	color: var(--color-primary);
	flex-shrink: 0;
}

.hotel-highlight-cta {
	margin-top: auto;
	align-self: flex-start;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	background: var(--color-bg-alt);
	color: var(--color-primary-dark);
	font-size: 0.8125rem;
	font-weight: 700;
	padding: 8px 16px;
	border-radius: 999px;
}

.hotel-highlight-cta:hover {
	background: var(--color-primary);
	color: #fff;
}

.hotel-highlight-list {
	display: flex;
	flex-direction: column;
	gap: 16px;
	height: 100%;
}

.hotel-highlight-list .hotel-highlight-card {
	flex: 1;
}

@media (max-width: 900px) {
	.hotel-bestseller-layout {
		grid-template-columns: 1fr;
	}

	.hotel-highlight-list {
		flex-direction: row;
		flex-wrap: wrap;
	}

	.hotel-highlight-list .hotel-highlight-card {
		flex: 1 1 260px;
	}
}

@media (max-width: 600px) {
	.hotel-highlight-card--sm {
		flex-direction: column;
	}

	.hotel-highlight-card--sm .hotel-highlight-photo {
		width: 100%;
	}

	.hotel-highlight-card--sm .hotel-highlight-photo img {
		aspect-ratio: 16 / 10;
	}
}

/* ---- Inline stats line inside the existing .partners section (kept
   as-is otherwise — real logos, auto-scrolling marquee, unchanged) ---- */
.partners-stats-line {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0 0 1.6em;
	font-size: 0.9375rem;
	font-weight: 700;
	color: var(--color-primary-dark);
}

.partners-stats-line span:not(.partners-stats-dot) {
	display: inline-flex;
}

.partners-stats-dot {
	color: var(--color-border);
}

.partners-script {
	position: absolute;
	top: 24px;
	right: max(20px, calc((100% - var(--container-width)) / 2 + 20px));
	color: var(--color-primary-dark);
	font-size: 1.0625rem;
	text-align: right;
	opacity: 0.85;
}

.partners.home-section {
	position: relative;
}

@media (max-width: 900px) {
	.partners-script {
		display: none;
	}
}

/* =========================================================================
   Cẩm Nang teaser: intro column + post grid (replaces the plain
   .section-head-v2 row above .post-grid on the homepage only)
   ========================================================================= */
.guide-teaser-layout {
	display: grid;
	grid-template-columns: 280px 1fr;
	gap: 28px;
	align-items: start;
}

.guide-teaser-intro .section-eyebrow,
.guide-teaser-intro .section-title {
	text-align: left;
}

.guide-teaser-intro .section-title {
	margin-bottom: 0.5em;
}

.guide-teaser-intro p {
	color: var(--color-text-light);
	margin-bottom: 1.4em;
}

.guide-teaser-layout .post-grid {
	flex: 1;
}

/* Mobile-only "Xem thêm →" CTA, matching the product rows' section-head-v2
   .link-more style — shown in place of the desktop .btn.btn-primary
   below, see the @media block below. */
.guide-teaser-more {
	display: none;
}

.post-card-meta-row {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	margin-top: 8px;
}

.post-card-date {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 0.75rem;
	color: var(--color-text-light);
}

.post-card-date .icon {
	width: 13px;
	height: 13px;
}

.post-card-arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	border-radius: 50%;
	background: var(--color-bg-alt);
	color: var(--color-primary-dark);
	font-weight: 800;
	flex-shrink: 0;
}

.post-card-arrow:hover {
	background: var(--color-primary);
	color: #fff;
}

@media (max-width: 900px) {
	.guide-teaser-layout {
		grid-template-columns: 1fr;
	}

	/* Mobile CTA matches the product rows' own section-head-v2 pattern —
	   title on the left, a small "Xem thêm →" link on the right, replacing
	   the desktop's stacked eyebrow/desc/big button (hidden below). */
	.guide-teaser-intro {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 12px;
	}

	.guide-teaser-head {
		min-width: 0;
		flex: 1;
	}

	.guide-teaser-head .section-title {
		font-size: 1.0625rem;
		margin-bottom: 0;
	}

	.guide-teaser-intro .section-eyebrow,
	.guide-teaser-intro .guide-teaser-desc,
	.guide-teaser-intro > .btn.btn-primary {
		display: none;
	}

	.guide-teaser-more {
		display: inline-flex;
		align-items: center;
		flex-shrink: 0;
	}


	#guide .post-grid::-webkit-scrollbar {
		display: none;
	}


	#guide .post-grid .post-card {
		flex: 0 0 calc(100% - 40px);
		scroll-snap-align: start;
	}

	#guide .post-grid .post-card:first-child {
		margin-left: 20px;
	}

	#guide .post-grid .post-card:last-child {
		margin-right: 20px;
	}
}
