/* 盛航租车管理系统 - 全局样式 */
/* C5：A4 打印版式仅在打印时加载（等效于 index.html 引入 <link media="print">，免改公共锚点） */
@import url('./print.css') print;
:root {
    --primary: #FF7C00;
    --primary-hover: #E56E00;
    --primary-light: #FFF0E0;
    --success: #057a55;
    --success-light: #def7ec;
    --warning: #d97706;
    --warning-light: #fef3c7;
    --danger: #e02424;
    --danger-light: #fde8e8;
    /* 财务专用语义色（收入红/支出绿，与操作危险色、成功色区分，不混用） */
    --fin-income: #dc2626;
    --fin-expense: #16a34a;
    /* 单一信息蓝：中性数据指标/状态/链接（区别于品牌主色橙，不再散落多种蓝） */
    --info: #2563eb;
    --info-light: #eff6ff;
    --info-border: #bfdbfe;
    --gray-50: #f9fafb;
    --gray-100: #f3f4f6;
    --gray-200: #e5e7eb;
    --gray-300: #d1d5db;
    --gray-400: #9ca3af;
    --gray-500: #6b7280;
    --gray-600: #4b5563;
    --gray-700: #374151;
    --gray-800: #1f2937;
    --gray-900: #111827;
    --sidebar-width: 240px;
    --sidebar-collapsed-width: 68px;
    --header-height: 52px;
    --radius: 8px;
    --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
    --shadow: 0 1px 3px rgba(0,0,0,0.1), 0 1px 2px rgba(0,0,0,0.06);
    --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06);

    /* W11 字号令牌（16号工单）- 全站统一引用，不再散落裸px */
    --fs-2xs: 0.6875rem;   /* 11px 角标/辅助 */
    --fs-xs: 0.75rem;      /* 12px 密集表格 */
    --fs-sm: 0.8125rem;    /* 13px 表格与辅助文字 */
    --fs-base: 0.875rem;   /* 14px PC正文基准 */
    --fs-md: 0.9375rem;    /* 15px 卡片标题 */
    --fs-lg: 1.0625rem;    /* 17px 弹窗标题 */
    --fs-xl: 1.25rem;      /* 20px 页面标题 */
    --fs-2xl: 1.5rem;      /* 24px 统计数值 */
    --fs-3xl: 1.75rem;     /* 28px 大屏数字 */

    /* 断点令牌（全站唯一约定，2026-09-13 归并；纯 CSS @media 无法引用变量，此处仅作权威登记，写媒体查询时按下表取字面量） */
    --bp-xl: 1280px;   /* 桌面紧凑：窄于宽屏桌面即收敛多列/抽屉化（吸收旧 1200/1080） */
    --bp-lg: 899px;    /* 平板主档：与 min-width:900px 互补，PC→单手布局分界、侧栏抽屉 */
    --bp-md: 768px;    /* 小平板 / 大手机 */
    --bp-sm: 640px;    /* 手机竖屏（吸收旧 600） */
    --bp-xs: 480px;    /* 超窄屏（吸收旧 420/380） */
}

/* W11 根字号锚点（16号工单）- clamp平滑自适应，跨宽度连续不跳 */
html {
    font-size: clamp(15px, 14.5px + 0.12vw, 16.5px);
    -webkit-text-size-adjust: 100%;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

/* 全局按钮重置 - 确保所有按钮使用统一样式 */
button, input[type="button"], input[type="submit"], input[type="reset"] {
    font-family: inherit;
    font-size: 14px;
    line-height: 1.5;
    border: 1px solid var(--gray-300);
    border-radius: var(--radius);
    background: var(--gray-100);
    color: var(--gray-700);
    padding: 8px 16px;
    cursor: pointer;
    transition: all 0.2s;
    height: 36px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
}
button:hover, input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover {
    background: var(--gray-200);
}
button.btn, input[type="button"].btn, input[type="submit"].btn, input[type="reset"].btn {
    /* 使用 .btn 类时覆盖默认样式 */
}

body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    font-size: 14px;
    color: var(--gray-800);
    background: var(--gray-100);
    line-height: 1.5;
}

/* ===== 登录页 ===== */
.login-page {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, #0B2A6B 0%, #1a3a7a 50%, #FF7C00 100%);
    position: fixed;
    inset: 0;
    overflow: auto;
    padding: 20px;
}
.login-card {
    background: #fff;
    border-radius: 12px;
    padding: 40px;
    width: 400px;
    max-width: calc(100vw - 40px);
    box-shadow: 0 20px 60px rgba(0,0,0,0.15);
    margin: 0;
}
.login-card button[type="submit"],
.login-card .btn-primary {
    width: 100%;
}
.login-card h1 {
    font-size: 18px;
    font-weight: 700;
    text-align: center;
    margin-bottom: 24px;
    color: var(--gray-900);
    line-height: 1.4;
}
.login-logo-wrap {
    text-align: center;
    margin-bottom: 16px;
}
.login-logo-wrap img {
    border-radius: 8px;
}
.login-tagline {
    text-align: center;
    color: var(--gray-400);
    font-size: 12px;
    margin-top: 20px;
    letter-spacing: 1px;
}
.form-group {
    margin-bottom: 20px;
}
.form-group label {
    display: block;
    font-size: 13px;
    font-weight: 500;
    color: var(--gray-700);
    margin-bottom: 6px;
}
.form-input {
    width: 100%;
    padding: 10px 14px;
    border: 1px solid var(--gray-300);
    border-radius: var(--radius);
    font-size: 14px;
    transition: border-color 0.2s, box-shadow 0.2s;
    outline: none;
}
.form-input:focus {
    border-color: var(--primary);
    box-shadow: 0 0 0 3px rgba(255, 124, 0, 0.1);
}
/* 通用表单控件：与 .form-input 视觉一致，供证件中心筛选条、隐患整改等使用 class="form-control" 的下拉/输入框/文本域，避免回退成浏览器原生灰框 */
.form-control {
    width: 100%;
    padding: 10px 14px;
    border: 1px solid var(--gray-300);
    border-radius: var(--radius);
    font-size: 14px;
    background: #fff;
    box-sizing: border-box;
    transition: border-color 0.2s, box-shadow 0.2s;
    outline: none;
}
.form-control:focus {
    border-color: var(--primary);
    box-shadow: 0 0 0 3px rgba(255, 124, 0, 0.1);
}
select.form-control { cursor: pointer; }
textarea.form-control { resize: vertical; line-height: 1.5; }

/* 表单网格布局 - 6轨响应式（一行最多6个字段，参考旧系统密集表单） */
.form-grid {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 14px 16px;
}
.form-grid > .form-group { grid-column: span 1; min-width: 0; }
.form-grid > .span-2, .form-grid .field-span-2 { grid-column: span 2; }
.form-grid > .span-3 { grid-column: span 3; }
.form-grid > .span-6,
.form-grid > .field-span-full,
.form-grid > .form-group:has(textarea),
.form-grid > .form-group:has(input[type="file"]) { grid-column: 1 / -1; }

/* 弹窗里用内联 1fr / repeat(3|4) 写死的表单，统一升级为6轨（仅弹窗内，不影响页面看板） */
.modal-body [style*="1fr 1fr"],
.modal-body [style*="repeat(3"],
.modal-body [style*="repeat(4"] {
    grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
    gap: 14px 16px !important;
}
.modal-body [style*="1fr 1fr"] > .form-group,
.modal-body [style*="repeat(3"] > .form-group,
.modal-body [style*="repeat(4"] > .form-group { grid-column: span 1; min-width: 0; }
.modal-body [style*="1fr 1fr"] > .form-group:has(textarea),
.modal-body [style*="1fr 1fr"] > .form-group:has(input[type="file"]),
.modal-body [style*="repeat(3"] > .form-group:has(textarea),
.modal-body [style*="repeat(4"] > .form-group:has(textarea) { grid-column: 1 / -1; }

