:root {
    /*品牌配色*/
    --brand-navy: #1E3A5F;
    --brand-navy-hover: #2c4e7a;
    --brand-blue: #1A56DB;
    --brand-blue-hover: #1e4bb1;
    --brand-green: #10B981;
    --brand-green-hover: #059669;
    --brand-amber: #F59E0B;
    --page-bg: #F3F4F6;

    /*覆盖 Bootstrap 根级主题色变量,影响 .text-primary/.bg-primary/表单焦点框等直接引用这些变量的样式;
      注意 .btn-primary/.btn-success/.btn-danger 等按钮组件的颜色是编译时写死到组件级变量(--bs-btn-bg等)里的,
      不会跟随这里的根变量变化,需要在下面单独覆盖每个按钮class*/
    --bs-primary: var(--brand-blue);
    --bs-primary-rgb: 26, 86, 219;
    --bs-success: var(--brand-green);
    --bs-success-rgb: 16, 185, 129;
    --bs-danger: #EF4444;
    --bs-danger-rgb: 239, 68, 68;
}

body {
    background-color: var(--page-bg) !important;
}

/* ================= 按钮品牌配色(覆盖组件级变量) ================= */

.btn-primary {
    --bs-btn-bg: var(--brand-blue);
    --bs-btn-border-color: var(--brand-blue);
    --bs-btn-hover-bg: var(--brand-blue-hover);
    --bs-btn-hover-border-color: var(--brand-blue-hover);
    --bs-btn-active-bg: var(--brand-blue-hover);
    --bs-btn-active-border-color: var(--brand-blue-hover);
    --bs-btn-disabled-bg: var(--brand-blue);
    --bs-btn-disabled-border-color: var(--brand-blue);
}

.btn-outline-primary {
    --bs-btn-color: var(--brand-blue);
    --bs-btn-border-color: var(--brand-blue);
    --bs-btn-hover-bg: var(--brand-blue);
    --bs-btn-hover-border-color: var(--brand-blue);
    --bs-btn-active-bg: var(--brand-blue);
    --bs-btn-active-border-color: var(--brand-blue);
}

.btn-success {
    --bs-btn-bg: var(--brand-green);
    --bs-btn-border-color: var(--brand-green);
    --bs-btn-hover-bg: var(--brand-green-hover);
    --bs-btn-hover-border-color: var(--brand-green-hover);
    --bs-btn-active-bg: var(--brand-green-hover);
    --bs-btn-active-border-color: var(--brand-green-hover);
}

.btn-danger {
    --bs-btn-bg: #EF4444;
    --bs-btn-border-color: #EF4444;
    --bs-btn-hover-bg: #dc2626;
    --bs-btn-hover-border-color: #dc2626;
    --bs-btn-active-bg: #dc2626;
    --bs-btn-active-border-color: #dc2626;
}

/*表单控件focus态边框/阴影颜色,原Bootstrap文件里是写死的旧主题色,这里覆盖成品牌蓝*/
.form-control:focus,
.form-select:focus {
    border-color: var(--brand-blue);
    box-shadow: 0 0 0 .25rem rgba(26, 86, 219, .25);
}

.no-scrollbar::-webkit-scrollbar {
    display: none;
}

/*内容标题栏(页面标题 + 操作按钮)*/
.bg-content-bar {
    background-color: #fff;
}

/*内容卡片背景色;flex-grow让卡片在内容较少时也能撑满页面剩余高度,内容较多时按内容自然撑开*/
.bg-content {
    background-color: #fff;
    border: 1px solid #eef0f2;
    flex: 1 0 auto;
}

/* ================= 顶部Header + 左侧Sidebar 整体布局 =================
   header/sidebar 用 fixed 定位脱离文档流,body 用 padding 让出对应空间,
   这样页面自身的多个顶层div(标题栏、内容卡片)仍然是普通文档流,自然依次纵向排列,
   不能用 CSS Grid 命名区域给多个独立子元素共享同一区域——那样会互相层叠而不是纵向排列。
   body 设为纵向flex容器,让 .bg-content 能用 flex-grow 撑满剩余高度;
   header/sidebar 是 fixed 定位,脱离文档流,不受此影响,不会被拉进flex布局里。 */

body.app-body {
    padding-top: 64px;
    padding-left: 256px;
    min-height: 100vh;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
}

.app-header {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: 64px;
    z-index: 1030;
    background-color: #336AD9;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .08);
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 1.5rem;
}

.app-header .brand {
    color: #fff;
    font-weight: 700;
    font-size: 1.15rem;
}

.app-header #loginName {
    color: #fff;
}

.app-header .btn-link {
    color: #fff;
}

.app-header .btn-link:hover {
    color: #fff;
}

.app-sidebar {
    position: fixed;
    top: 64px;
    left: 0;
    bottom: 0;
    width: 256px;
    overflow-y: auto;
    background-color: #001425;
    display: flex;
    flex-direction: column;
    padding: 1rem 0;
    z-index: 1020;
}

.app-sidebar .nav-link {
    display: flex;
    align-items: center;
    gap: .75rem;
    padding: .75rem 1.5rem;
    color: #cbd5e1;
    border-left: 4px solid transparent;
    transition: background-color .15s, color .15s;
    cursor: pointer;
}

.app-sidebar .nav-link:hover {
    background-color: var(--brand-navy-hover);
    color: #fff;
}

.app-sidebar .nav-link.active {
    background-color: var(--brand-blue);
    color: #fff;
    border-left-color: var(--brand-amber);
}

/* ================= 状态徽章 ================= */

.status-badge {
    display: inline-flex;
    align-items: center;
    gap: .3rem;
    padding: .25rem .6rem;
    border-radius: .25rem;
    font-size: .75rem;
    font-weight: 500;
    white-space: nowrap;
}

.status-badge-gray {
    background-color: #f3f4f6;
    color: #4b5563;
}

.status-badge-blue {
    background-color: #dbeafe;
    color: #1d4ed8;
}

.status-badge-green {
    background-color: #d1fae5;
    color: #047857;
}

.status-badge-amber {
    background-color: #fef3c7;
    color: #b45309;
}

.status-badge-red {
    background-color: #fee2e2;
    color: #b91c1c;
}

@keyframes ajax-mask-animation {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

.ajax-mask {
    position: fixed;
    width: 100vw;
    height: 100vh;
    top: 0;
    left: 0;
    background-color: #00000055;
    z-index: 9999999;
    text-align: center;
    padding-top: calc(50vh - 60px);
}

.ajax-mask-animation {
    animation: ajax-mask-animation 5s linear infinite;
    width: 100px;
    height: 100px;
    border: 4px dashed white;
    border-radius: 50%;
    display: inline-block;
}

/*jquery.datatable的背景色禁用*/
.table > :not(caption) > * > * {
    background-color: unset;
}
