/* ==========================================================================
   PremiumKey Admin — khu vực quản trị (admin.premiumkey.to). Riêng biệt với
   style.css (site khách hàng) — sidebar tối + nội dung nền trung tính, dùng
   indigo/cyan làm màu nhấn, cho dễ đọc khi dùng nhiều giờ. Dựng trên Bootstrap 5 (grid/utilities) đã load sẵn ở layout.
   ========================================================================== */

:root {
	--pk-primary: #4f46e5;
	--pk-primary-dark: #312e81;
	--pk-primary-light: #eef2ff;
	--pk-accent: #06b6d4;
	--pk-accent-light: #ecfeff;
	--pk-ink: #0f172a;
	--pk-muted: #64748b;
	--admin-bg: #f4f6fa;
	--admin-border: #e5e8ef;
	--admin-success: #2f8f5b;
	--admin-success-light: #e8f5ee;
	--radius-lg: 18px;
	--radius-md: 12px;
	--radius-sm: 8px;
}

body.admin-body {
	margin: 0;
	font-family: 'Be Vietnam Pro', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
	color: var(--pk-ink);
	background: var(--admin-bg);
}

.admin-body a { color: var(--pk-primary); text-decoration: none; }
.admin-body a:hover { color: var(--pk-primary-dark); }

/* ===== Shell: sidebar + main ===== */
.admin-shell { display: flex; min-height: 100vh; }

.admin-sidebar {
	width: 240px;
	min-width: 240px;
	background: var(--pk-ink);
	display: flex;
	flex-direction: column;
	padding: 10px 8px;
	/* Cố định sidebar khi trang dài hơn viewport — tự cuộn riêng nếu menu dài
	   hơn 100vh, không kéo theo nội dung chính. Mobile (@media 860px cuối
	   file) đổi hẳn sang position: fixed cho off-canvas drawer, ghi đè rule này. */
	position: sticky;
	top: 0;
	height: 100vh;
	overflow-y: auto;
}

