/* ==========================================================================
   Cẩm nang du lịch Nha Trang — chuyên mục của Gỏi Cá Mai Cô Hằng
   Design tokens bám theo design system goicamaicohang.com
   ========================================================================== */

:root {
	--c-cream: #faf9f6;
	--c-cream-warm: #f7f1e3;
	--c-mint-wash: #ecf4ee;
	--c-green: #0b5d3f;
	--c-green-deep: #0b4a34;
	--c-green-leaf: #0d6e17;
	--c-red: #b64a34;
	--c-red-bright: #d84f35;
	--c-red-grad-a: #a13a26;
	--c-red-grad-b: #c75b40;
	--c-gold: #e9b949;
	--c-brown-text: rgba(123, 79, 57, .82);
	--c-cream-text: #fff8e7;

	--font-serif: 'Source Serif 4', Georgia, serif;
	--font-sans: 'Be Vietnam Pro', -apple-system, 'Segoe UI', sans-serif;

	--container: 1160px;
	--radius: 18px;
	--shadow-card: 0 10px 30px rgba(11, 74, 52, .08);
	--shadow-card-hover: 0 18px 44px rgba(11, 74, 52, .16);
	--map-h: 460px;   /* chiều cao dùng chung cho bản đồ 3D, Google Maps và 360° */
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
	font-family: var(--font-sans);
	background: var(--c-cream);
	color: var(--c-brown-text);
	font-size: 16.5px;
	line-height: 1.75;
	-webkit-font-smoothing: antialiased;
}

img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; }

h1, h2, h3, .serif { font-family: var(--font-serif); color: var(--c-green); }

.container { max-width: var(--container); margin: 0 auto; padding: 0 22px; }

/* ------------------------------------------------------------ header/nav */

.site-header {
	position: sticky; top: 0; z-index: 50;
	background: rgba(250, 249, 246, .92);
	backdrop-filter: blur(12px);
	border-bottom: 1px solid rgba(11, 93, 63, .1);
}

.site-header__inner {
	display: flex; align-items: center; justify-content: space-between;
	gap: 18px; padding: 14px 22px;
	max-width: var(--container); margin: 0 auto;
}

.site-brand { display: flex; flex-direction: column; line-height: 1.25; }
.site-brand__top { font-family: var(--font-serif); font-weight: 800; font-size: 19px; color: var(--c-green); }
.site-brand__top em { color: var(--c-red); font-style: normal; }
.site-brand__sub { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--c-red); font-weight: 600; }

.site-nav { display: flex; gap: 26px; align-items: center; }
.site-nav a { font-weight: 600; font-size: 14.5px; color: var(--c-green); position: relative; }
.site-nav a:hover { color: var(--c-red); }
.site-nav a.is-cta {
	background: var(--c-green-leaf); color: #fff;
	padding: 9px 18px; border-radius: 99px; font-size: 13.5px;
	transition: background .2s;
}
.site-nav a.is-cta:hover { background: var(--c-green); color: #fff; }

.nav-toggle { display: none; background: none; border: none; cursor: pointer; padding: 8px; }
.nav-toggle span { display: block; width: 24px; height: 2.5px; background: var(--c-green); margin: 5px 0; border-radius: 2px; transition: .25s; }

@media (max-width: 860px) {
	.nav-toggle { display: block; }
	.site-nav {
		position: absolute; top: 100%; left: 0; right: 0;
		flex-direction: column; align-items: flex-start; gap: 0;
		background: var(--c-cream); border-bottom: 1px solid rgba(11, 93, 63, .12);
		max-height: 0; overflow: hidden; transition: max-height .3s ease;
	}
	.site-nav.is-open { max-height: 360px; }
	.site-nav a { padding: 13px 24px; width: 100%; border-top: 1px solid rgba(11, 93, 63, .07); }
	.site-nav a.is-cta { border-radius: 0; background: var(--c-green-deep); }
}

/* ----------------------------------------------------------------- hero */

.hero {
	background: linear-gradient(180deg, var(--c-mint-wash) 0%, var(--c-cream) 100%);
	padding: 76px 0 60px;
	text-align: center;
	position: relative; overflow: hidden;
}
.hero__eyebrow {
	display: inline-block; font-size: 12.5px; font-weight: 700;
	letter-spacing: .22em; text-transform: uppercase; color: var(--c-red);
	margin-bottom: 18px;
}
.hero h1 {
	font-size: clamp(40px, 7.4vw, 84px);
	font-weight: 800; line-height: 1.04; letter-spacing: -.01em;
	margin-bottom: 22px;
}
.hero h1 .grad {
	background: linear-gradient(120deg, var(--c-red-grad-a), var(--c-red-grad-b));
	-webkit-background-clip: text; background-clip: text; color: transparent;
}
.hero__lead { max-width: 640px; margin: 0 auto 34px; font-size: 18px; }
.hero__actions { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }

.btn {
	display: inline-block; font-weight: 700; font-size: 15px;
	padding: 14px 30px; border-radius: 99px;
	transition: transform .18s, box-shadow .18s, background .18s;
}
.btn--primary { background: var(--c-green-leaf); color: #fff; box-shadow: 0 8px 22px rgba(13, 110, 23, .25); }
.btn--primary:hover { background: var(--c-green); transform: translateY(-2px); }
.btn--ghost { border: 2px solid rgba(11, 93, 63, .3); color: var(--c-green); }
.btn--ghost:hover { border-color: var(--c-green); background: rgba(11, 93, 63, .05); }
.btn--gold { background: var(--c-gold); color: var(--c-green-deep); box-shadow: 0 8px 22px rgba(233, 185, 73, .35); }
.btn--gold:hover { transform: translateY(-2px); }

/* ------------------------------------------------------- chapter marker */

.section { padding: 74px 0; }
.section--warm { background: var(--c-cream-warm); }
.section--deep { background: var(--c-green-deep); }
.section--deep h2, .section--deep h3 { color: var(--c-cream-text); }
.section--deep p { color: rgba(255, 248, 231, .78); }

.chapter { text-align: center; max-width: 720px; margin: 0 auto 46px; }
.chapter__roman {
	font-family: var(--font-serif); font-weight: 800; font-size: 15px;
	color: var(--c-gold); letter-spacing: .3em;
}
.chapter__eyebrow {
	font-size: 12.5px; font-weight: 700; letter-spacing: .2em;
	text-transform: uppercase; color: var(--c-red); margin: 6px 0 12px;
}
.section--deep .chapter__eyebrow { color: var(--c-gold); }
.chapter h2 { font-size: clamp(30px, 5.2vw, 52px); font-weight: 800; line-height: 1.1; margin-bottom: 16px; }

/* ------------------------------------------------------------ card grid */

.card-grid {
	display: grid; gap: 26px;
	grid-template-columns: repeat(3, 1fr);
}
@media (max-width: 980px) { .card-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 620px) { .card-grid { grid-template-columns: 1fr; } }

.place-card {
	background: #fff; border-radius: var(--radius); overflow: hidden;
	box-shadow: var(--shadow-card);
	transition: transform .22s, box-shadow .22s;
	display: flex; flex-direction: column;
	position: relative;
}
.place-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-card-hover); }
.place-card__img { aspect-ratio: 16 / 10; object-fit: cover; width: 100%; }
.place-card__body { padding: 20px 22px 24px; flex: 1; display: flex; flex-direction: column; }
.place-card h3 { font-size: 21px; font-weight: 800; margin-bottom: 7px; }
.place-card p { font-size: 14.5px; line-height: 1.6; flex: 1; }
.place-card__meta { margin-top: 14px; font-size: 12.5px; font-weight: 600; color: var(--c-green); display: flex; gap: 12px; flex-wrap: wrap; }
.place-card__badge {
	position: absolute; top: 14px; left: 14px;
	background: var(--c-red-bright); color: #fff;
	font-size: 11.5px; font-weight: 700; letter-spacing: .06em;
	padding: 6px 13px; border-radius: 99px;
	box-shadow: 0 4px 14px rgba(216, 79, 53, .4);
}

/* ------------------------------------------------------------ tag pills */
/* 3 nhóm màu: exp = loại trải nghiệm, time = thời điểm vàng, perk = điểm đáng tiền */

.tag-row { display: flex; flex-wrap: wrap; gap: 6px; }
.tag {
	display: inline-block; font-size: 11.5px; font-weight: 700;
	letter-spacing: .03em; padding: 4px 11px; border-radius: 99px;
	line-height: 1.5; white-space: nowrap;
}
.tag--exp  { background: rgba(11, 93, 63, .1); color: var(--c-green); }
.tag--time { background: rgba(233, 185, 73, .22); color: #8a6710; }
.tag--perk { background: rgba(182, 74, 52, .1); color: var(--c-red); }

/* Trên card trang chủ: pill nằm hẳn trong ảnh, góc dưới trái, nền kính mờ */
.place-card__media { position: relative; }
.place-card__media::after {
	content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 64px;
	background: linear-gradient(180deg, transparent, rgba(11, 74, 52, .45));
	pointer-events: none;
}
.place-card__tags {
	position: absolute; left: 12px; right: 12px; bottom: 11px; z-index: 2;
}
.place-card__tags .tag {
	background: rgba(250, 249, 246, .9);
	backdrop-filter: blur(5px);
	box-shadow: 0 2px 8px rgba(0, 0, 0, .18);
}
.place-card__tags .tag--exp  { color: var(--c-green); }
.place-card__tags .tag--time { color: #8a6710; }
.place-card__tags .tag--perk { color: var(--c-red); }

/* Trên hero trang profile (nền ảnh tối) */
.place-hero__tags { margin-top: 16px; }
.place-hero__tags .tag {
	background: rgba(255, 248, 231, .16); color: var(--c-cream-text);
	border: 1px solid rgba(255, 248, 231, .35);
	backdrop-filter: blur(6px);
}
.place-hero__tags .tag--time { border-color: rgba(233, 185, 73, .65); color: var(--c-gold); }

/* Card "sắp cập nhật" (nhóm tour đảo sẽ bổ sung dần) */
.place-card--soon { cursor: default; }
.place-card--soon:hover { transform: none; box-shadow: var(--shadow-card); }
.place-card__media--soon {
	aspect-ratio: 16 / 10;
	display: flex; align-items: center; justify-content: center;
	background:
		repeating-linear-gradient(-45deg, rgba(11, 93, 63, .05) 0 14px, transparent 14px 28px),
		var(--c-mint-wash);
}
.place-card__media--soon span {
	font-size: 12px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase;
	color: var(--c-green); border: 1.5px dashed rgba(11, 93, 63, .4);
	padding: 8px 18px; border-radius: 99px; background: rgba(250, 249, 246, .8);
}
.place-card--soon h3 { color: rgba(11, 93, 63, .65); }
.place-card__media--soon::after { display: none; }

/* ------------------------------------------------------ itinerary cards */

.iti-group { margin-bottom: 44px; }
.iti-group__title {
	font-family: var(--font-serif); font-weight: 800; font-size: 24px;
	color: var(--c-cream-text); margin-bottom: 6px;
}
.iti-group__sub { font-size: 14px; color: rgba(255, 248, 231, .65); margin-bottom: 20px; }

.iti-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; }
@media (max-width: 1080px) { .iti-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 640px) { .iti-grid { grid-template-columns: repeat(2, 1fr); } }

.iti-card {
	background: rgba(255, 248, 231, .07);
	border: 1px solid rgba(233, 185, 73, .25);
	border-radius: 14px; padding: 20px 18px;
	text-align: center; transition: background .2s, transform .2s, border-color .2s;
}
.iti-card:hover { background: rgba(233, 185, 73, .14); transform: translateY(-4px); border-color: var(--c-gold); }
.iti-card__days { font-family: var(--font-serif); font-weight: 800; font-size: 34px; color: var(--c-gold); line-height: 1; }
.iti-card__label { font-size: 13px; font-weight: 600; color: var(--c-cream-text); margin-top: 6px; }
.iti-card__hint { font-size: 11.5px; color: rgba(255, 248, 231, .55); margin-top: 3px; }

/* -------------------------------------------------------- place profile */

.place-hero { position: relative; min-height: 440px; display: flex; align-items: flex-end; overflow: hidden; }
.place-hero__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.place-hero::after {
	content: ''; position: absolute; inset: 0;
	background: linear-gradient(180deg, rgba(11, 74, 52, 0) 30%, rgba(11, 74, 52, .82) 100%);
}
.place-hero__content { position: relative; z-index: 2; padding: 60px 0 44px; width: 100%; }
.place-hero__cat {
	display: inline-block; background: var(--c-gold); color: var(--c-green-deep);
	font-size: 12px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
	padding: 6px 15px; border-radius: 99px; margin-bottom: 16px;
}
.place-hero__cat--featured { background: var(--c-red-bright); color: #fff; }
.place-hero h1 { color: #fff; font-size: clamp(34px, 5.6vw, 62px); font-weight: 800; line-height: 1.06; margin-bottom: 10px; }
.place-hero__tagline { color: rgba(255, 248, 231, .92); font-size: 18px; max-width: 640px; }

.place-layout { display: grid; grid-template-columns: 1.7fr 1fr; gap: 44px; align-items: start; }
@media (max-width: 880px) { .place-layout { grid-template-columns: 1fr; } }

.place-desc p { margin-bottom: 18px; font-size: 17px; }

.info-box {
	background: #fff; border-radius: var(--radius); padding: 26px 26px 22px;
	box-shadow: var(--shadow-card); position: sticky; top: 90px;
}
.info-box h3 { font-size: 17px; font-weight: 800; margin-bottom: 16px; letter-spacing: .02em; }
.info-box dl { display: grid; gap: 13px; }
.info-box dt { font-size: 11.5px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--c-red); }
.info-box dd { font-size: 15px; color: var(--c-green-deep); font-weight: 500; margin-top: 2px; }
.info-box .btn { width: 100%; text-align: center; margin-top: 18px; }

.why-list { display: grid; gap: 12px; margin-top: 8px; }
.why-list li {
	background: #fff; border-left: 4px solid var(--c-gold);
	border-radius: 10px; padding: 14px 18px;
	font-size: 15px; color: var(--c-green-deep); font-weight: 500;
	box-shadow: 0 4px 14px rgba(11, 74, 52, .05);
}

.tip-box {
	background: var(--c-green-deep); color: var(--c-cream-text);
	border-radius: var(--radius); padding: 24px 28px; margin-top: 34px;
	position: relative;
}
.tip-box::before {
	content: 'MẸO ĐỊA PHƯƠNG'; display: block;
	font-size: 11px; font-weight: 700; letter-spacing: .2em; color: var(--c-gold);
	margin-bottom: 8px;
}
.tip-box p { color: rgba(255, 248, 231, .9); font-size: 15.5px; }

.subheading {
	font-family: var(--font-serif); font-weight: 800; font-size: 26px;
	color: var(--c-green); margin: 44px 0 18px;
}

/* mini cards (nearby / itinerary links) */
.mini-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (max-width: 720px) { .mini-grid { grid-template-columns: 1fr; } }
.mini-card {
	display: flex; gap: 14px; align-items: center;
	background: #fff; border-radius: 14px; padding: 12px;
	box-shadow: var(--shadow-card); transition: transform .2s, box-shadow .2s;
}
.mini-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); }
.mini-card img { width: 74px; height: 74px; border-radius: 10px; object-fit: cover; flex-shrink: 0; }
.mini-card__name { font-weight: 700; font-size: 15px; color: var(--c-green); line-height: 1.3; }
.mini-card__cat { font-size: 12px; color: var(--c-red); font-weight: 600; margin-top: 3px; }

