/* Lớp phủ nhỏ trên nền Tabler (lib/tabler). Layout/sidebar/topbar do Tabler đảm nhiệm. */
*{-webkit-tap-highlight-color:transparent}
a,button,.btn,.form-check-input,.nav-link{touch-action:manipulation}
.skip{position:absolute;left:-999px;top:0;background:#fff;padding:.5rem 1rem;z-index:2000}.skip:focus{left:.5rem;top:.5rem}
/* Sidebar: nhóm menu + mục "sắp có" */
.navbar-vertical .nav-group{color:#9fb0c5;font-size:.7rem;letter-spacing:.08em;padding:1rem 1.25rem .35rem;text-transform:uppercase}
.navbar-vertical .nav-link.disabled{display:flex;align-items:center;opacity:.55}
.navbar-vertical .nav-link-icon .bi{font-size:1.1rem}
.form-control,.form-select{font-size:1rem}/* >=16px: iOS không tự zoom khi focus */
h1,h2,h3,h4,h5{text-wrap:balance}
.num{font-variant-numeric:tabular-nums}
.page-head{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:space-between;align-items:center;margin-bottom:1rem}
.page-head h1{font-size:1.4rem;margin:0}
.tabs-scroll{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:thin}
.tabs-scroll .nav-link{display:flex;align-items:center}
/* Bảng -> thẻ trên mobile */
@media(max-width:767.98px){
 table.stack thead{display:none}
 table.stack,table.stack tbody,table.stack tr,table.stack td{display:block;width:100%}
 table.stack tr{background:var(--tblr-bg-surface,#fff);border:1px solid var(--tblr-border-color,#e3e7ec);border-radius:.6rem;margin-bottom:.75rem;padding:.5rem .75rem}
 table.stack td{border:0;padding:.35rem 0;display:flex;justify-content:space-between;gap:1rem;text-align:right}
 table.stack td::before{content:attr(data-label);color:var(--tblr-secondary,#6c7a89);font-size:.8rem;text-align:left;flex:0 0 38%}
 table.stack td.actions{justify-content:flex-end;flex-wrap:wrap;gap:.4rem;border-top:1px solid var(--tblr-border-color,#eef0f3);margin-top:.25rem;padding-top:.6rem}
 table.stack td.actions::before{display:none}
 table.stack.table>:not(caption)>*>*{background:transparent;box-shadow:none}
}
/* Ma trận quyền: cuộn ngang, cột đầu dính */
.perm-wrap{overflow-x:auto;overscroll-behavior-x:contain}
.perm-table{min-width:640px}
.perm-table th,.perm-table td{text-align:center;vertical-align:middle;white-space:nowrap}
.perm-table th:first-child,.perm-table td:first-child{text-align:left;position:sticky;left:0;background:var(--tblr-bg-surface,#fff);z-index:1;min-width:150px}
.perm-table tr.parent td{background:var(--tblr-bg-surface-secondary,#f1f4f8);font-weight:600}
.perm-table td.child-name{padding-left:1.5rem}
.savebar{position:sticky;bottom:0;background:var(--tblr-bg-surface,#fff);border-top:1px solid var(--tblr-border-color,#e3e7ec);padding:.75rem 1rem calc(.75rem + env(safe-area-inset-bottom));margin:1rem -1rem -1rem;display:flex;gap:.5rem;justify-content:flex-end;z-index:5}
.modal{overscroll-behavior:contain}
.stat i{font-size:1.8rem;opacity:.25}
.login-wrap{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#182433,#2f4666);padding:1rem}
.login-card{width:100%;max-width:400px;border-radius:.8rem}
.pw-box{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:1.25rem;letter-spacing:.04em;user-select:all;word-break:break-all}
.menu-row{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:space-between;align-items:center}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* Màu riêng site khoacuachinhhang: tím */
:root{--tblr-primary:#AE3EC9;--tblr-primary-rgb:174,62,201;--tblr-link-color:#AE3EC9;--tblr-link-color-rgb:174,62,201}
.login-wrap{background:linear-gradient(135deg,#4a1a57,#AE3EC9)}

/* Ảnh thu nhỏ trong danh sách (SP, tin, banner/link): khung cố định 56px, cover, bo góc, placeholder khi thiếu file */
.thumb-box{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;flex:0 0 56px;border-radius:.45rem;overflow:hidden;border:1px solid var(--tblr-border-color,#dee2e6);vertical-align:middle;
 background:#eef0f4 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239aa3af' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='16' rx='2'/%3E%3Ccircle cx='9' cy='10' r='1.6'/%3E%3Cpath d='M21 16l-5-5-8 8'/%3E%3C/svg%3E") center/46% no-repeat}
.thumb-box a{display:block;width:100%;height:100%}
.thumb-box img.thumb{width:100%;height:100%;object-fit:cover;display:block}
.thumb-box img.thumb.thumb-broken{visibility:hidden}
.col-img{width:76px}
@media(max-width:767.98px){table.stack td.col-img{justify-content:flex-start}table.stack td.col-img::before{flex:0 0 38%}}
/* Form đang gửi (KsOnce): con trỏ chờ, nút gửi mờ */
form[aria-busy="true"]{cursor:progress}
form[aria-busy="true"] .btn:disabled{opacity:.75}
/* Toàn chiều rộng: nội dung admin không bị giới hạn max-width */
#content.container-fluid{max-width:none}
/* Bảng danh sách rộng: cuộn ngang thay vì ép cột */
.table-responsive{overflow-x:auto}
.badge.bg-purple-lt{background:rgba(174,62,201,.14);color:#8d2ba8}

/* Nút chọn file: ô file trong suốt phủ đúng lên nút, bấm là mở hộp chọn file (không cần script gọi click()) */
.kc-filewrap{position:relative;display:inline-block;vertical-align:middle}
.kc-filecover{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:0;z-index:2}
.kc-filecover:disabled{pointer-events:none}

/* Thông báo nổi trên mọi popup */
.ks-toasts{position:fixed;top:.75rem;right:.75rem;z-index:2100;display:flex;flex-direction:column;gap:.5rem;max-width:min(26rem,calc(100vw - 1.5rem))}
.ks-toasts .alert{margin:0;box-shadow:0 .5rem 1.25rem rgba(0,0,0,.18)}
.is-uploading{pointer-events:none;opacity:.75}