.admin-brand { display: flex; align-items: center; gap: 10px; padding: 4px 8px 12px; border-bottom: 1px solid rgba(255,255,255,.08); margin-bottom: 6px; }
.admin-brand-mark { font-size: 22px; line-height: 1; }
.admin-brand-text { font-size: 16px; font-weight: 800; color: #fff; letter-spacing: -.3px; line-height: 1; }
.admin-brand-text .accent { color: var(--pk-accent); }
.admin-brand-tagline { font-size: 10.5px; font-weight: 600; color: rgba(255,255,255,.45); letter-spacing: 1px; text-transform: uppercase; margin-top: 3px; }

.admin-nav { display: flex; flex-direction: column; }
/* Mật độ theo admin xaqm.beminiapp: mục ~30px, nhóm cách nhau 10px, không kẻ phân cách. */
.admin-nav-group { display: flex; flex-direction: column; gap: 1px; }
.admin-nav-group + .admin-nav-group { margin-top: 10px; }
.admin-nav-heading {
	padding: 4px 10px; margin-bottom: 1px; font-size: .68rem; font-weight: 600; letter-spacing: .06em;
	text-transform: uppercase; color: rgba(255,255,255,.4);
}
.admin-nav-group:has(.admin-nav-item.active) .admin-nav-heading { color: rgba(255,255,255,.6); }
.admin-sidebar a.admin-nav-item {
	position: relative; display: flex; align-items: center; gap: 10px; padding: 7px 10px; border-radius: 6px;
	color: rgba(255,255,255,.68); font-size: .85rem; font-weight: 500; line-height: 1.3;
	transition: background-color .15s ease, color .15s ease;
}
.admin-nav-item svg { flex: none; opacity: .7; transition: opacity .15s ease; }
.admin-sidebar a.admin-nav-item:hover { color: #fff; background: rgba(255,255,255,.06); }
.admin-sidebar a.admin-nav-item:hover svg { opacity: 1; }
.admin-sidebar a.admin-nav-item.active {
	background: var(--pk-primary); color: #fff; box-shadow: 0 2px 8px rgba(79,70,229,.35);
}
.admin-sidebar a.admin-nav-item.active svg { opacity: 1; }
.admin-nav-count {
	margin-left: auto; min-width: 20px; padding: 1px 6px; border-radius: 10px;
	background: var(--pk-accent); color: var(--pk-ink); font-size: .72rem; font-weight: 700; text-align: center;
}
.admin-sidebar a.admin-nav-item:focus-visible { outline: 1px solid rgba(255,255,255,.3); outline-offset: -1px; }

/* Thanh cuộn mảnh cho sidebar khi menu dài hơn màn hình. */
.admin-sidebar { scrollbar-width: thin; scrollbar-color: rgba(255,255,255,.15) transparent; }
.admin-sidebar::-webkit-scrollbar { width: 6px; }
.admin-sidebar::-webkit-scrollbar-thumb { background: rgba(255,255,255,.15); border-radius: 3px; }

.admin-sidebar-spacer { flex: 1; }

.admin-sidebar-footer { border-top: 1px solid rgba(255,255,255,.08); padding-top: 10px; margin-top: 10px; display: flex; flex-direction: column; gap: 6px; }
.admin-avatar {
	width: 32px; height: 32px; border-radius: 50%; background: var(--pk-accent); color: var(--pk-ink);
	display: flex; align-items: center; justify-content: center; font-size: 12.5px; font-weight: 700; flex: none;
}
.admin-user-mini { display: flex; align-items: center; gap: 10px; padding: 4px 6px; border-radius: 6px; transition: background-color .15s ease; }
.admin-body a.admin-user-mini:hover, .admin-body a.admin-user-mini.active { background: rgba(255,255,255,.06); }
.admin-user-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-user-name { font-size: .82rem; font-weight: 600; color: #fff; }
.admin-user-role { font-size: .7rem; color: rgba(255,255,255,.5); }
.admin-logout-form button {
	all: unset; cursor: pointer; width: 100%; box-sizing: border-box;
	display: flex; align-items: center; gap: 10px; padding: 7px 10px; border-radius: 6px;
	color: rgba(255,255,255,.55); font-size: .85rem; font-weight: 500; font-family: inherit;
}
.admin-logout-form button:hover { color: #fff; background: rgba(255,255,255,.06); }

.admin-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.admin-topbar {
	height: 64px; min-height: 64px; background: #fff; border-bottom: 1px solid var(--admin-border);
	display: flex; align-items: center; justify-content: space-between; padding: 0 32px;
	position: sticky; top: 0; z-index: 20;
}
.admin-topbar-title { font-size: 19px; font-weight: 700; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-topbar-user { display: flex; align-items: center; gap: 9px; font-size: 13.5px; font-weight: 600; }

/* Nút mở/đóng sidebar trên mobile — ẩn mặc định, chỉ hiện dưới breakpoint (xem @media cuối file). */
.admin-topbar-menu-btn {
	display: none; align-items: center; justify-content: center; width: 36px; height: 36px;
	border: none; background: transparent; border-radius: var(--radius-sm); color: var(--pk-ink); cursor: pointer; flex: none;
}
.admin-topbar-menu-btn:hover { background: var(--admin-bg); }

.admin-sidebar-backdrop { display: none; }

.admin-content { flex: 1; padding: 22px 32px; display: flex; flex-direction: column; gap: 16px; }

/* ===== Reusable pieces ===== */
.admin-card { background: #fff; border: 1px solid var(--admin-border); border-radius: var(--radius-lg); box-shadow: 0 1px 2px rgba(43,35,32,.04); }
.admin-card-pad { padding: 20px; }

/* Tab (vd resources/views/admin/settings/index.php) — mỗi tab là link GET
   ?tab=..., chuyển tab = điều hướng/reload trang (server chỉ render đúng 1
   panel của tab active, không dùng JS toggle). */
/* overflow-y: hidden bắt buộc phải có — chỉ set overflow-x khiến trình duyệt
   tự suy ra overflow-y: auto (theo spec CSS), thừa 1 thanh cuộn dọc xấu dù
   nội dung không hề tràn theo chiều dọc (margin-bottom âm của .admin-tab do
   "all: unset" gây lệch vài px). */
.admin-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--admin-border); margin-bottom: 14px; overflow-x: auto; overflow-y: hidden; }
.admin-tab {
	all: unset; cursor: pointer; padding: 8px 16px; font-size: 14px; font-weight: 600; color: var(--pk-muted);
	border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap;
}
.admin-tab:hover { color: var(--pk-ink); }
.admin-tab.is-active { color: var(--pk-primary); border-bottom-color: var(--pk-primary); }
/* Biến thể gọn để nằm chung 1 hàng với nhãn field (vd tab ngôn ngữ tiêu đề menu). */
.admin-tabs-compact { border-bottom: 0; margin-bottom: 0; gap: 2px; }
.admin-tabs-compact .admin-tab { padding: 3px 8px; font-size: 13px; margin-bottom: 0; }

/* Thông báo ngắn nằm ngay cạnh nút hành động (vd "Đã lưu" cạnh nút Lưu) thay
   vì alert đầu trang đẩy nội dung xuống. data-autohide: tự mờ đi sau vài giây
   (admin-menu-form.js). */
.admin-inline-notice { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; min-width: 0; transition: opacity .4s; }
.admin-inline-notice.is-success { color: var(--admin-success); }
.admin-inline-notice.is-success::before { content: "\2713"; /* ✓ */ }
.admin-inline-notice.is-error { color: var(--pk-primary); }
.admin-inline-notice.is-hidden { opacity: 0; }

.admin-tab-panel { display: none; }
.admin-tab-panel.is-active { display: block; }

/* Cố định ngay dưới .admin-topbar (sticky, cao 64px) khi trang dài — nút Lưu
   ở góc phải header luôn trong tầm tay, không phải cuộn lên đầu trang. Nền
   trùng --admin-bg (nền chung khu nội dung) để nội dung cuộn qua bên dưới
   không bị lộ, viền dưới phân tách rõ khi đang "dính". */
.admin-page-header {
	display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap;
	position: sticky; top: 64px; z-index: 15; background: var(--admin-bg);
	padding-bottom: 10px; border-bottom: 1px solid var(--admin-border);
}
/* Header chứa tab (danh sách sản phẩm): tab bên trái, nút hành động bên phải,
   gạch chân tab đang chọn đè lên viền dưới của header thay vì có viền riêng. */
.admin-page-header-tabs { align-items: center; padding-bottom: 0; }
.admin-page-header-tabs .admin-tabs { border-bottom: 0; margin-bottom: -1px; }
.admin-page-header-tabs .admin-tab { margin-bottom: 0; }
.admin-page-header-tabs .admin-btn { margin-bottom: 8px; }
.admin-page-title { font-size: 22px; font-weight: 800; margin: 0; }
.admin-page-subtitle { font-size: 13.5px; color: var(--pk-muted); margin-top: 3px; }
.admin-breadcrumb { font-size: 13px; color: var(--pk-muted); margin-bottom: 4px; }

.admin-btn {
	display: inline-flex; align-items: center; gap: 8px; padding: 10px 18px; border: none; border-radius: var(--radius-sm);
	font-size: 14px; font-weight: 700; font-family: inherit; cursor: pointer; text-decoration: none; line-height: 1;
}
/* .admin-btn.admin-btn-xxx (2 class) thay vì .admin-btn-xxx (1 class) — bắt
   buộc để thắng độ đặc hiệu ".admin-body a" (32) khi phần tử là <a>, tránh
   chữ bị "màu đỏ chìm trên nền đỏ". */
.admin-btn.admin-btn-primary { background: var(--pk-primary); color: #fff; }
.admin-btn.admin-btn-primary:hover { background: var(--pk-primary-dark); color: #fff; }
.admin-btn.admin-btn-outline { background: #fff; color: var(--pk-ink); border: 1px solid var(--admin-border); font-weight: 600; }
.admin-btn.admin-btn-outline:hover { border-color: var(--pk-muted); color: var(--pk-ink); }
.admin-btn.admin-btn-sm { padding: 6px 10px; font-size: 12.5px; }
.admin-btn.admin-btn-danger-ghost { background: none; color: var(--pk-primary); border: 1px solid var(--admin-border); font-weight: 600; padding: 10px 16px; }

.admin-icon-btn {
	width: 32px; height: 32px; border-radius: 8px; border: 1px solid var(--admin-border); background: #fff;
	display: inline-flex; align-items: center; justify-content: center; color: var(--pk-muted); cursor: pointer;
}
.admin-body a.admin-icon-btn { color: var(--pk-muted); }
.admin-icon-btn:hover, .admin-body a.admin-icon-btn:hover { border-color: var(--pk-muted); color: var(--pk-ink); }
.admin-icon-btn.is-danger:hover, .admin-body a.admin-icon-btn.is-danger:hover { color: #dc2626; border-color: #dc2626; }
/* Nút "Dịch tất cả" (icon + chữ) — khác .admin-icon-btn thường (32x32 cố định,
   chỉ chứa icon): rộng theo nội dung, không bị bóp xuống 32px làm chữ rớt dòng
   từng ký tự (xem admin-translate.js, admin-translate-group ở menus/index.php). */
.admin-icon-btn.admin-translate-all-btn {
	width: auto; height: 28px; padding: 0 10px; gap: 5px; white-space: nowrap;
	flex-shrink: 0; font-size: 12.5px; font-weight: 600;
}
/* Trạng thái đang gọi API dịch — spin icon globe trên nút + khoá/làm mờ ô
   input đích để admin thấy rõ đang chờ, tránh gõ đè lên lúc chưa xong. */
.admin-icon-btn.is-translating svg { animation: admin-spin .8s linear infinite; }
.admin-input.is-translate-target-loading { opacity: .55; background: var(--admin-bg-soft, #f6f6f6); }
@keyframes admin-spin { to { transform: rotate(360deg); } }
/* To hơn .admin-icon-btn thường — bằng khoảng chiều cao cột label + .admin-input cạnh nó (~70px), xem resources/views/admin/products/form.php, để nhìn rõ ảnh riêng của variant. */
.admin-variant-image-btn { width: 44px; height: 44px; border-radius: 10px; flex-shrink: 0; }
/* Bấm "gỡ ảnh riêng" (checkbox ẩn trong .admin-variant-image-clear) chỉ có
   tác dụng thật khi lưu form — 2 class dưới đây cho phản hồi ngay khi bấm
   (JS toggle trong admin-product-form.js) để không trông như không chạy. */
.admin-variant-image-clear.is-active { border-color: var(--pk-primary); color: var(--pk-primary); background: var(--pk-primary-light); }
.admin-variant-image-btn.is-marked-for-removal { opacity: .4; }
/* Dòng mệnh giá ở form sản phẩm. Ô "% phí PayPal" chỉ có nghĩa với thẻ PremiumKey
   (chỉ chúng nhận PayPal): server render + JS (admin-product-form.js) bật
   .has-paypal-fee trên #variant-rows theo ô "Mẫu thẻ" đang chọn.
   Số cột đổi theo — display:none gỡ ô khỏi grid nên không thể giữ 7 track cố định.
   Nhãn cột chỉ hiện 1 lần ở .admin-variant-head (cùng lưới với dòng); nhãn trong từng
   dòng ẩn đi, chỉ hiện lại ở màn hẹp khi lưới gập thành nhiều hàng. Cột cuối (ảnh +
   nút) rộng cố định để hàng tiêu đề và các dòng thẳng cột. */
.admin-variant-row, .admin-variant-head { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1.4fr 132px; gap: 10px; align-items: center; }
.admin-variant-row { padding: 10px 0; border-top: 1px solid var(--admin-border); }
.admin-variant-row .admin-field-label { display: none; }
.admin-variant-head { padding: 0 0 8px; font-size: 12px; font-weight: 600; color: var(--pk-muted); text-transform: uppercase; letter-spacing: .03em; }
.admin-variant-actions { display: flex; align-items: center; gap: 6px; }
.admin-variant-paypal-fee { display: none; }
#variant-rows.has-paypal-fee .admin-variant-row, #variant-rows.has-paypal-fee .admin-variant-head { grid-template-columns: 1fr 1fr 1fr 1fr 0.8fr 1.4fr 132px; }
#variant-rows.has-paypal-fee .admin-variant-paypal-fee { display: block; }
@media (max-width: 1100px) {
	.admin-variant-head { display: none; }
	.admin-variant-row, #variant-rows.has-paypal-fee .admin-variant-row { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: end; }
	.admin-variant-row .admin-field-label { display: block; }
	.admin-variant-meta, .admin-variant-actions { grid-column: 1 / -1; }
}

/* Form sản phẩm (resources/views/admin/products/form.php): cột chính nội dung/SEO +
   cột phụ phân loại/mẫu thẻ/ảnh, bảng mệnh giá full width bên dưới. */
.pf-layout { display: grid; grid-template-columns: minmax(0, 1.75fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.pf-side { display: flex; flex-direction: column; gap: 16px; }
.pf-full { grid-column: 1 / -1; }
.pf-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
.pf-card-head .pf-card-title { margin-bottom: 0; }
.pf-card-title { font-size: 15px; font-weight: 700; margin: 0 0 14px; color: var(--pk-ink); }
.pf-section { margin: 18px 0 12px; padding-top: 14px; border-top: 1px solid var(--admin-border); font-size: 12px; font-weight: 700; color: var(--pk-muted); text-transform: uppercase; letter-spacing: .04em; }
.pf-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.pf-image-current { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; font-size: 12.5px; color: var(--pk-muted); word-break: break-all; }
.pf-image-current img { width: 56px; height: 56px; border-radius: 10px; object-fit: cover; border: 1px solid var(--admin-border); flex-shrink: 0; }
@media (max-width: 992px) { .pf-layout { grid-template-columns: 1fr; } }

.admin-badge { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border-radius: 999px; font-size: 12.5px; font-weight: 600; }
.admin-badge-success { background: var(--admin-success-light); color: var(--admin-success); }
.admin-badge-warning { background: #fef3c7; color: #92400e; }
.admin-badge-info { background: var(--pk-primary-light); color: var(--pk-primary); }
.admin-badge-muted { background: #eef1f5; color: var(--pk-muted); }
.admin-badge-danger { background: #fee2e2; color: #b91c1c; }

.admin-chip { display: inline-flex; align-items: center; padding: 4px 11px; border-radius: 999px; font-size: 12.5px; font-weight: 600; background: #eef1f5; color: var(--pk-ink); }

.admin-table { width: 100%; border-collapse: collapse; }
.admin-table th { text-align: left; font-size: 12px; font-weight: 700; color: var(--pk-muted); text-transform: uppercase; letter-spacing: .4px; padding: 16px 20px 12px 20px; }
.admin-table td { padding: 14px 20px; font-size: 14px; border-top: 1px solid var(--admin-border); vertical-align: middle; }
.admin-table-thumb { width: 40px; height: 40px; border-radius: 9px; object-fit: cover; background: var(--admin-bg); }
/* Ảnh đại diện khách (Khách hàng) — ảnh thật hoặc chữ cái đầu tên. */
.admin-customer-name { display: flex; align-items: center; gap: 10px; }
.admin-avatar { display: inline-flex; flex-shrink: 0; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; object-fit: cover; background: var(--pk-accent); color: #fff; font-size: 12px; font-weight: 800; }
img.admin-avatar { background: var(--admin-bg); }
.admin-table-empty { padding: 48px 20px; text-align: center; color: var(--pk-muted); font-size: 14px; }
.admin-table-truncate { display: inline-block; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }

.admin-toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.admin-search { position: relative; flex: 1; max-width: 320px; }
.admin-search svg { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: #b7ada4; }
.admin-search input { width: 100%; padding: 9px 12px 9px 38px; border: 1px solid var(--admin-border); border-radius: var(--radius-sm); font-size: 13.5px; font-family: inherit; background: #fff; }
.admin-select-filter { padding: 9px 14px; border: 1px solid var(--admin-border); border-radius: var(--radius-sm); font-size: 13.5px; font-weight: 600; color: var(--pk-ink); background: #fff; font-family: inherit; }

.admin-file-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 14px; }
.admin-file-card { border: 1px solid var(--admin-border); border-radius: var(--radius-sm); padding: 10px; display: flex; flex-direction: column; gap: 6px; }
.admin-file-thumb { width: 100%; aspect-ratio: 1 / 1; border-radius: 8px; background: var(--admin-bg); display: flex; align-items: center; justify-content: center; overflow: hidden; color: var(--pk-muted); }
.admin-file-thumb img { width: 100%; height: 100%; object-fit: cover; }
.admin-file-name { font-size: 12.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.admin-file-meta { font-size: 11.5px; color: var(--pk-muted); }

.admin-pagination { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-top: 1px solid var(--admin-border); font-size: 13px; color: var(--pk-muted); }
.admin-pagination-links { display: flex; gap: 6px; }
.admin-pagination-links a, .admin-pagination-links span { min-width: 32px; height: 32px; padding: 0 6px; border-radius: 8px; border: 1px solid var(--admin-border); display: inline-flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600; color: var(--pk-ink); }
.admin-pagination-links a.is-current, .admin-pagination-links span.is-current { background: var(--pk-primary); border-color: var(--pk-primary); color: #fff; }

/* ===== Forms ===== */
.admin-field { margin-bottom: 13px; }
.admin-field-label { font-size: 13.5px; font-weight: 600; margin-bottom: 5px; color: var(--pk-ink); display: block; }
.admin-field-hint { font-size: 12px; color: var(--pk-muted); margin-top: 5px; }
.admin-field-error { font-size: 12.5px; color: #dc2626; margin-top: 5px; }
.admin-input, .admin-select, .admin-textarea {
	width: 100%; padding: 9px 12px; border: 1px solid var(--admin-border); border-radius: var(--radius-sm);
	font-size: 14px; color: var(--pk-ink); background: #fff; font-family: inherit;
}
.admin-input:focus, .admin-select:focus, .admin-textarea:focus { outline: none; border-color: var(--pk-primary); }
.admin-textarea { resize: vertical; }
.admin-radio-card { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border: 1px solid var(--admin-border); border-radius: var(--radius-sm); font-size: 13.5px; font-weight: 600; color: var(--pk-muted); cursor: pointer; }
.admin-radio-card.is-selected { border-color: var(--pk-primary); background: var(--pk-primary-light); color: var(--pk-primary); }

/* Preview icon Bootstrap Icons cạnh <select> — xem resources/views/admin/categories/form.php.
   Kích thước 44x44 khớp chiều cao .admin-input/.admin-select (padding 10px + font 14px + border). */
.admin-icon-preview {
	width: 44px; height: 44px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center;
	border: 1px solid var(--admin-border); border-radius: var(--radius-sm); background: var(--pk-primary-light); color: var(--pk-primary); font-size: 20px;
}
.admin-dropzone { border: 1.5px dashed #cbd5e1; border-radius: var(--radius-md); background: var(--admin-bg); padding: 18px 14px; display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; }
.admin-dropzone-icon { width: 52px; height: 52px; border-radius: 50%; background: #fff; border: 1px solid var(--admin-border); display: flex; align-items: center; justify-content: center; color: var(--pk-primary); }
.admin-dropzone.is-dragover { border-color: var(--pk-primary); background: var(--pk-primary-light); }
/* Xem trước thẻ PremiumKey ở form mẫu thẻ (admin/card_templates/form.php) — tỉ lệ thẻ ngân hàng. */
.ct-form .admin-field { margin-bottom: 12px; }
.ct-form .admin-field-label { margin-bottom: 5px; }
.ct-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 12px; }
.ct-section { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin: 6px 0 10px; padding-top: 12px; border-top: 1px solid var(--admin-border); font-size: 13.5px; font-weight: 700; }
.ct-sample { font-size: 12px; font-weight: 400; color: var(--pk-muted); }
.ct-design { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.ct-locale { border: 1px solid var(--admin-border); border-radius: 10px; padding: 10px 12px; margin-bottom: 10px; }
.ct-locale summary { cursor: pointer; font-weight: 600; font-size: 13.5px; }
.ct-locale summary small { font-weight: 400; color: var(--pk-muted); margin-left: 6px; }
@media (max-width: 1100px) { .ct-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 640px) { .ct-design { grid-template-columns: 1fr; } }
.admin-card-preview {
	position: relative; aspect-ratio: 1.586; max-width: 340px; border-radius: 14px; padding: 16px 18px; color: #fff; overflow: hidden;
	display: flex; flex-direction: column; justify-content: space-between;
	background-color: var(--card-theme, #4f46e5);
	background-image: linear-gradient(135deg, var(--card-theme, #4f46e5) 0%, color-mix(in srgb, var(--card-theme, #4f46e5) 65%, #000) 100%);
	background-size: cover; background-position: center; box-shadow: 0 10px 24px rgba(0, 0, 0, .18);
}
.admin-card-preview.has-image::before { content: ''; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,.35) 0%, rgba(0,0,0,0) 45%, rgba(0,0,0,.45) 100%); }
.admin-card-preview > * { position: relative; }
.admin-card-preview-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; font-weight: 700; font-size: 14px; }
.admin-card-preview-badge { flex-shrink: 0; font-size: 10.5px; padding: 2px 8px; border-radius: 99px; background: rgba(255,255,255,.25); }
.admin-card-preview-amount { font-size: 26px; font-weight: 800; }
.admin-card-preview-code { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 13px; letter-spacing: 1px; opacity: .9; }

/* ===== Flash / alert ===== */
.admin-alert { padding: 11px 16px; border-radius: var(--radius-sm); font-size: 13.5px; font-weight: 600; display: flex; align-items: center; gap: 10px; }
.admin-alert-success { background: var(--admin-success-light); color: var(--admin-success); }
.admin-alert-error { background: #fef2f2; color: #b91c1c; }

/* ===== Dashboard stat tiles ===== */
.admin-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
/* Icon bên trái, số liệu + nhãn bên phải cùng hàng; dòng % thay đổi/caption trải hết chiều ngang bên dưới */
.admin-stat-card { padding: 16px; display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; column-gap: 14px; row-gap: 12px; }
.admin-stat-card > .admin-stat-change, .admin-stat-card > .admin-stat-caption { grid-column: 1 / -1; }
.admin-stat-icon { width: 44px; height: 44px; border-radius: 12px; display: flex; align-items: center; justify-content: center; }
.admin-stat-value { font-size: 26px; font-weight: 800; line-height: 1; }
.admin-stat-label { font-size: 13px; color: var(--pk-muted); margin-top: 6px; }
.admin-stat-change { display: flex; align-items: center; gap: 4px; font-size: 12.5px; font-weight: 700; }
.admin-stat-change.is-up { color: var(--admin-success); }
.admin-stat-change.is-down { color: var(--pk-primary); }
.admin-stat-caption { font-size: 12.5px; color: var(--pk-muted); font-weight: 600; }

.admin-dashboard-lower { display: grid; grid-template-columns: 1.65fr 1fr; gap: 16px; align-items: start; }
.admin-split-layout { display: grid; grid-template-columns: 1fr 1.65fr; gap: 16px; align-items: start; }
.admin-table tr.is-active td { background: var(--pk-primary-light); }
.admin-panel-heading { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px 12px 20px; }
.admin-panel-heading h2 { font-size: 15.5px; font-weight: 700; margin: 0; }
.admin-rank-list { display: flex; flex-direction: column; gap: 10px; padding: 0 20px 16px 20px; }
.admin-rank-item { display: flex; align-items: center; gap: 12px; }
.admin-rank-badge { width: 30px; height: 30px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 800; flex: none; }
.admin-rank-name { font-size: 13.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-rank-meta { font-size: 12px; color: var(--pk-muted); }

@media (max-width: 992px) {
	.admin-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.admin-dashboard-lower, .admin-split-layout { grid-template-columns: 1fr; }
}

/* ===== Sidebar off-canvas trên mobile ===== */
@media (max-width: 860px) {
	.admin-topbar-menu-btn { display: inline-flex; }

	.admin-sidebar {
		position: fixed; top: 0; left: 0; height: 100vh; z-index: 1000;
		transform: translateX(-100%); transition: transform .25s ease;
	}
	.admin-sidebar.is-open { transform: translateX(0); box-shadow: 0 0 32px rgba(0,0,0,.25); }

	.admin-sidebar-backdrop {
		display: block; position: fixed; inset: 0; background: rgba(20,15,13,.45); z-index: 999;
		opacity: 0; visibility: hidden; transition: opacity .2s ease, visibility .2s ease;
	}
	.admin-sidebar-backdrop.is-visible { opacity: 1; visibility: visible; }

	.admin-topbar { padding: 0 16px; }
	.admin-content { padding: 16px 14px; }

	/* Chỉ giữ icon (nút "Xem Site" thu về icon-only, khối user chỉ còn avatar)
	   — đủ chỗ tiêu đề trang không bị đẩy xuống dòng ở màn hình hẹp. */
	.admin-topbar-btn-label,
	.admin-topbar-user-name { display: none; }
	.admin-topbar .admin-btn.admin-btn-outline { padding: 8px; }
}

/* ===== Login (layouts/admin-guest.php) ===== */
.admin-guest-shell { min-height: 100vh; display: flex; }
.admin-guest-visual {
	width: 56%; position: relative; overflow: hidden; display: flex; flex-direction: column; justify-content: space-between;
	padding: 56px 64px; background: linear-gradient(135deg, var(--pk-primary) 0%, var(--pk-primary-dark) 100%); color: #fff;
}
.admin-guest-visual .blob { position: absolute; border-radius: 50%; background: rgba(255,255,255,.06); }
.admin-guest-form { width: 44%; display: flex; align-items: center; justify-content: center; background: #fff; padding: 32px; }
.admin-guest-form-inner { width: 100%; max-width: 380px; }
/* Ô nhập mã 6 số 2FA (đăng nhập + Tài khoản của tôi). */
.admin-otp-input { text-align: center; font-size: 22px; letter-spacing: .3em; font-weight: 600; }

@media (max-width: 860px) {
	.admin-guest-shell { flex-direction: column; }
	.admin-guest-visual, .admin-guest-form { width: 100%; }
	.admin-guest-visual { padding: 32px; }
}

/* ===== Menu điều hướng — cây kéo thả (resources/views/admin/menus/index.php, admin-menu-form.js) ===== */
.menu-tree, .menu-tree-children { list-style: none; margin: 0; padding: 0; }
.menu-tree-children { margin-top: 4px; padding-left: 26px; min-height: 6px; }
.menu-tree-item { margin-bottom: 4px; }
.menu-tree-row {
	display: flex; align-items: center; gap: 10px; background: #fff; border: 1px solid var(--admin-border);
	border-radius: var(--radius-sm); padding: 9px 12px;
}
.menu-tree-handle { cursor: grab; color: var(--pk-muted); flex-shrink: 0; display: flex; }
.menu-tree-handle:active { cursor: grabbing; }
.menu-tree-label { font-weight: 600; font-size: 13.5px; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.menu-tree-locales { display: flex; gap: 3px; flex-shrink: 0; }
.menu-tree-type { font-size: 11px; padding: 1px 8px; }
.menu-tree-broken { color: var(--pk-primary); font-size: 12px; font-weight: 600; }
.menu-tree-actions { display: flex; gap: 4px; flex-shrink: 0; }
.menu-tree-ghost { opacity: .4; }
.menu-tree-drag { box-shadow: 0 4px 14px rgba(43,35,32,.12); }
.menu-item-edit-form { display: none; margin-top: 8px; padding: 12px; border: 1px solid var(--admin-border); border-radius: var(--radius-sm); background: var(--admin-bg); }
.menu-item-edit-form.is-open { display: block; }
.menu-picker-tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--admin-border); margin-bottom: 12px; }
.menu-picker-tabs .admin-tab { flex: 1; text-align: center; padding: 7px 4px; font-size: 12.5px; }
.menu-picker-list { max-height: 260px; overflow-y: auto; border: 1px solid var(--admin-border); border-radius: var(--radius-sm); margin-bottom: 10px; }
.menu-picker-list label { display: flex; align-items: center; gap: 8px; padding: 8px 12px; font-size: 13.5px; border-bottom: 1px solid var(--admin-border); cursor: pointer; }
.menu-picker-list label:last-child { border-bottom: 0; }
.menu-picker-list label:hover { background: var(--admin-bg); }

/* ===== Kết quả "Test kết nối" (resources/views/admin/settings/index.php, admin-settings-form.js) ===== */
.admin-test-result-ok { color: var(--admin-success); font-size: 13.5px; font-weight: 600; }
.admin-test-result-fail { color: var(--pk-primary); font-size: 13.5px; font-weight: 600; }

/* ===== Ô nhập theo locale xếp 2 cột (tab Thanh thông báo/Trang chủ/Footer ở resources/views/admin/settings/index.php) ===== */
.admin-locale-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 16px; }
.admin-locale-row { display: flex; gap: 6px; align-items: center; min-width: 0; }
.admin-locale-row:has(textarea) { align-items: flex-start; }
.admin-locale-row:has(textarea) .admin-locale-code { padding-top: 10px; }
.admin-locale-code { width: 28px; flex-shrink: 0; font-weight: 600; text-transform: uppercase; font-size: 12px; }
@media (max-width: 860px) {
	.admin-locale-grid { grid-template-columns: 1fr; }
}

/* Xem trước email — resources/views/admin/mail_queue/show.php */
.mail-preview-meta { display: grid; grid-template-columns: max-content 1fr; gap: 8px 20px; margin: 0; font-size: 14px; }
.mail-preview-meta dt { color: var(--pk-muted); font-weight: 600; }
.mail-preview-meta dd { margin: 0; word-break: break-word; }
.mail-preview-toolbar { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px; padding: 14px 20px; border-bottom: 1px solid var(--admin-border); }
.mail-preview-switch { display: flex; gap: 6px; }
.mail-preview-switch .admin-btn.is-active { border-color: var(--pk-ink); background: var(--pk-ink); color: #fff; }
.mail-preview-stage { padding: 20px; background: #f1eee9; border-radius: 0 0 var(--radius-lg) var(--radius-lg); overflow-x: auto; }
.mail-preview-frame { display: block; width: 100%; height: 80vh; margin: 0 auto; border: 1px solid var(--admin-border); border-radius: 8px; background: #fff; transition: width .2s ease; }

/* Modal dùng <dialog> gốc của trình duyệt (showModal) — hiện dùng cho xem email ở hàng đợi. */
.admin-dialog { width: min(960px, calc(100vw - 32px)); max-height: calc(100vh - 32px); padding: 0; border: 0; border-radius: var(--radius-lg); box-shadow: 0 20px 60px rgba(43,35,32,.25); overflow: hidden; }
.admin-dialog[open] { display: flex; flex-direction: column; }
.admin-dialog::backdrop { background: rgba(43,35,32,.45); }
.admin-dialog-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 20px; border-bottom: 1px solid var(--admin-border); }
.admin-dialog-title { margin: 0; font-size: 16px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.admin-dialog-body { padding: 20px; overflow-y: auto; background: #faf8f5; }
.admin-dialog-message { margin: 40px 0; text-align: center; color: var(--pk-muted); }
.admin-dialog .mail-preview-frame { height: 60vh; }

/* Hộp thư đến — xem resources/views/admin/inbox/ */
.inbox-row-new td { font-weight: 600; }
.inbox-row-new td:first-child { box-shadow: inset 3px 0 0 var(--pk-primary); }
.inbox-body-text { margin: 0; padding: 20px; white-space: pre-wrap; word-break: break-word; font: inherit; font-size: 14px; line-height: 1.6; }
.inbox-attachments { display: flex; flex-wrap: wrap; gap: 8px; }
.inbox-reply { padding: 16px 20px; border-top: 1px solid var(--admin-border); }
.inbox-reply:first-child { border-top: 0; }
.inbox-reply-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 8px; color: var(--pk-muted); font-size: 13px; }
.inbox-reply-body { margin: 0; white-space: pre-wrap; word-break: break-word; font: inherit; font-size: 14px; line-height: 1.6; }
.inbox-reply-form textarea { min-height: 180px; resize: vertical; }

/* ===== Đơn hàng: trạng thái chỉ đọc + nhật ký + thao tác có kiểm soát =====
   Xem resources/views/admin/orders/index.php, App\Models\OrderLog. */
.admin-order-log { margin-top: 6px; font-size: 12px; }
.admin-order-log > summary { cursor: pointer; color: var(--pk-muted); list-style: none; }
.admin-order-log > summary::-webkit-details-marker { display: none; }
.admin-order-log > summary::before { content: '▸ '; }
.admin-order-log[open] > summary::before { content: '▾ '; }
.admin-order-log > summary:hover { color: var(--pk-ink); }
.admin-order-log ol { margin: 6px 0 0; padding: 0 0 0 10px; min-width: 220px; list-style: none; border-left: 2px solid var(--admin-border); }
.admin-order-log li { padding: 4px 0; }
.admin-order-log li + li { border-top: 1px dashed var(--admin-border); }
.admin-order-log-head { display: flex; justify-content: space-between; gap: 8px; }
.admin-order-log-head span { color: var(--pk-muted); white-space: nowrap; }
.admin-order-log-by { color: var(--pk-muted); }
.admin-order-log-note { margin-top: 2px; color: var(--pk-ink); overflow-wrap: anywhere; font-style: italic; }

.admin-order-actions { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }
.admin-order-action > summary { list-style: none; white-space: nowrap; }
.admin-order-action > summary::-webkit-details-marker { display: none; }
.admin-order-action[open] > summary { opacity: 0.6; }
.admin-order-action-panel {
	display: flex;
	flex-direction: column;
	gap: 6px;
	width: 260px;
	margin-top: 6px;
	padding: 10px;
	border: 1px solid var(--admin-border);
	border-radius: 10px;
	background: #fffdfa;
	text-align: left;
}
.admin-order-action-panel label { font-size: 12px; font-weight: 600; }
.admin-order-action-panel textarea { width: 100%; padding: 6px 8px; border: 1px solid var(--admin-border); border-radius: 8px; font: inherit; font-size: 12.5px; resize: vertical; }
.admin-order-action-panel textarea:focus { outline: none; border-color: var(--pk-primary); }
.admin-order-action-warn { margin: 0; padding: 6px 8px; border-radius: 8px; background: var(--pk-accent-light); color: #8a5a00; font-size: 11.5px; line-height: 1.4; }
.admin-order-action-panel .admin-btn { align-self: flex-end; }
.admin-order-locked { display: inline-flex; color: #c9bfb5; }


/* ==========================================================================
   PremiumKey — catalogue / kho key
   ========================================================================== */
.admin-alert-warning { background: #fffbeb; color: #92400e; }
.pk-admin-supplier { display: flex; align-items: center; gap: 10px; }
.pk-admin-logo { width: 38px; height: 38px; border-radius: 10px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center;
	background: var(--logo-color, var(--pk-primary)); color: #fff; font-weight: 800; font-size: 13px; letter-spacing: .02em; overflow: hidden; }
.pk-admin-logo img { width: 100%; height: 100%; object-fit: contain; background: #fff; }
.pk-admin-logo.is-sm { width: 26px; height: 26px; border-radius: 7px; font-size: 10px; }
.pk-group-row td { background: #f8fafc; padding-top: 10px !important; padding-bottom: 10px !important; }
.pk-key-mask { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; background: #f1f5f9; padding: 2px 6px; border-radius: 6px; color: var(--pk-ink); word-break: break-all; }
.pk-keys-input { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; }
.pk-reveal { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }

/* Dòng sản phẩm trong form gói — lưới 11 ô + cụm nút, nhãn trong từng ô (gọn hơn bảng). */
.pk-product-rows { display: flex; flex-direction: column; gap: 8px; }
.pk-product-row { display: grid; grid-template-columns: 0.9fr 0.9fr 0.9fr 1.1fr 0.9fr 0.9fr 1fr 1.2fr 0.8fr 0.7fr 0.6fr auto; gap: 8px; align-items: end;
	padding: 10px; border: 1px solid var(--admin-border); border-radius: var(--radius-md); background: #fff; }
.pk-product-row.has-error { border-color: #fca5a5; background: #fff7f7; }
.pk-pr-cell label { display: block; font-size: 11px; font-weight: 600; color: var(--pk-muted); text-transform: uppercase; letter-spacing: .03em; margin-bottom: 4px; white-space: nowrap; }
.pk-pr-cell .admin-input, .pk-pr-cell .admin-select { padding: 8px 10px; font-size: 13px; }
.pk-pr-actions { display: flex; align-items: center; gap: 4px; }
.pk-pr-actions .admin-icon-btn { width: 32px; height: 32px; }
.pk-pr-stock { font-size: 12px; font-weight: 700; color: var(--admin-success); white-space: nowrap; padding: 0 6px; }
.pk-pr-stock.is-empty { color: #b91c1c; }
@media (max-width: 1400px) {
	.pk-product-row { grid-template-columns: repeat(6, minmax(0, 1fr)); }
	.pk-pr-actions { grid-column: 1 / -1; justify-content: flex-end; }
}
@media (max-width: 640px) { .pk-product-row { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.pk-balance-adjust { margin-top: 4px; }
.pk-balance-adjust summary { font-size: 11.5px; color: var(--pk-primary); cursor: pointer; }
.pk-balance-adjust form { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; min-width: 200px; }
.pk-balance-adjust .admin-input { padding: 6px 8px; font-size: 12.5px; }