/* 中屏降3列，小屏2列 */
@media (max-width: 1280px) {
    .form-grid,
    .modal-body [style*="1fr 1fr"],
    .modal-body [style*="repeat(3"],
    .modal-body [style*="repeat(4"] { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}
@media (max-width: 768px) {
    .form-grid,
    .modal-body [style*="1fr 1fr"],
    .modal-body [style*="repeat(3"],
    .modal-body [style*="repeat(4"] { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
    .form-grid > .form-group { grid-column: span 1; }
}


/* 表单网格内的 form-group 减少底部间距 */
.form-grid .form-group {
    margin-bottom: 0;
}

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 10px 20px;
    border: none;
    border-radius: var(--radius);
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
}
.btn-primary {
    background: var(--primary);
    color: #fff;
    border-color: var(--primary);
}
.btn-primary:hover { background: var(--primary-hover); border-color: var(--primary-hover); }
.btn-primary:disabled { opacity: 0.6; cursor: not-allowed; }
.btn-secondary {
    background: #fff;
    color: var(--gray-700);
    border: 1px solid var(--gray-300);
}
.btn-secondary:hover { background: var(--gray-100); }
.btn-danger {
    background: #fff;
    color: var(--danger);
    border: 1px solid var(--danger-light);
}
.btn-danger:hover { background: var(--danger-light); }
.btn-text {
    background: transparent;
    color: var(--primary);
    border: none;
    padding: 8px 12px;
}
.btn-text:hover { background: var(--primary-light); }
.btn-sm { padding: 6px 12px; font-size: 13px; }
.login-error {
    background: var(--danger-light);
    color: var(--danger);
    padding: 10px 14px;
    border-radius: var(--radius);
    font-size: 13px;
    margin-bottom: 16px;
    display: none;
}
.login-error.show { display: block; }

/* B1：登录算术验证码行（默认 hidden，连续失败后由 JS 展开） */
.login-captcha-group[hidden] { display: none; }
.login-captcha-row {
    display: flex;
    align-items: center;
    gap: 8px;
}
.login-captcha-q {
    flex: 0 0 auto;
    min-width: 92px;
    text-align: center;
    padding: 8px 12px;
    background: var(--bg, #f5f6f8);
    border: 1px solid var(--border, #e5e7eb);
    border-radius: var(--radius);
    font-size: 17px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.5px;
    color: var(--text, #1f2937);
    user-select: none;
}
.login-captcha-row .form-input { flex: 1 1 auto; min-width: 0; }
.login-captcha-row .btn { flex: 0 0 auto; white-space: nowrap; }
@media (max-width: 480px) {
    .login-captcha-row { flex-wrap: wrap; }
    .login-captcha-row .form-input { flex: 1 1 100%; order: 3; }
}

/* ===== 主框架 ===== */
.layout {
    display: flex;
    min-height: 100vh;
}

/* ===== 侧边栏 ===== */
.sidebar {
    width: var(--sidebar-width);
    background: #0B2A6B;
    color: #fff;
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    overflow-y: auto;
    overflow-x: hidden;
    z-index: var(--z-sidebar);
    transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
}

/* 折叠态 - 宽度 68px */
.sidebar.sidebar-collapsed {
    width: var(--sidebar-collapsed-width);
}

/* 侧边栏头部 - LOGO区域可点击 */
.sidebar-header {
    padding: 12px 14px;
    border-bottom: 1px solid rgba(255,255,255,0.08);
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 56px;
    cursor: pointer;
    transition: background 0.2s;
}

.sidebar-header:hover {
    background: rgba(255,255,255,0.08);
}

.sidebar-logo-wrap {
    width: 40px;
    height: 40px;
    background: #fff;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    overflow: hidden;
}

.sidebar-logo-img {
    width: 36px;
    height: 36px;
    object-fit: contain;
}

/* 侧边栏导航 - 容器不接收点击 */
.sidebar-nav {
    flex: 1;
    padding: 8px 0;
    overflow-y: auto;
    overflow-x: hidden;
    pointer-events: none;
}

/* 导航分组 - 容器不接收点击 */
.nav-group {
    position: relative;
    margin-bottom: 4px;
    pointer-events: none;
}

.nav-group-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 44px;
    margin: 0 12px;
    border-radius: 8px;
    cursor: pointer;
    transition: all 0.15s;
    position: relative;
    pointer-events: none;
}

.nav-group-icon svg,
.nav-group-icon img {
    pointer-events: none;
}

.nav-group-icon:hover,
.nav-group-icon.hover {
    background: rgba(255,255,255,0.1);
}

.nav-group-icon.has-active {
    background: rgba(255,255,255,0.12);
}

.nav-group-icon svg {
    opacity: 0.85;
    transition: opacity 0.15s;
}

.nav-group-icon:hover svg,
.nav-group-icon.hover svg,
.nav-group-icon.has-active svg {
    opacity: 1;
}

/* 折叠态 */
.sidebar-collapsed .sidebar-header {
    justify-content: center;
    padding: 12px 8px;
}

.sidebar-collapsed .nav-group-icon {
    margin: 0 8px;
}

/* 展开态：不显示分组图标，只保留分组标题（图标仅在折叠为图标栏时使用） */
.sidebar:not(.sidebar-collapsed) .nav-group-icon {
    display: none;
}

/* 折叠态：分组浮层用 fixed 脱离布局，避免隐藏浮层撑出侧栏横向滚动条（坐标由 JS 显示时计算） */
.sidebar.sidebar-collapsed .nav-group-submenu {
    position: fixed;
    left: auto;
    top: auto;
}

/* 折叠态悬停浮层：强制显示分组名与各模块名（覆盖折叠态隐藏文字的规则），浮层为白底卡片 */
.sidebar.sidebar-collapsed .nav-group-submenu.show,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout {
    background: #fff;
    padding: 8px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.18), 0 2px 10px rgba(0,0,0,0.08);
}
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-header,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-header {
    display: flex;
    color: #0B2A6B;
    font-size: 12px;
    border-bottom: 1px solid #eef0f4;
    padding: 4px 8px 6px;
    margin-bottom: 4px;
}
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-item-text,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-item-text {
    display: inline;
    color: var(--gray-700);
    font-size: 13px;
}
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-item:hover .submenu-item-text,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-item:hover .submenu-item-text {
    color: #0B2A6B;
    font-weight: 500;
}
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-item,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-item {
    justify-content: space-between;
    padding: 8px 10px;
}
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-item-icon,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-item-icon {
    display: none;
}
/* 折叠态悬停浮层：无论该分组在手风琴里是否展开，都要完整列出全部模块链接
   （否则非当前分组的 .submenu-items 仍被 max-height:0;overflow:hidden 收起，出现“有些链接没有”） */
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-items,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-items {
    max-height: none !important;
    overflow: visible !important;
    pointer-events: auto !important;
}

/* 悬停子菜单卡片 */
.nav-group-submenu {
    position: absolute;
    left: calc(100% + 8px);
    top: 0;
    min-width: 160px;
    background: #fff;
    border-radius: 10px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.15), 0 2px 10px rgba(0,0,0,0.08);
    padding: 8px;
    opacity: 0;
    visibility: hidden;
    transform: translateX(-8px);
    transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: var(--z-nav-sub);
}

.nav-group-submenu.show {
    opacity: 1;
    visibility: visible;
    transform: translateX(0);
}

/* 折叠态：JS 计算坐标后用 fixed 浮层，避免被侧栏 overflow 裁切、也不撑出横向滚动条 */
.nav-group-submenu.fixed-flyout {
    position: fixed;
    left: auto;
    top: auto;
    min-width: 176px;
    max-height: calc(100vh - 24px);
    overflow-y: auto;
    /* fixed 浮层不再做横向位移，只做淡入，避免出现“先偏右再归位”的顿挫感 */
    transform: none !important;
    transition: opacity 0.16s ease;
}
.nav-group-submenu.fixed-flyout.show { transform: none !important; }

/* 分组标题 - 接收点击展开折叠，但不覆盖子菜单 */
.submenu-header {
    font-size: 13px;
    font-weight: 600;
    color: rgba(255,255,255,0.85);
    padding: 12px 16px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    transition: background 0.15s;
    user-select: none;
    pointer-events: auto;
    position: relative;
    z-index: var(--z-local-1);
}

.submenu-header:hover {
    background: rgba(255,255,255,0.05);
}

.submenu-arrow {
    font-size: 12px;
    transition: transform 0.2s;
    color: rgba(255,255,255,0.5);
}

.nav-group.expanded .submenu-arrow {
    transform: rotate(90deg);
}

/* 手风琴：默认隐藏子菜单项 - 容器不接收点击 */
.submenu-items {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.25s ease-out;
    pointer-events: none;
}

.nav-group.expanded .submenu-items { max-height: 2000px;
    transition: max-height 0.35s ease-in;
}

/* 菜单链接 - 接收点击 */
.submenu-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 12px;
    font-size: 14px;
    color: var(--gray-700);
    text-decoration: none;
    border-radius: 6px;
    transition: all 0.15s;
    position: relative;
    z-index: var(--z-local-2);
    pointer-events: auto;
}

.submenu-item-text,
.submenu-item-dot,
.submenu-item svg {
    pointer-events: none;
}

.submenu-item:hover {
    background: var(--gray-50);
    color: #0B2A6B;
}

.submenu-item.active {
    background: #FFF0E0;
    color: var(--primary);
    font-weight: 500;
}

.submenu-item-dot {
    width: 6px;
    height: 6px;
    background: var(--primary);
    border-radius: 50%;
}

/* 展开态隐藏子菜单（直接在侧边栏显示）- 容器不接收点击 */
.sidebar:not(.sidebar-collapsed) .nav-group-submenu {
    position: static;
    opacity: 1;
    visibility: visible;
    transform: none;
    box-shadow: none;
    background: transparent;
    padding: 0;
    min-width: auto;
    margin: 4px 12px 8px;
    pointer-events: none;
}

.sidebar:not(.sidebar-collapsed) .submenu-header {
    font-size: 11px;
    color: rgba(255,255,255,0.5);
    border-bottom-color: rgba(255,255,255,0.08);
    padding: 4px 8px 6px;
}

/* 展开态：隐藏菜单项图标，只显示文字 */
.sidebar:not(.sidebar-collapsed) .submenu-item-icon {
    display: none;
}

.sidebar:not(.sidebar-collapsed) .submenu-item {
    color: rgba(255,255,255,0.75);
    padding: 8px 12px;
    font-size: 13px;
}

.sidebar:not(.sidebar-collapsed) .submenu-item:hover {
    background: rgba(255,255,255,0.08);
    color: #fff;
}

.sidebar:not(.sidebar-collapsed) .submenu-item.active {
    background: rgba(255,124,0,0.15);
    color: var(--primary);
}

.sidebar:not(.sidebar-collapsed) .submenu-item-dot {
    background: var(--primary);
}

/* 折叠态：只显示图标，隐藏文字和分组标题 */
.sidebar.sidebar-collapsed .submenu-item-text,
.sidebar.sidebar-collapsed .submenu-header,
.sidebar.sidebar-collapsed .submenu-item-dot {
    display: none;
}

.sidebar.sidebar-collapsed .submenu-item {
    justify-content: center;
    padding: 10px 0;
}

.sidebar.sidebar-collapsed .submenu-item-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    pointer-events: none;
}

.sidebar.sidebar-collapsed .submenu-item-icon svg {
    pointer-events: none;
}

/* 折叠态分组图标居中显示，且可点击直接进入该分组第一个模块 */
.sidebar.sidebar-collapsed .nav-group-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 8px auto;
    width: 40px;
    height: 40px;
    opacity: 0.85;
    pointer-events: auto;
    cursor: pointer;
}

/* ===== 主内容区 ===== */
.main-content {
    margin-left: var(--sidebar-width);
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
    transition: margin-left 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}
/* 侧边栏折叠时主内容区自适应 */
.sidebar-collapsed ~ .main-content,
body.sidebar-collapsed .main-content {
    margin-left: var(--sidebar-collapsed-width);
}

/* ===== 顶栏 ===== */
.header {
    height: var(--header-height);
    background: #fff;
    border-bottom: 1px solid var(--gray-200);
    display: flex;
    align-items: center;
    padding: 0 20px;
    position: sticky;
    top: 0;
    z-index: var(--z-header);
    box-shadow: 0 1px 3px rgba(0,0,0,0.04);
    gap: 16px;
}
.header-left {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
}
.header-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--gray-800);
    white-space: nowrap;
}