.chip-row { display: flex; flex-wrap: wrap; gap: 10px; }
.chip {
	background: #fff; border: 1.5px solid rgba(11, 93, 63, .18);
	border-radius: 99px; padding: 8px 18px;
	font-size: 13.5px; font-weight: 600; color: var(--c-green);
	transition: border-color .2s, background .2s;
}
.chip:hover { border-color: var(--c-red); color: var(--c-red); background: rgba(182, 74, 52, .05); }

/* ------------------------------------------------------ itinerary page */

.iti-hero {
	background: linear-gradient(160deg, var(--c-green-deep) 0%, var(--c-green) 100%);
	padding: 66px 0 54px; color: var(--c-cream-text);
	position: relative; overflow: hidden;
}
.iti-hero::after {
	content: ''; position: absolute; right: -120px; top: -120px;
	width: 380px; height: 380px; border-radius: 50%;
	background: radial-gradient(circle, rgba(233, 185, 73, .22), transparent 70%);
}
.iti-hero__eyebrow { font-size: 12.5px; font-weight: 700; letter-spacing: .22em; text-transform: uppercase; color: var(--c-gold); margin-bottom: 14px; }
.iti-hero h1 { color: #fff; font-size: clamp(32px, 5.4vw, 58px); font-weight: 800; line-height: 1.08; margin-bottom: 16px; }
.iti-hero p { max-width: 680px; color: rgba(255, 248, 231, .85); font-size: 17px; }

.iti-facts { display: flex; gap: 34px; flex-wrap: wrap; margin-top: 30px; }
.iti-fact__num { font-family: var(--font-serif); font-weight: 800; font-size: 30px; color: var(--c-gold); line-height: 1.1; }
.iti-fact__label { font-size: 12.5px; letter-spacing: .1em; text-transform: uppercase; color: rgba(255, 248, 231, .65); font-weight: 600; }

/* switcher pills */
.switcher { margin: 26px 0 0; display: flex; flex-direction: column; gap: 10px; }
.switcher__label { font-size: 11.5px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: rgba(255, 248, 231, .6); }
.switcher__row { display: flex; flex-wrap: wrap; gap: 8px; }
.pill {
	border: 1.5px solid rgba(255, 248, 231, .3); color: var(--c-cream-text);
	border-radius: 99px; padding: 7px 17px; font-size: 13.5px; font-weight: 600;
	transition: background .2s, border-color .2s;
}
.pill:hover { border-color: var(--c-gold); }
.pill.is-active { background: var(--c-gold); color: var(--c-green-deep); border-color: var(--c-gold); }

/* timeline */
.day-block { margin-bottom: 54px; }
.day-block__header { display: flex; align-items: baseline; gap: 16px; margin-bottom: 8px; flex-wrap: wrap; }
.day-block__num {
	font-family: var(--font-serif); font-weight: 800; font-size: 15px;
	color: var(--c-gold); letter-spacing: .24em; text-transform: uppercase;
}
.day-block h2 { font-size: clamp(24px, 3.6vw, 34px); font-weight: 800; }
.day-block__sub { font-size: 15px; margin-bottom: 26px; }

.timeline { position: relative; padding-left: 30px; }
.timeline::before {
	content: ''; position: absolute; left: 8px; top: 8px; bottom: 8px;
	width: 2px; background: linear-gradient(180deg, var(--c-gold), rgba(11, 93, 63, .25));
}
.tl-item { position: relative; margin-bottom: 22px; }
.tl-item::before {
	content: ''; position: absolute; left: -28px; top: 22px;
	width: 14px; height: 14px; border-radius: 50%;
	background: var(--c-cream); border: 3.5px solid var(--c-red-bright);
}
.tl-card {
	background: #fff; border-radius: 14px; padding: 18px 22px;
	box-shadow: var(--shadow-card);
	display: flex; gap: 18px; align-items: center;
	transition: transform .2s, box-shadow .2s;
}
a.tl-card:hover { transform: translateX(6px); box-shadow: var(--shadow-card-hover); }
.tl-card img { width: 86px; height: 86px; border-radius: 10px; object-fit: cover; flex-shrink: 0; }
.tl-card__time {
	font-size: 11px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase;
	color: var(--c-red); margin-bottom: 3px;
}
.tl-card__name { font-family: var(--font-serif); font-weight: 800; font-size: 18.5px; color: var(--c-green); line-height: 1.25; }
.tl-card__note { font-size: 14px; margin-top: 4px; line-height: 1.55; }
.tl-card--featured { border: 2px solid var(--c-gold); background: linear-gradient(120deg, #fffdf5, #fff8e7); }
.tl-card--featured .tl-card__name { color: var(--c-red); }
@media (max-width: 560px) {
	.tl-card { flex-direction: column; align-items: flex-start; }
	.tl-card img { width: 100%; height: 150px; }
}

/* tips */
.tips-list { display: grid; gap: 14px; max-width: 780px; }
.tips-list li {
	background: #fff; border-radius: 12px; padding: 16px 20px 16px 52px;
	position: relative; font-size: 15px; color: var(--c-green-deep);
	box-shadow: 0 4px 14px rgba(11, 74, 52, .05);
}
.tips-list li::before {
	content: '✓'; position: absolute; left: 20px; top: 15px;
	color: var(--c-red-bright); font-weight: 800; font-size: 17px;
}

/* ------------------------------------------------- profile: facts bar */

.facts-bar { background: var(--c-green-deep); }
.facts-bar__inner {
	padding-left: 0; padding-right: 0;
	display: grid; grid-template-columns: repeat(auto-fit, minmax(178px, 1fr)); gap: 16px 22px;
	padding-top: 18px; padding-bottom: 18px;
	align-items: start;
}
.fact { display: flex; gap: 10px; align-items: center; min-width: 0; }
.fact__ico { width: 19px; height: 19px; flex-shrink: 0; color: var(--c-gold); }
.fact small {
	display: block;
	color: rgba(255, 248, 231, .5);
	font-size: 10px; font-weight: 600; letter-spacing: .09em; text-transform: uppercase;
	margin-bottom: 3px;
}
.fact b {
	display: block; color: var(--c-cream-text);
	font-size: 14px; font-weight: 700; line-height: 1.35;
}
.fact--addr b { font-weight: 600; }
.facts-bar__acts { grid-column: 1 / -1; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.facts-bar__link { color: rgba(255, 248, 231, .8); font-size: 13px; font-weight: 600; text-decoration: underline; }
.facts-bar__link:hover { color: var(--c-gold); }
@media (max-width: 860px) {
	.facts-bar__inner { grid-template-columns: repeat(2, 1fr); gap: 14px 16px; }
	.fact--addr { grid-column: 1 / -1; }
}
@media (max-width: 480px) {
	.facts-bar__inner { gap: 13px 12px; padding-top: 15px; padding-bottom: 15px; }
	.fact { gap: 8px; }
	.fact__ico { width: 17px; height: 17px; }
	.fact b { font-size: 13px; }
}

/* ------------------------------------------------- profile: page nav */

.page-nav {
	position: sticky; top: 61px; z-index: 40;
	background: rgba(250, 249, 246, .95); backdrop-filter: blur(10px);
	border-bottom: 1px solid rgba(11, 93, 63, .1);
}
.page-nav__inner { display: flex; gap: 4px; overflow-x: auto; padding-top: 0; padding-bottom: 0; }
.page-nav a {
	padding: 12px 14px; font-size: 13.5px; font-weight: 600; color: var(--c-green);
	white-space: nowrap; border-bottom: 2.5px solid transparent;
}
.page-nav a:hover { color: var(--c-red); border-bottom-color: var(--c-red); }
.page-nav__cta { margin-left: auto; color: var(--c-red) !important; font-weight: 700 !important; }
@media (max-width: 860px) { .page-nav { top: 0; } }

/* --------------------------------------------- profile: map explorer */

.map-explorer {
	background: #fff; border-radius: var(--radius); overflow: hidden;
	box-shadow: var(--shadow-card);
}
.map-tabs {
	display: flex; gap: 8px; padding: 8px; width: fit-content;
	background: var(--c-cream-warm); border: 1px solid rgba(11, 93, 63, .1);
	border-radius: var(--radius); margin-bottom: 14px;
}
.map-tab {
	flex: 0 0 auto;
	display: flex; align-items: center; justify-content: center; gap: 7px;
	height: 44px; padding: 0 15px;
	border: 1.5px solid rgba(11, 93, 63, .15); border-radius: 14px; background: #fff; cursor: pointer;
	color: rgba(11, 93, 63, .75);
	transition: border-color .2s, background .2s, transform .15s, box-shadow .2s, color .2s;
}
.map-tab__ico { width: 21px; height: 21px; flex-shrink: 0; }
.map-tab span {
	font-family: var(--font-sans); font-size: 13.5px; font-weight: 700;
	letter-spacing: .01em; white-space: nowrap;
}
.map-tab:hover { border-color: var(--c-green); color: var(--c-green); transform: translateY(-1px); }
.map-tab.is-active {
	background: var(--c-green-deep); border-color: var(--c-green-deep); color: var(--c-gold);
	box-shadow: 0 6px 18px rgba(11, 74, 52, .25);
}
@media (max-width: 480px) {
	.map-tab { height: 42px; padding: 0 13px; gap: 6px; }
	.map-tab__ico { width: 19px; height: 19px; }
	.map-tab span { font-size: 12.5px; }
}

/* bản đồ 3D MapLibre (OpenFreeMap liberty — cùng chất liệu map web quán) */
#ml-map { height: var(--map-h); background: var(--c-mint-wash); }
@media (max-width: 720px) { :root { --map-h: clamp(420px, 72vh, 640px); } }

.ml-marker { text-align: center; cursor: pointer; text-decoration: none; z-index: 5 !important; }
.ml-marker--near { z-index: 3 !important; }
.ml-marker__label {
	background: linear-gradient(135deg, var(--c-red-grad-a), var(--c-red-grad-b));
	color: #fff8e7; font-family: var(--font-sans); font-size: 14px; font-weight: 800;
	padding: 8px 16px; border-radius: 12px; white-space: nowrap;
	box-shadow: 0 6px 20px rgba(161, 58, 38, .45);
}
.ml-marker__tail {
	width: 0; height: 0; margin: 0 auto;
	border-left: 8px solid transparent; border-right: 8px solid transparent;
	border-top: 9px solid var(--c-red-grad-b);
}
.ml-marker__dot { font-size: 26px; line-height: 1; margin-top: -2px; filter: drop-shadow(0 3px 5px rgba(0,0,0,.35)); }
.ml-marker--near .ml-marker__label {
	background: var(--c-green-deep); color: var(--c-cream-text);
	font-size: 12px; font-weight: 700; padding: 4px 12px 4px 4px;
	display: flex; align-items: center; gap: 8px;
	box-shadow: 0 4px 14px rgba(11, 74, 52, .35);
}
.ml-marker--near .ml-marker__tail { border-top-color: var(--c-green-deep); }
.ml-marker--near:hover .ml-marker__label { background: var(--c-green); }
.ml-marker__dist {
	display: none;
	font-size: 10px; font-weight: 600; letter-spacing: .01em;
	color: rgba(255, 248, 231, .68); margin-top: 1px; white-space: nowrap;
}
.ml-marker--near:hover .ml-marker__dist,
.ml-marker--near.is-close .ml-marker__dist { display: block; }
.ml-marker--home .ml-marker__dist { color: rgba(11, 74, 52, .7); }

/* quán nhà — nhãn vàng nổi bật */
.ml-marker--home .ml-marker__label { background: var(--c-gold); color: var(--c-green-deep); box-shadow: 0 4px 16px rgba(233, 185, 73, .5); }
.ml-marker--home .ml-marker__tail { border-top-color: var(--c-gold); }

/* zoom quá xa: thu nhãn phụ thành chấm nhỏ cho đỡ rối */
.ml-marker--near.is-zoomed-out .ml-marker__label,
.ml-marker--near.is-zoomed-out .ml-marker__tail { display: none; }
.ml-marker--near.is-zoomed-out::after {
	content: ''; display: block; width: 11px; height: 11px; border-radius: 50%;
	background: var(--c-green-deep); border: 2.5px solid #fff8e7; margin: 0 auto;
	box-shadow: 0 2px 6px rgba(0,0,0,.3);
}
.ml-marker--home.is-zoomed-out::after { background: var(--c-gold); }

/* footer chỉ đường dưới bản đồ */

.map-pane { display: none; }
.map-pane.is-active { display: block; }
.map-pane iframe { width: 100%; height: var(--map-h); border: 0; display: block; background: var(--c-mint-wash); }
.map-pane__hint { font-size: 12.5px; padding: 10px 16px; color: rgba(123, 79, 57, .7); }
.map-pane__hint a { color: var(--c-green); font-weight: 600; text-decoration: underline; }

/* pano 360 teaser */

/* ------------------------------------------ profile: masonry gallery */

.subheading__count {
	font-family: var(--font-sans); font-size: 12.5px; font-weight: 700;
	background: rgba(11, 93, 63, .1); color: var(--c-green);
	border-radius: 99px; padding: 4px 12px; vertical-align: middle; margin-left: 8px;
}
/* ---- Thư viện ảnh: dải mosaic 2 hàng, vuốt ngang ---- */
.gallery-wrap { margin: 0 0 34px; display: flex; flex-direction: column; gap: 10px; }
.gallery-rail {
	height: min(58vh, 480px);
	cursor: grab;
	display: grid; grid-auto-flow: column;
	grid-template-rows: repeat(2, 1fr);
	grid-auto-columns: minmax(148px, 15vw);
	gap: 10px;
	overflow-x: auto; overflow-y: hidden;
	scrollbar-width: none;
	scroll-snap-type: x proximity;
	padding-right: 22px;
	overscroll-behavior-x: contain;
	touch-action: pan-x;
}
.gallery-rail::-webkit-scrollbar { display: none; }
.gallery-rail .gallery-item {
	position: relative; display: block; margin: 0;
	border-radius: 16px; overflow: hidden; cursor: zoom-in;
	box-shadow: 0 6px 18px rgba(11, 74, 52, .14);
	scroll-snap-align: center;
	background: var(--c-mint-wash);
}
.gallery-rail .gallery-item img {
	width: 100%; height: 100%; object-fit: cover; display: block; aspect-ratio: auto;
	transform: scale(1.24);                      /* dư biên để ảnh trôi khi vuốt */
	will-change: transform;
}

.gallery-rail.is-dragging { cursor: grabbing; scroll-snap-type: none; }
/* nhịp mosaic: ô bìa lớn 2x2 -> ô cao -> hai ô nhỏ -> ô ngang rộng -> lặp lại */
.gallery-rail .gallery-item--cover { grid-row: span 2; grid-column: span 2; }
.gallery-rail .gallery-item:nth-child(6n + 2) { grid-row: span 2; }
.gallery-rail .gallery-item:nth-child(6n + 5) { grid-column: span 2; }
/* lớp chữ trên ô bìa */
.gallery-cover {
	position: absolute; left: 0; right: 0; bottom: 0;
	display: flex; flex-direction: column; gap: 2px;
	padding: 40px 18px 16px;
	background: linear-gradient(transparent, rgba(11, 74, 52, .82));
	color: #fff8e7;
}
.gallery-cover b { font: 800 20px/1.1 var(--font-serif); }
.gallery-cover small { font: 600 11.5px/1.3 var(--font-sans); letter-spacing: .05em; text-transform: uppercase; opacity: .8; }
.gallery-index {
	font: 800 12.5px/1 var(--font-sans); letter-spacing: .08em;
	color: var(--c-green-deep); font-variant-numeric: tabular-nums;
	background: rgba(11, 93, 63, .09); border-radius: 999px; padding: 6px 11px;
}
.gallery-hint__txt { white-space: nowrap; }
.gallery-hint {
	display: flex; align-items: center; gap: 12px;
	font-size: 12.5px; font-weight: 600; color: rgba(123, 79, 57, .7);
	padding: 0 2px;
}
.gallery-hint__bar { flex: 1; height: 4px; border-radius: 3px; background: rgba(11, 93, 63, .12); overflow: hidden; }
.gallery-hint__bar i { display: block; height: 100%; width: 12%; border-radius: 3px; background: var(--c-green); transition: width .12s linear, transform .12s linear; }
@media (max-width: 860px) {
	.gallery-hint__txt { display: none; }
	.gallery-rail { height: min(54vh, 430px); grid-auto-columns: minmax(122px, 34vw); gap: 8px; padding-right: 16px; }
	.gallery-cover { padding: 32px 14px 13px; }
	.gallery-cover b { font-size: 17px; }
	.gallery-hint { font-size: 11.5px; gap: 9px; }
}

/* ---- Tường ảnh toàn màn hình: mosaic, chụm 2 ngón phóng to cả tường ---- */
.photowall {
	position: fixed; inset: 0; z-index: 120; display: none;
	background: #0b0f0d; overscroll-behavior: contain;
}
.photowall.is-open { display: block; }
.photowall__bar {
	position: absolute; top: 0; left: 0; right: 0; z-index: 3;
	display: flex; align-items: center; justify-content: space-between;
	padding: 14px 16px 30px;
	color: #fff8e7; pointer-events: none;
	background: linear-gradient(rgba(0, 0, 0, .6), transparent);
}
.photowall__count { font: 700 14px/1 var(--font-sans); letter-spacing: .04em; }
.photowall__close {
	pointer-events: auto;
	width: 38px; height: 38px; border: 0; border-radius: 50%;
	background: rgba(255, 255, 255, .16); color: #fff8e7;
	font-size: 17px; cursor: pointer; backdrop-filter: blur(6px);
}
.photowall__close:hover { background: rgba(255, 255, 255, .3); }
.photowall__view {
	position: absolute; inset: 0;
	overflow-y: auto; overflow-x: hidden;
	-webkit-overflow-scrolling: touch;
	touch-action: pan-y; overscroll-behavior: contain;
	padding: 62px 0 44px;
}
.photowall__view::-webkit-scrollbar { width: 0; }
.photowall__grid {
	--cols: 4;
	display: grid; grid-template-columns: repeat(var(--cols), 1fr);
	gap: 10px; padding: 0 10px;
	transform-origin: 50% 0;
	will-change: transform;
}
.photowall__cell { overflow: hidden; border-radius: 5px; background: #15201a; aspect-ratio: 1; }
.photowall__cell img { width: 100%; height: 100%; object-fit: cover; display: block; transform: scale(1.16); }
/* nhiều cột thì xen ô lớn cho có nhịp; ít cột (ảnh đã to) thì để đều */
.photowall__grid:not(.is-plain) .photowall__cell:nth-child(9n + 1) { grid-column: span 2; grid-row: span 2; }
.photowall__grid.is-plain { gap: 16px; padding: 0 12px; }
.photowall__grid.is-plain .photowall__cell { aspect-ratio: 4 / 3; border-radius: 12px; }
.photowall__hint {
	position: absolute; left: 0; right: 0; bottom: 16px; z-index: 3;
	text-align: center; pointer-events: none;
	color: rgba(255, 248, 231, .62); font: 600 12px/1 var(--font-sans);
}
@media (max-width: 860px) {
	.photowall__grid { gap: 8px; padding: 0 8px; }
	.photowall__view { padding: 58px 0 40px; }
}

.gallery-item { display: block; border-radius: 14px; overflow: hidden; }
.gallery-item img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; }

/* --------------------------------------------------------- promo (quán) */

.promo {
	background: var(--c-green-deep); border-radius: var(--radius);
	padding: 40px 42px; margin-top: 60px;
	display: flex; gap: 30px; align-items: center; flex-wrap: wrap;
	position: relative; overflow: hidden;
}
.promo::before {
	content: '1977'; position: absolute; right: 18px; bottom: -34px;
	font-family: var(--font-serif); font-weight: 900; font-size: 150px;
	color: rgba(233, 185, 73, .1); line-height: 1; pointer-events: none;
}
.promo__text { flex: 1; min-width: 260px; }
.promo__eyebrow { font-size: 11.5px; font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: var(--c-gold); margin-bottom: 10px; }
.promo h3, .promo__tieu { color: var(--c-cream-text); font-size: clamp(22px, 3.4vw, 30px); font-weight: 800; line-height: 1.2; margin-bottom: 10px; }

/* CHỈ DÀNH CHO MÁY ĐỌC. Không dùng display:none — thứ bị ẩn kiểu đó thì máy đọc
   màn hình cũng bỏ qua luôn, thành ra không phục vụ ai. Cách này giữ chữ trong
   luồng đọc nhưng thu về một điểm ảnh nên mắt không thấy. */
.chi-doc {
	position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
	overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}
.promo p { color: rgba(255, 248, 231, .8); font-size: 15px; max-width: 520px; }
.promo .btn { flex-shrink: 0; }

/* ---------------------------------------------------------------- footer */

/* ==========================================================================
   CHÂN TRANG                                              (gcm-chan-trang-start)
   Ba nguyên tắc chữ nghĩa, và cả ba đều nhằm một chuyện: một khối chữ dày đặc
   trên nền xanh đậm thì mắt không biết đậu vào đâu.
   1. MỘT điểm nhìn duy nhất — dòng tuyên ngôn cỡ lớn bằng chữ có chân. Mọi thứ
      còn lại nhỏ hơn hẳn nó, không có cỡ chữ nào lưng chừng ở giữa.
   2. Nhãn cột viết HOA, cỡ 11px, giãn chữ rộng — đọc ra là "tiêu đề" nhờ hình
      dáng chứ không nhờ to hay đậm, nên không tranh chỗ với dòng tuyên ngôn.
   3. Ba nấc độ mờ cho ba hạng thông tin: chữ chính 86%, phụ 58%, chân trang 42%.
      Cùng một màu kem, khác nhau ở độ mờ, nên không chỗ nào chọi màu chỗ nào.
   ========================================================================== */
.site-footer {
	/* MÀU RIÊNG CỦA CHÂN TRANG, không đụng biến chung.
	   --c-green-deep (#0b4a34) đang dùng ở 40 chỗ khác trên site — nút, huy hiệu,
	   dải nền — nên không thể đổi nó chỉ vì chân trang. Ở đây khai một bộ màu
	   cục bộ.
	   Xanh cũ (#0b4a34) bạc và phẳng vì thiếu độ tươi, không phải vì thiếu độ
	   đậm — đã thử kéo xuống gần đen thì hoá ra tối om. Nay đi hướng ngược lại:
	   giữ nguyên độ sâu nhưng nâng độ tươi, thành xanh lá rừng có sức sống.
	   Chuyển sắc dọc rất nhẹ (đậm dần xuống đáy) cho khối có chiều sâu mà không
	   thành hoa văn. */
	--ft-nen: #0d6446;
	--ft-nen-day: #09462f;
	--ft-nen-sang: #11724f;
	--ft-chu: #f6f1e4;
	--ft-vang: #d9a94f;

	/* Hai lớp nền chồng nhau: một vệt sáng toả từ mép trên giữa, đặt trên dải
	   chuyển sắc dọc. Chỉ dải dọc thôi thì mảng màu phẳng như tấm giấy dán; thêm
	   vệt sáng thì khối có chỗ hứng sáng và chỗ lùi vào, mắt đọc ra một không
	   gian chứ không phải một ô màu. */
	background:
		radial-gradient(120% 78% at 50% 0%, var(--ft-nen-sang) 0%, transparent 62%),
		linear-gradient(180deg, var(--ft-nen) 0%, var(--ft-nen-day) 100%);
	margin-top: 84px;
	/* Đệm trên chỉ còn bằng một phần ba bản đầu. Chân trang không cần khoảng thở
	   riêng: phía trên nó đã có dải góp ý cách ra 34px và chính thẻ này cách nội
	   dung trang 84px rồi — cộng dồn ba lớp là ra một mảng xanh trống trơn. */
	padding: clamp(22px, 2.4vw, 34px) 0 0;
	color: var(--ft-chu);
	overflow: hidden;                       /* chặn tên cỡ đại làm tràn ngang */
}

/* ---- lưới cột ----
   Cột quán rộng hơn vì phải chứa hai địa chỉ; hai cột liên kết hẹp lại cho vừa
   đúng dòng dài nhất, thừa ra bao nhiêu dồn hết vào khoảng trắng giữa các cột. */
.ft-grid {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.25fr);
	gap: clamp(24px, 4vw, 60px);
	padding-bottom: clamp(20px, 2.4vw, 30px);
	border-bottom: 1px solid rgba(246, 241, 228, .13);
}
@media (max-width: 860px) { .ft-grid { grid-template-columns: 1fr 1fr; gap: 34px 28px; } }
@media (max-width: 560px) { .ft-grid { grid-template-columns: 1fr; gap: 30px; } }

.ft-nhan {
	margin: 0 0 13px;
	font-family: var(--font-sans);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: .15em;
	text-transform: uppercase;
	color: rgba(246, 241, 228, .42);
}

.ft-ds { display: grid; gap: 9px; list-style: none; margin: 0; padding: 0; }
.ft-ds a {
	font: 500 15px/1.35 var(--font-sans);
	color: rgba(246, 241, 228, .86);
	text-decoration: none;
	/* Gạch chân mọc từ trái sang khi rê chuột, thay vì bật ra nguyên vạch — cùng
	   một tín hiệu nhưng đọc ra là một chuyển động, không phải một cú giật. */
	background-image: linear-gradient(currentColor, currentColor);
	background-repeat: no-repeat;
	background-position: 0 100%;
	background-size: 0 1px;
	transition: background-size .28s cubic-bezier(.4, 0, .2, 1), color .18s ease;
}
.ft-ds a:hover { color: var(--ft-chu); background-size: 100% 1px; }

/* ---- khối địa chỉ ---- */
.ft-dc { display: grid; gap: 1px; margin: 0 0 12px; font-style: normal; }
.ft-dc b { font: 600 16px/1.3 var(--font-sans); color: var(--ft-chu); letter-spacing: -.005em; }
.ft-dc span { font: 400 13.5px/1.45 var(--font-sans); color: rgba(246, 241, 228, .58); }
.ft-dc--phu i {
	font-style: normal; font-size: 10.5px; font-weight: 700;
	letter-spacing: .14em; text-transform: uppercase;
	color: rgba(246, 241, 228, .38);
}
.ft-dc--phu b { font-size: 14.5px; font-weight: 500; color: rgba(246, 241, 228, .82); }

.ft-gio { margin: 0 0 10px; font: 400 13.5px/1.45 var(--font-sans); color: rgba(246, 241, 228, .58); }

/* Số điện thoại là thứ đáng bấm nhất trong cả chân trang nên cho nó cỡ chữ của
   một con số, không phải cỡ của một dòng liên kết. */
.ft-tel {
	display: inline-block; margin-bottom: 10px;
	font: 600 22px/1 var(--font-sans);
	letter-spacing: -.01em;
	color: var(--ft-chu);
	text-decoration: none;
	font-variant-numeric: tabular-nums;
	transition: color .18s ease;
}
.ft-tel:hover { color: var(--ft-vang); }

.ft-mui, .ft-gopy {
	display: inline-flex; align-items: center; gap: 7px;
	border: 0; background: none; padding: 0; cursor: pointer;
	font: 600 13.5px/1 var(--font-sans);
	color: var(--ft-vang);
	text-decoration: none;
}
.ft-mui svg, .ft-gopy svg { width: 15px; height: 15px; transition: transform .2s cubic-bezier(.4, 0, .2, 1); }
.ft-mui:hover svg, .ft-gopy:hover svg { transform: translateX(4px); }

/* ---- dải cuối ---- */
.ft-cuoi {
	display: flex; align-items: baseline; flex-wrap: wrap; gap: 6px 24px;
	padding-top: 15px;
}
.ft-cuoi p { margin: 0; font: 400 12.5px/1.5 var(--font-sans); color: rgba(246, 241, 228, .42); }
.ft-cuoi a { color: rgba(246, 241, 228, .62); text-decoration: none; }
.ft-cuoi a:hover { color: var(--ft-vang); }
.ft-cuoi__anh { flex: 1 1 auto; }
.ft-gopy { margin-left: auto; }
@media (max-width: 560px) {
	.ft-cuoi { gap: 12px; }
	.ft-cuoi__anh { flex: 1 1 100%; }
	.ft-gopy { margin-left: 0; }
}
/* ---- TÊN QUÁN CỠ ĐẠI ----
   Cỡ chữ tính theo bề ngang màn hình (vw) chứ không phải một con số cố định, để
   dòng chữ luôn ôm sát hai mép dù màn hình nào — đó chính là thứ làm nó ra dáng
   "cỡ đại" thay vì "chữ to".
   Chữ tô bằng dải chuyển sắc mờ dần: đậm ở trên, tan vào nền ở dưới. Nếu tô đặc
   một màu thì nó át hết phần nội dung phía trên; mờ dần thì đọc ra là VÂN NỀN có
   hình dáng cái tên, vẫn thấy rõ mà không tranh chỗ. */
.ft-ten {
	/* KHÔNG cắt ở khung này. Bản trước để overflow:hidden ngay đây, mà dòng chữ
	   lại ép line-height xuống dưới 1 — nên dấu hỏi của chữ GỎI nhô cao hơn hộp
	   dòng và bị xén mất đầu. Chữ Việt có dấu luôn vượt lên trên đỉnh chữ hoa,
	   ép hộp dòng là chắc chắn cắt.
	   Nay hộp dòng đủ cao cho dấu, phần thừa dưới chân chữ kéo âm cho chữ ngồi
	   sát đáy — chỗ tràn xuống dưới đã có chính thẻ <footer> xén hộ. */
	margin-top: clamp(2px, .8vw, 10px);
	padding: 0 clamp(12px, 2.4vw, 26px);
	text-align: center;
}
.ft-ten span {
	display: block;
	font-family: var(--font-serif);
	font-size: 17.6vw;
	font-weight: 800;
	line-height: 1.18;
	letter-spacing: -.03em;
	text-transform: uppercase;
	white-space: nowrap;
	/* Kéo phần trống dưới đường chân chữ ra ngoài, để chữ ngồi sát đáy chân
	   trang thay vì lửng lơ giữa một khoảng thừa. */
	margin-bottom: -.30em;
	background: linear-gradient(180deg, rgba(246, 241, 228, .24) 0%, rgba(246, 241, 228, .05) 86%);
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}
/* Trình duyệt không cắt được nền theo chữ thì vẫn phải đọc được: lùi về một màu
   mờ, mất hiệu ứng chứ không mất chữ. */
@supports not ((-webkit-background-clip: text) or (background-clip: text)) {
	.ft-ten span { background: none; color: rgba(246, 241, 228, .16); }
}
@media (max-width: 560px) {
	.ft-ten span { font-size: 19vw; letter-spacing: -.035em; }
}
/*gcm-chan-trang-end*/

/* --------------------------------------------------------------- reveal */

.reveal { opacity: 0; transform: translateY(26px); transition: opacity .65s ease, transform .65s ease; }
.reveal.is-visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
	.reveal { opacity: 1; transform: none; transition: none; }
	html { scroll-behavior: auto; }
}

/* breadcrumb */
.crumbs { font-size: 13px; font-weight: 600; padding: 18px 0 0; color: rgba(123, 79, 57, .6); }
.crumbs a { color: var(--c-green); }
.crumbs a:hover { color: var(--c-red); }
.crumbs span { margin: 0 7px; color: rgba(123, 79, 57, .35); }

/* ---- Nút riêng trên bản đồ 3D: nghiêng 3D & toàn màn hình ---- */
.ml-ctrl-extra button.ml-ctrl-btn {
	display: flex; align-items: center; justify-content: center;
	width: 42px; height: 42px; padding: 0;
	background: #fff; border: 0; cursor: pointer;
	font: 700 15px/1 var(--font-sans); color: var(--c-green-deep);
	transition: background .18s ease, color .18s ease;
}
.ml-ctrl-extra button.ml-ctrl-btn--3d { font-size: 13px; font-weight: 800; letter-spacing: .02em; }
/* nút phóng to đứng riêng, to hơn hẳn cho dễ nhận */
.ml-ctrl-fs { margin-top: 12px !important; box-shadow: 0 4px 14px rgba(11, 74, 52, .28) !important; }
.ml-ctrl-fs button.ml-ctrl-btn { width: 48px; height: 48px; background: var(--c-green-deep); color: var(--c-gold); }
.ml-ctrl-fs button.ml-ctrl-btn:hover { background: var(--c-green); }
.ml-ctrl-extra button.ml-ctrl-btn.is-busy { opacity: .55; }

/* chấm "bạn ở đây" */
.ml-me { position: relative; width: 0; height: 0; }
.ml-me__dot {
	position: absolute; left: -8px; top: -8px; width: 16px; height: 16px; border-radius: 50%;
	background: #1a73e8; border: 3px solid #fff; box-shadow: 0 2px 8px rgba(0, 0, 0, .35);
}
.ml-me__pulse {
	position: absolute; left: -20px; top: -20px; width: 40px; height: 40px; border-radius: 50%;
	background: rgba(26, 115, 232, .28); animation: mePulse 2s ease-out infinite;
}
@keyframes mePulse { 0% { transform: scale(.5); opacity: .8; } 100% { transform: scale(1.4); opacity: 0; } }
.ml-me__label {
	position: absolute; left: 14px; top: -12px; white-space: nowrap;
	background: #1a73e8; color: #fff; border-radius: 8px; padding: 3px 9px;
	font: 700 11px/1.3 var(--font-sans); box-shadow: 0 3px 10px rgba(0, 0, 0, .25);
}
.ml-ctrl-extra button.ml-ctrl-btn:hover { background: var(--c-mint-wash); }
.ml-ctrl-extra button.ml-ctrl-btn.is-on { background: var(--c-gold); color: var(--c-green-deep); }

/* Toàn màn hình: bản gốc (Fullscreen API) + bản dự phòng cho iPhone */
.map-pane:fullscreen, .map-pane:-webkit-full-screen { background: var(--c-cream); }
.map-pane:fullscreen #ml-map, .map-pane:-webkit-full-screen #ml-map { height: 100%; }
body.map-is-fs { overflow: hidden; }
body.map-is-fs .reveal { transform: none !important; }
#ml-map.is-fs {
	position: fixed; top: 0; right: 0; bottom: 0; left: 0;
	width: 100%; height: 100%; z-index: 9999; border-radius: 0;
}

/* Nhãn thả xuống dưới chân công trình 3D — đuôi quay ngược lên trên */
.ml-marker--below { display: flex; flex-direction: column-reverse; align-items: center; }
.ml-marker--below .ml-marker__tail { transform: rotate(180deg); }
.ml-marker--below .ml-marker__dot { display: none; }

/* ---- "Vì sao nên đến": 3 ý đánh số, sạch và thoáng ---- */
.why-grid {
	list-style: none;
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 0;
	margin: 4px 0 26px;
	padding: 0;
	background: #fff;
	border: 1px solid rgba(11, 93, 63, .12);
	border-radius: var(--radius);
	box-shadow: var(--shadow-card);
	overflow: hidden;
}
.why-grid li {
	position: relative;
	padding: 24px 26px 26px;
	border-left: 1px solid rgba(11, 93, 63, .1);
}
.why-grid li:first-child { border-left: 0; }
.why-grid li::before { display: none; }
.why-grid li { display: flex; flex-direction: column; justify-content: center; }
.why-grid p {
	margin: 0;
	font-size: 15.5px; line-height: 1.55;
	color: var(--c-green-deep); font-weight: 600;
}
@media (max-width: 860px) {
	.why-grid { grid-template-columns: 1fr; }
	.why-grid li { border-left: 0; border-top: 1px solid rgba(11, 93, 63, .1); padding: 18px 20px 20px; }
	.why-grid li:first-child { border-top: 0; }
	.why-grid p { font-size: 15px; }
}

/* Nút điều khiển luôn nằm trên nhãn địa danh (nhãn từng che mất nút) */
.maplibregl-control-container .maplibregl-ctrl-top-right,
.maplibregl-control-container .maplibregl-ctrl-top-left,
.maplibregl-control-container .maplibregl-ctrl-bottom-right,
.maplibregl-control-container .maplibregl-ctrl-bottom-left { z-index: 200; }
.maplibregl-ctrl-group { position: relative; }
.ml-ctrl-extra { box-shadow: 0 3px 12px rgba(11, 74, 52, .26) !important; }
.ml-ctrl-fs { box-shadow: 0 4px 14px rgba(11, 74, 52, .32) !important; }

/* Cụm 3D / về ban đầu / vị trí của tôi: góc dưới bên trái, trên dòng bản quyền */
.maplibregl-ctrl-bottom-left .maplibregl-ctrl-group { margin-bottom: 34px !important; }
@media (max-width: 720px) { .maplibregl-ctrl-bottom-left .maplibregl-ctrl-group { margin-bottom: 46px !important; } }

/* Breadcrumb nằm trong cụm thông tin (nền xanh đậm) */
.crumbs--dark {
	padding: 14px 0 0;
	color: rgba(255, 248, 231, .45);
	border-bottom: 1px solid rgba(255, 248, 231, .14);
	padding-bottom: 12px;
	font-size: 12.5px;
}
.crumbs--dark a { color: rgba(255, 248, 231, .82); }
.crumbs--dark a:hover { color: var(--c-gold); }
.crumbs--dark span { color: rgba(255, 248, 231, .3); margin: 0 6px; }
.facts-bar .facts-bar__inner { padding-top: 14px; }

/* Trang địa điểm: bỏ khoảng trống thừa giữa cụm thông tin và bản đồ */
.section--tight { padding-top: 6px; }
.section--tight > .container > .subheading:first-child { margin-top: 18px; }
@media (max-width: 720px) {
	.section--tight { padding-top: 2px; }
	.section--tight > .container > .subheading:first-child { margin-top: 14px; }
}

/* Ảnh "bay" từ dải ngoài trang vào đúng ô của nó trong tường ảnh */
.pw-ghost {
	position: fixed; z-index: 130;
	object-fit: cover; border-radius: 16px;
	box-shadow: 0 20px 50px rgba(0, 0, 0, .45);
	pointer-events: none;
}
.photowall.is-entering .photowall__grid { opacity: 0; transition: none; }
.photowall.is-entering .photowall__bar,
.photowall.is-entering .photowall__hint { opacity: 0; }
.photowall__grid, .photowall__bar, .photowall__hint { transition: opacity .3s ease .06s; }

/* Ảnh tí hon trong nhãn địa danh — thay cho bảng ảnh phải zoom mới thấy */
.ml-marker__thumb {
	width: 26px; height: 26px; border-radius: 8px;
	object-fit: cover; display: block; flex-shrink: 0;
	box-shadow: 0 0 0 1.5px rgba(255, 248, 231, .35);
	background: rgba(255, 248, 231, .12);
}
.ml-marker--home .ml-marker__thumb { box-shadow: 0 0 0 1.5px rgba(11, 74, 52, .3); }
.ml-marker__txt { display: flex; flex-direction: column; align-items: flex-start; line-height: 1.2; }
.ml-marker__name { line-height: 1.25; white-space: nowrap; }
@media (max-width: 720px) {
	.ml-marker__thumb { width: 22px; height: 22px; border-radius: 7px; }
}

/* Zoom ra thì nhãn rút gọn dần cho khỏi chồng nhau */
#ml-map.pins-md .ml-marker--near .ml-marker__label { font-size: 11px; padding: 3px 10px 3px 3px; gap: 6px; border-radius: 10px; }
#ml-map.pins-md .ml-marker__thumb { width: 20px; height: 20px; border-radius: 6px; }
#ml-map.pins-md .ml-marker--near .ml-marker__tail { border-left-width: 6px; border-right-width: 6px; border-top-width: 7px; }

/* Dưới zoom 14: giấu chữ, chỉ còn ảnh làm biểu tượng */
#ml-map.pins-icon .ml-marker--near .ml-marker__txt { display: none; }
#ml-map.pins-icon .ml-marker--near .ml-marker__label { padding: 3px; border-radius: 11px; gap: 0; }
#ml-map.pins-icon .ml-marker__thumb { width: 26px; height: 26px; border-radius: 8px; }
#ml-map.pins-icon .ml-marker--near .ml-marker__tail { border-left-width: 5px; border-right-width: 5px; border-top-width: 6px; }

/* Chỉ số zoom trên bản đồ (để căn chỉnh) */
.ml-zoom {
	position: absolute; left: 10px; top: 10px; z-index: 5;
	background: rgba(11, 74, 52, .82); color: #fff8e7;
	font: 700 11px/1 var(--font-sans); letter-spacing: .03em;
	padding: 6px 10px; border-radius: 999px;
	pointer-events: none; font-variant-numeric: tabular-nums;
}

/* ---- Hiệu ứng thời tiết phủ lên bản đồ (nắng / mưa / giông / đêm) ---- */
.ml-wx { position: absolute; inset: 0; z-index: 3; pointer-events: none; overflow: hidden; border-radius: inherit; }
.ml-wx__rain { position: absolute; inset: 0; width: 100%; height: 100%; }
.ml-wx__sky { display: none; }   /* lớp nhuộm màu đã bỏ, giữ thẻ cho gọn code */
/* trời âm u / mưa: phủ lớp xám lạnh */
.ml-wx.is-rain::after, .ml-wx.is-storm::after {
	content: ''; position: absolute; inset: 0;
}
.ml-wx.is-rain::after { background: rgba(70, 92, 110, .12); }
.ml-wx.is-storm::after { background: rgba(38, 50, 62, .2); }
/* Bỏ lớp phủ ban đêm: nó nhuộm tối cả bản đồ, nhìn như bị mờ chứ không ra trời tối. */
/* chớp sấm */
.ml-wx__flash { position: absolute; inset: 0; background: #fff; opacity: 0; }
.ml-wx__flash.is-on { animation: wxFlash 1.1s ease-out; }
@keyframes wxFlash {
	0% { opacity: 0; } 4% { opacity: .82; } 9% { opacity: .12; }
	14% { opacity: .66; } 24% { opacity: .05; } 100% { opacity: 0; }
}
/* nhãn thời tiết */
.ml-wx__badge {
	position: absolute; left: 10px; top: 40px; z-index: 5;
	background: rgba(11, 74, 52, .82); color: #fff8e7;
	font: 700 11px/1 var(--font-sans); letter-spacing: .02em;
	padding: 6px 10px; border-radius: 999px; pointer-events: none;
}

/* ---- bản đồ ở hero trang chủ ---- */
.hero-map {
	position: relative;
	margin-top: 44px;
	border-radius: 30px;
	overflow: hidden;
	box-shadow: 0 30px 70px -34px rgba(11, 74, 52, .45), 0 2px 0 rgba(255, 255, 255, .7) inset;
	background: var(--c-mint-wash);
}
.hero-map #ml-map { height: clamp(420px, 64vh, 720px); }
.hero-map__hint {
	margin: 14px 0 0;
	text-align: center;
	font-size: 13.5px;
	color: rgba(123, 79, 57, .72);
}
@media (max-width: 720px) {
	.hero-map { margin-top: 30px; border-radius: 22px; }
	.hero-map #ml-map { height: clamp(380px, 62vh, 560px); }
	.hero-map__hint { font-size: 12.5px; }
}

/* ---- bản đồ đường đi của lịch trình ---- */
.trip-map #ml-map { height: clamp(420px, 60vh, 660px); }
.trip-legend {
	display: flex;
	flex-wrap: wrap;
	gap: 8px 18px;
	margin: 0 0 16px;
	font-size: 13.5px;
	color: rgba(123, 79, 57, .85);
}
.trip-legend__item { display: inline-flex; align-items: center; gap: 7px; }
.trip-legend__item i { width: 14px; height: 4px; border-radius: 3px; display: inline-block; }

/* chấm số điểm dừng trên bản đồ */
.ml-stop {
	display: flex;
	align-items: center;
	gap: 7px;
	padding: 3px 11px 3px 3px;
	background: #fff;
	border-radius: 999px;
	box-shadow: 0 6px 16px -6px rgba(11, 74, 52, .5), 0 0 0 2px var(--stop-color) inset;
	text-decoration: none;
	font: 600 12.5px/1 'Be Vietnam Pro', system-ui, sans-serif;
	color: var(--c-green-deep);
	white-space: nowrap;
	transform: translateY(-6px);
}
.ml-stop__num {
	width: 22px; height: 22px;
	display: grid; place-items: center;
	border-radius: 50%;
	background: var(--stop-color);
	color: #fff;
	font-size: 12.5px;
	font-weight: 700;
}
.ml-stop:hover { box-shadow: 0 10px 22px -8px rgba(11, 74, 52, .55), 0 0 0 2px var(--stop-color) inset; }
@media (max-width: 720px) {
	.ml-stop__name { display: none; }
	.ml-stop { padding: 3px; }
}

/* ============================ TRANG CHỦ REDESIGN ============================ */

/* ---- hero = bản đồ full-bleed ---- */
.vista {
	position: relative;
	height: min(86vh, 820px);
	height: min(86svh, 820px);
	min-height: 560px;
	background: var(--c-mint-wash);
	overflow: hidden;
}
.vista #ml-map { position: absolute; inset: 0; height: 100%; }
.vista__veil {
	position: absolute; inset: 0; z-index: 4; pointer-events: none;
	background: linear-gradient(180deg,
		var(--c-cream) 0%, rgba(250, 249, 246, .88) 16%,
		rgba(250, 249, 246, .38) 34%, rgba(250, 249, 246, 0) 52%);
}
.vista__content { position: absolute; inset: 0 0 auto 0; z-index: 6; pointer-events: none; padding-top: clamp(22px, 4.5vh, 52px); }
.vista__panel { max-width: 640px; }
.vista__panel h1 { font-size: clamp(33px, 4.6vw, 56px); line-height: 1.06; margin: 10px 0 20px; }
.vista__hint {
	position: absolute; z-index: 5; left: 50%; bottom: 16px; transform: translateX(-50%);
	background: rgba(255, 255, 255, .82); backdrop-filter: blur(6px);
	color: var(--c-green-deep);
	font: 600 12px/1 var(--font-sans);
	padding: 8px 14px; border-radius: 999px;
	pointer-events: none; white-space: nowrap;
}
/* huy hiệu zoom/thời tiết dời xuống góc phải dưới cho khỏi đè tiêu đề */
.vista .ml-zoom { display: none; }
.vista .ml-wx__badge { left: auto; right: 12px; top: auto; bottom: 52px; }
@media (max-width: 720px) {
	.vista { min-height: 520px; height: min(78svh, 640px); }
	.vista__hint { display: none; }
}

/* ---- thanh tìm kiếm ---- */
.finder { position: relative; max-width: 540px; pointer-events: auto; }
.finder__box {
	display: flex; align-items: center; gap: 10px;
	background: #fff;
	padding: 5px 10px 5px 18px;
	border-radius: 999px;
	box-shadow: 0 22px 48px -20px rgba(11, 74, 52, .45), 0 0 0 1px rgba(11, 74, 52, .08);
	transition: box-shadow .25s ease;
}
.finder__box:focus-within { box-shadow: 0 22px 48px -16px rgba(11, 74, 52, .5), 0 0 0 2px var(--c-green); }
.finder__box svg { width: 19px; height: 19px; color: var(--c-green); flex: none; }
.finder__box input {
	flex: 1; min-width: 0; border: 0; outline: 0; background: none;
	font: 500 15.5px/1.2 var(--font-sans); color: var(--c-green-deep);
	padding: 13px 0;
}
.finder__box input::placeholder { color: rgba(123, 79, 57, .5); }
.finder__box input::-webkit-search-cancel-button { -webkit-appearance: none; }
.finder__chips { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
.chip {
	border: 0; cursor: pointer;
	background: rgba(255, 255, 255, .78); backdrop-filter: blur(6px);
	color: var(--c-green-deep);
	font: 600 12.5px/1 var(--font-sans);
	padding: 9px 14px; border-radius: 999px;
	box-shadow: 0 0 0 1px rgba(11, 74, 52, .12);
	transition: background .2s ease, color .2s ease, box-shadow .2s ease;
}
.chip:hover { box-shadow: 0 0 0 1.5px var(--c-green); }
.chip.is-active { background: var(--c-green); color: #fff8e7; box-shadow: none; }
.finder__results {
	position: absolute; left: 0; right: 0; top: calc(100% + 10px); z-index: 9;
	background: #fff; border-radius: 20px;
	box-shadow: 0 30px 70px -24px rgba(11, 74, 52, .5), 0 0 0 1px rgba(11, 74, 52, .07);
	max-height: 330px; overflow: auto; overscroll-behavior: contain;
	padding: 8px;
}
.finder__item {
	display: flex; align-items: center; gap: 12px;
	padding: 9px 10px; border-radius: 14px; text-decoration: none;
}
.finder__item:hover { background: var(--c-mint-wash); }
.finder__item img { width: 44px; height: 44px; border-radius: 12px; object-fit: cover; flex: none; background: var(--c-mint-wash); }
.finder__txt { flex: 1; min-width: 0; }
.finder__txt b { display: block; font: 700 14.5px/1.25 var(--font-sans); color: var(--c-green-deep); }
.finder__txt i {
	display: block; font: 400 12.5px/1.35 var(--font-sans); font-style: normal;
	color: rgba(123, 79, 57, .75);
	white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.finder__cat { flex: none; font: 600 10.5px/1 var(--font-sans); color: var(--c-red); letter-spacing: .04em; text-transform: uppercase; }
.finder__empty, .finder__more { padding: 14px 12px; font: 500 13px/1.4 var(--font-sans); color: rgba(123, 79, 57, .75); }
@media (max-width: 720px) {
	.finder__chips { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin-right: -22px; padding-right: 22px; }
	.finder__chips::-webkit-scrollbar { display: none; }
	.chip { white-space: nowrap; }
	.finder__cat { display: none; }
}

/* ---- dải số liệu dưới hero ---- */
.statline { background: var(--c-green-deep); padding: 20px 0; }
.statline__in { display: flex; justify-content: center; gap: clamp(20px, 5vw, 64px); flex-wrap: wrap; }
.statline span { color: rgba(255, 248, 231, .72); font: 500 13.5px/1.3 var(--font-sans); display: flex; align-items: baseline; gap: 9px; }
.statline b { font: 800 clamp(22px, 2.6vw, 30px)/1 var(--font-serif); color: var(--c-gold); }
@media (max-width: 720px) {
	.statline__in { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 10px; }
}

/* ---- tiêu đề section kiểu editorial ---- */
.sec-head {
	display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
	gap: 16px 56px; align-items: end;
	margin-bottom: 40px;
}
.sec-head__eyebrow {
	font: 700 12px/1 var(--font-sans); letter-spacing: .16em; text-transform: uppercase;
	color: var(--c-red); margin-bottom: 12px;
}
.sec-head h2 { font-size: clamp(30px, 4.4vw, 48px); font-weight: 800; line-height: 1.04; margin: 0; }
.sec-head__desc {
	margin: 0; font-size: 15px; line-height: 1.65;
	border-left: 3px solid var(--c-gold); padding-left: 18px;
}
.sec-head__count {
	display: inline-block; margin-left: 6px;
	font: 700 12px/1 var(--font-sans); color: var(--c-green);
	background: var(--c-mint-wash); padding: 5px 10px; border-radius: 999px;
	white-space: nowrap;
}
.section--deep .sec-head__eyebrow { color: var(--c-gold); }
.section--deep .sec-head__desc { color: rgba(255, 248, 231, .75); border-left-color: rgba(233, 185, 73, .55); }
@media (max-width: 860px) {
	.sec-head { grid-template-columns: 1fr; align-items: start; gap: 14px; margin-bottom: 28px; }
}

/* ---- dàn card: dải mosaic cuộn ngang 2 tầng (giống gallery trang chi tiết) ---- */
.card-rail {
	display: grid;
	grid-template-rows: repeat(2, 250px);
	grid-auto-flow: column;
	grid-auto-columns: 290px;
	gap: 20px;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scroll-snap-type: x proximity;
	margin: 0 -22px; padding: 4px 22px 20px;
	scrollbar-width: none;
}
.card-rail::-webkit-scrollbar { display: none; }
.card-rail > * { scroll-snap-align: start; }
@media (max-width: 720px) {
	.card-rail { grid-template-rows: repeat(2, 185px); grid-auto-columns: 225px; gap: 14px; }
}
.card-rail .place-card {
	border-radius: 24px; overflow: hidden;
	box-shadow: 0 16px 44px -26px rgba(11, 74, 52, .45);
	transition: transform .35s cubic-bezier(.22, .61, .36, 1), box-shadow .35s ease;
}
.card-rail .place-card:hover { transform: translateY(-7px); box-shadow: 0 30px 60px -26px rgba(11, 74, 52, .55); }
.card-rail .place-card__media { overflow: hidden; }
.card-rail .place-card__img { aspect-ratio: 4 / 3; transition: transform .8s cubic-bezier(.22, .61, .36, 1); }
.card-rail .place-card:hover .place-card__img { transform: scale(1.055); }
.card-rail .place-card__meta { gap: 8px; }
.card-rail .place-card__meta span {
	background: var(--c-mint-wash); color: var(--c-green-deep);
	padding: 6px 11px; border-radius: 999px; font-size: 12px;
}

/* ---- khối lịch trình trên nền xanh đậm ---- */
.section--deep .iti-group {
	border-top: 1px solid rgba(255, 248, 231, .14);
	padding-top: 30px; margin-top: 30px;
}
.section--deep .iti-group:first-of-type { border-top: 0; margin-top: 0; padding-top: 0; }
.section--deep .iti-card {
	background: rgba(255, 255, 255, .055);
	border: 1px solid rgba(255, 248, 231, .16);
	border-radius: 20px;
	box-shadow: none;
	transition: transform .3s ease, background .3s ease, border-color .3s ease;
}
.section--deep .iti-card:hover {
	transform: translateY(-5px);
	background: rgba(233, 185, 73, .14);
	border-color: rgba(233, 185, 73, .6);
}
.section--deep .iti-card__days { color: var(--c-gold); }

/* ---- khối quảng bá quán: thêm đĩa gỏi ---- */
.promo {
	position: relative;
	display: grid; grid-template-columns: auto 1fr auto;
	align-items: center; gap: clamp(18px, 3.5vw, 40px);
	background:
		radial-gradient(560px 300px at 88% -20%, rgba(233, 185, 73, .28), transparent 70%),
		linear-gradient(115deg, var(--c-green-deep), var(--c-green));
	border-radius: 28px;
	padding: clamp(26px, 4.5vw, 48px);
	overflow: hidden;
}
.promo__dish {
	width: clamp(150px, 20vw, 250px);
	transform: rotate(-7deg);
	filter: drop-shadow(0 26px 34px rgba(0, 0, 0, .4));
}
.promo h3, .promo__tieu { color: var(--c-cream-text, #fff8e7); }
.promo p { color: rgba(255, 248, 231, .8); }
.promo__eyebrow { color: var(--c-gold); }
@media (max-width: 860px) {
	.promo { grid-template-columns: 1fr; text-align: center; }
	.promo__dish { margin: 0 auto; width: min(220px, 56vw); }
	.promo .btn { justify-self: center; }
}

/* ---- tag phân loại nằm trong ô tìm kiếm ---- */
.finder__tag {
	flex: none; border: 0; cursor: pointer;
	display: inline-flex; align-items: center; gap: 7px;
	background: var(--c-green); color: #fff8e7;
	font: 700 12.5px/1 var(--font-sans);
	padding: 8px 12px; border-radius: 999px;
	white-space: nowrap;
}
.finder__tag::after { content: '×'; font-size: 14px; opacity: .8; }
.finder__tag:hover::after { opacity: 1; }
.finder__panel {
	position: absolute; left: 0; right: 0; top: calc(100% + 10px); z-index: 9;
	background: #fff; border-radius: 20px; overflow: hidden;
	box-shadow: 0 30px 70px -24px rgba(11, 74, 52, .5), 0 0 0 1px rgba(11, 74, 52, .07);
}
.finder__panel .finder__chips {
	margin: 0; padding: 12px 12px 10px;
	border-bottom: 1px solid rgba(11, 74, 52, .08);
}
.finder__panel .chip { background: var(--c-mint-wash); backdrop-filter: none; box-shadow: none; }
.finder__panel .chip:hover { box-shadow: 0 0 0 1.5px var(--c-green); }
.finder__panel .chip.is-active { background: var(--c-green); }
.finder__panel .finder__results {
	position: static; border-radius: 0; box-shadow: none;
	max-height: 300px; padding: 6px 8px 8px;
}
.finder__panel .finder__results:empty { display: none; }
@media (max-width: 720px) {
	.finder__panel .finder__chips { flex-wrap: nowrap; overflow-x: auto; margin: 0; padding-right: 12px; }
}

/* ---- nút phân loại xổ dọc trong ô tìm ---- */
.finder__cat {
	flex: none; border: 0; cursor: pointer;
	display: inline-flex; align-items: center; gap: 6px;
	background: var(--c-mint-wash); color: var(--c-green-deep);
	font: 700 13px/1 var(--font-sans);
	padding: 11px 13px; border-radius: 999px;
	white-space: nowrap;
	transition: background .2s ease, color .2s ease;
}
.finder__cat svg { width: 14px; height: 14px; opacity: .7; }
.finder__cat:hover { background: #dcefe2; }
.finder__cat.has-cat { background: var(--c-green); color: #fff8e7; }
.finder__lens { width: 18px; height: 18px; color: var(--c-green); flex: none; margin-left: 6px; }
.finder__box > svg:not(.finder__lens) { display: none; }
.finder__menu {
	position: absolute; left: 0; top: calc(100% + 10px); z-index: 10;
	min-width: 230px;
	background: #fff; border-radius: 18px; padding: 7px;
	box-shadow: 0 30px 70px -24px rgba(11, 74, 52, .5), 0 0 0 1px rgba(11, 74, 52, .07);
}
.finder__opt {
	display: block; width: 100%; text-align: left;
	border: 0; background: none; cursor: pointer;
	font: 600 14px/1 var(--font-sans); color: var(--c-green-deep);
	padding: 12px 14px; border-radius: 12px;
}
.finder__opt:hover { background: var(--c-mint-wash); }
.finder__opt.is-active { color: var(--c-green); }
.finder__opt.is-active::after { content: '✓'; float: right; font-weight: 800; }
.finder__cat-tag { flex: none; font: 600 10.5px/1 var(--font-sans); color: var(--c-red); letter-spacing: .04em; text-transform: uppercase; }
@media (max-width: 720px) {
	.finder__cat-tag { display: none; }
	.finder__cat { padding: 10px 11px; font-size: 12px; }
}

/* ---- pcard: card ảnh tràn viền ---- */
.pcard {
	position: relative; display: block; overflow: hidden;
	border-radius: 26px;
	text-decoration: none;
	box-shadow: 0 18px 46px -28px rgba(11, 74, 52, .5);
	transition: transform .35s cubic-bezier(.22, .61, .36, 1), box-shadow .35s ease;
	isolation: isolate;
}
.pcard:hover { box-shadow: 0 32px 64px -28px rgba(11, 74, 52, .6); }
.pcard--lg { grid-column: span 2; grid-row: span 2; }
.pcard--t { grid-row: span 2; }
.pcard__img {
	position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
}
.pcard__shade {
	position: absolute; inset: 0;
	background: linear-gradient(185deg, rgba(6, 40, 28, .18) 0%, rgba(6, 40, 28, 0) 32%, rgba(6, 40, 28, .06) 55%, rgba(6, 40, 28, .86) 100%);
	transition: opacity .35s ease;
}
.pcard__body { position: absolute; left: 0; right: 0; bottom: 0; padding: 22px 24px 22px; }
.pcard__body h3 {
	font: 800 24px/1.15 var(--font-serif);
	color: #fff8e7; margin: 0 0 6px;
	text-shadow: 0 2px 14px rgba(6, 40, 28, .45);
}
.pcard--lg .pcard__body h3 { font-size: clamp(26px, 2.6vw, 34px); }
.pcard__meta {
	display: flex; gap: 8px; margin-top: 13px; flex-wrap: wrap;
	max-height: 60px; overflow: hidden;   /* tối đa 2 hàng pill, hàng 3 bị cắt gọn */
}
.pcard__meta > span {
	max-width: 100%; white-space: nowrap;
	overflow: hidden; text-overflow: ellipsis;   /* pill dài quá bề ngang card thì cắt … */
}
.pcard__meta span {
	font: 600 11.5px/1 var(--font-sans); color: #fff8e7;
	background: rgba(255, 255, 255, .14);
	backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
	padding: 7px 11px; border-radius: 999px;
	box-shadow: 0 0 0 1px rgba(255, 248, 231, .18) inset;
}
.pcard__tags { position: absolute; top: 16px; left: 16px; right: 62px; z-index: 2; }
.pcard__tagpill {
	display: inline-flex; align-items: center; gap: 7px;
	max-width: 100%;
	font: 700 11px/1 var(--font-sans);
	background: rgba(255, 255, 255, .9); backdrop-filter: blur(6px);
	padding: 8px 12px; border-radius: 999px;
	white-space: nowrap; overflow: hidden;
}
.pcard__tagpill i { font-style: normal; overflow: hidden; text-overflow: ellipsis; }
.pcard__tagpill b { color: rgba(123, 79, 57, .45); font-weight: 700; flex: none; }
.pcard__tagpill .tg--exp { color: var(--c-green); }
.pcard__tagpill .tg--time { color: #9a7514; }
.pcard__tagpill .tg--perk { color: var(--c-red); }
.pcard__arrow {
	position: absolute; top: 14px; right: 14px; z-index: 2;
	width: 40px; height: 40px; display: grid; place-items: center;
	border-radius: 50%;
	background: rgba(255, 255, 255, .16);
	backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
	box-shadow: 0 0 0 1px rgba(255, 248, 231, .25) inset;
	color: #fff8e7; font-size: 17px;
	opacity: 0; transform: translate(6px, -6px) rotate(-45deg);
	transition: opacity .3s ease, transform .35s cubic-bezier(.22, .61, .36, 1);
}
.pcard:hover .pcard__arrow { opacity: 1; transform: translate(0, 0) rotate(-45deg); }
.pcard__badge {
	position: absolute; top: 16px; right: 14px; z-index: 3;
	background: var(--c-gold); color: #4a3407;
	font: 800 11px/1 var(--font-sans); letter-spacing: .05em; text-transform: uppercase;
	padding: 8px 12px; border-radius: 999px;
	box-shadow: 0 8px 18px -8px rgba(0, 0, 0, .4);
}
.pcard__badge ~ .pcard__arrow { display: none; }
@media (max-width: 720px) {
	.pcard__arrow { display: none; }
	.pcard__body { padding: 14px 16px 14px; }
	.pcard__body h3 { font-size: 18px; }
	.pcard__meta { margin-top: 9px; }
}

/* tag đầu tiên nằm cùng hàng meta, bên phải giá */
.pcard__tag1 {
	font: 700 11.5px/1 var(--font-sans); color: #fff8e7;
	background: rgba(233, 185, 73, .34);
	backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
	padding: 7px 11px; border-radius: 999px;
	box-shadow: 0 0 0 1px rgba(233, 185, 73, .5) inset;
}

/* ============================= TRANG MÓN ĂN ============================= */
.dish-hero {
	background:
		radial-gradient(620px 320px at 85% -30%, rgba(233, 185, 73, .25), transparent 70%),
		linear-gradient(115deg, var(--c-green-deep), var(--c-green));
	padding: clamp(40px, 7vw, 76px) 0 clamp(28px, 4.5vw, 48px);
}
.dish-hero__eyebrow {
	font: 700 12px/1 var(--font-sans); letter-spacing: .16em; text-transform: uppercase;
	color: var(--c-gold); margin-bottom: 14px;
}
.dish-hero h1 { color: #fff8e7; font-size: clamp(34px, 5.4vw, 58px); line-height: 1.05; margin: 0 0 12px; }
.dish-hero p { color: rgba(255, 248, 231, .82); max-width: 640px; font-size: 16px; line-height: 1.65; margin: 0; }
.dish-facts { display: flex; gap: clamp(16px, 3vw, 38px); flex-wrap: wrap; margin-top: 24px; }
.dish-facts span { color: rgba(255, 248, 231, .72); font: 500 13px/1.3 var(--font-sans); display: flex; align-items: baseline; gap: 8px; }
.dish-facts b { font: 800 clamp(20px, 2.4vw, 26px)/1 var(--font-serif); color: var(--c-gold); }

/* danh sách quán */
.shop-list { display: grid; gap: 12px; max-width: 820px; }
.shop-card {
	display: flex; align-items: center; gap: 16px;
	background: #fff; border-radius: 18px;
	padding: 16px 18px;
	text-decoration: none;
	box-shadow: 0 10px 30px -18px rgba(11, 74, 52, .35), 0 0 0 1px rgba(11, 74, 52, .06);
	transition: box-shadow .25s ease, transform .25s ease;
}
.shop-card:hover { box-shadow: 0 18px 40px -18px rgba(11, 74, 52, .45), 0 0 0 1.5px var(--c-green); }
.shop-card__num {
	flex: none; width: 34px; height: 34px;
	display: grid; place-items: center;
	background: var(--c-gold); color: #4a3407;
	border-radius: 50%; font: 800 15px/1 var(--font-sans);
}
.shop-card__body { flex: 1; min-width: 0; }
.shop-card__body b { display: block; font: 700 16.5px/1.3 var(--font-sans); color: var(--c-green-deep); }
.shop-card__body i { display: block; font: 400 13px/1.5 var(--font-sans); font-style: normal; color: rgba(123, 79, 57, .8); margin-top: 2px; }
.shop-card__meta { display: flex; gap: 12px; align-items: center; margin-top: 7px; font: 600 12px/1 var(--font-sans); color: var(--c-green); flex-wrap: wrap; }
.shop-card__meta em { font-style: normal; color: #9a7514; font-weight: 800; }
.shop-card__soft { color: rgba(123, 79, 57, .55); font-weight: 500; }
.shop-card__go { flex: none; color: var(--c-green); font-size: 18px; opacity: .55; transition: opacity .2s ease, transform .25s ease; }
.shop-card:hover .shop-card__go { opacity: 1; transform: translate(2px, -2px); }

/* lưới món ở trang chủ */
.dish-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.dish-tile {
	background: #fff; border-radius: 16px;
	padding: 18px 18px 16px;
	text-decoration: none;
	box-shadow: 0 8px 26px -18px rgba(11, 74, 52, .4), 0 0 0 1px rgba(11, 74, 52, .05);
	transition: transform .25s ease, box-shadow .25s ease;
}
.dish-tile:hover { transform: translateY(-3px); box-shadow: 0 16px 34px -18px rgba(11, 74, 52, .5), 0 0 0 1.5px var(--c-green); }
.dish-tile b, .dish-tile h3 { display: block; font: 800 16px/1.25 var(--font-serif); color: var(--c-green-deep); margin-bottom: 6px; }
.dish-tile span { font: 600 12px/1 var(--font-sans); color: rgba(123, 79, 57, .75); }
@media (max-width: 1020px) { .dish-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 720px) { .dish-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; } }

/* ghim quán trên bản đồ trang món */
.ml-shop { text-decoration: none; display: block; }
.ml-shop__pill {
	display: flex; align-items: center; gap: 7px;
	background: var(--c-gold); color: #4a3407;
	padding: 5px 11px 5px 5px; border-radius: 999px;
	font: 700 12px/1 var(--font-sans);
	box-shadow: 0 8px 20px -8px rgba(0, 0, 0, .45);
	white-space: nowrap;
}
.ml-shop__pill b {
	width: 22px; height: 22px; display: grid; place-items: center;
	background: #4a3407; color: var(--c-gold);
	border-radius: 50%; font-size: 12px;
}
.ml-shop__pill em { font-style: normal; font-weight: 800; color: #7a5c10; }
.ml-shop__tail {
	display: block; margin: 0 auto;
	width: 0; height: 0;
	border-left: 6px solid transparent; border-right: 6px solid transparent;
	border-top: 7px solid var(--c-gold);
}
#ml-map.pins-icon .ml-shop__pill span, #ml-map.pins-icon .ml-shop__pill em { display: none; }

/* ---- Ô ảnh ở mép bản đồ: địa danh đang nằm ngoài khung nhìn ----
   Đặt ở lớp trên bản đồ nhưng dưới các nút điều khiển; bấm để bay tới. */
.ml-edge { position: absolute; inset: 0; z-index: 4; pointer-events: none; }
/* Nút = khung ảnh + TÊN đứng dưới. Không viền trắng quanh ảnh (chủ site bỏ);
   tách khỏi nền bằng bóng đổ mềm là đủ. Tên bắt buộc phải có: ảnh + số km chỉ
   nói được với nơi nổi tiếng, còn Cam Ranh / đèo Lương Sơn / Hang Heo thì người
   xem nhìn ảnh không đoán ra đó là gì. Vị trí do placeEdgeItems đo offsetWidth/
   Height thật nên ô cao thêm phần tên vẫn tự né mép. */
.ml-edge__item {
	position: absolute; transform: translate(-50%, -50%);
	width: 62px; padding: 0; border: 0;
	background: none;
	cursor: pointer; pointer-events: auto;
	display: none;
	flex-direction: column; align-items: center; gap: 3px;
}
.ml-edge__anh {
	position: relative; display: block;
	width: 46px; height: 46px;
	border-radius: 13px; overflow: hidden;
	background: var(--c-mint-wash, #eef4ef) center/cover no-repeat;
	/* Không viền, không bóng (chủ site bỏ cả hai): ảnh trần bo góc là đủ. */
	transition: filter .18s ease;
}
.ml-edge__item:hover .ml-edge__anh { filter: brightness(1.06); }
.ml-edge__item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ml-edge__item.no-img img { display: none; }
.ml-edge__km {
	position: absolute; left: 0; right: 0; bottom: 0;
	font: 700 9.5px/1.6 var(--font-sans, sans-serif);
	color: #fff; text-align: center;
	background: linear-gradient(180deg, rgba(11, 74, 52, 0), rgba(11, 74, 52, .82));
	letter-spacing: .01em;
}
/* Tên: chữ trần với quầng trắng (như nhãn quán ăn) chứ không phải một thẻ nền
   nữa — bốn ô mép mà thêm bốn thẻ trắng thì rìa bản đồ thành một dãy card. */
.ml-edge__ten {
	display: block; max-width: 62px;
	font: 700 9.5px/1.25 var(--font-sans, sans-serif);
	color: #274a3c; text-align: center;
	overflow: hidden;
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
	text-shadow:
		0 0 3px #fff, 0 0 3px #fff,
		1px 1px 0 rgba(255, 255, 255, .95), -1px -1px 0 rgba(255, 255, 255, .95),
		1px -1px 0 rgba(255, 255, 255, .95), -1px 1px 0 rgba(255, 255, 255, .95);
}
.ml-edge__item.is-on { display: flex; }
@media (max-width: 720px) {
	.ml-edge__item { width: 56px; }
	.ml-edge__anh { width: 38px; height: 38px; border-radius: 11px; }
	.ml-edge__km { font-size: 8.5px; }
	.ml-edge__ten { font-size: 8.5px; max-width: 56px; }
}

/* Rê bản đồ mượt: tách nhãn và ô mép ra lớp vẽ riêng để khi chúng đổi vị trí
   trình duyệt không phải tính lại bố cục cả trang. */
.ml-marker, .ml-edge__item { will-change: transform; contain: layout paint; }
.ml-edge { contain: layout size paint; }

/*gcm-dish-anh-start*/
/* Section món bỏ nền kem đậm (.section--warm), dùng chung nền với khu bản đồ
   phía trên cho liền mạch — card đã trong suốt nên nền đậm làm nó nổi cộm.
   Chỉ nhắm #an-local, section "tour đảo" vẫn giữ nền warm như cũ. */
.section--warm#an-local { background: var(--c-cream); }
/* Ô món (bản 9 — chốt 14/08): lưới ĐỀU, card dọc tỉ lệ 4:5; nền trắng ngà #FFFCF3,
   chữ nâu mận đậm (Apricot Silk #FFEDD5 bị chê ám vàng, đã đổi). Tên ở GÓC TRÊN TRÁI, ảnh món phóng to cắt ở GÓC
   PHẢI DƯỚI, nhích lên sát tên cho card khỏi hở ruột.
   (9:16 làm card cao nghều, giữa tên và món trống một khoảng lớn — đã bỏ.)
   Đã thử rồi bỏ: drop-shadow dưới món (dơ), gradient kem + quầng radial (xấu),
   card trắng đặc (thường), khung outline gallery, bento ô to nhỏ đan nhau
   (ô lớn dồn hết về cột đầu), mỗi món một màu nền theo palette (loạn sắc). */
.dish-grid {
	grid-template-columns: repeat(6, 1fr);
	gap: 14px;
}
.dish-tile--anh {
	position: relative; overflow: hidden;
	aspect-ratio: 4 / 5;
	padding: 14px 14px 12px;
	text-align: left;
	background: #fff;
	border: 1px solid rgba(75, 38, 47, .09);
	border-radius: 18px;
	box-shadow: none;
	transition: transform .25s ease, border-color .25s ease;
}
.dish-tile--anh:hover {
	transform: translateY(-3px);
	border-color: rgba(75, 38, 47, .3);
}
.dish-tile__img {
	position: absolute; right: -13%; bottom: -8%;
	display: block; width: 90%; height: auto; margin: 0;
	aspect-ratio: 1 / 1; object-fit: contain;
	transform: rotate(-6deg);
	transition: transform .35s ease;
}
.dish-tile--anh:hover .dish-tile__img { transform: rotate(-2deg) scale(1.06); }
.dish-tile--anh b {
	position: relative; z-index: 1;
	display: block; margin: 0;
	font: 800 15.5px/1.22 var(--font-serif);
	color: #4b262f;
}
@media (max-width: 1020px) { .dish-grid { grid-template-columns: repeat(4, 1fr); } }
@media (max-width: 720px) {
	/* Điện thoại vẫn để 4 cột (chủ site chốt), nên card co lại còn ~78px ngang:
	   lề và cỡ chữ phải rút theo, không thì tên món tràn kín ô. */
	.dish-grid { grid-template-columns: repeat(4, 1fr); gap: 7px; }
	.dish-tile--anh { padding: 7px 7px 6px; border-radius: 12px; }
	.dish-tile--anh b { font-size: 10px; line-height: 1.18; letter-spacing: -.01em; }
	.dish-tile__img { width: 96%; right: -15%; bottom: -9%; }
}
/*gcm-dish-anh-end*/

/*gcm-place-hero-start*/
/* Đầu trang địa điểm — dựng lại 14/08/2026, ưu tiên BẢN ĐỒ.
   Lịch sử: bản gốc là ảnh phủ toàn khung + gradient xanh đè lên + chữ trắng
   nằm trên ảnh; chủ site chê "loang màu dơ" (gradient trộn với đủ loại ảnh nên
   chỗ đậm chỗ nhạt, chữ lúc đọc được lúc không). Bản kế tách chữ sang nền kem,
   ảnh thành tấm bo góc bên cạnh — vẫn bỏ, vì chủ site muốn bản đồ là thứ đầu
   tiên người xem thấy. Nay đầu trang chỉ còn khối chữ gọn, bản đồ đôn lên
   ngay dưới và cao hơn trước.
   Ảnh đại diện vẫn dùng cho thẻ chia sẻ mạng xã hội (cn_hero_src trong og:image)
   và cho thư viện ảnh giữa trang — chỉ bỏ khỏi phần đầu trang. */
.place-hero {
	position: static;
	display: block;
	min-height: 0;
	overflow: visible;
	background: var(--c-cream);
	padding: 14px 0 26px;
}
.place-hero::after { content: none; }   /* gỡ lớp phủ gradient của bản gốc */
.place-hero__grid { display: block; }
.place-hero__text { max-width: 760px; }

.place-hero__cat {
	background: rgba(11, 74, 52, .08);
	color: var(--c-green-deep);
	margin-bottom: 16px;
}
.place-hero__cat--featured { background: var(--c-red-bright); color: #fff; }
.place-hero h1 {
	color: var(--c-green-deep);
	font-size: clamp(32px, 4.4vw, 54px);
	line-height: 1.04;
	letter-spacing: -.015em;
	margin-bottom: 12px;
}
.place-hero__tagline {
	color: rgba(75, 38, 47, .82);
	font-size: 17.5px;
	line-height: 1.6;
	max-width: 58ch;
}
/* thẻ nhãn: bản gốc dựa vào nền tối nên viền/chữ đều sáng, nền kem phải đảo lại */
.place-hero__tags .tag {
	border-color: rgba(11, 74, 52, .22);
	color: var(--c-green-deep);
	background: transparent;
}
.place-hero__tags .tag--time {
	border-color: rgba(176, 132, 30, .5);
	color: #9a7514;
}

/* Bản đồ là nhân vật chính của trang: cao hơn mức dùng chung 460px. */
.place-hero + .facts-bar + .section #ml-map,
.place-hero + .facts-bar + .section .map-pane iframe { height: clamp(480px, 62vh, 660px); }

@media (max-width: 900px) {
	.place-hero { padding: 8px 0 16px; }
	.facts-bar--crumbs { padding-top: 66px; }
	.place-hero__tagline { font-size: 16px; }
}
/*gcm-place-hero-end*/

/*gcm-facts-card-start*/
/* Cụm thông tin nhanh trang địa điểm (thời lượng / giá / giờ / khoảng cách /
   địa chỉ) — 14/08/2026.
   Lịch sử: bản gốc là BĂNG XANH ĐẬM tràn ngang nằm ngay dưới tiêu đề, chắn
   giữa tiêu đề và bản đồ (bỏ). Bản kế là card trắng — nhưng khối "Vì sao nên
   đến" ngay bên dưới cũng là card trắng chia cột, hai cụm nhìn y hệt nhau.
   Nay: PANEL XANH ĐẬM BO GÓC nằm gọn trong khung nội dung, ngay dưới bản đồ —
   tương phản hẳn với dãy card trắng, và là thứ duy nhất trên trang có nền tối
   nên mắt bắt được ngay. Thêm nhãn nhỏ trên mỗi giá trị cho có phân cấp. */
.facts-bar { background: transparent; }

/* --- dải đường dẫn phía trên --- */
/* Thanh menu (.cn-pillwrap) là position:fixed, cao 67px máy bàn / 52px điện
   thoại, nên đường dẫn phải tự chừa chỗ — không thì nó chui lên nằm sau menu. */
.facts-bar--crumbs { padding: 88px 0 0; }
.facts-bar--crumbs .crumbs--dark {
	padding: 0 0 10px;
	border-bottom: 0;
	color: rgba(123, 79, 57, .55);
}
.facts-bar--crumbs .crumbs--dark a { color: var(--c-green); }
.facts-bar--crumbs .crumbs--dark a:hover { color: var(--c-red); }
.facts-bar--crumbs .crumbs--dark span { color: rgba(123, 79, 57, .3); }

/* --- panel thông tin dưới bản đồ --- */
.facts-bar--duoi-map { margin: 18px 0 8px; }
.facts-bar--duoi-map .facts-bar__inner {
	background: var(--c-green-deep);
	border: 0;
	border-radius: var(--radius);
	box-shadow: 0 18px 40px -28px rgba(11, 74, 52, .75);
	padding: 22px 26px;
	gap: 20px 0;
	align-items: stretch;
}
/* vạch ngăn mảnh sáng trên nền tối, thay cho vạch tối của card trắng */
.facts-bar--duoi-map .fact { padding: 0 22px; align-items: flex-start; gap: 12px; }
.facts-bar--duoi-map .fact:first-child { padding-left: 0; }
.facts-bar--duoi-map .fact + .fact { border-left: 1px solid rgba(255, 248, 231, .16); }

/* biểu tượng nằm trong huy hiệu tròn cho ra dáng bảng thông số */
.facts-bar--duoi-map .fact__ico {
	width: 34px; height: 34px; padding: 8px;
	border-radius: 50%;
	background: rgba(255, 248, 231, .1);
	color: var(--c-gold);
}
.facts-bar--duoi-map .fact small {
	display: block;
	color: rgba(255, 248, 231, .55);
	font-size: 10.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
	margin-bottom: 4px;
}
.facts-bar--duoi-map .fact b {
	color: var(--c-cream-text);
	font-size: 15px; font-weight: 700; line-height: 1.35;
}
.facts-bar--duoi-map .fact--addr b { font-weight: 600; }
.facts-bar--duoi-map .facts-bar__acts { padding-top: 4px; border-top: 1px solid rgba(255, 248, 231, .14); }
.facts-bar--duoi-map .facts-bar__link { color: rgba(255, 248, 231, .85); }
.facts-bar--duoi-map .facts-bar__link:hover { color: var(--c-gold); }

@media (max-width: 860px) {
	.facts-bar--duoi-map .facts-bar__inner { padding: 18px 18px; gap: 16px 0; }
	/* xuống 2 cột thì vạch dọc chia sai nhịp; đổi sang vạch ngang giữa các hàng */
	.facts-bar--duoi-map .fact { padding: 0 12px; }
	.facts-bar--duoi-map .fact + .fact { border-left: 0; }
	.facts-bar--duoi-map .fact:nth-child(odd) { padding-left: 0; }
	.facts-bar--duoi-map .fact__ico { width: 30px; height: 30px; padding: 7px; }
	.facts-bar--duoi-map .fact b { font-size: 14px; }
}
@media (max-width: 480px) {
	.facts-bar--crumbs { padding-top: 66px; }
	.facts-bar--duoi-map .facts-bar__inner { padding: 16px 15px; border-radius: 15px; }
}
/*gcm-facts-card-end*/

/*gcm-pw-header-start*/
/* Xem tường ảnh toàn màn hình: giấu thanh điều hướng. Nó là .cn-pillwrap
   position:fixed z-index:1000, cao hơn tường ảnh (z-index 120), nên nếu không
   giấu thì viên pill menu nổi đè lên ảnh. Nút ✕ của tường ảnh nằm ngay chỗ đó,
   bị viên pill che nên trước đây bấm không trúng. */
/* Dùng KÈM visibility chứ không chỉ opacity: opacity đi qua transition, mà
   transition không chạy khi tab bị ẩn — có lúc thanh menu đứng nguyên độ mờ 1.
   visibility đổi tức thì nên chắc chắn khuất. */
body.pw-mo .cn-pillwrap { opacity: 0; visibility: hidden; pointer-events: none; }
.cn-pillwrap { transition: opacity .25s ease; }
/* Nút đóng: bản cũ mờ quá nên lẫn vào ảnh, giờ tăng tương phản. */
.photowall__close {
	background: rgba(20, 18, 16, .55);
	border: 1px solid rgba(255, 255, 255, .25);
	width: 42px; height: 42px; font-size: 18px;
}
.photowall__close:hover { background: rgba(20, 18, 16, .8); }
/*gcm-pw-header-end*/

/*gcm-gallery-top-start*/
/* Dải ảnh nằm ngay dưới tiêu đề địa điểm, không còn tiêu đề "Hình ảnh" nên
   phải tự kéo sát lên: section--tight vẫn chừa lề trên cho khối đầu tiên. */
.section--tight .gallery-wrap:first-child { margin-top: -14px; }
.gallery-wrap { margin-bottom: 26px; }
/*gcm-gallery-top-end*/

/*gcm-menu-sau-start*/
/* "Lưu trú" là mục CHƯA MỞ: để dạng <span> chứ không phải <a> nên tự không bấm
   được và không vào sitemap; ở đây chỉ làm nó nhạt đi cho người xem hiểu là
   sắp có. Kèm chữ "Sắp có" nhỏ hiện khi rê chuột (thuộc tính title). */
.gcm-pill__link--sau {
	opacity: .42;
	cursor: default;
	pointer-events: auto;   /* vẫn cho rê chuột để đọc tooltip "Sắp có" */
}
.gcm-pill__link--sau:hover { background: none; color: inherit; }
/*gcm-menu-sau-end*/

/*gcm-hero-gon-start*/
/* Đầu trang cẩm nang, 14/08/2026: đã bỏ dòng "Cẩm nang từ người địa phương" và
   thanh tìm kiếm hero, nên khoảng chừa trên (96–132px trong pill.css, tính cho
   bố cục cũ) thành thừa. Thanh menu chỉ cao 67px máy bàn / 52px điện thoại —
   chừa 88/70px là vừa đủ thoáng, kéo cả trang lên gần 50px. */
.vista.vista--stack .vista__intro { padding: 88px 0 18px; }
@media (max-width: 900px) {
	.vista.vista--stack .vista__intro { padding: 74px 0 16px; }
}
@media (max-width: 599px) {
	.vista.vista--stack .vista__intro { padding: 70px 0 14px; }
}
/*gcm-hero-gon-end*/

/*gcm-map-cao-start*/
/* Chiều cao bản đồ trên điện thoại — 14/08/2026.
   Trước: 74vh (tối đa 640px, sàn 460px). Cộng với khối tiêu đề là vừa kín màn
   hình, người xem tưởng trang hết ở đó nên không cuộn tiếp. Nay hạ xuống để
   luôn hở ~1/4 màn hình cho phần dưới ló lên — đó là tín hiệu "còn nữa, cuộn đi".
   Nhân đôi class .vista để thắng pill.css (nạp SAU style.css, cùng độ đặc hiệu). */
@media (max-width: 720px) {
	.vista.vista--stack .vista__map {
		height: min(56vh, 470px);
		min-height: 330px;
	}
}
/* Trang địa điểm: bản đồ cũng là nhân vật chính nhưng dưới nó còn cụm thông tin
   và các mục khác, nên trên điện thoại cũng phải chừa chỗ ló. */
@media (max-width: 720px) {
	.place-hero + .section #ml-map,
	.place-hero + .section .map-pane iframe { height: min(56vh, 470px); }
}
/*gcm-map-cao-end*/

/*gcm-ngonngu-start*/
/* NÚT CHUYỂN NGÔN NGỮ.
   Nằm trong viên pill điều hướng, sát mép phải. Danh sách xổ xuống dùng thuộc
   tính hidden của HTML chứ không phải display:none của CSS — trình đọc màn hình
   tôn trọng hidden, còn với CSS thì nó vẫn đọc thấy các mục đang ẩn. */
.gcm-ngonngu { position: relative; margin-left: auto; flex: 0 0 auto; }
.gcm-ngonngu__nut {
	display: inline-flex; align-items: center; gap: 5px;
	padding: 6px 11px 6px 9px; border: 0; cursor: pointer;
	background: rgba(11, 74, 52, .07); color: #0b4a34;
	border-radius: 999px; font: 600 13px/1 inherit; letter-spacing: .01em;
	transition: background .15s ease;
}
.gcm-ngonngu__nut:hover { background: rgba(11, 74, 52, .13); }
.gcm-ngonngu__nut svg { width: 15px; height: 15px; flex: 0 0 auto; }
.gcm-ngonngu__ds {
	position: absolute; right: 0; top: calc(100% + 8px); z-index: 40;
	margin: 0; padding: 5px; list-style: none; min-width: 148px;
	background: #fff; border-radius: 13px;
	box-shadow: 0 10px 30px rgba(11, 74, 52, .16), 0 0 0 1px rgba(11, 74, 52, .07);
}
.gcm-ngonngu__ds a {
	display: block; padding: 8px 11px; border-radius: 9px;
	color: #23405a; text-decoration: none; font-size: 14px; white-space: nowrap;
}
.gcm-ngonngu__ds a:hover { background: rgba(11, 74, 52, .07); }
.gcm-ngonngu__ds a[aria-current] { color: #0b4a34; font-weight: 700; background: rgba(11, 74, 52, .09); }
/* Điện thoại: thanh điều hướng vốn đã chật, thu nút còn đúng mã hai chữ. */
@media (max-width: 560px) {
	.gcm-ngonngu__nut { padding: 6px 9px; }
	.gcm-ngonngu__nut svg { display: none; }
}
/*gcm-ngonngu-end*/

/*gcm-tour-start*/
/* ---- Tour cinematic ----
   Chạm = tua, ✕/Esc = dừng. Tông be kem theo template cẩm nang. KHÔNG letterbox
   — chủ site bỏ (cả mobile lẫn desktop đều báo "viền đen"). */
.ml-tour { position: absolute; inset: 0; z-index: 60; display: none; overflow: hidden; }
.ml-tour.is-on { display: block; }
.ml-tour__vien { display: none; }
/* Màn chữ: DIP-TO-CREAM kiểu tựa phim — màn kem HOÀ vào bằng crossfade chậm,
   tên nở ra từ nét nhoè + độ giãn chữ thu dần về, rồi cả hai tan đi. Không
   trượt hướng nào hết (bản kéo-lên bị chủ site chê xấu): sang trọng nằm ở
   nhịp hoà tan, không phải ở đường di chuyển. */
.ml-tour__toi {
	position: absolute; inset: 0; background: #f6f1e6;
	opacity: 0;
	transition: opacity .55s ease;
	pointer-events: none; z-index: 2;
}
.ml-tour.is-chu .ml-tour__toi { opacity: 1; transition: opacity .42s ease; }
.ml-tour.is-chu-ra .ml-tour__toi { opacity: 0; transition: opacity .6s ease .05s; }
.ml-tour__chu {
	position: absolute; inset: 0; display: flex; flex-direction: column;
	align-items: center; justify-content: center;
	text-align: center; padding: 0 8%;
	pointer-events: none; z-index: 3;
}
.ml-tour__chu b {
	font: 800 clamp(28px, 5.4vw, 56px)/1.12 var(--font-serif, var(--font-sans, sans-serif));
	color: var(--c-green-deep, #0b4a34);
	opacity: 0; letter-spacing: .085em;
	transform: scale(1.045);
	filter: blur(7px);
	transition: opacity .55s ease .12s,
		letter-spacing .8s cubic-bezier(.22, .8, .28, 1) .12s,
		transform .8s cubic-bezier(.22, .8, .28, 1) .12s,
		filter .55s ease .12s;
}
.ml-tour.is-chu .ml-tour__chu b {
	opacity: 1; letter-spacing: .012em; transform: scale(1); filter: blur(0);
}
.ml-tour.is-chu-ra .ml-tour__chu b {
	opacity: 0; letter-spacing: .02em; transform: scale(.995); filter: blur(3px);
	transition: opacity .42s ease, letter-spacing .5s ease, transform .5s ease, filter .42s ease;
}
.ml-tour__chu i { display: none; }
/* ĐÃ BỎ vignette viền tối: chủ site thấy nó làm màu bản đồ xỉn đi ("cứ tối
   tối"). Bản đồ pastel sáng là bản sắc của cẩm nang — đừng phủ gì lên nữa. */
/* Phông kem + khung mosaic — đúng công thức dải ảnh trang chi tiết. */
.ml-tour__mosaic {
	position: absolute; inset: 0; z-index: 1;
	display: flex; align-items: center; justify-content: center;
	/* VOAN kem mỏng chứ không phải màn đặc: model 3D thật vẫn hiện sau lớp
	   voan và lộ nguyên hình trong Ô TRỐNG giữa băng ảnh — "ảnh kỷ niệm vây
	   quanh công trình đang sống" (chủ site chốt hướng này). */
	background: rgba(246, 241, 230, .42);
	opacity: 0; transition: opacity .38s ease; pointer-events: none;
}
.ml-tour.is-anh .ml-tour__mosaic { opacity: 1; }
.ml-tour__khung {
	width: min(90%, 1240px); height: min(64vh, 640px);
	padding: 22px;
	/* Khung TÀNG HÌNH: các ô ảnh nổi thẳng trên bản đồ, không còn tấm card
	   trắng che — overflow hidden giữ lại để băng trượt gọn trong vùng. */
	background: transparent;
	border: 0;
	border-radius: 30px;
	overflow: hidden;
	/* MATCH-CUT chuyển động: cú lao đang PHÓNG TO thế giới, nên khung ảnh
	   vào cũng NỞ RA từ nhỏ — cắt cảnh mà chuyển động không đổi chiều. */
	transform: scale(.9);
	transition: transform .65s cubic-bezier(.22, .9, .3, 1);
}
.ml-tour.is-anh .ml-tour__khung { transform: translateY(0) scale(1); }
/* Ra cảnh: khung trôi TIẾP sang trái cùng hướng băng đang trượt rồi tan. */
.ml-tour.is-anh-ra .ml-tour__mosaic {
	opacity: 0; transition: opacity .42s ease;
}
.ml-tour.is-anh-ra .ml-tour__khung {
	transform: translateX(-46px) scale(.99);
	transition: transform .45s cubic-bezier(.5, 0, .6, 1);
}
/* Lưới 2 hàng chạy cột, nhịp ô của trang chi tiết: bìa 2×2 → ô cao → hai ô
   nhỏ → ô ngang → lặp. */
.ml-tour__bang {
	height: 100%; width: max-content;
	/* Ít ảnh (băng hẹp hơn khung) thì đứng giữa; margin auto vô hại khi băng
	   dài hơn khung. */
	margin-inline: auto;
	display: grid; grid-auto-flow: column;
	grid-template-rows: repeat(2, 1fr);
	grid-auto-columns: minmax(150px, 16vw);
	gap: 10px; will-change: transform;
}
.ml-tour__oo {
	position: relative; overflow: hidden; border-radius: 16px;
	background: var(--c-mint-wash, #eef4ef);
	box-shadow: 0 6px 18px rgba(11, 74, 52, .14);
	/* Ô vào SO LE trái→phải: mosaic tự ráp mình lại chứ không bật lên nguyên
	   tảng — mắt được dẫn theo đúng hướng băng sắp trượt. */
	opacity: 0; transform: translateY(18px);
}
.ml-tour.is-anh .ml-tour__oo {
	opacity: 1; transform: translateY(0);
	transition: opacity .5s ease, transform .55s cubic-bezier(.24, .9, .3, 1);
}
.ml-tour.is-anh .ml-tour__oo:nth-child(1) { transition-delay: .05s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(2) { transition-delay: .11s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(3) { transition-delay: .17s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(4) { transition-delay: .23s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(5) { transition-delay: .29s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(6) { transition-delay: .35s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(7) { transition-delay: .41s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(8) { transition-delay: .47s; }
.ml-tour.is-anh .ml-tour__oo:nth-child(n + 9) { transition-delay: .53s; }
.ml-tour.is-anh-ra .ml-tour__oo { transition-delay: 0s; }
.ml-tour__oo img {
	width: 100%; height: 100%; object-fit: cover; display: block;
	transform: scale(1.24);                  /* dư biên cho ảnh trôi parallax */
	will-change: transform;
}
.ml-tour__oo:first-child { grid-row: span 2; grid-column: span 2; }
/* MODEL NỔI: canvas three.js trong suốt đứng TRÊN lớp mosaic (z2) — model
   được "bốc" khỏi nền bản đồ, tự xoay chậm giữa dàn ảnh nguyên vẹn. */
.ml-tour__noi {
	/* PHẢI ghi width/height tường minh: canvas retina mang attr 780×1688,
	   inset:0 KHÔNG ép được replaced-element về khớp khung — nó phình theo
	   attr, model rơi xuống đáy màn (bug mobile). */
	position: absolute; inset: 0; z-index: 2;
	width: 100%; height: 100%;
	pointer-events: none;
	opacity: 0;
	transition: opacity .5s ease .22s;
}
.ml-tour__noi.is-hien { opacity: 1; }
/* Một ảnh duy nhất (ảnh riêng của người dùng): bỏ lưới, ảnh phủ trọn khung. */
.ml-tour__bang.la-mot { display: block; width: 100%; }
.ml-tour__bang.la-mot .ml-tour__oo { width: 100%; height: 100%; }
.ml-tour__oo:nth-child(6n + 2) { grid-row: span 2; }
.ml-tour__oo:nth-child(6n + 5) { grid-column: span 2; }
/* Tên điểm trên Ô BÌA — nguyên kiểu gallery-cover của trang chi tiết. */
.ml-tour__bia {
	position: absolute; left: 0; right: 0; bottom: 0;
	padding: 44px 18px 16px;
	background: linear-gradient(transparent, rgba(11, 74, 52, .82));
	color: #fff8e7; pointer-events: none;
}
.ml-tour__bia b { font: 800 clamp(19px, 2.2vw, 26px)/1.15 var(--font-serif, var(--font-sans, sans-serif)); }
.ml-tour__nhan { display: none; }
.ml-tour__dung {
	position: absolute; top: 14px; right: 14px; z-index: 4;
	width: 36px; height: 36px; border: 0; border-radius: 50%;
	background: rgba(20, 24, 22, .5); color: #fff;
	-webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
	font-size: 15px; line-height: 1; cursor: pointer;
}
.ml-tour__dung:hover { background: rgba(20, 24, 22, .75); }
/* GIỜ VÀNG GIẢ: cả tour nhuốm một tông phim ấm nhẹ — chỉ trong tour, hết là
   trả lại màu pastel nguyên bản (grade nhẹ tay, không phải lớp phủ tối như
   vignette đã bị bỏ). */
body.dang-tour #ml-map .maplibregl-canvas {
	filter: sepia(.12) saturate(1.06) hue-rotate(-6deg) brightness(1.02);
}
/* Progress bar mảnh dưới đáy: vàng thương hiệu, chạy theo tiến độ tour. */
.ml-tour__tien {
	position: absolute; left: 0; right: 0; bottom: 0; height: 3px;
	background: rgba(11, 74, 52, .12); z-index: 5; pointer-events: none;
}
.ml-tour__tien i {
	display: block; height: 100%; width: 0;
	background: var(--c-gold, #e9b949);
	transition: width 1.1s cubic-bezier(.3, .7, .3, 1);
}
/* Chữ ký outro: dòng mời VIẾT RA từ trái sang như ký tên cuối TVC, kèm nét
   gạch vàng kéo theo sau. */
.ml-tour.is-cuoi.is-chu .ml-tour__chu b {
	animation: tourKy 1.5s cubic-bezier(.3, .1, .3, 1) .3s both;
}
@keyframes tourKy {
	from { clip-path: inset(-10% 100% -14% 0); }
	to { clip-path: inset(-10% -4% -14% 0); }
}
.ml-tour.is-cuoi .ml-tour__chu b::after {
	content: ''; display: block; height: 3px; width: 58%;
	margin: 14px auto 0; border-radius: 2px;
	background: var(--c-gold, #e9b949);
	transform: scaleX(0); transform-origin: left;
	transition: transform .8s cubic-bezier(.25, .8, .3, 1) 1.7s;
}
.ml-tour.is-cuoi.is-chu .ml-tour__chu b::after { transform: scaleX(1); }
/* Màn cuối: hiện lại dòng phụ làm địa chỉ web, mảnh và giãn chữ. */
.ml-tour.is-cuoi .ml-tour__chu i {
	display: block; margin-top: 14px;
	font: 600 clamp(11px, 1.3vw, 14px)/1 var(--font-sans, sans-serif);
	font-style: normal; letter-spacing: .22em; text-transform: uppercase;
	color: rgba(70, 64, 52, .6);
	opacity: 0; transition: opacity .5s ease .5s;
}
.ml-tour.is-cuoi.is-chu .ml-tour__chu i { opacity: 1; }
/* Nút loa ngay dưới nút ✕, cùng cỡ cùng chất kính. Đang câm thì hiện gạch chéo. */
.ml-tour__loa {
	position: absolute; top: 62px; right: 14px; z-index: 4;
	width: 36px; height: 36px; border: 0; border-radius: 50%;
	background: rgba(20, 24, 22, .5); color: #fff;
	-webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
	cursor: pointer; display: grid; place-items: center;
}
.ml-tour__loa:hover { background: rgba(20, 24, 22, .75); }
.ml-tour__loa svg { width: 19px; height: 19px; }
.ml-tour__loa .loa-gach { display: none; }
.ml-tour.is-cam .ml-tour__loa .loa-gach { display: block; }
.ml-tour.is-cam .ml-tour__loa .loa-song { display: none; }
@media (max-width: 720px), (orientation: portrait) {
	.ml-tour__dung { top: calc(env(safe-area-inset-top, 0px) + 12px); }
	.ml-tour__loa { top: calc(env(safe-area-inset-top, 0px) + 60px); }
	/* Mobile: khung ăn TRỌN màn — màn bé mà còn chừa lề bốn phía thì mosaic
	   thành con tem. Ảnh tràn viền, chỉ đệm theo phần khuyết an toàn. */
	.ml-tour__khung {
		width: 100%; height: 100%;
		padding: calc(env(safe-area-inset-top, 0px) + 10px) 10px calc(env(safe-area-inset-bottom, 0px) + 10px);
		border-radius: 0; border: 0; box-shadow: none;
	}
	.ml-tour__bang { grid-auto-columns: minmax(132px, 38vw); gap: 8px; }
	.ml-tour__oo { border-radius: 13px; }
}
/* ĐÃ BỎ ép fullscreen khi chiếu (chủ site chốt): phim quay trong đúng khung
   bản đồ; chỉ full màn khi người dùng đã tự bật fullscreen bản đồ từ trước. */
/* Huy hiệu đang quay video: chấm đỏ nhấp + %, chỉ hiện trên màn, không vào phim. */
.ml-tour__rec {
	position: absolute; top: 14px; left: 14px; z-index: 9995;
	display: flex; align-items: center; gap: 7px;
	padding: 7px 13px; border-radius: 999px;
	background: rgba(20, 24, 22, .62); color: #fff;
	-webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
	font: 700 12px/1 var(--font-sans, sans-serif);
	letter-spacing: .04em;
	pointer-events: none;
}
.ml-tour__rec i {
	width: 9px; height: 9px; border-radius: 50%;
	background: #ff453a;
	animation: recNhay 1.1s ease-in-out infinite;
}
@keyframes recNhay { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }
/* Nhãn tên điểm đang chiếu — dạng GHIM: nhãn + đuôi nhọn, MỌC LÊN từ chân
   điểm (transform-origin đáy) như ghim thật bung ra, không phải viên nhãn
   nhảy vào giữa trời. */
.ml-tour-nhan { pointer-events: none; }
/* Lớp con mang animation — gốc để nguyên cho MapLibre đặt transform định vị. */
.ml-tour-nhan__hop {
	display: flex; flex-direction: column; align-items: center;
	transform-origin: bottom center;
	animation: tourNhanMoc .5s cubic-bezier(.3, 1.35, .4, 1) both;
}
.ml-tour-nhan__chu {
	background: var(--c-green-deep, #0b4a34);
	color: #fff8e7;
	font: 700 13.5px/1 var(--font-sans, sans-serif);
	padding: 8px 16px;
	border-radius: 999px;
	white-space: nowrap;
	box-shadow: 0 6px 18px rgba(11, 74, 52, .35);
}
.ml-tour-nhan__duoi {
	width: 0; height: 0;
	border-left: 7px solid transparent;
	border-right: 7px solid transparent;
	border-top: 8px solid var(--c-green-deep, #0b4a34);
}
@keyframes tourNhanMoc {
	from { opacity: 0; transform: scale(.25); }
	60% { opacity: 1; }
	to { opacity: 1; transform: scale(1); }
}
/* Trong tour: giấu toàn bộ điều khiển + ghim DOM. */
body.dang-tour .ml-tour-goi,
body.dang-tour .pbuoc,
body.dang-tour .plan-ghim,
body.dang-tour .map-tron__ve,
body.dang-tour #ml-map .ml-marker,
body.dang-tour #ml-map .ml-shop,
body.dang-tour #ml-map .ml-edge,
body.dang-tour #ml-map .mdock,
body.dang-tour #ml-map .mmon,
body.dang-tour #ml-map .gio,
body.dang-tour #ml-map .mpop,
body.dang-tour #ml-map .ml-zoom,
body.dang-tour #ml-map .maplibregl-ctrl {
	opacity: 0 !important; pointer-events: none !important;
	transition: opacity .5s ease;
}
/*gcm-tour-end*/
