/*
Theme Name: Coolmate Newsroom
Theme URI: https://newsroom.coolmate.me
Author: Vũ Minh Quân
Description: Theme custom dựng riêng cho trang Newsroom của Coolmate, build from scratch theo thiết kế Figma "CAMPAIGN Tháng 9 2026".
Version: 0.1
Text Domain: newsroom-theme
*/

/* ============================================================
   Bước 2: reset cơ bản + layout khung sườn cho header/footer.
   CHƯA phải CSS đúng pixel theo Figma — bước sau sẽ style chi
   tiết từng trang (listing/detail). Mục tiêu bây giờ: đọc được,
   nav nằm ngang, không vỡ layout be bét.
   ============================================================ */

* { box-sizing: border-box; }

body {
	margin: 0;
	font-family: var(--font-body, sans-serif);
	color: var(--color-neutral-900, #000);
	background: var(--color-neutral-00, #fff);
	overflow-x: hidden; /* an toàn cho khối tràn full-width (100vw) ở gallery không tạo thanh cuộn ngang */
}

a { color: inherit; text-decoration: none; }

ul { list-style: none; margin: 0; padding: 0; }

/* Toàn bộ heading dùng Criteria CF (font-heading) — trước giờ đang bị
   thiếu dòng này nên heading vô tình hiển thị bằng font-body (Pangea). */
h1, h2, h3, h4, h5, h6 {
	font-family: var(--font-heading, serif);
	font-weight: 600;
	margin: 0;
}

/* ---------- Khung dùng chung: section nền full-width (edge-to-edge), nội
   dung bên trong luôn giới hạn 1240px và canh giữa — tránh tình trạng nền
   màu/khối chỉ rộng bằng cột nội dung cũ (1200px) mà không chạm hết viewport
   trên màn hình rộng, hoặc header/nội dung lệch mép nhau. ---------- */
.nr-container {
	max-width: 1240px;
	margin: 0 auto;
	padding: 0 var(--space-lg, 24px);
}

/* ---------- Header ---------- */
.site-header { border-bottom: 1px solid var(--color-neutral-200, #e5e5e5); }

.topbar {
	padding: var(--space-xs, 8px) 0;
	background: var(--color-neutral-900, #000);
	color: var(--color-neutral-00, #fff);
	font-size: var(--text-body3-size, 14px);
}
.topbar-inner { display: flex; justify-content: space-between; flex-wrap: wrap; gap: var(--space-sm, 12px); }
.topbar-nav ul { display: flex; gap: var(--space-md, 16px); flex-wrap: wrap; }

.main-nav { padding: var(--space-md, 16px) 0; }
.main-nav-inner { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-md, 16px); }
.site-logo { font-weight: 700; font-size: var(--text-h5-size, 20px); }
.primary-nav ul { display: flex; gap: var(--space-lg, 24px); flex-wrap: wrap; }
.main-nav-icons { display: flex; gap: var(--space-sm, 12px); }

.promo-bar {
	text-align: center;
	padding: var(--space-xs, 8px) 0;
	background: var(--color-primary-500, #273bcd);
	color: var(--color-neutral-00, #fff);
	font-size: var(--text-body3-size, 14px);
}
.promo-bar a { text-decoration: underline; }

/* ---------- Footer ---------- */
/* Dựng lại theo đúng đoạn UX Builder (Flatsome) của footer thật coolmate.me
   — xem chú thích đầy đủ ở đầu footer.php. Tóm tắt tỉ lệ cột lấy từ
   span="…" trong đoạn UX Builder (span tính trên hệ 12 cột):
   - Hàng 1 (.footer-feedback): 5 / 3 / 4  → grid 5fr 3fr 4fr
   - Hàng 2 (.footer-columns): 2/2/2/2/4 (2 khối xếp chồng trong 4 cột đầu)
     → CSS Grid 2fr 2fr 2fr 2fr 4fr, mỗi khối gán grid-column/grid-row riêng
   - Hàng 3 (.footer-legal): 7 / 5      → grid 7fr 5fr
   Nền ĐEN + chữ TRẮNG (đảo màu theo yêu cầu trước), .nr-container trong
   footer bỏ max-width 1240px để full-width sát viền màn hình. */

.site-footer {
	padding: var(--space-2xl, 40px) 0 0;
	background: var(--color-neutral-900, #000);
	color: var(--color-neutral-300, #d1d1d1);
	font-size: var(--text-body3-size, 14px);
	border-top: 1px solid var(--color-neutral-700, #333);
}
.site-footer .nr-container { max-width: none; }
.footer-divider { border: none; border-top: 1px solid rgba(217, 217, 217, .26); margin: 0 0 var(--space-2xl, 40px); }

/* 1) Khối "COOLMATE lắng nghe bạn!" — grid 3 cột tỉ lệ 5:3:4 đúng span gốc */
.footer-feedback {
	display: grid;
	grid-template-columns: 5fr 3fr 4fr;
	gap: var(--space-lg, 24px);
	align-items: start;
	padding-bottom: var(--space-2xl, 40px);
}
.footer-feedback-text h3 {
	color: var(--color-neutral-00, #fff);
	font-size: var(--text-body2-size, 16px);
	font-weight: 600;
	margin: 0 0 var(--space-xs, 8px);
}
.footer-feedback-text p {
	font-size: 13px;
	line-height: 1.5;
	color: var(--color-neutral-400, #a3a3a3);
	margin: 0 0 var(--space-md, 16px);
}
.footer-feedback-btn.btn-primary {
	background: var(--color-primary-500, #273bcd);
	padding: 11px 24px;
	font-size: 13px;
}
.footer-feedback-btn .nr-footer-icon { width: 16px; height: 16px; }

/* Icon footer bằng ẢNH THẬT (Facebook/Instagram/YouTube/điện thoại/email) —
   ảnh gốc là hình ĐEN trên nền trong suốt, nếu để nguyên sẽ biến mất trên
   nền đen của footer (đen trên đen) nên phải lật màu bằng filter:invert(1)
   để hiện thành màu trắng. object-fit:contain vì vài ảnh không vuông (ví
   dụ icon Facebook cao hơn rộng) — co vừa khung 20x20 mà không méo hình. */
.nr-footer-icon-img { object-fit: contain; vertical-align: middle; }
.footer-feedback-social .nr-footer-icon-img,
.footer-contact-row .nr-footer-icon-img { filter: invert(1); }
/* Riêng Zalo/TikTok: ảnh gốc đã là màu TRẮNG sẵn (khác với 5 ảnh đen ở trên)
   nên KHÔNG được lật màu — lật vào sẽ thành đen, biến mất trên nền đen. */
.footer-feedback-social .nr-footer-icon-zalo,
.footer-feedback-social .nr-footer-icon-tiktok { filter: none; }

.footer-contact-row {
	display: flex;
	align-items: flex-start;
	gap: var(--space-xs, 8px);
	margin: 0 0 var(--space-sm, 12px);
	color: var(--color-neutral-300, #d1d1d1);
}
.footer-contact-row:last-child { margin-bottom: 0; }
.footer-contact-row .nr-footer-icon { flex: 0 0 auto; margin-top: 2px; color: var(--color-primary-300, #8f9aef); }
.footer-contact-row strong { display: block; font-size: 12px; color: var(--color-neutral-400, #a3a3a3); font-weight: 400; }
.footer-contact-row a { color: var(--color-neutral-00, #fff); font-weight: 600; }

/* distribute="between" trong ux_stack gốc → space-between, icon dàn đều
   hết chiều rộng cột (span=4), không dồn về 1 phía. */
.footer-feedback-social { display: flex; align-items: center; justify-content: space-between; }
.footer-feedback-social a {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: 1px solid var(--color-neutral-700, #333);
	color: var(--color-neutral-300, #d1d1d1);
	transition: background .2s ease, color .2s ease, border-color .2s ease;
}
.footer-feedback-social a:hover { background: var(--color-primary-500, #273bcd); color: #fff; border-color: var(--color-primary-500, #273bcd); }

/* 2) 5 cột link — CSS Grid, mỗi "khối" (.footer-acc-item) gán đúng vị trí
   cột/hàng theo span gốc, KHÔNG phụ thuộc thứ tự trong HTML (thứ tự HTML
   viết theo đúng thứ tự accordion tablet/mobile cần, xem footer.php). Ở PC,
   accordion "mở sẵn" hoàn toàn — button tiêu đề không có hiệu ứng bấm,
   chevron ẩn, panel luôn hiện. */
.footer-columns {
	display: grid;
	grid-template-columns: 2fr 2fr 2fr 2fr 4fr;
	grid-template-rows: auto auto;
	gap: 0 var(--space-2xl, 40px);
	padding-bottom: var(--space-2xl, 40px);
}
.footer-acc-coolclub    { grid-column: 1; grid-row: 1; }
.footer-acc-tuyen-dung  { grid-column: 1; grid-row: 2; }
.footer-acc-chinh-sach  { grid-column: 2; grid-row: 1; }
.footer-acc-coolmate-me { grid-column: 2; grid-row: 2; }
.footer-acc-cskh        { grid-column: 3; grid-row: 1; }
.footer-acc-kien-thuc   { grid-column: 3; grid-row: 2; }
.footer-acc-ve-coolmate { grid-column: 4; grid-row: 1 / span 2; }
.footer-acc-dia-chi     { grid-column: 5; grid-row: 1 / span 2; }

/* Khoảng cách giữa 2 khối xếp chồng trong CÙNG 1 cột (PC) — chỉ 3 khối
   "hàng dưới" (tuyen-dung/coolmate-me/kien-thuc) mới cần margin-top, dựa
   theo VỊ TRÍ LƯỚI (grid-row) chứ không dùng "+" theo thứ tự DOM, vì DOM
   viết theo thứ tự accordion mobile nên không khớp thứ tự hiển thị ở PC
   (ví dụ "Về Coolmate"/"Địa chỉ liên hệ" đứng sau trong DOM nhưng lại nằm
   ở HÀNG 1, không được ăn margin-top của "hàng 2"). */
.footer-acc-tuyen-dung, .footer-acc-coolmate-me, .footer-acc-kien-thuc { margin-top: var(--space-lg, 24px); }
.footer-acc-toggle {
	display: block;
	width: 100%;
	background: none;
	border: none;
	padding: 0;
	margin-bottom: var(--space-sm, 12px);
	color: var(--color-neutral-00, #fff);
	font-family: inherit;
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .02em;
	text-align: left;
	cursor: default;
}
.footer-acc-toggle span { pointer-events: none; }
.footer-acc-toggle .footer-acc-chevron { display: none; } /* PC: luôn mở, không cần mũi tên thu/xổ */
.footer-acc-static-title {
	color: var(--color-neutral-00, #fff);
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: .02em;
	margin: 0 0 var(--space-sm, 12px);
}
.footer-acc-panel { max-height: none; overflow: visible; }
.footer-acc-panel ul { margin: 0; padding: 0; list-style: none; }
.footer-acc-panel li { margin-bottom: var(--space-xs, 8px); }
.footer-acc-panel li a { color: var(--color-neutral-400, #a3a3a3); }
.footer-acc-panel li a:hover { color: var(--color-primary-300, #8f9aef); }
.footer-acc-panel p { font-size: 13px; line-height: 1.5; color: var(--color-neutral-400, #a3a3a3); margin: 0 0 var(--space-sm, 12px); }
.footer-acc-panel p strong { color: var(--color-neutral-00, #fff); font-weight: 600; }

/* 3) Thông tin công ty + badge xác thực — grid 7:5 đúng span gốc.
   Padding: trước đây "24px 0" (trên VÀ dưới) — nhưng NGAY PHÍA TRÊN khối
   này đã có <hr class="footer-divider"> tự có margin-bottom 40px rồi, nên
   cộng thêm 24px padding-top nữa thành ra khoảng cách divider→khối này
   (64px) LỚN HƠN HẲN so với khoảng cách feedback→divider hay divider→cột-
   link (đều đúng 40px) — đây chính là chỗ padding không đều giữa các phần.
   Sửa: bỏ hẳn padding-top (để đúng 40px như những chỗ khác, do divider lo),
   dồn hết vào padding-bottom = 40px để khớp với padding-top 40px của
   .site-footer — mép trên và mép dưới của cả khối footer đen giờ bằng nhau. */
.footer-legal {
	display: grid;
	grid-template-columns: 7fr 5fr;
	gap: var(--space-lg, 24px);
	align-items: center;
	padding: var(--space-2xl, 40px);
	font-size: 12px;
	color: var(--color-neutral-400, #a3a3a3);
}
.footer-legal-text p { margin: 0 0 4px; }
.footer-legal-text p:last-child { margin-bottom: 0; }
.footer-legal-badges { display: flex; align-items: center; justify-content: flex-end; gap: var(--space-md, 16px); flex-wrap: wrap; }
/* 4 ảnh chứng nhận thật (badge-*.png trong assets/) — mỗi ảnh tự có nền/viền
   riêng sẵn trong file nên không cần thêm box bao ở đây, chỉ cần đồng bộ
   chiều cao hiển thị (chiều rộng tự co theo đúng tỉ lệ gốc mỗi ảnh, xem
   width/height khai báo trong footer.php để trình duyệt không bị giật layout
   lúc ảnh chưa tải xong). */
.footer-badge {
	display: block;
	line-height: 0;
}
.footer-badge img {
	display: block;
	height: 40px;
	width: auto;
}
.footer-badge:hover { opacity: .85; }
.footer-badge-static { cursor: default; }
.footer-badge-static:hover { opacity: 1; }

/* ============================================================
   Bước 3: trang danh sách Newsroom (page-newsroom.php)
   ============================================================ */

.newsroom-page { width: 100%; }

.thumb-placeholder {
	background: var(--color-neutral-200, #e5e5e5);
	border-radius: var(--radius-md, 12px);
	aspect-ratio: 4 / 3;
	width: 100%;
}

.nr-eyebrow {
	display: block;
	font-size: var(--text-sub1-size, 18px);
	line-height: var(--text-sub1-line, 26px);
	font-weight: 400;
	color: var(--color-primary-700, #1f2fa4);
	text-transform: none;
	letter-spacing: -0.36px;
	margin-bottom: var(--space-xs, 8px);
}

.nr-tag {
	display: inline-block;
	color: var(--color-primary-400, #4c5ddd);
	font-feature-settings: 'cv01' on, 'cv02' on, 'cv03' on, 'cv04' on, 'cv10' on;
	font-family: var(--font-body, sans-serif);
	font-size: var(--text-body3-size, 14px);
	font-style: normal;
	font-weight: 400;
	line-height: var(--text-body3-line, 20px);
	margin-bottom: 0;
}

/* Banner đen full-width "COOLMATE NEWSROOM" — nền đen chạm hết viewport,
   không cần "trick" margin âm nữa vì .newsroom-page giờ không còn giới hạn
   1200px (xem .nr-container ở đầu file). Padding dọc giờ chuyển sang đặt
   ở .nr-banner-row (hàng logo) thay vì ở chính .nr-banner — vì .nr-banner
   giờ còn chứa thêm .nr-search-panel (khung tìm kiếm xổ ra) là 1 khối con
   thứ 2 nữa; nếu để padding-bottom ở .nr-banner như trước, khoảng đệm đó
   sẽ lòi ra thành 1 dải đen thừa NGAY DƯỚI khung tìm kiếm màu trắng (dưới
   cùng .nr-banner) mỗi khi khung tìm kiếm đang mở, thay vì nằm sát dưới
   logo như ý muốn. */
.nr-banner {
	background: var(--color-neutral-900, #000);
	color: var(--color-neutral-00, #fff);
	text-align: center;
	margin: 0 0 var(--space-2xl, 40px);
	/* Cố định (sticky) trên đầu trang khi cuộn — dùng chung mọi trang vì
	   banner giờ nằm trong header.php. z-index cao để luôn nổi trên nội
	   dung bài viết/carousel/lightbox bên dưới khi cuộn qua. */
	position: sticky;
	top: 0;
	z-index: 100;
}
/* Lỗi "2 dải đè lên nhau" khi cuộn, chỉ thấy lúc ĐÃ ĐĂNG NHẬP wp-admin: do
   thanh admin bar của WordPress cũng position:fixed, top:0, cao 32px (46px
   ở màn hình ≤782px) và z-index rất cao (99999) — banner sticky ở top:0 nên
   khi cuộn, phần trên cùng của banner bị đúng thanh admin bar đó đè lên.
   Fix chuẩn của WordPress: dịch top của mọi phần tử sticky/fixed xuống
   đúng bằng chiều cao admin bar khi thẻ <body> có class "admin-bar" (WP tự
   thêm class này khi đang đăng nhập và bật thanh admin bar). Người dùng
   thường (không đăng nhập, hoặc đã tắt thanh admin bar cho front-end) sẽ
   không có class này nên banner vẫn dính đúng top:0 như cũ. */
body.admin-bar .nr-banner { top: 32px; }
@media screen and (max-width: 782px) {
	body.admin-bar .nr-banner { top: 46px; }
}
.nr-banner h1 { margin: 0; font-weight: 400; font-size: var(--text-h5-size, 28px); letter-spacing: .05em; }
/* Logo/chữ "NEWSROOM" giờ là link (quay lại trang Newsroom) — flex canh
   giữa logo+chữ trước đây khai báo ở .nr-banner h1, giờ chuyển sang chính
   thẻ <a> (header.php) vì <a> mới là phần tử bao cả <img> lẫn <strong>.
   color: inherit + text-decoration: none để link không tự đổi màu xanh/
   gạch chân mặc định của trình duyệt, nhìn vẫn y hệt lúc còn là text tĩnh. */
.nr-banner h1 a {
	display: inline-flex;
	align-items: center;
	gap: var(--space-xs, 8px);
	color: inherit;
	text-decoration: none;
}

/* Ẩn khỏi màn hình nhưng screen reader vẫn đọc được — dùng cho <label> của
   ô tìm kiếm (input đã có placeholder "Tìm kiếm" nên không cần label hiện
   ra, nhưng vẫn cần label thật cho người dùng screen reader). */
.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
	padding: 0;
	margin: -1px;
}

/* Hàng logo — vẫn canh giữa "COOLMATE NEWSROOM" y hệt trước đây
   (.nr-banner{text-align:center} + <h1> inline-flex), chỉ thêm
   position:relative để làm điểm neo cho icon kính lúp đặt tuyệt đối ở góc
   phải — nhờ vậy thêm icon mà KHÔNG làm lệch phần logo đang canh giữa. */
.nr-banner-row { position: relative; padding: var(--space-lg, 24px) 0; }

/* Khung bọc icon kính lúp + ô input mở-tại-chỗ trên desktop (xem
   assets/search-toggle.js). Vị trí position:absolute giữ nguyên y hệt
   .nr-search-toggle trước đây (góc phải hàng logo) — chỉ chuyển thuộc tính
   này từ <button> sang chính div bọc ngoài, vì giờ <button> không còn đứng
   1 mình nữa mà nằm CHUNG với <form> bên trong div này.
   max-width dùng để animate (auto/width:auto không transition được) — mặc
   định (mobile lẫn desktop lúc CHƯA mở) chỉ rộng đúng 36px = kích thước
   icon, ô input <form> bên trong bị overflow:hidden che hết nên không lộ
   ra ngoài. Trên MOBILE, class "is-open" KHÔNG BAO GIỜ được JS gắn vào đây
   (mobile vẫn dùng khung xổ dưới #nr-search-panel như bản cũ, xem JS) nên
   khung này mãi mãi giữ nguyên 36px trên mobile — chỉ desktop mới nở ra
   (xem @media (min-width:641px) bên dưới). */
.nr-search-inline {
	position: absolute;
	top: 50%;
	right: 0;
	transform: translateY(-50%);
	display: flex;
	align-items: center;
	max-width: 36px;
	height: 36px;
	border-radius: 999px;
	overflow: hidden;
	transition: max-width .3s cubic-bezier(.4, 0, .2, 1), background-color .2s ease, border-color .2s ease;
}
/* Icon kính lúp — style y hệt .nr-search-toggle trước đây, chỉ bỏ
   position:absolute (giờ do .nr-search-inline cha đảm nhiệm) và thêm
   flex-shrink:0 để không bị <form> bên cạnh (flex:1 lúc mở) bóp nhỏ lại. */
.nr-search-toggle {
	flex-shrink: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: none;
	background: none;
	color: #fff;
	cursor: pointer;
	transition: background-color .2s ease;
}
.nr-search-toggle:hover { background: rgba(255, 255, 255, .12); }
/* <form> ô input mở-tại-chỗ — ẩn hẳn (display:none) mặc định/mobile, chỉ
   hiện lại (display:flex) ở desktop trong @media bên dưới, tránh chiếm chỗ
   dù đang bị overflow:hidden của cha che đi. */
.nr-search-inline-form { display: none; }

/* ---------- Desktop (>640px): ô input nở ngang TẠI CHỖ thay vì xổ khung
   xuống dưới như mobile — theo đúng yêu cầu: bấm icon kính lúp, icon "trôi"
   thành đầu ô input, gõ ở giữa, nút X cuối ô để xoá nhanh, bấm ra ngoài
   vùng ô input thì tự đóng lại (xử lý đóng/mở ở assets/search-toggle.js,
   nhánh isMobile() rẽ theo matchMedia đúng breakpoint 640px này). Khung xổ
   dưới #nr-search-panel bị ẩn hẳn ở desktop — chỉ còn dùng cho mobile. ---------- */
@media (min-width: 641px) {
	.nr-search-panel { display: none; }

	.nr-search-inline.is-open {
		max-width: 320px;
		background: rgba(255, 255, 255, .08);
		border: 1px solid rgba(255, 255, 255, .3);
	}
	.nr-search-inline-form {
		display: flex;
		align-items: center;
		flex: 1;
		min-width: 0;
		width: 0;
		opacity: 0;
		overflow: hidden;
		transition: width .3s cubic-bezier(.4, 0, .2, 1), opacity .2s ease;
	}
	/* width:100% (thay vì auto) để khớp đúng kiểu animate max-width/width
	   bằng giá trị cụ thể ở trên — flex:1 của chính .nr-search-inline-form
	   đã tự lấp đầy phần còn lại trong khung cha (sau icon) lúc cha đã nở
	   hết cỡ (max-width:320px). */
	.nr-search-inline.is-open .nr-search-inline-form { width: 100%; opacity: 1; }
	.nr-search-inline-input {
		flex: 1;
		min-width: 0;
		background: none;
		border: none;
		outline: none;
		font-family: inherit;
		font-size: 14px;
		color: #fff;
		padding: 0 4px 0 8px;
	}
	.nr-search-inline-input::placeholder { color: rgba(255, 255, 255, .55); }
	.nr-search-inline-input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
	/* Nút X — chỉ XOÁ chữ đã gõ (assets/search-toggle.js), không đóng khung;
	   đóng khung là việc riêng của "bấm ra ngoài vùng ô input". */
	.nr-search-inline-clear {
		flex-shrink: 0;
		display: flex;
		align-items: center;
		justify-content: center;
		width: 28px;
		height: 28px;
		margin-right: 4px;
		border: none;
		border-radius: 50%;
		background: none;
		color: rgba(255, 255, 255, .7);
		cursor: pointer;
		transition: background-color .2s ease, color .2s ease;
	}
	.nr-search-inline-clear:hover { background: rgba(255, 255, 255, .14); color: #fff; }
}

/* Khung tìm kiếm xổ ra — nền ĐEN giống banner (không phải nền trắng như bản
   trước), nằm ngay dưới hàng logo, trong CÙNG .nr-banner (khối sticky) nên
   cuộn trang vẫn dính đúng như khi đóng.
   .nr-search-panel KHÔNG bị overflow:hidden (để nút đóng tròn được phép đè
   lồi ra ngoài mép dưới) — phần cần overflow:hidden để animate max-height
   tách riêng ra .nr-search-panel-inner bên trong. Chiều cao .nr-search-panel
   vì vậy tự bằng đúng chiều cao đang animate của phần inner, nên nút đóng
   (position:absolute; bottom:0 theo .nr-search-panel) tự trôi xuống đúng mép
   dưới cùng lúc khung đang xổ ra/thu lại — không cần tính toán riêng. */
.nr-search-panel { position: relative; background: var(--color-neutral-900, #000); }
.nr-search-panel-inner {
	max-height: 0;
	opacity: 0;
	overflow: hidden;
	/* cubic-bezier "standard easing" — tăng tốc nhanh rồi giảm tốc êm về
	   cuối, mượt hơn hẳn "ease" mặc định cho kiểu animation xổ/thu khung. */
	transition: max-height .38s cubic-bezier(.4, 0, .2, 1), opacity .28s cubic-bezier(.4, 0, .2, 1);
}
/* 120px ước lượng SÁT với chiều cao thật của nội dung (1 hàng form + padding)
   — để tối thiểu khoảng "chạy dư" của max-height sau khi nội dung đã hiện
   hết (hạn chế đã biết của kỹ thuật animate bằng max-height: nếu đặt quá
   dư so với nội dung thật, đoạn cuối animation sẽ có cảm giác khựng lại
   thay vì mượt đều tới hết). */
.nr-search-panel.is-open .nr-search-panel-inner { max-height: 120px; opacity: 1; }
.nr-search-panel .nr-container {
	display: flex;
	align-items: center;
	gap: var(--space-md, 16px);
	padding-top: var(--space-lg, 24px);
	padding-bottom: var(--space-2xl, 40px); /* chừa chỗ cho nút đóng tròn đè lên mép dưới */
}
/* Ô nhập bo tròn hẳn (pill) giống các nút .btn-primary/.btn-outline trong
   theme, thay vì bo góc vuông vức như trước. */
.nr-search-panel .nr-search-form {
	flex: 1;
	display: flex;
	align-items: center;
	gap: var(--space-2xs, 8px);
	background: rgba(255, 255, 255, .08);
	border: 1px solid rgba(255, 255, 255, .3);
	border-radius: 999px;
	padding: 12px 20px;
	transition: border-color .2s ease, background-color .2s ease;
}
.nr-search-panel .nr-search-form:focus-within { border-color: rgba(255, 255, 255, .7); background: rgba(255, 255, 255, .14); }
.nr-search-panel .nr-search-input {
	flex: 1;
	min-width: 0;
	background: none;
	border: none;
	outline: none;
	font-family: inherit;
	font-size: 15px;
	color: #fff;
}
.nr-search-panel .nr-search-input::placeholder { color: rgba(255, 255, 255, .55); }
/* Ẩn nút "x" xoá nhanh mặc định của Chrome/Edge cho input[type=search] —
   dùng icon kính lúp tự vẽ ở cuối ô thay cho nút mặc định của trình duyệt. */
.nr-search-panel .nr-search-input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.nr-search-panel .nr-search-submit {
	display: flex;
	align-items: center;
	justify-content: center;
	border: none;
	background: none;
	color: #fff;
	cursor: pointer;
	flex-shrink: 0;
	padding: 0;
}
/* Nút đóng (X) tròn — đè lên đúng mép dưới của khung, canh giữa theo chiều
   ngang, giống đúng ảnh mẫu Samsung Newsroom bạn gửi. Ẩn + thu nhỏ nhẹ lúc
   khung đóng (opacity/scale) thay vì hiện đột ngột, đồng bộ với animation
   xổ khung ở trên; pointer-events:none lúc ẩn để không bấm trúng lúc đang
   vô hình. transition-delay khi mở để nút hiện RA SAU khi khung đã xổ gần
   hết (cảm giác "xuất hiện ở đúng mép dưới" thay vì hiện ngay từ đầu rồi
   trôi theo, mượt hơn). */
.nr-search-close {
	position: absolute;
	left: 50%;
	bottom: 0;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: none;
	background: #fff;
	color: var(--color-neutral-900, #000);
	box-shadow: 0 2px 10px rgba(0, 0, 0, .25);
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	opacity: 0;
	pointer-events: none;
	transform: translate(-50%, 50%) scale(.7);
	transition: opacity .2s ease, transform .2s ease;
}
.nr-search-panel.is-open .nr-search-close {
	opacity: 1;
	pointer-events: auto;
	transform: translate(-50%, 50%) scale(1);
	transition: opacity .2s ease .15s, transform .25s cubic-bezier(.34, 1.56, .64, 1) .15s;
}
/* pointer-events:none lúc đóng nên :hover/:active chỉ thực sự bấm/hover
   được lúc đã .is-open — scope thẳng vào đây cho khỏi thừa CSS không bao
   giờ chạy tới. */
.nr-search-panel.is-open .nr-search-close:hover { transform: translate(-50%, 50%) scale(1.08); }
.nr-search-panel.is-open .nr-search-close:active { transform: translate(-50%, 50%) scale(.94); }
/* Logo ảnh thay cho chữ "COOLMATE" viết tay — ảnh gốc tỉ lệ 240x40 (6:1),
   set height theo đúng cỡ chữ h1 banner (28px) rồi để width tự co giãn
   theo tỉ lệ gốc (không kéo méo hình). vertical-align không cần thiết nữa
   vì h1 đã display:inline-flex + align-items:center để logo và chữ
   "NEWSROOM" canh giữa theo chiều dọc với nhau. */
/* top:-2px — nhích ảnh logo lên 1 chút so với vị trí canh giữa mặc định
   (align-items:center ở .nr-banner h1 a). Lý do: file logo-coolmate.png là
   ảnh bám sát mép (không có khoảng trắng thừa trên/dưới), trong khi chữ
   "NEWSROOM" bên cạnh dùng font Criteria CF có phần "đệm" dưới baseline
   (khoảng trống dành cho chữ có đuôi xuống dòng như g/y, dù NEWSROOM không
   có chữ nào như vậy) — 2 khối canh giữa theo đúng chiều cao dòng vẫn lệch
   quang học vài px vì ảnh không có phần đệm đó còn chữ thì có. Test trực
   quan bằng ảnh logo thật + font Criteria CF thật cho thấy -2px là mức
   khớp nhất giữa 2 khối. */
.nr-banner-logo { height: var(--text-h5-size, 28px); width: auto; position: relative; top: -2px; }

/* Hero: giới thiệu + featured story — layout 2 cột đặt ở .nr-hero-inner
   (bên trong .nr-container, giới hạn 1240px); .nr-hero chỉ còn giữ margin
   dọc giữa các section, không quyết định bề rộng. */
.nr-hero { margin-bottom: var(--space-3xl, 60px); }
.nr-hero-inner {
	display: grid;
	grid-template-columns: 1fr 1.2fr;
	gap: var(--space-2xl, 40px);
	align-items: center;
}
/* Eyebrow/H1/paragraph riêng cho khối giới thiệu hero — khớp đúng Figma
   (node 357:56075): H1 = Headling 1 (65/90, weight 500), đoạn mô tả =
   Body Text 1 (18/24, đen 78% opacity). Eyebrow dùng chung style ở
   .nr-eyebrow (base) vì cả 2 vị trí trong Figma đều giống hệt nhau. */
.nr-hero-copy h2 {
	font-size: var(--text-h1-size, 65px);
	line-height: var(--text-h1-line, 90px);
	font-weight: var(--text-h1-weight, 500);
	letter-spacing: var(--text-h1-tracking, -2px);
	margin: 0 0 var(--space-md, 16px);
}
.nr-hero-copy p {
	font-size: var(--text-body1-size, 18px);
	line-height: var(--text-body1-line, 24px);
	color: var(--color-neutral-900, #000);
	opacity: .78;
	margin-bottom: var(--space-lg, 24px);
}

.btn-outline {
	display: inline-block;
	padding: var(--space-sm, 12px) var(--space-lg, 24px);
	border: 1px solid var(--color-neutral-900, #000);
	border-radius: 999px;
	font-size: 14px;
	background: none;
	color: var(--color-neutral-900, #000);
	cursor: pointer;
	transition: background-color .2s ease, color .2s ease, transform .15s ease;
}
/* Hover: đảo màu (nền đen, chữ trắng) — hiệu ứng "outline fill" quen thuộc.
   :active: hơi thu nhỏ lại để tạo cảm giác bấm thật (click feedback). */
.btn-outline:hover { background: var(--color-neutral-900, #000); color: #fff; }
.btn-outline:active { transform: scale(.96); }

/* Nút "Xem thêm" trong hero — pill đen đặc + chữ trắng viết hoa, đúng Figma
   (khác .btn-outline dùng cho nút "Chia sẻ bài viết" ở trang chi tiết). */
.btn-primary {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2xs, 8px);
	background: var(--color-neutral-900, #000);
	color: #fff;
	padding: 13px 40px;
	border-radius: 999px;
	font-size: 16px;
	font-family: var(--font-heading, sans-serif);
	text-transform: uppercase;
	border: none;
	cursor: pointer;
	transition: opacity .2s ease, transform .15s ease, box-shadow .2s ease;
}
.btn-primary:hover { opacity: .85; box-shadow: 0 6px 16px rgba(0,0,0,.18); }
.btn-primary:active { transform: scale(.96); box-shadow: none; }

/* ============================================================
   "Bài nổi bật" — carousel 3 tin, tự chuyển sau 5s (xem assets/hero-carousel.js)
   Mỗi .nr-slide chồng lên nhau bằng position:absolute, chỉ .is-active hiện.
   Tỉ lệ khung ảnh trước đây là 16:9 (thấp, làm bài nổi bật bị "lép") — đổi
   theo đúng tỉ lệ card "Featured story" trong Figma campaign Tháng 9/2026
   (node 357:56083, width:815/height:550 ≈ 1.48:1) để khung ảnh cao/nổi bật
   hơn hẳn, thay vì hardcode cứng 815x550px (Figma vẽ trên khung rộng hơn
   1240px của site) — dùng aspect-ratio nên vẫn co giãn đúng theo bề rộng
   thật của cột phải ở mọi kích thước màn hình, không bị cố định cứng. */
.nr-hero-feature {
	position: relative;
	aspect-ratio: 815 / 550;
	border-radius: var(--radius-md, 12px);
	overflow: hidden;
	background: var(--color-neutral-200, #e5e5e5);
}
.nr-slide {
	position: absolute;
	inset: 0;
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	z-index: 0;
	/* "visibility" chỉ đổi thành ẩn SAU KHI opacity chạy xong (transition-delay
	   bằng đúng thời lượng fade) — nếu không, slide cũ bị ẩn NGAY LẬP TỨC lúc
	   vừa đổi slide (visibility không nằm trong transition-property nên đổi
	   tức thì), khiến hiệu ứng chuyển slide bị giật/mất mượt thay vì crossfade
	   thật sự giữa 2 ảnh. */
	transition: opacity .6s ease-in-out, visibility 0s linear .6s, z-index 0s linear .6s;
}
.nr-slide.is-active {
	opacity: 1;
	visibility: visible;
	pointer-events: auto;
	z-index: 1; /* slide đang hiện luôn nằm trên, fade-in đè lên slide cũ đang fade-out bên dưới */
	transition: opacity .6s ease-in-out, visibility 0s linear, z-index 0s linear;
}
.nr-slide-link { display: block; position: absolute; inset: 0; color: #fff; }
/* Chọn selector cụ thể hơn .nr-thumb (dùng chung ở lưới bài viết) để thắng
   được thuộc tính width/height/border-radius khi ảnh đại diện có cả 2 class
   "nr-thumb nr-slide-bg" cùng lúc — không phụ thuộc thứ tự khai báo CSS. */
img.nr-slide-bg,
.nr-slide-link .thumb-placeholder {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 0;
}
.nr-slide-scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(to bottom, rgba(17, 19, 24, 0) 30%, rgba(17, 19, 24, .85) 100%);
}
.nr-slide-copy {
	position: absolute;
	left: 0; right: 0; bottom: 0;
	padding: var(--space-xl, 32px);
}
.nr-slide-meta {
	font-size: var(--text-body3-size, 14px);
	line-height: var(--text-body3-line, 20px);
	margin-bottom: var(--space-2xs, 4px);
}
.nr-slide-title {
	font-size: var(--text-h5-size, 28px);
	line-height: var(--text-h5-line, 41px);
	font-weight: var(--text-h5-weight, 600);
	letter-spacing: -0.56px;
	text-transform: uppercase;
	color: #fff;
	margin: 0 0 var(--space-sm, 12px);
	/* Giới hạn tối đa 2 dòng cho gọn — tiêu đề dài quá sẽ bị cắt bớt + hiện
	   "..." thay vì tràn xuống che mất phần chấm chuyển slide bên dưới. */
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.nr-slide-dots { display: flex; gap: 6px; }
.nr-dot {
	width: 8px; height: 8px;
	border-radius: 50%;
	border: none;
	background: rgba(255,255,255,.4);
	padding: 0;
	cursor: pointer;
	transition: background-color .2s ease, width .3s ease, border-radius .3s ease, transform .15s ease;
}
.nr-dot:hover:not(.is-active) { background: rgba(255,255,255,.7); }
.nr-dot:active { transform: scale(.85); }
.nr-dot.is-active { background: #fff; width: 20px; border-radius: 4px; }
.nr-slide-nav {
	position: absolute;
	top: 50%; left: 16px; right: 16px;
	transform: translateY(-50%);
	display: flex;
	justify-content: space-between;
	opacity: .6;
	pointer-events: none; /* chỉ 2 nút con mới bắt click, tránh che link toàn khung */
	z-index: 2;
}
.nr-slide-nav button {
	pointer-events: auto;
	width: 36px; height: 36px;
	border-radius: 50%;
	border: none;
	background: rgba(0,0,0,.35);
	color: #fff;
	font-size: 16px;
	cursor: pointer;
	transition: background-color .2s ease, transform .15s ease;
}
.nr-slide-nav button:hover { background: rgba(0,0,0,.55); transform: scale(1.08); }
.nr-slide-nav button:active { transform: scale(.92); }

/* Story grid + filter năm */
/* Nền xám nhạt chạm hết viewport (full-width); nội dung bên trong nằm trong
   .nr-container nên vẫn giới hạn 1240px và canh giữa như các section khác. */
.nr-stories {
	text-align: center;
	margin-bottom: var(--space-3xl, 60px);
	background: var(--color-neutral-50, #f8f8f8);
	padding: var(--space-3xl, 60px) 0;
}
.nr-stories h2 {
	font-size: var(--text-h3-size, 44px);
	line-height: var(--text-h3-line, 60px);
	letter-spacing: -0.88px;
	margin: 0 0 var(--space-lg, 24px);
}

.nr-filters { display: flex; justify-content: center; gap: var(--space-xs, 8px); flex-wrap: wrap; margin-bottom: var(--space-2xl, 40px); }
.nr-filter {
	padding: 6px var(--space-md, 16px) 8px;
	border-radius: 999px;
	border: 1px solid var(--color-primary-500, #273bcd);
	color: var(--color-primary-500, #273bcd);
	background: none;
	font-size: 14px;
	cursor: pointer;
	transition: background-color .2s ease, color .2s ease, border-color .2s ease, transform .15s ease;
}
.nr-filter:hover:not(.is-active) { background: var(--color-primary-50, #eef0fc); }
.nr-filter:active { transform: scale(.94); }
.nr-filter.is-active { background: var(--color-primary-400, #4c5ddd); color: #fff; border-color: var(--color-primary-400, #4c5ddd); }

/* Lưới bài viết = 1 cột dọc các "hàng" (.nr-grid-row), mỗi hàng tự chứa tối
   đa 4 thẻ (xem newsroom_render_story_rows() trong functions.php).
   - flex-basis tính cố định theo đúng bề rộng 1/4 cột (KHÔNG dùng flex-grow)
     để hàng cuối chưa đủ 4 bài không bị kéo giãn full-width bất thường.
   - align-items: stretch để các thẻ trong cùng 1 hàng cao bằng nhau.
   - Khoảng cách giữa các card giờ lấy từ margin 12px của chính .nr-card
     (không dùng "gap" nữa, tránh cộng dồn 2 lần) — mỗi card margin 12px
     mọi phía => cách nhau 12+12=24px cả ngang lẫn dọc. .nr-grid-row được
     bù margin ngang -12px để card đầu/cuối hàng vẫn thẳng mép với các
     section full-width khác (không bị lùi vào trong 12px). */
.nr-grid {
	display: flex;
	flex-direction: column;
	text-align: left;
	margin-bottom: var(--space-lg, 24px);
}
.nr-grid-row {
	display: flex;
	align-items: stretch;
	align-self: stretch;
	margin: 0 -12px;
}
.nr-grid-row .nr-card {
	flex: 0 1 calc((100% - 4 * 24px) / 4); /* 24px = margin trái+phải của 1 card (12px x2) */
	min-width: 0;
}
/* Khung thẻ bài viết (grid + related-posts) — padding 12px đều quanh nội
   dung, margin 12px đều để tạo khoảng cách với các card/hàng xung quanh. */
.nr-card {
	padding: 12px;
	margin: 12px;
	border-radius: var(--radius-md, 12px);
	background: var(--color-neutral-00, #fff);
	overflow: hidden;
	transition: transform .25s ease, box-shadow .25s ease;
}
/* Hover: card nhấc nhẹ lên + đổ bóng, ảnh zoom nhẹ bên trong (bị .nr-card
   overflow:hidden cắt gọn nên không tràn ra ngoài khung thẻ). */
.nr-card:hover {
	transform: translateY(-4px);
	box-shadow: 0 16px 32px rgba(0, 0, 0, .1);
}
.nr-card:active { transform: translateY(-1px); }
.nr-card > a {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: flex-start;
	width: 100%;
	height: 100%; /* lấp đầy chiều cao đã được .nr-grid-row kéo bằng nhau */
	color: inherit;
	text-decoration: none;
}
/* Con trực tiếp bên trong thẻ phải chiếm full-width — mặc định flex item co
   theo nội dung (không stretch vì align-items:flex-start), nên set rõ để
   ảnh/tiêu đề/mô tả không bị co hẹp lại theo chữ. */
.nr-card > a > * { width: 100%; }

/* Khối nội dung (tag/tiêu đề/mô tả/meta) nằm dưới ảnh — flex column, cách
   ảnh 8px, canh trái, chiếm hết chiều ngang thẻ. justify-content:flex-start
   được set rõ (thay vì chỉ dựa vào mặc định) để đảm bảo tag/tiêu đề/mô tả
   luôn nằm sát nhau ở trên, không bị giãn cách bất thường. Không cần padding
   ngang riêng nữa vì .nr-card đã có padding 12px đều bao quanh (ảnh và chữ
   đã cùng cách mép thẻ 12px). flex:1 để khối này chiếm hết phần chiều cao
   còn lại trong <a> (sau ảnh 177px) khi card bị .nr-grid-row kéo cao bằng
   hàng bên cạnh — nhờ vậy .nr-card-meta mới có chỗ để margin-top:auto đẩy
   xuống sát đáy card thay vì trồi lên ngay dưới mô tả. */
.nr-card-content {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	justify-content: flex-start;
	align-self: stretch;
	flex: 1 1 auto;
	padding-top: var(--space-2xs, 8px);
}
.nr-card-content > * { width: 100%; }

/* Ảnh đại diện trong lưới "Latest stories" — đúng thông số Figma: cao cố
   định 177px, chiếm hết chiều ngang thẻ (align-self: stretch), bo góc 8px.
   object-fit: cover để ảnh thật không bị méo khi crop vừa khung 177px. */
.nr-card .thumb-placeholder,
.nr-card .nr-thumb {
	height: 177px;
	align-self: stretch;
	border-radius: 8px;
	object-fit: cover;
	transition: transform .35s ease;
}
.nr-card:hover .thumb-placeholder,
.nr-card:hover .nr-thumb {
	transform: scale(1.04);
}
/* Tiêu đề tối đa 2 dòng, tràn thì cắt "..." — tránh chữ dài không có khoảng
   trắng (như dữ liệu test) bị tràn ra ngoài khung thẻ như ảnh bạn gửi. */
.nr-card h3 {
	font-size: var(--text-sub1-size, 18px);
	line-height: var(--text-sub1-line, 26px);
	font-weight: 400;
	margin: 0 0 var(--space-xs, 8px);
	width: 100%;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	word-break: break-word;
}
/* Mô tả cũng giới hạn tối đa 2 dòng, tràn thì cắt "..." — cùng kiểu xử lý
   như tiêu đề h3 ở trên, để mô tả dài không đẩy lệch layout card. */
.nr-excerpt {
	font-size: 14px;
	color: var(--color-neutral-600, #525252);
	margin: 0;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	word-break: break-word;
}
/* margin-top: auto đẩy dòng ngày/lượt xem luôn nằm sát đáy card — dù
   tiêu đề/mô tả ngắn hay dài (đủ 2 dòng), meta vẫn ở cùng 1 vị trí cố định
   giữa các card trong hàng, không trồi lên giữa card khi nội dung ngắn. */
.nr-card-meta { display: flex; justify-content: space-between; font-size: 12px; color: var(--color-neutral-400, #a3a3a3); opacity: .8; padding-top: 4px; margin-top: auto; }
.nr-card-meta span,
.article-meta span:not(.font-toggle) { display: inline-flex; align-items: center; gap: 4px; }
.nr-icon-eye { flex-shrink: 0; }

.nr-pagination { text-align: center; }
.nr-pagination p { font-size: 13px; color: var(--color-neutral-500, #737373); margin-top: var(--space-sm, 12px); }
.nr-load-more, .nr-load-more-press, .nr-load-more-term, .nr-load-more-search { margin-bottom: var(--space-sm, 12px); }
.nr-thumb { width: 100%; height: auto; border-radius: var(--radius-md, 12px); display: block; }

/* Press room */
.nr-press { text-align: center; margin-bottom: var(--space-3xl, 60px); }
.nr-press h2 { font-size: var(--text-h3-size, 32px); margin: var(--space-xs, 8px) 0; }
/* Trước đây là ".nr-press p" (chọn MỌI thẻ <p> trong section, không riêng
   gì đoạn caption) — bug: card bài viết "Báo chí" (.nr-card, dùng chung
   với section "câu chuyện") cũng có 1 thẻ <p class="nr-excerpt"> bên
   trong, và vì lồng trong .nr-press nên bị chính selector này với
   margin-bottom:40px "ăn" luôn (thắng .nr-excerpt{margin:0} vì specificity
   cao hơn — class+element > 1 class), làm phần mô tả trong card bị thừa
   40px so với card y hệt ở section "câu chuyện" (không nằm trong .nr-press
   nên không dính lỗi này). Sửa: đổi sang class riêng .nr-press-caption,
   chỉ khớp đúng đoạn caption ngay dưới <h2>, không còn lan sang bên trong
   card nữa. */
.nr-press-caption { color: var(--color-neutral-600, #525252); max-width: 60ch; margin: 0 auto var(--space-2xl, 40px); }

/* Trang liệt kê theo chuyên mục tin (taxonomy-the_loai_tin.php) — tái dùng
   .nr-grid/.nr-grid-row/.nr-card/.nr-pagination/.nr-load-caption y hệt các
   lưới bài viết khác, chỉ cần thêm style cho phần tiêu đề của section này
   (giống .nr-press ở trên). Đặt trong .article-page (max-width 1240px, đã
   dùng chung cho trang chi tiết bài viết) nên không cần bọc thêm .nr-container. */
.nr-term-archive { text-align: center; }
.nr-term-archive h2 { font-size: var(--text-h3-size, 32px); margin: var(--space-xs, 8px) 0 var(--space-2xl, 40px); }

/* Đặt SAU lưới card bài viết "Báo chí" (.nr-press-grid) nên cần margin-top
   để tách 2 khối — nếu .nr-press-grid không render (chưa có bài nào thuộc
   chuyên mục "Báo chí"), margin-top này collapse chung với margin-bottom
   var(--space-2xl,40px) của đoạn caption (.nr-press p) phía trên, vẫn ra
   đúng 40px chứ không cộng dồn thành 80px (margin dọc giữa 2 block liền kề
   luôn tự lấy giá trị LỚN HƠN, không cộng dồn). */
.nr-press-list { display: flex; flex-direction: column; gap: 1px; background: var(--color-neutral-200, #e5e5e5); border-radius: var(--radius-md, 12px); overflow: hidden; text-align: left; margin-top: var(--space-2xl, 40px); }

/* Bài viết chuyên mục "Báo chí" (class .nr-press-grid trên cùng div với
   .nr-grid) — tái dùng lưới thẻ .nr-grid/.nr-grid-row/.nr-card giống hệt
   section "Những câu chuyện tạo nên Coolmate" (không phải kiểu hàng-link
   .nr-press-item bên dưới). Đặt NGAY sau caption nên không cần CSS riêng gì
   thêm — margin-bottom của .nr-press p đã lo khoảng cách, .nr-grid tự có
   text-align:left (đè lại text-align:center của .nr-press ở cha). */
.nr-press-item {
	display: flex;
	justify-content: space-between;
	align-items: center;
	padding: var(--space-lg, 24px);
	background: var(--color-neutral-00, #fff);
}
.nr-press-item h3 { margin: 0 0 4px; font-size: var(--text-body2-size, 16px); }
.nr-press-item p { margin: 0; font-size: 13px; color: var(--color-neutral-500, #737373); }

/* ---------- Responsive (tự căn, không lấy riêng từ Figma) ---------- */
@media (max-width: 1024px) {
	.main-nav-inner { flex-direction: column; align-items: flex-start; }
	.nr-hero-inner { grid-template-columns: 1fr; }
	.nr-grid-row { flex-wrap: wrap; }
	.nr-grid-row .nr-card { flex: 0 1 calc(50% - 24px); } /* 24px = margin trái+phải của 1 card */

	/* Khối 5-cột-link chuyển thành ACCORDION 1 cột dọc ở tablet+mobile —
	   đúng như [accordion] trong đoạn UX Builder cho cả 2 section
	   "tablet" và "mb". Thứ tự hiện đúng thứ tự viết trong footer.php
	   (đã sắp đúng thứ tự accordion gốc), không cần grid-column/row nữa
	   nên trả input về mặc định (auto) là tự xếp theo DOM. */
	.footer-columns { grid-template-columns: 1fr; grid-template-rows: none; gap: 0; }
	.footer-acc-coolclub, .footer-acc-tuyen-dung, .footer-acc-chinh-sach,
	.footer-acc-coolmate-me, .footer-acc-cskh, .footer-acc-kien-thuc,
	.footer-acc-ve-coolmate, .footer-acc-dia-chi { grid-column: auto; grid-row: auto; }
	.footer-acc-item { margin-top: 0; border-bottom: 1px solid var(--color-neutral-700, #333); }
	.footer-acc-item:first-child { border-top: 1px solid var(--color-neutral-700, #333); }
	/* Mục "Địa chỉ liên hệ" không có nút bấm (không phải menu để thu gọn),
	   nên không cần khoảng đệm/kiểu button giống các mục còn lại — chỉ
	   canh khoảng cách bằng nhau cho đều hàng. */
	.footer-acc-toggle {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: var(--space-sm, 12px);
		padding: var(--space-md, 16px) 0;
		margin: 0;
		cursor: pointer;
	}
	.footer-acc-toggle .footer-acc-chevron { display: block; flex: 0 0 auto; transition: transform .2s ease; }
	.footer-acc-toggle[aria-expanded="true"] .footer-acc-chevron { transform: rotate(180deg); }
	.footer-acc-static-title { padding: var(--space-md, 16px) 0; margin: 0; }
	/* Thu gọn mặc định — JS (assets/footer-accordion.js) thêm class
	   is-open khi bấm vào tiêu đề để xổ ra; "Địa chỉ liên hệ" không có JS
	   toggle nên panel của nó luôn ở trạng thái mở (không bị max-height:0). */
	.footer-acc-item:not(.footer-acc-static) .footer-acc-panel {
		max-height: 0;
		overflow: hidden;
		transition: max-height .3s ease;
	}
	.footer-acc-item.is-open .footer-acc-panel { max-height: 2000px; }
	.footer-acc-static .footer-acc-panel { padding-bottom: var(--space-md, 16px); }
}
@media (max-width: 640px) {
	.topbar-inner { flex-direction: column; }
	/* Hàng "COOLMATE lắng nghe bạn!" vẫn giữ 3 cột (5:3:4) ở tablet theo
	   đúng UX Builder — chỉ xếp dọc 1 cột ở mobile (section "mb"). */
	.footer-feedback { grid-template-columns: 1fr; gap: var(--space-lg, 24px); }
	.footer-feedback-social { justify-content: flex-start; }
	.footer-legal { grid-template-columns: 1fr; }
	.footer-legal-badges { justify-content: flex-start; width: 100%; }
	.nr-grid-row .nr-card { flex: 0 1 calc(100% - 24px); }

	/* Font chữ chính đã tự thu nhỏ qua biến số ở design-tokens.css; các chỗ
	   dưới đây là phần LAYOUT (padding/khoảng cách) cần chỉnh riêng để khớp
	   với cỡ chữ nhỏ hơn trên màn hình hẹp. */
	.btn-primary { padding: 12px 28px; font-size: 14px; }
	.nr-slide-copy { padding: var(--space-md, 16px); }
	.nr-slide-nav { left: 8px; right: 8px; }
	.nr-slide-nav button { width: 32px; height: 32px; font-size: 14px; }
	.nr-press-item { padding: var(--space-md, 16px); gap: var(--space-sm, 12px); }
	.nr-press-item > div { flex: 1; min-width: 0; }
}

/* ============================================================
   Bước 4: trang chi tiết bài viết (single-news.php)
   ============================================================ */

/* --nr-font-step: đổi bằng JS (assets/font-toggle.js) mỗi lần bấm nút
   A-/A+ ở .font-toggle — mỗi step = 2px, cộng vào cỡ chữ GỐC của từng
   phần tử qua calc() bên dưới, nên bấm 1 lần là mọi chữ trong bài (tiêu
   đề, ngày/lượt xem, nội dung) đều tăng/giảm đúng 2px cùng lúc, không
   phải riêng 1 chỗ. */
.article-page { --nr-font-step: 0; max-width: 1240px; margin: 0 auto; padding: var(--space-2xl, 40px) var(--space-lg, 24px); }

.breadcrumb { font-size: 13px; color: var(--color-neutral-500, #737373); margin-bottom: var(--space-lg, 24px); }
.breadcrumb a { text-decoration: underline; }

.article-header h1 { font-size: calc(var(--text-h5-size, 28px) + (var(--nr-font-step, 0) * 2px)); line-height: 1.3; margin: 0 0 var(--space-md, 16px); overflow-wrap: break-word; word-break: break-word; }
.article-meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-md, 16px);
	font-size: calc(13px + (var(--nr-font-step, 0) * 2px));
	color: var(--color-neutral-600, #525252);
	padding-bottom: var(--space-lg, 24px);
	margin-bottom: var(--space-lg, 24px);
	border-bottom: 1px solid var(--color-neutral-200, #e5e5e5);
}
.article-meta-link { color: var(--color-neutral-500, #737373); text-decoration: underline; }
/* Nhóm nút A-/A+ dạng pill bo tròn khớp ngôn ngữ thiết kế chung của theme
   (giống .nr-filter/.btn-outline) thay vì 2 nút vuông rời rạc trước đây. */
.font-toggle {
	margin-left: auto;
	display: inline-flex;
	align-items: stretch;
	border: 1px solid var(--color-neutral-300, #d1d1d1);
	border-radius: 999px;
	overflow: hidden;
}
.font-toggle button {
	border: none;
	background: var(--color-neutral-00, #fff);
	color: var(--color-neutral-700, #404040);
	padding: 6px 16px;
	font-size: 13px;
	font-weight: 600;
	cursor: pointer;
	transition: background-color .2s ease, color .2s ease;
}
.font-toggle button:first-child { border-right: 1px solid var(--color-neutral-300, #d1d1d1); }
.font-toggle button:hover:not(:disabled) { background: var(--color-primary-50, #eef0fc); color: var(--color-primary-500, #273bcd); }
.font-toggle button:active:not(:disabled) { transform: scale(.92); }
.font-toggle button:disabled { color: var(--color-neutral-300, #d1d1d1); cursor: not-allowed; }

/* overflow-wrap/word-break: chặn trường hợp nội dung bài viết có 1 "từ" dài
   liền không dấu cách (gõ nhầm/dán nhầm, hoặc URL dài) tràn ngang ra khỏi
   khung bài thay vì tự xuống dòng — 2 thuộc tính này được kế thừa xuống mọi
   thẻ con (p, h2, h3, li... kể cả .article-lead) nên chỉ cần khai báo 1 lần
   ở đây, không cần lặp lại ở từng phần tử con. */
.article-body {
	font-size: calc(var(--text-body2-size, 16px) + (var(--nr-font-step, 0) * 2px));
	line-height: 1.7;
	color: var(--color-neutral-800, #1a1a1a);
	overflow-wrap: break-word;
	word-break: break-word;
}
/* "Heading 1" trong bài — khối callout viền trái xanh + nền gradient nhạt,
   đúng theo Figma (node 321:54936): border-left 5px màu primary, nền
   gradient từ primary 10% opacity về trong suốt, chữ 24px/32px SemiBold
   màu neutral-700 (#333, trùng khớp giá trị Figma). GIỮ NGUYÊN style này —
   trước đây H2 dùng chung style với H1 (vì Figma chỉ có 1 component tên
   "Heading 2" nhưng người dùng có thể chọn cấp Heading 1 khi soạn), nay
   tách riêng để 2 cấp heading phân biệt rõ (xem khối H2 ngay dưới). Mục
   lục vẫn nhận cả H1 lẫn H2 như nhau (xem newsroom_prepare_article_content()
   trong functions.php) — chỉ đổi giao diện hiển thị, không đổi cách quét
   mục lục. Padding dùng luôn font-step hiện tại nên khi bấm A+/A- cỡ chữ
   heading cũng đổi theo, không riêng đoạn văn thường. */
/* H1 trong bài giảm từ 24px xuống 20px (desktop) — 24px nhìn quá to so với
   cỡ chữ nội dung 16px, không cần to bằng .article-header h1 (tiêu đề bài,
   28px). Vẫn cộng thêm var(--nr-font-step) như cũ để nút A-/A+ vẫn hoạt
   động đúng trên heading, không riêng đoạn văn thường. */
.article-body h1 {
	font-size: calc(20px + (var(--nr-font-step, 0) * 2px));
	line-height: 32px;
	font-weight: 600;
	color: var(--color-neutral-700, #333);
	background: linear-gradient(to right, rgba(39, 59, 205, .1), rgba(39, 59, 205, 0));
	border-left: 5px solid var(--color-primary-500, #273bcd);
	padding: 5px 0 5px 15px;
	margin: var(--space-2xl, 40px) 0 var(--space-md, 16px);
}
/* "Heading 2" trong bài — tách khỏi style H1 ở trên để 2 cấp heading không
   còn "ngang hàng" như trước: bỏ khối nền + viền trái, đổi thành gạch chân
   mảnh màu xanh nhạt hơn (primary-300) + chữ đậm màu primary-700. Cùng
   20px với H1 ở desktop (theo yêu cầu) — 2 cấp giờ phân biệt bằng màu +
   gạch chân/nền chứ không còn phân biệt bằng cỡ chữ nữa. */
.article-body h2 {
	font-size: calc(20px + (var(--nr-font-step, 0) * 2px));
	line-height: 28px;
	font-weight: 700;
	color: var(--color-primary-700, #1f2fa4);
	border-bottom: 2px solid var(--color-primary-300, #8f9aef);
	padding: 0 0 8px;
	margin: var(--space-2xl, 40px) 0 var(--space-md, 16px);
}
.article-body h3 { font-size: calc(18px + (var(--nr-font-step, 0) * 2px)); margin: var(--space-xl, 32px) 0 var(--space-sm, 12px); }

/* Mobile: H1/H2 trong bài xuống tiếp còn 18px (H1 ở trên đã giảm 24→20px
   cho desktop, nhưng màn hẹp vẫn nên nhỏ hơn 1 chút nữa cho vừa mắt, không
   choán hết chiều rộng màn hình). H3 giữ nguyên 18px như cũ, không đổi. */
@media (max-width: 640px) {
	.article-body h1,
	.article-body h2 {
		font-size: calc(18px + (var(--nr-font-step, 0) * 2px));
	}
}
.article-body p { margin: 0 0 var(--space-md, 16px); }
.article-lead { font-style: italic; color: var(--color-neutral-500, #737373); }
.article-list { padding-left: 1.2em; }
.article-list li { margin-bottom: var(--space-xs, 8px); }

/* Ảnh chèn giữa nội dung bài (khối "Image" trong khung soạn bài — KHÁC với
   ảnh trong "Thư viện ảnh"/.article-gallery, phần đó đã có kích thước riêng
   ở dưới): full-width theo khung bài, GIỮ NGUYÊN tỉ lệ gốc của ảnh (không
   ép cứng aspect-ratio/object-fit/margin nữa theo yêu cầu — mỗi ảnh co giãn
   tự nhiên theo đúng chiều cao thật của nó khi kéo full-width). Selector
   `.article-gallery-item img` bên dưới có độ đặc thù cao hơn (2 class) nên
   luôn thắng, ảnh trong gallery không bị luật này ảnh hưởng.

   LƯU Ý (lỗi "ảnh không thẳng hàng, không cùng cỡ"): khi kéo-resize 1 ảnh
   trong khung soạn bài (Gutenberg block editor), WordPress tự in thêm
   width dạng inline style/attribute NGAY TRÊN <figure> bao ngoài (hoặc lên
   thẳng <img>, kiểu editor cũ dùng <div class="wp-caption" style="width:
   ...">) — ví dụ <figure class="wp-block-image" style="width: 45%">. Inline
   style này có độ ưu tiên cao hơn MỌI rule trong file CSS này (kể cả rule
   có độ đặc thù cao), nên dù .article-body img đã có width:100%, ảnH vẫn bị
   ép nhỏ lại theo đúng % người soạn bài lỡ kéo tay — mỗi ảnh 1 kích cỡ
   khác nhau, không còn thẳng hàng/cùng cỡ nữa. Cách sửa: thêm !important
   vào width (bên dưới) + ép luôn width các khung bao ngoài thường gặp
   (figure, .wp-caption, .wp-block-image) về 100%, đồng thời bỏ float của
   các class canh trái/phải (alignleft/alignright) WordPress hay gắn kèm —
   !important thắng được cả inline style nên ảnh dù to/nhỏ khi upload đều
   bị ép về đúng 1 khổ, không phụ thuộc người soạn bài có chỉnh tay hay
   không. */
.article-body img {
	display: block;
	width: 100% !important;
	max-width: 100% !important;
	height: auto;
	object-fit: cover;
	border-radius: var(--radius-md, 12px);
}
/* Ép luôn khung bao ngoài ảnh (nếu có) về full-width — đây là chỗ Gutenberg
   thực sự in inline style width:XX% mỗi khi ảnh bị kéo tay resize, không
   phải trên bản thân <img>.

   TRỪ khi figure đó nằm TRONG khối "Gallery" nhiều cột (.wp-block-gallery,
   xem khối ngay dưới) — vì bên trong đó mỗi figure ảnh con PHẢI giữ đúng
   chiều rộng theo cột (vd chọn 2 cột thì mỗi ảnh 50%) do chính CSS lõi của
   WordPress tự tính, ép về 100% ở đây sẽ làm ảnh xếp chồng dọc thay vì nằm
   cạnh nhau, phá mất bố cục nhiều cột. :not(.wp-block-gallery):not(.wp-
   block-gallery *) nghĩa là "không phải chính khối Gallery, và cũng không
   phải phần tử nằm bên trong khối Gallery". */
.article-body figure:not(.wp-block-gallery):not(.wp-block-gallery *),
.article-body .wp-caption,
.article-body .wp-block-image:not(.wp-block-gallery *) {
	width: 100% !important;
	max-width: 100% !important;
	margin: 0;
}
/* Bỏ float + margin trái/phải của các class canh ảnh WordPress hay gắn kèm
   (alignleft/alignright kéo ảnh về 1 bên, chừa chữ chạy vòng quanh) — không
   hợp bố cục 1 cột của trang bài viết, giữ lại sẽ làm ảnh lệch khỏi khung
   chữ phía trên/dưới. */
.article-body .alignleft,
.article-body .alignright,
.article-body .aligncenter,
.article-body .alignwide,
.article-body .alignfull {
	float: none !important;
	margin-left: 0 !important;
	margin-right: 0 !important;
}
/* Caption ảnh — dùng chung <figcaption> chuẩn của WordPress nên áp dụng
   được cho MỌI trường hợp: 1 ảnh đơn lẻ (khối "Image" bật "Add caption"),
   hay cả 1 khung nhiều ảnh (khối "Gallery" bật caption chung, không giới
   hạn số ảnh bên trong) — không cần dựng thêm khối/markup riêng, cứ thêm
   caption theo đúng cách WordPress hỗ trợ sẵn là tự lên đúng style này.
   Đổi từ 13px/màu xám sang đúng style Figma: 16px, in nghiêng, màu đen,
   line-height 24px (= 150% của 16px). */
.article-body figcaption {
	color: var(--color-neutral-900, #000);
	text-align: center;
	font-family: var(--font-body, 'Pangea', sans-serif);
	font-size: 16px;
	font-style: italic;
	font-weight: 400;
	line-height: 24px; /* 150% */
	margin-top: var(--space-xs, 8px);
}

/* Khối "Gallery" dựng sẵn của WordPress (core/gallery — chọn nhiều ảnh rồi
   đặt số cột ngay trong khung soạn bài, KHÁC với khung "Thư viện ảnh" ACF
   riêng của theme là .article-gallery/.nr-gallery-col ở dưới). Mặc định,
   nếu lúc soạn KHÔNG bật "Crop images" (tùy chọn trong thanh công cụ của
   khối Gallery), WordPress giữ nguyên tỉ lệ gốc từng ảnh — ảnh dọc/ngang
   khác nhau thì cao thấp khác nhau dù đang cùng 1 hàng/cột, nhìn lệch "bên
   to bên bé" dù chiều rộng cột đã bằng nhau. Ép cứng tỉ lệ khung 4:3 +
   object-fit:cover ở đây để LUÔN đồng bộ chiều cao giữa các ảnh trong cùng
   khối Gallery, không phụ thuộc người soạn bài có bật "Crop images" hay
   không, cũng không phụ thuộc tỉ lệ gốc từng ảnh đã upload. */
.article-body .wp-block-gallery figure.wp-block-image { margin: 0; }
.article-body .wp-block-gallery img {
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	display: block;
	border-radius: var(--radius-md, 12px);
}

/* Khung "Thư viện ảnh" — nạp từ ACF Gallery field. Bố cục masonry: mỗi ảnh
   GIỮ NGUYÊN tỉ lệ/kích thước gốc (không ép object-fit:cover vào 1 khung
   cứng), ảnh dọc/ngang/vuông gì cũng hiển thị đúng như file gốc. Full-width
   edge-to-edge (100vw, phá khung 1240px của .article-page) ở MỌI kích
   thước màn hình — số cột giảm dần ở breakpoint nhỏ hơn (xem @media bên
   dưới) nhưng luôn tràn sát 2 mép màn hình, không riêng gì desktop.

   LƯU Ý: trước đây dùng CSS `columns` (multi-column) để tự dàn ảnh, nhưng
   thuật toán "cân bằng chiều cao cột" của trình duyệt có thể đẩy nguyên 1
   ảnh xuống cột kế tiếp khi ảnh không vừa khoảng còn lại của cột — để lộ
   khoảng trống màu xám (nền .article-gallery-item) dù ảnh đã có sẵn đúng
   width/height. Đây là hạn chế đã biết của CSS columns, không sửa được chỉ
   bằng cách khai báo đúng kích thước ảnh. Đã đổi sang: PHP tự xếp ảnh vào
   từng cột riêng (newsroom_pack_gallery_columns() trong functions.php,
   thuật toán "cột thấp nhất được thêm ảnh tiếp theo"), mỗi cột là 1
   .nr-gallery-col xếp cạnh nhau bằng flexbox — không còn thuật toán tự
   cân bằng nào của trình duyệt can thiệp vào bố cục nữa.
   assets/gallery-masonry.js xếp lại các cột khi đổi cỡ màn hình (dùng
   data-ratio in sẵn trong HTML, không cần tải lại ảnh). */
.article-gallery {
	display: flex;
	align-items: flex-start;
	gap: var(--space-xs, 8px);
	margin-top: var(--space-lg, 24px);
	margin-bottom: var(--space-lg, 24px);
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
	padding-left: 24px;
	padding-right: 24px; /* tránh ảnh sát viền mép màn hình, vẫn giữ full-bleed */
}
.nr-gallery-col {
	display: flex;
	flex-direction: column;
	gap: var(--space-xs, 8px);
	flex: 1 1 0;
	min-width: 0; /* cho phép co lại đúng theo flex-basis, không bị nội dung ảnh đẩy rộng ra */
}
.article-gallery-item {
	display: block;
	position: relative;
	overflow: hidden;
	border-radius: 6px;
	background: var(--color-neutral-100, #f5f5f5);
}
.article-gallery-item img {
	width: 100%;
	height: auto; /* giữ nguyên tỉ lệ gốc của ảnh, không crop */
	aspect-ratio: auto; /* chặn aspect-ratio 1240/600 của .article-body img (ở trên) rò xuống đây — CSS áp
	                        dụng theo TỪNG thuộc tính, không theo cả khối, nên phải khai báo lại rõ ràng */
	margin: 0; /* CHÍNH LÀ NGUYÊN NHÂN "khoảng xám thừa": .article-body img (ở trên) có
	              margin:24px 0 — vì .article-gallery-item img chưa từng khai báo riêng
	              margin nên 24px trên + 24px dưới đó rò thẳng xuống đây, đội chiều cao
	              khung ảnh thêm 48px mỗi ảnh, để lộ màu nền xám nhạt của
	              .article-gallery-item ở phía trên và dưới mỗi ảnh. Phải khai báo lại
	              margin:0 tường minh, giống hệt lỗi aspect-ratio/object-fit ở trên (CSS
	              áp dụng theo TỪNG thuộc tính riêng lẻ, không theo cả khối). */
	display: block;
	object-fit: unset;
	transition: transform .25s ease;
}
.article-gallery-item:hover img { transform: scale(1.05); }

/* Xem ảnh phóng to (lightbox) — chỉ hiện khi bấm vào 1 ảnh trong gallery, xem assets/gallery.js */
.nr-lightbox {
	position: fixed;
	inset: 0;
	background: rgba(0, 0, 0, .9);
	display: none;
	align-items: center;
	justify-content: center;
	z-index: 9999;
	padding: 40px;
}
.nr-lightbox.is-open { display: flex; }
.nr-lightbox-img { max-width: 100%; max-height: 100%; object-fit: contain; }
.nr-lightbox-close,
.nr-lightbox-prev,
.nr-lightbox-next {
	position: absolute;
	background: none;
	border: none;
	color: #fff;
	font-size: 32px;
	line-height: 1;
	cursor: pointer;
	padding: 8px;
}
.nr-lightbox-close { top: 16px; right: 24px; }
.nr-lightbox-prev { left: 16px; top: 50%; transform: translateY(-50%); }
.nr-lightbox-next { right: 16px; top: 50%; transform: translateY(-50%); }

/* Popup "Chia sẻ bài viết" (nút .btn-outline#nr-share-toggle ở
   .article-tags-row) — cùng kiểu overlay cố định như .nr-lightbox ở trên,
   nhưng hộp thoại nhỏ, nền trắng, canh giữa màn hình (không phải xem ảnh
   full màn hình) nên tách CSS riêng thay vì dùng chung .nr-lightbox.
   [hidden] là thuộc tính HTML chuẩn (không phải class) nên ẩn mặc định
   không cần thêm gì — JS (assets/share-modal.js) chỉ cần bỏ/thêm thuộc
   tính "hidden" để mở/đóng, không cần toggle class riêng. */
.nr-share-modal {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--space-lg, 24px);
}
/* QUAN TRỌNG: tự set display:flex ở trên đã đè mất hành vi ẩn mặc định của
   thuộc tính HTML [hidden] (browser tự ẩn bằng "[hidden]{display:none}"
   trong UA stylesheet, nhưng CSS của theme mình luôn thắng UA stylesheet
   bất kể độ specificity) — phải khai báo lại rõ ràng display:none khi có
   [hidden], nếu không popup sẽ hiện sẵn ngay từ đầu thay vì ẩn chờ bấm nút. */
.nr-share-modal[hidden] { display: none; }
.nr-share-modal-backdrop {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, .6);
}
.nr-share-modal-panel {
	position: relative;
	background: #fff;
	border-radius: var(--radius-md, 12px);
	padding: var(--space-xl, 32px) var(--space-lg, 24px) var(--space-lg, 24px);
	width: 100%;
	max-width: 420px;
	box-shadow: 0 24px 60px rgba(0, 0, 0, .3);
}
.nr-share-modal-close {
	position: absolute;
	top: var(--space-sm, 12px);
	right: var(--space-sm, 12px);
	background: none;
	border: none;
	color: var(--color-neutral-500, #737373);
	cursor: pointer;
	padding: 4px;
	line-height: 0;
}
.nr-share-modal-close:hover { color: var(--color-neutral-900, #000); }
.nr-share-modal-title { margin: 0 0 var(--space-lg, 24px); font-size: var(--text-body2-size, 16px); font-weight: 600; text-align: center; }

.nr-share-options { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-sm, 12px); margin-bottom: var(--space-lg, 24px); }
.nr-share-option {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--space-2xs, 8px);
	color: var(--color-neutral-800, #1a1a1a);
	font-size: 12px;
	text-align: center;
}
.nr-share-option-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	border-radius: 999px;
	background: var(--color-neutral-100, #f5f5f5);
	color: var(--color-neutral-800, #1a1a1a);
	transition: transform .15s ease, background-color .15s ease;
}
.nr-share-option:hover .nr-share-option-icon { transform: translateY(-2px); }
/* Mỗi mạng 1 màu thương hiệu riêng khi hover, cho dễ nhận diện — icon vẽ
   bằng currentColor (SVG) nên chỉ cần đổi color của khung tròn bọc ngoài. */
.nr-share-option:hover .nr-share-option-fb { background: #1877f2; color: #fff; }
.nr-share-option:hover .nr-share-option-zalo { background: #0068ff; color: #fff; }
.nr-share-option:hover .nr-share-option-x { background: #000; color: #fff; }
.nr-share-option:hover .nr-share-option-linkedin { background: #0a66c2; color: #fff; }

.nr-share-copy-label { margin: 0 0 var(--space-xs, 8px); font-size: 12px; color: var(--color-neutral-500, #737373); }
.nr-share-copy { display: flex; gap: var(--space-2xs, 8px); }
.nr-share-copy-input {
	flex: 1;
	min-width: 0;
	padding: 10px 12px;
	border: 1px solid var(--color-neutral-200, #e5e5e5);
	border-radius: var(--radius-sm, 6px);
	font-size: 13px;
	color: var(--color-neutral-600, #525252);
	background: var(--color-neutral-50, #fafafa);
}
.nr-share-copy-btn { padding: 10px 16px; font-size: 13px; white-space: nowrap; flex-shrink: 0; }

@media (max-width: 480px) {
	.nr-share-options { grid-template-columns: repeat(4, 1fr); gap: var(--space-xs, 8px); }
	.nr-share-option { font-size: 11px; }
	.nr-share-option-icon { width: 42px; height: 42px; }
}

/* Nút mục lục nổi (floating) — góc dưới-phải màn hình, luôn hiện khi cuộn
   trang (position:fixed). Bảng mục lục bung lên phía trên nút, xem
   assets/toc.js cho phần bấm mở/đóng + cuộn tới heading.
   Màu nút: trước để nền ĐEN, nhưng từ lúc footer cũng đổi sang nền đen thì
   cuộn xuống cuối bài là nút gần như biến mất (đen trên đen) — đổi sang màu
   xanh primary để luôn nổi bật dù đang ở nền trắng (thân trang) hay nền đen
   (footer). */
.nr-toc { position: fixed; right: var(--space-lg, 24px); bottom: var(--space-lg, 24px); z-index: 95; }
.nr-toc-toggle {
	display: inline-flex;
	align-items: center;
	gap: var(--space-2xs, 8px);
	background: var(--color-primary-500, #273bcd);
	color: #fff;
	border: none;
	border-radius: 999px;
	padding: 12px 20px;
	font-size: 14px;
	font-weight: 600;
	cursor: pointer;
	box-shadow: 0 8px 24px rgba(0, 0, 0, .3);
	transition: opacity .2s ease, transform .15s ease, background-color .2s ease;
}
.nr-toc-toggle:hover { background: var(--color-primary-700, #1f2fa4); }
.nr-toc-toggle:active { transform: scale(.95); }
.nr-toc-toggle[aria-expanded="true"] { background: var(--color-primary-700, #1f2fa4); }

.nr-toc-panel {
	position: absolute;
	right: 0;
	bottom: calc(100% + var(--space-sm, 12px));
	width: 280px;
	max-height: 60vh;
	overflow-y: auto;
	background: #fff;
	border-radius: var(--radius-md, 12px);
	box-shadow: 0 16px 40px rgba(0, 0, 0, .18);
	padding: var(--space-md, 16px);
}
.nr-toc-title { margin: 0 0 var(--space-sm, 12px); font-size: 13px; font-weight: 600; color: var(--color-neutral-500, #737373); text-transform: uppercase; letter-spacing: .04em; }
.nr-toc-panel ul { display: flex; flex-direction: column; gap: 2px; }
.nr-toc-item a {
	display: block;
	padding: 6px var(--space-xs, 8px);
	border-radius: var(--radius-sm, 3px);
	font-size: 14px;
	color: var(--color-neutral-800, #1a1a1a);
	transition: background-color .15s ease, color .15s ease;
}
.nr-toc-item a:hover { background: var(--color-primary-50, #eef0fc); color: var(--color-primary-500, #273bcd); }
.nr-toc-item.nr-toc-level-1 a { font-weight: 600; }
.nr-toc-item.nr-toc-level-2 a { padding-left: var(--space-md, 16px); }

@media (max-width: 640px) {
	.nr-toc-toggle span { display: none; } /* mobile: chỉ hiện icon tròn cho gọn */
	.nr-toc-toggle { padding: 14px; }
	.nr-toc-panel { width: calc(100vw - var(--space-lg, 24px) * 2); }
}

/* Nút "Lên đầu trang" nổi — góc dưới-TRÁI, cố tình đặt đối diện với nút Mục
   lục (góc dưới-phải, xem .nr-toc ở trên) để 2 nút nổi không bao giờ chồng
   lên nhau, kể cả lúc bảng mục lục đang bung ra. Ẩn sẵn (opacity/visibility)
   lúc mới tải trang, JS (assets/back-to-top.js) mới thêm class .is-visible
   sau khi cuộn xuống đủ xa. */
.nr-back-to-top {
	position: fixed;
	left: var(--space-lg, 24px);
	bottom: var(--space-lg, 24px);
	z-index: 95;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	border-radius: 999px;
	background: var(--color-primary-500, #273bcd);
	color: #fff;
	border: none;
	cursor: pointer;
	box-shadow: 0 8px 24px rgba(0, 0, 0, .3);
	opacity: 0;
	visibility: hidden;
	transform: translateY(12px);
	transition: opacity .2s ease, transform .2s ease, background-color .2s ease;
}
.nr-back-to-top.is-visible { opacity: 1; visibility: visible; transform: translateY(0); }
.nr-back-to-top:hover { background: var(--color-primary-700, #1f2fa4); }
.nr-back-to-top:active { transform: scale(.92); }

@media (max-width: 640px) {
	.nr-back-to-top { width: 44px; height: 44px; left: var(--space-md, 16px); bottom: var(--space-md, 16px); }
}

.article-footer { margin-top: var(--space-2xl, 40px); padding-top: var(--space-lg, 24px); border-top: 1px solid var(--color-neutral-200, #e5e5e5); }
/* Dòng "Bài viết này được đăng trong ..." + nút "Chia sẻ bài viết" giờ nằm
   chung 1 hàng (trước đây nút share nằm riêng dòng dưới) — margin-left:auto
   trên chính nút share (thay vì justify-content:space-between ở hàng cha)
   để nút luôn dạt sang phải kể cả khi bài không có chuyên mục nào (không
   có .article-tags để "đẩy" nó qua bằng space-between). */
.article-tags-row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-md, 16px); margin-bottom: var(--space-lg, 24px); }
.article-tags { font-size: 13px; color: var(--color-neutral-600, #525252); margin: 0; }
.article-tags a { color: var(--color-primary-500, #273bcd); text-decoration: underline; }
.article-tags-row .btn-outline { margin-left: auto; flex-shrink: 0; }
.avatar-placeholder { width: 32px; height: 32px; border-radius: 50%; background: var(--color-neutral-200, #e5e5e5); object-fit: cover; }

/* Khung "Tác giả" — đúng theo Figma (node 321:55097, campaign Tháng 9/2026):
   viền + nền nhạt màu primary, nhãn "Tác giả" ở góc trên-trái, hàng avatar +
   tên + chức danh, đoạn giới thiệu ngắn ở dưới cùng có gạch chân phân cách.
   Bản Figma có thêm nút "Thông tin tác giả" ở góc phải hàng đầu — theo yêu
   cầu KHÔNG làm nút đó, chỉ giữ phần khung + nội dung. */
.article-author-box {
	position: relative;
	margin-top: var(--space-lg, 24px);
	border: 1px solid var(--color-primary-400, #4c5ddd);
	border-radius: var(--radius-md, 12px);
	background: #fafcff;
	padding: var(--space-xl, 32px) var(--space-lg, 24px) var(--space-lg, 24px);
}
.article-author-badge {
	position: absolute;
	top: 0;
	left: 0;
	background: var(--color-primary-700, #1f2fa4);
	color: #fff;
	font-size: 12px;
	font-weight: 600;
	line-height: 1;
	padding: 8px 16px;
	border-radius: var(--radius-md, 12px) 0 var(--radius-sm, 6px) 0;
}
.article-author-top { display: flex; align-items: center; gap: var(--space-2xs, 8px); }
.article-author-avatar { width: 41px; height: 41px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.article-author-info { display: flex; flex-direction: column; }
.article-author-name { margin: 0; font-size: 18px; line-height: 1.5; color: var(--color-neutral-900, #000); }
.article-author-role { margin: 0; font-size: 16px; line-height: 1.5; color: var(--color-neutral-700, #333); }
.article-author-bio-wrap { padding-top: 15px; }
.article-author-bio { margin: 0; padding-bottom: 15px; border-bottom: 1px solid #ddd; font-size: 14px; line-height: 1.5; color: #666; }

/* "Các bài viết liên quan" — dùng lại ĐÚNG cấu trúc của "Những câu chuyện
   tạo nên Coolmate" ở trang listing (.nr-container full 1240px, .nr-grid/
   .nr-grid-row/.nr-card 4 cột responsive có sẵn, nút "Xem thêm" AJAX +
   caption "Hiển thị X trên tổng Y" cùng kiểu .nr-pagination) thay vì khung
   3-cột CSS Grid max-width:900px riêng trước đây — nên không cần CSS layout
   riêng nữa, chỉ còn khoảng cách với phần trên + canh giữa tiêu đề. */
.related-posts { text-align: center; margin-top: var(--space-3xl, 60px); }
.related-posts h2 { font-size: 22px; margin-bottom: var(--space-lg, 24px); }

@media (max-width: 1024px) {
	/* Số cột (3 ở tablet) do assets/gallery-masonry.js tự xếp lại (thêm/bớt
	   .nr-gallery-col và chuyển ảnh giữa các cột) khi qua breakpoint này —
	   không dùng CSS `columns` nữa (xem ghi chú ở khối .article-gallery
	   phía trên), nên ở đây chỉ cần chỉnh khoảng cách cho vừa màn hình nhỏ. */
	.article-gallery { gap: 6px; }
	.nr-gallery-col { gap: 6px; }
}
@media (max-width: 640px) {
	/* 2 cột ở mobile — cũng do gallery-masonry.js xếp lại. */
	.font-toggle { margin-left: 0; }
	.related-posts h2 { font-size: 18px; }
}