/* 全局搜索框 */
.header-center {
    flex: 1;
    display: flex;
    justify-content: center;
    max-width: 480px;
    margin: 0 auto;
}
/* 全局搜索结果面板 */
.search-results-panel {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    margin-top: 6px;
    background: #fff;
    border-radius: 10px;
    box-shadow: 0 6px 20px rgba(0,0,0,0.12);
    border: 1px solid var(--gray-200);
    z-index: var(--z-dropdown);
    max-height: 360px;
    overflow-y: auto;
    display: none;
}
.search-loading, .search-no-result {
    padding: 16px;
    text-align: center;
    color: var(--gray-400);
    font-size: 13px;
}
.search-group-title {
    padding: 8px 14px 4px;
    font-size: 11px;
    font-weight: 600;
    color: var(--gray-500);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    background: var(--gray-50);
    border-bottom: 1px solid var(--gray-100);
}
.search-result-item {
    display: flex;
    align-items: center;
    padding: 10px 14px;
    cursor: pointer;
    transition: background 0.15s;
    text-decoration: none;
    color: inherit;
    border-bottom: 1px solid var(--gray-50);
}
.search-result-item:last-child { border-bottom: none; }
.search-result-item:hover { background: var(--gray-50); }
.search-result-label { 
    flex: 1; 
    font-size: 13px; 
    color: var(--gray-700);
    font-weight: 500;
}
.search-result-sub {
    font-size: 12px;
    color: var(--gray-400);
    margin-left: 8px;
}

/* 顶栏右侧：无论是否存在居中搜索，头像/铃铛区一律顶到最右 */
.header-right {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
    margin-left: auto;
}

/* 通知铃铛 */
.header-bell {
    position: relative;
    width: 34px;
    height: 34px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    cursor: pointer;
    color: var(--gray-500);
    transition: all 0.15s;
}
.header-bell:hover {
    background: var(--gray-100);
    color: var(--gray-700);
}
.header-bell i { font-size: 18px; }
.header-bell svg { flex-shrink: 0; }
.bell-dot {
    position: absolute;
    top: 2px;
    right: 2px;
    min-width: 8px;
    height: 8px;
    padding: 0;
    background: var(--danger);
    border-radius: 50%;
    border: 1.5px solid #fff;
    display: none;
}
.bell-dot.show { display: block; }
.bell-count {
    position: absolute;
    top: -2px;
    right: -4px;
    min-width: 16px;
    height: 16px;
    padding: 0 4px;
    background: var(--danger);
    color: #fff;
    border-radius: 10px;
    border: 1.5px solid #fff;
    font-size: 10px;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* 通知铃铛下拉面板 */
.bell-dropdown {
    position: absolute;
    top: 100%;
    right: 0;
    width: 260px;
    background: #fff;
    border-radius: 10px;
    box-shadow: 0 6px 20px rgba(0,0,0,0.12);
    border: 1px solid var(--gray-200);
    z-index: var(--z-dropdown);
    display: none;
    overflow: hidden;
    margin-top: 8px;
}
.bell-dropdown.show { display: block; }
.bell-dropdown-header {
    padding: 12px 16px;
    font-size: 14px;
    font-weight: 600;
    color: var(--gray-700);
    border-bottom: 1px solid var(--gray-100);
}
.bell-dropdown-body { max-height: 300px; overflow-y: auto; }
.bell-loading, .bell-empty {
    padding: 20px;
    text-align: center;
    color: var(--gray-400);
    font-size: 13px;
}
.bell-item {
    display: flex;
    align-items: center;
    padding: 12px 16px;
    cursor: pointer;
    transition: background 0.15s;
    text-decoration: none;
    color: inherit;
}
.bell-item:hover { background: var(--gray-50); }
.bell-item i { 
    width: 20px; 
    font-size: 16px; 
    color: var(--gray-500);
    margin-right: 10px;
}
.bell-item-label { 
    flex: 1; 
    font-size: 13px; 
    color: var(--gray-700);
}
.bell-item-count {
    min-width: 24px;
    height: 20px;
    padding: 0 6px;
    background: var(--danger-light, #fee2e2);
    color: var(--danger);
    border-radius: 10px;
    font-size: 12px;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* ===== 头像下拉菜单 ===== */
.header-user {
    position: relative;
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 4px 8px 4px 4px;
    border-radius: 8px;
    cursor: pointer;
    transition: background 0.15s;
}
.header-user:hover { background: var(--gray-100); }
.user-avatar {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: var(--primary-light);
    color: var(--primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-size: 12px;
    flex-shrink: 0;
}
.user-name {
    font-size: 13px;
    color: var(--gray-700);
    font-weight: 500;
    white-space: nowrap;
}
.user-role-badge {
    font-size: 11px;
    color: var(--gray-500);
    background: var(--gray-100);
    padding: 2px 6px;
    border-radius: 4px;
    margin-left: 6px;
    white-space: nowrap;
}
.user-chevron {
    font-size: 14px;
    color: var(--gray-400);
    transition: transform 0.2s;
}
.avatar-dropdown {
    position: absolute;
    top: calc(100% + 6px);
    right: 0;
    width: 220px;
    background: #fff;
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0,0,0,0.12), 0 2px 6px rgba(0,0,0,0.06);
    border: 1px solid var(--gray-200);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-4px);
    transition: all 0.15s ease;
    z-index: var(--z-dropdown);
    overflow: hidden;
}
.avatar-dropdown.show {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}
.dropdown-header {
    padding: 14px 16px 10px;
}
.dropdown-user-name {
    font-size: 14px;
    font-weight: 600;
    color: var(--gray-800);
}
.dropdown-user-role {
    font-size: 12px;
    color: var(--gray-500);
    margin-top: 2px;
}
.dropdown-divider {
    height: 1px;
    background: var(--gray-100);
    margin: 0;
}
.dropdown-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 16px;
    font-size: 13px;
    color: var(--gray-700);
    cursor: pointer;
    text-decoration: none;
    transition: background 0.1s;
}
.dropdown-item:hover { background: var(--gray-50); }
.dropdown-item i { font-size: 15px; color: var(--gray-400); width: 18px; text-align: center; }
.dropdown-item-danger { color: var(--danger); }
.dropdown-item-danger i { color: var(--danger); }
.dropdown-item-danger:hover { background: var(--danger-light); }
.dropdown-item-disabled {
    color: var(--gray-400);
    cursor: not-allowed;
    pointer-events: none;
    position: relative;
}
.dropdown-item-disabled i { color: var(--gray-300); }
.dropdown-badge {
    margin-left: auto;
    font-size: 10px;
    padding: 1px 6px;
    background: var(--gray-100);
    color: var(--gray-400);
    border-radius: 4px;
    white-space: nowrap;
}

/* ===== 面包屑栏 ===== */
.breadcrumb-bar {
    padding: 10px 20px;
    font-size: 12.5px;
    color: var(--gray-500);
    background: transparent;
    display: flex;
    align-items: center;
    gap: 6px;
}
.breadcrumb-link {
    color: var(--gray-500);
    text-decoration: none;
    transition: color 0.15s;
}
.breadcrumb-link:hover { color: var(--primary); }
.breadcrumb-sep { color: var(--gray-300); }
.breadcrumb-current { color: var(--gray-700); font-weight: 500; }

/* ===== 内容区 ===== */
.page-content {
    padding: 0 20px 20px;
    flex: 1;
}

/* ===== 占位卡片（未开发模块） ===== */
.placeholder-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 360px;
    background: #fff;
    border-radius: 12px;
    border: 1px solid var(--gray-200);
    padding: 48px 24px;
    text-align: center;
}
.placeholder-card-icon {
    width: 72px;
    height: 72px;
    border-radius: 50%;
    background: var(--gray-100);
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 20px;
}
.placeholder-card-icon i { font-size: 32px; color: var(--gray-400); }
.placeholder-card h3 {
    font-size: 16px;
    font-weight: 600;
    color: var(--gray-700);
    margin-bottom: 8px;
}
.placeholder-card p {
    font-size: 13px;
    color: var(--gray-500);
}

