/* AI content compat — WordPress wraps AI <img> in figure.wp-block-image
   (converter emits wp:image blocks). Neutralize core figure styles so AI CSS
   written against bare img keeps working. Loaded on every AI page.
   NGUYÊN TẮC: figure margin LUÔN 0 trong .aib-page (AI căn nhịp bằng
   padding/gap khối cha; margin core 1em auto là vỡ layout ngay). Figure của
   AI giữ nguyên class để CSS trang quyết — reset margin không đè style AI. */
/* Chặn scroll ngang cấp trang (ngang hàng preview doc có overflow-x: clip) —
   dùng clip (không phải hidden) để giữ position: sticky. Overlap có chủ đích
   bên trong vẫn hiển thị, chỉ kẹp phần tràn viewport. */
html, body {
	overflow-x: clip;
}
.aib-page figure.wp-block-image:not([class*="aib-"]) {
	margin: 0;
	max-width: none;
}
/* Mọi figure có class trong nội dung AI đều margin 0: nhịp do padding/gap khối
   cha quyết, margin figure là vỡ layout. Specificity (0,2,1) thắng WP core
   (0,1,1) chắc chắn; brand CẤM tự đặt margin figure (luật prompt) nên không
   có xung đột hợp lệ. Figure không class giữ margin core (ảnh thường). */
.aib-page figure[class] {
	margin: 0;
}
.aib-page figure.wp-block-image:not([class*="aib-"]) img {
	display: block;
	max-width: 100%;
	height: auto;
}
.aib-page figure.wp-block-image figcaption {
	margin: 0;
	color: inherit;
}
/* Ảnh nền (bg) do converter bọc figure: class bg nằm trên figure, img trần —
   ép img phủ kín figure để không vỡ layout (CSS AI cũ chỉ canh img). */
.aib-page figure[class*="-bg"] {
	margin: 0;
	max-width: none;
}
.aib-page figure[class*="-bg"] img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
/* Figure AI (class aib-*): khung do figure giữ, img con phủ kín khung
   (height:100% + cover) khi AI không viết rule img riêng — :where độ ưu tiên
   0 nên rule img của brand (icon 24px/contain...) luôn thắng. Figure
   thường giữ height:auto để không méo ảnh nội dung. */
.aib-page :where(figure[class*="aib-"]) img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
/* Link nội dung AI (trừ nút — nút do CSS nút riêng quyết). :where độ ưu tiên
   0 — rule link brand luôn thắng. */
.aib-page :where(a:not(.aib-button):not(.wp-block-button__link)) {
	color: var(--aib-link);
}
.aib-page :where(a:not(.aib-button):not(.wp-block-button__link)):hover {
	color: var(--aib-primary-hover);
}

.aib-page.aib-page .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)) {
	max-width: var(--aib-container);
}
.aib-page.aib-page :where(.is-layout-constrained) > * {
	margin-block-start: 0;
	margin-block-end: 0;
}

:root :where(.is-layout-flow) > * {
    margin-block-start: 0px;
    margin-block-end: 0;
}

/* Container guard — mirror previewAssembler (WIDTH_GUARD/PADDING_GUARD):
   preview inlines trong doc <style>, publish không có guard nào trong CSS
   trang → đây là nơi kẹp trên site thật. AI cũng tự viết cùng rule này vào
   đầu CSS trang (WRAPPER_RULE — adapter.js/common.js); guard là mạng lưới
   bám cho trang AI quên/cũ. Selector THẦN TRẦN (.aib-page .aib-container)
   — KHÔNG phụ thuộc vị trí bằng ">" (WP có thể tự bọc thêm group; selector
   có ">" vỡ là container mất width). padding-inline 24px giữ lề an toàn
   (section chỉ padding DỌC, lề ngang do container). */
.aib-page .aib-container {
	max-width: var(--aib-container);
	width: 100%;
	margin-inline: auto;
	padding-inline: 24px;
}
/* Section tự kẹp width bằng padding ngang → cộng lề với container. Strip
   padding ngang của section CÓ bọc container (dưới nó ở bất kỳ cấp nào);
   section thiếu container thì giữ padding (kẻo chữ dính lề). !important
   thắng rule AI — giống preview. */
.aib-page section:has(.aib-container) {
	padding-left: 0 !important;
	padding-right: 0 !important;
}
/* Bản đồ chuẩn của theme (shortcode [aid_map] — publish thay iframe AI bằng
   shortcode này). Khung tối thiểu để map không bẹp khi CSS trang không phủ
   tới; :where() = độ ưu tiên 0 nên CSS AI luôn thắng. */
:where(.aib-map iframe, .aid-map-embed) {
	display: block;
	width: 100%;
	border: 0;
	min-height: 320px;
}
