/* =============================================================================
   40-page-cau-chuyen.css — DỰNG LẠI TOÀN BỘ theo ảnh mẫu 27/08/2026
   (thay bản mobile-only cũ dựng 20/08 — trang không còn dùng Design System
   chung nữa, có bố cục + màu riêng theo mockup người dùng gửi trực tiếp).

   🔒 PHẠM VI — hai lớp cô lập, giống mọi trang khác:
      1. TỆP chỉ nạp khi slug = cau-chuyen (functions.php, luật III.11).
      2. MỌI bộ chọn bọc `.tl-cau-chuyen` — lớp child theme gắn lên <body>.
      ⇒ Không luật nào ở đây chạm trang chủ, Về tôi, Tôi có thể giúp gì, Kiến
        thức. Header/Footer dùng chung — KHÔNG đụng tới.

   Màu neo theo ảnh mẫu: navy #061d4c, cam #f15b2a. Cam RAW (#f15b2a) chỉ đủ
   3,35:1 trên nền trắng — dưới ngưỡng 4,5:1 của chữ thường (WCAG 1.4.3), nên
   tách hai vai đúng khuôn đã làm ở mọi trang khác trong dự án (CLAUDE.md
   §19.3/§22.5/§26.4): `--slc-orange` cho ĐỒ HOẠ (icon, gạch chân, nền nhạt —
   chỉ cần 3:1 theo 1.4.11), `--slc-orange-text` cho CHỮ/nút nền cam+chữ trắng
   (dùng luôn màu primary sẵn có của site `#C4400A`, đã đo 5,14:1 — không bịa
   thêm biến, và nút [button color="primary"] tự động khớp không cần CSS).
============================================================================= */

/* -----------------------------------------------------------------------------
   1. BẢNG MÀU + BIẾN DÙNG RIÊNG TRANG NÀY
   [phục vụ]  toàn trang | khối: biến màu, bán kính, khoảng cách dùng lại
   [trang]    cau-chuyen
   [mockup]   ảnh mẫu người dùng gửi 27/08/2026 (không có file, đo bằng mắt)
   [lý do vượt panel]  Customizer chỉ có 2 ô màu chính, không đủ cho hệ
              navy/cam/xám/viền riêng của trang này
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper {
	--slc-navy: #061d4c;
	--slc-orange: #f15b2a;
	--slc-orange-text: #c4400a;
	--slc-ink: #33394a;
	--slc-muted: #6b7280;
	--slc-border: #e7e9ef;
	--slc-card-shadow: 0 4px 16px rgba(6, 29, 76, .06);
	--slc-r: 14px;
	background: #fff;
}

/* =============================================================================
   2. HERO
============================================================================= */

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Section + Row + hai Text | khối: hero (tiêu đề, mô tả)
   [trang]    cau-chuyen
   [mockup]   H1 hai dòng navy uppercase bên trái, đoạn dẫn xám nhỏ bên dưới
   [lý do vượt panel]  cỡ chữ H1/mô tả và độ rộng cột chữ không có ô panel
              tương ứng; `<br>` ép xuống dòng đúng hai dòng như mẫu (whitelist
              III.2 cho phép `<br>`).
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-story-hero-content { padding-right: 28px; }

.tl-cau-chuyen .tl-hero-h1 h1 {
	color: var(--slc-navy);
	font-weight: 800;
	font-size: clamp(24px, 1.95vw, 30px);
	line-height: 1.16;
	letter-spacing: -.01em;
	margin: 0 0 10px;
	text-transform: uppercase;
}

.tl-cau-chuyen .tl-hero-desc p {
	color: var(--slc-muted);
	font-size: 13.5px;
	line-height: 1.55;
	margin: 0 0 6px;
	max-width: 46em;
}

.tl-cau-chuyen .tl-hero-desc p:last-child { margin-bottom: 0; }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Image | khối: hero (ảnh nhóm người bên phải)
   [trang]    cau-chuyen
   [mockup]   ảnh bo góc lớn, cao gần bằng khối chữ, KHÔNG overlay tối màu
   [lý do vượt panel]  `[ux_image]` không có thuộc tính `radius` (bẫy #15,
              CLAUDE.md 8.4/12.3) — bo góc phải làm bằng CSS trên khung ngoài
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-story-hero-media { overflow: hidden; border-radius: var(--slc-r); }
.tl-cau-chuyen .tl-story-hero-media .image { border-radius: var(--slc-r); overflow: hidden; }
.tl-cau-chuyen .tl-story-hero-img img { object-fit: cover; width: 100%; height: 100%; max-height: 230px; }

/* =============================================================================
   3. CÂU CHUYỆN NỔI BẬT — hai thẻ nằm ngang
============================================================================= */

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Column (thẻ) + Row_inner | khối: khung thẻ trắng
   [trang]    cau-chuyen
   [mockup]   thẻ trắng viền mảnh, bo góc, bóng rất nhẹ; ảnh trái 4:3, chữ phải
   [lý do vượt panel]  `[col]`/`[row_inner]` không có `bg`/`border`/`padding`
              thật sự render (chỉ `bg_color` và bộ ba border có tác dụng — đã
              đo bằng HTML thật, xem CLAUDE.md §37.1). Đệm bên trong PHẢI CSS.
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-story-noibat {
	background: #fff;
	border: 1px solid var(--slc-border);
	border-radius: var(--slc-r);
	box-shadow: var(--slc-card-shadow);
	overflow: hidden;
}

/* ⛔ Flatsome đặt `.col{padding:0 15px 30px}` MẶC ĐỊNH cho mọi cột (đệm lưới
   khi xuống hàng) — cả cột ngoài `.tl-story-noibat` lẫn hai cột ảnh/chữ bên
   trong `row_inner` đều dính. Ảnh và chữ đã đúng chiều cao (đo DOM: cả hai
   cùng 169/171px, khớp nhau), nhưng khung thẻ NGOÀI cao hơn 30px vô lý ⇒
   viền trắng thừa phía dưới, nhìn như "ảnh/chữ chưa căn giữa". Chỉ cần bỏ
   `padding-bottom`, giữ nguyên `padding` trái/phải (đang là khe hở đúng ý
   giữa 2 thẻ, và giữa cột ảnh với cột chữ). */
.tl-cau-chuyen .tl-story-noibat,
.tl-cau-chuyen .tl-noibat-content { padding-bottom: 0 !important; }

.tl-cau-chuyen .tl-story-noibat .row_inner,
.tl-cau-chuyen .tl-story-noibat .row.row_inner { margin: 0; }

/* Ảnh video cách viền thẻ một khoảng trên/dưới (4T phản hồi 27/08) — chỉ
   thêm đệm dọc, giữ nguyên trái/phải (ảnh vẫn chạm mép trái thẻ). `!important`
   để thắng luôn cả rule "trung hoà padding-bottom mặc định của Flatsome" ở
   trên — ở ĐÂY ta lại CHỦ ĐỘNG muốn có padding-bottom, không phải bỏ nó. */
.tl-cau-chuyen .tl-noibat-media { overflow: hidden; padding: 14px 0 14px 14px !important; }
.tl-cau-chuyen .tl-noibat-media .col-inner { height: 100%; }
/* Khe ảnh ↔ chữ: 4T phản hồi 28/08 "chữ sát khung video quá, cho dịch xa chút".
   Đo LIVE 1440: mép phải video 362 → chữ bắt đầu 366, tức chỉ 4px. Nới đệm
   trái lên 20px (khe 20px, gấp 5 lần cũ) — cột chữ rộng 357px nên vẫn còn
   319px cho chữ, thừa sức cho H3 hai dòng. Chỉ ăn ở desktop: khổ ≤849 và
   ≤549 đều đã có rule `padding` riêng đè lên (mục 6 và mục vòng 27/08). */
.tl-cau-chuyen .tl-noibat-content { padding: 14px 18px 14px 20px; }
.tl-cau-chuyen .tl-noibat-content .col-inner { display: flex; flex-direction: column; justify-content: center; height: 100%; }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Text (nhãn/tiêu đề/mô tả/link) | khối: nội dung thẻ nổi bật
   [trang]    cau-chuyen
   [mockup]   nhãn cam nhỏ in hoa, H3 navy đậm, mô tả xám, link "Xem ngay →" cam đậm
   [lý do vượt panel]  cỡ chữ/độ giãn chữ theo mẫu không có ô panel tương ứng
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-nhan-section p {
	color: var(--slc-orange-text);
	font-size: 11px;
	font-weight: 800;
	letter-spacing: .06em;
	text-transform: uppercase;
	margin: 0 0 4px;
}