/* ===== 通用列表 ===== */
.list-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 16px;
    gap: 12px;
    flex-wrap: wrap;
}
.search-box {
    display: flex;
    align-items: center;
    gap: 8px;
}
.search-box .form-input {
    width: 260px;
}
.data-table {
    width: 100%;
    background: #fff;
    border-radius: var(--radius);
    border: 1px solid var(--gray-200);
    overflow: hidden;
}
.data-table { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.data-table table {
    width: 100%;
    min-width: 760px;
    border-collapse: collapse;
}
.data-table th {
    background: var(--gray-50);
    padding: 12px 16px;
    text-align: left;
    font-size: 12px;
    font-weight: 600;
    color: var(--gray-500);
    letter-spacing: 0.3px;
    border-bottom: 1px solid var(--gray-200);
    white-space: nowrap;
    vertical-align: middle;
}
.data-table td {
    padding: 12px 16px;
    border-bottom: 1px solid var(--gray-100);
    font-size: 14px;
    vertical-align: middle;
    white-space: nowrap;
}
/* 长文本列加 .cell-wrap 允许换行（如客户单位、路线、备注） */
.data-table td.cell-wrap, .data-table th.cell-wrap { white-space: normal; min-width: 140px; line-height: 1.5; }
.data-table tr:last-child td { border-bottom: none; }
.data-table tr:hover td { background: var(--gray-50); }
.data-table .actions {
    display: flex;
    flex-wrap: nowrap;
    gap: 6px;
    white-space: nowrap;
}
.data-table td .actions, .data-table td:last-child { white-space: nowrap; }
.data-table .actions button {
    padding: 4px 10px;
    font-size: 12px;
    border-radius: 4px;
    border: 1px solid var(--gray-300);
    background: #fff;
    cursor: pointer;
    color: var(--gray-600);
    white-space: nowrap;
}
.data-table td button { white-space: nowrap; }
.data-table .actions button:hover { background: var(--gray-100); }
.data-table .actions button.delete-btn { color: var(--danger); border-color: var(--danger-light); }
.data-table .actions button.delete-btn:hover { background: var(--danger-light); }
.empty-state {
    text-align: center;
    padding: 48px 16px;
    color: var(--gray-400);
}
.pagination {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 16px;
    font-size: 13px;
    color: var(--gray-500);
}
.pagination-btns {
    display: flex;
    gap: 4px;
}
.pagination-btns button {
    padding: 6px 12px;
    border: 1px solid var(--gray-300);
    background: #fff;
    border-radius: 4px;
    cursor: pointer;
    font-size: 13px;
}
.pagination-btns button:hover { background: var(--gray-100); }
.pagination-btns button.active { background: var(--primary); color: #fff; border-color: var(--primary); }
.pagination-btns button:disabled { opacity: 0.5; cursor: not-allowed; }

/* ===== Modal ===== */
.modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.5);
    /* 弹窗统一"仅正文区滚动"：遮罩层不滚动；.modal 限高 + 内部 .modal-body 滚动，
       flex-start + .modal 的 margin-block:auto 实现居中、顶部不裁切（20260928 根治双滚动条） */
    display: flex;
    align-items: flex-start;
    justify-content: center;
    overflow: hidden;
    overscroll-behavior: contain;
    padding: 24px 16px;
    z-index: var(--z-modal);
    opacity: 0;
    visibility: hidden;
    /* 只对显隐做过渡，禁止 transition:all（否则输入引起的尺寸变化也会被动画化，表现为"跳一下"） */
    transition: opacity 0.2s, visibility 0.2s;
}
.modal-overlay.show { opacity: 1; visibility: visible; }
.modal {
    background: #fff;
    border-radius: 12px;
    width: min(680px, 95vw);
    max-height: 86vh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    /* 上下 auto 外边距在 flex 容器内吸收剩余空间实现居中；正文在 .modal-body 内滚动 */
    margin-block: auto;
    /* 恒定预留垂直滚动条槽位，避免内容在"未溢出↔溢出"切换时横向抖动 */
    scrollbar-gutter: stable;
    box-shadow: 0 20px 60px rgba(0,0,0,0.2);
    transform: scale(0.95);
    transition: transform 0.2s;
}
.modal-overlay.show .modal { transform: scale(1); }
/* 非阻断浮层（登录后自动提示）：不铺全屏、不拦截背景点击，右下角卡片，背后业务区照常操作 */
.modal-overlay.non-blocking {
    inset: auto; top: auto; left: auto; right: 16px; bottom: 16px;
    width: min(400px, calc(100vw - 32px));
    background: transparent; backdrop-filter: none;
    display: block; padding: 0; overflow: visible;
    pointer-events: none; /* 外壳点击穿透到业务区，只有卡片自身接收事件 */
}
.modal-overlay.non-blocking .modal {
    pointer-events: auto;
    width: 100%; max-width: 100%; max-height: 72vh; margin: 0;
    box-sizing: border-box;
    border: 1px solid var(--gray-200, #e5e7eb);
    box-shadow: 0 16px 48px rgba(0,0,0,0.18);
    transform: none;
    display: flex; flex-direction: column; /* 页脚始终可见，仅正文区滚动 */
}
.modal-overlay.non-blocking .modal .modal-body { overflow-y: auto; }
.modal-overlay.non-blocking .modal .modal-footer { flex-shrink: 0; }
.modal-overlay.non-blocking.show .modal { transform: none; }
@media (max-width: 640px) {
    .modal-overlay.non-blocking { left: 12px; right: 12px; bottom: 12px; width: auto; }
}
.modal-header {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 20px 24px 0;
}
.modal-header h3 { font-size: 18px; font-weight: 600; }
.modal-header-right {
    display: flex;
    align-items: center;
    gap: 8px;
}
.modal-confirm-header {
    font-size: 13px;
    padding: 6px 14px;
}
.modal-close {
    width: 32px;
    height: 32px;
    border: none;
    background: none;
    cursor: pointer;
    font-size: 20px;
    color: var(--gray-400);
    border-radius: 4px;
}
.modal-close:hover { background: var(--gray-100); color: var(--gray-600); }
.modal-body { padding: 20px 24px; flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.modal-footer {
    flex: 0 0 auto;
    padding: 0 24px 20px;
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

/* ===== Toast ===== */
.toast-container {
    position: fixed;
    top: 20px;
    right: 20px;
    z-index: var(--z-toast);
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.toast {
    padding: 12px 20px;
    border-radius: var(--radius);
    font-size: 14px;
    box-shadow: var(--shadow-md);
    animation: toast-in 0.3s ease;
    max-width: 360px;
}
.toast-success { background: var(--success-light); color: var(--success); border: 1px solid #a7f3d0; }
.toast-error { background: var(--danger-light); color: var(--danger); border: 1px solid #fca5a5; }
.toast-warning { background: var(--warning-light); color: var(--warning); border: 1px solid #fcd34d; }
@keyframes toast-in {
    from { opacity: 0; transform: translateX(40px); }
    to { opacity: 1; transform: translateX(0); }
}

/* ===== 仪表盘 ===== */
.welcome-card {
    background: linear-gradient(135deg, #0B2A6B 0%, #1a3a7a 60%, #FF7C00 100%);
    color: #fff;
    border-radius: 12px;
    padding: 32px;
    margin-bottom: 24px;
}
.welcome-card h2 { font-size: 22px; margin-bottom: 8px; }
.welcome-card p { opacity: 0.9; font-size: 14px; }
.stat-cards {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
    gap: 16px;
}
.stat-card {
    background: #fff;
    border-radius: var(--radius);
    padding: 20px;
    border: 1px solid var(--gray-200);
}
.stat-card .label {
    font-size: 13px;
    color: var(--gray-500);
    margin-bottom: 8px;
}
.stat-card .value {
    font-size: 28px;
    font-weight: 700;
    color: var(--gray-900);
}
.stat-card .icon {
    float: right;
    width: 40px;
    height: 40px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
}
.stat-card .icon.blue { background: var(--primary-light); color: var(--primary); }
.stat-card .icon.green { background: var(--success-light); color: var(--success); }
.stat-card .icon.yellow { background: var(--warning-light); color: var(--warning); }
.stat-card .icon.red { background: var(--danger-light); color: var(--danger); }
.stat-card .icon.orange { background: #fff3e0; color: #e65100; }
.stat-card .icon.gray { background: var(--gray-100); color: var(--gray-600); }
.stat-card { cursor: pointer; transition: box-shadow 0.15s, transform 0.15s; }
.stat-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.08); transform: translateY(-2px); }
.stat-card .sub-text {
    font-size: 12px;
    color: var(--gray-400);
    margin-top: 4px;
}
.stat-card .value.income { color: var(--success); }
.stat-card .value.expense { color: var(--danger); }
.stat-cards.two-col { grid-template-columns: repeat(2, 1fr); }
.stat-cards.three-col { grid-template-columns: repeat(3, 1fr); }

/* Dashboard sections */
.dashboard-section { margin-bottom: 28px; }
.section-title {
    font-size: 16px;
    font-weight: 600;
    color: var(--gray-800);
    margin-bottom: 14px;
    padding-left: 2px;
}
/* 卡片/详情内的小区块小标题（照片组、分组字段等） */
.sub-block-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--gray-800);
    margin: 0 0 4px;
}
.overview-row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 24px;
}
.overview-block { min-width: 0; }
.overview-block .stat-cards {
    grid-template-columns: 1fr;
}

@media (max-width: 1280px) {
    .stat-cards.two-col,
    .stat-cards.three-col { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 768px) {
    .stat-cards.two-col,
    .stat-cards.three-col { grid-template-columns: 1fr; }
    .overview-row { grid-template-columns: 1fr; }
}

/* ===== 旧版占位页（兼容） ===== */
.placeholder-page {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 400px;
    color: var(--gray-400);
}
.placeholder-page i { font-size: 64px; margin-bottom: 16px; }
.placeholder-page h3 { font-size: 18px; color: var(--gray-600); margin-bottom: 8px; }
.placeholder-page p { font-size: 14px; }

/* ===== 确认对话框 ===== */
.confirm-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: var(--z-confirm);
    opacity: 0;
    transition: opacity 0.15s;
}
.confirm-overlay.show { opacity: 1; }
.confirm-dialog {
    background: #fff;
    border-radius: 12px;
    width: 400px;
    box-shadow: 0 20px 60px rgba(0,0,0,0.2);
    transform: scale(0.95);
    transition: transform 0.15s;
}
.confirm-overlay.show .confirm-dialog { transform: scale(1); }
.confirm-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px 0;
}
.confirm-header h4 { font-size: 16px; font-weight: 600; }
.confirm-close {
    width: 28px;
    height: 28px;
    border: none;
    background: none;
    cursor: pointer;
    font-size: 18px;
    color: var(--gray-400);
    border-radius: 4px;
}
.confirm-close:hover { background: var(--gray-100); color: var(--gray-600); }
.confirm-body { padding: 16px 20px; font-size: 14px; color: var(--gray-600); }
.confirm-footer {
    padding: 0 20px 16px;
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

/* 删除确认：单据信息块（防误删，删除前核对单号/客户/日期） */
.del-info-box {
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    overflow: hidden;
    margin-bottom: 12px;
}
.del-info-row {
    display: flex;
    font-size: 13px;
    border-bottom: 1px solid #f0f1f3;
}
.del-info-row:last-child { border-bottom: none; }
.del-info-label {
    width: 56px;
    flex-shrink: 0;
    padding: 7px 10px;
    color: var(--gray-400);
    background: #fafbfc;
}
.del-info-value {
    padding: 7px 10px;
    color: var(--gray-700);
    font-weight: 500;
    word-break: break-all;
}
.del-list-box {
    max-height: 240px;
    overflow-y: auto;
    border: 1px solid #e5e7eb;
    border-radius: 8px;
    margin-bottom: 12px;
}
.del-list-row {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 8px 12px;
    font-size: 13px;
    border-bottom: 1px solid #f0f1f3;
}
.del-list-row:last-child { border-bottom: none; }
.del-list-no { font-weight: 600; min-width: 120px; color: var(--gray-700); }
.del-list-company { flex: 1; color: var(--gray-700); word-break: break-all; }
.del-list-date { color: var(--gray-400); white-space: nowrap; }
.del-warn { color: #d97706; font-weight: 500; }

/* ===== 状态标签 ===== */
.badge {
    display: inline-block;
    padding: 2px 10px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 500;
}
.badge-success { background: var(--success-light); color: var(--success); }
.badge-warning { background: var(--warning-light); color: var(--warning); }
.badge-danger { background: var(--danger-light); color: var(--danger); }
.badge-info { background: var(--primary-light); color: var(--primary); }

/* ===== 响应式 ===== */
/* 移动端抽屉模式 (<900px) */
@media (max-width: 899px) {
    .sidebar {
        transform: translateX(calc(var(--sidebar-width) * -1));
        width: var(--sidebar-width);
    }
    .sidebar.mobile-open {
        transform: translateX(0);
    }
    .sidebar.mobile-open + .sidebar-overlay {
        display: block;
    }
    .main-content {
        margin-left: 0 !important;
    }
    .header-center {
        display: none;
    }
    /* 折叠态在移动端也隐藏子菜单 */
    .sidebar-collapsed .nav-group-submenu {
        display: none;
    }
}

/* 遮罩层 */
.sidebar-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.5);
    z-index: var(--z-sidebar-mask);
    animation: fadeIn 0.2s ease;
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* 桌面端：隐藏遮罩 */
@media (min-width: 900px) {
    .sidebar-overlay {
        display: none !important;
    }
}

/* ==================== AI助手样式 ==================== */

/* 悬浮按钮 */
.ai-assistant-fab {
    position: fixed;
    bottom: 24px;
    right: 24px;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    background: #ffffff;
    border: 1px solid var(--gray-200);
    color: white;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    box-shadow: 0 4px 14px rgba(11, 42, 107, 0.22);
    transition: all 0.3s ease;
    z-index: var(--z-fab);
    overflow: hidden;
    padding: 0;
}

.ai-assistant-fab .fab-logo {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    overflow: hidden;
    transition: transform 0.3s ease;
}

.ai-assistant-fab .fab-logo img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    border-radius: 50%;
    display: block;
}

.ai-assistant-fab:hover .fab-logo {
    transform: scale(1.05);
}

.ai-assistant-fab:hover {
    transform: scale(1.08);
    box-shadow: 0 6px 20px rgba(11, 42, 107, 0.3);
}

.ai-assistant-fab.active {
    transform: scale(0.9);
    opacity: 0.8;
}

.ai-assistant-fab .fab-label {
    position: absolute;
    right: 64px;
    background: var(--gray-800);
    color: white;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 13px;
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s;
}

.ai-assistant-fab:hover .fab-label {
    opacity: 1;
}

/* 对话面板 */
.ai-assistant-panel {
    position: fixed;
    bottom: 90px;
    right: 24px;
    width: 380px;
    max-height: 560px;
    background: white;
    border-radius: 16px;
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
    display: flex;
    flex-direction: column;
    z-index: var(--z-fab-panel);
    animation: slideUp 0.3s ease;
}

.ai-assistant-panel.hidden {
    display: none;
}

@keyframes slideUp {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* 头部 */
.assistant-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid var(--gray-100);
    background: linear-gradient(135deg, var(--primary), var(--primary-hover));
    color: white;
    border-radius: 16px 16px 0 0;
    cursor: move;
    user-select: none;
    position: relative;
}

.assistant-header::before {
    content: '';
    position: absolute;
    top: 6px;
    left: 50%;
    transform: translateX(-50%);
    width: 32px;
    height: 3px;
    background: rgba(255,255,255,0.3);
    border-radius: 2px;
}

.assistant-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 600;
    font-size: 15px;
}

.assistant-close {
    background: none;
    border: none;
    color: white;
    cursor: pointer;
    padding: 4px;
    border-radius: 4px;
    transition: background 0.2s;
}

.assistant-close:hover {
    background: rgba(255, 255, 255, 0.2);
}

/* 消息区域 */
.assistant-messages {
    flex: 1;
    overflow-y: auto;
    padding: 16px;
    max-height: 360px;
}

.message {
    margin-bottom: 12px;
    display: flex;
}

.message.user {
    justify-content: flex-end;
}

.message.assistant {
    justify-content: flex-start;
}

.message-content {
    max-width: 85%;
    padding: 10px 14px;
    border-radius: 12px;
    font-size: 14px;
    line-height: 1.5;
}

.message.user .message-content {
    background: var(--primary);
    color: white;
    border-bottom-right-radius: 4px;
}

.message.assistant .message-content {
    background: var(--gray-100);
    color: var(--gray-800);
    border-bottom-left-radius: 4px;
}

.message-content ul {
    margin: 8px 0;
    padding-left: 20px;
}

.message-content li {
    margin: 4px 0;
}

/* 数据来源 */
.data-sources {
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px dashed var(--gray-300);
    font-size: 12px;
    color: var(--gray-500);
}

.source-label {
    margin-right: 4px;
}

.source-item {
    display: inline-block;
    background: var(--primary-light);
    color: var(--primary);
    padding: 2px 8px;
    border-radius: 10px;
    margin: 2px;
    font-size: 11px;
}

/* ===== 小盛AI 证件原件卡片（契约 §9：DOM 构建，与现有气泡统一） ===== */
/* 仅在带卡片的助手消息行允许换行，普通对话行布局零变化 */
.message.assistant:has(.ai-cert-cards) { flex-wrap: wrap; }
.ai-cert-cards {
    flex: 0 0 100%;
    max-width: 85%;
    margin-top: 8px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.ai-cert-group {
    border: 1px solid var(--gray-200, #e5e7eb);
    border-radius: 10px;
    padding: 8px 10px;
    background: #fff;
}
.ai-cert-group-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--primary, #0B2A6B);
    margin-bottom: 6px;
}
.ai-cert-card {
    border: 1px solid var(--gray-200, #e5e7eb);
    border-radius: 8px;
    padding: 8px;
    margin-bottom: 6px;
    background: var(--gray-100, #f3f4f6);
}
.ai-cert-card:last-child { margin-bottom: 0; }
.ai-cert-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}
.ai-cert-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--gray-800, #1f2937);
}
.ai-cert-status {
    font-size: 11px;
    padding: 1px 8px;
    border-radius: 10px;
    white-space: nowrap;
}
.ai-cert-status.ok { background: #dcfce7; color: #166534; }
.ai-cert-status.missing { background: var(--gray-200, #e5e7eb); color: var(--gray-500, #6b7280); }
.ai-cert-expire {
    font-size: 12px;
    color: var(--gray-500, #6b7280);
    margin-top: 4px;
}
.ai-cert-missing {
    font-size: 12px;
    color: var(--gray-500, #6b7280);
    background: var(--gray-200, #e5e7eb);
    border-radius: 6px;
    padding: 10px;
    text-align: center;
    margin-top: 6px;
}
.ai-cert-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(84px, 1fr));
    gap: 6px;
    margin-top: 6px;
}
.ai-cert-thumb {
    width: 100%;
    height: 84px;
    object-fit: cover;
    border-radius: 6px;
    border: 1px solid var(--gray-200, #e5e7eb);
    cursor: zoom-in;
    background: #fff;
}
.ai-cert-pdf-btn {
    margin-top: 6px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: var(--primary, #0B2A6B);
    color: #fff;
    border: none;
    border-radius: 8px;
    padding: 6px 12px;
    font-size: 13px;
    cursor: pointer;
}

/* 证件全屏看图灯箱 */
.ai-lightbox {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.85);
    z-index: 99999;
    display: flex;
    align-items: center;
    justify-content: center;
}
.ai-lightbox-img {
    max-width: 92vw;
    max-height: 88vh;
    border-radius: 6px;
    object-fit: contain;
}
.ai-lightbox-btn {
    position: absolute;
    background: rgba(255, 255, 255, 0.15);
    color: #fff;
    border: none;
    border-radius: 50%;
    cursor: pointer;
    font-size: 20px;
    line-height: 1;
    width: 40px;
    height: 40px;
}
.ai-lightbox-close { top: 16px; right: 16px; }
.ai-lightbox-prev { left: 16px; top: 50%; transform: translateY(-50%); }
.ai-lightbox-next { right: 16px; top: 50%; transform: translateY(-50%); }
.ai-lightbox-dl {
    bottom: 20px;
    left: 50%;
    transform: translateX(-50%);
    width: auto;
    border-radius: 20px;
    padding: 8px 18px;
    font-size: 14px;
}

/* 加载动画 */
.typing-indicator {
    display: inline-flex;
    gap: 4px;
    margin-right: 8px;
}

.typing-indicator span {
    width: 6px;
    height: 6px;
    background: var(--gray-400);
    border-radius: 50%;
    animation: typing 1.4s infinite;
}

.typing-indicator span:nth-child(2) {
    animation-delay: 0.2s;
}

.typing-indicator span:nth-child(3) {
    animation-delay: 0.4s;
}

@keyframes typing {
    0%, 60%, 100% {
        transform: translateY(0);
        opacity: 0.4;
    }
    30% {
        transform: translateY(-6px);
        opacity: 1;
    }
}

/* 输入区域 */
.assistant-input-area {
    display: flex;
    gap: 8px;
    padding: 12px 16px;
    border-top: 1px solid var(--gray-100);
    background: var(--gray-50);
}

.assistant-input-area textarea {
    flex: 1;
    border: 1px solid var(--gray-200);
    border-radius: 8px;
    padding: 10px 12px;
    font-size: 14px;
    resize: none;
    outline: none;
    transition: border-color 0.2s;
}

.assistant-input-area textarea:focus {
    border-color: var(--primary);
}

.send-btn {
    width: 40px;
    height: 40px;
    border: none;
    border-radius: 8px;
    background: var(--primary);
    color: white;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s;
}

.send-btn:hover:not(:disabled) {
    background: var(--primary-hover);
}

.send-btn:disabled {
    opacity: 1;
    background: #e5e7eb;
    color: #9ca3af;
    cursor: not-allowed;
}

/* 快捷按钮 */
.assistant-footer {
    display: flex;
    gap: 8px;
    padding: 12px 16px;
    border-top: 1px solid var(--gray-100);
    flex-wrap: wrap;
}

.quick-btn {
    padding: 6px 12px;
    border: 1px solid var(--gray-200);
    border-radius: 16px;
    background: white;
    font-size: 12px;
    color: var(--gray-600);
    cursor: pointer;
    transition: all 0.2s;
}

.quick-btn:hover {
    border-color: var(--primary);
    color: var(--primary);
    background: var(--primary-light);
}

/* AI操作按钮 */
.ai-action-btn {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 6px 12px;
    border: 1px solid var(--primary);
    border-radius: 6px;
    background: white;
    color: var(--primary);
    font-size: 13px;
    cursor: pointer;
    transition: all 0.2s;
}

.ai-action-btn:hover {
    background: var(--primary);
    color: white;
}

.ai-action-btn svg {
    width: 14px;
    height: 14px;
}

/* 移动端适配 */
@media (max-width: 480px) {
    .ai-assistant-panel {
        width: calc(100vw - 32px);
        right: 16px;
        bottom: 80px;
        max-height: 70vh;
    }
    
    .ai-assistant-fab {
        bottom: 16px;
        right: 16px;
    }
}

/* ===== R15K UI 打磨 ===== */

/* R14C-2: 内容区滚动不随侧边栏菜单点击重置 */
.main-content {
    scroll-behavior: auto;
    overflow-y: auto;
    height: 100vh;
}

.page-content {
    min-height: calc(100vh - var(--header-height) - 50px);
}

/* R14C-4: 筛选栏改进 */
.filter-bar {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: flex-end;
    padding: 16px;
    background: var(--gray-50);
    border-radius: var(--radius);
    margin-bottom: 16px;
}

.filter-bar .form-group {
    margin-bottom: 0;
    min-width: 140px;
}

.filter-bar label {
    font-size: 12px;
    color: var(--gray-500);
    margin-bottom: 4px;
    display: block;
}

.filter-bar input[type="date"],
.filter-bar input[type="month"],
.filter-bar select,
.filter-bar input[type="text"] {
    padding: 8px 12px;
    border: 1px solid var(--gray-300);
    border-radius: var(--radius);
    font-size: 13px;
    background: #fff;
    min-width: 120px;
}

/* 重置按钮主色样式 */
.filter-bar .btn-reset,
.filter-bar button[type="button"].btn-reset {
    background: #fff;
    color: var(--primary);
    border: 1px solid var(--primary);
}

.filter-bar .btn-reset:hover {
    background: var(--primary-light);
}

/* R14C-5: 面包屑与标签页间距 */
.breadcrumb-bar {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    background: #fff;
    border-bottom: 1px solid var(--gray-200);
    margin-bottom: 0;
}

.breadcrumb-bar + .tab-bar,
.breadcrumb-bar ~ .tab-bar {
    margin-top: 0;
    padding-top: 0;
}

/* R14C-6: 空态提示 */
.empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 60px 20px;
    color: var(--gray-400);
    text-align: center;
}

.empty-state svg {
    width: 64px;
    height: 64px;
    margin-bottom: 16px;
    opacity: 0.5;
}

.empty-state p {
    font-size: 14px;
    margin: 0;
}

.empty-state .empty-title {
    font-size: 16px;
    color: var(--gray-600);
    margin-bottom: 8px;
}

/* 20260928：弹窗统一为 flex 列 + 仅 .modal-body 滚动、页脚天然固定在底部，
   不再需要 .modal-body 的 max-height:60vh 与 .modal-footer 的 sticky（已在基础规则统一，避免多层滚动条） */

/* R14C-8: 按钮类型统一 */
button:not([type]) {
    type: button;
}

/* 确保所有按钮有统一样式 */
.btn-primary,
.btn.btn-primary {
    background: var(--primary);
    color: #fff;
    border: 1px solid var(--primary);
}

.btn-primary:hover {
    background: var(--primary-hover);
    border-color: var(--primary-hover);
}

.btn-secondary,
.btn.btn-secondary {
    background: #fff;
    color: var(--gray-700);
    border: 1px solid var(--gray-300);
}

.btn-secondary:hover {
    background: var(--gray-100);
}

.btn-danger,
.btn.btn-danger {
    background: #fff;
    color: var(--danger);
    border: 1px solid var(--danger);
}

.btn-danger:hover {
    background: var(--danger-light);
}

/* R14C-4: 日期输入框中文化提示 */
input[type="date"]::-webkit-calendar-picker-indicator {
    cursor: pointer;
}

/* 下拉框未选时显示"全部" */
select option[value=""] {
    color: var(--gray-400);
}

/* ===== 统一卡片/工具条/页签（多个页面共用，原先缺样式导致观感不统一） ===== */
.card {
    background: #fff;
    border: 1px solid var(--gray-200);
    border-radius: 12px;
    padding: 20px;
    margin-bottom: 16px;
}
.card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 14px;
}
.card-header h3 { font-size: 15px; font-weight: 600; color: var(--gray-800); }
.toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 16px;
}
.search-input {
    height: 36px;
    padding: 8px 14px;
    border: 1px solid var(--gray-300);
    border-radius: var(--radius);
    font-size: 14px;
    outline: none;
    min-width: 240px;
}
.search-input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(255,124,0,0.1); }
.search-btn { height: 36px; padding: 8px 18px; background: var(--primary); color: #fff; border: 1px solid var(--primary); border-radius: var(--radius); cursor: pointer; }
.search-btn:hover { background: var(--primary-hover); }
.add-btn { height: 36px; padding: 8px 16px; background: var(--primary); color: #fff; border: 1px solid var(--primary); border-radius: var(--radius); cursor: pointer; white-space: nowrap; }
.add-btn:hover { background: var(--primary-hover); }

/* 页签条（加油充电等多标签页） */
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--gray-200); margin-bottom: 16px; flex-wrap: wrap; }
.tab-btn {
    padding: 10px 18px !important;
    border: none !important;
    background: none !important;
    cursor: pointer;
    border-bottom: 2px solid transparent !important;
    color: var(--gray-500) !important;
    font-size: 14px;
    height: auto;
    border-radius: 0;
}
.tab-btn:hover { color: var(--gray-800) !important; background: none !important; }
.tab-btn.active { color: var(--primary) !important; border-bottom-color: var(--primary) !important; font-weight: 600; }

/* ===== 列表稳健性：操作列永远可见、长内容省略，避免最后一列被挤出屏幕 ===== */
.data-table-wrapper { overflow-x:auto; }
.data-table { table-layout:auto; }
.data-table td { max-width: 260px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:middle; }
.data-table td.actions-cell, .data-table td:last-child { max-width:none; overflow:visible; white-space:nowrap; }
.data-table th:last-child, .data-table td:last-child {
    /* 定位兜底；阴影/底色/对齐统一以 ui-polish.css「操作列」段为唯一权威，避免两处不同模糊阴影叠加成阴影带 */
    position: sticky; right: 0; background:#fff; z-index: var(--z-sticky-col); text-align:center;
}
.data-table thead th:last-child { background:#f1f5f9; z-index: var(--z-sticky-corner); }
.data-table .actions { white-space:nowrap; display:flex; gap:4px; justify-content:center; }
.data-table tbody tr:hover td:last-child { background:#f8fbff; }



/* ===== 弹窗宽度自适应：含网格或≥2个直接字段组时用宽弹窗，简单表单保持紧凑 ===== */
.modal:has(.form-grid),
.modal:has([style*="1fr 1fr"]),
.modal:has([style*="repeat(3"]),
.modal:has([style*="repeat(4"]),
.modal:has(.modal-body > .form-group ~ .form-group) { width: min(1320px, 95vw); }

/* 直接堆叠≥2个字段组的弹窗体，自动排成6轨（不影响内层自带容器/确认框） */
.modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) {
    display: grid; grid-template-columns: repeat(6, minmax(0,1fr)); gap: 14px 16px; align-items: start;
}
.modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) > .form-group { grid-column: span 2; min-width:0; }
.modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) > .form-group:has(textarea),
.modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) > .form-group:has(input[type="file"]) { grid-column: 1 / -1; }
.modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) > *:not(.form-group) { grid-column: 1 / -1; min-width:0; }
@media (max-width: 1280px) {
    .modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) { grid-template-columns: repeat(3, minmax(0,1fr)); }
}
@media (max-width: 768px) {
    .modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) { grid-template-columns: repeat(2, minmax(0,1fr)); }
    .modal-body:has(> .form-group ~ .form-group):not(:has(.form-grid)):not(:has([style*="1fr 1fr"])) > .form-group { grid-column: span 1; }
}

/* 弹窗内输入控件填满字段宽度（复选/单选/文件除外），避免堆叠表单输入框过窄 */
.modal-body input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),
.modal-body select, .modal-body textarea { width: 100%; box-sizing: border-box; }

/* check-matrix cells */
.cm-cell{text-align:center;font-weight:600;}
.cm-ok{background:#eafaf0;color:#16a34a;}
.cm-bad{background:#fdecec;color:#dc2626;}
.cm-empty{color:#c4c9d2;}
.m-table input{border:1px solid var(--gray-200);border-radius:4px;padding:2px 4px;font-size:12px;}

/* reconcile overlay */
.rc-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index: var(--z-modal);display:flex;align-items:center;justify-content:center;overflow:auto;padding:20px;}
.rc-modal{box-shadow:0 12px 40px rgba(0,0,0,.2);}
.rc-modal table .r{text-align:right;}
.rc-modal .data-table input{border:1px solid var(--gray-200);border-radius:4px;padding:2px 5px;font-size:12px;}
.rc-modal .tag{background:#fef3c7;color:#92400e;border-radius:4px;padding:1px 7px;font-size:12px;}
/* ==== 内测收口：悬浮AI球不再遮挡分页/末页按钮；分页层级置于其下但可点 ==== */
.main-content { padding-bottom: 84px; }
.pagination { position: relative; z-index: var(--z-local-1); flex-wrap: wrap; row-gap: 8px; }
.ai-assistant-fab { bottom: 20px; }
@media (max-width: 768px){ .main-content { padding-bottom: 96px; } }

/* ===== 20260903 统一优化：侧栏字号/永久隐藏滚动条/折叠大图标/悬停大字/品牌名/页面间距 ===== */
/* 页面标题行与下方内容统一空一行，全站一致 */
.page-content { padding-top: 16px; }
/* 侧栏滚动条永久隐藏但保留滚动 */
.sidebar, .sidebar-nav { scrollbar-width: none; -ms-overflow-style: none; }
.sidebar::-webkit-scrollbar, .sidebar-nav::-webkit-scrollbar { width: 0 !important; height: 0 !important; display: none !important; }
/* 展开态菜单字体加大、更易读 */
.sidebar:not(.sidebar-collapsed) .submenu-item { font-size: 14.5px; padding: 9px 12px; }
.sidebar:not(.sidebar-collapsed) .submenu-header { font-size: 12px; }
/* 折叠态分组图标加大 */
.sidebar.sidebar-collapsed .nav-group-icon { width: 46px; height: 46px; margin: 7px auto; }
.sidebar.sidebar-collapsed .nav-group-icon svg { width: 23px; height: 23px; }
/* 折叠态悬停浮层文字加大 */
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-header,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-header { font-size: 13px; }
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-item-text,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-item-text { font-size: 14.5px; }
.sidebar.sidebar-collapsed .nav-group-submenu.show .submenu-item,
.sidebar.sidebar-collapsed .nav-group-submenu.fixed-flyout .submenu-item { padding: 9px 12px; }
/* 左上角 LOGO 旁加公司名（折叠时只留 LOGO） */
.sidebar-header { gap: 10px; }
.sidebar:not(.sidebar-collapsed) .sidebar-header { justify-content: flex-start; padding: 12px 16px; }
.sidebar.sidebar-collapsed .sidebar-header { justify-content: center; }
.sidebar-brand-text { display: flex; flex-direction: column; line-height: 1.2; white-space: nowrap; overflow: hidden; }
.sidebar-brand-cn { font-size: 16px; font-weight: 700; color: #fff; letter-spacing: 1px; }
.sidebar-brand-full { font-size: 11px; color: rgba(255,255,255,0.72); margin-top: 2px; }
.sidebar.sidebar-collapsed .sidebar-brand-text { display: none; }

/* =====================================================================
 * C5 · UI/交互专业化（2026-09-03）—— 本区块为 C5 队独占增量，
 * 只新增组件级令牌与组件类，不修改上方任何既有规则；配色全部引用 :root 变量。
 * 覆盖：ui-kit（Toast/按钮loading/空态/骨架/危险确认/抽屉）、
 *      table-kit（吸顶表头/列设置/省略悬停/无横滚/分页/批量浮条）、
 *      角色化首页 dashboard、屏幕打印辅助类。
 * ===================================================================== */
:root {
    /* 组件级令牌（在既有颜色/间距变量之上的“组件层”，不另起配色） */
    --ui-radius-sm: 6px;
    --ui-radius-md: 8px;
    --ui-radius-lg: 12px;
    /* ===== 统一 z 层级令牌（UI-P1-2：全站浮层只允许引用这些变量，禁止魔法数字） ===== */
    /* 局部堆叠：仅在组件自身层叠上下文内比较（表格冻结列/吸顶表头/内嵌抬起） */
    --z-local-1: 1;
    --z-local-2: 2;
    --z-sticky-col: 2;        /* 冻结的左右列 */
    --z-sticky-corner: 30;    /* 冻结列与表头交叉角：同时盖住冻结列与吸顶表头 */
    --z-inline-pop: 10;       /* 模态底栏等组件内部抬起 */
    --z-sticky-head: 20;      /* 吸顶表头：高于冻结列、低于一切全局层 */
    --z-dropdown-inline: 40;  /* 组件内绝对定位下拉（列设置面板） */
    --z-nav-sub: 200;         /* 侧栏悬停子菜单（侧栏层叠上下文内部） */
    /* 全局框架层 */
    --z-header: 100;          /* 顶栏 */
    --z-sidebar-mask: 150;    /* 移动端侧栏遮罩：盖顶栏、低于侧栏 */
    --z-sidebar: 200;         /* 侧栏 */
    /* 全局浮层：严格逐级抬升，顺序即遮挡关系 */
    --z-dropdown: 1100;       /* 全局下拉：全局搜索/铃铛/头像 */
    --z-fab: 1300;            /* 悬浮 AI 球等常驻浮动按钮 */
    --z-fab-panel: 1310;      /* 浮动按钮展开面板，仅高于按钮本身 */
    --z-batchbar: 1400;       /* 批量操作浮条 */
    --z-drawer: 1500;         /* 右侧抽屉 */
    --z-modal: 1550;          /* 普通模态遮罩/窗体（含业务弹窗） */
    --z-confirm: 1600;        /* 二次/危险确认，盖普通模态 */
    --z-command: 2000;        /* 全局命令面板 Ctrl+K：盖业务弹窗、低于浮层与轻提示 */
    --z-popover: 2400;        /* 浮到 body 的菜单（如行内“更多操作”） */
    --z-tooltip: 2600;        /* 工具提示 */
    --z-toast: 2700;          /* 全局轻提示，永远最高 */
    /* 旧变量别名（JS 内联已引用，等价指向新令牌） */
    --ui-z-tip: var(--z-tooltip);
    --ui-z-drawer: var(--z-drawer);
    --ui-z-confirm: var(--z-confirm);
    --ui-z-batchbar: var(--z-batchbar);
    --ui-motion-fast: 0.15s ease;
    --ui-motion: 0.22s cubic-bezier(0.4, 0, 0.2, 1);
    --ui-shadow-pop: 0 8px 28px rgba(15, 23, 42, 0.14);
    --ui-skeleton: linear-gradient(90deg, #eef1f5 25%, #f7f8fa 37%, #eef1f5 63%);
    /* ===== 语义中性令牌（UI-P3：亮/暗主题统一驱动；亮色值等同原硬编码，视觉零变化） ===== */
    --app-bg: #f3f4f6;             /* 应用底色 */
    --surface: #ffffff;           /* 卡片/弹窗/表格等主表面 */
    --surface-2: #f9fafb;         /* 次级内嵌表面 */
    --surface-3: #f3f4f6;         /* 三级浅块/芯片底 */
    --text-strong: #111827;       /* 最强标题/数字 */
    --text-1: #374151;            /* 主正文 */
    --text-2: #6b7280;            /* 次要说明 */
    --text-3: #9ca3af;            /* 占位/最弱 */
    --line: #eef0f3;              /* 浅分隔线 */
    --line-2: #e5e7eb;            /* 常规边框 */
    --surface-hover: #f5f7fa;     /* 表面悬停底 */
    --mask: rgba(15, 23, 42, .46);/* 遮罩 */
    --info-soft-bg: #eff6ff;      /* 浅蓝信息提示底（亮色原值，暗色在 dark-theme 重映射） */
    --info-soft-line: #dbeafe;
    --info-soft-fg: #6b7280;
    color-scheme: light;
}

/* ---------------- ui-kit：Toast 补充（复用 .toast-container/.toast 既有样式） ---------------- */
.toast.toast-info, .toast.ui-toast-info { background: var(--primary-light); color: #9a3412; border: 1px solid #fed7aa; }
.ui-toast { display: inline-flex; align-items: center; gap: 8px; line-height: 1.45; }
.ui-toast-icon { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; flex: 0 0 18px; font-weight: 700; }
.ui-toast-msg { word-break: break-word; }
.ui-toast { opacity: 1; transform: translateX(0); transition: opacity .22s, transform .22s; }
.ui-toast:not(.ui-toast-show) { opacity: 0; transform: translateX(40px); }
.ui-spinner {
    display: inline-block; width: 14px; height: 14px; border-radius: 50%;
    border: 2px solid currentColor; border-top-color: transparent; animation: ui-spin .7s linear infinite;
}
.ui-spinner-btn { width: 13px; height: 13px; margin-right: 2px; }
@keyframes ui-spin { to { transform: rotate(360deg); } }
button.ui-btn-loading { pointer-events: none; opacity: .82; }

/* ---------------- ui-kit：标准空状态 ---------------- */
.ui-empty { padding: 36px 16px; text-align: center; color: var(--gray-400); }
.ui-empty-inline { padding: 22px 12px; }
.ui-empty-icon { display: flex; justify-content: center; margin-bottom: 10px; }
.ui-empty-title { font-size: 14px; font-weight: 600; color: var(--gray-500); }
.ui-empty-desc { font-size: 12.5px; color: var(--gray-400); margin-top: 6px; line-height: 1.7; }
.ui-empty-footer { margin-top: 14px; }
.ui-empty-row td { background: #fff; }

/* ---------------- ui-kit：骨架屏 shimmer ---------------- */
.ui-skeleton {
    display: block; border-radius: 4px; background: var(--ui-skeleton);
    background-size: 400% 100%; animation: ui-shimmer 1.3s ease-in-out infinite; color: transparent !important;
}
.ui-skeleton-text { height: 13px; margin: 7px 0; }
.ui-skeleton-block { height: 16px; margin: 8px 0; }
.ui-skeleton-row td { padding: 12px 16px; }
@keyframes ui-shimmer { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }

/* ---------------- ui-kit：危险操作红色二次确认 ---------------- */
.ui-confirm-overlay {
    position: fixed; inset: 0; z-index: var(--ui-z-confirm); background: rgba(15, 23, 42, .46);
    display: flex; align-items: center; justify-content: center; padding: 20px;
    opacity: 0; transition: opacity var(--ui-motion-fast);
}
.ui-confirm-overlay.ui-layer-show { opacity: 1; }
.ui-confirm {
    width: 420px; max-width: 100%; background: #fff; border-radius: var(--ui-radius-lg);
    box-shadow: var(--ui-shadow-pop); transform: scale(.94) translateY(8px); transition: transform var(--ui-motion-fast);
    overflow: hidden;
}
.ui-layer-show .ui-confirm { transform: scale(1) translateY(0); }
.ui-confirm-head { display: flex; align-items: center; gap: 10px; padding: 16px 18px 6px; }
.ui-confirm-head h4 { font-size: 16px; font-weight: 700; color: var(--gray-900); flex: 1; }
.ui-confirm-warnicon { display: inline-flex; width: 30px; height: 30px; border-radius: 50%; background: var(--danger-light); color: var(--danger); align-items: center; justify-content: center; flex: 0 0 30px; }
.ui-confirm-x { border: 0; background: transparent; font-size: 22px; line-height: 1; color: var(--gray-400); height: 30px; width: 30px; padding: 0; }
.ui-confirm-x:hover { background: var(--gray-100); color: var(--gray-700); }
.ui-confirm-body { padding: 6px 18px 16px; font-size: 14px; color: var(--gray-600); line-height: 1.8; }
.ui-confirm-text { white-space: pre-line; }
.ui-confirm-foot { display: flex; justify-content: flex-end; gap: 10px; padding: 12px 18px 16px; }
.ui-confirm-ok.btn, .ui-confirm-ok { background: var(--danger); border: 1px solid var(--danger); color: #fff; font-weight: 600; }
.ui-confirm-ok:hover { background: #c81e1e; }
.ui-confirm-ok:disabled { opacity: .75; cursor: default; }

/* ---------------- ui-kit：右侧抽屉 Drawer ---------------- */
.ui-drawer-overlay {
    position: fixed; inset: 0; z-index: var(--ui-z-drawer); background: rgba(15, 23, 42, .42);
    opacity: 0; transition: opacity var(--ui-motion);
}
.ui-drawer-overlay.ui-layer-show { opacity: 1; }
.ui-drawer {
    position: absolute; top: 0; right: 0; bottom: 0; max-width: 94vw; background: #fff;
    display: flex; flex-direction: column; box-shadow: -12px 0 40px rgba(15, 23, 42, .18);
    transform: translateX(100%); transition: transform var(--ui-motion);
}
.ui-layer-show .ui-drawer { transform: translateX(0); }
.ui-drawer-head { height: 54px; flex: 0 0 54px; display: flex; align-items: center; gap: 10px; padding: 0 16px 0 20px; border-bottom: 1px solid var(--gray-200); }
.ui-drawer-title { flex: 1; font-size: 15.5px; font-weight: 700; color: var(--gray-900); margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ui-drawer-x { border: 0; background: transparent; font-size: 24px; line-height: 1; color: var(--gray-400); height: 34px; width: 34px; padding: 0; border-radius: 6px; }
.ui-drawer-x:hover { background: var(--gray-100); color: var(--gray-700); }
.ui-drawer-body { flex: 1; overflow-y: auto; padding: 18px 20px; }
.ui-drawer-foot { flex: 0 0 auto; padding: 12px 20px; border-top: 1px solid var(--gray-200); background: var(--gray-50); display: flex; justify-content: flex-end; gap: 10px; }
/* 抽屉内长表单分组折叠（原生 details，零 JS 也能开合） */
.ui-drawer-group { border: 1px solid var(--gray-200); border-radius: var(--ui-radius-md); margin-bottom: 12px; overflow: hidden; }
.ui-drawer-group > summary {
    list-style: none; cursor: pointer; padding: 11px 14px; font-size: 14px; font-weight: 600; color: var(--gray-700);
    background: var(--gray-50); display: flex; align-items: center; justify-content: space-between;
}
.ui-drawer-group > summary::-webkit-details-marker { display: none; }
.ui-drawer-group > summary::after { content: '▾'; color: var(--gray-400); transition: transform var(--ui-motion-fast); }
.ui-drawer-group:not([open]) > summary::after { transform: rotate(-90deg); }
.ui-drawer-group > .ui-drawer-group-body, .ui-drawer-group > div { padding: 14px; }

/* ---------------- table-kit：无横向滚动 / 表格自适应 ---------------- */
.data-table.tk-fit { overflow: visible !important; -webkit-overflow-scrolling: auto; }
.data-table.tk-fit > table.tk-table { min-width: 0 !important; width: 100%; table-layout: auto; }
/* 吸顶表头：吸附在页头（.header 高 52px）之下；tbody 滚动时表头常驻 */
.data-table.tk-sticky thead th {
    position: sticky; top: var(--header-height); z-index: var(--z-sticky-head);
    box-shadow: inset 0 -1px 0 var(--gray-200);
}
.data-table.tk-sticky { border-top-left-radius: var(--ui-radius-md); border-top-right-radius: var(--ui-radius-md); }
.data-table.tk-sticky thead tr th:first-child { border-top-left-radius: var(--ui-radius-md); }
.data-table.tk-sticky thead tr th:last-child { border-top-right-radius: var(--ui-radius-md); }
/* tk-fit 下取消全局“末列 sticky 右吸附”，末列随正常流且永远完整（不被挤出视口） */
.data-table.tk-fit th:last-child, .data-table.tk-fit td:last-child { position: static !important; box-shadow: none !important; text-align: left; }
.data-table.tk-fit td:last-child { background: transparent; }
.data-table.tk-fit tbody tr:hover td:last-child { background: var(--gray-50); }

/* 列设置工具条 */
.tk-tools { display: flex; justify-content: flex-end; margin: 0 0 8px; position: relative; }
.tk-tools-right { display: flex; gap: 8px; }
.tk-colbtn {
    height: 30px; padding: 4px 12px; font-size: 12.5px; border-radius: var(--ui-radius-sm);
    border: 1px solid var(--gray-300); background: #fff; color: var(--gray-600); gap: 5px;
}
.tk-colbtn:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-light); }
.tk-colpanel {
    position: fixed; z-index: var(--z-popover); width: 220px; max-height: 320px; overflow: auto;
    background: #fff; border: 1px solid var(--gray-200); border-radius: var(--ui-radius-md);
    box-shadow: var(--ui-shadow-pop); padding: 8px;
}
/* 浮到 body 的锚定浮层统一 fixed、最高浮层级（JS 负责 left/top），免疫祖先 overflow 裁切/层叠遮挡 */
.tk-anchored-pop { position: fixed !important; right: auto !important; bottom: auto !important; z-index: var(--z-popover) !important; }
.tk-colpanel[hidden] { display: none; }
.tk-colpanel-title { font-size: 12px; color: var(--gray-400); padding: 2px 6px 8px; display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.tk-colall { display: flex; align-items: center; gap: 4px; font-size: 12px; color: var(--gray-600); cursor: pointer; user-select: none; white-space: nowrap; }
.tk-colall input { margin: 0; cursor: pointer; }
.tk-colitem { display: flex; align-items: center; gap: 8px; padding: 6px; border-radius: 4px; font-size: 13px; color: var(--gray-700); cursor: pointer; }
.tk-colitem:hover { background: var(--gray-50); }
.tk-colitem input { margin: 0; }
.tk-colitem span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tk-colitem.is-locked { color: var(--gray-400); cursor: not-allowed; }
.tk-locktag { font-size: 11px; background: var(--gray-100); border-radius: 4px; padding: 0 6px; color: var(--gray-500); }
.tk-colpanel-foot { padding: 6px 4px 2px; border-top: 1px dashed var(--gray-200); margin-top: 4px; }

/* 单元格省略悬停浮层 */
.tk-cell-tip {
    position: fixed; z-index: var(--ui-z-tip); max-width: 420px; background: rgba(17, 24, 39, .94); color: #fff;
    font-size: 12.5px; line-height: 1.7; padding: 7px 10px; border-radius: 6px; box-shadow: var(--ui-shadow-pop);
    pointer-events: none; white-space: normal; word-break: break-word;
}
.tk-cell-tip[hidden] { display: none; }

/* 统一分页增强 */
.tk-pager { outline: none; }
.tk-pager .pagination-btns button.tk-page-btn { min-width: 34px; text-align: center; }
.tk-size { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--gray-500); }
.tk-size-select { height: 30px; width: auto; padding: 4px 8px; font-size: 13px; }

/* 批量操作底部浮条 */
.ui-batchbar {
    position: fixed; left: 50%; bottom: 22px; transform: translateX(-50%); z-index: var(--ui-z-batchbar);
    display: flex; align-items: center; gap: 12px; padding: 10px 16px;
    background: var(--gray-800); color: #fff; border-radius: 999px; box-shadow: 0 10px 30px rgba(15, 23, 42, .28);
}
.ui-batchbar[hidden] { display: none; }
.ui-batchbar-count { font-size: 13.5px; font-weight: 600; }
.ui-batchbar-actions { display: flex; gap: 8px; }
.ui-batchbar-btn { height: 30px; padding: 2px 14px; border-radius: 999px; font-size: 13px; border: 1px solid rgba(255,255,255,.35); background: transparent; color: #fff; }
.ui-batchbar-btn:hover { background: rgba(255,255,255,.14); }
.ui-batchbar-primary { background: var(--primary); border-color: var(--primary); }
.ui-batchbar-primary:hover { background: var(--primary-hover); }
.ui-batchbar-danger { background: var(--danger); border-color: var(--danger); }
.ui-batchbar-clear { height: 30px; padding: 2px 14px; border-radius: 999px; font-size: 13px; background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.25); color: #fff; }

/* ---------------- 角色化首页 dashboard ---------------- */
.dash-role-chip {
    display: inline-block; margin-left: 8px; font-size: 12.5px; font-weight: 500;
    padding: 2px 12px; border-radius: 999px; background: rgba(255,255,255,.22); vertical-align: middle;
}
.dash-grid { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 16px; align-items: start; margin-bottom: 8px; }
.dash-grid-main, .dash-grid-side { min-width: 0; display: flex; flex-direction: column; gap: 16px; }
.dash-kpi { cursor: pointer; }
.dash-kpi .icon { float: right; }
.dash-panel { margin-bottom: 0; }
.dash-section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; gap: 10px; }
.dashboard-page .dash-todo { list-style: none; margin: 0; display: flex; flex-direction: column; }
.dash-todo li {
    display: flex; align-items: center; gap: 10px; padding: 11px 4px; border-bottom: 1px solid var(--gray-100);
    font-size: 13.5px; color: var(--gray-700); cursor: pointer;
}
.dash-todo li:last-child { border-bottom: 0; }
.dash-todo li span { flex: 1; }
.dash-todo li strong { font-size: 16px; color: var(--gray-900); min-width: 34px; text-align: right; }
.dash-todo li em { font-style: normal; font-size: 12px; color: var(--danger); }
.dash-todo li.is-hot strong { color: var(--danger); }
.dash-todo li:hover { background: var(--gray-50); border-radius: 6px; }
.dashboard-page .text-muted { color: var(--gray-400); font-size: 12.5px; }
.dashboard-page .text-danger { color: var(--danger) !important; }
.dashboard-page .link-btn {
    appearance: none; border: 0; background: transparent; color: #2563eb; cursor: pointer;
    font-size: 12.5px; padding: 2px 4px; border-radius: 4px;
}
.dashboard-page .link-btn:hover { background: #eff6ff; text-decoration: underline; }
.dash-quick { display: flex; flex-wrap: wrap; gap: 8px; }
.dash-tips p { font-size: 12.5px; color: var(--gray-500); line-height: 1.9; }
.dash-rem-summary { display: flex; gap: 8px; margin: 0 0 10px; }
.dash-rem-table table { font-size: 13px; }
.dash-news { padding: 4px 18px; }
.dash-news-item { padding: 12px 0; border-bottom: 1px solid var(--gray-100); }
.dash-news-item:last-child { border-bottom: 0; }
.dash-news-title { font-size: 14px; font-weight: 600; color: var(--gray-800); display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.dash-news-date { font-size: 12px; color: var(--gray-400); font-weight: 400; }
.dash-news-content { font-size: 13px; color: var(--gray-500); margin-top: 4px; line-height: 1.7; }

/* C5：全局搜索键盘导航高亮（配合 router.js 增强补丁，见 INTEGRATION.md D 节） */
.search-results-panel .search-result-item { position: relative; }
.search-results-panel .search-result-item.search-active,
.search-results-panel .search-result-item.search-active:hover {
    background: var(--primary-light);
}
.search-results-panel .search-result-item.search-active .search-result-label { color: var(--primary); font-weight: 600; }
.search-results-panel .search-group-menu { border-top: 1px dashed var(--gray-200); margin-top: 4px; padding-top: 4px; }

/* 屏幕显示时隐藏打印专用元素（print.css 中再放开） */
.print-only { display: none !important; }

/* ---------------- C5 响应式：1440 桌面与 390 窄屏均不重叠/不溢出 ---------------- */
@media (max-width: 1280px) {
    .dash-grid { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
    .ui-confirm { width: 100%; }
    .ui-drawer { width: 100% !important; max-width: 100vw; }
    .ui-batchbar { left: 12px; right: 12px; transform: none; border-radius: 12px; flex-wrap: wrap; justify-content: center; }
    .tk-colpanel { right: 0; width: min(260px, 80vw); }
    .dash-grid { grid-template-columns: 1fr; }
}