.tl-cau-chuyen .tl-noibat-title h3 {
	color: var(--slc-navy);
	font-size: 16.5px;
	font-weight: 800;
	line-height: 1.25;
	margin: 0 0 5px;
}

.tl-cau-chuyen .tl-noibat-desc p {
	color: var(--slc-muted);
	font-size: 12.5px;
	line-height: 1.45;
	margin: 0 0 6px;
}

/* ⛔ Nút "Xem ngay →" (`.tl-link-xem`) ĐÃ GỠ 28/08 theo yêu cầu 4T ("hơi thừa,
   không cần") — nó trỏ về `/cau-chuyen/`, đúng trang đang đứng, nên là liên
   kết chết. Gỡ ở NGUỒN (`uxb/pages/cau-chuyen.txt`), không ẩn bằng CSS. Ba
   nhóm rule tạo dáng cho nó ở tệp này (đây, mục 6, và vòng 27/08) đã xoá theo
   để không còn CSS mồ côi. Người xem vẫn mở được video bằng nút play trên
   thumbnail — đó mới là hành vi thật của thẻ. */

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: ux_banner + text_box + video_button | khối: thumbnail video
   [trang]    cau-chuyen
   [mockup]   ảnh 4:3, nút play tròn nền tối mờ + tam giác trắng giữa ảnh,
              huy hiệu thời lượng góc dưới-trái nền tối chữ trắng
   [lý do vượt panel]  `.open-video` là CSS lõi Flatsome — panel không có ô
              đổi màu/kích thước nút phát. Đã ĐÚNG khuôn `[ux_banner
              container_width="full-width"]` để tránh bẫy `.container` bó theo
              site_width Customizer (CLAUDE.md §33.1/§38.3).
   -------------------------------------------------------------------------- */
/* Bo góc nhẹ cho ảnh — giờ ảnh nổi tách khỏi góc bo của thẻ ngoài (có đệm
   dọc ở mục trên), cạnh sắc sẽ lệch mắt cạnh góc bo ngoài nếu để radius:0. */
.tl-cau-chuyen .tl-noibat-banner { border-radius: 10px; overflow: hidden; }
.tl-cau-chuyen .tl-noibat-banner img.bg { object-fit: cover; }

.tl-cau-chuyen .tl-noibat-banner .open-video {
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	width: 46px !important;
	height: 46px !important;
	max-width: 46px !important;
	max-height: 46px !important;
	border-radius: 50% !important;
	background: rgba(6, 29, 76, .48) !important;
	border: 1.5px solid rgba(255, 255, 255, .55) !important;
	color: #fff !important;
	box-shadow: none;
}
.tl-cau-chuyen .tl-noibat-banner .open-video i { margin-left: 3px; font-size: 1.05em; }
.tl-cau-chuyen .tl-noibat-banner .open-video:hover { background: var(--slc-orange) !important; border-color: var(--slc-orange) !important; }

.tl-cau-chuyen .tl-duration-badge .text-box-content {
	background: rgba(6, 29, 76, .72) !important;
	border-radius: 6px !important;
}
.tl-cau-chuyen .tl-duration-badge .text-inner { padding: 3px 9px !important; }
.tl-cau-chuyen .tl-duration-badge p {
	color: #fff;
	font-size: 11.5px;
	font-weight: 700;
	margin: 0;
	line-height: 1.3;
}
.tl-cau-chuyen .tl-duration-badge { width: auto !important; }

/* =============================================================================
   4. THƯ VIỆN NHỮNG CÂU CHUYỆN THẬT
============================================================================= */

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Text (H2) | khối: tiêu đề khối thư viện + gạch chân cam
   [trang]    cau-chuyen
   [mockup]   H2 navy đậm in hoa căn giữa, gạch ngắn cam bo tròn ngay dưới
   [lý do vượt panel]  gạch chân trang trí dựng bằng `::after` — panel không
              có khái niệm "vẽ thêm một đường dưới tiêu đề" (cùng họ lý do đã
              dùng cho `.tl-checklist`/`.tl-moc`, xem CLAUDE.md 11.1)
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-lib-h2 { margin-bottom: 8px; }
.tl-cau-chuyen .tl-lib-h2 h2 {
	color: var(--slc-navy);
	font-weight: 800;
	font-size: clamp(18px, 1.4vw, 22px);
	letter-spacing: .01em;
	margin: 0;
	position: relative;
	display: inline-block;
}
.tl-cau-chuyen .tl-lib-h2 h2::after {
	content: "";
	display: block;
	width: 40px;
	height: 3px;
	border-radius: 2px;
	background: var(--slc-orange);
	margin: 6px auto 0;
}

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: tabgroup/tab | khối: 4 tab icon + nhãn của thư viện
   [trang]    cau-chuyen
   [mockup]   một hàng 4 tab "icon tròn nét ngoài + chữ", tab đang chọn màu
              cam (icon lẫn chữ lẫn gạch chân), ba tab còn lại navy nhạt
   [lý do vượt panel]  `[tab]` chỉ có `title`/`anchor` (bẫy #3, CLAUDE.md
              8.4-3) — không có ô icon. Nhúng icon qua `<span>` trong chính
              `title` (thuộc tính này chạy qua `wp_kses_post`, span/class được
              phép — đã đọc thẳng `inc/shortcodes/tabs.php` để chắc chắn), rồi
              tô màu bằng CSS `mask-image` để đổi màu THEO trạng thái active
              mà không cần hai icon riêng cho hai màu.
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-lib-tabs.tabbed-content { margin-bottom: 14px; }
.tl-cau-chuyen .tl-lib-tabs .nav {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 10px 52px;
	border-bottom: none;
}
.tl-cau-chuyen .tl-lib-tabs .nav li.tab { margin: 0; }
/* ⚠ ĐÍNH CHÍNH LẦN 2: vạch chỉ báo KHÔNG phải do `border-bottom` của tôi vẽ —
   Flatsome tự vẽ nó bằng `::before` TRÊN CHÍNH THẺ <a> (`position:absolute;
   top:0; height:3px`, ẩn bằng `opacity:0` khi tab không active). Mọi lần đổi
   border trước đó không hề chạm tới cơ chế thật này, nên vạch ở đỉnh vẫn còn
   nguyên — đã kiểm bằng `getComputedStyle(a,'::before')` để thấy tận mắt.
   Gỡ hẳn border-bottom tự vẽ (dư thừa), đẩy đúng pseudo-element lõi xuống
   đáy thay vì tự vẽ thêm một vạch khác. */
.tl-cau-chuyen .tl-lib-tabs .nav a {
	display: block;
	padding: 0 2px 10px;
	color: var(--slc-muted);
	border: none !important;
}
.tl-cau-chuyen .tl-lib-tabs .nav a::before { top: auto !important; bottom: 0 !important; }
.tl-cau-chuyen .tl-lib-tabs .nav li.tab.active a { color: var(--slc-orange-text); }
.tl-cau-chuyen .tl-lib-tabs .nav li.tab.active a::before { background-color: var(--slc-orange) !important; }
/* ⛔ Flatsome tự bọc icon+chữ trong MỘT `<span>` con của `<a>` (đọc thẳng
   `ux_tabgroup()`: `<a…><span>{title}</span></a>`) — `display:flex` đặt
   trên `<a>` không chạm tới cặp icon/chữ THẬT SỰ, chúng vẫn nằm trong span
   con theo baseline mặc định (icon 30px lệch hẳn xuống dưới chữ). Phải nhắm
   đúng `<a> > span`, không phải `<a>`. */
.tl-cau-chuyen .tl-lib-tabs .nav a > span {
	display: flex;
	align-items: center;
	gap: 10px;
}
.tl-cau-chuyen .tl-tab-txt { font-size: 14px; font-weight: 700; line-height: 1; }

.tl-cau-chuyen .tl-tab-ic {
	width: 30px;
	height: 30px;
	display: inline-block;
	flex: 0 0 auto;
	background-color: var(--slc-navy);
	-webkit-mask-repeat: no-repeat;
	mask-repeat: no-repeat;
	-webkit-mask-position: center;
	mask-position: center;
	-webkit-mask-size: contain;
	mask-size: contain;
	opacity: .75;
}
.tl-cau-chuyen li.tab.active .tl-tab-ic { background-color: var(--slc-orange-text); opacity: 1; }

.tl-cau-chuyen .tl-tab-ic-1 { -webkit-mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-1-hanh-trinh.svg); mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-1-hanh-trinh.svg); }
.tl-cau-chuyen .tl-tab-ic-2 { -webkit-mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-2-gia-dinh.svg); mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-2-gia-dinh.svg); }
.tl-cau-chuyen .tl-tab-ic-3 { -webkit-mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-3-dong-hanh.svg); mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-3-dong-hanh.svg); }
.tl-cau-chuyen .tl-tab-ic-4 { -webkit-mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-4-dang-nho.svg); mask-image: url(https://toan.tiepthitute.com/wp-content/uploads/2026/08/icon-tab-4-dang-nho.svg); }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: blog_posts (.tl-card-story) | khối: lưới 6 thẻ câu chuyện
   [trang]    cau-chuyen
   [mockup]   lưới 3×2, thẻ trắng viền mảnh bo góc nhẹ bóng mờ, ảnh trên cùng
              bo góc trên, badge trắng nhỏ góc trên-trái ảnh, tiêu đề navy,
              mô tả xám 2 dòng, link cam "Đọc câu chuyện →"
   [lý do vượt panel]  `show_category` chỉ in TÊN CHUYÊN MỤC (sai thứ cần —
              xem functions.php 2c-3); badge do PHP in ra rồi CSS định vị.
              `readmore` render thành nút `.button` — ép về dạng chữ trần
              bằng CSS vì mockup không có khung/nền nút ở link này.
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-card-story.row { margin: 0 -9px; }
.tl-cau-chuyen .tl-card-story .col { padding: 9px; }
.tl-cau-chuyen .tl-card-story .box {
	position: relative;
	background: #fff;
	border: 1px solid var(--slc-border);
	border-radius: 12px;
	box-shadow: var(--slc-card-shadow);
	overflow: hidden;
	height: 100%;
}
.tl-cau-chuyen .tl-card-story .box-image { border-radius: 0; }
.tl-cau-chuyen .tl-card-story .box-text-inner { padding: 12px 14px 13px; }

/* Bài CHƯA có ảnh đại diện (mồi ở 3 tab "Chia sẻ gia đình"/"Đồng hành"/
   "Đáng nhớ" — chỉ 6 bài của tab "Hành trình người bệnh" đã được gán ảnh
   thật, xem functions.php 2c-3) bị Flatsome bỏ HẲN khối `.box-image`
   (blog_posts.php: `if(has_post_thumbnail())`) ⇒ card đó ngắn hẳn, đỉnh/đáy
   lệch với các card có ảnh trong CÙNG một hàng và giữa các tab. Chèn khối
   giữ chỗ đúng tỉ lệ ảnh (46%, khớp `image_height` đã đặt ở panel) — không
   có ô panel nào "ảnh mặc định khi thiếu", và `:has()` là cách CSS thuần
   duy nhất phân biệt được "card có ảnh" với "card không" mà không sửa PHP. */
.tl-cau-chuyen .tl-card-story .box:not(:has(.box-image))::before {
	content: "";
	display: block;
	width: 100%;
	padding-top: 46%;
	background: linear-gradient(135deg, #eef0f4, #e3e6ee);
}

/* ⛔ Flatsome tự đặt `.box-text{position:relative}` (lõi core, phục vụ hiệu
   ứng show-on-hover ở style khác) — badge của mình lại nằm TRONG `.box-text`,
   nên `position:absolute` của nó bám vào `.box-text` (ứng viên GẦN hơn),
   không bám ra tới `.box` ngoài cùng như tính toán ban đầu. Hệ quả: badge
   "top:14px" đo từ NGAY DƯỚI ảnh (chỗ box-text bắt đầu) chứ không phải từ
   đỉnh ảnh, đè thẳng lên tiêu đề bài. Ép `.box-text` về `static` cho card
   này (không dùng kiểu hover-reveal nào) để badge trồi đúng lên `.box`. */
.tl-cau-chuyen .tl-card-story .box-text { position: static; }

.tl-cau-chuyen .tl-card-story .tl-benh-badge {
	position: absolute;
	top: 14px;
	left: 14px;
	z-index: 3;
	background: #fff;
	color: var(--slc-navy);
	font-size: 10.5px;
	font-weight: 800;
	letter-spacing: .03em;
	text-transform: uppercase;
	padding: 5px 10px;
	border-radius: 6px;
	box-shadow: 0 2px 8px rgba(6, 29, 76, .18);
}

.tl-cau-chuyen .tl-card-story .post-title { margin: 0 0 4px; }
.tl-cau-chuyen .tl-card-story .post-title a {
	color: var(--slc-navy);
	font-size: 14px;
	font-weight: 800;
	line-height: 1.3;
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	overflow: hidden;
	/* `line-clamp` chỉ CHẶN TRÊN — tiêu đề ngắn 1 dòng vẫn thấp hơn tiêu đề
	   dài 2 dòng, làm card cao khác nhau dù cùng có ảnh (đo thật: 18px vs
	   36px, lệch nguyên một dòng). Ép `min-height` đúng 2 dòng để LÚC NÀO
	   cũng chừa chỗ như nhau, bất kể tiêu đề bài dài ngắn ra sao. */
	min-height: calc(14px * 1.3 * 2);
}
.tl-cau-chuyen .tl-card-story .is-divider { display: none; }
.tl-cau-chuyen .tl-card-story .from_the_blog_excerpt {
	color: var(--slc-muted);
	font-size: 12px;
	line-height: 1.45;
	margin: 0;
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	overflow: hidden;
	min-height: calc(12px * 1.45 * 2);
}
.tl-cau-chuyen .tl-card-story .button {
	display: inline-block;
	margin: 6px 0 0 !important;
	padding: 0 !important;
	background: none !important;
	border: none !important;
	border-radius: 0 !important;
	color: var(--slc-orange-text) !important;
	font-size: 12.5px;
	font-weight: 800;
	text-transform: none;
	box-shadow: none !important;
	min-height: 0 !important;
	height: auto !important;
}
.tl-cau-chuyen .tl-card-story .button::after { content: "\2192"; margin-left: 6px; }
.tl-cau-chuyen .tl-card-story .button:hover { text-decoration: underline; background: none !important; }

/* =============================================================================
   5. BỐN LỜI CAM KẾT
============================================================================= */

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: featured_box | khối: hàng 4 cam kết icon-trái
   [trang]    cau-chuyen
   [mockup]   4 cột đều, icon tròn nét cam bên trái, tiêu đề navy đậm + mô tả
              xám nhỏ bên phải icon, cả hàng nổi trên MỘT khung nền xanh nhạt
              bo góc DUY NHẤT (⚠ đính chính 27/08: vòng trước lỡ tách thành
              4 khung riêng — 4T xác nhận phải là MỘT khung liền cho cả hàng).
   [lý do vượt panel]  không có ô panel nào tô nền/bo góc cho cả một Section —
              cùng kỹ thuật đã dùng cho dải CTA bên dưới: sơn `.section-content`,
              không sơn từng `.col-inner`.
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .tl-story-values .section-content {
	background: #eef2fa;
	border-radius: 16px;
	padding: 22px 24px;
}
.tl-cau-chuyen .tl-story-values .box-text p { margin: 0; font-size: 12px; line-height: 1.45; color: var(--slc-muted); }
.tl-cau-chuyen .tl-story-values .box-text strong { display: block; color: var(--slc-navy); font-size: 13.5px; margin-bottom: 2px; }
.tl-cau-chuyen .tl-story-values .box-image { margin-bottom: 0; }

/* =============================================================================
   6. DẢI CTA CUỐI TRANG
============================================================================= */

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Section + Text + Button | khối: dải CTA nền cam nhạt
   [trang]    cau-chuyen
   [mockup]   nền cam rất nhạt, icon trái, tiêu đề navy đậm + mô tả xám, nút
              cam chữ trắng bên phải kèm hai số liên hệ nhỏ dưới nút
   [lý do vượt panel]  bán kính khối CTA không có ô Section tương ứng
   -------------------------------------------------------------------------- */
/* ⛔ `bg_color` của `[section]` sơn màu lên chính thẻ `<section>` NGOÀI CÙNG
   (full-bleed hết chiều ngang màn hình, `border-radius` không thấy được vì
   nền tô ra tận mép viewport) — `.section-content` bên trong chỉ là khung
   giới hạn bề rộng, trong suốt. Bo góc đặt nhầm chỗ nên vô tác dụng suốt từ
   đầu. Sửa đúng gốc: gỡ `bg_color` khỏi shortcode (xem uxb/pages/cau-chuyen.txt),
   tự sơn nền + bo góc + đệm ngang ngay trên `.section-content` — nền giờ là
   một khối thẻ nổi trong lòng trang, đúng mẫu, không tràn hết màn hình. */
/* ⚠ `padding="16px"` khai ở shortcode Section hoá ra KHÔNG rơi vào
   `.section-content` — cùng họ với `bg_color` phía trên, đệm dọc thật sự
   nằm ở thẻ `<section>` ngoài. Đo được: `.section-content` chỉ có padding
   NGANG do chính CSS này đặt, dọc = 0px ⇒ nút "LIÊN HỆ TƯ VẤN NGAY" (cột cao
   nhất, quyết định chiều cao cả hàng) dính sát mép trên. Đặt hẳn padding dọc
   ở đây, không trông cậy vào thuộc tính `padding` của shortcode nữa. */
.tl-cau-chuyen .tl-story-final-cta .section-content {
	background: #fdf1ea;
	border-radius: 16px;
	overflow: hidden;
	padding: 26px 32px;
}
.tl-cau-chuyen .tl-story-final-cta .row { align-items: center; }
/* Cột icon (span 1/12, không có chữ) cao vọt hơn hẳn 2 cột kia, kéo cả hàng
   giãn theo nó — `align-items:center` đúng nhưng không có gì để căn giữa vì
   chính cột icon ĐANG LÀ cột cao nhất. Hai nguồn thừa: (1) đệm lưới
   `padding-bottom:30px` quen thuộc của Flatsome (CLAUDE.md §37.1 cùng họ
   bẫy này); (2) `featured_box[pos="top"]` tự chừa `margin-bottom:16px` giữa
   icon và chữ — cột này lại KHÔNG có chữ nên đó là khoảng trống chết. */
.tl-cau-chuyen .tl-story-final-cta .col { padding-bottom: 0 !important; }
.tl-cau-chuyen .tl-story-final-cta .icon-box-img { margin-bottom: 0 !important; }
.tl-cau-chuyen .tl-story-final-cta h2 { color: var(--slc-navy); font-size: 18px; font-weight: 800; margin: 0 0 4px; }
.tl-cau-chuyen .tl-story-final-cta p { color: var(--slc-muted); font-size: 13px; margin: 0; }
.tl-cau-chuyen .tl-band-lienhe p { color: var(--slc-muted); font-size: 12px; margin: 6px 0 0; }

/* =============================================================================
   TỪ 849px TRỞ XUỐNG: MÁY TÍNH BẢNG + ĐIỆN THOẠI
============================================================================= */
@media (max-width: 849px) {

/* -----------------------------------------------------------------------------
   [phục vụ]  toàn trang | khối: gutter + thang chữ mobile
   [trang]    cau-chuyen
   [mockup]   `mobile-mockup-cau-chuyen-v2.png` (770–864px, đại diện 360–430
              thật) — 4T giao lại TOÀN BỘ số đo: gutter 16–20px, H1 30–32px,
              H2 22–24px, body sàn 15–16px.
   [lý do vượt panel]  bề ngang dải nội dung dùng chung `--tl-be-ngang`
              (min(94vw,…)) cho CẢ site — ở 390px chỉ ra ~11,7px mỗi bên,
              dưới sàn 16px yêu cầu riêng cho trang này. Ghi đè max-width của
              CHÍNH `.row` trong phạm vi `.tl-cau-chuyen` + mobile, không đụng
              biến toàn site nên 5 trang kia không suy suyển.
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .page-wrapper .row { max-width: calc(100% - 36px); }  /* 18px mỗi bên */
	/* ⛔ ĐÍNH CHÍNH (phát hiện qua ảnh chụp — thẻ câu chuyện co lại còn 162px):
	   `.row` KHÔNG chỉ là hàng ngoài cùng — `[blog_posts]` tự in ra MỘT `.row`
	   NỘI BỘ nữa, lồng trong `.col > .col-inner` của hàng ngoài. Không loại trừ
	   thì luật trên ăn CẢ HAI tầng lồng nhau, trừ bì 36px hai lần liên tiếp
	   (198→162, đúng số đo bắt được). 10-base.css đã có sẵn đúng cái chặn này
	   cho biến toàn site (`--tl-be-ngang`) — copy lại quy tắc đó vào đây,
	   nhưng bản site-wide không chạm tới trang này vì bị luật trên đè trước. */
	.tl-cau-chuyen .page-wrapper .row .row { max-width: none; }

	.tl-cau-chuyen .tl-hero-h1 h1 { font-size: clamp(30px, 8vw, 32px); line-height: 1.18; }
	.tl-cau-chuyen .tl-lib-h2 h2 { font-size: clamp(22px, 5.6vw, 24px); }
	.tl-cau-chuyen .tl-story-final-cta h2 { font-size: clamp(20px, 5.2vw, 22px); }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Section + Row + Text | khối: hero dồn dọc
   [trang]    cau-chuyen
   [mockup]   chữ trước, ảnh 16:9 LỚN sau — không co ảnh nhỏ như bản trước
   [lý do vượt panel]  cỡ chữ H1 theo `clamp` không panel nào đặt được
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .tl-story-hero-content { padding-right: 0; margin-bottom: 16px; }
	/* `<br>` ép đúng 2 dòng ở cột hẹp desktop (span 5/12) — ở mobile cột full
	   width khác tỉ lệ, giữ `<br>` làm chữ "LÀ" mồ côi một dòng riêng. Ẩn để
	   trình duyệt tự ngắt dòng theo bề ngang thật. */
	.tl-cau-chuyen .tl-hero-h1 h1 br { display: none; }
	.tl-cau-chuyen .tl-hero-desc p { font-size: 15.5px; line-height: 1.55; max-width: none; }
	.tl-cau-chuyen .tl-story-hero-media { border-radius: var(--slc-r); overflow: hidden; }
	.tl-cau-chuyen .tl-story-hero-img img { max-height: none; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Row_inner + Column | khối: hai thẻ "câu chuyện nổi bật"
   [trang]    cau-chuyen
   [mockup]   STACK 1 cột, media 16:9 LỚN, đệm thẻ 16px, chữ ≥15px
   [lý do vượt panel]  `col_inner` khai `span__sm="5"/"7"` cố định bằng desktop
              (panel không có "tự dồn dọc cho col_inner lồng trong row_inner"
              — khác `[col]` ngoài, `[col_inner]` không tự dồn theo `span__sm`
              nhỏ hơn khi row cha đã hẹp). Phải ép `flex-basis:100%` bằng CSS.
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .tl-story-noibat { margin-bottom: 16px; }
	.tl-cau-chuyen .tl-story-noibat:last-child { margin-bottom: 0; }

	.tl-cau-chuyen .tl-story-noibat .row_inner,
	.tl-cau-chuyen .tl-story-noibat .row.align-stretch {
		display: block;
	}
	.tl-cau-chuyen .tl-noibat-media,
	.tl-cau-chuyen .tl-noibat-content {
		width: 100%;
		max-width: 100%;
		flex-basis: 100%;
	}
	.tl-cau-chuyen .tl-noibat-media { padding: 0 !important; }
	.tl-cau-chuyen .tl-noibat-media .banner {
		aspect-ratio: 16 / 9;
		height: auto !important;
	}
	.tl-cau-chuyen .tl-noibat-media .banner .height-fix { display: none; }
	.tl-cau-chuyen .tl-noibat-media .banner-bg,
	.tl-cau-chuyen .tl-noibat-media .banner-inner { position: absolute; inset: 0; }

	.tl-cau-chuyen .tl-noibat-content { padding: 16px; }
	.tl-cau-chuyen .tl-noibat-title h3 { font-size: 17px; line-height: 1.3; }
	.tl-cau-chuyen .tl-noibat-desc p { font-size: 15px; line-height: 1.5; margin-bottom: 8px; }
	.tl-cau-chuyen .tl-noibat-banner .open-video { width: 46px !important; height: 46px !important; max-width: 46px !important; max-height: 46px !important; }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: tabgroup | khối: hàng tab thư viện
   [trang]    cau-chuyen
   [mockup]   ⚠ ĐÍNH CHÍNH 27/08 (mockup v2): KHÔNG còn rail cuộn ngang — 4 tab
              nằm gọn MỘT HÀNG trong một khung viền bo tròn chung, icon nhỏ +
              nhãn tự ngắt 2 dòng khi cần. Icon/nhãn là UI CHROME nhỏ (miễn
              trừ sàn 15px như đã áp cho mọi label/badge khác trong dự án —
              CLAUDE.md 22.5/26.4), nhưng phải ĐỦ ĐỌC ĐƯỢC và không tràn.
   [lý do vượt panel]  khung viền bo + chia 4 cột đều không có ô panel
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .tl-lib-tabs .nav {
		display: grid;
		grid-template-columns: repeat(4, 1fr);
		flex-wrap: nowrap;
		gap: 4px;
		overflow-x: visible;
		border: 1px solid var(--slc-border);
		border-radius: 18px;
		padding: 10px 6px;
		margin: 0;
	}
	.tl-cau-chuyen .tl-lib-tabs .nav li.tab {
		flex: none;
		display: flex;
		justify-content: center;
	}
	.tl-cau-chuyen .tl-lib-tabs .nav a { padding: 4px 2px; border-bottom: none !important; }
	.tl-cau-chuyen .tl-lib-tabs .nav a::before { display: none; }  /* bỏ vạch chỉ báo đáy — khung viền đã đủ làm dấu active */
	.tl-cau-chuyen .tl-lib-tabs .nav li.tab.active { background: #fdece4; border-radius: 12px; }
	.tl-cau-chuyen .tl-lib-tabs .nav a > span { flex-direction: column; gap: 4px; text-align: center; }
	.tl-cau-chuyen .tl-tab-txt { font-size: 11px; line-height: 1.2; white-space: normal; font-weight: 700; }
	.tl-cau-chuyen .tl-tab-ic { width: 24px; height: 24px; }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: blog_posts (.tl-card-story) | khối: lưới thẻ câu chuyện
   [trang]    cau-chuyen
   [mockup]   ⚠ ĐÍNH CHÍNH 27/08 (mockup v2): KHÔNG stack ảnh-trên/chữ-dưới —
              thẻ NẰM NGANG (ảnh trái ~35% khổ vuông-ngắn, chữ phải), 1 cột.
              Badge nổi trên góc ảnh vẫn giữ nguyên cơ chế cũ.
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .tl-card-story .col { padding: 0 0 12px; }
	.tl-cau-chuyen .tl-card-story .box { display: flex; align-items: stretch; }

	.tl-cau-chuyen .tl-card-story .box-image {
		flex: 0 0 132px;
		width: 132px;
		padding-top: 0 !important;
		align-self: stretch;
	}
	.tl-cau-chuyen .tl-card-story .box-image .image-cover { height: 100%; padding-top: 0 !important; }
	.tl-cau-chuyen .tl-card-story .box-image img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
	.tl-cau-chuyen .tl-card-story .tl-benh-badge { font-size: 9px; padding: 4px 7px; top: 8px; left: 8px; }

	/* ⚠ Thẻ KHÔNG có ảnh (bài mồi các tab còn lại chưa gán thumbnail thật) —
	   bỏ hẳn khối giữ chỗ, không để khoảng trống nào; chữ chiếm trọn bề ngang. */
	.tl-cau-chuyen .tl-card-story .box:not(:has(.box-image))::before { display: none; }

	.tl-cau-chuyen .tl-card-story .box-text { flex: 1 1 auto; min-width: 0; }
	.tl-cau-chuyen .tl-card-story .box-text-inner { padding: 12px 14px; height: 100%; display: flex; flex-direction: column; justify-content: center; }
	.tl-cau-chuyen .tl-card-story .post-title a { font-size: 15.5px; line-height: 1.3; min-height: 0; -webkit-line-clamp: 2; }
	.tl-cau-chuyen .tl-card-story .from_the_blog_excerpt {
		font-size: 13.5px;
		line-height: 1.45;
		-webkit-line-clamp: 2;
		min-height: 0;
		margin-top: 4px;
	}
	.tl-cau-chuyen .tl-card-story .button { margin-top: 6px !important; font-size: 13px; }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Button "Xem thêm câu chuyện"
   [trang]    cau-chuyen
   [mockup]   ⚠ ĐÍNH CHÍNH 27/08: không còn khung viền — chữ cam trần + mũi tên,
              căn giữa, như một link, không phải nút.
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .tl-story-library .button {
		background: none !important;
		border: none !important;
		box-shadow: none !important;
		color: var(--slc-orange-text) !important;
		font-size: 15px;
		padding: 8px 0 !important;
		min-height: 0 !important;
		height: auto !important;
	}

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: featured_box | khối: 4 lời cam kết — lưới 2×2
   [trang]    cau-chuyen
   [mockup]   ⚠ ĐÍNH CHÍNH 27/08: KHÔNG stack 1 cột — lưới 2×2 trong MỘT khung
              viền chung, có vạch phân cách mảnh giữa các ô (dọc + ngang).
   [lý do vượt panel]  lưới 2 cột + vạch phân cách nội bộ không có ô panel
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .tl-story-values .section-content {
		background: #fff;
		border: 1px solid var(--slc-border);
		border-radius: 16px;
		padding: 4px 16px;
	}
	.tl-cau-chuyen .tl-story-values .row { row-gap: 0; }
	.tl-cau-chuyen .tl-story-values .col { padding: 14px 0; position: relative; }
	/* vạch ngang: mọi ô TRỪ hàng cuối (2 ô cuối cùng) */
	.tl-cau-chuyen .tl-story-values .col:not(:nth-last-child(-n+2))::after {
		content: ""; position: absolute; left: 0; right: 0; bottom: 0;
		height: 1px; background: var(--slc-border);
	}
	/* vạch dọc: ô lẻ (cột trái) có viền phải, trừ khi rơi xuống 1 cột ở màn hẹp */
	.tl-cau-chuyen .tl-story-values .col:nth-child(odd) { padding-right: 14px; }
	.tl-cau-chuyen .tl-story-values .col:nth-child(even) { padding-left: 14px; }
	.tl-cau-chuyen .tl-story-values .col:nth-child(odd)::before {
		content: ""; position: absolute; top: 6px; bottom: 6px; right: 0;
		width: 1px; background: var(--slc-border);
	}
	.tl-cau-chuyen .tl-story-values .box-text p { font-size: 13.5px; line-height: 1.45; }
	.tl-cau-chuyen .tl-story-values .box-text strong { font-size: 15px; }
	.tl-cau-chuyen .tl-story-values .icon-box-img { max-width: 34px; margin-bottom: 6px; }

/* -----------------------------------------------------------------------------
   [phục vụ]  phần tử: Section + Row | khối: dải CTA cuối trang
   [trang]    cau-chuyen
   [mockup]   ⚠ ĐÍNH CHÍNH 27/08: KHÔNG còn thẻ bo góc nền cam nhạt — dải CAM
              ĐẶC tràn hết bề ngang (full-bleed), chữ trắng, nút viền trắng.
   [lý do vượt panel]  nền tràn hết viewport không có ô Section (`bg_color`
              chỉ tô `<section>` full-bleed — đúng hiệu ứng cần, chỉ cần đổi
              MÀU và chữ, không cần kỹ thuật "trồi lên .section-content" như
              desktop nữa vì mobile ĐÚNG LÀ muốn full-bleed).
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .tl-story-final-cta { background: var(--slc-orange-text); }
	.tl-cau-chuyen .tl-story-final-cta .section-content {
		background: none !important;
		border-radius: 0;
		padding-left: 18px;
		padding-right: 18px;
	}
	.tl-cau-chuyen .tl-story-final-cta .row { text-align: center; row-gap: 14px; }
	.tl-cau-chuyen .tl-story-final-cta h2 { color: #fff; }
	.tl-cau-chuyen .tl-story-final-cta p { color: #fff; font-size: 15px; }
	.tl-cau-chuyen .tl-band-lienhe p { color: #fff; font-size: 14px; opacity: .9; }
	/* Icon dùng thuộc tính trình bày `stroke="#EB500E"` ngay trên thẻ SVG gốc
	   (id=131, không phải class CSS) — CSS `stroke` luôn thắng thuộc tính
	   trình bày, nhắm rộng vào mọi thẻ hình học bên trong cho chắc. */
	.tl-cau-chuyen .tl-story-final-cta .icon-box svg * { stroke: #fff !important; }
	.tl-cau-chuyen .tl-story-final-cta .button {
		background: #fff !important;
		color: var(--slc-orange-text) !important;
		min-height: 46px;
		font-size: 15px;
	}
}

/* =============================================================================
   ĐIỆN THOẠI THẬT — ≤549px: BÁM SÁT mobile-mockup-cau-chuyen-v2.png
   4T nghiệm thu 27/08 trên LIVE: khối @media(max-width:849px) ở trên dồn dọc
   AN TOÀN nhưng SAI mockup — mockup thật giữ bố cục ngang/2-cột ở nhiều khối,
   chỉ co tỉ lệ theo màn hẹp chứ không dồn dọc toàn bộ. 4T yêu cầu CHỈ SỬA
   TRONG KHỐI NÀY (≤549px) — không đụng khối 849px ở trên (vẫn phục vụ dải
   550–849 nguyên trạng) và không đụng header/footer/desktop.
   Mọi rule dưới đây ghi đè đúng rule cùng tên ở khối 849px bên trên (thắng
   nhờ đứng SAU trong file, cùng độ đặc — trừ nơi ghi rõ cần độ đặc cao hơn).
============================================================================= */
@media (max-width: 549px) {

/* -----------------------------------------------------------------------------
   0. GUTTER 16px — mockup xin gutter hẹp hơn khối 849px phía trên (18px→16px).
   [phục vụ]  phần tử: Row | khối: toàn trang
   [trang]    cau-chuyen
   [mockup]   mobile-mockup-cau-chuyen-v2.png
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper .row { max-width: calc(100% - 32px); }

/* ⛔ PHÁT HIỆN MỚI (vòng nghiệm thu live thứ 2, đo DOM sống): mỗi `[section]`
   TỰ MANG padding-left/right 30px MẶC ĐỊNH của Flatsome — thuộc tính
   `padding__sm` của panel chỉ ghi đè phần DỌC (đúng quy luật đã ghi ở tiêu đề
   khối), không đụng NGANG. Cộng thêm 15px mặc định của `.col` bọc ngoài,
   tổng lề trái/phải THẬT trước khi sửa là 46px — gấp gần 3 lần gutter 16px
   yêu cầu. Đây là NGUYÊN NHÂN GỐC của "card quá hẹp/ảnh dải hẹp" ở mọi khối
   bên dưới (hero, thẻ nổi bật, thẻ thư viện) — không phải do tỉ lệ % sai.
   Xoá phần NGANG, giữ nguyên phần DỌC panel đã đặt cho từng section. */
.tl-cau-chuyen .page-wrapper section.section { padding-left: 0 !important; padding-right: 0 !important; }

/* -----------------------------------------------------------------------------
   1. HERO — ĐÍNH CHÍNH VÒNG 5: 4T CẤM hẳn bố cục 2 cột ở mobile (đã thử 3
      vòng, cột chữ luôn dưới 200px vì phải chia đôi bề ngang với ảnh — không
      cách nào cho H1 đạt tối thiểu 300px mà vẫn giữ 2 cột cạnh nhau trong màn
      358px). Đổi hẳn sang DỒN DỌC: chữ TRỌN BỀ NGANG phía trên, ảnh TRỌN BỀ
      NGANG phía dưới (tỉ lệ 4:3, không kéo giãn/không cắt quá tay — "đầy đủ"
      như 4T yêu cầu).
   [phục vụ]  phần tử: Row/Column/Image | khối: .tl-story-hero
   [trang]    cau-chuyen
   [mockup]   mobile-mockup-cau-chuyen-v2.png
   [lý do vượt panel]  Panel Col chỉ có `span__sm="12"` (dồn dọc, ĐÚNG THỨ cần
              lần này) hoặc số nguyên /12 cố định cho 2 cột ngang — không có
              lựa chọn "ngang nhưng linh hoạt %". Dồn dọc là behavior GỐC của
              panel khi bỏ span__sm tuỳ biến, không cần ép flex-basis nữa.
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper .tl-story-hero { padding-top: 18px; padding-bottom: 14px; }
.tl-cau-chuyen .page-wrapper .tl-story-hero .row {
	flex-wrap: wrap !important;
	align-items: flex-start !important;
	gap: 0;
}
.tl-cau-chuyen .page-wrapper .tl-story-hero-content {
	flex: 0 0 100%;
	max-width: 100%;
	width: 100%;
	padding-right: 0;
	margin-bottom: 14px;
}
.tl-cau-chuyen .page-wrapper .tl-story-hero-media {
	flex: 0 0 100%;
	max-width: 100%;
	width: 100%;
	margin: 0;
	padding: 0 !important;
	align-self: auto !important;
}
.tl-cau-chuyen .page-wrapper .tl-story-hero-media .col-inner,
.tl-cau-chuyen .page-wrapper .tl-story-hero-img,
.tl-cau-chuyen .page-wrapper .tl-story-hero-img .img-inner { height: auto; }
.tl-cau-chuyen .page-wrapper .tl-story-hero-img img {
	max-height: none !important;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: var(--slc-r);
}
.tl-cau-chuyen .page-wrapper .tl-nhan-section p { font-size: 11px; margin-bottom: 6px; }
/* Cột chữ giờ TRỌN BỀ NGANG (~358px) — H1 đủ chỗ cho cỡ chữ lớn hơn hẳn mà
   vẫn ra đúng khoảng 3 dòng (đo sống trước khi chốt số, xem ghi chú cuối
   khối này nếu cần chỉnh lại). */
.tl-cau-chuyen .page-wrapper .tl-hero-h1 h1 { margin-bottom: 10px; font-size: clamp(25px, 7.4vw, 28px); line-height: 1.2; }
.tl-cau-chuyen .page-wrapper .tl-story-hero-content .text:not(.tl-hero-h1):not(.tl-nhan-section) p {
	font-size: 15px;
	line-height: 1.5;
	margin-bottom: 6px;
}
.tl-cau-chuyen .page-wrapper .tl-story-hero-content .text:not(.tl-hero-h1):not(.tl-nhan-section) p:last-child { margin-bottom: 0; }

/* -----------------------------------------------------------------------------
   2. HAI THẺ "CÂU CHUYỆN NỔI BẬT" — ngang, ảnh/play trái ~44%, chữ phải ~56%.
   [phục vụ]  phần tử: row_inner/col_inner + Banner | khối: .tl-story-noibat
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper .tl-story-noibat { margin-bottom: 12px; }
.tl-cau-chuyen .page-wrapper .tl-story-noibat:last-child { margin-bottom: 0; }
.tl-cau-chuyen .page-wrapper .tl-story-noibat .row_inner,
.tl-cau-chuyen .page-wrapper .tl-story-noibat .row.align-stretch {
	display: flex;
	flex-wrap: nowrap;
}
.tl-cau-chuyen .page-wrapper .tl-noibat-media {
	flex: 0 0 44%;
	width: 44%;
	max-width: 44%;
	padding: 0 !important;
}
.tl-cau-chuyen .page-wrapper .tl-noibat-content {
	flex: 0 0 56%;
	width: 56%;
	max-width: 56%;
	padding: 12px 14px;
}
.tl-cau-chuyen .page-wrapper .tl-noibat-media .banner {
	aspect-ratio: auto;
	height: 100% !important;
}
/* Vòng 4: 4T xin tăng cỡ chữ + nút play lên hẳn — 14.5/12.5px trước đó đọc
   được nhưng nhỏ hơn mockup rõ rệt. */
.tl-cau-chuyen .page-wrapper .tl-noibat-title h3 { font-size: 18px; line-height: 1.25; margin-bottom: 4px; }
.tl-cau-chuyen .page-wrapper .tl-noibat-desc p { font-size: 13.5px; line-height: 1.4; margin-bottom: 6px; }
.tl-cau-chuyen .page-wrapper .tl-noibat-banner .open-video {
	width: 46px !important; height: 46px !important;
	max-width: 46px !important; max-height: 46px !important;
}
.tl-cau-chuyen .page-wrapper .tl-noibat-banner .tl-duration-badge p { font-size: 10.5px; padding: 3px 7px; }

/* -----------------------------------------------------------------------------
   3. THANH TAB — vòng 5: 4T xin RÕ số đo — mỗi tab `flex:0 0 145px` cố định
      (không phải `auto` co theo nội dung như vòng 4, lý do mục 3-4 bị hụt
      hẳn ra ngoài vùng nhìn ban đầu vì các tab TRƯỚC quá hẹp/không đều, mắt
      không nhận ra còn thẻ để cuộn tới). 145px cố định cho cả 4 tab bằng
      nhau, nhãn tối đa 2 dòng (line-clamp), icon 36px.
   [phục vụ]  phần tử: tabgroup | khối: .tl-lib-tabs
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper .tl-lib-tabs .nav {
	display: flex;
	flex-wrap: nowrap;
	grid-template-columns: none;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	scroll-snap-type: x mandatory;
	border-radius: 16px;
	padding: 10px;
	gap: 8px;
	justify-content: flex-start;
}
.tl-cau-chuyen .page-wrapper .tl-lib-tabs .nav::-webkit-scrollbar { display: none; }
.tl-cau-chuyen .page-wrapper .tl-lib-tabs .nav li.tab {
	flex: 0 0 145px;
	width: 145px;
	min-width: 145px;
	max-width: 145px;
	display: flex;
	justify-content: center;
	scroll-snap-align: start;
}
.tl-cau-chuyen .page-wrapper .tl-lib-tabs .nav a {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 6px;
	padding: 4px 2px;
	width: 100%;
}
.tl-cau-chuyen .page-wrapper .tl-lib-tabs .nav li.tab.active { background: #fdece4; border-radius: 12px; }
.tl-cau-chuyen .page-wrapper .tl-tab-txt {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.tl-cau-chuyen .page-wrapper .tl-tab-ic { width: 36px; height: 36px; }
.tl-cau-chuyen .page-wrapper .tl-tab-txt { font-size: 13px; line-height: 1.2; white-space: normal; }

/* -----------------------------------------------------------------------------
   4. LƯỚI THẺ CÂU CHUYỆN — CHỈ 3 thẻ mỗi tab (mockup không cuộn dài), ngang
      ảnh 44% trái / chữ 56% phải, KHÔNG cắt "..." — nới đủ rộng cho tiêu đề
      trọn vẹn, card cao theo đúng nội dung.
   [lý do vượt panel]  `[blog_posts]` không có tuỳ chọn "hiện tối đa N trên
              mobile" — ẩn bằng `nth-child` là cách CSS-only duy nhất, không
              đụng tới danh sách bài (nội dung ngoài phạm vi 2 file CSS).
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper .tl-card-story .col:nth-child(n+4) { display: none; }

.tl-cau-chuyen .page-wrapper .tl-card-story .col { padding: 0 0 10px; }
/* ⛔ ĐÍNH CHÍNH vòng 4: 4T xin RÕ số đo — cao ~120px, ảnh 45%, tiêu đề 18px,
   mô tả 14px, vẫn clamp 2 dòng (không ellipsis SỚM — nghĩa là clamp phải xảy
   ra ở tràn dòng thứ 3 trở đi, không phải do cột quá hẹp cắt ngay dòng 1 như
   lỗi vòng 1). Bỏ nút "Đọc câu chuyện" khỏi thẻ mobile để dồn hết chỗ cho
   tiêu đề/mô tả trong ngân sách chiều cao 120px — link "Xem thêm câu chuyện"
   chung ở cuối danh sách đã đủ lối vào bài. */
.tl-cau-chuyen .page-wrapper .tl-card-story .box { display: flex; align-items: stretch; min-height: 120px; }
.tl-cau-chuyen .page-wrapper .tl-card-story .box-image {
	flex: 0 0 45%;
	width: 45%;
	padding-top: 0 !important;
	align-self: stretch;
}
.tl-cau-chuyen .page-wrapper .tl-card-story .box-image .image-cover { height: 100%; padding-top: 0 !important; }
.tl-cau-chuyen .page-wrapper .tl-card-story .box-image img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.tl-cau-chuyen .page-wrapper .tl-card-story .tl-benh-badge { font-size: 9px; padding: 3px 6px; top: 6px; left: 6px; }
.tl-cau-chuyen .page-wrapper .tl-card-story .box-text { flex: 1 1 auto; min-width: 0; }
.tl-cau-chuyen .page-wrapper .tl-card-story .box-text-inner {
	padding: 10px 12px;
	height: 100%;
	display: flex;
	flex-direction: column;
	justify-content: center;
}
.tl-cau-chuyen .page-wrapper .tl-card-story .post-title a {
	font-size: 18px;
	line-height: 1.22;
	min-height: calc(18px * 1.22 * 2);
	-webkit-line-clamp: 2;
	display: -webkit-box;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.tl-cau-chuyen .page-wrapper .tl-card-story .from_the_blog_excerpt {
	font-size: 14px;
	line-height: 1.32;
	-webkit-line-clamp: 2;
	display: -webkit-box;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: calc(14px * 1.32 * 2);
	margin-top: 4px;
}
.tl-cau-chuyen .page-wrapper .tl-card-story .button { display: none; }
.tl-cau-chuyen .page-wrapper .tl-story-library .button { font-size: 14px; padding: 6px 0 !important; }

/* -----------------------------------------------------------------------------
   5a. "GIÁ TRỊ" — LƯỚI 2×2 thật (không phải 1 cột), icon CAM viền mảnh.
   [phục vụ]  phần tử: Row/Featured Box | khối: .tl-story-values
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper .tl-story-values .row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	row-gap: 0;
	column-gap: 0;
}
.tl-cau-chuyen .page-wrapper .tl-story-values .col {
	width: auto;
	max-width: none;
	flex: none;
	padding: 8px 0;
	position: relative;
}
.tl-cau-chuyen .page-wrapper .tl-story-values .col:nth-child(odd) { padding-right: 10px; }
.tl-cau-chuyen .page-wrapper .tl-story-values .col:nth-child(even) { padding-left: 10px; }
.tl-cau-chuyen .page-wrapper .tl-story-values .col:not(:nth-last-child(-n+2))::after {
	content: "";
	position: absolute;
	left: 0; right: 0; bottom: 0;
	height: 1px;
	background: var(--slc-border);
}
.tl-cau-chuyen .page-wrapper .tl-story-values .col:nth-child(odd)::before {
	content: "";
	position: absolute;
	top: 6px; bottom: 6px; right: 0;
	width: 1px;
	background: var(--slc-border);
}
/* ⛔ ĐÍNH CHÍNH vòng 5: 4T xin icon 42px NGANG + toàn khối ~270px thay ~512px
   đo được. Icon-box vốn ĐÃ `display:flex;flex-direction:row` sẵn (Flatsome
   tự làm đúng với `pos="left"` của featured_box, không cần CSS ép) — cỡ CHỮ
   mới là thứ đẩy chiều cao vọt lên: mô tả 14px trong cột chữ chỉ ~110px
   (nửa lưới trừ icon 46+đệm) vỡ tới 6-7 dòng. Hạ hẳn cỡ chữ + giảm icon nhẹ
   xuống 42px đúng số 4T cho, đổi margin-bottom (dư thừa cho layout ngang)
   sang margin-right cho đúng khoảng cách ngang. */
.tl-cau-chuyen .page-wrapper .tl-story-values .icon-box-img { max-width: 42px; margin-bottom: 0; margin-right: 10px; flex: none; }
.tl-cau-chuyen .page-wrapper .tl-story-values .icon-box-img svg * { stroke: var(--slc-orange) !important; fill: none !important; }
.tl-cau-chuyen .page-wrapper .tl-story-values .icon-box-text { min-width: 0; }
.tl-cau-chuyen .page-wrapper .tl-story-values strong { font-size: 12.5px; line-height: 1.2; }
.tl-cau-chuyen .page-wrapper .tl-story-values p { font-size: 11px; line-height: 1.25; margin-top: 2px; }

/* -----------------------------------------------------------------------------
   5b. CTA CUỐI — thẻ NGANG gọn (icon+tiêu đề một hàng, nút+liên hệ hàng dưới),
      nền GRADIENT cam — KHÔNG còn khối cao chiếm cả màn hình.
   [phục vụ]  phần tử: Row/Column | khối: .tl-story-final-cta
   -------------------------------------------------------------------------- */
.tl-cau-chuyen .page-wrapper .tl-story-final-cta {
	background: linear-gradient(135deg, var(--slc-orange) 0%, var(--slc-orange-text) 100%);
}
/* ⛔ ĐÍNH CHÍNH vòng 3: bản trước xếp icon+tiêu đề MỘT hàng rồi nút+liên hệ
   MỘT hàng RIÊNG full-width bên dưới ⇒ cộng dồn quá 300px. Mockup là một
   BĂNG THẤP ~120px: icon nhỏ bên trái, khối chữ (tiêu đề+mô tả) chiếm giữa,
   nút đứng NGAY BÊN PHẢI cùng hàng với khối chữ (không xuống dòng riêng) —
   chỉ dòng liên hệ Zalo/WhatsApp (phụ, không bắt buộc theo mockup) mới lùi
   xuống dưới cùng, cỡ chữ rất nhỏ. */
/* ⛔ ĐÍNH CHÍNH vòng 4: 4T xin RÕ ~100px — vòng 3 (218px) còn xếp mô tả riêng
   một dòng và nút+liên hệ cũng riêng dòng. Bỏ hẳn mô tả (`<p>` phụ trong
   col2) — chỉ giữ "2 dòng nội dung" đúng nghĩa đen là tiêu đề 2 dòng; ghép
   NÚT và DÒNG HOTLINE vào chung MỘT hàng (chính col3 trở thành flex row) thay
   vì để hotline xuống dòng riêng — hotline dài nên phải `ellipsis` một dòng. */
/* ⛔ ĐÍNH CHÍNH vòng 5-b: thử "nội dung trái + CTA phải MỘT hàng" trước —
   đo ra 116px, NHƯNG cột tiêu đề khi đó chỉ còn ~54% (nút chiếm 46%) nên
   "Bạn đang chuẩn bị sang Singapore điều trị?" (43 ký tự) bị cắt còn "Bạn
   đang / chuẩn bị…" — RÕ RÀNG tệ hơn, đúng kiểu lỗi 4T đã nhiều lần bắt.
   Quay lại NHÁNH DỰ PHÒNG 4T cho phép: tiêu đề TRỌN BỀ NGANG (đọc đủ 2 dòng
   thật, không cắt) trên hàng 1 cùng icon, nút+hotline chung MỘT hàng riêng
   bên dưới — tổng 130–155px, đổi lấy tiêu đề đọc được trọn vẹn. */
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .section-content { padding: 12px 16px; }
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .row {
	flex-wrap: wrap;
	align-items: center;
	row-gap: 8px;
	column-gap: 10px;
	text-align: left;
}
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .col:nth-child(1) { flex: 0 0 24px; max-width: 24px; }
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .col:nth-child(2) { flex: 1 1 0; min-width: 0; max-width: none; text-align: left; }
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .col:nth-child(2) p { display: none; }
/* ⚠ `.col` KHÔNG phải nơi chứa nút/hotline trực tiếp — Flatsome luôn bọc
   thêm MỘT lớp `.col-inner` giữa `.col` và nội dung thật. Đặt `display:flex`
   lên `.col` chỉ biến `.col-inner` (đứa con DUY NHẤT) thành 1 flex-item, còn
   BÊN TRONG `.col-inner` nút/hotline vẫn xếp dọc bình thường — bắt được qua
   đo trực tiếp ở vòng 4 (band.y luôn khác btn.y dù mọi thuộc tính flex ở
   `.col` đã đúng). Phải đặt flex ở đúng `.col-inner`. */
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .col:nth-child(3) {
	flex: 1 1 100%;
	max-width: 100%;
	padding: 0 !important;
}
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .col:nth-child(3) > .col-inner {
	text-align: left;
	display: flex;
	flex-wrap: nowrap;
	align-items: center;
	gap: 10px;
}
.tl-cau-chuyen .page-wrapper .tl-band-lienhe { flex: 1 1 0; min-width: 0; width: auto; max-width: none; order: 2; }
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .icon-box-img { max-width: 24px; }
.tl-cau-chuyen .page-wrapper .tl-story-final-cta h2 {
	font-size: 14.5px;
	line-height: 1.25;
	margin: 0;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.tl-cau-chuyen .page-wrapper .tl-band-lienhe p {
	font-size: 10px;
	margin: 0;
	opacity: .85;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}
/* ⚠ `width:auto` không thắng — Flatsome tự cho nút `width:100%` ở màn hẹp
   (mặc định responsive riêng của `.button`, không phải rule của mình). Ép
   `!important` để nút chỉ rộng theo chữ, không chiếm hết hàng — đúng ý "băng
   thấp" thay vì viên thuốc to chiếm gần trọn bề ngang thẻ. */
.tl-cau-chuyen .page-wrapper .tl-story-final-cta .button {
	flex: 0 0 auto;
	display: inline-flex !important;
	width: auto !important;
	min-height: 32px !important;
	font-size: 12px;
	padding: 0 12px !important;
	white-space: nowrap;
}

}   /* ==== HẾT @media (max-width: 549px) ==== */

/* =============================================================================
   VÒNG BỔ SUNG (28/08/2026) — 4T soi 2 ảnh chụp mobile, xin sửa 3 chỗ:
   (1) 2 khung tab (cam/trắng) cao lệch nhau, (2) 4 icon-box "giá trị" đổi
   icon-trên/chữ-dưới thay vì icon-trái/chữ-phải, (3) dải CTA cuối quay lại
   nền nhạt GIỐNG DESKTOP thay vì nền cam/gradient một phiên trước tự đổi,
   chỉ giữ nút, bỏ dòng Zalo, nút căn giữa.
   ⛔ CHỈ THÂN TRANG, không đụng header/footer. Mọi rule trong
   @media(max-width:549px) — desktop ≥850px không đổi (không có selector nào
   trùng ngoài phạm vi media query này).
============================================================================= */
@media (max-width: 549px) {

/* -----------------------------------------------------------------------------
   1. THANH TAB — 4 khung cao BẰNG NHAU (trước: 79px/64px lệch nhau vì tab có
      nhãn 2 dòng cao hơn tab nhãn 1 dòng, dù bề rộng đã đều 145px sẵn).
   [phục vụ]  phần tử: tabgroup | khối: .tl-lib-tabs
   [mockup]   ảnh chụp LIVE 4T gửi 28/08 — khung nền cam (tab active) thấp/hẹp
              hơn khung trắng bên cạnh.
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .page-wrapper .tl-lib-tabs .nav li.tab { min-height: 80px; }
	.tl-cau-chuyen .page-wrapper .tl-lib-tabs .nav a { justify-content: center; height: 100%; }

/* -----------------------------------------------------------------------------
   2. 4 Ô "GIÁ TRỊ" — ICON TRÊN, CHỮ DƯỚI, CĂN GIỮA
   [phục vụ]  phần tử: Icon Box (featured_box) | khối: .tl-story-values
   [trang]    cau-chuyen
   [mockup]   4T xin icon-box theo cấu trúc "icon ở trên, chữ ở dưới", chữ và
              icon căn giữa, khung cân đối — khác cấu trúc icon-trái/chữ-phải
              hiện có.
   [lý do vượt panel]  Panel `[featured_box]` có ô `Icon Position` (left/top/
              right) NHƯNG đó là thuộc tính GLOBAL của shortcode, đổi ở panel
              sẽ đổi LUÔN desktop (4T dặn không được ảnh hưởng desktop, mà
              desktop ĐANG dùng icon-trái, đo ở 715/716-719 vòng trước). Nên
              chỉ đổi flex-direction bằng CSS, giới hạn trong khổ ≤549.
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .page-wrapper .tl-story-values .icon-box {
		flex-direction: column;
		align-items: center;
		text-align: center;
	}
	.tl-cau-chuyen .page-wrapper .tl-story-values .icon-box-img {
		margin-right: 0;
		margin-bottom: 8px;
	}
	.tl-cau-chuyen .page-wrapper .tl-story-values .icon-box-text { text-align: center; }
	.tl-cau-chuyen .page-wrapper .tl-story-values strong,
	.tl-cau-chuyen .page-wrapper .tl-story-values p { text-align: center; }

/* -----------------------------------------------------------------------------
   3. DẢI CTA CUỐI — QUAY VỀ NỀN NHẠT GIỐNG DESKTOP, CHỈ GIỮ NÚT
   [phục vụ]  phần tử: Section/Column/Button | khối: .tl-story-final-cta
   [trang]    cau-chuyen
   [mockup]   4T xin nền mobile GIỐNG desktop (`#fdf1ea` nhạt, không phải
              gradient cam/chữ trắng một vòng trước tự đổi — xem khối "5b CTA
              CUỐI" phía trên); và ở hàng nút, CHỈ giữ nút "LIÊN HỆ TƯ VẤN
              NGAY", bỏ dòng "Zalo Việt Nam: …", nút CĂN GIỮA khung.
   [lý do vượt panel]  Nền/màu chữ đặt bằng panel Section (desktop) rồi bị CSS
              vòng trước ghi đè `!important` ở khổ ≤849/≤549 — phải đè lại
              cũng bằng `!important` (cùng đặc hiệu, tệp đứng SAU thắng).
   ⚠ Không xoá dòng Zalo khỏi shortcode — chỉ ẩn bằng CSS ở khổ hẹp (desktop/
     tablet vẫn thấy), và số này đã có sẵn ở footer nên ẩn trên mobile không
     làm mất thông tin liên hệ nào của trang.
   ⚠ Số bg nút `#ce4c09` là màu ĐO THẬT trên desktop (không phải token `--slc-
     orange-text` #c4400a — gần nhưng không trùng; đây là màu mặc định của
     `.button` toàn site, không định nghĩa ở tệp trang này nên không có biến
     để gọi lại, ghi thẳng số đo cho chắc ăn khớp pixel).
   -------------------------------------------------------------------------- */
	.tl-cau-chuyen .page-wrapper .tl-story-final-cta { background: none !important; }
	.tl-cau-chuyen .page-wrapper .tl-story-final-cta .section-content {
		background: #fdf1ea !important;
		border-radius: 16px !important;
	}
	.tl-cau-chuyen .page-wrapper .tl-story-final-cta h2 { color: var(--slc-navy) !important; }
	.tl-cau-chuyen .page-wrapper .tl-story-final-cta .icon-box svg * { stroke: #EB500E !important; }

	.tl-cau-chuyen .page-wrapper .tl-band-lienhe { display: none !important; }
	.tl-cau-chuyen .page-wrapper .tl-story-final-cta .col:nth-child(3) > .col-inner {
		justify-content: center;
	}
	.tl-cau-chuyen .page-wrapper .tl-story-final-cta .button {
		background: #ce4c09 !important;
		color: #fff !important;
	}
}
