﻿@keyframes spin { to { transform: rotate(360deg); } }
.fa{display:inline-block !important;font-family:"Font Awesome 5 Free" !important;font-style:normal !important;font-weight:900 !important;line-height:1 !important;}
.far{font-family:"Font Awesome 5 Free" !important;font-weight:400 !important;}
.fab{font-family:"Font Awesome 5 Brands" !important;font-weight:400 !important;}

/* ===== style block split ===== */

*{box-sizing:border-box;font-family:var(--font-family);margin:0;padding:0;}

/* 原生 select 统一自定义样式：去除浏览器默认外观，使用自定义箭头 + 8px 圆角 */
select{
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%2394A3B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='4 6 8 10 12 6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 10px center;
  background-size:12px;
  padding-right:28px;
  border-radius:var(--radius-input);
  cursor:pointer;
}
select::-ms-expand{display:none;}

html,body{margin:0 !important;padding:0 !important;width:100% !important;height:100%;border:0;}
body{background-color:var(--bg-canvas);color:var(--text-primary);overflow:hidden;}
.app-root{margin:0;padding:0;border:0;position:fixed;inset:0;display:flex;flex-direction:column;}

/* 台账/筛选栏通用 .filter-item */
.filter-item{display:flex;flex-direction:column;gap:4px;}
.filter-item label{font-size:var(--font-size-form-xs);color:var(--form-label-color);font-weight:500;}
.filter-item input,.filter-item select{
  height:var(--form-height);padding:var(--form-padding);
  border:var(--form-border);border-radius:var(--radius-input);
  font-size:var(--font-size-form-sm);color:var(--text-primary);
  background:var(--form-bg);outline:none;box-sizing:border-box;
  transition:border-color .15s,box-shadow .15s;
}
.filter-item input:focus,.filter-item select:focus{
  border-color:var(--form-border-focus);box-shadow:var(--form-shadow-focus);background:var(--form-bg-focus);
}
.filter-item input::placeholder{color:var(--text-muted);}

/* ===== 隽运视觉系统 v2：中性白灰 ===== */
:root{
  /* 表面色阶（中性灰，从深到浅自然过渡） */
  --bg-sidebar:#F1F3F5;      /* 侧边栏 / 顶栏（中灰） */
  --bg-canvas:#FAFBFC;       /* 页面画布底色 */
  --bg-subtle:#F1F3F5;       /* hover / 表头 */
  --bg-field:#FCFDFD;        /* 输入框底色 */
  --bg-zebra:#FCFDFD;        /* 表格偶数行斑马纹 */
  --bg-surface:#FFFFFF;      /* 卡片（纯白） */
  /* 边框 */
  --border:#E5E7EB;          /* 常规分隔 */
  --border-strong:#D1D5DB;   /* 聚焦 / 分割线 */
  /* 文字（黑色系，去除蓝相） */
  --text-primary:#000000;    /* 主标题 / 正文（纯黑） */
  --text-secondary:#333333;  /* 次级正文（深灰） */
  --text-tertiary:#666666;   /* 辅助说明（中灰） */
  --text-muted:#999999;      /* 占位符 / 禁用（浅灰） */
  /* 字体 */
  --font-family:system-ui,"Microsoft YaHei",sans-serif;
  /* 字号体系（8级语义化） */
  --font-size-xs:10px;          /* 角标/badge/小红点 */
  --font-size-sm:11px;          /* 辅助说明/小字按钮/表格文字 */
  --font-size-base:12px;        /* 卡片标题/切换标签/空状态/表单标签 */
  --font-size-md:13px;          /* 侧边栏菜单/普通按钮/抽屉列表/弹窗正文 */
  --font-size-lg:14px;          /* 主按钮/强调文字/搜索输入/登录输入 */
  --font-size-xl:16px;          /* 图标/大输入框/抽屉标题 */
  --font-size-2xl:18px;         /* 页面副标题/KPI单位 */
  --font-size-3xl:22px;         /* 页面主标题/登录页标题 */
  /* 展示字号（大字/图标/KPI） */
  --font-size-display-1:26px;   /* KPI数值 */
  --font-size-display-2:28px;   /* 大图标/空状态 */
  --font-size-display-3:30px;   /* 欢迎页大标题 */
  /* 旧变量兼容（映射到新体系） */
  --font-size-form:var(--font-size-lg);       /* 主表单输入框 / 标签文字 */
  --font-size-form-sm:var(--font-size-lg);    /* 搜索框 / 记事本输入 / 登录输入 */
  --font-size-form-xs:var(--font-size-md);    /* 个人资料 / 登录标签等小字号 */
  --font-size-table:var(--font-size-base);      /* 数据表格文字 */
  /* 表单统一样式 */
  --form-bg:#FCFDFD;                       /* 输入框底色 */
  --form-bg-focus:#FFFFFF;                 /* 聚焦时底色 */
  --form-border:1px solid var(--border);   /* 边框 */
  --form-border-strong:1.8px solid var(--border); /* 加粗边框（登录） */
  --form-border-focus:var(--border);       /* 聚焦边框色（保持原色，无蓝色） */
  --form-shadow-focus:none;                /* 聚焦光晕（去除） */
  --form-height-sm:28px;                   /* 小输入框高度（搜索栏） */
  --form-height:36px;                      /* 标准输入框高度 */
  --form-height-lg:42px;                   /* 大输入框高度（登录页） */
  --form-padding:0 12px;                   /* 标准内边距 */
  --form-padding-sm:0 9px;                 /* 小内边距（搜索框） */
  --modal-pad-y:10px;                      /* 弹窗上下内边距（统一） */
  --modal-pad-x:14px;                      /* 弹窗左右内边距（统一） */
  --form-label-color:var(--text-muted);    /* 表单标签颜色 */
  /* 品牌蓝（10% 强调色） */
  --brand:#0F68D8;           /* 主色（明亮专业蓝） */
  --shenhua-blue:#115199;    /* 申花蓝：二级菜单名称/下划线强调色 */
  --brand-hover:#1D4ED8;     /* hover */
  --brand-soft:#DBEAFE;      /* 选中浅底 / 徽章 / 光晕 */
  --brand-deep:#1E3A8A;      /* 品牌蓝上的深色文字 */
  /* 操作按钮语义色：编辑=品牌蓝，删除=红绿灯红 */
  --danger:#DC2626;          /* 删除 / 危险操作按钮 */
  --danger-soft:#FEE2E2;     /* 删除按钮 hover 浅底 */
  /* 圆角 */
  --radius-input:8px;        /* 输入框 / 下拉框圆角 */
  --radius-card:8px;         /* 卡片 / 面板圆角 */
  /* 阴影：极淡边框 + 多层柔阴影（悬浮层次，取代单一灰投影） */
  --shadow-xs:0 1px 2px rgba(15,23,42,0.04);
  --shadow-sm:0 1px 2px rgba(15,23,42,0.04),0 1px 3px rgba(15,23,42,0.05);
  --shadow-md:0 1px 3px rgba(15,23,42,0.05),0 6px 16px -6px rgba(15,23,42,0.10);
  --shadow-lg:0 4px 10px -4px rgba(15,23,42,0.08),0 20px 44px -12px rgba(15,23,42,0.20);
  /* 卡片静置 / 悬浮两档（全局统一） */
  --shadow-card:0 1px 2px rgba(15,23,42,0.04),0 6px 16px -8px rgba(30,58,95,0.10);
  --shadow-card-hover:0 2px 4px rgba(15,23,42,0.05),0 16px 32px -12px rgba(30,58,95,0.20);
  /* 动效曲线（全局统一） */
  --ease-out:cubic-bezier(0.22,1,0.36,1);
  --ease-spring:cubic-bezier(0.2,0.8,0.2,1);
}

/* ===== PC 应用字号上调一档（参考 GitHub：正文 14 / 表格 12 / 表单 15）=====
   仅作用于主应用；登录遮罩 #authOverlay 与大屏投屏 #screenMode 保持独立尺度，
   手机端由 768 媒体段自行覆盖，互不干扰 */
.app-root{
  --font-size-sm:12px;
  --font-size-base:13px;
  --font-size-md:14px;
  --font-size-lg:15px;
}
#authOverlay,#screenMode{
  --font-size-sm:11px;
  --font-size-base:12px;
  --font-size-md:13px;
  --font-size-lg:14px;
}
/* 内容区全宽铺满（不再限制 1600px 上限），大屏通过左右内边距留白，见下方 @media */

/* ===== 深色模式（data-theme="dark"）- 中性深灰（参照 IDE 面板灰度） ===== */
body[data-theme="dark"]{
  /* 表面色阶（纯中性灰，从深到浅自然过渡；整体再提亮一档） */
  --bg-sidebar:#282828;      /* 侧栏 / 顶栏 */
  --bg-canvas:#303030;       /* 页面画布底色 */
  --bg-subtle:#484848;       /* hover / 表头 */
  --bg-field:#404040;        /* 输入框底色 */
  --bg-zebra:#363636;        /* 表格偶数行斑马纹 */
  --bg-surface:#3A3A3A;      /* 卡片 / 弹窗 / 面板 */
  /* 边框 */
  --border:#545454;          /* 常规分隔 */
  --border-strong:#666666;   /* 聚焦 / 分割线 */
  /* 文字（全部提亮，保证对比度） */
  --text-primary:#FFFFFF;    /* 主标题 / 正文（纯白） */
  --text-secondary:#F0F0F0;  /* 次级正文 */
  --text-tertiary:#C6C6C6;   /* 辅助说明 */
  --text-muted:#A8A8A8;      /* 占位符 / 禁用 */
  /* 表单 */
  --form-bg:#404040;
  --form-bg-focus:#4A4A4A;
  --form-border:1px solid var(--border);
  --form-border-strong:1.8px solid var(--border);
  --form-border-focus:var(--border-strong);
  --form-shadow-focus:none;
  --form-label-color:var(--text-tertiary);
  /* 品牌色（深底下用更鲜亮的电光蓝做点缀） */
  --brand:#4D8EFF;
  --brand-hover:#82B5FF;
  --brand-soft:rgba(77,142,255,0.24);
  --brand-deep:#BFDBFE;
  --shenhua-blue:#4D8EFF;
  /* 危险色（深色下调亮） */
  --danger:#FF6B6B;
  --danger-soft:rgba(255,107,107,0.18);
  /* 阴影：深色下加大黑度、收窄扩散 */
  --shadow-xs:0 1px 2px rgba(0,0,0,0.40);
  --shadow-sm:0 1px 2px rgba(0,0,0,0.45),0 2px 4px rgba(0,0,0,0.30);
  --shadow-md:0 2px 6px rgba(0,0,0,0.45),0 10px 24px -8px rgba(0,0,0,0.55);
  --shadow-lg:0 6px 14px -4px rgba(0,0,0,0.55),0 24px 48px -12px rgba(0,0,0,0.70);
  --shadow-card:0 1px 2px rgba(0,0,0,0.40),0 8px 20px -10px rgba(0,0,0,0.55);
  --shadow-card-hover:0 2px 6px rgba(0,0,0,0.50),0 18px 36px -12px rgba(0,0,0,0.65);
  color-scheme: dark;
}

/* ============================================================
   深色模式 · 组件级补丁（覆盖硬编码的白色背景/文字/边框）
   ============================================================ */

/* --- 页面根容器 --- */
body[data-theme="dark"] .main-content,
body[data-theme="dark"] .page-content-wrap,
body[data-theme="dark"] .page-inner,
body[data-theme="dark"] .page{
  background:var(--bg-canvas);
}

/* --- 顶栏 & 侧栏 --- */
body[data-theme="dark"] .global-top-bar{
  background:var(--bg-sidebar);
  border-bottom-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .sidebar,
body[data-theme="dark"] body.sidebar-collapsed .sidebar{
  background:var(--bg-sidebar);
  border-right-color:var(--border);
  color:var(--text-secondary);
}
body[data-theme="dark"] .menu-item{
  color:var(--text-secondary);
}
body[data-theme="dark"] .sidebar-footer:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .menu-item.active{
  color:var(--brand);
}
/* 非激活菜单：常态无底色，hover 也不铺灰底，仅文字/图标变蓝；只保留 active 的蓝色按钮 */
body[data-theme="dark"] .menu-left{
  background:transparent;
}
body[data-theme="dark"] .menu-item:hover{
  background:transparent;
}
body[data-theme="dark"] .menu-item:hover .menu-left{
  background:transparent;
  color:var(--brand);
}
body[data-theme="dark"] .sidebar.collapsed .menu-title,
body[data-theme="dark"] .sidebar.collapsed .menu-icon{
  color:var(--text-secondary);
}
body[data-theme="dark"] .sidebar.collapsed .menu-item.active .menu-icon,
body[data-theme="dark"] .sidebar.collapsed .menu-item.active .menu-left{
  color:var(--brand);
}
body[data-theme="dark"] .sidebar-title{
  color:var(--text-primary);
}
/* Logo：深色模式换用白字版 logo（隽运转白，徽章保持原色） */
body[data-theme="dark"] #sidebarLogo{
  content:url("static/logo-sm-dark.png");
}

/* --- 卡片 / 面板 / 弹窗 / 抽屉 通用 --- */
body[data-theme="dark"] .tool-modal-panel,
body[data-theme="dark"] .confirm-modal > div,
body[data-theme="dark"] .profile-card,
body[data-theme="dark"] .dashboard-stat-card,
body[data-theme="dark"] .dashboard-tool-card,
body[data-theme="dark"] .notice-drawer,
body[data-theme="dark"] .user-menu-dropdown,
body[data-theme="dark"] .toast,
body[data-theme="dark"] .pf-nav,
body[data-theme="dark"] .login-card,
body[data-theme="dark"] .disk-detail,
body[data-theme="dark"] .fm-toolbar,
body[data-theme="dark"] .fm-breadcrumb,
body[data-theme="dark"] .fm-upload-zone,
body[data-theme="dark"] .fm-new-folder-dialog,
body[data-theme="dark"] .fm-file-preview,
body[data-theme="dark"] .notes-edit-panel,
body[data-theme="dark"] .notes-list-panel,
body[data-theme="dark"] .notes-sidebar,
body[data-theme="dark"] .notes-item,
body[data-theme="dark"] .form-panel,
body[data-theme="dark"] .search-panel,
body[data-theme="dark"] .filter-bar,
body[data-theme="dark"] .toolbar,
body[data-theme="dark"] .data-panel,
body[data-theme="dark"] .table-wrap,
body[data-theme="dark"] .pagination-wrap,
body[data-theme="dark"] .detail-panel,
body[data-theme="dark"] .info-card,
body[data-theme="dark"] .stat-card{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-primary);
}

/* --- 首页 dashboard 细节 --- */
/* 数据/工具面板是纯透明承载容器，不加整幅底板（只保留内部 KPI/趋势图等单卡片底色） */
body[data-theme="dark"] .dashboard-panel{
  background:transparent;
  border-color:transparent;
}
/* 个人中心/系统设置/耗材页：.profile-panel 同样是透明承载容器，只保留内部 .profile-card 单卡片底色 */
body[data-theme="dark"] .profile-panel{
  background:transparent;
  border-color:transparent;
}
body[data-theme="dark"] .dashboard-panel-tab{
  color:var(--text-tertiary);
}
body[data-theme="dark"] .dashboard-panel-tab.active,
body[data-theme="dark"] .bill-panel-tab.active{
  background:#4A4A4A;
  color:var(--brand);
  box-shadow:none;
}
body[data-theme="dark"] .dashboard-stat-label{
  color:var(--text-tertiary);
}
body[data-theme="dark"] .dashboard-stat-value{
  color:var(--text-primary);
}
body[data-theme="dark"] .dashboard-tool-card-cover{
  background:var(--bg-field) !important;
  color:var(--text-tertiary) !important;
}
body[data-theme="dark"] .dashboard-tool-card:hover{
  border-color:var(--border-strong);
  background:var(--bg-subtle);
}
body[data-theme="dark"] .dashboard-tool-card-title{
  color:var(--text-primary);
}
body[data-theme="dark"] .dashboard-tool-card-desc{
  color:var(--text-tertiary);
}

/* --- 弹窗细节 --- */
body[data-theme="dark"] .tool-modal-header{
  color:var(--text-primary);
  border-bottom-color:var(--border);
}
body[data-theme="dark"] .tool-modal-close{
  color:var(--text-tertiary);
}
body[data-theme="dark"] .tool-modal-close:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
}
body[data-theme="dark"] .tool-modal-footer{
  border-top-color:var(--border);background:var(--bg-surface);
}

/* --- 通知抽屉细节 --- */
body[data-theme="dark"] .notice-drawer-header,
body[data-theme="dark"] .notice-drawer-footer{
  border-color:var(--border);
}
body[data-theme="dark"] .notice-drawer-item{
  border-bottom-color:var(--border);
}
body[data-theme="dark"] .notice-drawer-item:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .notice-drawer-item.unread{
  background:var(--brand-soft);
}
body[data-theme="dark"] .notice-drawer-item.unread:hover{
  background:var(--brand-soft);
  filter:brightness(1.1);
}
body[data-theme="dark"] .notice-drawer-item.expanded{
  background:var(--brand-soft);
  border-left-color:var(--brand);
}
body[data-theme="dark"] .notice-drawer-item-title{
  color:var(--text-primary);
}
body[data-theme="dark"] .notice-drawer-item-content{
  color:var(--text-secondary);
}
body[data-theme="dark"] .notice-drawer-item-meta{
  color:var(--text-tertiary);
}
body[data-theme="dark"] .notice-drawer-item-type{
  background:var(--bg-subtle) !important;
  color:var(--text-secondary) !important;
}
body[data-theme="dark"] .notice-drawer-btn:hover,
body[data-theme="dark"] .notice-drawer-close:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
}

/* --- 用户菜单下拉 --- */
body[data-theme="dark"] .user-menu-item{
  color:var(--text-primary);
}
body[data-theme="dark"] .user-menu-item:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .user-menu-divider{
  border-color:var(--border);
}

/* --- 表格 --- */
body[data-theme="dark"] table th{
  background:var(--bg-subtle);
  color:var(--text-secondary);
  border-color:var(--border);
}
body[data-theme="dark"] table td{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] table tr:hover td{
  background:var(--bg-subtle) !important;
}

/* --- 表单输入 --- */
body[data-theme="dark"] input,
body[data-theme="dark"] textarea,
body[data-theme="dark"] select{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] input::placeholder,
body[data-theme="dark"] textarea::placeholder{
  color:var(--text-muted);
}
body[data-theme="dark"] input:focus,
body[data-theme="dark"] textarea:focus,
body[data-theme="dark"] select:focus{
  background:var(--form-bg-focus);
  border-color:var(--form-border-focus);
  box-shadow:var(--form-shadow-focus);
}
body[data-theme="dark"] .filter-item select,
body[data-theme="dark"] .filter-item input{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}

/* --- 按钮 --- */
body[data-theme="dark"] .profile-btn-primary,
body[data-theme="dark"] .btn-primary{
  color:#fff;
}
body[data-theme="dark"] .profile-btn-secondary,
body[data-theme="dark"] .btn-secondary,
body[data-theme="dark"] .btn-success{
  background:var(--bg-subtle);
  color:var(--text-primary);
  border-color:var(--border);
}
body[data-theme="dark"] .profile-btn-secondary:hover,
body[data-theme="dark"] .btn-secondary:hover,
body[data-theme="dark"] .btn-success:hover{
  background:var(--border);
  color:var(--text-primary);
}
/* 实心主钮深色态：hover 用品牌浅蓝（与浅色主钮区分层级） */
body[data-theme="dark"] .btn-primary:hover,
body[data-theme="dark"] .profile-btn-primary:hover,
body[data-theme="dark"] .notes-btn-primary:hover{
  background:#6BA4F5;border-color:#6BA4F5;color:#fff;
}
/* 危险钮深色态：透明底红字红边，hover 暗红底 */
body[data-theme="dark"] .btn-danger,
body[data-theme="dark"] .profile-btn-danger,
body[data-theme="dark"] .confirm-modal-footer .btn-danger{
  background:transparent;border-color:var(--danger);color:#F87171;
}
body[data-theme="dark"] .btn-danger:hover,
body[data-theme="dark"] .profile-btn-danger:hover,
body[data-theme="dark"] .confirm-modal-footer .btn-danger:hover{
  background:rgba(220,38,38,.18);color:#FCA5A5;
}

/* --- profile / 个人中心 / 设置 --- */
body[data-theme="dark"] .profile-panel-header h2{
  color:var(--text-primary);
}
body[data-theme="dark"] .profile-card-title{
  color:var(--text-primary);
}
body[data-theme="dark"] .profile-toggle-row{
  border-bottom-color:var(--border);
}
body[data-theme="dark"] .profile-toggle-label{
  color:var(--text-primary);
}
body[data-theme="dark"] .profile-form-row{
  color:var(--text-secondary);
}
body[data-theme="dark"] .profile-form-input{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .pf-nav-item{
  color:var(--text-secondary);
}
body[data-theme="dark"] .pf-nav-item:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .pf-nav-item.active{
  background:var(--brand-soft);
  color:var(--brand);
}
body[data-theme="dark"] .page-subtab:hover{
  color:var(--brand);
  background:transparent;
}
body[data-theme="dark"] .pf-nav-title{
  color:var(--text-muted);
}
body[data-theme="dark"] .profile-edit-link{
  color:var(--brand);
}

/* --- 登录页：固定深色高级风，不随系统主题变化，故无主题覆盖 --- */
/* 浏览器自动填充：系统深色主题下，压掉全站输入框默认白底 */
body[data-theme="dark"] input:-webkit-autofill,
body[data-theme="dark"] input:-webkit-autofill:hover,
body[data-theme="dark"] input:-webkit-autofill:focus{
  -webkit-text-fill-color:var(--text-primary);
  caret-color:var(--text-primary);
  -webkit-box-shadow:0 0 0 1000px var(--form-bg) inset;
  transition:background-color 9999s ease-out;
}

/* --- 杂项 --- */
body[data-theme="dark"] hr{
  border-color:var(--border);
}
body[data-theme="dark"] .disk-warning{
  background:var(--danger-soft);
  color:var(--danger);
}
body[data-theme="dark"] .disk-summary{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .disk-summary-label{
  color:var(--text-secondary);
}
body[data-theme="dark"] .notes-count-badge{
  background:var(--danger);
  color:#fff;
}

/* --- 滚动条：全站细滚动条（WebKit / Edge / Chrome） --- */
::-webkit-scrollbar{width:4px;height:4px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{
  background:#C7CED9;border-radius:4px;
}
::-webkit-scrollbar-thumb:hover{background:#94A3B8;}
::-webkit-scrollbar-thumb:active{background:#7C889E;}
::-webkit-scrollbar-button{display:none;width:0;height:0;}
::-webkit-scrollbar-corner{background:transparent;}
/* Firefox */
html{scrollbar-width:thin;scrollbar-color:#C7CED9 transparent;}

body[data-theme="dark"]{scrollbar-width:thin;scrollbar-color:#4A4A4A transparent;}
body[data-theme="dark"] ::-webkit-scrollbar{width:4px;height:4px;}
body[data-theme="dark"] ::-webkit-scrollbar-button{display:none;width:0;height:0;}
body[data-theme="dark"] ::-webkit-scrollbar-thumb{
  background:#4A4A4A;border:none;
}
body[data-theme="dark"] ::-webkit-scrollbar-thumb:hover{
  background:#5E5E5E;background-clip:padding-box;
}
body[data-theme="dark"] ::-webkit-scrollbar-track{
  background:transparent;
}

/* ============================================================
   深色模式 · 业务模块批量覆盖
   （白底容器→surface，次白→zebra/field，浅灰hover/表头→subtle）
   ============================================================ */

/* --- 用户下拉（.user-dropdown 是真实类名） --- */
body[data-theme="dark"] .user-dropdown,
body[data-theme="dark"] .user-dropdown::before{
  background:var(--bg-surface);
  border-color:var(--border);
  box-shadow:var(--shadow-lg);
}
body[data-theme="dark"] .user-dropdown-head{
  border-bottom-color:var(--border);
}
body[data-theme="dark"] .user-dropdown-name{
  color:var(--text-primary);
}
body[data-theme="dark"] .user-dropdown-role{
  color:var(--text-tertiary);
}
body[data-theme="dark"] .user-dropdown-group{
  border-top-color:var(--border);
}
body[data-theme="dark"] .user-menu-item{
  color:var(--text-primary);
}
body[data-theme="dark"] .user-menu-item:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .user-menu-item--danger{
  color:var(--danger);
}
body[data-theme="dark"] .topbar-action-btn:hover{
  background:var(--bg-subtle);
}

/* --- 通用业务表格（通知/管理员/首页最近/文件/台账） --- */
body[data-theme="dark"] .notice-table th,
body[data-theme="dark"] .admin-user-table th,
body[data-theme="dark"] .dashboard-recent-table th,
body[data-theme="dark"] .fm-table thead th,
body[data-theme="dark"] .lt-table thead th{
  background:var(--bg-subtle);
  color:var(--text-secondary);
  border-color:var(--border);
}
body[data-theme="dark"] .notice-table td,
body[data-theme="dark"] .admin-user-table td,
body[data-theme="dark"] .dashboard-recent-table td,
body[data-theme="dark"] .fm-table td,
body[data-theme="dark"] .lt-table td,
body[data-theme="dark"] .lt-timeline-row td{
  background:var(--bg-surface);
  color:var(--text-primary);
  border-color:var(--border);
}
body[data-theme="dark"] .notice-table tr:hover td,
body[data-theme="dark"] .admin-user-table tr:hover td,
body[data-theme="dark"] .fm-table tbody tr:hover td,
body[data-theme="dark"] .lt-table tbody tr:hover,
body[data-theme="dark"] .lt-row:hover,
body[data-theme="dark"] .lt-timeline-row:hover td{
  background:var(--bg-subtle) !important;
}
body[data-theme="dark"] .admin-user-table .role-dropdown{
  background:var(--bg-surface);
  border-color:var(--border);
  box-shadow:var(--shadow-md);
}
body[data-theme="dark"] .admin-user-table .role-dropdown-item:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .admin-user-table .remark-edit-input{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .admin-role-tag{
  background:var(--bg-subtle) !important;
  color:var(--text-secondary) !important;
}
body[data-theme="dark"] .notice-table-wrap{
  background:var(--bg-surface);
}
/* 表格内彩色状态标签：深色下用半透明底 */
body[data-theme="dark"] .status-tag.draft,
body[data-theme="dark"] .notice-type-tag,
body[data-theme="dark"] .qec-tag{
  background:var(--bg-subtle) !important;
  color:var(--text-secondary) !important;
}
body[data-theme="dark"] .status-tag.pending,
body[data-theme="dark"] .status-tag.doing,
body[data-theme="dark"] .notice-type-tag.type-approval{
  background:rgba(245,158,11,0.15) !important;
  color:#FBBF24 !important;
}

/* --- 首页看板 KPI / 区块 / 图表占位 --- */
body[data-theme="dark"] .dashboard-kpi-card,
body[data-theme="dark"] .dashboard-section{
  background:var(--bg-surface);
  border-color:var(--border);
}
body[data-theme="dark"] .dashboard-chart-placeholder{
  background:var(--bg-field);
  border-color:var(--border);
  color:var(--text-muted);
}
body[data-theme="dark"] .dashboard-panel-tabs,
body[data-theme="dark"] .bill-panel-tabs,
body[data-theme="dark"] .lm-tabs{
  background:var(--bg-subtle);
}

/* --- 文件管理 fm-* --- */
body[data-theme="dark"] .fm-nav-btn,
body[data-theme="dark"] .fm-tb-btn,
body[data-theme="dark"] .fm-view-btn,
body[data-theme="dark"] .fm-page-btn,
body[data-theme="dark"] .fm-page-size{
  background:var(--bg-surface);
  color:var(--text-secondary);
  border-color:var(--border);
}
body[data-theme="dark"] .fm-nav-btn:hover:not(:disabled),
body[data-theme="dark"] .fm-tb-btn:hover,
body[data-theme="dark"] .fm-view-btn:hover,
body[data-theme="dark"] .fm-page-btn:hover:not(:disabled),
body[data-theme="dark"] .fm-grid-ops button:hover,
body[data-theme="dark"] .fm-batch-op-item:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
  border-color:var(--border-strong);
}
body[data-theme="dark"] .fm-batch-op-menu,
body[data-theme="dark"] .fm-disk-pop,
body[data-theme="dark"] .fm-disk-pop::before,
body[data-theme="dark"] .fm-context-menu,
body[data-theme="dark"] .fm-upload-panel,
body[data-theme="dark"] .cc-select-dropdown,
body[data-theme="dark"] .bc-cust-drop{
  background:var(--bg-surface);
  border-color:var(--border);
  box-shadow:var(--shadow-lg);
  color:var(--text-primary);
}
body[data-theme="dark"] .fm-context-menu-item:hover,
body[data-theme="dark"] .cc-select-list .cc-option:hover,
body[data-theme="dark"] .cc-select-add:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .fm-main-body,
body[data-theme="dark"] .fm-grid,
body[data-theme="dark"] .fm-empty{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-tertiary);
}
body[data-theme="dark"] .fm-grid-card{
  background:var(--bg-surface);
  border-color:var(--border);
}
body[data-theme="dark"] .fm-grid-card:hover{
  background:var(--bg-subtle);
  border-color:var(--border-strong);
}
body[data-theme="dark"] .fm-grid-card .fm-grid-name{
  color:var(--text-primary);
}
body[data-theme="dark"] .fm-table{
  background:var(--bg-surface);
}
body[data-theme="dark"] .fm-upload-header{
  background:var(--bg-field);
  border-bottom-color:var(--border);
}
body[data-theme="dark"] .fm-drop-zone{
  background:var(--bg-field);
  border-color:var(--border-strong);
  color:var(--text-tertiary);
}
body[data-theme="dark"] .fm-upload-total-bar,
body[data-theme="dark"] .fm-up-row-bar{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .fm-up-row{
  background:var(--bg-field);
  border-color:var(--border);
}
body[data-theme="dark"] .fm-upload-footer{
  background:var(--bg-surface);
  border-top-color:var(--border);
}

/* --- 记事本 notes-* --- */
body[data-theme="dark"] .notes-tab{
  background:var(--bg-field);
  color:var(--text-tertiary);
}
body[data-theme="dark"] .notes-tab:hover{
  background:var(--bg-subtle);
  color:var(--brand);
}
body[data-theme="dark"] .note-card,
body[data-theme="dark"] .notes-reminder-dialog,
body[data-theme="dark"] .notes-reminder-content{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .note-card:hover{
  background:var(--bg-subtle);
  border-color:var(--border-strong);
}
body[data-theme="dark"] .note-remind,
body[data-theme="dark"] .notes-remind{
  color:var(--text-tertiary);
}
body[data-theme="dark"] .note-btn-complete:hover,
body[data-theme="dark"] .note-btn-uncomplete:hover,
body[data-theme="dark"] .note-btn-remind:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
}
body[data-theme="dark"] .note-btn-delete:hover{
  background:var(--bg-subtle);
  color:var(--danger);
}
body[data-theme="dark"] .notes-reminder-shortcut,
body[data-theme="dark"] .notes-reminder-cancel{
  background:var(--bg-subtle);
  color:var(--text-secondary);
}
body[data-theme="dark"] .notes-reminder-cancel:hover{
  background:var(--border);
}
body[data-theme="dark"] .notes-btn-primary:hover{
  background:var(--bg-subtle);
}

/* --- 台账 lm-* / lt-* / lcc-* --- */
body[data-theme="dark"] .lt-toolbar,
body[data-theme="dark"] .lt-card,
body[data-theme="dark"] .lcc-panel,
body[data-theme="dark"] .ledger-pagination-wrap,
body[data-theme="dark"] .lt-table-wrap{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .lt-stat-card{
  background:var(--bg-surface);
  border-color:var(--border);
}
body[data-theme="dark"] .lt-stat-overview{border-color:var(--border);}
@media (max-width:1280px){
  body[data-theme="dark"] .lt-stat-overview{border-bottom-color:var(--border);}
}
body[data-theme="dark"] .lt-stat-card .lt-mini-bar{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .lt-remark-tip,
body[data-theme="dark"] .lt-empty{
  background:var(--bg-field);
  color:var(--text-tertiary);
}
body[data-theme="dark"] .lt-step-cell.skipped{
  color:var(--text-muted);
}
body[data-theme="dark"] .lt-tl-dot,
body[data-theme="dark"] .lt-step .num,
body[data-theme="dark"] .lt-step .who{
  background:var(--bg-subtle);
  color:var(--text-secondary);
  border-color:var(--border-strong);
}
body[data-theme="dark"] .lt-tl-dot.current,
body[data-theme="dark"] .lt-step.active .num{
  background:var(--brand);
  color:#fff;
  border-color:var(--brand);
}
body[data-theme="dark"] .lt-tl-dot.skipped{
  background:var(--bg-field);
  color:var(--text-muted);
}
body[data-theme="dark"] .lt-tl-line{
  background:var(--border);
}
body[data-theme="dark"] .lt-flow,
body[data-theme="dark"] .lt-step{
  color:var(--text-tertiary);
}
body[data-theme="dark"] .lt-param-btn,
body[data-theme="dark"] .lcc-tag-fixed{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-secondary);
}
body[data-theme="dark"] .lt-param-btn:hover,
body[data-theme="dark"] .lt-param-btn-inline:hover,
body[data-theme="dark"] .lcc-item:hover,
body[data-theme="dark"] .lt-memo-edit-btn:hover{
  background:var(--bg-subtle);
  color:var(--brand);
}
body[data-theme="dark"] .lt-memo-del-btn:hover{
  background:var(--bg-subtle);
  color:var(--danger);
}
body[data-theme="dark"] .ledger-params-form input,
body[data-theme="dark"] .ledger-params-form textarea,
body[data-theme="dark"] .pager-input{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .lm-create-form .filter-item .opt-mark{
  background:var(--bg-subtle);
}

/* --- 报价弹窗：编辑区深色（A4 纸张预览保持白色不动） --- */
body[data-theme="dark"] #quoteModal .quote-form-wrap > details.quote-acc,
body[data-theme="dark"] .quote-acc{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .quote-field input,
body[data-theme="dark"] .quote-field select,
body[data-theme="dark"] .quote-form-table input,
body[data-theme="dark"] .quote-form-table select,
body[data-theme="dark"] .q-terms > li textarea{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .quote-form-table th,
body[data-theme="dark"] .q-preview-table th{
  background:var(--bg-subtle);
  color:var(--text-secondary);
  border-color:var(--border);
}
body[data-theme="dark"] .quote-form-table tfoot td{
  background:var(--bg-zebra);
  border-color:var(--border);
}
body[data-theme="dark"] .q-terms > li{
  background:var(--bg-surface);
  border-color:var(--border);
}
body[data-theme="dark"] .q-mini-btn:hover,
body[data-theme="dark"] .quote-form-table .q-del-btn:hover{
  background:var(--bg-subtle);
}
/* 导出面板舞台深色，纸张本身仍白 */
body[data-theme="dark"] .quote-export-panel{
  background:var(--bg-canvas);
}
body[data-theme="dark"] .q-export-card{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .q-export-card .qec-check{
  border-color:var(--border-strong);
}
body[data-theme="dark"] .qep-preview-label{
  color:var(--text-tertiary);
}

/* --- 聊天机器人 --- */
body[data-theme="dark"] .chatbot-panel{
  background:var(--bg-surface);
  border-color:var(--border);
  box-shadow:var(--shadow-lg);
}
body[data-theme="dark"] .chatbot-body{
  background:var(--bg-canvas);
}
body[data-theme="dark"] .chatbot-msg.bot .chatbot-msg-bubble{
  background:var(--bg-subtle);
  color:var(--text-primary);
}
body[data-theme="dark"] .chatbot-input-area{
  background:var(--bg-surface);
  border-top-color:var(--border);
}
body[data-theme="dark"] .chatbot-input{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .chatbot-input:focus{
  background:var(--form-bg-focus);
  border-color:var(--border-strong);
}
body[data-theme="dark"] .chatbot-quick{
  border-color:var(--border);
}
body[data-theme="dark"] .chatbot-quick-btn:hover{
  background:var(--bg-subtle);
}

/* --- 其他弹窗 / 面板 / 控件 --- */
body[data-theme="dark"] .confirm-modal-box,
body[data-theme="dark"] .profile-edit-panel,
body[data-theme="dark"] .calc-process-panel,
body[data-theme="dark"] .calc-process-panel::before,
body[data-theme="dark"] .result-item,
body[data-theme="dark"] .formula-panel,
body[data-theme="dark"] .contract-panel{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .confirm-modal-icon{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .confirm-modal-footer{
  border-top-color:var(--border);
}
body[data-theme="dark"] .confirm-modal-footer .btn-default:hover,
body[data-theme="dark"] .btn-success:hover,
body[data-theme="dark"] .btn-clear:hover,
body[data-theme="dark"] .btn-reset:hover,
body[data-theme="dark"] .as-btn-edit:hover,
body[data-theme="dark"] .page-btn:hover:not(:disabled){
  background:var(--bg-subtle);
}
body[data-theme="dark"] .profile-edit-header,
body[data-theme="dark"] .fm-upload-header,
body[data-theme="dark"] .calc-process-trigger{
  background:var(--bg-field);
  border-color:var(--border);
  color:var(--text-secondary);
}
body[data-theme="dark"] .profile-edit-close:hover,
body[data-theme="dark"] .lcc-close:hover,
body[data-theme="dark"] .panel-close-btn:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
}
body[data-theme="dark"] .cc-select-trigger{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] #formulaTextarea,
body[data-theme="dark"] #contractText{
  background:var(--form-bg);
  color:var(--text-primary);
  border-color:var(--border);
}
/* 复合筛选框容器（首页月份选择/台账筛选/收款弹窗等通用）：深底深边 */
body[data-theme="dark"] .filter-item{
  background:var(--bg-field);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .filter-item textarea{
  background:var(--bg-field);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .filter-item:focus-within{
  border-color:var(--brand);
  box-shadow:0 0 0 3px rgba(77,142,255,0.15);
}
/* 纯按钮容器：保持无框无底（原浅色设计如此） */
body[data-theme="dark"] .filter-item:has(button){
  background:transparent;
  border-color:transparent;
}
body[data-theme="dark"] .filter-item:has(button):focus-within{
  box-shadow:none;
  border-color:transparent;
}
/* textarea 变体：外层容器无框，边框由 textarea 自身提供 */
body[data-theme="dark"] .filter-item:has(textarea){
  background:transparent;
  border-color:transparent;
}
body[data-theme="dark"] .pay-form-grid .filter-item{
  background:var(--bg-field);
}

/* --- 个人中心开关 / 密码强度条 / 磁盘项 --- */
body[data-theme="dark"] .profile-switch{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .profile-switch::after{
  background:var(--bg-surface);
}
body[data-theme="dark"] .profile-pwd-bar{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .disk-clean-item{
  background:var(--bg-surface);
  border-color:var(--border);
}
body[data-theme="dark"] .disk-action:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .as-wo-done{
  background:var(--bg-subtle);
  color:var(--text-secondary);
}
body[data-theme="dark"] .cons-cat-item:hover,
body[data-theme="dark"] #page-consumable .cons-cat-manage:hover{
  background:var(--bg-subtle);
}

/* --- 深色下硬编码灰字提亮 --- */
body[data-theme="dark"] .fm-grid-card .fm-grid-meta,
body[data-theme="dark"] .fm-table .fm-col-meta,
body[data-theme="dark"] .lt-stat-card .lt-stat-label{
  color:var(--text-tertiary);
}

/* --- 精确补丁（与原选择器一一对应，保证命中） --- */
body[data-theme="dark"] .profile-sidebar{
  background:var(--bg-sidebar);
  border-right-color:var(--border);
}
body[data-theme="dark"] .disk-summary-card{
  background:var(--bg-surface);
  border-color:var(--border);
}
body[data-theme="dark"] .lm-tab:hover{
  background:var(--bg-surface);
  color:var(--brand);
}
body[data-theme="dark"] .lm-tabs{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .tool-modal .tool-modal-panel{
  background:var(--bg-surface);
  color:var(--text-primary);
}
body[data-theme="dark"] .tool-modal .tool-modal-header{
  background:var(--bg-surface);
  border-bottom-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .tool-modal .tool-modal-close:hover,
body[data-theme="dark"] .fm-upload-close:hover,
body[data-theme="dark"] .admin-user-table .role-edit-icon:hover,
body[data-theme="dark"] .admin-user-table .copy-credential-icon:hover,
body[data-theme="dark"] .topbar-logo-section .sidebar-toggle:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
}
body[data-theme="dark"] .confirm-modal-footer .btn-danger:hover{
  background:var(--bg-subtle);
}
body[data-theme="dark"] .pf-nav .page-subtab{
  background:transparent;
  color:var(--text-secondary);
}
body[data-theme="dark"] .pf-nav .page-subtab:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
}
/* 全局 th/td（与原规则同元素、提高优先级） */
body[data-theme="dark"] th{
  background:var(--bg-subtle);
  color:var(--text-secondary);
  border-color:var(--border);
}
body[data-theme="dark"] td{
  background:var(--bg-surface);
  color:var(--text-primary);
  border-color:var(--border);
}
body[data-theme="dark"] tr:hover td{
  background:var(--bg-subtle);
}
/* 台账时间线/备忘录基础态 */
body[data-theme="dark"] .lt-timeline-row,
body[data-theme="dark"] .lt-memo-edit-btn,
body[data-theme="dark"] .lt-memo-del-btn,
body[data-theme="dark"] .lt-tl-rollback-btn{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-secondary);
}
body[data-theme="dark"] .as-btn-del:hover{
  background:var(--bg-subtle);
  color:var(--danger);
}
/* 报价导出舞台（舞台深色，里面 A4 纸保持白色） */
body[data-theme="dark"] .qep-preview-stage{
  background:var(--bg-canvas);
}
body[data-theme="dark"] .qep-close:hover{
  background:var(--bg-subtle);
  color:var(--text-primary);
}
/* 聊天机器人用户头像 */
body[data-theme="dark"] .chatbot-msg.user .chatbot-msg-avatar{
  background:var(--brand);
  color:#fff;
}

/* --- 深色模式：硬编码深色文字提亮 --- */
body[data-theme="dark"] .notes-reminder-title,
body[data-theme="dark"] .fm-upload-title,
body[data-theme="dark"] .history-item,
body[data-theme="dark"] .lt-card-title .cust,
body[data-theme="dark"] .lt-card-meta span b,
body[data-theme="dark"] .lt-memo-card-user{
  color:var(--text-primary);
}
body[data-theme="dark"] .fm-disk-chip-text,
body[data-theme="dark"] .fm-disk-pop-grid b,
body[data-theme="dark"] .pager-info,
body[data-theme="dark"] .pager-info b,
body[data-theme="dark"] .pager-jump,
body[data-theme="dark"] .lt-step .t,
body[data-theme="dark"] .lcc-label,
body[data-theme="dark"] .lt-memo-card-content,
body[data-theme="dark"] .pay-form-grid .filter-item label{
  color:var(--text-secondary);
}
body[data-theme="dark"] .pf-nav .page-subtab i{
  color:inherit;
}
body[data-theme="dark"] .pay-form-grid .filter-item input,
body[data-theme="dark"] .pay-form-grid .filter-item select{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}

/* --- 行内 style 硬编码的深色图标 / 小字提亮（!important 才能压过行内样式） --- */
body[data-theme="dark"] [style*="color:#1E3A5F"]{color:#82B5FF !important;}
body[data-theme="dark"] [style*="color:#94A3B8"]{color:#C6C6C6 !important;}
body[data-theme="dark"] [style*="color:#475569"]{color:#D2D2D2 !important;}
body[data-theme="dark"] [style*="color:#64748B"],
body[data-theme="dark"] [style*="color:#86909C"]{color:#C6C6C6 !important;}
body[data-theme="dark"] [style*="color:#334155"]{color:#ECECEC !important;}
/* 子账号「初始密码」只读框行内浅底 #F4F6F9 */
body[data-theme="dark"] [style*="#F4F6F9" i]{
  background:var(--bg-field) !important;
  color:var(--text-secondary) !important;
}
/* 耗材字段配置：JS 生成的字段行整行白底白框 */
body[data-theme="dark"] .cc-field-row{
  background:var(--bg-surface) !important;
  border-color:var(--border) !important;
}
/* A4 报价白纸预览区豁免：纸内序号保持打印用原灰色，不被上面的行内色提亮规则改浅 */
body[data-theme="dark"] .q-page [style*="color:#94A3B8"]{color:#94A3B8 !important;}
/* KPI 环比上涨（原 #1c6b3f 深绿在深底上不可见） */
body[data-theme="dark"] .dashboard-kpi-delta.up{color:#5BE895 !important;}
/* 白色提示浮层（台账导入失败 tip） */
body[data-theme="dark"] #ledgerImportFailTip{
  background:var(--bg-surface) !important;
  border-color:var(--border) !important;
}
/* 耗材搜索框：白底深字 */
body[data-theme="dark"] #consumableSearch{
  background:var(--form-bg) !important;
  border-color:var(--border) !important;
  color:var(--text-primary) !important;
}
/* 新建文件夹「当前目录」浅蓝 chip */
body[data-theme="dark"] #fmMkdirTargetFolder{
  background:var(--bg-subtle) !important;
}
/* 耗材字段排序列表浅底容器 */
body[data-theme="dark"] #ccFieldList{
  background:var(--bg-field) !important;
  border-color:var(--border) !important;
}
/* 财务对账 / 收款筛选条：JS 模板行内白底输入框、下拉（行内样式必须 ID + !important） */
body[data-theme="dark"] #billFilterCust,
body[data-theme="dark"] #billFilterStatus,
body[data-theme="dark"] #payFilterCust,
body[data-theme="dark"] #payFilterStart,
body[data-theme="dark"] #payFilterEnd{
  background:var(--form-bg) !important;
  border-color:var(--border) !important;
  color:var(--text-primary) !important;
}
/* 耗材字段配置弹层里动态生成的字段名/类型控件 */
body[data-theme="dark"] .cc-field-label,
body[data-theme="dark"] .cc-field-type{
  background:var(--form-bg) !important;
  border-color:var(--border) !important;
  color:var(--text-primary) !important;
}
/* 收款页：统计卡 / 进度·趋势面板（JS 模板行内 #F8FAFC 白底） */
body[data-theme="dark"] .pay-stat-card,
body[data-theme="dark"] .pay-sub-panel{
  background:var(--bg-surface) !important;
}
/* 收款页分隔线 */
body[data-theme="dark"] .pay-divider{
  background:var(--border) !important;
}
/* 收款页客户搜索框（透明底 + 行内浅边框） */
body[data-theme="dark"] #payCustSearch{
  background:var(--form-bg) !important;
  border-color:var(--border) !important;
  color:var(--text-primary) !important;
}
/* 收款页客户进度条：轨道深灰，填充色按状态提亮 */
body[data-theme="dark"] .pay-progress-track{
  background:var(--bg-subtle) !important;
}
body[data-theme="dark"] .pay-progress-fill[style*="#16A34A"]{background:#5BE895 !important;}
body[data-theme="dark"] .pay-progress-fill[style*="#0F68D8"]{background:#82B5FF !important;}
body[data-theme="dark"] .pay-progress-fill[style*="#F59E0B"]{background:#FFC93C !important;}
/* 收款页月度趋势柱：深色下用亮蓝渐变 */
body[data-theme="dark"] .pay-trend-bar{
  background:linear-gradient(180deg,#82B5FF,#4D8EFF) !important;
}
/* 行内硬编码的品牌蓝 / 成功绿 / 危险红在深底上偏暗，整体提亮 */
body[data-theme="dark"] [style*="#0F68D8" i]{color:#82B5FF !important;}
body[data-theme="dark"] [style*="#16A34A" i]{color:#5BE895 !important;}
body[data-theme="dark"] [style*="#DC5A5A" i]{color:#FF6B6B !important;}

/* ============================================================
   深色模式 · 属性级补漏（选择器已有部分覆盖，但背景/边框漏改）
   ============================================================ */
/* 个人中心：主按钮边框 / 编辑链接 hover 淡蓝 */
body[data-theme="dark"] .profile-btn-primary{border-color:var(--border);}
body[data-theme="dark"] .profile-edit-link:hover{background:rgba(77,142,255,0.16);}
/* 用户下拉：危险项 hover 淡红 */
body[data-theme="dark"] .user-menu-item--danger:hover{background:rgba(248,113,113,0.16);color:#FCA5A5;}
/* 通知抽屉：通知正文白卡 */
body[data-theme="dark"] .notice-drawer-item-content{
  background:var(--bg-surface);
  border-color:var(--border);
}
body[data-theme="dark"] .notice-table-wrap{
  background:var(--bg-surface);
  border-color:var(--border);
}
/* 记事本：提醒输入框 / 提醒 chip / 快捷入口 */
body[data-theme="dark"] .notes-remind{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
body[data-theme="dark"] .note-remind{background:var(--bg-subtle);}
body[data-theme="dark"] .notes-reminder-shortcut{
  background:var(--bg-field);
  border-color:var(--border);
}
body[data-theme="dark"] .notes-reminder-shortcut:hover{border-color:var(--brand);}
/* 工具弹窗外层面板边框（背景已覆盖） */
body[data-theme="dark"] .tool-modal .tool-modal-panel{border-color:var(--border);}
/* 计算器历史记录分隔线 */
body[data-theme="dark"] .history-item{border-bottom-color:var(--border);}
/* 台账：子 tab 容器 */
body[data-theme="dark"] .lm-tabs{
  background:var(--bg-field);
  border-color:var(--border);
}
/* 收款弹窗筛选项边框（背景已覆盖） */
body[data-theme="dark"] .pay-form-grid .filter-item{border-color:var(--border);}
/* 台账：备注气泡浮层 / 跳过步骤 / 空状态 / 流程容器 / 步骤卡 */
body[data-theme="dark"] .lt-remark-tip{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-secondary);
}
body[data-theme="dark"] .lt-step-cell.skipped{background:var(--bg-zebra);}
body[data-theme="dark"] .lt-tl-dot.skipped{
  background:var(--bg-subtle);
  border-color:var(--border);
}
body[data-theme="dark"] .lt-empty{
  background:transparent;
  border-color:var(--border-strong);
}
body[data-theme="dark"] .lt-flow{
  background:var(--bg-zebra);
  border-color:var(--border);
}
body[data-theme="dark"] .lt-step{
  background:var(--bg-surface);
  border-color:var(--border-strong);
}
/* 聊天机器人：机器人气泡边框 / 快捷问题条 */
body[data-theme="dark"] .chatbot-msg.bot .chatbot-msg-bubble{border-color:var(--border);}
body[data-theme="dark"] .chatbot-quick{background:var(--bg-subtle);}
/* 导出弹窗：格式选择标签（非 A4 纸张） */
body[data-theme="dark"] .qec-tag{
  background:var(--bg-field);
  border-color:var(--border-strong);
}
body[data-theme="dark"] .q-export-card .qec-check{
  background:var(--bg-subtle);
  border-color:var(--border-strong);
}
body[data-theme="dark"] .q-ep-pdf.is-active .qec-tag,
body[data-theme="dark"] .q-ep-pdf:hover .qec-tag{
  background:rgba(99,102,241,0.2);
  color:#C7D2FE;
  border-color:rgba(99,102,241,0.45);
}
body[data-theme="dark"] .q-ep-word.is-active .qec-tag,
body[data-theme="dark"] .q-ep-word:hover .qec-tag{
  background:rgba(34,197,94,0.16);
  color:#86EFAC;
  border-color:rgba(34,197,94,0.4);
}
body[data-theme="dark"] .q-ep-jpg.is-active .qec-tag,
body[data-theme="dark"] .q-ep-jpg:hover .qec-tag{
  background:rgba(245,158,11,0.16);
  color:#FCD34D;
  border-color:rgba(245,158,11,0.4);
}

/* ============================================================
   深色模式 · 深色文字终轮补漏（状态绿/危险红/近黑标题）
   ============================================================ */
body[data-theme="dark"] .calc-step .cs-result{color:#5BE895;}
body[data-theme="dark"] .fm-disk-pop-title{color:var(--text-primary);}
body[data-theme="dark"] .fm-disk-pop-pct.is-danger{color:#FF6B6B;}
body[data-theme="dark"] .fm-up-row-name .status.ok{color:#5BE895;}
body[data-theme="dark"] #page-profile .profile-panel-header h2,
body[data-theme="dark"] #page-settings .profile-panel-header h2{color:var(--text-primary);}
body[data-theme="dark"] .lm-inline-tip.err{color:#FF6B6B;}
body[data-theme="dark"] .lt-step-cell.done,
body[data-theme="dark"] .lt-tl-node.done .lt-tl-label,
body[data-theme="dark"] .lt-step.done .t{color:#5BE895;}
body[data-theme="dark"] .lcc-header h3{color:var(--text-primary);}

/* ============================================================
   深色模式 · 基础样式里硬编码的鲜亮点缀（浅色主题原值在深底上偏暗）
   ============================================================ */
/* 磁盘占用进度条 */
body[data-theme="dark"] .fm-disk-pop-fill{background:linear-gradient(90deg,#82B5FF,#4D8EFF);}
body[data-theme="dark"] .fm-disk-pop-fill.is-warn{background:linear-gradient(90deg,#FFC93C,#F59E0B);}
body[data-theme="dark"] .fm-disk-pop-fill.is-danger{background:linear-gradient(90deg,#FF6B6B,#EF4444);}
/* 台账：统计卡激活光条 / 迷你柱 / 步骤脉冲点 / 时间线当前节点 / 完成连线 */
body[data-theme="dark"] .lt-stat-card.active::before{background:linear-gradient(180deg,#82B5FF,var(--text-muted));}
body[data-theme="dark"] .lt-stat-card .lt-mini-bar-fill{background:linear-gradient(90deg,#82B5FF,var(--text-muted));}
body[data-theme="dark"] .lt-stat-card.tracking .v{color:#FF6B6B;}
body[data-theme="dark"] .lt-step-cell.current::after{background:#82B5FF;}
body[data-theme="dark"] .lt-tl-dot.current{border-color:#82B5FF;}
body[data-theme="dark"] .lt-tl-line.done{background:linear-gradient(90deg,#22C55E,#5BE895);}
body[data-theme="dark"] .lt-tl-line.lead{background:linear-gradient(90deg,#22C55E,#5BE895);}
/* 主按钮 hover 深蓝 / 蓝渐变收尾色：深色下换成亮蓝系 */
body[data-theme="dark"] .lt-confirm-btn:hover:not(:disabled),
body[data-theme="dark"] .lt-tl-confirm-btn:hover,
body[data-theme="dark"] .q-exp-btn.pdf:hover{background:var(--brand-hover);}
body[data-theme="dark"] .chatbot-header,
body[data-theme="dark"] .chatbot-send,
body[data-theme="dark"] .chatbot-msg.user .chatbot-msg-bubble{background:linear-gradient(135deg,#4D8EFF,#2F7BFF);}
body[data-theme="dark"] .chatbot-input:focus{border-color:var(--brand);}

/* ============================================================
   深色模式 · 彩色浅底状态标签 / 选中态 / hover 态补漏
   浅色版用"淡彩底+深彩字"，深色版统一改"半透明彩底+亮彩字"
   ============================================================ */
/* 文件管理：选中行 / 选中卡片（!important 压过原始高优先级规则） */
body[data-theme="dark"] .fm-table tbody tr.selected td{
  background:rgba(77,142,255,0.18) !important;
  color:#FFFFFF;
}
body[data-theme="dark"] .fm-grid-card.selected{
  background:rgba(77,142,255,0.16) !important;
  border-color:var(--brand);
}
body[data-theme="dark"] .fm-crumb:hover,
body[data-theme="dark"] .fm-crumb.current:hover,
body[data-theme="dark"] .fm-view-btn.active,
body[data-theme="dark"] .fm-op-btn:hover,
body[data-theme="dark"] .btn-link:hover,
body[data-theme="dark"] .bc-cust-opt:hover,
body[data-theme="dark"] .lm-history-pane th[onclick^="toggleLedgerSort"]:hover{
  background:var(--bg-subtle);
  color:var(--brand);
}
body[data-theme="dark"] .fm-view-btn.active{
  border-color:var(--brand);
  background:rgba(77,142,255,0.18);
}
body[data-theme="dark"] .fm-op-btn.fm-op-danger:hover,
body[data-theme="dark"] .fm-grid-ops button.danger:hover,
body[data-theme="dark"] .fm-batch-op-item.fm-batch-op-danger:hover,
body[data-theme="dark"] .btn-link-danger:hover,
body[data-theme="dark"] .q-terms > li button:hover{
  background:rgba(248,113,113,0.16);
  color:#FCA5A5;
}
body[data-theme="dark"] .fm-disk-chip{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-secondary);
}
body[data-theme="dark"] .fm-disk-mini-bar,
body[data-theme="dark"] .fm-disk-pop-bar{background:var(--bg-subtle);}
body[data-theme="dark"] .fm-drop-zone.dragover{
  background:rgba(77,142,255,0.12);
  border-color:var(--brand);
}
/* 侧栏 / 主题卡 / 个人中心二级导航激活态 */
body[data-theme="dark"] .menu-item:hover .menu-left{background:var(--bg-subtle);}
body[data-theme="dark"] body.sidebar-drawer-open #sidebarToggle{background:var(--bg-subtle);}
body[data-theme="dark"] .theme-option:hover{
  border-color:var(--brand);
  background:var(--bg-subtle);
}
body[data-theme="dark"] .pf-nav .page-subtab.active,
body[data-theme="dark"] .pf-nav .page-subtab.active i{
  background:rgba(77,142,255,0.18);
  color:var(--brand);
}
/* 登录页固定蓝白视觉，不随深色模式变化（auth-error 使用基础样式） */
/* 记事本提醒中状态 */
body[data-theme="dark"] .note-remind.active{
  background:rgba(251,191,36,0.16);
  color:#FCD34D;
}
/* 站内信类型标签 */
body[data-theme="dark"] .notice-type-tag.type-system{background:rgba(77,142,255,0.18);color:#82B5FF;}
body[data-theme="dark"] .notice-type-tag.type-contract{background:rgba(74,222,128,0.15);color:#86EFAC;}
body[data-theme="dark"] .notice-type-tag.type-approval{background:rgba(251,191,36,0.17);color:#FCD34D;}
body[data-theme="dark"] .notice-type-tag.type-marketing{background:rgba(248,113,113,0.17);color:#FCA5A5;}
body[data-theme="dark"] .notice-drawer-item-type.type-system{background:var(--bg-subtle);color:var(--text-secondary);}
body[data-theme="dark"] .notice-drawer-item-type.type-contract{background:rgba(74,222,128,0.15);color:#86EFAC;}
body[data-theme="dark"] .notice-drawer-item-type.type-approval{background:rgba(251,191,36,0.17);color:#FCD34D;}
body[data-theme="dark"] .notice-drawer-item-type.type-marketing{background:rgba(244,114,182,0.16);color:#F9A8D4;}
/* 管理员角色标签 */
body[data-theme="dark"] .admin-role-tag.role-admin{background:rgba(77,142,255,0.18);color:#82B5FF;}
body[data-theme="dark"] .admin-role-tag.role-boss{background:rgba(251,191,36,0.17);color:#FCD34D;}
body[data-theme="dark"] .admin-role-tag.role-车间{background:rgba(74,222,128,0.15);color:#86EFAC;}
body[data-theme="dark"] .admin-role-tag.role-技术{background:rgba(77,142,255,0.18);color:#82B5FF;}
body[data-theme="dark"] .admin-role-tag.role-operator{background:var(--bg-subtle);color:var(--text-secondary);}
/* 首页/工单状态标签 */
body[data-theme="dark"] .status-tag.done,
body[data-theme="dark"] .dashboard-recent-table .status-shipped,
body[data-theme="dark"] .dashboard-recent-table .status-fahuo{background:rgba(74,222,128,0.15);color:#86EFAC;}
body[data-theme="dark"] .status-tag.pending,
body[data-theme="dark"] .dashboard-recent-table .status-pending,
body[data-theme="dark"] .dashboard-recent-table .status-chejian{background:rgba(251,191,36,0.17);color:#FCD34D;}
body[data-theme="dark"] .dashboard-recent-table .status-boss{background:rgba(248,113,113,0.17);color:#FCA5A5;}
/* 台账徽章 / 步骤人 / 标签 */
body[data-theme="dark"] .lt-badge.boss,
body[data-theme="dark"] .lt-step .who.boss{background:rgba(248,113,113,0.16);color:#FCA5A5;}
body[data-theme="dark"] .lt-badge.chejian,
body[data-theme="dark"] .lt-step .who.chejian{background:rgba(251,191,36,0.17);color:#FCD34D;}
body[data-theme="dark"] .lt-badge.ok{background:rgba(74,222,128,0.15);color:#86EFAC;}
body[data-theme="dark"] .lt-badge.info{background:rgba(77,142,255,0.18);color:#82B5FF;}
body[data-theme="dark"] .lt-badge.progress{background:rgba(196,181,253,0.17);color:#C4B5FD;}
body[data-theme="dark"] .lt-step-cell.current{background:rgba(77,142,255,0.14);}
body[data-theme="dark"] .lt-col-no-aftersale{background:rgba(251,191,36,0.17) !important;}
body[data-theme="dark"] .lt-col-no-aftersale .lt-no{color:#FCD34D;}
body[data-theme="dark"] .lt-aftersale-tag{background:rgba(251,191,36,0.17);color:#FCD34D;}
body[data-theme="dark"] .lm-history-pane .lm-tag-running{
  background:rgba(251,191,36,0.17);
  border-color:rgba(251,191,36,0.4);
  color:#FCD34D;
}
body[data-theme="dark"] .lm-history-pane .lm-tag-done{
  background:rgba(74,222,128,0.15);
  border-color:rgba(74,222,128,0.35);
  color:#86EFAC;
}
body[data-theme="dark"] .lcc-item.dragging{
  background:rgba(77,142,255,0.16);
  border-color:var(--brand);
}
/* 报价表单内合计 badge / 合计格（A4 预览纸内的同名元素保持白色，不覆盖） */
body[data-theme="dark"] .quote-acc > summary > .q-total-badge{
  background:rgba(99,102,241,0.18);
  color:#A5B4FC;
}
body[data-theme="dark"] .quote-form-table tfoot td{
  background:var(--bg-field);
  border-top-color:var(--border-strong);
}
body[data-theme="dark"] .quote-form-table .q-total-label{
  background:rgba(99,102,241,0.18) !important;
  color:#A5B4FC !important;
}
/* 导出弹窗关闭按钮基础态 */
body[data-theme="dark"] .qep-close{
  background:var(--bg-surface);
  border-color:var(--border);
  color:var(--text-secondary);
}

/* ============================================================
   深色模式 · 白色/浅色边框与分界线补漏
   ============================================================ */
/* 台账/售后筛选条：复合 filter-item 容器（内层 input 已无边框） */
body[data-theme="dark"] .filter-form-grid .filter-item{
  background:var(--bg-field);
  border-color:var(--border);
}
body[data-theme="dark"] .filter-form-grid .filter-item:focus-within{
  border-color:var(--brand);
  box-shadow:0 0 0 3px rgba(77,142,255,0.15);
}
/* filter-item 内 select 恢复自定义下拉箭头（深色版），旧规则的 background 简写会清掉背景图 */
body[data-theme="dark"] .filter-form-grid .filter-item select,
body[data-theme="dark"] .audit-filter-row .filter-item select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23A8A8A8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='4 6 8 10 12 6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 0 center;background-size:12px;
}
/* 复合筛选框内自定义下拉触发器保持无底无边，避免深色下"框中框" */
body[data-theme="dark"] .audit-filter-row .filter-item .cc-select-trigger{
  background:transparent;border-color:transparent;color:var(--text-primary);
}
/* ghost 按钮：白底浅边框 → 深灰边框（实心主钮/红色危险钮不在此列） */
body[data-theme="dark"] .btn-success,
body[data-theme="dark"] .page-btn,
body[data-theme="dark"] .q-mini-btn,
body[data-theme="dark"] .chatbot-quick-btn,
body[data-theme="dark"] .cc-select-add,
body[data-theme="dark"] .cc-select-add-input,
body[data-theme="dark"] .cc-select-add-input input{
  border-color:var(--border) !important;
}
body[data-theme="dark"] .btn-success:hover{
  background-color:var(--bg-subtle);
  color:var(--text-primary);
}
/* 确认弹窗底部按钮：仅默认钮走灰边（主钮实心蓝、危险钮红边由上方规则处理） */
body[data-theme="dark"] .confirm-modal-footer .btn-default{
  border-color:var(--border);
}
/* 顶栏头像圈 */
body[data-theme="dark"] .user-avatar-btn{border-color:var(--border);}
/* 二级 tab 下的白色分界线 */
body[data-theme="dark"] .page-subtabs{border-bottom-color:var(--border);}
/* 各类头部/底部/分隔线 */
body[data-theme="dark"] .profile-panel-header,
body[data-theme="dark"] #page-profile .profile-panel-header,
body[data-theme="dark"] #page-settings .profile-panel-header,
body[data-theme="dark"] .dashboard-section-header,
body[data-theme="dark"] .notes-filter-bar,
body[data-theme="dark"] .lcc-header,
body[data-theme="dark"] .lcc-footer,
body[data-theme="dark"] .lt-card-foot{
  border-color:var(--border);
}
/* 记事本行内按钮 */
body[data-theme="dark"] .note-btn-complete,
body[data-theme="dark"] .note-btn-uncomplete,
body[data-theme="dark"] .note-btn-delete,
body[data-theme="dark"] .note-btn-remind{border-color:var(--border);}
/* 计算器步骤 / 文件操作区分隔 */
body[data-theme="dark"] .calc-step{border-color:var(--border);}
body[data-theme="dark"] .fm-grid-ops{border-color:var(--border);}
/* 表格单元分界线（原 #EEF2F7 特异性更高，需显式覆盖） */
body[data-theme="dark"] .lt-table tbody td{border-color:var(--border);}
body[data-theme="dark"] #bcItemsArea .data-table,
body[data-theme="dark"] #bcItemsArea .data-table td,
body[data-theme="dark"] #bcItemsArea .data-table th{border-color:var(--border);}
/* 台账追踪输入框 / 售后时间线输入框 */
body[data-theme="dark"] .lt-tracking-input,
body[data-theme="dark"] .lt-tl-tracking-input,
body[data-theme="dark"] .lt-col-op .lt-tracking-input,
body[data-theme="dark"] .fm-page-jump input,
body[data-theme="dark"] .lt-memo-edit-area textarea{
  background:var(--form-bg);
  border-color:var(--border);
  color:var(--text-primary);
}
/* 复选框框体（选中后的白色对勾保持白色，不动） */
body[data-theme="dark"] .lcc-checkmark{border-color:var(--border-strong);}
/* 备忘录卡片 */
body[data-theme="dark"] .lt-memo-card{border-color:var(--border);}
/* 报价编辑表单（非 A4 预览纸） */
body[data-theme="dark"] .quote-form-table td{border-color:var(--border);}
body[data-theme="dark"] .q-corner{border-color:var(--border);}
/* 导出弹窗 chrome（A4 纸本身不在这些类上） */
body[data-theme="dark"] .qep-header,
body[data-theme="dark"] .qep-preview-col,
body[data-theme="dark"] .qep-preview-footer,
body[data-theme="dark"] .qep-options-title,
body[data-theme="dark"] .qep-options-footer{border-color:var(--border);}
body[data-theme="dark"] .q-ep-pdf.is-active .qec-tag,
body[data-theme="dark"] .q-ep-pdf:hover .qec-tag{border-color:rgba(99,102,241,0.45);}
/* 行内浅色边框（售后原因/弹窗分隔/报价滚动区等） */
body[data-theme="dark"] [style*="#DCE3EC" i]{border-color:var(--border) !important;}
body[data-theme="dark"] [style*="#E8EEF5" i]{border-color:var(--border) !important;}
body[data-theme="dark"] .fm-upload-footer{border-top-color:var(--border);}
body[data-theme="dark"] .tool-modal-footer{border-top-color:var(--border) !important;}
/* 耗材搜索下拉浮层（行内白底） */
body[data-theme="dark"] #consumableSearchDropdown{
  background:var(--bg-surface) !important;
  border-color:var(--border) !important;
}
body[data-theme="dark"] #consumableSearchDropdown *{
  color:var(--text-secondary);
}
/* 台账备注气泡箭头（外描边/内填充跟随气泡深色；只改三角实色侧） */
body[data-theme="dark"] .lt-remark-tip::after{border-top-color:var(--bg-field);}
body[data-theme="dark"] .lt-remark-tip::before{border-top-color:var(--border);}
body[data-theme="dark"] .lt-remark-tip.arrow-up::after{
  border-top-color:transparent;
  border-bottom-color:var(--bg-field);
}
body[data-theme="dark"] .lt-remark-tip.arrow-up::before{
  border-top-color:transparent;
  border-bottom-color:var(--border);
}

.layout-wrap{display:flex;flex:1;min-height:0;}

/* ============ 沉浸式页面（个人中心/系统设置）：侧栏隐藏，抽屉式滑出 ============ */
.sidebar-drawer-mask{
  display:none;position:fixed;top:56px;left:0;right:0;bottom:0;
  background:rgba(15,23,42,.32);z-index:40;
  opacity:0;transition:opacity .25s ease;
}
body.immersive .sidebar{
  position:fixed;top:56px;left:0;bottom:0;
  width:130px !important;z-index:50;
  transform:translateX(-100%);
  transition:transform .28s cubic-bezier(.4,0,.2,1);
  box-shadow:2px 0 14px rgba(15,23,42,.15);
}
body.immersive.sidebar-drawer-open .sidebar{transform:translateX(0);}
body.sidebar-drawer-open .sidebar-drawer-mask{display:block;opacity:1;}
body.sidebar-drawer-open #sidebarToggle{background:#E2E8F0;}
/* 抽屉底部"收起菜单"按钮：仅移动端抽屉打开时显示，PC端始终隐藏 */
.sidebar-drawer-close{display:none;}
/* ☰ 按钮与侧栏菜单图标"中心线"对齐：
   展开态图标中心=菜单padding14+胶囊padding8+半图标10=32；按钮盒中心=顶栏padding18+半按钮10=28，故右移4px；
   折叠态图标中心=56/2=28，与按钮盒中心28重合，不偏移。
   不用 text-indent：按钮盒与图标盒都按几何中心对齐，字形缩进只会把☰推到中心线右侧 */
#sidebarToggle{margin-left:4px;}
body.sidebar-collapsed #sidebarToggle{margin-left:0;text-indent:0;}
/* 沉浸式期间 collapsed 类已由 JS 临时移除，抽屉内即标准展开菜单，无需任何对齐覆盖 */

/* ============ SVG Icon 统一样式 ============ */
.menu-icon,
svg.menu-icon{
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex-shrink: 0 !important;
  width: 20px !important;
  height: 20px !important;
  min-width: 20px !important;
  min-height: 20px !important;
  line-height: 1;
  vertical-align: middle;
  color: inherit;
  overflow: visible;
}
.menu-icon svg{
  width: 100% !important;
  height: 100% !important;
  display: block;
  color: inherit;
}
.menu-item{
  display: flex !important;
  align-items: center !important;
}
.sidebar{
  width:130px;background:#F1F3F5;color:var(--text-secondary);
  display:flex;flex-direction:column;
  transition:width 0.28s cubic-bezier(.4,0,.2,1);
  z-index:20;
  border-right:1px solid #D1D5DB;
}
.sidebar .menu-list{flex:1;}
.sidebar.collapsed{width:56px;}
.sidebar.collapsed:hover{overflow-y:visible;}
.sidebar.collapsed .sidebar-header{
  display:none !important;
}
.sidebar.collapsed .sidebar-toggle{
  margin:0 auto !important;
}
/* 折叠后 logo 区域不占用高度 */
.sidebar.collapsed .sidebar-logo{
  height:0 !important;min-height:0 !important;
  padding:0 !important;margin:0 !important;
  overflow:hidden;visibility:hidden;
}
.sidebar-header{
  display:none;
}
.sidebar-toggle{
  width:28px;height:28px;flex-shrink:0;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;color:#fff;font-size:var(--font-size-xl);line-height:1;
  transition:background 0.2s;user-select:none;
}
.sidebar-toggle:hover{background:transparent;}
.sidebar-brand{
  display:flex;align-items:center;gap:10px;cursor:pointer;
  flex:1;min-width:0;transition:opacity 0.2s;
}
.sidebar.collapsed .sidebar-brand{display:none !important;}
.sidebar-logo{
  padding:0;text-align:center;border-bottom:0;margin-bottom:0;flex-shrink:0;
  height: 40px;
  width: auto;
  display: flex;align-items: center;justify-content: center;
  overflow: hidden;
  background: transparent !important;
}
.sidebar-logo img{
  display:block;transition:width 0.25s;
  height: 100%;
  width: auto;
  object-fit: contain;
  background: transparent !important;
}
.sidebar-title{display:none !important;}
/* 侧栏分组小标题（GitHub 风：小号粗体中性灰；折叠侧栏隐藏） */
.menu-group-label{
  padding:14px 22px 4px;
  font-size:var(--font-size-sm);font-weight:600;color:var(--text-muted);
  letter-spacing:.5px;line-height:1.4;user-select:none;white-space:nowrap;
}
.menu-group-label:first-child{padding-top:6px;}
.sidebar.collapsed .menu-group-label{display:none;}
.menu-list{padding:8px 0;flex:1;overflow-y:auto;overflow-x:hidden;}
.sidebar.collapsed .menu-list{overflow:visible;}
.menu-item{
  padding:0 14px;cursor:pointer;font-size:var(--font-size-md);transition:background 0.2s,color 0.2s;color:var(--text-secondary);
  display:flex;align-items:center !important;gap:10px;white-space:nowrap;
  position:relative;min-height:42px;
}
.menu-item .menu-left{
  display:flex;align-items:center;gap:10px;flex:1;min-width:0;
  position:relative;z-index:1;
  padding:0 8px;height:36px;border-radius:8px;
  transition:background 0.2s,color 0.2s;
}
/* 左侧竖条指示：hover / active 时出现（宝塔风格） */
.menu-item::before{
  content:'';position:absolute;left:4px;top:50%;transform:translateY(-50%);
  width:3px;height:0;border-radius:2px;background:var(--brand);
  transition:height 0.2s ease;
}
.menu-item:hover::before,
.menu-item.active::before{height:18px;}
.menu-item:hover .menu-left{background:#EBF2FC;color:var(--brand);}
/* 激活态 GitHub 风：浅蓝底 + 蓝字粗体 + 左侧竖条（竖条由 ::before 常显），不用实心胶囊 */
.menu-item.active .menu-left{background:var(--brand-soft);color:var(--brand);font-weight:600;}
.menu-item .menu-text{flex:1 1 auto;min-width:0;transition:opacity 0.2s;display:inline-block;}
.sidebar.collapsed .menu-item .menu-text{opacity:0;pointer-events:none;width:0;overflow:hidden;flex:0;}
.sidebar.collapsed .menu-item{padding:0 8px;justify-content:center;}
.sidebar.collapsed .menu-item .menu-left{padding:0;justify-content:center;}

/* collapsed 时的 tooltip */
.sidebar.collapsed .menu-item[data-tip]:hover::after{
  content:attr(data-tip);
  position:absolute;left:calc(100% + 8px);top:50%;transform:translateY(-50%);
  background:var(--text-primary);color:#fff;padding:6px 10px;border-radius:8px;font-size:var(--font-size-base);font-weight:400;
  white-space:nowrap;z-index:999;pointer-events:none;
  box-shadow:0 2px 8px rgba(0,0,0,0.2);line-height:1.2;
}
.sidebar.collapsed .menu-item{position:relative;}
/* 占位页样式（首页欢迎区） */
.placeholder-page{
  display:flex;flex-direction:column;align-items:center;
  padding:28px 20px 12px;text-align:center;
}
.placeholder-badge{
  display:none; /* 已删除HOME徽章 */
}
.placeholder-title{
  font-size:var(--font-size-display-3);font-weight:700;color:var(--brand);margin:0 0 6px;letter-spacing:2px;
}
.placeholder-sub{
  font-size:var(--font-size-2xl);color:var(--text-tertiary);max-width:520px;line-height:1.6;margin:0;
}

/* ============ 个人中心页面 ============ */
.profile-layout{
  display:flex;flex:1;height:100%;background:transparent;
  overflow:hidden;
}
.profile-sidebar{
  width:180px;min-width:180px;background:#F1F3F5;border-right:1px solid #E5E7EB;
  padding:6px 8px;overflow-y:auto;flex-shrink:0;
}
.profile-sidebar-title{display:none;}

.profile-main{
  flex:1;display:flex;flex-direction:column;overflow:hidden;
}
.profile-content{
  flex:1;overflow:auto;padding:16px;
}
.profile-panel{display:none;}
.profile-panel.active{display:block;}
.profile-panel-header{
  display:flex;align-items:center;gap:8px;margin:0 0 12px;
  padding:0 0 10px;border-bottom:1px solid var(--ph-divider);
}
.profile-panel-header h2{
  font-size:var(--ph-title-size);font-weight:600;color:var(--ph-title-color);margin:0;
}
.profile-panel-icon{font-size:var(--ph-icon-size);color:var(--ph-icon-color);}

.profile-card{
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  padding:12px;margin-bottom:12px;
  box-shadow:0 1px 3px rgba(15,23,42,0.04);
}
.profile-card-title{
  font-size:var(--font-size-base);font-weight:600;color:var(--text-primary);margin:0 0 8px;
}
.profile-form-row{
  display:flex;align-items:center;gap:8px;
  border:var(--form-border);border-radius:var(--radius-input);
  padding:var(--form-padding);height:32px;box-sizing:border-box;
  margin-bottom:8px;background:var(--form-bg);
}
.profile-form-row:focus-within{border-color:var(--form-border-focus);box-shadow:var(--form-shadow-focus);}
.profile-form-row:last-child{margin-bottom:0;}
.profile-form-label{
  width:auto;flex-shrink:0;font-size:var(--font-size-form-xs);color:var(--form-label-color);
}
.profile-form-value{
  flex:1;font-size:var(--font-size-form-xs);color:var(--text-primary);
}
.profile-form-input{
  flex:1;height:auto;border:none;background:transparent;padding:0;box-sizing:border-box;
  font-size:var(--font-size-form-xs);color:var(--text-primary);outline:none;
}
.profile-btn{
  padding:8px 10px;border-radius:8px;font-size:var(--font-size-sm);cursor:pointer;transition:all .15s;
  border:none;
}
.profile-btn-primary{background:var(--brand);color:#fff;border:1px solid var(--brand);}
.profile-btn-primary:hover{background:var(--brand-hover);color:#fff;}
.profile-btn-secondary{background:#FFFFFF;color:var(--text-secondary);border:1px solid var(--border-strong);}
.profile-btn-secondary:hover{background:var(--bg-subtle);color:var(--text-primary);}
.profile-btn-danger{background:#FFFFFF;color:var(--danger);border:1px solid var(--danger);}.profile-btn-danger:hover{background:var(--danger-soft);color:var(--danger);font-weight:600;}.profile-btn-sm{padding:3px 10px;font-size:var(--font-size-sm);}
/* 基本信息行内"编辑"：纯文字链接，无边框无底色 */
.profile-edit-link{
  background:none;border:none;
  height:auto;min-height:0;padding:4px 10px;cursor:pointer;
  font-size:var(--font-size-sm);font-weight:400;color:var(--brand);line-height:1.4;
  border-radius:6px;transition:background .15s,opacity .15s;
}
.profile-edit-link:hover{background:#EBF2FC;opacity:.85;}
.profile-btn-group{display:flex;gap:8px;margin-top:10px;}
.profile-switch{
  width:36px;height:20px;border-radius:8px;background:#F1F3F5;
  position:relative;cursor:pointer;transition:all .2s;flex-shrink:0;
}
.profile-switch.on{background:var(--brand);}
.profile-switch::after{
  content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;
  background:#FFFFFF;border-radius:50%;transition:all .2s;
}
.profile-switch.on::after{left:18px;}
.profile-toggle-row{
  display:flex;align-items:center;justify-content:space-between;
  height:28px;box-sizing:border-box;margin-bottom:10px;
}
.profile-toggle-row:last-child{margin-bottom:0;}
.profile-toggle-label{font-size:var(--font-size-base);color:var(--text-secondary);}
.profile-section-title{
  font-size:var(--font-size-base);font-weight:600;color:var(--text-tertiary);margin:12px 0 8px;
}
.profile-pwd-strength{
  display:flex;align-items:center;gap:6px;margin-top:0;margin-bottom:8px;
}
.profile-pwd-bar{
  height:8px;width:80px;border-radius:2px;background:#F1F3F5;overflow:hidden;
}
.profile-pwd-bar-fill{height:100%;border-radius:2px;transition:width .3s;background:#ef4444;}
.profile-pwd-bar-fill.medium{background:#f59e0b;}
.profile-pwd-bar-fill.strong{background:#10b981;}
.profile-pwd-text{font-size:var(--font-size-sm);color:var(--text-tertiary);}

/* ============ 磁盘清理样式 ============ */
.disk-clean-item{
  display:flex;align-items:center;gap:10px;
  height:28px;box-sizing:border-box;
  padding:0 10px;border:1px solid #E5E7EB;border-radius:8px;
  margin-bottom:6px;background:#FFFFFF;
}
.disk-check{display:flex;align-items:center;gap:8px;cursor:pointer;flex:1;}
.disk-cb{width:18px;height:18px;cursor:pointer;accent-color:var(--brand);}
.disk-check-label{font-size:var(--font-size-base);color:var(--text-secondary);}
.disk-size{font-size:var(--font-size-base);color:var(--text-tertiary);font-weight:500;min-width:60px;text-align:right;}
.disk-action{font-size:var(--font-size-sm);color:var(--brand);cursor:pointer;padding:2px 8px;border-radius:3px;transition:background .15s;}
.disk-action:hover{background:#F1F3F5;}
.disk-detail{
  display:none;width:100%;padding:8px 10px;margin-top:6px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  font-size:var(--font-size-sm);color:var(--text-tertiary);line-height:1.6;
}
.disk-detail.show{display:block;}
.disk-summary-card{margin-top:12px;background:#FFFFFF;border-color:#E5E7EB;}
.disk-summary{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 12px;border-radius:8px;background:#F1F3F5;margin-bottom:10px;
}
.disk-summary-label{font-size:var(--font-size-base);color:var(--text-secondary);}
.disk-summary-value{font-size:var(--font-size-2xl);font-weight:700;color:var(--brand);}
.disk-warning{
  font-size:var(--font-size-sm);color:#b45309;background:#fef3c7;
  padding:8px 12px;border-radius:8px;margin-bottom:12px;
}
/* 磁盘清理详情换行（因磁盘项 wrap 为 flex，下面单独行） */
.disk-clean-item + .disk-detail{margin-top:-2px;}

/* ============ 主题设置样式 ============ */
.theme-options{
  display:flex;gap:14px;flex-wrap:wrap;
}
.theme-option{
  flex:0 0 calc(33.333% - 10px);
  min-width:140px;
  cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:10px;border-radius:8px;
  border:2px solid transparent;
  transition:all .15s;
}
.theme-option:hover{
  border-color:#C7D2FE;
  background:#F5F3FF;
}
.theme-option.active{
  border-color:var(--brand);
  background:var(--brand-soft);
}
.theme-preview{
  width:100%;aspect-ratio:16/10;
  border-radius:8px;
  position:relative;overflow:hidden;
  display:flex;
  border:1px solid rgba(0,0,0,0.08);
}
.theme-preview .tp-sidebar{
  width:28%;flex-shrink:0;
}
.theme-preview .tp-main{
  flex:1;padding:10px;display:flex;flex-direction:column;gap:8px;
}
.theme-preview .tp-bar{
  height:12px;border-radius:3px;
}
.theme-preview .tp-cards{
  display:grid;grid-template-columns:1fr 1fr;gap:6px;
}
.theme-preview .tp-card{
  height:22px;border-radius:4px;
}
.theme-preview .tp-card.tp-wide{
  grid-column:1 / -1;
  height:28px;
}

/* 浅色预览 */
.theme-preview-light{background:#FAFBFC;}
.theme-preview-light .tp-sidebar{background:#F1F3F5;}
.theme-preview-light .tp-bar{background:#E5E7EB;}
.theme-preview-light .tp-card{background:#FFFFFF;border:1px solid #E5E7EB;}

/* 深色预览（中性中灰） */
.theme-preview-dark{background:#303030;}
.theme-preview-dark .tp-sidebar{background:#282828;}
.theme-preview-dark .tp-bar{background:#3A3A3A;}
.theme-preview-dark .tp-card{background:#404040;border:1px solid #545454;}

/* 跟随系统预览（斜切两色） */
.theme-preview-auto{background:#FAFBFC;}
.theme-preview-auto .tp-auto-mask{
  position:absolute;inset:0;
  background:linear-gradient(135deg, transparent 48%, #303030 52%);
  pointer-events:none;
  z-index:1;
}
.theme-preview-auto .tp-sidebar,
.theme-preview-auto .tp-main,
.theme-preview-auto .tp-bar,
.theme-preview-auto .tp-card{
  position:relative;z-index:0;
}
.theme-preview-auto .tp-sidebar{background:#F1F3F5;}
.theme-preview-auto .tp-bar{background:#E5E7EB;}
.theme-preview-auto .tp-card{background:#FFFFFF;border:1px solid #E5E7EB;}

.theme-option-label{
  font-size:13px;color:var(--text-secondary);
  display:flex;align-items:center;gap:6px;
  font-weight:500;
}
.theme-option.active .theme-option-label{
  color:var(--brand);
}
@media (max-width:760px){
  .theme-option{flex:0 0 calc(50% - 7px);}
}
@media (max-width:480px){
  .theme-option{flex:0 0 100%;}
}

/* ============ 通知管理样式 ============ */
.notice-stats{
  margin-left:auto;font-size:var(--font-size-sm);color:var(--text-tertiary);font-weight:400;
}
.profile-card-title{
  display:flex;align-items:center;gap:10px;
}
.notice-table-wrap{
  max-height:360px;overflow:auto;border:1px solid #E5E7EB;border-radius:8px;
  background:#FFFFFF;
}
.notice-table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--font-size-table);}
.notice-table th{
  background:#F1F3F5;color:var(--text-primary);font-weight:600;
  padding:8px 6px;border-bottom:1px solid #E5E7EB;position:sticky;top:0;z-index:1;
  text-align:left;white-space:nowrap;
}
.notice-table td{
  padding:8px 6px;border-bottom:1px solid var(--border);
  background:var(--bg-surface);vertical-align:middle;line-height:1.4;
}
.notice-type-tag{
  display:inline-block;padding:1px 6px;border-radius:8px;font-size:var(--font-size-xs);font-weight:500;
}
.notice-type-tag.type-system{background:#DBEAFE;color:var(--brand);}
.notice-type-tag.type-contract{background:#F0FDF4;color:var(--text-secondary);}
.notice-type-tag.type-approval{background:#FFFBEB;color:#92400E;}
.notice-type-tag.type-marketing{background:#FEF2F2;color:#B91C1C;}
.notice-unread-dot{
  display:inline-block;width:6px;height:6px;border-radius:50%;
  background:#e24b4b;margin-right:6px;vertical-align:middle;
}
.notice-title-cell{
  display:flex;align-items:center;gap:0;
  font-size:var(--font-size-sm);color:var(--text-primary);
}
.notice-empty{text-align:center;padding:20px;color:var(--text-muted);font-size:var(--font-size-base);}
.notice-cb-all,.notice-cb{width:18px;height:18px;cursor:pointer;accent-color:var(--brand);}
.notice-actions .profile-btn-sm{margin-right:8px;}
.notice-only-unread-active{background:var(--brand) !important;color:#fff !important;}

/* ============ 顶栏右侧操作区 ============ */
.topbar-actions{
  display:flex;align-items:center;gap:8px;
  padding:0 18px;height:100%;flex-shrink:0;
  margin-left:auto;
}
.topbar-action-btn{
  position:relative;width:32px;height:32px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  color:var(--text-secondary);cursor:pointer;
  transition:all 0.2s;background:transparent;
}
.topbar-action-btn:hover{
  background:#F1F3F5;color:var(--brand);
}
.topbar-badge{
  position:absolute;top:-4px;right:-4px;
  min-width:18px;height:18px;padding:0 5px;
  background:#e24b4b;color:#fff;font-size:var(--font-size-xs);font-weight:600;
  border-radius:9px;display:flex;align-items:center;justify-content:center;
  line-height:1;
}
/* ============ 下载入口 hover 弹出面板（左手机 / 右PC） ============ */
.topbar-download-wrap{position:relative;display:flex;align-items:center;}
.download-popover{
  position:absolute;top:calc(100% + 8px);right:0;
  display:none;gap:16px;padding:16px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:10px;
  box-shadow:0 8px 30px rgba(15,23,42,0.12);
  z-index:1000;white-space:nowrap;
}
/* 按钮与面板间隙的透明桥接区，防止鼠标移动时 hover 丢失 */
.download-popover::before{
  content:'';position:absolute;top:-8px;left:0;right:0;height:8px;
}
.topbar-download-wrap:hover .download-popover,
.download-popover.show{display:flex;}
.download-col{
  display:flex;flex-direction:column;align-items:center;gap:10px;
  width:170px;
}
.download-col-title{
  font-size:13px;font-weight:600;color:var(--text-primary);
}
.download-qr{
  width:150px;height:150px;padding:8px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
}
.download-qr img{width:100%;height:100%;display:block;}
.download-pc-icon{
  width:120px;height:120px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  background:var(--bg-subtle,#F5F7FA);border-radius:8px;color:#0078D4;
}
.download-pc-icon i{font-size:48px;line-height:1;}
.download-pc-icon span{font-size:13px;color:var(--text-secondary);}
.download-btn{
  width:120px;height:32px;padding:0 10px;
  display:flex;align-items:center;justify-content:center;gap:6px;
  font-size:13px;text-decoration:none;
}
.download-col-desc{
  font-size:12px;color:var(--text-secondary);text-align:center;line-height:1.4;white-space:normal;
}
body[data-theme="dark"] .download-popover{
  background:#1E293B;border-color:var(--border);
  box-shadow:0 8px 30px rgba(0,0,0,0.4);
}
body[data-theme="dark"] .download-qr{
  background:#FFFFFF;border-color:var(--border);
}
body[data-theme="dark"] .download-pc-icon{background:#0F172A;}
/* ============ 顶栏用户菜单（头像 + 下拉） ============ */
.user-menu{position:relative;display:flex;align-items:center;margin-left:6px;}
.user-avatar-btn{
  width:36px;height:36px;border-radius:50%;padding:0;
  border:2px solid #FFFFFF;background:linear-gradient(135deg,#3D8BF0 0%,#0F68D8 100%);
  color:#fff;cursor:pointer;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 1px 4px rgba(15,104,216,0.35);
  transition:box-shadow 0.2s,transform 0.2s;
}
.user-avatar-btn:hover{box-shadow:0 0 0 3px rgba(15,104,216,.20);}
.user-avatar-btn.active{box-shadow:0 0 0 2px rgba(15,104,216,0.22),0 1px 4px rgba(15,104,216,0.35);}
.user-avatar-fallback{
  font-size:15px;font-weight:700;line-height:1;
  display:flex;align-items:center;justify-content:center;
}
.user-avatar-fallback i{font-size:15px;}
.user-dropdown{
  position:absolute;top:calc(100% + 10px);right:0;width:250px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:12px;
  box-shadow:0 12px 32px rgba(30,41,59,0.16);
  padding:6px;z-index:60;
  opacity:0;visibility:hidden;pointer-events:none;
  transform:translateY(-6px) scale(0.98);transform-origin:top right;
  transition:opacity 0.18s ease,transform 0.18s ease,visibility 0.18s;
}
.user-dropdown.open{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1);}
/* hover 展开：头像与面板之间 10px 空隙用隐形桥接区连上，鼠标下移不会中断 hover */
.user-menu::after{
  content:'';position:absolute;top:100%;right:0;width:52px;height:12px;
}
/* 仅在真正支持 hover 的设备（鼠标）上启用悬停展开；触屏仍走点击 */
@media (hover:hover) and (pointer:fine){
  .user-menu:hover .user-dropdown{
    opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1);
  }
  .user-menu:hover .user-avatar-btn{
    box-shadow:0 0 0 2px rgba(15,104,216,0.22),0 1px 4px rgba(15,104,216,0.35);
  }
}
.user-dropdown::before{
  content:'';position:absolute;top:-7px;right:14px;width:12px;height:12px;
  background:#FFFFFF;border-left:1px solid #E5E7EB;border-top:1px solid #E5E7EB;
  transform:rotate(45deg);
}
.user-dropdown-head{display:flex;align-items:center;gap:12px;padding:12px 12px 10px;}
.user-dropdown-avatar{
  width:44px;height:44px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,#3D8BF0 0%,#0F68D8 100%);color:#fff;
  display:flex;align-items:center;justify-content:center;
  font-size:18px;font-weight:700;
}
.user-dropdown-avatar i{font-size:18px;}
.user-dropdown-meta{min-width:0;flex:1;}
.user-dropdown-name{
  font-size:var(--font-size-lg);font-weight:600;color:var(--text-primary);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:168px;
}
.user-dropdown-role{font-size:var(--font-size-sm);color:var(--text-muted);margin-top:3px;}
.user-dropdown-group{border-top:1px solid #EEF0F3;padding:4px 0;}
.user-dropdown-group--last{padding-bottom:2px;}
.user-menu-item{
  display:flex !important;flex-direction:row !important;align-items:center !important;justify-content:flex-start !important;gap:10px;
  height:38px;padding:0 12px;margin:2px 0;border-radius:8px;
  font-size:var(--font-size-md);color:var(--text-secondary);line-height:1;
  cursor:pointer;user-select:none;
  transition:background 0.15s,color 0.15s;
}
.user-menu-item i{width:16px;text-align:center;font-size:14px;flex:0 0 16px;line-height:1;}
.user-menu-item span{flex:1 1 auto;min-width:0;white-space:nowrap;}
/* Font Awesome 被渲染为 SVG 时的兼容（JS 版 FA 会把 <i> 替换成 <svg>） */
.user-menu-item svg.svg-inline--fa{
  width:16px !important;height:14px !important;flex:0 0 16px !important;
  vertical-align:middle;display:inline-block;
}
.user-menu-item:hover{background:#EBF2FC;color:var(--brand);}
.user-menu-item.active{background:var(--brand);color:#fff;}
.user-menu-item--danger{color:#D14343;}
.user-menu-item--danger:hover{background:#FDECEC;color:#D14343;}
@media (max-width:600px){
  .user-dropdown{width:230px;}
}
/* ============ 用户菜单：点击波纹 ============ */
.user-avatar-btn{position:relative;}
.user-menu-item{position:relative;overflow:hidden;}
/* 波纹本身定位在内容之下，避免盖住文字/图标 */
.user-menu-item > i,
.user-menu-item > span,
.user-avatar-fallback{position:relative;z-index:1;}
.user-ripple{
  position:absolute;border-radius:50%;pointer-events:none;z-index:0;
  background:rgba(15,104,216,0.20);
  transform:scale(0);opacity:0.45;
  animation:userRipple 0.55s ease-out forwards;
}
/* 头像为品牌蓝渐变底 → 白色波纹 */
.user-avatar-btn .user-ripple{background:rgba(255,255,255,0.50);opacity:0.55;}
/* 退出登录 → 红色波纹 */
.user-menu-item--danger .user-ripple{background:rgba(209,67,67,0.25);}
@keyframes userRipple{
  to{transform:scale(1);opacity:0;}
}
@media (prefers-reduced-motion:reduce){
  .user-ripple{animation-duration:0.2s;}
  .lt-tl-line.lead::after{animation:none;}
}

/* ============ 右侧抽屉 ============ */
.drawer-mask{
  position:fixed;top:56px;left:0;right:0;bottom:0;
  background:rgba(0,0,0,0.3);z-index:40;
  opacity:0;visibility:hidden;
  transition:opacity 0.25s,visibility 0.25s;
}
.drawer-mask.show{opacity:1;visibility:visible;}
.notice-drawer{
  position:fixed;top:56px;right:0;bottom:0;width:380px;
  background:#FFFFFF;z-index:50;
  transform:translateX(100%);
  transition:transform 0.3s cubic-bezier(0.4,0,0.2,1);
  display:flex;flex-direction:column;
  box-shadow:-8px 0 16px rgba(30,58,95,0.10);
  pointer-events:none;
}
.notice-drawer.open{transform:translateX(0);pointer-events:auto;}
.notice-drawer-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:18px 16px;border-bottom:1px solid #E5E7EB;
  flex-shrink:0;
}
.notice-drawer-title{
  display:flex;align-items:center;gap:8px;
  font-size:15px;font-weight:600;color:var(--brand);
}
.notice-drawer-icon{font-size:var(--font-size-xl);}
.notice-drawer-stats{
  font-size:var(--font-size-sm);color:var(--text-muted);font-weight:400;margin-left:6px;
}
.notice-drawer-actions{display:flex;align-items:center;gap:8px;}
.notice-drawer-btn{
  font-size:var(--font-size-base);color:var(--text-secondary);background:transparent;
  border:none;padding:8px 10px;border-radius:8px;cursor:pointer;
  transition:background 0.2s;
}
.notice-drawer-btn:hover{background:#F1F3F5;}
.notice-drawer-close{
  width:28px;height:28px;border:none;background:transparent;
  color:var(--text-muted);font-size:var(--font-size-xl);cursor:pointer;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  transition:all 0.2s;
}
.notice-drawer-close:hover{background:#F1F3F5;color:var(--text-tertiary);}
.notice-drawer-body{
  flex:1;overflow-y:auto;padding:8px 0;
}
.notice-drawer-empty{
  text-align:center;padding:40px 20px;color:var(--text-muted);font-size:var(--font-size-md);
}
.notice-drawer-item{
  display:flex;align-items:flex-start;gap:10px;
  padding:12px 16px;border-bottom:1px solid #E5E7EB;
  cursor:pointer;transition:background 0.15s;
}
.notice-drawer-item:hover{background:#F1F3F5;}
.notice-drawer-item.unread{background:#DBEAFE;}
.notice-drawer-item.unread:hover{background:#DBEAFE;}
.notice-drawer-item.expanded{background:#DBEAFE;border-left:3px solid var(--brand);}
.notice-drawer-item-title{
  font-size:var(--font-size-base);color:var(--text-primary);font-weight:500;line-height:1.4;
  flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;
}
.notice-drawer-item.expanded .notice-drawer-item-title{
  overflow:visible;text-overflow:clip;display:block;-webkit-line-clamp:unset;
}
.notice-drawer-item.unread .notice-drawer-item-title{font-weight:600;}
.notice-drawer-item-content{
  font-size:var(--font-size-base);color:var(--text-tertiary);line-height:1.6;
  margin-top:8px;padding:8px 10px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  white-space:pre-wrap;word-break:break-all;
}
.notice-drawer-item-meta{
  font-size:var(--font-size-sm);color:var(--text-muted);
}
.notice-drawer-item-type{
  font-size:var(--font-size-xs);padding:1px 6px;border-radius:8px;font-weight:500;flex-shrink:0;
}
.notice-drawer-item-type.type-system{background:#F1F3F5;color:var(--text-secondary);}
.notice-drawer-item-type.type-contract{background:#eefbf4;color:#1c6b3f;}
.notice-drawer-item-type.type-approval{background:#fff7e6;color:#a05b00;}
.notice-drawer-item-type.type-marketing{background:#fdf2f8;color:#9d174d;}
.notice-drawer-item-unread-dot{
  width:6px;height:6px;border-radius:50%;background:#e24b4b;
  flex-shrink:0;margin-top:8px;
}
.notice-drawer-footer{
  padding:12px 16px;border-top:1px solid #E5E7EB;
  text-align:center;flex-shrink:0;
}
.notice-drawer-link{
  font-size:var(--font-size-base);color:var(--text-secondary);cursor:pointer;
  text-decoration:none;transition:color 0.2s;
}
.notice-drawer-link:hover{color:var(--text-primary);text-decoration:underline;}

/* ============ 管理员表格样式 ============ */
.admin-user-table{
  width:100%;border-collapse:separate;border-spacing:0;
  font-size:var(--font-size-table);color:var(--text-primary);
}
.admin-user-table th{
  background:var(--bg-subtle);color:var(--text-primary);font-weight:600;
  padding:8px 6px;border-bottom:1px solid var(--border);
  text-align:left;white-space:nowrap;
}
.admin-user-table td{
  padding:10px 12px;border-bottom:1px solid var(--border);
  background:var(--bg-surface);vertical-align:middle;line-height:1.4;
}
.admin-user-table .admin-role-tag{
  display:inline-block;padding:1px 6px;border-radius:8px;
  font-size:var(--font-size-xs);font-weight:500;
}
.admin-role-tag.role-admin{background:#F1F3F5;color:var(--brand);}
.admin-role-tag.role-boss{background:#f5ece6;color:#7a4a2a;}
.admin-role-tag.role-车间{background:#e6f0e6;color:#3a6b3a;}
.admin-role-tag.role-技术{background:#DBEAFE;color:#3a4a7a;}
.admin-role-tag.role-operator{background:#F1F3F5;color:var(--text-secondary);}
.admin-user-table .role-cell{display:flex;align-items:center;gap:8px;position:relative;}
.admin-user-table .role-edit-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;cursor:pointer;border-radius:3px;
  color:var(--text-tertiary);font-size:var(--font-size-xs);transition:all .15s;
}
.admin-user-table .role-edit-icon:hover{background:#F1F3F5;color:var(--brand);}
.admin-user-table .role-dropdown{
  position:fixed;z-index:99999;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:var(--radius-input);
  box-shadow:0 2px 8px rgba(0,0,0,0.12);min-width:80px;
  padding:2px 0;
}
.admin-user-table .role-dropdown-item{
  padding:8px 10px;font-size:var(--font-size-sm);cursor:pointer;
  color:var(--brand);transition:background .12s;
}
.admin-user-table .role-dropdown-item:hover{background:#F1F3F5;}
.admin-user-table .role-dropdown-item.active{color:#3a6ea5;font-weight:600;}
.admin-user-table .copy-credential-icon{
  display:inline-flex;align-items:center;justify-content:center;
  margin-left:8px;cursor:pointer;font-size:var(--font-size-sm);
  color:var(--text-tertiary);transition:all .15s;border-radius:3px;
  width:16px;height:16px;
}
.admin-user-table .copy-credential-icon:hover{background:#F1F3F5;color:var(--brand);}
.admin-user-table .remark-cell{display:flex;align-items:center;gap:4px;position:relative;}
.admin-user-table .remark-edit-input{
  font-size:var(--font-size-sm);padding:1px 8px;border:1px solid #3a6ea5;border-radius:3px;
  background:#fff;color:var(--text-primary);outline:none;width:120px;
}
.admin-user-table .admin-actions{white-space:nowrap;}
.admin-user-table .admin-actions .profile-btn-sm{margin-right:8px;}
.admin-user-empty{
  text-align:center;padding:20px;color:var(--text-muted);font-size:var(--font-size-base);
}

/* ============ 登录遮罩（固定深色高级风，不随系统主题变化） ============ */
/* ============================================================
   登录页：顶部品牌栏 / 左侧数据中枢视觉 / 右侧玻璃登录卡 / 底部帮助条
   ============================================================ */
.auth-overlay{
  position:fixed;inset:0;z-index:99999;
  display:none;flex-direction:column;
  padding:24px 56px 0;overflow:hidden;
  background:
    radial-gradient(1200px 820px at 72% -12%, #2A73CE 0%, rgba(42,115,206,0) 60%),
    radial-gradient(960px 720px at -6% 112%, #063980 0%, rgba(6,57,128,0) 55%),
    linear-gradient(180deg,#1259B8 0%,#093D9E 48%,#052C78 100%);
}
/* 首帧即显示登录遮罩（由 head 内联脚本按 token 有无提前打类） */
html.auth-show .auth-overlay{display:flex;}

/* 顶部品牌栏（点击返回门户） */
.auth-top{
  flex:none;display:flex;align-items:center;gap:14px;height:60px;
  align-self:flex-start;text-decoration:none;border-radius:12px;
  cursor:pointer;
  animation:authFadeUp .5s var(--ease-out) both;
  transition:opacity .2s var(--ease-out);
}
.auth-top:hover{opacity:.82;}
.auth-top:active{opacity:.66;}
.auth-top-logo{height:46px;width:auto;object-fit:contain;display:block;}
.auth-top-name strong{
  display:block;font-size:19px;font-weight:700;color:#F1F5FC;letter-spacing:3px;line-height:1.2;
}
.auth-top-name span{
  display:block;font-size:10.5px;color:rgba(190,208,238,0.66);letter-spacing:2.4px;margin-top:2px;
}

/* 主区域：整体居中收拢，登录卡不贴右 */
.auth-wrap{
  flex:1;min-height:0;
  display:flex;align-items:center;justify-content:center;
  gap:clamp(28px,3.5vw,64px);
}

/* 左侧视觉 */
.auth-visual{
  flex:0 1 680px;min-width:0;height:100%;
  display:flex;align-items:center;justify-content:center;
  animation:authFadeUp .7s var(--ease-out) .08s both;
}
.auth-visual .av{
  width:100%;max-width:680px;height:auto;max-height:100%;
}
.av-link{
  stroke:#5E9BFF;stroke-opacity:0.45;stroke-width:1.6;
  stroke-dasharray:4 8;stroke-linecap:round;
  animation:avDash .9s linear infinite;
}
.av-ring{animation:avDash 1.8s linear infinite;}
.av-ring-rev{animation-direction:reverse;}
.av-ring2{animation:avDash 2.2s linear infinite reverse;}
@keyframes avDash{to{stroke-dashoffset:-24;}}
.av-pod{
  transform-box:fill-box;transform-origin:center;
  animation:avFloat 4.2s ease-in-out infinite alternate;
}
@keyframes avFloat{
  from{transform:translateY(0) scale(1);}
  to{transform:translateY(-16px) scale(1.035);}
}
.av-pill-text{
  fill:#FFFFFF;font-size:16px;font-weight:600;letter-spacing:2px;
  text-anchor:middle;dominant-baseline:central;
  font-family:"Microsoft YaHei","PingFang SC",sans-serif;
}

/* 右侧玻璃登录卡（沿用数字门户同色玻璃） */
.auth-overlay .auth-card{
  flex:none;width:400px;max-width:100%;
  background:linear-gradient(160deg, rgba(255,255,255,0.18), rgba(255,255,255,0.08));
  -webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);
  border:1px solid rgba(185,205,235,0.42);
  border-radius:16px;padding:38px 36px 26px;
  box-shadow:0 30px 80px rgba(4,12,36,0.5),inset 0 1px 0 rgba(255,255,255,0.22);
  animation:authCardIn .55s var(--ease-out) both;
}
@keyframes authCardIn{
  from{opacity:0;transform:translateY(18px) scale(.985);}
  to{opacity:1;transform:translateY(0) scale(1);}
}
@keyframes authFadeUp{
  from{opacity:0;transform:translateY(14px);}
  to{opacity:1;transform:translateY(0);}
}
.auth-overlay .auth-logo{
  font-size:24px;font-weight:700;color:#FFFFFF;
  letter-spacing:1px;margin:0;
}
/* 标题下红色短线（同数字门户点缀） */
.auth-overlay .auth-logo::after{
  content:"";display:block;width:48px;height:4px;border-radius:4px;margin-top:12px;
  background:linear-gradient(90deg,#FF6B6B,#C81E2E);
}
.auth-overlay .auth-sub{
  font-size:13.5px;color:#C3CFE3;
  margin:8px 0 26px;letter-spacing:.5px;
}
.auth-overlay .auth-field{
  margin-bottom:16px;position:relative;
}
.auth-overlay .auth-field .auth-input-wrap{
  position:relative;display:flex;align-items:center;
}
.auth-overlay .auth-field .auth-input-wrap .auth-icon{
  position:absolute;left:13px;color:rgba(255,255,255,.82);font-size:15px;pointer-events:none;
}
.auth-overlay .auth-field input{
  width:100%;height:48px;padding:0 42px 0 40px;
  border:1px solid rgba(185,205,235,0.42);border-radius:10px;
  font-size:14px;box-sizing:border-box;color:#FFFFFF;
  background:rgba(255,255,255,0.1);
  transition:border-color .18s var(--ease-out),box-shadow .18s var(--ease-out),background .18s var(--ease-out);
}
.auth-overlay .auth-field input:hover{
  border-color:rgba(195,213,242,0.55);
}
.auth-overlay .auth-field input:focus{
  outline:none;border-color:#7EB0FF;background:rgba(255,255,255,0.14);
  box-shadow:0 0 0 3px rgba(96,165,250,0.22);
}
.auth-overlay .auth-field input::placeholder{
  color:rgba(255,255,255,0.8);
}
.auth-overlay .auth-eye{
  position:absolute;right:8px;width:30px;height:30px;padding:0;
  background:transparent;border:none;border-radius:6px;
  color:rgba(255,255,255,.82);font-size:15px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:color .15s,background .15s;
}
.auth-overlay .auth-eye:hover{color:#FFFFFF;background:rgba(96,165,250,0.16);}
.auth-overlay .auth-options{
  display:flex;align-items:center;justify-content:space-between;
  margin:2px 0 20px;font-size:13px;
}
.auth-overlay .auth-options label{
  display:flex;align-items:center;gap:6px;color:#C3CFE3;cursor:pointer;
}
.auth-overlay .auth-options label input[type="checkbox"]{
  width:18px;height:18px;accent-color:#4D94FF;cursor:pointer;
}
.auth-overlay .auth-error{
  font-size:13px;color:#FF8A8A;background:rgba(255,107,107,0.1);border:1px solid rgba(255,107,107,0.28);
  padding:8px 12px;border-radius:8px;margin:0 0 12px;
  min-height:16px;text-align:center;display:none;
}
.auth-overlay .auth-error.show{display:block;animation:shakeIn .3s ease;}
@keyframes shakeIn{
  0%,100%{transform:translateX(0);}
  25%{transform:translateX(-8px);}
  75%{transform:translateX(8px);}
}
.auth-overlay .auth-btn{
  width:100%;height:48px;background:linear-gradient(135deg,#1B6FE0,#3E8BFF);
  color:#fff;border:none;border-radius:10px;
  font-size:16px;font-weight:600;letter-spacing:2px;cursor:pointer;
  transition:transform .15s var(--ease-spring),box-shadow .2s var(--ease-out),filter .2s var(--ease-out);
  box-shadow:0 10px 26px -6px rgba(30,110,230,0.55);
}
.auth-overlay .auth-btn:hover{
  filter:brightness(1.08);
  box-shadow:0 14px 32px -6px rgba(47,123,255,0.60);
  transform:translateY(-1px);
}
.auth-overlay .auth-btn:active{
  transform:translateY(0) scale(.98);
  box-shadow:0 4px 14px rgba(30,110,230,0.45);
}
.auth-overlay .auth-btn:disabled{
  opacity:.6;cursor:not-allowed;transform:none;
}
.auth-note{
  margin-top:18px;text-align:center;
  font-size:12px;color:#AEBCD4;
}

/* 浏览器自动填充：固定深色，登录页不受系统主题影响 */
.auth-overlay input:-webkit-autofill,
.auth-overlay input:-webkit-autofill:hover,
.auth-overlay input:-webkit-autofill:focus{
  -webkit-text-fill-color:#FFFFFF;
  caret-color:#FFFFFF;
  -webkit-box-shadow:0 0 0 1000px #0B2E63 inset;
  transition:background-color 9999s ease-out;
}

/* 底部帮助条 */
.auth-bottom{
  flex:none;height:52px;
  display:flex;align-items:center;justify-content:center;gap:8px;
  font-size:12.5px;color:#AEBCD4;letter-spacing:.5px;
  animation:authFadeUp .5s var(--ease-out) .15s both;
}
.auth-bottom i{color:#AEBCD4;}

/* ---------- 中窄屏：收起视觉，卡片居中 ---------- */
@media (max-width:1024px){
  .auth-visual{display:none;}
}
@media (max-width:520px){
  .auth-overlay{padding:18px 18px 0;}
  .auth-overlay .auth-card{width:100%;padding:30px 24px 22px;}
  .auth-top-name span{display:none;}
}

/* ---------- 尊重系统"减少动态效果" ---------- */
@media (prefers-reduced-motion: reduce){
  .auth-overlay .auth-card,.auth-top,.auth-visual,.auth-bottom,
  .av-pod,.av-link,.av-ring,.av-ring-rev,.av-ring2{animation:none;}
}

/* ============ 未登录提示弹窗已废弃 ============ */

/* ============ 通用编辑弹窗（用于基本信息编辑等） ============ */
.profile-edit-modal{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:9998;
  align-items:center;justify-content:center;
}
.profile-edit-modal.show{display:flex;}
.profile-edit-panel{
  width:380px;max-width:92vw;background:#FFFFFF;border-radius:8px;
  border:1px solid #E5E7EB;overflow:hidden;
}
.profile-edit-header{
  display:flex;align-items:center;justify-content:flex-end;
  padding:var(--modal-pad-y) var(--modal-pad-x);background:#FCFDFD;border-bottom:1px solid #E5E7EB;
}
.profile-edit-header h3{display:none;margin:0;font-size:var(--font-size-md);color:var(--text-primary);font-weight:600;}
.profile-edit-close{
  background:transparent;border:none;color:var(--text-tertiary);cursor:pointer;
}
.profile-edit-close:hover{background:#F1F3F5;color:var(--text-primary);}
.profile-edit-body{padding:var(--modal-pad-y) var(--modal-pad-x);}
.profile-edit-body .profile-form-row{margin-bottom:8px;}
.profile-edit-body .profile-form-row:last-child{margin-bottom:0;}

@media (max-width: 820px){
  .page-inner{flex-direction:column;height:auto;min-height:calc(100vh - 56px);}
  .page-left-spacer{display:none;width:100%;min-width:0;}
  .page-content-wrap{margin:0;}
  .profile-layout{flex-direction:column;height:auto;min-height:calc(100vh - 56px);}
  .profile-sidebar{width:100%;min-width:0;border-right:none;border-bottom:1px solid #E5E7EB;padding:4px;}
  .profile-content{padding:14px;}
  .profile-form-row{flex-wrap:wrap;}
  .profile-form-label{width:auto;margin-bottom:8px;}
}
/* 历史台账、系统设置等通用页面容器 */
/* ============ 统一页面标题区 PageHeader ============
   设计真值：个人中心/设置面板头（16px 近黑标题 + 15px 深蓝图标 + 1px 浅分隔线），
   全站页面标题只消费此组 token，禁止各页自定字号/颜色 */
:root{
  --ph-title-size:16px;
  --ph-icon-size:15px;
  --ph-title-color:#1D2129;
  --ph-icon-color:var(--shenhua-blue);
  --ph-divider:#EEF0F3;
}
body[data-theme="dark"]{
  --ph-title-color:var(--text-primary);
  --ph-divider:var(--border);
}
.page-header{
  display:flex;align-items:center;gap:8px;flex:none;
  margin:0 0 12px;padding:0 0 10px;
  border-bottom:1px solid var(--ph-divider);
}
.page-header-main{display:flex;align-items:baseline;gap:8px;min-width:0;flex:1;flex-wrap:wrap;}
.page-header-icon{
  font-size:var(--ph-icon-size);line-height:1;color:var(--ph-icon-color);
  display:inline-flex;align-items:center;flex:none;align-self:center;
}
.page-header-title{font-size:var(--ph-title-size);font-weight:600;color:var(--ph-title-color);margin:0;line-height:1.4;}
.page-header-subtitle{font-size:var(--font-size-sm);color:var(--text-muted);margin:0;line-height:1.4;}
.page-header-actions{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;}
.page-header--actions-only{border-bottom:none;padding:0;}
/* 紧接二级 tab 栏时，分隔线由 tab 下划线承担，避免双线；间距与首页一致 */
.page-header--tabs{border-bottom:1px solid var(--ph-divider);padding-bottom:10px;margin-bottom:12px;}
/* gapped flex 容器内由父级 gap 统一控制间距，标题不再自带下边距 */
.page-body > .page-header,
.fm-main > .page-header{margin-bottom:0;}
/* 首页容器 gap:0，标题自行留距 */
.dashboard-panel-wrap > .page-header{margin-bottom:12px;}
/* block 流面板内（耗材页）沿用面板头外边距 */
.profile-panel > .page-header{margin:0 0 12px;}

.page-body{
  width:100%;flex:1;padding:16px;
  display:flex;flex-direction:column;gap:12px;box-sizing:border-box;min-height:0;
}
#page-ledger .card:nth-child(2){flex:1;display:flex;flex-direction:column;min-height:0;}
#page-ledger .card:nth-child(2) .table-wrap{flex:1;min-height:0;}
/* 台账表格字号 */
#page-ledger .table-wrap table{font-size:var(--font-size-table);}
#page-ledger .table-wrap th,#page-ledger .table-wrap td{font-size:var(--font-size-table);}

/* ============ 首页看板 统一设计系统 ============ */
/* 设计变量：背景 #f3efe9 | 卡片 #fff | 边框 #E5E7EB | 表头 #E5E7EB | 主色 var(--brand) */

/* 双面板容器 - 透明，继承页面浅灰背景 */
.dashboard-panel-wrap{
  width:100%;display:flex;flex-direction:column;gap:0;flex:1;
  background:transparent;padding:16px;box-sizing:border-box;
}
/* 大屏左右留白：2K 24px，4K 32px（上下内边距不变） */
@media (min-width:1921px){
  .page-body{padding-left:24px;padding-right:24px;}
  .dashboard-panel-wrap{padding-left:24px;padding-right:24px;}
  #page-aftersale .page-body{padding-left:24px;padding-right:24px;}
}
@media (min-width:2561px){
  .page-body{padding-left:32px;padding-right:32px;}
  .dashboard-panel-wrap{padding-left:32px;padding-right:32px;}
  #page-aftersale .page-body{padding-left:32px;padding-right:32px;}
}
/* 面板切换 tab（标题区已统一为 .page-header，此处仅保留 tab 胶囊样式） */
.dashboard-panel-tabs{
  display:inline-flex;background:#F1F3F5;border-radius:8px;padding:3px;gap:2px;
}
.dashboard-panel-tab{
  padding:5px 15px;font-size:var(--font-size-md);font-weight:500;
  color:var(--text-secondary);border-radius:8px;cursor:pointer;
  transition:all .15s;user-select:none;display:inline-flex;align-items:center;gap:8px;
}
.dashboard-panel-tab:hover{color:var(--shenhua-blue);}
.dashboard-panel-tab.active{
  background:#fff;color:var(--shenhua-blue);
  box-shadow:0 1px 3px rgba(30,58,95,0.12);
  font-weight:600;
}

/* 面板容器 - 透明承载子元素 */
.dashboard-panel{display:none;background:transparent;padding:0;flex:1;min-height:0;}
.dashboard-panel.active{display:flex;flex-direction:column;gap:10px;}

/* 财务对账-面板切换（对账/收款） */
.bill-panel-tabs{
  display:inline-flex;background:#F1F3F5;border-radius:8px;padding:3px;gap:2px;
}
.bill-panel-tab{
  padding:5px 15px;font-size:var(--font-size-md);font-weight:500;
  color:var(--text-secondary);border-radius:8px;cursor:pointer;
  transition:all .15s;user-select:none;display:inline-flex;align-items:center;gap:8px;
}
.bill-panel-tab:hover{color:var(--shenhua-blue);}
.bill-panel-tab.active{
  background:#fff;color:var(--shenhua-blue);
  box-shadow:0 1px 3px rgba(30,58,95,0.12);
  font-weight:600;
}

/* 工具卡片网格 */
.dashboard-tool-grid{
  display:grid;gap:10px;grid-template-columns:repeat(auto-fill, minmax(140px, 1fr));
}
.dashboard-tool-card{
  background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:10px;
  display:flex;flex-direction:column;gap:6px;
  transition:border-color .15s ease,background-color .15s ease;
  cursor:pointer;text-align:center;
  box-shadow:none;
}
.dashboard-tool-card:hover{
  background:var(--bg-subtle);
  border-color:var(--border-strong);
}
.dashboard-tool-card-cover{
  height:68px;border-radius:8px;background:var(--bg-subtle);
  display:flex;align-items:center;justify-content:center;font-size:var(--font-size-display-2);line-height:1;
}
.dashboard-tool-card-title{
  font-size:var(--font-size-base);color:var(--text-primary);font-weight:500;line-height:1.3;
}
.dashboard-tool-card-desc{
  font-size:var(--font-size-xs);color:var(--text-muted);line-height:1.3;
}

/* 记事本卡片徽标 */
.notes-count-badge{
  position:absolute;top:-6px;right:-6px;min-width:16px;height:16px;
  padding:0 8px;background:#ef4444;color:#fff;font-size:var(--font-size-xs);font-weight:600;
  border-radius:8px;display:flex;align-items:center;justify-content:center;
  line-height:1;
}
.notes-tool-card .dashboard-tool-card-cover{position:relative;}

/* 记事本筛选栏 */
.notes-filter-bar{
  display:flex;gap:6px;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid #E5E7EB;
}
.notes-tab{
  padding:8px 12px;font-size:var(--font-size-base);color:var(--text-tertiary);border-radius:8px;cursor:pointer;
  transition:all .15s;background:#FCFDFD;
}
.notes-tab:hover{color:var(--shenhua-blue);background:#F1F3F5;}
.notes-tab.active{background:var(--shenhua-blue);color:#fff;font-weight:600;}

/* 记事本输入行 */
.notes-input-row{
  display:flex;gap:8px;align-items:center;margin-bottom:12px;
}
.notes-input{
  flex:1;height:var(--form-height);padding:var(--form-padding);font-size:var(--font-size-form-sm);
  border:var(--form-border);border-radius:var(--radius-input);outline:none;
  background:var(--form-bg);transition:border-color .15s;
}
.notes-input:focus{border-color:var(--form-border-focus);box-shadow:var(--form-shadow-focus);}
.notes-remind{
  height:var(--form-height);padding:0 10px;font-size:var(--font-size-form-xs);
  border:var(--form-border);border-radius:var(--radius-input);outline:none;
  background:#FFFFFF;color:var(--text-tertiary);cursor:pointer;
}
.notes-btn{
  height:36px;padding:0 18px;font-size:var(--font-size-md);border:none;border-radius:8px;
  cursor:pointer;transition:all .15s;white-space:nowrap;
}
.notes-btn-primary{background:var(--brand);color:#fff;}
.notes-btn-primary:hover{background:var(--brand-hover);color:#fff;}

/* 笔记列表 */
.notes-list{
  display:flex;flex-direction:column;gap:6px;max-height:400px;overflow-y:auto;
}
.note-card{
  display:flex;align-items:center;gap:10px;height:48px;
  padding:0 12px;background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  transition:all .15s;
}
.note-card:hover{background:#F1F3F5;border-color:#D1D5DB;}
.note-card.completed{opacity:0.7;}
.note-card.completed .note-content{text-decoration:line-through;color:var(--text-muted);}

.note-checkbox{
  width:16px;height:16px;cursor:pointer;flex-shrink:0;
}
.note-content{
  flex:1;font-size:var(--font-size-md);color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.note-remind{
  font-size:var(--font-size-sm);color:var(--text-muted);padding:3px 8px;background:#FCFDFD;border-radius:8px;flex-shrink:0;
}
.note-remind.active{background:#fef3c7;color:#92400e;}

.note-actions{display:flex;gap:6px;flex-shrink:0;}
.note-btn{
  height:26px;padding:0 10px;font-size:var(--font-size-base);border:none;border-radius:8px;
  cursor:pointer;transition:all .15s;
}
.note-btn-complete{background:transparent;color:var(--text-secondary);border:1px solid #E5E7EB;}
.note-btn-complete:hover{background:#F1F3F5;color:var(--text-primary);}
.note-btn-uncomplete{background:transparent;color:var(--text-secondary);border:1px solid #E5E7EB;}
.note-btn-uncomplete:hover{background:#F1F3F5;color:var(--text-primary);}
.note-btn-delete{background:transparent;color:var(--danger);border:1px solid #E5E7EB;}
.note-btn-delete:hover{background:#F1F3F5;color:var(--danger);font-weight:600;}
.note-btn-remind{background:transparent;color:var(--text-secondary);border:1px solid #E5E7EB;font-size:var(--font-size-sm);padding:3px 8px;height:auto;}
.note-btn-remind:hover{background:#F1F3F5;color:var(--text-primary);}

/* 提醒设置弹窗 */
.notes-reminder-overlay{
  position:fixed;top:0;left:0;right:0;bottom:0;
  background:rgba(0,0,0,0.4);z-index:9999;
  display:flex;align-items:center;justify-content:center;
  animation:fadeIn .2s ease;
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.notes-reminder-dialog{
  background:#FFFFFF;border-radius:8px;padding:28px;
  min-width:320px;max-width:400px;
  box-shadow:0 20px 60px rgba(0,0,0,0.2);
  animation:slideUp .25s ease;
}
@keyframes slideUp{from{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}
.notes-reminder-title{
  font-size:var(--font-size-xl);font-weight:600;color:#334155;margin-bottom:12px;
}
.notes-reminder-content{
  font-size:var(--font-size-md);color:var(--text-tertiary);padding:10px 12px;
  background:#FCFDFD;border-radius:8px;margin-bottom:16px;
  max-height:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.notes-remind-picker{
  width:100%;padding:10px 12px;border:var(--form-border);border-radius:var(--radius-input);
  font-size:var(--font-size-2xl);margin-bottom:12px;box-sizing:border-box;
  outline:none;transition:border-color .15s;
}
.notes-remind-picker:focus{border-color:var(--form-border-focus);}
.notes-reminder-shortcuts{
  display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;
}
.notes-reminder-shortcut{
  padding:6px 12px;font-size:var(--font-size-base);
  background:#FCFDFD;border:1px solid #D1D5DB;border-radius:8px;
  cursor:pointer;transition:all .15s;color:var(--text-secondary);
}
.notes-reminder-shortcut:hover{background:#e0e7ff;border-color:#c7d2fe;color:#3730a3;}
.notes-reminder-actions{
  display:flex;gap:10px;justify-content:flex-end;
}
.notes-reminder-cancel, .notes-reminder-confirm{
  padding:8px 20px;border:none;border-radius:8px;
  font-size:var(--font-size-md);cursor:pointer;transition:all .15s;
}
.notes-reminder-cancel{background:#FCFDFD;color:var(--text-tertiary);}
.notes-reminder-cancel:hover{background:#F1F3F5;}
.notes-reminder-confirm{background:#6366f1;color:#fff;}
.notes-reminder-confirm:hover{background:#4f46e5;}

/* 空状态 */
.notes-empty{
  padding:40px;text-align:center;color:var(--text-muted);font-size:var(--font-size-md);
}

/* 主体区域 */
.dashboard-body{
  width:100%;margin:0 auto;padding:0;
  display:flex;flex-direction:column;gap:10px;box-sizing:border-box;flex:1;
}
/* 生产看板（仅管理员）：内部两个区块沿用 10px 间距；隐藏由内联 display:none 控制 */
#dashAdminBoard{display:flex;flex-direction:column;gap:10px;}

/* KPI 卡片网格 */
.dashboard-kpi-grid{
  display:grid;grid-template-columns:repeat(4, 1fr);gap:10px;
}
.dashboard-kpi-card{
  position:relative;
  background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;padding:14px 18px 12px;
  display:flex;flex-direction:column;gap:7px;
  transition:border-color .15s ease,background-color .15s ease;
  box-shadow:none;
}
/* 顶部品牌色细杠（仪表识别线） */
.dashboard-kpi-card::before{
  content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,var(--brand),#2F7BFF);
  opacity:.9;
}
.dashboard-kpi-card:hover{
  border-color:var(--border-strong);
  box-shadow:none;
}
.dashboard-kpi-label{
  font-size:var(--font-size-sm);color:var(--text-tertiary);font-weight:500;letter-spacing:0;
  display:flex;align-items:center;gap:8px;
}
.dashboard-kpi-icon{font-size:var(--font-size-2xl);line-height:1;}
.dashboard-kpi-value{
  font-size:32px;font-weight:700;color:var(--brand);line-height:1.1;
  letter-spacing:-0.5px;font-variant-numeric:tabular-nums;
}
.dashboard-kpi-unit{
  font-size:13px;color:var(--text-muted);font-weight:500;margin-left:6px;letter-spacing:0;
}
.dashboard-kpi-delta{
  font-size:var(--font-size-sm);color:var(--text-muted);display:flex;align-items:center;gap:8px;
  letter-spacing:0;
}
.dashboard-kpi-delta.up{color:#1c6b3f;}
.dashboard-kpi-delta.down{color:#DC5A5A;}

/* 看板区块（图表区 + 最近订单） */
.dashboard-section{
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  box-shadow:var(--shadow-card);
}
.dashboard-section-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 18px;border-bottom:1px solid #E5E7EB;
}
.dashboard-section-title{
  font-size:var(--ph-title-size);font-weight:600;color:var(--ph-title-color);margin:0;
  display:flex;align-items:center;gap:8px;
}
.dashboard-section-title .ds-icon{font-size:var(--ph-icon-size);color:var(--ph-icon-color);}
.dashboard-section-body{padding:12px 18px;}

/* 图表占位 - 白底虚线框 */
.dashboard-chart-placeholder{
  height:240px;border:1px dashed #E5E7EB;border-radius:8px;
  background:#FCFDFD;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  color:var(--text-muted);font-size:var(--font-size-base);
}
.dashboard-chart-placeholder svg{opacity:0.5;}
.dashboard-chart-placeholder .ds-hint{font-size:var(--font-size-sm);color:#D1D5DB;}

/* 最近订单表格 - 统一台账风格 */
.dashboard-recent-table{
  width:100%;border-collapse:separate;border-spacing:0;font-size:var(--font-size-table);
}
.dashboard-recent-table th{
  background:var(--bg-subtle);color:var(--text-tertiary);font-weight:600;
  padding:8px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;
}
.dashboard-recent-table td{
  padding:8px 10px;border-bottom:1px solid var(--border);
  color:var(--text-tertiary);background:var(--bg-surface);vertical-align:middle;
}
.dashboard-recent-table .empty-row{color:#D1D5DB;text-align:center;padding:20px;}
.dashboard-recent-table .status-tag{
  display:inline-block;padding:1px 6px;border-radius:8px;font-size:var(--font-size-sm);font-weight:500;
}
.status-tag.done{background:#eefbf4;color:#1c6b3f;}
.status-tag.pending{background:#fff7e6;color:#a05b00;}
.status-tag.draft{background:#F1F3F5;color:var(--text-secondary);}
/* 最近订单状态标签 */
.dashboard-recent-table .status-shipped{
  display:inline-block;padding:1px 8px;border-radius:8px;font-size:var(--font-size-sm);
  background:#eefbf4;color:#1c6b3f;font-weight:500;
}
.dashboard-recent-table .status-pending{
  display:inline-block;padding:1px 8px;border-radius:8px;font-size:var(--font-size-sm);
  background:#fff7e6;color:#a05b00;font-weight:500;
}
.dashboard-recent-table .status-boss{
  display:inline-block;padding:1px 8px;border-radius:8px;font-size:var(--font-size-sm);
  background:#fce4e4;color:#b91c1c;font-weight:500;
}
.dashboard-recent-table .status-chejian{
  display:inline-block;padding:1px 8px;border-radius:8px;font-size:var(--font-size-sm);
  background:#fff7e6;color:#92400e;font-weight:500;
}
.dashboard-recent-table .status-fahuo{
  display:inline-block;padding:1px 8px;border-radius:8px;font-size:var(--font-size-sm);
  background:#eefbf4;color:var(--text-secondary);font-weight:500;
}


/* 大尺寸工具弹窗（放完整参数计算器/生成合同） */
.tool-modal{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:9998;align-items:center;justify-content:center;
}
.tool-modal.show{
  display:flex;
}
.tool-modal .tool-modal-panel{
  background:#FFFFFF;width:1280px;max-width:96vw;border-radius:8px;
  max-height:92vh;display:flex;flex-direction:column;overflow:hidden;border:1px solid #E5E7EB;
}
.tool-modal .tool-modal-header{
  display:flex;align-items:center;gap:10px;padding:var(--modal-pad-y) var(--modal-pad-x);background:#FCFDFD;border-bottom:1px solid #E5E7EB;
}
/* 隐藏所有弹窗标题，只保留关闭按钮和工具栏；关闭按钮统一右上角 */
.tool-modal .tool-modal-header h3{display:none;}
.tool-modal .tool-modal-header .tool-modal-close{margin-left:auto;}
.lcc-header h3{display:none;}
.fm-upload-title{display:none;}
.profile-edit-header h3{display:none;}
.confirm-modal-header{display:none;}
.lcc-header,.fm-upload-header,.profile-edit-header{justify-content:flex-end;}
/* contract-panel 类弹窗的关闭按钮栏：抵消面板内边距，使按钮距面板边缘为统一弹窗间距 */
.panel-close-bar{display:flex;justify-content:flex-end;margin:calc(0px - var(--modal-pad-y)) calc(0px - var(--modal-pad-x)) 0;padding:var(--modal-pad-y) var(--modal-pad-x);}
/* 所有弹窗关闭按钮统一样式：30×30 方形，右上角 */
.tool-modal .tool-modal-close,
.lcc-close,
.fm-upload-close,
.profile-edit-close,
.panel-close-btn{
  width:30px;height:30px;padding:0;flex-shrink:0;
  display:inline-flex;align-items:center;justify-content:center;
  background:transparent;border:none;border-radius:8px;
  font-size:18px;color:var(--text-tertiary);cursor:pointer;line-height:1;
  transition:background .15s,color .15s;
}
.tool-modal .tool-modal-close:hover,
.lcc-close:hover,
.fm-upload-close:hover,
.profile-edit-close:hover,
.panel-close-btn:hover{background:#F1F3F5;color:var(--text-primary);}
/* ========== 报价单 Modal 专属（Grid 重构：左 280 编辑抽屉 + 右 A4 铺满预览） ==========
   核心诉求：1）A4 Word 预览铺满面板；2）A4 内容不变即可编辑；3）导出格式只放 3 个 40×40 图标，不占布局。
   放弃原来"Modal + 二级导出遮罩弹窗"两级结构，改为单屏所见即所得：
   - Grid：280px（编辑抽屉） / 1fr（A4 舞台），彻底消除原来的"双滚动条+横向滚动条"视觉怪感
   - A4 舞台：按 modal 可视区做最大缩放（cover fit，顶部对齐，视觉居中标尺）
   - 导出 3 图标：header 右侧与 × 同排，仅 40×40，hover tooltip 说明
   其他 5 个 Modal（参数/合同/标签/记事本/售后）不受影响（header / panel 不强制污染） */
#quoteModal > .tool-modal-panel{position:relative;width:min(1280px,96vw)!important;height:92vh!important;max-height:94vh!important;}
#quoteModal .tool-modal-header{position:relative;}

/* --- A. 主视图 Grid 容器（中间分界线支持鼠标拉伸） ---
   用户新要求：编辑区 40%，预览区 60%（作为默认占比；分界线仍可拖拽覆盖默认比例）
   三列结构：
     col1: 编辑区宽 = --q-split-w = calc(40% - 3px) （3px = 分界线 6px 的一半，保证纯比例正好 40/60）
     col2: 分界线 = 6px（固定不参与比例分配）
     col3: 预览区 = 1fr（自动吃掉剩下 ≈60%）
   拖拽 JS 写入 --q-split-w 时用绝对值 px（优先级更高，会覆盖默认比例），松手后保持用户比例 */
#quoteModal .quote-main-split{
  --q-split-min: 220px;                              /* 编辑抽屉硬下限：明细/条款网格不换行 */
  --q-split-max: 560px;                              /* 编辑抽屉硬上限：A4 舞台不会被挤得小于 ~400px 宽 */
  --q-split-w:   calc(40% - 3px);                    /* 默认 40% 占比 − 分界线的一半，得到精确 40:60 两列 */
  display:grid !important;
  grid-template-columns: var(--q-split-w) 6px 1fr;
  flex:1;
  min-height:0;
  min-width:0;
}
/* 可拖拽分界条（6px 粗，左右 2px 抓握区域给老人机/触控板友好） */
.quote-splitter{
  position:relative;
  width:6px;cursor:col-resize;user-select:none;flex-shrink:0;
  background:transparent;
  z-index:6;
  transition:background-color .12s ease;
}
.quote-splitter::before{
  content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:2px;height:56px;border-radius:2px;background:#D1D5DB;
  transition:background-color .14s, height .14s, width .14s;
}
.quote-splitter:hover::before,
body.qs-resizing .quote-splitter::before{
  background:#4F46E5;height:72px;width:3px;
}
.quote-splitter:hover,
body.qs-resizing{
  cursor:col-resize;
}
/* 拖拽期间禁止选中文本，避免拖拽时出现蓝色文字选中框的视觉污染 */
body.qs-resizing,
body.qs-resizing *{
  user-select:none !important;
  -webkit-user-select:none !important;
}
/* 编辑抽屉（左列）：宽用 Grid 分配（来自 --q-split-w）；允许压缩到 min，防止撑爆 grid */
#quoteModal .quote-form-wrap{
  min-width:var(--q-split-min) !important;
  max-width:var(--q-split-max) !important;
  width:auto !important;
  padding:18px 16px !important;
  overflow-y:auto;
  overflow-x:hidden;
  background:linear-gradient(180deg,#FAFBFF 0%,#FCFDFD 100%);
  border-right:none;   /* 分界线由 6px resizer 接管，细节不重复描边 */
  display:flex;flex-direction:column;gap:8px;
}
#quoteModal .quote-form-wrap > details.quote-acc{background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;padding:0 12px;margin:0;}
#quoteModal .quote-form-wrap > details.quote-acc > summary{padding:10px 0;font-size:var(--font-size-md);}
/* A4 预览舞台（右 1fr）：允许压缩 min-width:0，避免 A4 最小内容宽把 Grid 撑破 → 出现“只能拉开不能拉回” */
#quoteModal .quote-preview-wrap{
  min-width:0;
  width:auto !important;
  display:flex !important;       /* 原来 display:none !important → 现在必须显示，就是主视图 */
  padding:0 !important;
  background:
    radial-gradient(ellipse at 50% 18px, rgba(195,207,226,.55) 0%, transparent 60%),
    linear-gradient(180deg,#E5E7EB 0%,#E5E7EB 100%) !important;
  overflow:hidden;
  position:relative;
  flex-direction:column;
}
/* 舞台内部：顶部"所见即所得"徽标 */
/* 舞台顶部：左=字体工具栏 / 中间留白 / 右=比例尺；两端自然对齐 */
#quoteModal .quote-stage-topbar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:8px 12px 2px 12px;flex-shrink:0;
}
/* 字体调整工具栏（左上角 红框）：贴边紧凑 一行 无阴影 */
#quoteModal .quote-stage-topbar .q-toolbar{
  display:inline-flex;align-items:center;gap:6px;
  padding:0;background:transparent;border:none;
  user-select:none;
}
/* 工具栏控件统一高 22px 圆角 8px，与比例尺 ±按钮（18px）视觉对齐（基线一致） */
#quoteModal .quote-stage-topbar .qtl{
  height:22px;
  border:1px solid #D1D5DB;
  border-radius:8px;
  background:#FFFFFF;
  color:var(--text-primary);
  font-size:11.8px;
  line-height:20px;
  box-sizing:border-box;
  cursor:pointer;
}
/* ==== 自定义下拉 qdd（替换原 <select>，支持【连贯左键拖拽→移动菜单→松开选上】手势） ==== */
#quoteModal .quote-stage-topbar .qdd{
  position:relative;   /* 菜单用 position:absolute 相对按钮定位 */
  display:inline-flex;
  vertical-align:middle;
}
/* 下拉按钮：外观尽量还原原 select，右侧固定 ▾ 箭头；左侧 label 自动截断显示当前值 */
#quoteModal .quote-stage-topbar .qdd-btn{
  width:132px;height:22px;    /* 与原 qtl-font/qtl-size 一致 */
  padding:0 20px 0 6px;      /* 右 padding 20 给箭头留位置 */
  border:1px solid #D1D5DB;
  border-radius:var(--radius-input);
  background:#FFFFFF;
  color:var(--text-primary);
  font-size:11.8px;
  line-height:20px;
  text-align:left;
  cursor:pointer;
  white-space:nowrap;
  overflow:hidden;
  box-sizing:border-box;
  position:relative;
  transition:border-color .1s, background .1s, color .1s;
}
#quoteModal .quote-stage-topbar .qdd-btn .qdd-label{
  display:inline-block;
  max-width:108px;            /* 132 - 24(右箭头留白 18+6) */
  overflow:hidden;
  text-overflow:ellipsis;
  vertical-align:middle;
}
#quoteModal .quote-stage-topbar .qdd-btn .qdd-arrow{
  position:absolute;
  right:8px; top:50%; transform:translateY(-52%);
  color:var(--text-tertiary); font-size:var(--font-size-xs); line-height:1;
  pointer-events:none;
}
/* 打开状态：按钮框变紫，菜单展开 */
#quoteModal .quote-stage-topbar .qdd.is-open > .qdd-btn{
  border-color:#6366F1;
  box-shadow:0 0 0 2px rgba(99,102,241,.15);
  background:#EEF2FF;
  color:#312E81;
}
#quoteModal .quote-stage-topbar .qdd.is-open > .qdd-btn .qdd-arrow{ color:#4F46E5; }

/* 菜单：向下 132 宽，max-height 220px(约10项)超过滚动；绝对定位与按钮左上对齐 */
#quoteModal .quote-stage-topbar .qdd-menu{
  position:absolute;
  top:calc(100% + 2px);
  left:0;
  min-width:132px;
  max-height:220px;
  overflow:auto;
  background:#FFFFFF;
  border:1px solid #D1D5DB;
  border-radius:var(--radius-input);
  box-shadow:0 10px 28px -12px rgba(15,23,42,.35);
  z-index:99999;            /* 在 transform scale 舞台之上 */
  padding:8px 0;
  display:none;              /* 默认关闭，is-open 加在 .qdd 上时 display:block */
  font-size:11.8px;
  user-select:none;
}
#quoteModal .quote-stage-topbar .qdd.is-open > .qdd-menu{ display:block; }
#quoteModal .quote-stage-topbar .qdd-menu--sm{ font-size:var(--font-size-sm); }   /* 字号选项列表稍小，避免过挤 */

/* 选项：3 种视觉态 — 正常 / hover(连贯拖动高亮) / 选中(qdd-selected 当前值) */
#quoteModal .quote-stage-topbar .qdd-opt{
  padding:8px 8px;
  color:var(--text-primary);
  cursor:pointer;
  white-space:nowrap;
}
#quoteModal .quote-stage-topbar .qdd-opt:hover,
#quoteModal .quote-stage-topbar .qdd-opt.qdd-hover{
  background:#EEF2FF;
  color:#312E81;
}
#quoteModal .quote-stage-topbar .qdd-opt.qdd-selected{
  background:#4F46E5;
  color:#FFFFFF;
  font-weight:600;
}

/* 隐藏原原生 <select>（保留id/onchange给老代码/屏幕阅读器，实际不渲染） */
#quoteModal .quote-stage-topbar .qdd-native{
  position:absolute; opacity:0; visibility:hidden; pointer-events:none;
  width:0; height:0; border:0; padding:0; margin:0; overflow:hidden;
}

/* 加粗 B 按钮：按下/当前选区处于加粗 → 紫色底 白字（Word 风格 toggled） */
#quoteModal .quote-stage-topbar .q-bold-btn{
  transition:background .1s,color .1s,border-color .1s;
}
#quoteModal .quote-stage-topbar .q-bold-btn[aria-pressed="true"],
#quoteModal .quote-stage-topbar .q-bold-btn.q-active{
  background:#4F46E5;color:#FFFFFF;border-color:#4338CA;
}
#quoteModal .quote-stage-topbar .q-bold-btn:hover:not([aria-pressed="true"]):not(.q-active){
  border-color:#6366F1;color:#4F46E5;
}
/* 真正的铺满舞台：flex:1，居中 + 顶对齐 */
#quoteModal .quote-stage{
  flex:1;
  display:flex;
  justify-content:center;
  align-items:flex-start;
  padding:8px 18px 20px;   /* 顶padding从18→8：顶栏变瘦后，A4不要突然出现一条大白边 */
  overflow:auto;
  min-height:0;
}
/* A4 包装（缩放容器）：宽度锁定 210mm → 缩放只 transform，不改 width，保证内部 @page 规格稳定 */
#quoteModal #quoteA4Wrap{
  display:flex;
  justify-content:center;
  align-items:flex-start;
  width:210mm;
  height:297mm;
  flex-shrink:0;
  transform-origin:top center;
  /* 真实 scale 由 JS quoteFitA4Scale 根据舞台宽高 clamp */
}
/* A4 纸加深"铺在舞台"的立体感（比预览框阴影更明显，但保留 4 角标，不影响 PDF/Word 打印样式）*/
#quoteModal #quoteA4{
  box-shadow:0 28px 50px -18px rgba(15,23,42,.42),0 8px 10px -8px rgba(15,23,42,.12)!important;
}
/* 预览 A4：像 Word 一样可直接点击编辑（白名单）
   - 文本类：光标显示 I 型，插入点 caret 统一蓝色
   - 合计数字列、4 角标、标签前缀（"地址："/"联系人："/"To："/"备注："/"合计"）统一禁止编辑，避免破坏联动 */
#quoteA4 [data-q-editable="1"]{
  -webkit-user-modify: read-write-plaintext-only;
  user-select:text;
  cursor:text;
  caret-color:var(--brand);
  /* 编辑态选中背景统一 Word 风格淡蓝，避免 SimSun 选区颜色过深 */
}
#quoteA4 [data-q-editable="1"]:focus{outline:none;}
/* 禁用编辑：禁用选择样式+箭头光标，避免误改数字合计/日期自动联动列/标签/角标 */
#quoteA4 [data-q-editable="0"],
#quoteA4 .q-corner{
  -webkit-user-modify: read-only !important;
  user-select:text;  /* 仍允许复制，不允许编辑 */
  contenteditable:false;
  caret-color:transparent;
}
/* 防止数字合计列被双击意外选中后进入"看起来能编辑"的假状态 */
#p_sumQty,#p_sumAmt{pointer-events:auto;}
/* 4 个角标：舞台里可见（打印时 @media print 会不显示，因为 q-corner 是装饰） */
#quoteModal .q-corner{pointer-events:none;}

/* --- B. 3 个导出格式图标（header 右侧 40×40） --- */
.q-exp-iconbar{display:inline-flex;align-items:center;gap:8px;margin-right:6px;}
.q-exp-ico{
  position:relative;
  width:40px;height:40px;border-radius:8px;border:none;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  color:#fff;font-size:var(--font-size-xl);flex-shrink:0;
  box-shadow:0 6px 12px -8px rgba(15,23,42,.22),0 1px 2px rgba(15,23,42,.06);
  transition:transform .14s ease, box-shadow .14s ease, filter .14s ease;
}
.q-exp-ico:hover{transform:translateY(-2px);box-shadow:0 10px 22px -10px rgba(15,23,42,.30);filter:saturate(1.1);}
.q-exp-ico:active{transform:translateY(0) scale(.97);}
.q-exp-ico.pdf{background:linear-gradient(135deg,#6366F1 0%,#4F46E5 100%);}
.q-exp-ico.word{background:linear-gradient(135deg,#10B981 0%,#2B7A3E 100%);}
.q-exp-ico.jpg{background:linear-gradient(135deg,#F59E0B 0%,#B45309 100%);}
/* tooltip：hover 在图标下方显示 1 行说明（不占地，纯浮层） */
.q-exp-ico .qexp-tip{
  position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%) translateY(-2px);
  background:var(--text-primary);color:#fff;font-size:11.8px;white-space:nowrap;padding:8px 10px;border-radius:8px;
  opacity:0;pointer-events:none;transition:opacity .14s, transform .14s;z-index:5;
  box-shadow:0 6px 18px -6px rgba(15,23,42,.35);
}
.q-exp-ico .qexp-tip::before{
  content:"";position:absolute;left:50%;top:-8px;transform:translateX(-50%) rotate(45deg);
  width:8px;height:8px;background:var(--text-primary);
}
.q-exp-ico:hover .qexp-tip{opacity:1;transform:translateX(-50%) translateY(0);}
.q-exp-ico i{font-weight:900;}
/* header 行：移除三图标+spacer 后，恢复标题正常的「左标题 / 右 ×」布局（标题 flex:1 占中间，× 贴右） */
#quoteModal .tool-modal-header{display:flex;align-items:center;gap:10px;}
#quoteModal .tool-modal-header h3{flex:1;margin-right:0;}

/* 舞台顶部紧凑版缩放控件（用户要求：比例尺缩小点；只保留数字和加减 & 复位按钮）
   特征：无卡背景/无边框/无阴影；滑块从 150 缩到 90；按钮 22→18；gap 8→5 */
.quote-stage-topbar .qst-zoom{
  font-size:var(--font-size-sm);color:#334155;font-weight:500;
  display:inline-flex;align-items:center;gap:8px;
  padding:0;
  background:transparent;
  border:none;
  box-shadow:none;
  user-select:none;
}
.quote-stage-topbar .qst-zoom .qz-btn{
  width:18px;height:18px;border-radius:8px;border:none;cursor:pointer;
  background:#FCFDFD;color:#334155;font-size:var(--font-size-xs);display:inline-flex;align-items:center;justify-content:center;
  transition:background .12s,color .12s;
}
.quote-stage-topbar .qst-zoom .qz-btn:hover{background:#4F46E5;color:#fff;}
.quote-stage-topbar .qst-zoom .qz-btn:disabled{cursor:not-allowed;opacity:.45;background:#FCFDFD;color:var(--text-muted);}
.quote-stage-topbar .qst-zoom .qz-range{
  -webkit-appearance:none;appearance:none;width:90px;height:3px;border-radius:2px;background:#D1D5DB;outline:none;cursor:pointer;
}
.quote-stage-topbar .qst-zoom .qz-range::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:12px;height:12px;border-radius:50%;
  background:#4F46E5;cursor:pointer;border:1.8px solid #fff;box-shadow:0 2px 8px -3px rgba(79,70,229,.55);
}
.quote-stage-topbar .qst-zoom .qz-range::-moz-range-thumb{
  width:12px;height:12px;border-radius:50%;background:#4F46E5;cursor:pointer;border:1.8px solid #fff;
}
.quote-stage-topbar .qst-zoom .qz-pct{min-width:26px;text-align:right;font-variant-numeric:tabular-nums;font-size:var(--font-size-sm);}
.quote-stage-topbar .qst-zoom .qz-reset{
  border:none;background:transparent;color:var(--text-muted);cursor:pointer;font-size:var(--font-size-xs);padding:1px 8px;border-radius:3px;
}
.quote-stage-topbar .qst-zoom .qz-reset:hover{background:#F1F3F5;color:#4F46E5;}

/* --- C. 原二级导出遮罩：全部降级为 display:none（不再进入），避免残留 DOM 影响布局 --- */
#quoteExportPanel,
.quote-export-modal-mask,
.quote-export-panel{display:none !important;}

/* --- D. 抽屉滚动条美化 & 舞台滚动条美化（统一细滑 6px） --- */
#quoteModal .quote-form-wrap::-webkit-scrollbar,
#quoteModal .quote-stage::-webkit-scrollbar{width:6px;height:6px;}
#quoteModal .quote-form-wrap::-webkit-scrollbar-thumb,
#quoteModal .quote-stage::-webkit-scrollbar-thumb{background:rgba(100,116,139,.35);border-radius:3px;}
#quoteModal .quote-form-wrap::-webkit-scrollbar-thumb:hover,
#quoteModal .quote-stage::-webkit-scrollbar-thumb:hover{background:rgba(100,116,139,.55);}

.tool-modal .tool-modal-header h3{margin:0;font-size:var(--font-size-xl);color:var(--brand);flex:1;font-weight:600;}
.tool-modal .tool-modal-close{
  background:transparent;border:none;color:var(--text-tertiary);cursor:pointer;
}
.tool-modal .tool-modal-close:hover{background:#F1F3F5;color:var(--text-primary);}
.tool-modal .tool-modal-body{
  padding:var(--modal-pad-y) var(--modal-pad-x);overflow:auto;flex:1;
}
/* 弹窗底部按钮栏：统一内边距、顶部分隔线，按钮右对齐 */
.tool-modal .tool-modal-footer{
  display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap;
  padding:var(--modal-pad-y) var(--modal-pad-x);
  border-top:1px solid #E5E7EB;background:#FFFFFF;
}
/* 自定义确认弹窗 */
.confirm-modal{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:10000;align-items:center;justify-content:center;
}
.confirm-modal.show{display:flex;animation:confirmFadeIn 0.15s ease-out;}
@keyframes confirmFadeIn{from{opacity:0}to{opacity:1}}
.confirm-modal-box{
  background:#FFFFFF;border-radius:8px;border:1px solid #E5E7EB;width:440px;max-width:90vw;
  box-shadow:0 8px 30px rgba(15,23,42,0.12);animation:confirmSlideUp 0.18s ease-out;
}
@keyframes confirmSlideUp{from{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}
.confirm-modal-header{
  padding:16px 20px 12px;display:flex;align-items:center;gap:10px;
}
.confirm-modal-icon{
  width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:#F1F3F5;color:var(--brand);font-size:var(--font-size-xl);flex-shrink:0;
}
.confirm-modal-title{font-size:var(--font-size-xl);font-weight:600;color:var(--brand);flex:1;}
.confirm-modal-body{padding:var(--modal-pad-y) var(--modal-pad-x);font-size:var(--font-size-2xl);color:var(--text-secondary);line-height:1.6;}
.confirm-modal-body .highlight{color:var(--brand);font-weight:600;}
.confirm-modal-body .warn{color:#D63384;font-weight:600;}
.confirm-modal-footer{
  display:flex;gap:10px;padding:var(--modal-pad-y) var(--modal-pad-x);border-top:1px solid #E5E7EB;justify-content:flex-end;
}
.confirm-modal-footer .btn{padding:8px 18px;font-size:var(--font-size-md);border-radius:8px;cursor:pointer;border:1px solid transparent;transition:all 0.15s;}
.confirm-modal-footer .btn-default{background:transparent;border-color:#E5E7EB;color:var(--text-secondary);}
.confirm-modal-footer .btn-default:hover{background:#F1F3F5;color:var(--text-primary);}
.confirm-modal-footer .btn-danger{background:#FFFFFF;border-color:var(--danger);color:var(--danger);}
.confirm-modal-footer .btn-danger:hover{background:var(--danger-soft);color:var(--danger);}
/* 表格操作列链接按钮：编辑=申花蓝(var(--brand))，删除=红绿灯红(var(--danger)) */
.btn-link{
  background:none;border:none;color:var(--brand);cursor:pointer;
  padding:0;font-size:var(--font-size-table);
}
.btn-link:hover{text-decoration:none;opacity:0.8;}
.btn-link-danger{
  color:var(--danger);
}
.btn-link-danger:hover{text-decoration:none;opacity:0.8;}
/* 紧凑：计算器左右两栏 */
.compact-calc-row{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start;}
.compact-calc-row > .card{flex:1 1 320px;margin:0;}
.tool-modal-body .compact-calc-row > .card + .card{margin-top:0;}
.compact-calc-row .input-row{padding:8px 0;}
.compact-calc-row .card h3{margin:0 0 4px;font-size:var(--font-size-lg);}
.compact-calc-row .btn-group{margin:6px 0 4px;}
.compact-calc-row .desc{margin-top:5px;font-size:var(--font-size-base);line-height:1.5;}
.compact-calc-row .result-row{padding:3px 0;}
/* ========== 参数计算器重构布局 ========== */
.calc-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:stretch;}
.calc-grid > .card{margin:0;padding:12px 15px;display:flex;flex-direction:column;}
.calc-grid .card h3{margin:0 0 12px;font-size:var(--font-size-2xl);display:flex;align-items:center;gap:6px;}
.calc-side h3 i{color:var(--brand);}
.calc-desc-bar{padding:4px 14px !important;}
.calc-input-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;}
.calc-input-grid .input-row{margin-bottom:0;min-height:34px;}
.calc-input-grid .input-row label{font-size:var(--font-size-base);}
.calc-input-grid .input-row input{width:100%;}
.calc-grid .btn-group{margin:18px 0 6px;}
.calc-btn-group{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;}
.calc-btns-left{display:flex;gap:8px;flex-wrap:wrap;}
.calc-process-wrap{position:relative;}
.calc-process-trigger{
  font-size:var(--font-size-md);color:var(--text-secondary);cursor:help;padding:6px 10px;border:1px dashed #CBD5E1;
  border-radius:8px;display:inline-flex;align-items:center;gap:8px;transition:all .15s;
  background:#FCFDFD;
}
.calc-process-trigger:hover{border-color:var(--brand);color:var(--brand);background:#EFF6FF;}
.calc-process-panel{
  position:absolute;right:0;top:calc(100% + 8px);width:380px;background:#fff;
  border:1px solid #E5E7EB;border-radius:8px;padding:18px;box-shadow:0 6px 20px rgba(30,58,95,.15);
  opacity:0;pointer-events:none;transition:opacity .18s;z-index:30;font-size:var(--font-size-md);line-height:1.8;color:#334155;
}
.calc-process-wrap:hover .calc-process-panel{opacity:1;pointer-events:auto;}
.calc-process-panel::before{
  content:"";position:absolute;right:20px;top:-6px;width:10px;height:10px;background:#fff;
  border-left:1px solid #E5E7EB;border-top:1px solid #E5E7EB;transform:rotate(45deg);
}
.calc-step{padding:3px 0;border-bottom:1px dashed #FCFDFD;}
.calc-step:last-child{border-bottom:none;}
.calc-step .cs-formula{color:var(--brand);font-weight:500;}
.calc-step .cs-sub{color:var(--text-muted);font-size:var(--font-size-base);}
.calc-step .cs-result{color:#059669;font-weight:600;}
.calc-process-title{font-weight:600;color:var(--brand);margin-bottom:8px;padding-bottom:6px;border-bottom:2px solid var(--brand);}
.calc-grid .desc{margin-top:6px;font-size:var(--font-size-base);line-height:1.6;color:var(--text-muted);}

.result-hint{font-size:var(--font-size-base);font-weight:400;color:var(--text-muted);margin-left:8px;}
.result-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;}
.result-item{
  position:relative;display:flex;justify-content:space-between;align-items:center;
  padding:10px 12px;background:#FCFDFD;border:1px solid #E5E7EB;border-radius:8px;
  transition:all .2s;cursor:help;
}
.result-item:hover{background:var(--bg-subtle);border-color:var(--border-strong);}
.result-label{font-size:var(--font-size-md);color:var(--text-tertiary);font-weight:500;}
.result-value{font-size:var(--font-size-2xl);font-weight:600;color:var(--brand);font-variant-numeric:tabular-nums;}
/* hover 公式提示 */
.result-item::after{
  content:attr(data-formula);position:absolute;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);
  background:var(--brand);color:#fff;font-size:var(--font-size-base);line-height:1.5;padding:6px 10px;border-radius:8px;
  white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:10;box-shadow:0 2px 8px rgba(0,0,0,.15);
}
.result-item::before{
  content:"";position:absolute;left:50%;bottom:calc(100% + 2px);transform:translateX(-50%);
  border:8px solid transparent;border-top-color:var(--brand);opacity:0;pointer-events:none;transition:opacity .15s;z-index:10;
}
.result-item:hover::after,.result-item:hover::before{opacity:1;}
/* 紧凑：弹窗内的表格/卡片头部 */
.tool-modal-body .card h3{font-size:var(--font-size-2xl);}
.tool-modal-body .compact-calc-row .card h3{margin:0 0 8px;}
.tool-modal-body .history-header{padding:4px 12px 6px;}
.tool-modal-body .table-wrap{max-height:280px;}
.tool-modal-body .card + .card{margin-top:18px;}
.tool-modal-body .calc-grid .card + .card{margin-top:0;}
.tool-modal-body .compact-calc-row + .card,
.tool-modal-body .calc-grid + .card{margin-top:18px;}

/* ===================================================================
   文件管理（宝塔风格：面包屑 + 工具栏 + 统一表格 + 分页）
   =================================================================== */

/* ------- 整体单栏布局 ------- */
.fm-layout--baota{
  display:flex;flex-direction:column;flex:1;height:100%;
  min-height:0;overflow:hidden;background:transparent;
}
.fm-main{
  flex:1 1 auto;display:flex;flex-direction:column;min-height:0;height:100%;
  background:transparent;margin:0;padding:16px;box-sizing:border-box;gap:12px;
}

/* ------- 第一行：面包屑 + 搜索 ------- */
.fm-topbar{
  display:flex;align-items:center;justify-content:space-between;
  gap:12px;flex-wrap:wrap;flex-shrink:0;
}
.fm-crumbs{display:flex;align-items:center;gap:6px;min-width:0;flex:1;}
.fm-nav-btn{
  width:32px;height:32px;padding:0;border:1px solid #E5E7EB;border-radius:8px;
  background:#FFFFFF;color:#64748B;cursor:pointer;flex:0 0 auto;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:var(--font-size-md);transition:background .15s,color .15s,border-color .15s;
}
.fm-nav-btn:hover:not(:disabled){background:#F1F3F5;color:var(--text-primary);border-color:#D8DEE7;}
.fm-nav-btn:disabled{opacity:.4;cursor:default;}
.fm-crumb-path{display:flex;align-items:center;gap:2px;min-width:0;flex:1;font-size:var(--font-size-md);}
.fm-crumb{
  color:var(--text-primary);cursor:pointer;padding:4px 8px;border-radius:8px;
  white-space:nowrap;line-height:1.4;transition:background .12s;
}
.fm-crumb:hover{background:#EAF2FE;}
.fm-crumb.current{color:var(--text-primary);font-weight:600;cursor:pointer;}
.fm-crumb.current:hover{background:#EAF2FE;}
.fm-crumb-sep{color:#C2C9D4;display:inline-flex;align-items:center;font-size:var(--font-size-sm);}
/* 刷新按钮与面包屑路径之间留出间距，避免紧贴文字 */
.fm-crumb-path + .fm-nav-btn{margin-left:6px;flex-shrink:0;}
.fm-top-search{display:flex;align-items:center;gap:8px;flex-shrink:0;}
.fm-search-input,
.fm-search-select{
  height:var(--form-height-sm);border:var(--form-border);border-radius:var(--radius-input);
  font-size:var(--font-size-form-sm);background:var(--form-bg-focus);color:var(--text-secondary);
  outline:none;transition:border-color .15s,box-shadow .15s;box-sizing:border-box;
}
.fm-search-input{padding:var(--form-padding-sm);width:190px;}
.fm-search-select{padding:0 28px 0 9px;}
.fm-search-input::placeholder{color:var(--text-muted);}
.fm-search-input:focus,
.fm-search-select:focus{border-color:var(--form-border-focus);box-shadow:var(--form-shadow-focus);}

/* ------- 第二行：工具栏 ------- */
.fm-toolbar{
  display:flex;align-items:center;justify-content:space-between;
  gap:10px;flex-wrap:wrap;flex-shrink:0;
}
.fm-tb-left,.fm-tb-right{display:flex;align-items:center;gap:8px;}
.fm-tb-btn{
  height:36px;padding:0 14px;border:1px solid #E5E7EB;border-radius:8px;
  background:#FFFFFF;color:var(--text-secondary);cursor:pointer;
  font-size:var(--font-size-base);font-weight:500;white-space:nowrap;
  display:inline-flex;align-items:center;gap:7px;
  transition:background .15s,color .15s,border-color .15s;
}
.fm-tb-btn:hover{background:#F1F3F5;color:var(--text-primary);border-color:#D8DEE7;}
.fm-tb-btn i{font-size:var(--font-size-md);}
.fm-tb-primary{background:var(--brand);border-color:var(--brand);color:#FFFFFF;}
.fm-tb-primary:hover{background:#0d5bbf;border-color:#0d5bbf;color:#FFFFFF;}
.fm-tb-primary i{color:#FFFFFF;}

/* 批量操作下拉 */
.fm-batch-op-wrap{position:relative;display:inline-flex;}
.fm-batch-op-wrap[hidden]{display:none;}
.fm-batch-op-menu{
  position:absolute;left:0;top:calc(100% + 6px);z-index:200;min-width:160px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  box-shadow:0 8px 24px rgba(15,23,42,0.14);padding:6px;
}
.fm-batch-op-menu[hidden]{display:none;}
.fm-batch-op-item{
  padding:8px 12px;font-size:var(--font-size-base);color:var(--text-secondary);
  cursor:pointer;display:flex;align-items:center;gap:8px;
  border-radius:6px;user-select:none;transition:background .12s,color .12s;
}
.fm-batch-op-item:hover{background:#F1F3F5;color:var(--brand);}
.fm-batch-op-item.fm-batch-op-danger{color:var(--danger);}
.fm-batch-op-item.fm-batch-op-danger:hover{background:#FDECEC;color:var(--danger);font-weight:600;}

/* 磁盘容量 chip + 视图切换 */
.fm-disk-chip{
  position:relative;
  display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 10px;
  border:1px solid #E5E7EB;border-radius:8px;background:#F8FAFC;
  color:var(--text-tertiary);font-size:var(--font-size-sm);white-space:nowrap;
}
.fm-disk-chip i{color:#94A3B8;}
.fm-disk-chip-text{font-size:12px;color:#64748B;font-variant-numeric:tabular-nums;line-height:1;}
.fm-disk-chip-sep{margin:0 3px;color:#C2CAD6;}
/* chip 底部内嵌迷你占用条 */
.fm-disk-mini-bar{
  position:absolute;left:8px;right:8px;bottom:3px;height:3px;border-radius:2px;
  background:#E7ECF2;overflow:hidden;
}
.fm-disk-mini-fill{display:block;height:100%;width:0;border-radius:2px;background:var(--brand);transition:width .4s ease;}
.fm-disk-mini-fill.is-warn{background:#F59E0B;}
.fm-disk-mini-fill.is-danger{background:#EF4444;}
/* hover/点击 展开的容量详情浮层（紧贴 chip 无缝，保证 hover 连续；小箭头骑缝） */
.fm-disk-pop{
  position:absolute;top:100%;right:0;width:248px;z-index:60;
  display:none;flex-direction:column;gap:10px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  box-shadow:0 10px 28px rgba(15,23,42,.14);
  padding:12px 14px;cursor:default;
}
.fm-disk-chip:hover .fm-disk-pop,
.fm-disk-chip.is-open .fm-disk-pop{display:flex;}
.fm-disk-pop::before{
  content:'';position:absolute;top:-6px;right:20px;width:10px;height:10px;
  background:#FFFFFF;border-left:1px solid #E5E7EB;border-top:1px solid #E5E7EB;
  transform:rotate(45deg);z-index:1;
}
.fm-disk-pop-head{display:flex;align-items:baseline;justify-content:space-between;}
.fm-disk-pop-title{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:#1F2937;}
.fm-disk-pop-title i{color:#94A3B8;font-size:12px;}
.fm-disk-pop-pct{font-size:13px;font-weight:700;color:var(--brand);font-variant-numeric:tabular-nums;}
.fm-disk-pop-bar{height:6px;border-radius:4px;background:#EDF1F6;overflow:hidden;}
.fm-disk-pop-fill{display:block;height:100%;width:0;border-radius:4px;background:linear-gradient(90deg,#3B82F6,#0F68D8);transition:width .4s ease;}
.fm-disk-pop-fill.is-warn{background:linear-gradient(90deg,#FBBF24,#F59E0B);}
.fm-disk-pop-fill.is-danger{background:linear-gradient(90deg,#F87171,#EF4444);}
.fm-disk-pop-pct.is-warn{color:#D97706;}
.fm-disk-pop-pct.is-danger{color:#DC2626;}
.fm-disk-pop-grid{display:flex;justify-content:space-between;gap:8px;}
.fm-disk-pop-grid > span{display:flex;flex-direction:column;gap:3px;}
.fm-disk-pop-grid label{font-size:var(--font-size-sm);color:#94A3B8;line-height:1;}
.fm-disk-pop-grid b{font-size:12px;font-weight:600;color:#334155;font-variant-numeric:tabular-nums;line-height:1;}
.fm-view-btn{
  width:36px;height:36px;padding:0;border:1px solid #E5E7EB;border-radius:8px;
  background:#FFFFFF;color:#64748B;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;font-size:var(--font-size-md);
  transition:background .15s,color .15s,border-color .15s;
}
.fm-view-btn:hover{background:#F1F3F5;color:var(--text-primary);}
.fm-view-btn.active{background:#EAF2FE;border-color:#BFD8F7;color:var(--shenhua-blue);}

/* 上传/新建：手机端才显示的纯图标钮（桌面用文字按钮），默认隐藏 */
.fm-mobile-act{display:none;}

/* ------- 主体：表格 / 网格 / 空状态 ------- */
.fm-main-body{
  flex:1 1 auto;min-height:0;display:flex;flex-direction:column;
  border:1px solid #E5E7EB;border-radius:8px;overflow:hidden;background:#FFFFFF;
}
.fm-table-wrap{flex:1 1 auto;min-height:0;overflow:auto;}
.fm-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:var(--font-size-base);}
.fm-table thead th{
  position:sticky;top:0;z-index:1;
  background:#F1F3F5;color:#475569;font-weight:600;text-align:left;
  padding:10px 12px;border:none;border-bottom:1px solid #E5E7EB;font-size:var(--font-size-sm);
  white-space:nowrap;
}
.fm-table .col-check{width:42px;text-align:center;}
.fm-table .col-size{width:110px;}
.fm-table .col-time{width:170px;}
.fm-table .col-ops{width:190px;}
.fm-table thead th.sortable{cursor:pointer;user-select:none;}
.fm-table thead th.sortable:hover{color:var(--brand);}
.sort-arrow{font-size:10px;margin-left:5px;color:#9AA5B5;width:10px;display:inline-block;}
th.sortable:hover .sort-arrow{color:var(--brand);}
.fm-table tbody td{
  padding:9px 12px;border:none;border-bottom:1px solid var(--border);
  color:var(--text-secondary);vertical-align:middle;
  background:var(--bg-surface);
}
.fm-table tbody tr:last-child td{border-bottom:none;}
.fm-table tbody tr:hover td{background:var(--bg-subtle);}
.fm-table tbody tr.selected td{background:#DCEBFC;}
.fm-table input[type="checkbox"]{width:16px;height:16px;cursor:pointer;accent-color:var(--brand);vertical-align:middle;}

.fm-name-cell{display:flex;align-items:center;gap:10px;min-width:0;}
.fm-type-icon{font-size:16px;width:20px;flex:0 0 auto;text-align:center;line-height:1;}
.fm-name-link{
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  color:var(--text-primary);font-weight:500;
}
.fm-folder-link{color:var(--text-primary);font-weight:500;cursor:pointer;}
.fm-folder-link:hover{color:var(--brand);text-decoration:underline;}
.fm-file-link{cursor:pointer;}
.fm-file-link:hover{color:var(--brand);text-decoration:underline;}
.col-size,.col-time{color:var(--text-tertiary);font-size:var(--font-size-sm);white-space:nowrap;}
.col-ops{white-space:nowrap;text-align:left;}
/* 文件管理操作按钮：对齐全局 .btn-link 风格 */
.fm-op-btn{
  border:none;background:transparent;color:var(--brand);
  padding:5px 8px;border-radius:8px;cursor:pointer;
  font-size:var(--font-size-base);font-weight:400;line-height:1;
  display:inline-flex;align-items:center;gap:4px;
  transition:background .12s,color .12s;
}
.fm-op-btn:hover{background:#EBF2FC;color:var(--brand);opacity:0.9;}
.fm-op-btn.fm-op-danger{color:var(--danger);}
.fm-op-btn.fm-op-danger:hover{background:#FDECEC;color:var(--danger);opacity:0.9;}

/* 网格视图（紧凑） */
.fm-grid{
  flex:1 1 auto;min-height:0;overflow:auto;padding:12px;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(124px,1fr));
  gap:10px;align-content:start;background:#FFFFFF;
}
.fm-grid[hidden]{display:none;}
.fm-grid-card{
  position:relative;border:1px solid #E5E7EB;border-radius:8px;background:#FFFFFF;
  padding:10px 8px 8px;display:flex;flex-direction:column;align-items:center;gap:3px;
  transition:border-color .15s,box-shadow .15s,background .15s;
}
.fm-grid-card:hover{border-color:#D1D5DB;background:#F1F3F5;box-shadow:0 2px 8px rgba(15,23,42,.06);}
.fm-grid-card.selected{border-color:var(--brand);background:#F3F8FE;}
.fm-grid-card > input[type="checkbox"]{
  position:absolute;top:6px;left:6px;width:14px;height:14px;cursor:pointer;accent-color:var(--brand);
}
.fm-grid-icon{font-size:30px;line-height:1;margin:4px 0 2px;}
.fm-grid-name{
  font-size:var(--font-size-base);font-weight:600;color:var(--text-primary);
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;
}
.fm-grid-meta{font-size:var(--font-size-xs);color:var(--text-muted);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;}
.fm-grid-ops{
  display:flex;gap:0;margin-top:2px;padding-top:4px;border-top:1px solid #F1F3F5;
  width:100%;justify-content:center;
}
.fm-grid-ops button{
  border:none;background:transparent;color:var(--text-secondary);
  font-size:var(--font-size-xs);padding:3px 4px;border-radius:6px;cursor:pointer;
  transition:background .12s,color .12s;
}
.fm-grid-ops button:hover{background:#F1F3F5;color:var(--text-primary);}
.fm-grid-ops button.danger{color:var(--danger);}
.fm-grid-ops button.danger:hover{background:#FDECEC;}

/* 空状态 */
.fm-empty{
  flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:12px;padding:40px 20px;color:var(--text-muted);background:#FFFFFF;
}
.fm-empty[hidden]{display:none;}
.fm-empty > i{font-size:48px;color:#C8D1DE;line-height:1;}
.fm-empty > div{font-size:var(--font-size-md);color:var(--text-tertiary);text-align:center;}

/* ------- 底部：统计 + 分页 ------- */
.fm-footer{
  display:flex;align-items:center;justify-content:space-between;
  gap:10px;flex-wrap:wrap;flex-shrink:0;padding:2px 2px 0;
}
.fm-footer-stat{font-size:var(--font-size-sm);color:var(--text-tertiary);white-space:nowrap;}
.fm-pagination{display:flex;align-items:center;gap:8px;font-size:var(--font-size-sm);color:var(--text-secondary);flex-wrap:wrap;}
.fm-page-btn{
  width:30px;height:30px;padding:0;border:1px solid #E5E7EB;border-radius:8px;
  background:#FFFFFF;color:#64748B;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  transition:background .15s,color .15s;
}
.fm-page-btn:hover:not(:disabled){background:#F1F3F5;color:var(--text-primary);}
.fm-page-btn:disabled{opacity:.4;cursor:default;}
.fm-page-no{min-width:56px;text-align:center;color:var(--text-secondary);white-space:nowrap;}
.fm-page-size{
  height:30px;border:1px solid #E5E7EB;border-radius:8px;padding:0 6px;
  font-size:var(--font-size-sm);background:#FFFFFF;color:var(--text-secondary);outline:none;cursor:pointer;
}
.fm-page-total{color:var(--text-tertiary);white-space:nowrap;}
.fm-page-jump{display:inline-flex;align-items:center;gap:5px;color:var(--text-tertiary);white-space:nowrap;}
.fm-page-jump input{
  width:48px;height:30px;border:1px solid #E5E7EB;border-radius:8px;
  text-align:center;font-size:var(--font-size-sm);color:var(--text-secondary);outline:none;
  -moz-appearance:textfield;
}
.fm-page-jump input:focus{border-color:var(--form-border-focus);box-shadow:var(--form-shadow-focus);}

/* ------- 上传 / 新建文件夹 弹窗 ------- */
.fm-upload-modal{
  position:fixed;inset:0;z-index:9999;background:rgba(15,23,42,0.45);
  display:flex;align-items:center;justify-content:center;
}
.fm-upload-panel{
  width:620px;max-width:92vw;max-height:80vh;background:#FFFFFF;border-radius:8px;
  display:flex;flex-direction:column;overflow:hidden;box-shadow:0 12px 48px rgba(15,23,42,0.18);
}
.fm-upload-header{
  display:flex;justify-content:flex-end;align-items:center;
  padding:var(--modal-pad-y) var(--modal-pad-x);border-bottom:1px solid #E5E7EB;background:#FCFDFD;
}
.fm-upload-title{display:none;font-size:var(--font-size-2xl);font-weight:600;color:#334155;}
.fm-upload-close{
  border:none;background:transparent;color:var(--text-tertiary);cursor:pointer;
}
.fm-upload-close:hover{background:#F1F3F5;color:var(--text-primary);}
.fm-upload-body{padding:var(--modal-pad-y) var(--modal-pad-x);overflow:auto;flex:1;}

/* 拖拽区 */
.fm-drop-zone{
  border:2px dashed #D1D5DB;border-radius:8px;padding:32px 20px;text-align:center;
  background:#FCFDFD;transition:all .2s ease;cursor:pointer;
  margin-bottom:18px;
}
.fm-drop-zone.dragover{border-color:var(--brand);background:#DBEAFE;}
.fm-drop-zone-inner{pointer-events:auto;}
.fm-drop-zone.dragover .fm-drop-zone-inner{pointer-events:auto;}
.fm-drop-zone-icon{font-size:44px;line-height:1;margin-bottom:4px;}
.fm-drop-zone-title{font-size:var(--font-size-2xl);font-weight:600;color:var(--brand);margin-bottom:8px;}
.fm-drop-zone-sub{font-size:var(--font-size-base);color:var(--text-tertiary);margin-bottom:18px;line-height:1.6;}
.fm-drop-zone-sub strong{color:var(--brand);}
.fm-drop-zone-btns{display:flex;gap:8px;justify-content:center;pointer-events:auto;}
.fm-drop-zone-btns .btn-sm{height:32px;padding:0 18px;font-size:var(--font-size-base);}

/* 进度/结果区 */
.fm-upload-progress{margin-top:10px;}
.fm-upload-summary{font-size:var(--font-size-md);color:var(--text-secondary);margin-bottom:10px;font-weight:500;}
.fm-upload-total-bar{height:8px;background:#F1F3F5;border-radius:999px;overflow:hidden;margin-bottom:18px;}
.fm-upload-total-fill{
  height:100%;width:0;background:linear-gradient(90deg,var(--brand),#4a80c0);
  border-radius:999px;transition:width .2s ease;
}
.fm-upload-file-list{display:flex;flex-direction:column;gap:8px;}
.fm-up-row{
  display:flex;flex-direction:column;gap:8px;
  padding:8px 10px;border:1px solid #E5E7EB;border-radius:8px;background:#FFFFFF;
}
.fm-up-row-name{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:var(--font-size-base);color:var(--text-secondary);}
.fm-up-row-name .name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;}
.fm-up-row-name .status{font-weight:500;white-space:nowrap;}
.fm-up-row-name .status.ok{color:#2ea75c;}
.fm-up-row-name .status.err{color:#DC5A5A;}
.fm-up-row-name .status.pending{color:var(--text-muted);}
.fm-up-row-name .status.uploading{color:var(--brand);}
.fm-up-row-bar{height:8px;background:#F1F3F5;border-radius:999px;overflow:hidden;}
.fm-up-row-fill{height:100%;width:0;background:var(--brand);border-radius:999px;transition:width .15s ease;}
.fm-up-row-err{font-size:var(--font-size-sm);color:#DC5A5A;line-height:1.4;}
.fm-upload-empty{text-align:center;color:var(--text-muted);font-size:var(--font-size-md);padding:16px 0;}
.fm-upload-footer{
  padding:var(--modal-pad-y) var(--modal-pad-x);border-top:1px solid #E5E7EB;background:#FFFFFF;
  display:flex;justify-content:flex-end;
}

/* inline rename input（列表行 / 网格卡片内联重命名） */
.fm-inline-rename-input{
  display:inline-block;max-width:100%;padding:2px 6px;
  border:1.8px solid var(--form-border-focus);border-radius:var(--radius-input);
  font-size:inherit;font-family:inherit;color:var(--brand);
  background:var(--form-bg-focus);outline:none;box-shadow:var(--form-shadow-focus);
  line-height:1.3;
}
.fm-table .fm-inline-rename-input{min-width:140px;max-width:280px;}
.fm-grid-card .fm-inline-rename-input{width:100%;box-sizing:border-box;text-align:center;}

/* --- 右键上下文菜单 --- */
.fm-context-menu{
  position:fixed;z-index:9999;min-width:120px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  box-shadow:0 8px 28px rgba(15,23,42,0.12);padding:8px 0;
  font-size:var(--font-size-base);color:var(--text-primary);display:none;
}
.fm-context-menu.show{display:block;}
.fm-context-menu-item{padding:6px 12px;cursor:pointer;display:flex;align-items:center;gap:4px;transition:background .1s;}
.fm-context-menu-item:hover{background:#F1F3F5;}
.fm-context-menu-item.danger{color:var(--danger);}
.fm-context-menu-icon{font-size:var(--font-size-2xl);}

/* 小屏适配：搜索栏换行、表格操作列收紧 */
@media (max-width: 820px){
  .fm-topbar{flex-direction:column;align-items:stretch;}
  .fm-crumbs{flex-wrap:wrap;}
  .fm-top-search{width:100%;}
  .fm-search-input{flex:1;width:auto;min-width:0;}
  .fm-toolbar{flex-direction:column;align-items:stretch;}
  .fm-tb-right{justify-content:flex-end;}
  .fm-main-body{overflow:auto;}
  .fm-table{table-layout:auto;min-width:560px;}
  .fm-table-wrap{overflow-x:auto;}
  .fm-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));}
  .fm-footer{flex-direction:column;align-items:flex-start;}
}

/* 折叠态 icon 居中 + 菜单项高度绝对统一 */
.sidebar.collapsed .menu-list{padding:0 !important;}
.sidebar.collapsed .sidebar-toggle{
  width:40px !important;height:40px !important;margin:0 auto !important;
  display:flex !important;align-items:center !important;justify-content:center !important;
  text-indent:1px; /* 三横线字符 ☰ 视觉偏左，向右微调 1px */
}
.sidebar.collapsed .menu-item{
  justify-content:center !important;
  padding:0 !important;gap:0 !important;
  height:40px !important;min-height:40px !important;max-height:40px !important;
  display:flex !important;align-items:center !important;
  box-sizing:border-box !important;margin:0 !important;
}
/* 折叠态 icon 强制 20x20 固定尺寸 */
.sidebar.collapsed .icon-box{
  width:20px !important;height:20px !important;min-width:20px !important;min-height:20px !important;
  flex:0 0 20px !important;
}
.sidebar.collapsed .menu-text{display:none !important;width:0 !important;opacity:0 !important;overflow:hidden !important;}
/* 折叠态：菜单项的直接子元素只保留 .menu-left，其余全部从 flex 流移除（关键修正） */
.sidebar.collapsed .menu-item > :not(.menu-left){
  display:none !important;
}
.sidebar.collapsed .menu-item .menu-left{
  justify-content:center !important;flex:0 0 auto !important;gap:0 !important;margin:0 !important;
  display:flex !important;align-items:center !important;
  width:auto !important;min-width:0 !important;max-width:none !important;
}
/* 折叠态：hover 幽灵图标；active 保留浅蓝底（深色模式由补丁覆盖） */
.sidebar.collapsed .menu-item:hover .menu-left{
  background:transparent !important;color:var(--shenhua-blue) !important;
}
.sidebar.collapsed .menu-item.active .menu-left{
  background:var(--brand-soft) !important;color:var(--brand) !important;
}
.sidebar.collapsed .menu-item:hover::before,
.sidebar.collapsed .menu-item.active::before{background:var(--shenhua-blue);}
.icon-box{
  display:inline-flex !important;align-items:center !important;justify-content:center !important;
  flex-shrink:0 !important;width:20px;height:20px;min-width:20px;min-height:20px;
  vertical-align:middle;line-height:1;overflow:visible;
}
.icon-box svg{width:100%;height:100%;display:block;color:inherit;fill:none;}
.menu-left{display:inline-flex !important;align-items:center !important;gap:10px;flex:1 1 auto;min-width:0;}
.menu-item{display:flex !important;align-items:center !important;gap:10px;white-space:nowrap;min-height:40px;}
.menu-item.active .menu-left{background-color:var(--brand-soft) !important;color:var(--brand) !important;font-weight:600 !important;}

/* ============ 全局顶部栏 ============ */
.app-root{
  display:flex;flex-direction:column;height:100vh;overflow:hidden;
}
.global-top-bar{
  height:56px;flex-shrink:0;display:flex;align-items:center;
  background:#F1F3F5;border-bottom:1px solid #D1D5DB;
  z-index:30;position:relative;justify-content:space-between;
}
.topbar-logo-section{
  display:flex;align-items:center;gap:10px;
  padding:0 18px;height:100%;flex-shrink:0;position:relative;
}
.topbar-logo-section .sidebar-toggle{
  position:relative;
  width:20px;height:28px;flex-shrink:0;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;color:var(--text-secondary);font-size:var(--font-size-2xl);line-height:1;
  transition:all 0.2s;user-select:none;
  background:transparent;
}
.topbar-logo-section .sidebar-toggle:hover{background:#F1F3F5;color:var(--text-primary);}
/* 顶栏按钮 hover tooltip（与侧边栏 icon 样式一致） */
.topbar-logo-section .sidebar-toggle[data-tip]:hover::after{
  content:attr(data-tip);
  position:absolute;left:calc(100% + 16px);top:50%;transform:translateY(-50%);
  background:var(--text-primary);color:#fff;padding:6px 10px;border-radius:8px;font-size:var(--font-size-base);font-weight:400;
  white-space:nowrap;z-index:999;pointer-events:none;
  box-shadow:0 2px 8px rgba(0,0,0,0.2);line-height:1.2;
}
.topbar-action-btn[data-tip]:hover::after{
  content:attr(data-tip);
  position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);
  background:var(--text-primary);color:#fff;padding:6px 10px;border-radius:8px;font-size:var(--font-size-base);font-weight:400;
  white-space:nowrap;z-index:999;pointer-events:none;
  box-shadow:0 2px 8px rgba(0,0,0,0.2);line-height:1.2;
}
.topbar-logo-section .sidebar-brand{
  display:flex;align-items:center;gap:10px;cursor:pointer;
}
.topbar-logo-section .sidebar-logo{
  height:40px;width:auto;flex-shrink:0;
  display:flex;align-items:center;overflow:hidden;
}
.topbar-logo-section .sidebar-logo img{
  height:100%;display:block;object-fit:contain;
}
.topbar-logo-section .sidebar-title{display:none !important;}

/* ============ 侧边栏响应式 ============ */
.main-content{flex:1;padding:0;overflow:auto;background:#FAFBFC;min-height:0;display:flex;flex-direction:column;}

.page{display:none;background:transparent;}
.page.active{display:flex;flex-direction:column;flex:1;min-height:0;}
  /* 方案B 双轨 wrapper：左180px占位 + 右白浮起 */
  .page-inner{display:flex;flex:1;min-height:0;width:100%;}
  .page-left-spacer{display:none;width:0;min-width:0;}
  .page-content-wrap{flex:1;min-width:0;background:#FAFBFC;border-radius:0;margin:0;padding:0;box-sizing:border-box;overflow:auto;}
  /* 文件管理：单栏（面包屑 + 工具栏 + 表格 + 分页）固定高度铺满视口。
     · 给 #page-file.page.active 显式精确高度，避免父 main-content{overflow:auto} 按内容撑开。
     · .page-content-wrap--file 不自己滚动；表格 .fm-table-wrap / 网格 .fm-grid 内部滚动。
     · .fm-layout--baota 为纵向 flex 容器，.fm-main 用 flex:1 + min-height:0 防止撑破。 */
  .page#page-file.active{
    height:calc(100vh - 56px);
    min-height:calc(100vh - 56px);
    max-height:calc(100vh - 56px);
  }
  .page-content-wrap.page-content-wrap--file{
    overflow:hidden;
    padding:0;margin:0;
    display:flex;flex-direction:column;
    min-height:0;
    flex:1 1 auto;
    flex-basis:100%;
    height:100%;
    width:100%;
  }
  .page#page-file .fm-layout--baota{
    display:flex;flex-direction:column;
    flex:1 1 auto;align-items:stretch;
    width:100%;height:100%;min-height:0;max-height:100%;
    overflow:hidden;background:transparent;
    padding:12px 14px;box-sizing:border-box;
  }
  .page#page-file .fm-main{
    flex:1 1 auto;width:100%;
    min-width:0;min-height:0;max-height:100%;
    overflow:hidden;
    display:flex;flex-direction:column;
    background:transparent;
    margin:0;padding:0;box-sizing:border-box;
  }


h2{margin-bottom:20px;font-size:var(--font-size-3xl);color:var(--brand);}
h3{margin-bottom:8px;font-size:var(--font-size-xl);color:var(--text-primary);}

/* 卡片基类（GitHub Primer 风：白底 + 1px 细边框 + 8 圆角，静态卡不用投影） */
.card{
  background:var(--bg-surface);
  border:1px solid var(--border);
  border-radius:8px;
  padding:14px 16px;
  margin-bottom:12px;
  box-shadow:none;
}
.input-card{flex:1;min-width:320px;}
/* 筛选区卡片：去掉外壳，避免“框中框”（台账/售后页） */
.card.card--filter{
  background:transparent;border:none;border-radius:0;
  padding:0;margin-bottom:0;
}
.result-card{flex:1.2;min-width:380px;}

.main-container{display:flex;gap:20px;margin-bottom:20px;flex-wrap:wrap;}

.input-row{
  display:flex;align-items:center;gap:10px;
  border:var(--form-border);border-radius:var(--radius-input);
  padding:var(--form-padding);background:var(--form-bg);margin-bottom:12px;
  min-height:38px;
}
.input-row:focus-within{border-color:var(--form-border-focus);box-shadow:var(--form-shadow-focus);}
.input-row label{width:auto;font-weight:500;color:var(--form-label-color);font-size:var(--font-size-form);flex-shrink:0;}
.input-row input,.input-row select{
  flex:1;border:none;background:transparent;
  border-radius:var(--radius-input);font-size:var(--font-size-form);transition:border-color 0.2s;color:var(--text-primary);min-width:0;outline:none;
}
.input-row input{padding:0;}
.input-row select{padding:0 28px 0 0;background-position:right 0 center;}

.result-row{
  display:flex;align-items:center;gap:10px;
  border:var(--form-border);border-radius:var(--radius-input);
  padding:var(--form-padding);background:var(--form-bg);margin-bottom:12px;
  min-height:38px;
}
.result-row label{width:auto;font-weight:500;color:var(--form-label-color);font-size:var(--font-size-form);flex-shrink:0;}
.result-row input{
  flex:1;border:none;background:transparent;padding:0;
  border-radius:var(--radius-input);font-size:var(--font-size-form);color:var(--text-primary);min-width:0;outline:none;
}

.btn-group{display:flex;gap:8px;margin-top:6px;flex-wrap:wrap;align-items:center;}
button{
  padding:0 18px;height:var(--form-height);box-sizing:border-box;
  border:none;border-radius:8px;
  font-size:var(--font-size-md);font-weight:500;cursor:pointer;
  transition:transform .12s var(--ease-spring),background-color .2s,border-color .2s,box-shadow .2s,color .2s,opacity .2s;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
}
/* 静态反馈只变底色/边框，不做物理位移与投影（参考 GitHub）；
   实心主钮的加深态由下方 .btn-primary:active 提供 */
button:not(:disabled):active{background-color:rgba(0,0,0,.04);}
/* ===== 按钮语义（参考 GitHub Primer：primary 实心品牌色 / default 白底灰边 / danger 红字红边）===== */
.btn-primary{
  background:var(--brand);border:1px solid var(--brand);color:#fff;font-weight:500;
}
.btn-primary:hover{background:var(--brand-hover);border-color:var(--brand-hover);color:#fff;}
.btn-primary:active{background:#0B56B4;}
.btn-secondary,.btn-success{
  background:#FFFFFF;color:var(--text-secondary);border:1px solid var(--border-strong);
}
.btn-secondary:hover,.btn-success:hover{background-color:var(--bg-subtle);color:var(--text-primary);}
.btn-danger{
  background:#FFFFFF;color:var(--danger);border:1px solid var(--danger);
}
.btn-danger:hover{background-color:var(--danger-soft);color:var(--danger);font-weight:600;}
/* 键盘焦点可见性（GitHub 无障碍标志：2px 品牌色外环；鼠标点击不显示，仅 :focus-visible） */
a:focus-visible,
button:focus-visible,
summary:focus-visible,
[role="button"]:focus-visible,
[tabindex]:focus-visible{
  outline:2px solid var(--brand);
  outline-offset:1px;
}
/* 语义按钮 PC 统一 32px 高（手机端由移动端段覆盖为触控高） */
.btn-primary,.btn-secondary,.btn-success,.btn-danger{height:32px;padding:0 14px;}
.btn-sm{padding:0 10px;height:28px;font-size:var(--font-size-base);display:inline-flex;align-items:center;justify-content:center;}
.btn-link{padding:7px 11px;font-size:var(--font-size-md);background:transparent;border:none;color:var(--brand);cursor:pointer;border-radius:8px;transition:all 0.15s;display:inline-flex;align-items:center;gap:4px;line-height:1;}
.btn-link:hover{background:#EBF2FC;color:var(--brand);opacity:0.9;}
.btn-link-danger{color:var(--danger);}
/* 表格行操作列：字号/字重与表格正文对齐（12px / 400），仅作用于表格单元格内 */
td .btn-link{font-size:var(--font-size-base);font-weight:400;}
.btn-link-danger:hover{background:#FDECEC;color:var(--danger);opacity:0.9;}

/* 清空筛选条件按钮：无边框 + 图标 + 文字 */
.btn-clear{
  background:transparent;border:none !important;
  color:var(--text-tertiary);padding:0 12px;font-size:var(--font-size-md);font-weight:500;line-height:1;
  height:34px;box-sizing:border-box;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border-radius:8px;cursor:pointer;transition:all 0.15s;
}
.btn-clear:hover{background:#F1F3F5;color:var(--text-primary);}
.btn-clear i{font-size:var(--font-size-md);line-height:1;}

.btn-reset{
  background:transparent;border:none !important;
  color:var(--text-tertiary);padding:0 12px;font-size:var(--font-size-md);font-weight:500;line-height:1;
  height:34px;box-sizing:border-box;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border-radius:8px;cursor:pointer;transition:all 0.15s;
}
.btn-reset:hover{background:#F1F3F5;color:var(--text-primary);}
.btn-reset i{font-size:var(--font-size-md);line-height:1;}

.desc{font-size:var(--font-size-base);color:var(--text-tertiary);margin-top:10px;line-height:1.5;}

.history-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;flex-wrap:wrap;gap:10px;}
.history-list{max-height:320px;overflow-y:auto;}
.history-item{
  padding:10px;border-bottom:1px solid #e8e3db;
  font-size:var(--font-size-md);color:#334155;
}
.history-item:last-child{border-bottom:none;}

.table-wrap{overflow:auto;border-radius:8px;}
/* 历史台账：table-wrap 不做滚动容器（无固定高度），表头相对 .main-content 滚动固定 */
.lm-history-pane .table-wrap{overflow:visible;}
#page-ledger .table-wrap{flex:1;min-height:0;}
#page-consumable .table-wrap{flex:1;min-height:0;}
/* pane 内卡片不叠加 margin，分区间距由 pane 的 gap:10px 统一控制 */
.lm-history-pane > .card,
#billReconcilePanel > .card,
#page-aftersale .as-pane > .card{
  margin-bottom:0;
}
/* 仅表格卡清零 padding（表格单元格自带内边距）；筛选卡靠 card--filter、汇总面板自带 padding，避免顶格 */
.lm-history-pane > .card:has(.table-wrap),
#billReconcilePanel > .card:has(.table-wrap),
#page-aftersale .as-pane > .card:has(.table-wrap){
  padding:0;
}
/* 收款汇总面板：去外框，背景边缘与筛选条/表格对齐；小卡自带内边距 */
.payment-board{
  background:transparent;border:none;border-radius:0;
  padding:0;margin-bottom:0;
}
/* 对账/收款面板与上方胶囊保持间距 */
#billReconcilePanel,#billPaymentPanel{margin-top:10px;}
#page-consumable .profile-layout{flex-direction:column;}
#page-consumable .profile-sidebar{
  width:100%;min-width:0;flex:none;
  background:transparent;border-right:none;border-bottom:none;
  padding:0 14px;display:flex;flex-direction:row;align-items:center;gap:0;
  overflow-x:auto;overflow-y:hidden;
}
#page-consumable .profile-content{display:flex;flex-direction:column;padding:10px 14px;}
#page-consumable .card{flex:1;display:flex;flex-direction:column;min-height:0;padding:0;margin-bottom:0;}
/* 财务对账/收款面板：卡片清零 margin，间距由容器 gap:10px 控制 */
#billListWrap .card,
#paymentBoardWrap .card{margin-bottom:0;}
/* 耗材分类改为顶部横向 tab（全局二级菜单统一样式，强调色=申花蓝） */
#page-consumable .cons-cat-item{
  padding:10px 0;margin:0 24px 0 0;margin-bottom:0;border-radius:0;
  background:transparent;color:var(--text-muted);font-size:var(--font-size-lg);font-weight:500;
  border-bottom:2px solid transparent;white-space:nowrap;
}
#page-consumable .cons-cat-item:last-of-type{margin-right:0;}
#page-consumable .cons-cat-item:hover{background:transparent;color:var(--shenhua-blue);}
#page-consumable .cons-cat-item.active{
  background:transparent;color:var(--shenhua-blue);border-bottom-color:var(--shenhua-blue);font-weight:600;
}
#page-consumable .cons-cat-item .cons-cat-actions{display:none;}
#page-consumable .cons-cat-item.drag-over{border-bottom:2px solid var(--shenhua-blue);}
/* tab 栏末尾的分类管理入口 */
#page-consumable .cons-cat-divider{display:none;}
#page-consumable .cons-cat-manage{
  display:inline-flex;align-items:center;justify-content:center;
  width:28px;height:28px;border:none;background:transparent;
  color:var(--text-muted);font-size:var(--font-size-lg);cursor:pointer;border-radius:8px;
  transition:all .15s;flex-shrink:0;padding:0;margin-left:4px;
}
#page-consumable .cons-cat-manage:hover{background:#F1F3F5;color:var(--brand);}
/* 耗材分类菜单项（可拖拽） */
.cons-cat-item{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:var(--font-size-md);color:var(--text-secondary);margin-bottom:8px;user-select:none;transition:all .15s;position:relative;}
.cons-cat-item:hover{background:#F1F3F5;}
.cons-cat-item.active{background:var(--brand);color:#fff;}
.cons-cat-item .cons-cat-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cons-cat-item .cons-cat-actions{display:flex;gap:8px;opacity:0;transition:opacity .15s;}
.cons-cat-item:hover .cons-cat-actions{opacity:1;}
.cons-cat-item .cons-cat-edit{color:var(--text-muted);font-size:var(--font-size-base);cursor:pointer;}
.cons-cat-item .cons-cat-edit:hover{color:var(--brand);}
.cons-cat-item.active .cons-cat-edit{color:#CBD5E1;}
.cons-cat-item.active .cons-cat-edit:hover{color:#fff;}
.cons-cat-item .cons-cat-del{color:var(--danger);font-size:var(--font-size-base);cursor:pointer;}
.cons-cat-item.active .cons-cat-del{color:#FCA5A5;}

/* ===== 个人中心 & 系统设置：左右布局（左侧导航 + 右侧内容） ===== */
#page-profile .profile-layout,
#page-settings .profile-layout{flex-direction:row;align-items:stretch;}

/* 左侧导航卡片：左缘 22px 与顶栏 ☰ 按钮对齐 */
.pf-nav{
  flex:0 0 160px;display:flex;flex-direction:column;gap:4px;
  align-self:stretch;margin:12px 0 12px 22px;padding:10px;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  overflow-y:auto;flex-shrink:0;
}
.pf-nav-title{
  padding:4px 10px 8px;margin-bottom:2px;
  font-size:12px;font-weight:600;color:#86909C;letter-spacing:.5px;
}
/* 菜单项：覆盖横向 .page-subtab 样式（特异性更高） */
.pf-nav .page-subtab{
  display:flex;align-items:center;gap:10px;
  margin:0;padding:9px 12px;border-bottom:none;border-radius:8px;
  background:transparent;color:#4E5969;
  font-size:var(--font-size-lg);font-weight:500;line-height:1.2;
  cursor:pointer;white-space:nowrap;
  transition:background .15s,color .15s;
}
.pf-nav .page-subtab i{
  width:16px;text-align:center;font-size:14px;color:#86909C;flex:none;
  transition:color .15s;
}
.pf-nav .page-subtab:hover{background:#F1F3F5;color:#1D2129;}
.pf-nav .page-subtab:hover i{color:var(--shenhua-blue);}
.pf-nav .page-subtab.active{
  background:#EBF2FC;color:var(--shenhua-blue);font-weight:600;
}
.pf-nav .page-subtab.active i{color:var(--shenhua-blue);}

/* 右侧内容区 */
#page-profile .profile-main,
#page-settings .profile-main{margin:12px 22px 12px 14px;min-width:0;}
#page-profile .profile-content,
#page-settings .profile-content{padding:2px 2px 18px 0;}
#page-profile .profile-panel,
#page-settings .profile-panel{max-width:1000px;}

/* 左右布局下恢复面板标题（原顶部 tab 布局时隐藏） */
#page-profile .profile-panel-header,
#page-settings .profile-panel-header{
  display:flex;align-items:center;gap:8px;
  margin:2px 0 12px;padding:0 0 10px;border-bottom:1px solid var(--ph-divider);
}
#page-profile .profile-panel-header h2,
#page-settings .profile-panel-header h2{
  font-size:var(--ph-title-size);font-weight:600;color:var(--ph-title-color);margin:0;
}
#page-profile .profile-panel-icon,
#page-settings .profile-panel-icon{font-size:var(--ph-icon-size);color:var(--ph-icon-color);}

/* 窄屏：左导航降级为顶部横向滑动胶囊 */
@media (max-width:820px){
  .pf-nav{
    flex:none;width:auto;margin:10px 14px 0;padding:8px;
    flex-direction:row;align-items:center;gap:6px;
    overflow-x:auto;overflow-y:hidden;
  }
  .pf-nav-title{display:none;}
  .pf-nav .page-subtab{
    flex:none;background:#F1F3F5;
  }
  .pf-nav .page-subtab.active{background:#EBF2FC;}
  #page-profile .profile-main,
  #page-settings .profile-main{margin:10px 14px 14px;}
  #page-profile .profile-content,
  #page-settings .profile-content{padding:2px 0 14px;}
}

/* ===== 台账等页面：顶部横向二级 tab（与耗材管理同款，强调色=申花蓝） ===== */
.page-subtabs{
  display:flex;align-items:center;gap:0;
  padding:0 2px;flex:none;overflow-x:auto;overflow-y:hidden;
  border-bottom:1px solid #E5E7EB;
}
.page-subtab{
  padding:10px 0;margin:0 24px 0 0;
  color:var(--text-muted);font-size:var(--font-size-lg);font-weight:500;
  border-bottom:2px solid transparent;margin-bottom:-1px;
  cursor:pointer;white-space:nowrap;background:transparent;
  transition:color .15s,border-color .15s;
}
.page-subtab:last-child{margin-right:0;}
.page-subtab:hover{color:var(--shenhua-blue);}
.page-subtab.active{
  color:var(--shenhua-blue);border-bottom-color:var(--shenhua-blue);font-weight:600;
}

.cons-cat-item.dragging{opacity:.4;}
.cons-cat-item.drag-over{border-top:2px solid var(--brand);}
/* 分类下拉选择器 */
.cc-select{position:relative;width:100%;}
.cc-select-trigger{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;border:1px solid #E5E7EB;border-radius:8px;background:#fff;cursor:pointer;font-size:var(--font-size-md);color:var(--text-primary);}
.cc-select-trigger:hover{border-color:var(--brand);}
.cc-select-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cc-select-arrow{font-size:var(--font-size-xs);color:var(--text-muted);}
.cc-select-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:2px;background:#fff;border:1px solid #E5E7EB;border-radius:8px;box-shadow:0 8px 12px rgba(0,0,0,.08);z-index:100;max-height:260px;overflow-y:auto;}
.cc-select-list .cc-option{padding:5px 10px;font-size:var(--font-size-md);color:var(--text-secondary);cursor:pointer;}
.cc-select-list .cc-option:hover{background:#F1F3F5;}
.cc-select-list .cc-option.selected{background:var(--brand);color:#fff;}
.cc-select-add{padding:8px 10px;font-size:var(--font-size-md);color:var(--brand);cursor:pointer;border-top:1px solid #E5E7EB;}
.cc-select-add:hover{background:#F1F3F5;}
.cc-select-add-input{display:flex;gap:6px;padding:8px 10px;border-top:1px solid #E5E7EB;}
.cc-select-add-input input{flex:1;padding:8px 8px;border:1px solid #E5E7EB;border-radius:8px;font-size:var(--font-size-md);}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--font-size-table);}
th,td{
  border:none;
  border-bottom:1px solid var(--border);
  padding:8px 12px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  font-variant-numeric:tabular-nums;
}
th{
  background:var(--bg-subtle);color:var(--text-tertiary);
  font-weight:600;font-size:var(--font-size-base);letter-spacing:0;
  position:sticky;top:0;z-index:2;
  border-bottom:1px solid var(--border);
}
td{background:var(--bg-surface);color:var(--text-primary);transition:background-color .12s ease;}
/* 行 hover：整行浅灰（GitHub 标志性反馈）；最后一行不画底线，边框交给卡片外框 */
tbody tr:hover td{background:var(--bg-subtle);}
tbody tr:last-child td{border-bottom:none;}

.file-input-hidden{display:none;}

.filter-form-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill, minmax(180px,1fr));
  gap:10px;
  margin-bottom:10px;
  align-items:start;
}
.filter-item{
  display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;
  border:1px solid #E5E7EB;border-radius:8px;
  padding:0 10px;background:#FFFFFF;min-height:32px;
}
.filter-item:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(15,104,216,0.10);}
.filter-item label{font-size:var(--font-size-base);color:var(--text-muted);flex-shrink:0;margin-right:6px;white-space:nowrap;}
.filter-item input,.filter-item select{
  flex:1;border:none;background:transparent;font-size:var(--font-size-base);color:var(--text-primary);outline:none;min-width:0;
}
.filter-item input{padding:0;}
.filter-item select{
  padding:0 28px 0 0;font-size:var(--font-size-md);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%2394A3B8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='4 6 8 10 12 6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 0 center;background-size:12px;
}
.filter-item input::placeholder{color:var(--text-muted);}
.filter-item .lm-inline-tip,
.filter-item [id$="Tip"]{
  flex-basis:100%;font-size:var(--font-size-sm);color:var(--text-muted);margin-top:2px;min-height:14px;
}
/* 独立于 filter-item 的版号提示条：空内容不占高度，避免 grid 中多出一行空隙 */
.lm-inline-tip.version-tip-full:empty{display:none;}
/* filter-item 内的自定义下拉去掉自身边框，由 filter-item 统一提供 */
.filter-item .cc-select{width:100%;}
.filter-item .cc-select-trigger{border:none;padding:0;background:transparent;}
.audit-filter-row .filter-item .cc-select{flex:1;min-width:0;}
.audit-filter-row .filter-item .cc-select-trigger{width:100%;}
/* textarea 类表单项保持上下布局 */
.filter-item:has(textarea){
  flex-direction:column;align-items:stretch;padding:0;gap:6px;
  border:none;background:transparent;
}
.filter-item:has(textarea) label{margin-right:0;}
.filter-item textarea{
  width:100%;border:1px solid #E5E7EB !important;border-radius:8px !important;padding:6px 10px !important;
  font-size:var(--font-size-base) !important;color:var(--text-primary) !important;background:#FCFDFD !important;outline:none;resize:vertical;min-height:70px;
}
.filter-item textarea:focus{border-color:var(--brand) !important;}
/* 纯按钮容器的 filter-item 不套边框 */
.filter-item:has(button){border:none;background:transparent;padding:0;min-height:auto;}
.filter-item:has(button) label{display:none;}
/* 让 filter-item 内的按钮与输入框外框高度一致（38px = 36px输入框 + 2px边框，border-box） */
.filter-item:has(button) button:not(.btn-sm){
  height:38px;display:inline-flex;align-items:center;justify-content:center;
}
/* 纯按钮 filter-item 聚焦时不显示输入框的蓝色光环 */
.filter-item:has(button):focus-within{box-shadow:none;border:none;}
/* 新建对账单-客户名称自定义下拉 */
.bc-cust-drop{
  display:none;position:absolute;top:100%;left:0;right:0;margin-top:2px;
  max-height:240px;overflow-y:auto;
  background:#FFFFFF;border:1px solid #E5E7EB;border-radius:8px;
  box-shadow:0 8px 12px rgba(0,0,0,0.08);z-index:1000;
}
/* 首尾项适配圆角，避免 hover 背景露出直角 */
.bc-cust-drop .bc-cust-opt:first-child{border-top-left-radius:8px;border-top-right-radius:8px;}
.bc-cust-drop .bc-cust-opt:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px;}
/* 滚动条去掉方形箭头按钮，避免破坏四角圆角 */
.bc-cust-drop::-webkit-scrollbar{width:8px;}
.bc-cust-drop::-webkit-scrollbar-track{background:transparent;}
.bc-cust-drop::-webkit-scrollbar-thumb{background:#CBD5E1;border-radius:4px;}
.bc-cust-drop::-webkit-scrollbar-button{display:none;}
.bc-cust-opt{
  padding:6px 10px;font-size:var(--font-size-base);color:var(--text-primary);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.bc-cust-opt:hover{
  background:#DBEAFE;color:var(--brand);
}
/* 新建对账单-拉取台账表格圆角 */
#bcItemsArea .data-table{
  border:1px solid #E5E7EB;border-radius:8px;overflow:hidden;
}
/* 去除单元格外边框，由表格外边框统一提供，避免重叠；内部网格线由右侧/下侧单元格的左/上边框形成 */
#bcItemsArea .data-table th,
#bcItemsArea .data-table td{
  border-right:none;border-bottom:none;
}
#bcItemsArea .data-table thead th{border-top:none;}
#bcItemsArea .data-table th:first-child,
#bcItemsArea .data-table td:first-child{border-left:none;}
.filter-actions{
  display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;
}
/* 操作栏内的按钮组不需要全局 .btn-group 的 margin-top:6px，避免与上方 filter-form-grid 的 margin-bottom 叠加 */
.filter-actions .btn-group{margin-top:0;}

/*公式弹窗样式*/
#formulaModal{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,0.4);z-index:9999;align-items:center;justify-content:center;
}
.formula-panel{
  background:#FFFFFF;padding:16px;width:620px;max-width:95vw;border-radius:8px;border:1px solid #E5E7EB;
  box-shadow:0 8px 30px rgba(15,23,42,0.12);
}
#formulaTextarea{
  width:100%;height:320px;font-family:monospace;padding:8px;
  background:#FFFFFF;color:var(--text-primary);border:1px solid #E5E7EB;border-radius:8px;
}
.formula-btn-bar{
  margin-top:10px;display:flex;gap:8px;justify-content:flex-end;
}

@media (max-width:1200px){
  .input-row label,.result-row label{width:120px;}
  .table-wrap{max-height:50vh;}
  .topbar-logo-section .sidebar-logo{height:36px;}
  .topbar-logo-section .sidebar-logo img{object-fit:contain !important;}
  .topbar-logo-section{padding:0 18px;}
  .calc-grid{grid-template-columns:1fr;}
  .calc-input-grid{grid-template-columns:1fr;}
}
#contractModal{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,0.4);z-index:9999;align-items:center;justify-content:center;
}
.contract-panel{
  background:#FFFFFF;padding:var(--modal-pad-y) var(--modal-pad-x);width:720px;max-width:95vw;border-radius:8px;
  max-height:90vh;display:flex;flex-direction:column;border:1px solid #E5E7EB;
  box-shadow:0 8px 30px rgba(15,23,42,0.12);
}
#contractText{
  width:100%;flex:1;min-height:400px;font-family:"SimSun",serif;padding:12px;white-space:pre-wrap;
  background:#FFFFFF;color:var(--text-primary);border:1px solid #E5E7EB;border-radius:8px;
}
.contract-btn-bar{
  margin-top:12px;display:flex;gap:4px;justify-content:flex-end;
}
/* 表单弹窗操作按钮：字号与表格文字一致（12px / 30px），手机端触控规则覆盖 */
.contract-btn-bar .btn-primary,.contract-btn-bar .btn-secondary,
.contract-btn-bar .btn-success,.contract-btn-bar .btn-danger{
  height:30px;padding:0 12px;font-size:var(--font-size-base);
}

/* ===============================================================
   📊 台账管理（Ledger Management）：三Tab容器 + 子模块全部样式
   =============================================================== */
.lm-tabs {
  display: flex;
  gap: 8px;
  margin-bottom: 16px;
  padding: 8px;
  background: #FCFDFD;
  border: 1px solid #D1D5DB;
  border-radius: 8px;
}
.lm-tab {
  flex: 1;
  padding: 10px 18px;
  text-align: center;
  font-size: 18px;
  font-weight: 600;
  color: var(--text-secondary);
  border-radius:8px;
  cursor: pointer;
  user-select: none;
  transition: all 0.15s ease;
  border: 1px solid transparent;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.lm-tab:hover {
  background: #FFFFFF;
  color: var(--shenhua-blue);
}
.lm-tab.active {
  background: var(--shenhua-blue);
  color: #fff;
  border-color: var(--shenhua-blue);
  box-shadow: 0 2px 8px rgba(44, 78, 112, 0.2);
}
.lm-pane {
  display: none;
}
.lm-pane.active {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
/* 财务对账-对账面板：两个卡片间统一 10px */
#billReconcilePanel{gap:10px;}
/* 财务对账-账单列表容器：标签行与面板间统一 10px */
#billListWrap{display:flex;flex-direction:column;gap:10px;flex:1;min-height:0;}
/* 财务对账-收款面板容器：统计卡片/筛选/列表间统一 10px */
#paymentBoardWrap{gap:20px;}

/* 收款弹窗表单：左右布局，label 与 input 垂直居中 */
.pay-form-grid .filter-item{
  flex-direction:row;align-items:center;
  border:1px solid #E5E7EB;border-radius:8px;
  padding:0 10px;background:#FFFFFF;min-height:34px;
}
.pay-form-grid .filter-item label{
  margin:0;margin-right:8px;font-size:13px;color:#475569;font-weight:500;
  flex-shrink:0;white-space:nowrap;line-height:1;
}
.pay-form-grid .filter-item input,
.pay-form-grid .filter-item select{
  flex:1;border:none;background:transparent;font-size:13px;color:#1E293B;
  outline:none;min-width:0;padding:0;height:32px;
}
.pay-form-grid .filter-item input:focus,
.pay-form-grid .filter-item select:focus{
  border:none;box-shadow:none;
}
.pay-form-grid .filter-item:focus-within{
  border-color:#0F68D8;
}

/* ---------- 创建台账 Tab ---------- */
.lm-inline-tip {
  margin-top: 8px;
  font-size: 12px;
  min-height: 16px;
  line-height: 16px;
}
.lm-inline-tip.ok { color: var(--text-tertiary); }
.lm-inline-tip.err { color: #DC2626; }
.lm-inline-tip.warn { color: #D97706; }
/* 版号校验提示：横跨整行，单行显示 */
.version-tip-full {
  grid-column: 1 / -1;
  white-space: nowrap;
  margin-top: 0;
  line-height: 18px;
}
.lm-create-form .filter-item .req::after,
.lm-create-form label .req::after {
  content: "*";
  color: #DC5A5A;
  margin-left: 2px;
  font-weight: 700;
}
.lm-create-form .filter-item .opt-mark {
  display: inline-block;
  font-size: 11px;
  color: var(--text-tertiary);
  background: #FCFDFD;
  padding: 1px 6px;
  border-radius: 8px;
  margin-left: 6px;
  font-weight: 500;
}

/* ---------- 状态跟踪 Tab ---------- */
.lt-toolbar {
  display: flex;
  gap: 10px;
  align-items: flex-end;
  flex-wrap: wrap;
  margin-bottom: 18px;
  padding: 18px 16px;
  background: #FFFFFF;
  border: 1px solid #E5E7EB;
  border-radius:8px;
  box-shadow: 0 1px 2px rgba(15,23,42,0.03);
}
.lt-toolbar .filter-item {
  margin: 0;
  flex: 1;
  min-width: 160px;
}
.lt-toolbar .filter-item label {
  font-size: 12px;
  color: var(--text-secondary);
  margin-bottom: 8px;
  display: block;
  font-weight: 500;
}
.lt-summary {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  align-items: stretch;
}
/* 概览组 / 工序分布组：两组之间竖向分隔线，组内卡片等高 */
.lt-stat-group{display:flex;gap:10px;flex-wrap:wrap;min-width:0;align-items:stretch;}
.lt-stat-overview{flex:0 0 380px;flex-wrap:nowrap;padding-right:14px;margin-right:4px;border-right:1px solid #E5E7EB;}
.lt-stat-overview .lt-stat-card{flex:1 1 0;min-width:0;}
.lt-stat-steps{flex:1 1 380px;min-width:0;}
.lt-stat-steps .lt-stat-card{min-width:0;}
@media (max-width:1280px){
  .lt-stat-overview{flex:1 1 100%;flex-wrap:wrap;padding-right:0;margin-right:0;padding-bottom:12px;margin-bottom:2px;border-right:none;border-bottom:1px solid #E5E7EB;}
  .lt-stat-overview .lt-stat-card{flex:1 1 180px;}
  .lt-stat-steps{flex:1 1 100%;}
}
.lt-stat-card {
  flex: 1;
  min-width: 140px;
  background: #FFFFFF;
  border: 1px solid #E5E7EB;
  border-radius:8px;
  padding: 12px 18px;
  cursor: pointer;
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease, background 0.2s ease;
  position: relative;
  overflow: hidden;
  box-shadow: none;
}
.lt-stat-card:hover {
  border-color: var(--border-strong);
}
.lt-stat-card.active {
  background: var(--brand);
  border-color: var(--brand);
  box-shadow: 0 8px 12px rgba(30,58,95,0.15);
}
.lt-stat-card.active::before {
  content: "";
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: linear-gradient(180deg, #3B82F6, var(--text-muted));
  animation: lt-bar-glow 2s ease-in-out infinite;
}
@keyframes lt-bar-glow {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.5; }
}
.lt-stat-card.active .k,
.lt-stat-card.active .v {
  color: #fff;
}
.lt-stat-card.active .v {
  animation: lt-num-pulse 1.8s ease-in-out infinite;
}
@keyframes lt-num-pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.08); }
}
.lt-stat-card .k {
  font-size: 12px;
  color: var(--text-tertiary);
}
.lt-stat-card .v {
  font-size: 22px;
  font-weight: 700;
  color: var(--brand);
  margin-top: 2px;
  line-height: 1.2;
  display: inline-block;
}
.lt-stat-card.tracking .v { color: #DC5A5A; }
/* 迷你进度条 */
.lt-stat-card .lt-mini-bar {
  margin-top: 8px;
  height: 3px;
  background: #F1F3F5;
  border-radius: 2px;
  overflow: hidden;
}
.lt-stat-card .lt-mini-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, #3B82F6, var(--text-muted));
  border-radius: 2px;
  width: 0%;
  transition: width 0.8s cubic-bezier(0.22, 1, 0.36, 1);
}
.lt-stat-card.active .lt-mini-bar { background: rgba(255,255,255,0.2); }

/* 版号旁备注图标 + hover 提示 */
.lt-remark-wrap {
  position: relative;
  display: inline-block;
  margin-left: 6px;
  vertical-align: middle;
}
/* 线条风格对话气泡图标 */
.lt-remark-icon-bubble {
  display: inline-block;
  vertical-align: middle;
  cursor: default;
  margin-left: 1px;
}
.lt-remark-icon-bubble:hover {
  stroke: #D97706;
}
.lt-col-no .lt-no {
  font-weight: 600;
  color: var(--text-primary);
  white-space: nowrap;
  display: flex;
  align-items: center;
  gap: 6px;
}
.lt-view-icon {
  color: var(--text-muted);
  cursor: pointer;
  font-size: 13px;
  transition: color 0.15s;
}
.lt-view-icon:hover {
  color: var(--brand);
}
.lt-remark-tip {
  position: fixed;
  background: #fff;
  color: #334155;
  border: 1px solid #E5E7EB;
  padding: 4px 12px;
  border-radius:8px;
  font-size: 12px;
  line-height: 1.6;
  white-space: pre-wrap;
  word-break: break-word;
  min-width: 140px;
  max-width: 280px;
  z-index: 99999;
  pointer-events: none;
  box-shadow: 0 8px 12px rgba(0,0,0,0.12);
}
.lt-remark-tip::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 8px solid transparent;
  border-top-color: #fff;
}
.lt-remark-tip::before {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 6px solid transparent;
  border-top-color: #E5E7EB;
  margin-top: 0;
}
.lt-remark-tip.arrow-up::after {
  top: auto;
  bottom: 100%;
  border-top-color: transparent;
  border-bottom-color: #fff;
}
.lt-remark-tip.arrow-up::before {
  top: auto;
  bottom: 100%;
  border-top-color: transparent;
  border-bottom-color: #E5E7EB;
}

/* ========== 状态跟踪表格 ========== */
.lt-table-wrap {
  width: 100%;
  overflow-x: auto;
  border: 1px solid #E5E7EB;
  border-radius:8px;
  background: #fff;
}
.lt-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  min-width: 900px;
}
.lt-table thead th {
  background: var(--bg-subtle);
  color: var(--text-secondary);
  font-weight: 600;
  text-align: center;
  padding: 10px 8px;
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  white-space: nowrap;
}
.lt-table tbody td {
  padding: 10px 8px;
  border-bottom: 1px solid var(--border);
  text-align: center;
  vertical-align: middle;
}
.lt-table tbody tr:hover td {
  background: var(--bg-subtle);
}
.lt-col-no {
  min-width: 140px;
  text-align: left !important;
}
.lt-col-no .lt-cust {
  font-size: 12px;
  color: var(--text-tertiary);
  margin-top: 2px;
}
.lt-col-step {
  min-width: 90px;
}
.lt-step-cell {
  color: var(--text-muted);
  font-size: 12px;
  text-align: center;
  position: relative;
}
.lt-step-cell.done {
  color: #22C55E;
  font-weight: 600;
}
.lt-step-cell.done::before {
  content: "✓";
  display: inline-block;
  margin-right: 3px;
  animation: lt-check-pop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes lt-check-pop {
  0% { transform: scale(0); opacity: 0; }
  60% { transform: scale(1.3); }
  100% { transform: scale(1); opacity: 1; }
}
.lt-step-cell.current {
  color: var(--brand);
  font-weight: 600;
  background: #EEF4FB;
}
.lt-step-cell.current::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 8px;
  transform: translateY(-50%);
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #3B82F6;
  box-shadow: 0 0 0 0 rgba(59,130,246,0.5);
  animation: lt-pulse-dot 1.5s ease-in-out infinite;
}
@keyframes lt-pulse-dot {
  0% { box-shadow: 0 0 0 0 rgba(59,130,246,0.5); }
  70% { box-shadow: 0 0 0 8px rgba(59,130,246,0); }
  100% { box-shadow: 0 0 0 0 rgba(59,130,246,0); }
}
.lt-step-cell.skipped {
  color: var(--text-muted);
  background: #FCFDFD;
  font-style: italic;
}
/* 行数据即时呈现（原 stagger 滑入在生产页频繁刷新时形成干扰，已移除） */
.lt-row {
  opacity: 1;
}
/* 确认成功后行滑出 */
.lt-row.lt-slide-out {
  animation: lt-row-out 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
@keyframes lt-row-out {
  to { opacity: 0; transform: translateX(60px); }
}
/* 售后工单：版号列黄底 */
.lt-col-no-aftersale {
  background: #FEF3C7 !important;
}

/* ============ 时间线视图 ============ */
.lt-timeline-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  margin-top: 0;
}
/* 工单时间线行：原"独立胶囊行"（阴影+四周边框+圆角+入场动画）统一为 GitHub 横线表 */
.lt-timeline-row {
  background: var(--bg-surface);
  box-shadow: none;
  transition: background-color 0.15s ease;
}
.lt-timeline-row td {
  border-top: none;
  border-bottom: 1px solid var(--border);
  background: var(--bg-surface);
}
.lt-timeline-row td:first-child {
  border-left: none;
  border-radius: 0;
}
.lt-timeline-row td:last-child {
  border-right: none;
  border-radius: 0;
}
.lt-timeline-row:last-child td {
  border-bottom: none;
}
.lt-timeline-row:hover td {
  background: var(--bg-subtle);
}
@keyframes lt-row-fadein {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}
.lt-timeline-row.is-aftersale td:first-child {
  border-left: 3px solid #F59E0B;
}
.lt-aftersale-tag {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 6px;
  font-size: 10px;
  font-weight: 500;
  color: #B45309;
  background: #FEF3C7;
  border: 1px solid #FCD34D;
  border-radius: 3px;
  line-height: 1.4;
}
.lt-timeline-info {
  padding: 12px 16px;
  vertical-align: middle;
  white-space: nowrap;
}
.lt-timeline-no {
  font-weight: 600;
  color: var(--text-primary);
  font-size: 18px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.lt-timeline-cust {
  font-size: 12px;
  color: var(--text-tertiary);
  margin-top: 8px;
}
.lt-timeline-cell {
  padding: 12px 16px;
  vertical-align: middle;
  width: 100%;
}
/* 时间线 */
.lt-timeline {
  display: flex;
  align-items: flex-start;
  position: relative;
  padding: 0 8px;
}
.lt-tl-node {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  z-index: 2;
  width: 28px;
  flex-shrink: 0;
}
.lt-tl-dot {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 600;
  transition: all 0.3s ease;
  background: #F1F3F5;
  color: var(--text-muted);
  border: 2px solid #E5E7EB;
}
.lt-tl-dot.done {
  background: #22C55E;
  color: #fff;
  border-color: #22C55E;
  animation: lt-dot-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes lt-dot-pop {
  0% { transform: scale(0); }
  60% { transform: scale(1.25); }
  100% { transform: scale(1); }
}
.lt-tl-dot.current {
  background: #fff;
  color: var(--brand);
  border-color: #3B82F6;
  box-shadow: 0 0 0 0 rgba(59,130,246,0.5);
  animation: lt-dot-pulse 1.8s ease-in-out infinite;
}
@keyframes lt-dot-pulse {
  0% { box-shadow: 0 0 0 0 rgba(59,130,246,0.5); }
  70% { box-shadow: 0 0 0 12px rgba(59,130,246,0); }
  100% { box-shadow: 0 0 0 0 rgba(59,130,246,0); }
}
.lt-tl-dot.skipped {
  background: #FCFDFD;
  color: #CBD5E1;
  border-color: #E5E7EB;
  text-decoration: line-through;
}
.lt-tl-label {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 3px;
  font-size: 11px;
  color: var(--text-tertiary);
  margin-top: 6px;
  white-space: nowrap;
}
.lt-tl-label-text {
  white-space: nowrap;
}
.lt-step-memo-btn {
  font-size: 10px;
  color: #CBD5E1;
  cursor: pointer;
  transition: color 0.2s;
}
.lt-step-memo-btn:hover {
  color: #F59E0B;
}
.lt-step-memo-btn.has-memo {
  color: #F59E0B;
}
/* 无备注：淡色圆形"+"入口，悬停节点时加深为品牌蓝 */
.lt-step-memo-btn.add {
  font-style: normal;
  font-size: 9px;
  width: 14px;
  height: 14px;
  padding: 0;
  border-radius: 50%;
  border: 1px solid #D4DAE3;
  background: #fff;
  color: #AEB8C6;
  line-height: 12px;
  text-align: center;
  vertical-align: middle;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  opacity: .6;
  transition: all .2s var(--ease-out);
}
.lt-step-memo-btn.add::before { line-height: 12px; }
.lt-tl-node:hover .lt-step-memo-btn.add,
.lt-step-memo-btn.add:hover {
  opacity: 1;
  color: var(--brand);
  border-color: var(--brand);
}
.lt-tl-node.current .lt-tl-label {
  color: var(--brand);
  font-weight: 600;
}
.lt-tl-node.done .lt-tl-label {
  color: #22C55E;
}
/* 步骤耗时 */
.lt-tl-duration {
  font-size: 10px;
  color: var(--text-muted);
  margin-top: 3px;
  white-space: nowrap;
}
.lt-tl-duration.current {
  color: var(--brand);
  font-weight: 500;
}
/* 版号下方流转天数：按停留时长分级（≤3天灰 / 4-7天琥珀 / >7天红） */
.lt-flow-days {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  font-weight: 600;
  color: var(--text-tertiary);
  margin-top: 6px;
}
.lt-flow-days.normal { color: var(--text-tertiary); }
.lt-flow-days.warn { color: #B45309; }
.lt-flow-days.danger { color: #DC2626; }
.lt-flow-days i {
  font-size: 11px;
}
/* 连接线 */
.lt-tl-line {
  flex: 1;
  height: 3px;
  background: #F1F3F5;
  margin: 12px -2px 0;
  border-radius: 2px;
  transition: background 0.5s ease;
}
.lt-tl-line.done {
  background: linear-gradient(90deg, #22C55E, #4ADE80);
}
/* 汇入当前节点的完成段：绿色底 + 白色流光，提示工单正走到这一步 */
.lt-tl-line.lead {
  position: relative;
  overflow: hidden;
  background: linear-gradient(90deg, #22C55E, #4ADE80);
}
.lt-tl-line.lead::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 2px;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.8), transparent);
  animation: lt-line-flow 2.4s ease-in-out infinite;
}
@keyframes lt-line-flow {
  0% { transform: translateX(-100%); }
  60%, 100% { transform: translateX(100%); }
}

/* ====== 看板：规格行 / 交期标签 / 返工天数 / 分享按钮 ====== */
.lt-spec {
  font-size: 12px;
  color: var(--text-secondary);
  margin-top: 4px;
  white-space: nowrap;
}
.lt-info-bottom {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 6px;
}
.lt-info-bottom .lt-flow-days { margin-top: 0; }
.lt-flow-days.aftersale { color: #EA580C; }
.lt-due {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 600;
  padding: 1px 8px;
  border-radius: 10px;
  line-height: 1.6;
  white-space: nowrap;
}
.lt-due i { font-size: 10px; }
.lt-due.overdue { background: #FEE2E2; color: #DC2626; }
.lt-due.today   { background: #FFEDD5; color: #EA580C; }
.lt-due.soon    { background: #FEF3C7; color: #B45309; }
.lt-due.normal  { background: #F1F5F9; color: #64748B; }
.lt-tl-share-btn {
  padding: 6px 12px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--bg-surface);
  color: var(--text-secondary);
  cursor: pointer;
  font-size: 13px;
  line-height: 1.2;
  transition: all 0.2s;
}
.lt-tl-share-btn:hover {
  color: #fff;
  background: var(--brand);
  border-color: var(--brand);
}
/* 交期预警统计卡 */
.lt-stat-card.due .v { color: #EA580C; }
.lt-stat-card.due .k i { color: #F59E0B; margin-right: 2px; }
.lt-stat-sub {
  font-size: 10px;
  color: var(--text-muted);
  margin-top: 6px;
  white-space: nowrap;
}
.lt-stat-card.active .lt-stat-sub { color: rgba(255,255,255,0.85); }
/* 侧栏菜单"待我确认"红点角标 */
.menu-pending-badge {
  position: absolute;
  top: 3px;
  right: 8px;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  border-radius: 8px;
  background: #EF4444;
  color: #fff;
  font-size: 10px;
  line-height: 16px;
  text-align: center;
  font-weight: 600;
  z-index: 2;
  pointer-events: none;
}
/* 深色模式适配 */
body[data-theme="dark"] .lt-due.overdue { background: rgba(239,68,68,.18); color: #FCA5A5; }
body[data-theme="dark"] .lt-due.today   { background: rgba(249,115,22,.18); color: #FDBA74; }
body[data-theme="dark"] .lt-due.soon    { background: rgba(245,158,11,.18); color: #FCD34D; }
body[data-theme="dark"] .lt-due.normal  { background: rgba(148,163,184,.15); color: #94A3B8; }
body[data-theme="dark"] .lt-flow-days.aftersale { color: #FDBA74; }
body[data-theme="dark"] .lt-flow-days.warn { color: #FCD34D; }
body[data-theme="dark"] .lt-flow-days.danger { color: #FCA5A5; }
body[data-theme="dark"] .lt-step-memo-btn.add{
  background:var(--bg-field);border-color:var(--border-strong);color:var(--text-muted);
}
body[data-theme="dark"] .lt-stat-card.due .v { color: #FDBA74; }
/* 操作列 */
.lt-timeline-op {
  padding: 12px 16px;
  vertical-align: middle;
  text-align: center;
  white-space: nowrap;
}
.lt-tl-op-inner {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}
.lt-tl-confirm-btn {
  padding: 6px 16px;
  background: var(--brand);
  color: #fff;
  border: 1px solid transparent;
  border-radius: 8px;
  font-size: 13px;
  line-height: 1.2;
  cursor: pointer;
  transition: background 0.2s;
}
.lt-tl-confirm-btn:hover { background: #2c5282; }
.lt-tl-confirm-btn:disabled { opacity: 0.6; cursor: not-allowed; }
.lt-tl-rollback-btn {
  padding: 6px 12px;
  background: #fff;
  color: #DC2626;
  border: 1px solid #FCA5A5;
  border-radius: 8px;
  font-size: 13px;
  line-height: 1.2;
  cursor: pointer;
  transition: all 0.2s;
}
.lt-tl-rollback-btn:hover { background: #DC2626; color: #fff; border-color: #DC2626; }
.lt-tl-rollback-btn:disabled { opacity: 0.6; cursor: not-allowed; }
.lt-tl-tracking-input {
  padding: 6px 10px;
  border: 1px solid #E5E7EB;
  border-radius: 8px;
  font-size: 12px;
  outline: none;
}
.lt-tl-tracking-input:focus { border-color: var(--brand); }
.lt-tl-hint {
  font-size: 12px;
  color: var(--text-muted);
  font-style: italic;
}
.lt-tl-row-flyout {
  animation: lt-tl-flyout 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
@keyframes lt-tl-flyout {
  to { opacity: 0; transform: translateX(60px); }
}
.lt-col-no-aftersale .lt-no {
  color: #92400E;
  font-weight: 600;
}
.lt-col-op {
  min-width: 200px;
  text-align: center !important;
}
.lt-col-op .lt-tracking-input {
  width: 130px;
  padding: 8px 8px;
  border: 1px solid #E5E7EB;
  border-radius: 8px;
  font-size: 12px;
  margin-right: 6px;
  vertical-align: middle;
}
.lt-confirm-btn {
  background: var(--brand);
  color: #fff;
  border: none;
  padding: 6px 18px;
  border-radius: 8px;
  font-size: 12px;
  cursor: pointer;
  vertical-align: middle;
  transition: background 0.2s;
}
.lt-confirm-btn:hover {
  background: #1E3A8A;
}
.lt-confirm-btn:disabled {
  background: var(--text-muted);
  cursor: not-allowed;
}
.lt-hint-inline {
  color: var(--text-muted);
  font-size: 12px;
}

.lt-empty {
  text-align: center;
  padding: 50px 20px;
  color: var(--text-tertiary);
  font-size: 18px;
  background: #FFFFFF;
  border: 1px dashed #D1D5DB;
  border-radius:8px;
}
.lt-empty .emoji {
  font-size: 40px;
  margin-bottom: 10px;
  display: block;
}

.lt-card {
  background: #FFFFFF;
  border: 1px solid #E5E7EB;
  border-radius:8px;
  padding: 16px 18px;
  margin-bottom: 18px;
  box-shadow: 0 1px 2px rgba(15,23,42,0.03);
  transition: box-shadow 0.2s, border-color 0.2s;
}
.lt-card:hover {
  box-shadow: 0 8px 12px rgba(44,78,112,0.08);
  border-color: #D1D5DB;
}
.lt-card-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}
.lt-card-title {
  display: flex;
  align-items: baseline;
  gap: 10px;
  flex-wrap: wrap;
  flex: 1;
  min-width: 240px;
}
.lt-card-title .no {
  font-size: 18px;
  font-weight: 700;
  color: var(--brand);
  font-family: ui-monospace, Consolas, monospace;
  letter-spacing: 0.3px;
}
.lt-card-title .cust {
  font-size: 18px;
  color: #334155;
  max-width: 320px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.lt-badges {
  display: flex;
  gap: 6px;
  align-items: center;
  flex-wrap: wrap;
}
.lt-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
  line-height: 1.4;
}
.lt-badge.boss { background: #FEF2F2; color: #B91C1C; }
.lt-badge.chejian { background: #FFFBEB; color: #92400E; }
.lt-badge.ok { background: #DCFCE7; color: var(--text-secondary); }
.lt-badge.info { background: #DBEAFE; color: #1E40AF; }
.lt-badge.progress { background: #EDE9FE; color: #5B21B6; }

.lt-card-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
  font-size: 12px;
  color: var(--text-tertiary);
  margin-bottom: 12px;
}
.lt-card-meta span b {
  color: #334155;
  font-weight: 500;
  margin-right: 2px;
}

/* 6步进度条（LT = ledger tracking） */
.lt-flow {
  display: flex;
  align-items: stretch;
  gap: 6px;
  padding: 12px;
  background: #FCFDFD;
  border: 1px solid #E5E7EB;
  border-radius: 8px;
  position: relative;
  margin-bottom: 12px;
  flex-wrap: wrap;
}
.lt-step {
  position: relative;
  z-index: 1;
  flex: 1 1 120px;
  min-width: 120px;
  background: #FFFFFF;
  border: 2px solid #E5E7EB;
  border-radius: 8px;
  padding: 10px 8px 8px 8px;
  text-align: center;
  transition: all 0.2s ease;
}
.lt-step .num {
  width: 30px;
  height: 30px;
  margin: 0 auto 6px auto;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 13px;
  font-family: ui-monospace, Consolas, monospace;
  background: #FCFDFD;
  color: var(--text-tertiary);
  border: 1px solid #D1D5DB;
}
.lt-step .t {
  font-weight: 600;
  font-size: 13px;
  color: #334155;
  margin-bottom: 2px;
}
.lt-step .who {
  font-size: 11px;
  color: var(--text-tertiary);
  display: inline-block;
  padding: 1px 6px;
  background: #FCFDFD;
  border-radius: 8px;
}
.lt-step .who.boss { background: #FEF2F2; color: #B91C1C; }
.lt-step .who.chejian { background: #FFFBEB; color: #92400E; }
.lt-step.active {
  border-color: var(--brand);
  box-shadow: 0 0 0 2px rgba(44,78,112,0.15);
  animation: ltPulse 2.2s ease-in-out infinite;
}
.lt-step.active .num {
  background: var(--brand);
  color: #fff;
  border-color: var(--brand);
}
.lt-step.active .t { color: var(--brand); }
.lt-step.done {
  border-color: #22C55E;
  opacity: 0.92;
}
.lt-step.done .num {
  background: #22C55E;
  color: #fff;
  border-color: #22C55E;
}
.lt-step.done::after {
  content: "✓";
  position: absolute;
  top: -8px;
  right: -8px;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: #22C55E;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 12px;
  line-height: 1;
  box-shadow: 0 1px 3px rgba(34, 197, 94, 0.4);
}
.lt-step.done .t { color: #22C55E; }
.lt-step .confirmed-info {
  margin-top: 8px;
  font-size: 11px;
  color: var(--text-secondary);
}
.lt-step.blocked .num { opacity: 0.55; }
.lt-step.blocked .t { color: var(--text-muted); }

@keyframes ltPulse {
  0%, 100% { box-shadow: 0 0 0 2px rgba(44,78,112,0.15); }
  50% { box-shadow: 0 0 0 8px rgba(44,78,112,0.08); }
}

/* 状态跟踪卡片底部操作区 */
.lt-card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  padding-top: 10px;
  border-top: 1px dashed #E5E7EB;
}
.lt-hint {
  font-size: 12px;
  color: var(--text-tertiary);
}
.lt-hint b { color: var(--brand); }
.lt-confirm-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 16px;
  border-radius:8px;
  border: none;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  background: var(--brand);
  color: #fff;
  transition: all 0.15s;
}
.lt-confirm-btn:hover:not(:disabled) {
  background: #1E3A56;
}
.lt-confirm-btn:disabled {
  background: var(--text-muted);
  cursor: not-allowed;
  opacity: 0.7;
}
.lt-confirm-btn.boss { background: #DC2626; }
.lt-confirm-btn.boss:hover:not(:disabled) { background: #B91C1C; box-shadow: 0 3px 8px rgba(220,38,38,0.3); }
.lt-confirm-btn.chejian { background: #D97706; }
.lt-confirm-btn.chejian:hover:not(:disabled) { background: #B45309; box-shadow: 0 3px 8px rgba(217,119,6,0.3); }

/* 发货快递单号输入 */
.lt-tracking-row {
  display: flex;
  align-items: center;
  flex: 1;
  min-width: 180px;
}
.lt-tracking-input {
  width: 100%;
  padding: 7px 12px;
  border: 1px solid #D1D5DB;
  border-radius:8px;
  font-size: 13px;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.lt-tracking-input:focus {
  outline: none;
  border-color: var(--brand);
  box-shadow: 0 0 0 3px rgba(30,58,95,0.1);
}

/* 工艺确认：查看参数按钮 */
.lt-foot-row {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
}
.lt-param-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  background: #FCFDFD;
  color: var(--brand);
  border: 1px solid #D1D5DB;
  border-radius:8px;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.15s;
  white-space: nowrap;
}
.lt-param-btn:hover {
  background: #F1F3F5;
  border-color: var(--text-muted);
}
.lt-param-btn-inline {
  padding: 3px 10px;
  font-size: 12px;
  border-radius: 8px;
  margin-left: 10px;
}
.lt-param-btn-inline:hover {
  background: #F1F3F5;
  color: #0F2540;
}
.lt-hint-inline {
  font-size: 13px;
  color: var(--text-tertiary);
}
.lt-hint-inline b { color: var(--brand); }

/* 工艺参数编辑弹窗 */
.ledger-params-form .lp-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px 20px;
  padding: 8px 0;
}
.ledger-params-form .lp-row {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ledger-params-form .lp-row-full {
  grid-column: 1 / -1;
}
.ledger-params-form label {
  font-size: 13px;
  color: var(--text-secondary);
  font-weight: 500;
}
.ledger-params-form input,
.ledger-params-form textarea {
  padding: 7px 10px;
  border: 1px solid #D1D5DB;
  border-radius:8px;
  font-size: 13px;
  background: #FFFFFF;
  transition: border-color 0.15s, box-shadow 0.15s;
  font-family: inherit;
}
.ledger-params-form input:focus,
.ledger-params-form textarea:focus {
  outline: none;
  border-color: var(--brand);
  box-shadow: 0 0 0 3px rgba(30,58,95,0.1);
}
.ledger-params-form textarea {
  resize: vertical;
  min-height: 60px;
}

/* ---------- 历史台账 Tab：现有功能增强 ---------- */
/* 表头排序按钮 */
.lm-history-pane th[onclick^="toggleLedgerSort"] { cursor: pointer; user-select: none; }
.lm-history-pane th[onclick^="toggleLedgerSort"]:hover { background: #eef2f7; }
.lm-history-pane .sort-icons {
  display: inline-flex; flex-direction: column; margin-left: 3px; vertical-align: middle;
}
.lm-history-pane .sort-icons i { font-size: 10px; line-height: 1; margin: -2px 0; }
.lm-history-pane .sort-icons .sort-active { color: var(--brand); }
.lm-history-pane .sort-icons .sort-idle { color: #c0c6d0; }
.lm-history-pane .lm-tag-running {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 1px 7px;
  background: #FEF3C7;
  color: #92400E;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.15s;
  border: 1px solid #FDE68A;
}
.lm-history-pane .lm-tag-running:hover {
  background: #FDE68A;
  text-decoration: none;
  box-shadow: 0 1px 3px rgba(0,0,0,0.08);
}
.lm-history-pane .lm-tag-done {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 1px 7px;
  background: #DCFCE7;
  color: #15803D;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  border: 1px solid #86EFAC;
}

/* ---------- 列配置面板 ---------- */
.lcc-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.4);
  z-index: 9999;
  align-items: center;
  justify-content: center;
}
.lcc-panel {
  background: #FFFFFF;
  border-radius: 8px;
  width: 360px;
  max-height: 80vh;
  box-shadow: 0 8px 32px rgba(0,0,0,0.2);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.lcc-header {
  padding: var(--modal-pad-y) var(--modal-pad-x);
  border-bottom: 1px solid #E5E7EB;
  display: flex;
  justify-content: flex-end;
  align-items: center;
}
.lcc-header h3 {
  display: none;
  margin: 0;
  font-size: 16px;
  color: #2c4e70;
}
.lcc-close {
  cursor: pointer;
  color: var(--text-tertiary);
  border: none;
  background: none;
}
.lcc-body {
  flex: 1;
  overflow-y: auto;
  padding: var(--modal-pad-y) 0;
}
.lcc-item {
  display: flex;
  align-items: center;
  padding: 8px var(--modal-pad-x);
  cursor: grab;
  transition: background 0.15s;
  user-select: none;
}
.lcc-item:hover { background: #FCFDFD; }
.lcc-item.dragging {
  opacity: 0.5;
  background: #e8f0fe;
}
.lcc-drag {
  width: 16px;
  text-align: center;
  color: #E5E7EB;
  font-size: 14px;
  margin-right: 8px;
}
.lcc-drag.disabled { cursor: not-allowed; color: #E5E7EB; }
.lcc-checkbox {
  position: relative;
  display: inline-block;
  width: 18px;
  height: 18px;
  margin-right: 12px;
}
.lcc-checkbox input {
  position: absolute;
  opacity: 0;
  width: 100%;
  height: 100%;
  cursor: pointer;
}
.lcc-checkbox input:disabled { cursor: not-allowed; }
.lcc-checkmark {
  position: absolute;
  inset: 0;
  border: 2px solid #E5E7EB;
  border-radius: 8px;
  transition: all 0.15s;
}
.lcc-checkbox input:checked + .lcc-checkmark {
  background: #334155;
  border-color: #334155;
}
.lcc-checkbox input:checked + .lcc-checkmark::after {
  content: '';
  position: absolute;
  left: 5px;
  top: 1px;
  width: 6px;
  height: 11px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.lcc-label {
  flex: 1;
  font-size: 13px;
  color: #334155;
}
.lcc-tag-fixed {
  font-size: 11px;
  color: var(--text-muted);
  background: #F1F3F5;
  padding: 2px 6px;
  border-radius: 3px;
}
.lcc-footer {
  padding: var(--modal-pad-y) var(--modal-pad-x);
  border-top: 1px solid #E5E7EB;
  display: flex;
  gap: 10px;
  justify-content: flex-end;
}

/* ---------- 小屏优化 ---------- */
@media (max-width: 640px) {
  .lm-tab { font-size: 12px; padding: 8px 6px; }
  .lm-tab .tab-icon { display: none; }
  .lt-card { padding: 12px; }
  .lt-step { min-width: calc(50% - 6px); flex: 1 1 calc(50% - 6px); }
  .lt-flow::before { display: none; }
}

#editLedgerModal, #addLedgerModal, #consumableModal, #customerEditModal, #customerDetailModal, #orderShareModal{
  display:none;position:fixed;inset:0;background:rgba(0,0,0,0.4);z-index:9999;align-items:center;justify-content:center;
}
/* 客户详情：画像卡片 */
.cust-detail-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;gap:12px;}
.cust-stat-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:18px;
}
.cust-stat-item{
  background:var(--bg-subtle);border:1px solid var(--border);border-radius:8px;
  padding:12px 14px;text-align:center;
}
.cust-stat-val{font-size:18px;font-weight:700;color:var(--text-primary);line-height:1.3;word-break:break-all;}
.cust-stat-label{font-size:12px;color:var(--text-muted);margin-top:4px;}
.cust-stat-item.is-danger .cust-stat-val{color:var(--danger);}
.cust-stat-item.is-warn .cust-stat-val{color:#FBBF24;}
.cust-info-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:8px 20px;
  padding:14px 16px;margin-bottom:18px;
  background:var(--bg-zebra);border:1px solid var(--border);border-radius:8px;
}
.cust-info-row{display:flex;gap:10px;font-size:13px;line-height:1.7;min-width:0;}
.cust-info-label{color:var(--text-muted);flex:0 0 64px;}
.cust-info-val{color:var(--text-secondary);word-break:break-all;}
.cust-recent-head{font-size:13px;font-weight:600;color:var(--text-primary);margin-bottom:8px;}
/* 操作日志筛选区：筛选框可换行，按钮独占下一行右对齐 */
.audit-filter-row{display:flex;flex-wrap:wrap;gap:10px;}
.audit-filter-row .filter-item{flex:1 1 120px;min-width:110px;}
.audit-filter-actions{display:flex;justify-content:flex-end;gap:8px;margin:10px 0;}
@media (max-width:640px){
  .cust-stat-grid{grid-template-columns:repeat(2,1fr);}
  .cust-info-grid{grid-template-columns:1fr;}
}
#exportDocxBtn{
  background:var(--text-tertiary);
  color:#fff;
  border:none;
  padding:10px 28px;
  border-radius:8px;
  font-size:var(--font-size-2xl);
  margin:0 8px;
  cursor:pointer;
}
#exportDocxBtn:hover{
  background:var(--text-secondary);
}

/* ========= 纯分页简化版控件样式 ========= */
.ledger-pagination-wrap{
  margin-top: 6px;
  margin-bottom: 8px;
  padding: 8px 12px 6px 12px;
  background: #FCFDFD;
  border: 1px solid #E5E7EB;
  border-radius:8px;
  box-sizing: border-box;
}
.pagination-bar{
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: nowrap;
}
.pager-btn-group{
  display: inline-flex;
  flex-direction: row;
  align-items: center;
  gap: 8px;
}
.pager-btn{
  min-width: auto;
  white-space: nowrap;
  writing-mode: horizontal-tb !important;
  display: inline-flex;
  flex-direction: row !important;
  padding: 3px 10px !important;
  font-size: 12px !important;
  line-height: 1.2;
}
.pager-info{
  color: #334155;
  font-size: 12px;
  text-align: center;
  flex: 1;
  white-space: nowrap;
}
.pager-info b{
  color: #334155;
  font-weight: 600;
  margin: 0 2px;
  font-size: 14px;
}
.pagination-sub{
  margin-top: 10px;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}
.pager-hint{
  color: var(--text-tertiary);
  font-size: 12px;
  flex: 1;
  min-width: 200px;
}
.pager-jump{
  color: #334155;
  font-size: 13px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  white-space: nowrap;
}
.pager-input{
  width: 60px;
  padding: 8px 6px;
  border: 1px solid #E5E7EB;
  border-radius: 8px;
  font-size: 13px;
  text-align: center;
  outline: none;
  background: #FFFFFF;
  color: var(--text-primary);
}
.pager-input:focus{
  border-color: var(--brand);
  box-shadow: 0 0 0 3px rgba(30,58,95,0.10);
}
@media (max-width: 720px){
  .pagination-bar{ flex-wrap: wrap; }
  .pager-info{ order: 3; width:100%; margin-top: 6px; }
}

/* ========== 售后管理 AfterSale ========== */
#page-aftersale .page-body{
  padding:10px 14px;
  display:flex;flex-direction:column;gap:12px;
  min-height:0;flex:1;
  width:100%;
}
.as-pane{display:none;}
.as-pane.active{display:flex;}
#page-aftersale .card:nth-child(2){flex:1;display:flex;flex-direction:column;min-height:0;}
#page-aftersale .card:nth-child(2) .table-wrap{flex:1;min-height:0;}

/* 售后表格操作列：与全局表格按钮样式对齐 */
.data-table td[data-col="ops"]{text-align:center;}
.as-ops{display:inline-flex;align-items:center;justify-content:center;gap:4px;flex-wrap:nowrap;}
.as-wo-done{
  display:inline-flex;align-items:center;justify-content:center;
  padding:6px 10px;font-size:var(--font-size-sm);color:#94A3B8;
  background:#F1F3F5;border-radius:6px;line-height:1;white-space:nowrap;
}
.as-ops .as-btn{
  display:inline-flex;align-items:center;justify-content:center;
  padding:7px 11px;font-size:var(--font-size-md);border-radius:8px;cursor:pointer;
  border:none;background:transparent;transition:all .15s;line-height:1;
}
.as-btn-edit{color:var(--text-secondary);}
.as-btn-edit:hover{background:#F1F3F5;color:var(--text-primary);}
.as-btn-del{color:var(--text-secondary);}
.as-btn-del:hover{background:#F1F3F5;color:var(--text-primary);}

/* 分页按钮 */
.page-btn{
  background:transparent;border:1px solid #E5E7EB;color:var(--text-secondary);
  padding:8px 12px;font-size:var(--font-size-base);border-radius:8px;cursor:pointer;
  transition:all .15s;
}
.page-btn:hover:not(:disabled){background:#F1F3F5;color:var(--text-primary);}
.page-btn:disabled{opacity:.45;cursor:not-allowed;}

/* ========== 报价单生成工具 ========== */
/* 折叠面板（左表单分块） */
.quote-acc{border:1px solid #E5E7EB;border-radius:8px;padding:0 12px;margin-bottom:10px;background:#FFFFFF;}
.quote-acc > summary{list-style:none;cursor:pointer;padding:10px 2px;font-weight:600;color:var(--brand);font-size:var(--font-size-md);user-select:none;display:flex;align-items:center;gap:6px;}
.quote-acc > summary::-webkit-details-marker{display:none;}
.quote-acc > summary:before{content:"▸";transition:transform .15s;font-size:var(--font-size-base);color:var(--text-tertiary);}
.quote-acc[open] > summary:before{transform:rotate(90deg);}
.quote-acc > summary > .q-total-badge{margin-left:auto;font-size:var(--font-size-sm);background:#EEF2FF;color:#4F46E5;border-radius:8px;padding:2px 10px;font-weight:600;}
.quote-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;padding:6px 2px 18px 2px;}
.quote-field{display:flex;flex-direction:column;gap:4px;min-width:0;}
.quote-field label{font-size:var(--font-size-md);color:var(--text-primary);}
.quote-field input,.quote-field select,.quote-form-table input,.quote-form-table select{
  border:1px solid #D1D5DB;border-radius:8px;background:#FCFDFD;
  font-size:var(--font-size-md);color:var(--text-primary);
  outline:none;transition:border-color .15s;width:100%;box-sizing:border-box;}
.quote-field input,.quote-form-table input{padding:6px 9px;}
.quote-field select,.quote-form-table select{padding:6px 28px 6px 9px;}
/* 公司基础信息卡 label/input 与其他卡片同一系统默认样式（不再单独浅色/去粗） */
.quote-field input:focus,.quote-form-table input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(30,58,95,0.10);}
.q-mini-btn{padding:3px 9px;font-size:11.8px;border:1px solid #E5E7EB;border-radius:8px;background:transparent;color:var(--text-secondary);cursor:pointer;line-height:1.4;}
.q-mini-btn:hover{background:#F1F3F5;color:var(--text-primary);}
/* 明细表（表单区）：行高统一 0.77cm（与预览/Word 导出一致）*/
.quote-form-table{width:100%;border-collapse:collapse;font-size:12.8px;table-layout:auto;}
.quote-form-table thead tr,
.quote-form-table tbody tr{height:0.77cm;}
.quote-form-table th{background:#FCFDFD;color:#334155;font-weight:600;padding:0;text-align:center;border-bottom:1px solid #E5E7EB;border-right:1px solid #E5E7EB;white-space:nowrap;height:0.77cm;vertical-align:middle;}
.quote-form-table th:last-child,.quote-form-table td:last-child{border-right:none;}
.quote-form-table td{padding:0;border-bottom:1px solid #FCFDFD;border-right:1px solid #FCFDFD;vertical-align:middle;height:0.77cm;}
.quote-form-table input[type="number"],.quote-form-table input[type="text"]{padding:8px 7px;}
.quote-form-table .q-del-btn{border:none;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:var(--font-size-2xl);padding:3px 6px;border-radius:8px;}
.quote-form-table .q-del-btn:hover{background:#F1F3F5;}
.quote-form-table tfoot td{background:#FCFDFD;font-weight:600;color:var(--text-primary);padding:8px;border-top:2px solid #D1D5DB;border-bottom:none;}
.q-total-label{text-align:center;font-size:var(--font-size-2xl);letter-spacing:8px;color:var(--text-primary) !important;background:#EEF2FF !important;}
.q-total-num{text-align:right;font-size:var(--font-size-md);}
.q-terms{list-style:none;counter-reset:qterm;padding:0;margin:0;display:flex;flex-direction:column;gap:6px;}
.q-terms > li{counter-increment:qterm;display:flex;gap:6px;align-items:flex-start;padding:6px;border:1px solid #FCFDFD;border-radius:8px;background:#FFFFFF;}
.q-terms > li:before{content:counter(qterm)"、";flex:0 0 28px;font-weight:600;color:var(--text-primary);line-height:1.75;font-size:var(--font-size-md);text-align:right;}
.q-terms > li textarea{
  flex:1;min-height:42px;resize:vertical;
  padding:6px 9px;border:1px solid #D1D5DB;border-radius:8px;background:#FFFFFF;
  font-size:var(--font-size-md);color:var(--text-primary);line-height:150%;outline:none;
}
.q-terms > li textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(30,58,95,0.10);}
.q-terms-actions{display:flex;align-items:center;gap:8px;margin-top:8px;}
.q-terms-actions button{display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-md);}
.q-terms > li button{border:none;background:transparent;color:var(--text-muted);cursor:pointer;font-size:var(--font-size-md);padding:8px 6px;border-radius:8px;flex:0 0 auto;}
.q-terms > li button:hover{background:#FEF2F2;color:#EF4444;}

/* ============ A4 预览纸 —— 精确对齐锂膜报价单26-4-2.doc 解析值 ============
   精确格式（从 报价单模板_原版.mht 解析）：
   - @page Section0: 上54.5pt / 下54.55pt / 左右90pt
   - 公司名：16pt 宋体 bold 首行缩进112.45pt(7字符)
   - 标题：18pt 宋体 bold 报&nbsp;&nbsp;价&nbsp;&nbsp;单（字间两个空格）
   - 表格7列宽：14.9%/11.3%/29.6%/7.1%/7.0%/8.5%/12.7%（总和100%）
   - 表格线：0.5pt solid var(--text-primary)；数据行 border-top:none
   - 单元格 padding：上下0pt，左右5.4pt
   - 行距：全文 150%
   - 客户确认签章：12pt 宋体 bold；落款：&nbsp;前置缩进 56 字符 = 右对齐
   =========================================================== */
.quote-a4{
  position:relative;
  width:210mm;height:297mm;
  background:#FFFFFF;
  box-shadow:0 8px 22px rgba(15,23,42,0.12);
  /* 屏幕预览 padding：严格对齐原 DOC 模板 + 用户在 Word 页面设置里圈的 4 个 cm
     上 1.92cm = 54.5pt   /   下 1.92cm = 54.55pt   /   左 3.18cm = 90.1417pt   /   右 3.18cm = 90.1417pt
     (1cm = 72/2.54 ≈ 28.34646pt)
     真实打印 / Word 导出也同步这 4 个精确值，保证预览 ↔ PDF ↔ Word 三份 1:1 视觉一致。*/
  padding:54.5pt 90.1417pt 54.55pt 90.1417pt;
  box-sizing:border-box;
  transform-origin:top center;
  transform:scale(0.65);
  font-family:"SimSun","宋体","Songti SC",serif;
  color:var(--text-primary);
  line-height:150%;
  font-size:10.5pt;
}
.q-corner{position:absolute;width:10mm;height:10mm;border:1px solid #D1D5DB;pointer-events:none;}
.qc-tl{top:6mm;left:6mm;border-right:none;border-bottom:none;}
.qc-tr{top:6mm;right:6mm;border-left:none;border-bottom:none;}
.qc-bl{bottom:6mm;left:6mm;border-right:none;border-top:none;}
.qc-br{bottom:6mm;right:6mm;border-left:none;border-top:none;}
/* 公司头三行 —— 从原 doc 图 2 直接看出是居中，不再用 mso text-indent 缩进（在浏览器里缩进解读偏差大）*/
.q-head{margin-bottom:16pt;text-align:center;}
.q-head-company{
  font-size:16pt;font-family:"SimSun","宋体",serif;font-weight:700;
  color:var(--text-primary);
  margin:0 0 2pt 0;
  text-indent:0;
  text-align:center;
  line-height:150%;
}
.q-head-line1,.q-head-line2{
  font-size:10.5pt;font-family:"SimSun","宋体",serif;
  color:var(--text-primary);font-weight:400;line-height:150%;
  margin:0;
  padding:0;
  text-align:left; /* 公司头两行：左对齐（用户明确要求） */
}
/* 确保两行里所有子元素（包括 _fmtPreviewMixed 给数字 span 强制加的 font-weight:700）都被覆盖为 不加粗 normal */
.q-head-line1 *,.q-head-line2 *{ font-weight:400 !important; }
.q-head-line1{margin-bottom:1pt;}
/* 公司头两行改用 table nowrap 固定三列/两列布局，避免 &nbsp; 断点换行 */
table.q-head-line{
  border-collapse:collapse;border:none;
  width:100%;margin:0;padding:0;
  border-spacing:0;
}
/* 标题：报 价 单 18pt 宋体 bold 字间用 &nbsp; */
.q-title{
  text-align:center;
  font-size:18pt;font-family:"SimSun","宋体",serif;font-weight:700;
  line-height:150%;
  margin:0;
  letter-spacing:0;
}
/* 单号 / 日期 行已按用户要求整行删除，规则保留占位避免旧引用告警 */
.q-no-date{display:none;}
.q-no,.q-d{display:none;}
.q-customer{
  font-size:10.5pt;font-family:"SimSun","宋体",serif;font-weight:400;
  margin-bottom:8pt;line-height:150%;
}
.q-to{font-size:10.5pt;font-weight:700;margin-bottom:0;font-family:"SimSun","宋体",serif;color:var(--text-primary);padding-bottom:0;}
.q-c-row{font-size:10.5pt;font-weight:700;line-height:150%;font-family:"SimSun","宋体",serif;color:var(--text-primary);margin-bottom:0;padding-bottom:0;}
/* 预览表格（精确7列宽 + 0.5pt黑线 + 单元格左右5.4pt padding 上下0）*/
.q-preview-table{
  width:100%;max-width:100%;border-collapse:separate;border-spacing:0;
  border-top:0.5pt solid var(--text-primary);border-left:0.5pt solid var(--text-primary);
  font-family:"SimSun","宋体",serif;font-size:10.5pt;
  margin-bottom:10pt;table-layout:fixed !important;line-height:150%;
}
.q-preview-table th{
  border:0.5pt solid var(--text-primary);background:#FFFFFF;
  font-family:"SimSun","宋体",serif;font-weight:700;
  padding:0; /* 单元格边距=0（对应WPS表格属性→默认单元格边距 上下左右0cm） */
  text-align:center;vertical-align:middle;
  font-size:10.5pt;color:var(--text-primary);
  line-height:150%;
  height:22pt;
  white-space:normal;overflow:visible;text-overflow:clip;
}
.q-preview-table td{
  border:0.5pt solid var(--text-primary);
  padding:0; /* 单元格边距=0（对应WPS表格属性→默认单元格边距 上下左右0cm） */
  font-size:10.5pt;vertical-align:middle;
  word-break:break-all;line-height:150%;
  height:22pt;
  white-space:normal;overflow:visible;text-overflow:clip;
}
/* 数据行 border-top:none —— 与原模板一致：表头行有上边框，数据行无顶横，每条行之间只显示分隔（靠 td bottom border）*/
.q-preview-table tbody td{border-top:none;}
/* 汇总行 (tfoot) 顶边是标准的，不取消 */
.q-preview-table td.right{text-align:right;}
.q-preview-table td.center{text-align:center;}
.q-preview-table tfoot td{
  font-weight:700;font-family:"SimSun","宋体",serif;
  height:22pt;
}
.q-preview-table tfoot td:first-child,.q-preview-table .q-total-label{
  font-family:"SimSun","宋体",serif;font-weight:700;text-align:center !important;font-size:10.5pt;background:#FFFFFF;
}
/* 备注条款（10.5pt 宋体 bold，CSS counter 自动编号）*/
.q-remark{font-size:10.5pt;font-family:"SimSun","宋体",serif;margin-bottom:14pt;line-height:150%;}
.q-remark-title{font-weight:700;margin-bottom:4pt;font-size:10.5pt;line-height:150%;}
.q-remark ol{
  margin:0;padding:0;list-style:none;counter-reset:qterm;display:block;
}
.q-remark ol li{
  font-weight:700;
  counter-increment:qterm;
  line-height:150%;
  padding:0;margin:0 0 2pt 0;
}
.q-remark ol li::before{
  content:counter(qterm)"、";
  font-family:"Times New Roman",serif;font-weight:700;
}
/* 签章落款 */
.q-sign{position:relative;padding-top:40pt;line-height:150%;}
.q-sign-client{
  font-size:12pt;font-family:"SimSun","宋体",serif;font-weight:700;
  padding-bottom:40pt; /* 原模板客户签章下面有 2 行空白（约40pt） */
  line-height:150%;
}
.q-sign-company{
  position:absolute;right:21pt;bottom:0;
  font-family:"SimSun","宋体",serif;line-height:150%;
}
.q-sign-company .q-sign-cname{
  font-size:10.5pt;font-weight:700;text-align:right;line-height:150%;white-space:nowrap !important;min-width:180pt;
}
.q-sign-company .q-sign-date{
  margin-top:0;font-size:12pt;font-weight:700;text-align:right;line-height:150%;font-family:"Times New Roman",serif;
  /* 落款日期：整段 Times New Roman 小四（12pt）bold —— 用户明确要求 */
}
/* 旧 .q-num 规则保留，不影响日期新设置（新生成不再用 span.q-num）*/
.q-sign-company .q-sign-date .q-num{font-family:"Times New Roman",serif;}
/* 导出按钮颜色区分 */
.q-exp-btn{min-width:112px;}
.q-exp-btn.pdf{background:var(--brand);}
.q-exp-btn.pdf:hover{background:#172D4A;}

/* ======== 打印 PDF：精确 @page 边距（与原 doc Section0 一致） + 隐藏非预览元素 ======== */
@media print{
  html,body{margin:0 !important;padding:0 !important;background:#FFFFFF !important;width:100% !important;height:auto !important;}
  body > *:not(#quoteModal){display:none !important;}
  #quoteModal,#quoteModal .tool-modal-panel{
    display:block !important;visibility:visible !important;opacity:1 !important;
    position:static !important;inset:auto !important;width:100% !important;height:auto !important;max-width:none !important;max-height:none !important;
    background:#FFFFFF !important;border:none !important;box-shadow:none !important;padding:0 !important;margin:0 !important;overflow:visible !important;
  }
  #quoteModal .tool-modal-header,
  #quoteModal .tool-modal-footer,
  #quoteModal .quote-form-wrap,
  #quoteModal .quote-stage-topbar,
  .q-exp-iconbar{display:none !important;}
  /* quote-preview-wrap：下面只留 quote-stage → A4；其它子节点（舞台顶部说明等）全隐藏（但 quote-preview-wrap 自己要保留显示） */
  #quoteModal .quote-preview-wrap > *:not(.quote-stage){display:none !important;}
  #quoteModal .quote-preview-wrap{display:block !important;width:100% !important;height:auto !important;padding:0 !important;margin:0 !important;background:#FFFFFF !important;overflow:visible !important;}
  #quoteModal .quote-stage{display:block !important;padding:0 !important;overflow:visible !important;}
  #quoteModal .quote-a4-wrap{display:block !important;}
  #quoteModal .quote-a4{
    transform:none !important;
    width:210mm !important;height:auto !important;min-height:297mm !important;
    box-shadow:none !important;box-sizing:content-box !important;
    margin:0 auto !important;
    /* 打印时：@page 直接接管边距，去掉 A4 自己的 padding（防止跟 @page margin 叠加造成双倍边距）*/
    padding:0 !important;
  }
  @page{
    size:A4;
    /* 严格对齐原 DOC 精确值：上 54.5pt (1.92cm) / 下 54.55pt (1.92cm) / 左右 90.1417pt (3.18cm) */
    margin:54.5pt 90.1417pt 54.55pt 90.1417pt;
  }
}

/* ================== 报价单 → 导出面板（左 Word 预览 + 右格式选择） ================== */
.quote-export-modal-mask{
  position:absolute;inset:0;background:rgba(17,24,39,0.58);z-index:999998;
  display:flex;align-items:center;justify-content:center;
  backdrop-filter:blur(2px);
  -webkit-backdrop-filter:blur(2px);
  animation:qep-fadein .16s ease-out both;
  padding:24px 14px;
}
@keyframes qep-fadein{from{opacity:0;}to{opacity:1;}}
.quote-export-panel{
  background:#FFFFFF;border-radius:8px;
  box-shadow:0 20px 60px -10px rgba(15,23,42,.28),0 8px 28px -8px rgba(15,23,42,.12);
  overflow:hidden;display:flex;flex-direction:column;
  animation:qep-pop .22s cubic-bezier(.2,.9,.3,1.15) both;
}
.quote-export-panel.qep-panel-preview{
  width:min(1140px,98vw);
  max-height:calc(100vh - 48px);
}
@keyframes qep-pop{from{opacity:0;transform:translateY(18px) scale(.97);}to{opacity:1;transform:none;}}

/* 头部 */
.qep-header{
  padding:16px 22px;border-bottom:1px solid #FCFDFD;
  display:flex;align-items:flex-start;justify-content:space-between;gap:12px;
  background:linear-gradient(180deg,#FAFBFF 0%,#fff 100%);
  flex-shrink:0;
}
.qep-title{font-size:16.8px;font-weight:700;color:var(--text-primary);display:flex;align-items:center;gap:10px;}
.qep-title i{color:#4F46E5;font-size:var(--font-size-2xl);}
.qep-sub{font-size:12.8px;color:var(--text-tertiary);margin-top:8px;line-height:1.5;}
.qep-close{
  border:none;background:#FCFDFD;color:var(--text-tertiary);border-radius:8px;width:32px;height:32px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s;flex-shrink:0;
}
.qep-close:hover{background:#EEF2FF;color:#4F46E5;transform:translateY(-1px);}

/* 主体：左预览 + 右选项 */
.qep-body{
  display:flex;gap:0;
  flex:1;overflow:hidden;
  min-height:640px;
}
/* 左：预览区 */
.qep-preview-col{
  flex:1 1 62%;
  background:linear-gradient(180deg,#FCFDFD 0%,#E5E7EB 100%);
  border-right:1px solid #E5E7EB;
  display:flex;flex-direction:column;
  padding:18px 16px 10px;
  overflow:hidden;
}
.qep-preview-header{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-bottom:10px;flex-shrink:0;
}
.qep-preview-label{
  font-size:13.8px;font-weight:700;color:var(--text-primary);
  display:flex;align-items:center;gap:8px;padding:6px 12px;border-radius:8px;
  background:#FFFFFF;border:1px solid #E5E7EB;box-shadow:0 1px 2px rgba(15,23,42,.04);
}
.qep-preview-label i{color:#2B7A3E;}
.qep-preview-tip{font-size:11.5px;color:var(--text-tertiary);}
.qep-preview-stage{
  flex:1;overflow:auto;
  border-radius:8px;border:1.8px solid #D1D5DB;background:#FFFFFF;
  box-shadow:0 12px 26px -18px rgba(15,23,42,.22),inset 0 0 0 1px rgba(255,255,255,.6);
  padding:18px 12px;
  display:flex;justify-content:center;align-items:flex-start;
  min-height:0;
}
/* 进入预览区的 A4 包装：缩放适配预览舞台宽度（舞台≈700px → scale≈0.54 左右可完整显示 A4 竖版 ≈798px 高）*/
.qep-preview-stage > #quoteA4Wrap{
  transform-origin: top center;
  /* 实际 scale 值由 JS 根据舞台宽度实时算，保证不横向滚动 */
  width:210mm;
  height:297mm;
  justify-content:center;align-items:flex-start;
  display:flex;flex-shrink:0;
}
/* 预览纸：边角标记显示（原来 preview 有），稍微加深阴影在预览框里看起来像纸 */
.qep-preview-stage .quote-a4{
  box-shadow:0 20px 40px -18px rgba(15,23,42,.35),0 2px 8px rgba(15,23,42,.06)!important;
}
.qep-preview-footer{
  margin-top:10px;flex-shrink:0;
  font-size:11.8px;color:var(--text-tertiary);background:rgba(255,255,255,.75);border:1px solid #E5E7EB;
  padding:8px 11px;border-radius:8px;line-height:1.65;
  display:flex;align-items:flex-start;gap:7px;
}
.qep-preview-footer i{color:#F59E0B;margin-top:3px;}

/* 右：格式选项列 */
.qep-options-col{
  flex:1 1 38%;
  display:flex;flex-direction:column;
  padding:18px 18px 16px;
  min-width:0;
}
.qep-options-title{
  font-size:14.8px;font-weight:700;color:var(--text-primary);margin-bottom:13px;
  display:flex;align-items:center;gap:8px;
  padding-bottom:11px;border-bottom:1.8px dashed #E5E7EB;
}
.qep-options-title i{color:#4F46E5;}
.qep-grid-single{
  display:flex;flex-direction:column;gap:12px;
  overflow-y:auto;padding-right:2px;
  flex:1;min-height:0;
}
/* 卡片：新布局——横排 左图标 / 右文字说明 */
.q-export-card{
  border:2px solid #E5E7EB;border-radius:8px;padding:13px 18px 13px 13px;
  cursor:pointer;position:relative;transition:all .2s;background:#FFFFFF;
  user-select:none;overflow:hidden;
}
.q-export-card .qec-row{display:flex;gap:12px;}
.q-export-card:hover{
  transform:translateY(-2px);
  box-shadow:0 10px 22px -8px rgba(15,23,42,.14),0 3px 7px -8px rgba(15,23,42,.08);
}
.q-export-card.q-ep-pdf:hover{border-color:#6366F1;background:linear-gradient(180deg,#fff,#EEF2FF 100%);}
.q-export-card.q-ep-word:hover{border-color:#10B981;background:linear-gradient(180deg,#fff,#ECFDF5 100%);}
.q-export-card.q-ep-jpg:hover{border-color:#F59E0B;background:linear-gradient(180deg,#fff,#FFF7ED 100%);}

/* 选中态（点中 → 立即高亮） */
.q-export-card.is-active{
  transform:translateY(-2px);
  box-shadow:0 12px 26px -8px rgba(15,23,42,.18),0 3px 7px -8px rgba(15,23,42,.09);
  border-width:2.2px;
}
.q-export-card.q-ep-pdf.is-active {border-color:#4F46E5;background:linear-gradient(180deg,#fff 0%,#EEF2FF 100%);}
.q-export-card.q-ep-word.is-active{border-color:#2B7A3E;background:linear-gradient(180deg,#fff 0%,#D1FAE5 100%);}
.q-export-card.q-ep-jpg.is-active {border-color:#B45309;background:linear-gradient(180deg,#fff 0%,#FFEDD5 100%);}
.q-export-card .qec-check{
  position:absolute;top:10px;right:10px;
  width:22px;height:22px;border-radius:50%;
  background:#FFFFFF;border:1.8px solid #D1D5DB;
  color:#D1D5DB;font-size:var(--font-size-sm);
  display:flex;align-items:center;justify-content:center;
  transition:all .18s;
}
.q-export-card.is-active .qec-check{
  color:#fff;border-color:transparent;
}
.q-export-card.q-ep-pdf.is-active  .qec-check{background:#4F46E5;}
.q-export-card.q-ep-word.is-active .qec-check{background:#2B7A3E;}
.q-export-card.q-ep-jpg.is-active  .qec-check{background:#B45309;}

/* 卡片图标 */
.qec-icon{
  width:48px;height:48px;border-radius:8px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;font-size:20px;color:#fff;
  box-shadow:0 8px 11px -3px rgba(15,23,42,.2);
}
.q-ep-pdf  .qec-icon{background:linear-gradient(135deg,#6366F1 0%,#4F46E5 100%);}
.q-ep-word .qec-icon{background:linear-gradient(135deg,#10B981 0%,#2B7A3E 100%);}
.q-ep-jpg  .qec-icon{background:linear-gradient(135deg,#F59E0B 0%,#B45309 100%);}
.qec-name{font-size:14.8px;font-weight:700;color:var(--text-primary);margin-bottom:8px;}
.qec-desc{font-size:var(--font-size-base);color:var(--text-secondary);line-height:1.65;}
.qec-tag{
  width:100%;font-size:var(--font-size-sm);padding:6px 10px;border-radius:8px;
  color:var(--text-secondary);background:#FCFDFD;border:1px dashed #D1D5DB;
  display:flex;align-items:center;gap:7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.q-ep-pdf.is-active  .qec-tag,.q-ep-pdf:hover  .qec-tag{background:#EEF2FF;color:#4F46E5;border-color:#C7D2FE;}
.q-ep-word.is-active .qec-tag,.q-ep-word:hover .qec-tag{background:#ECFDF5;color:#065F46;border-color:#6EE7B7;}
.q-ep-jpg.is-active  .qec-tag,.q-ep-jpg:hover  .qec-tag{background:#FFF7ED;color:#92400E;border-color:#FCD34D;}

/* 底部取消按钮 */
.qep-options-footer{
  margin-top:18px;padding-top:13px;
  border-top:1.8px dashed #E5E7EB;
  flex-shrink:0;
}

/* 响应式：≤1000px 面板改上下堆叠（预览在上 / 选项在下） */
@media (max-width:1000px){
  .qep-body{flex-direction:column;min-height:0;}
  .qep-preview-col{flex:0 0 auto;max-height:52vh;border-right:none;border-bottom:1px solid #E5E7EB;}
  .qep-options-col{flex:0 0 auto;max-height:none;}
  .qep-options-footer .btn-secondary{width:100%;}
}
@media (max-width:520px){
  .quote-export-modal-mask{padding:10px 6px;}
  .qep-header{padding:13px 18px;}
  .qep-preview-col{padding:12px;}
  .qep-options-col{padding:18px;}
  .qep-preview-header{flex-direction:column;align-items:flex-start;gap:8px;}
}

/* ===== style block split ===== */

.lt-memo-card {
  padding: 10px 0;
  border-bottom: 1px solid #FCFDFD;
  position: relative;
}
.lt-memo-card:last-child {
  border-bottom: none;
}
.lt-memo-card.mine {
  padding-left: 10px;
}
.lt-memo-card.mine::before {
  content: '';
  position: absolute;
  left: 0;
  top: 10px;
  bottom: 10px;
  width: 3px;
  background: var(--brand);
  border-radius: 2px;
}
.lt-memo-card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 6px;
}
.lt-memo-card-user {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 600;
  color: #334155;
}
.lt-memo-card-user .mine-tag {
  font-size: 10px;
  padding: 1px 8px;
  background: var(--brand);
  color: #fff;
  border-radius: 3px;
  font-weight: 500;
}
.lt-memo-card-time {
  font-size: 11px;
  color: var(--text-muted);
}
.lt-memo-card-actions {
  display: flex;
  gap: 6px;
  margin-top: 6px;
}
.lt-memo-card-actions button {
  font-size: 11px;
  padding: 2px 8px;
  border-radius: 3px;
  cursor: pointer;
  border: none;
  transition: all 0.15s;
}
.lt-memo-edit-btn {
  background: #FCFDFD;
  color: var(--text-secondary);
}
.lt-memo-edit-btn:hover { background: #F1F3F5; }
.lt-memo-del-btn {
  background: #FCFDFD;
  color: #DC2626;
}
.lt-memo-del-btn:hover { background: #FEE2E2; }
.lt-memo-card-content {
  font-size: 13px;
  color: #334155;
  white-space: pre-wrap;
  word-break: break-word;
  line-height: 1.5;
}
.lt-memo-card-content.editing {
  display: none;
}
.lt-memo-edit-area {
  display: none;
}
.lt-memo-edit-area.active {
  display: block;
}
.lt-memo-edit-area textarea {
  width: 100%;
  box-sizing: border-box;
  padding: 6px 8px;
  border: 1px solid #E5E7EB;
  border-radius: 8px;
  font-size: 13px;
  resize: vertical;
  font-family: inherit;
}
.lt-memo-edit-actions {
  display: flex;
  justify-content: flex-end;
  gap: 6px;
  margin-top: 6px;
}
.lt-memo-edit-actions button {
  font-size: 11px;
  padding: 2px 8px;
  border-radius: 3px;
  cursor: pointer;
  border: none;
}
.lt-memo-empty {
  text-align: center;
  color: var(--text-muted);
  font-size: 13px;
  padding: 30px 0;
}

/* ============ 隽运助手 聊天机器人 ============ */
/* 顶栏机器人图标动效 */
.chatbot-top-btn{
  position:relative;
  overflow:visible;
  background:transparent !important;
  width:36px !important;height:36px !important;
}
.chatbot-top-btn:hover{
  background:transparent !important;
}
/* 整体轻微浮动 */
.chatbot-top-btn .chatbot-icon-svg{
  animation:chatbotFloat 3s ease-in-out infinite;
  transform-origin:center bottom;
}
@keyframes chatbotFloat{
  0%,100%{transform:translateY(0);}
  50%{transform:translateY(-1.8px);}
}
/* 天线光点（静态常亮，不做呼吸） */
/* 眼睛眨眼 */
.chatbot-eye{
  transform-origin:center;
  animation:chatbotBlink 4s ease-in-out infinite;
}
.chatbot-eye-r{animation-delay:0.05s;}
@keyframes chatbotBlink{
  0%,92%,100%{transform:scaleY(1);}
  94%,98%{transform:scaleY(0.1);}
}
/* hover 时增强反馈 */
.chatbot-top-btn:hover .chatbot-icon-svg{
  animation:chatbotBounce 0.5s ease;
}
@keyframes chatbotBounce{
  0%{transform:translateY(0) rotate(0);}
  30%{transform:translateY(-3px) rotate(-6deg);}
  60%{transform:translateY(-1px) rotate(5deg);}
  100%{transform:translateY(0) rotate(0);}
}

.chatbot-panel{
  position:fixed;right:20px;bottom:20px;width:380px;height:560px;max-height:calc(100vh - 40px);
  background:#fff;border-radius:8px;box-shadow:0 12px 40px rgba(30,58,95,0.18);
  display:flex;flex-direction:column;z-index:9998;overflow:hidden;
  transform:translateY(20px) scale(0.96);opacity:0;visibility:hidden;
  transition:transform 0.28s cubic-bezier(.4,0,.2,1),opacity 0.28s,visibility 0.28s;
}
.chatbot-panel.open{
  transform:translateY(0) scale(1);opacity:1;visibility:visible;
}
.chatbot-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:12px 16px;background:linear-gradient(135deg,var(--brand),#1D4ED8);color:#fff;
  flex-shrink:0;
}
.chatbot-header-left{display:flex;align-items:center;gap:10px;}
.chatbot-avatar{
  width:32px;height:32px;border-radius:50%;background:transparent;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
  overflow:visible;
}
/* 对话框机器人头像：左右摇头倾听动效（区别于顶栏的上下浮动） */
.chatbot-avatar svg{
  animation:chatbotSway 3s ease-in-out infinite;
  transform-origin:center bottom;
  width:28px;height:28px;
}
@keyframes chatbotSway{
  0%,100%{transform:rotate(-4deg);}
  50%{transform:rotate(4deg);}
}
.chatbot-title-wrap{display:flex;flex-direction:column;line-height:1.2;}
.chatbot-title{font-size:var(--font-size-lg);font-weight:600;}
.chatbot-status{font-size:var(--font-size-sm);opacity:0.8;display:flex;align-items:center;gap:8px;margin-top:2px;}
.chatbot-status-dot{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 6px #4ade80;}
.chatbot-close{
  width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:background 0.2s;background:rgba(255,255,255,0.1);
}
.chatbot-close:hover{background:rgba(255,255,255,0.22);}
/* 最小化按钮 */
.chatbot-min{
  width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:background 0.2s;background:rgba(255,255,255,0.1);color:#fff;
}
.chatbot-min:hover{background:rgba(255,255,255,0.22);}
/* 新窗口打开按钮 */
.chatbot-popout{
  width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:background 0.2s;background:rgba(255,255,255,0.1);color:#fff;
}
.chatbot-popout:hover{background:rgba(255,255,255,0.22);}
/* 最小化后的恢复按钮 —— 机器人探出脑袋（无背景，仅图标） */
.chatbot-restore{
  position:fixed;right:0;top:50%;transform:translateY(-50%);
  width:58px;height:66px;
  display:none;align-items:center;justify-content:center;cursor:pointer;
  z-index:9997;transition:transform 0.3s ease;
  overflow:visible;
}
.chatbot-restore.is-dragging{cursor:grabbing;user-select:none;}
.chatbot-restore.show{display:flex;}
.chatbot-restore:hover{
  transform:translateX(-8px) !important;
}
.chatbot-restore-inner{
  display:flex;align-items:center;justify-content:center;
  animation:chatbotPeek 2.5s ease-in-out infinite;
}
@keyframes chatbotPeek{
  0%,100%{transform:translateX(3px);}
  50%{transform:translateX(0);}
}
/* 眨眼动画 */
.chatbot-blink{
  transform-origin:center;
  animation:chatbotBlinkEye 2s ease-in-out infinite;
}
@keyframes chatbotBlinkEye{
  0%,90%,100%{transform:scaleY(1);}
  95%{transform:scaleY(0.1);}
}
/* 最小化状态下面板隐藏 */
.chatbot-panel.minimized{display:none !important;}
/* 拖拽时的鼠标样式 */
.chatbot-header{cursor:move;user-select:none;}
.chatbot-header .chatbot-close{cursor:pointer;}
.chatbot-header .chatbot-popout{cursor:pointer;}
/* 右下角拖拽调整大小手柄 */
.chatbot-resize-handle{
  position:absolute;right:0;bottom:0;width:16px;height:16px;
  cursor:nwse-resize;z-index:10;
  background:linear-gradient(135deg,transparent 50%,rgba(0,0,0,.25) 50%);
}
.chatbot-panel.resizing .chatbot-resize-handle{
  background:linear-gradient(135deg,transparent 50%,rgba(0,0,0,.45) 50%);
}
.chatbot-panel{min-width:320px;min-height:400px;}

.chatbot-body{
  flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;
  background:#FCFDFD;
}
.chatbot-body::-webkit-scrollbar{width:6px;}
.chatbot-body::-webkit-scrollbar-thumb{background:#CBD5E1;border-radius:3px;}
.chatbot-body::-webkit-scrollbar-track{background:transparent;}

.chatbot-msg{display:flex;gap:4px;max-width:85%;animation:chatbotFade 0.3s ease;}
@keyframes chatbotFade{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}
.chatbot-msg.bot{align-self:flex-start;}
.chatbot-msg.user{align-self:flex-end;flex-direction:row-reverse;}
.chatbot-msg-avatar{
  width:30px;height:30px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;
  font-size:var(--font-size-2xl);
}
.chatbot-msg.bot .chatbot-msg-avatar{background:transparent;color:var(--text-secondary);}
/* 消息气泡机器人头像：轻微缩放呼吸动效 */
.chatbot-msg.bot .chatbot-msg-avatar svg{
  animation:chatbotPulse 2.5s ease-in-out infinite;
  transform-origin:center;
  width:22px;height:22px;
}
@keyframes chatbotPulse{
  0%,100%{transform:scale(1);}
  50%{transform:scale(1.12);}
}
.chatbot-msg.user .chatbot-msg-avatar{background:#F1F3F5;color:var(--text-secondary);}
.chatbot-msg-bubble{
  padding:10px 18px;border-radius:8px;font-size:var(--font-size-md);line-height:1.6;word-break:break-word;
}
.chatbot-msg.bot .chatbot-msg-bubble{background:#fff;color:var(--text-primary);border:1px solid #E5E7EB;border-top-left-radius:8px;}
.chatbot-msg.user .chatbot-msg-bubble{background:linear-gradient(135deg,var(--brand),#1D4ED8);color:#fff;border-top-right-radius:8px;}
.chatbot-typing{display:flex;gap:8px;padding:8px 0;}
.chatbot-typing span{
  width:7px;height:7px;border-radius:50%;background:var(--text-muted);animation:chatbotBlink 1.4s infinite;
}
.chatbot-typing span:nth-child(2){animation-delay:0.2s;}
.chatbot-typing span:nth-child(3){animation-delay:0.4s;}
@keyframes chatbotBlink{0%,60%,100%{opacity:0.3;transform:scale(0.8);}30%{opacity:1;transform:scale(1);}}

.chatbot-input-area{
  display:flex;align-items:flex-end;gap:8px;padding:12px;border-top:1px solid #E5E7EB;background:#fff;flex-shrink:0;
}
.chatbot-input{
  flex:1;min-height:40px;max-height:100px;padding:9px 12px;border:1px solid #E5E7EB;border-radius:8px;
  font-size:var(--font-size-md);line-height:1.5;resize:none;outline:none;background:#FCFDFD;color:var(--text-primary);
  font-family:inherit;transition:border-color 0.2s;
}
.chatbot-input:focus{border-color:#1D4ED8;background:#fff;}
.chatbot-send{
  width:38px;height:38px;border-radius:10px;border:none;cursor:pointer;flex-shrink:0;
  background:linear-gradient(135deg,var(--brand),#1D4ED8);color:#fff;display:flex;align-items:center;justify-content:center;
  transition:opacity 0.2s,transform 0.15s;
}
.chatbot-send i{font-size:var(--font-size-xl);line-height:1;}
.chatbot-send:hover{opacity:0.9;}
.chatbot-send:active{transform:scale(0.94);}
.chatbot-send:disabled{opacity:0.4;cursor:not-allowed;}
.chatbot-quick{
  display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 10px;background:#FCFDFD;flex-shrink:0;
}
.chatbot-quick-btn{
  padding:6px 12px;font-size:var(--font-size-base);border:1px solid #E5E7EB;border-radius:8px;background:transparent;
  color:var(--text-secondary);cursor:pointer;transition:all 0.2s;
}
.chatbot-quick-btn:hover{background:#F1F3F5;color:var(--text-primary);}


/* ===== 订单进度分享弹窗 ===== */
.share-tip{display:flex;gap:8px;align-items:flex-start;background:var(--bg-subtle);border-radius:8px;padding:10px 12px;font-size:12px;color:var(--text-secondary);line-height:1.6;}
.share-tip i{color:var(--brand);margin-top:2px;}
.share-tip b{color:var(--text-primary);font-weight:600;}
.share-link-row{display:flex;gap:8px;margin:14px 0;}
.share-link-row input{flex:1;min-width:0;height:34px;padding:0 10px;border:1px solid var(--border);border-radius:8px;font-size:12px;color:var(--text-secondary);background:var(--bg-field);outline:none;}
.share-link-row .btn-primary{flex:0 0 auto;height:34px;padding:0 14px;}
.share-qr-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0 2px;}
.share-qr-wrap #orderShareQr{padding:8px;background:#fff;border-radius:8px;border:1px solid var(--border);}
.share-qr-wrap #orderShareQr img,#orderShareQr canvas{display:block;}
.share-qr-hint{font-size:12px;color:var(--text-muted);}
.share-foot{display:flex;justify-content:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--border);}
.share-revoked{display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 10px;color:var(--text-secondary);}
.share-revoked > i{font-size:34px;color:var(--danger);}
.share-revoked > div{font-size:14px;font-weight:600;}

/* ===== 台账回收站弹窗 ===== */
.lt-trash-panel{width:880px;max-width:94vw;}
.lt-trash-bar{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);flex-wrap:wrap;}
.lt-trash-input{flex:0 1 240px;min-width:160px;padding:6px 10px;border:1px solid var(--border-strong);border-radius:6px;font-size:13px;background:transparent;color:inherit;}
.lt-trash-bar .lt-trash-tip{font-size:12px;color:var(--text-tertiary);}
.lt-trash-pager{display:flex;align-items:center;justify-content:center;gap:14px;padding:10px 16px;border-top:1px solid var(--border);font-size:13px;color:var(--text-secondary);}
.lt-trash-pager button:disabled{opacity:.45;cursor:not-allowed;}
.lt-trash-days{color:#16a34a;font-size:12px;white-space:nowrap;}
.lt-trash-days-warn{color:#ef4444;font-weight:600;}

/* ============================================================
   生产驾驶舱（大屏模式）：独立深色视觉，不受系统主题影响
   ============================================================ */
/* 看板内"大屏"入口按钮 */
.screen-entry-btn{
  padding:0 12px;border-radius:8px;
  border:1px solid #CBD8E8;background:#fff;color:var(--brand);
  font-size:11px;font-weight:600;letter-spacing:.5px;
  display:inline-flex;align-items:center;gap:5px;
  transition:all .18s var(--ease-out);
}
.screen-entry-btn:hover{
  background:var(--brand);border-color:var(--brand);color:#fff;
  box-shadow:0 4px 12px -2px rgba(15,104,216,0.45);transform:translateY(-1px);
}
.screen-entry-btn:active{transform:translateY(0) scale(.97);}

.screen-overlay{
  position:fixed;inset:0;z-index:99998;display:none;
  flex-direction:column;
  padding:2.2vh 2vw 2vh;gap:1.8vh;
  color:#E7EEF9;overflow:hidden;
  background:
    radial-gradient(1200px 700px at 0% -10%, rgba(47,123,255,0.16) 0%, transparent 55%),
    radial-gradient(1000px 640px at 105% 115%, rgba(47,123,255,0.12) 0%, transparent 55%),
    linear-gradient(160deg,#0C111D 0%,#0E1626 55%,#0B1220 100%);
  font-family:var(--font-family);
}
.screen-overlay::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:
    linear-gradient(rgba(148,180,230,0.035) 1px,transparent 1px),
    linear-gradient(90deg,rgba(148,180,230,0.035) 1px,transparent 1px);
  background-size:44px 44px;
  mask-image:radial-gradient(ellipse 90% 90% at center,#000 30%,transparent 100%);
  -webkit-mask-image:radial-gradient(ellipse 90% 90% at center,#000 30%,transparent 100%);
}
.screen-glow{position:absolute;border-radius:50%;filter:blur(90px);pointer-events:none;opacity:.5;}
.screen-glow-a{width:34vw;height:34vw;left:-14vw;top:-16vw;background:radial-gradient(circle,rgba(47,123,255,0.30),transparent 65%);animation:scFloat 16s ease-in-out infinite alternate;}
.screen-glow-b{width:30vw;height:30vw;right:-12vw;bottom:-16vw;background:radial-gradient(circle,rgba(47,123,255,0.22),transparent 65%);animation:scFloat 20s ease-in-out infinite alternate-reverse;}
@keyframes scFloat{from{transform:translate(0,0);}to{transform:translate(3vw,2.4vh);}}

/* 顶栏 */
.screen-head{
  position:relative;z-index:2;
  display:flex;align-items:center;justify-content:space-between;
  padding-bottom:1.6vh;
  border-bottom:1px solid rgba(120,155,210,0.18);
}
.screen-brand{display:flex;align-items:center;gap:1.1vw;}
.screen-brand img{height:clamp(30px,4.4vh,52px);width:auto;}
.screen-brand-text h1{
  margin:0;font-size:clamp(18px,2.7vh,34px);font-weight:700;letter-spacing:3px;
  background:linear-gradient(90deg,#FFFFFF,#9FC4FF);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
}
.screen-brand-text span{display:block;font-size:clamp(9px,1.1vh,13px);letter-spacing:3px;color:rgba(159,196,255,0.55);margin-top:2px;}
.screen-clock{display:flex;align-items:baseline;gap:1.2vw;}
.screen-clock span{font-size:clamp(12px,1.7vh,18px);color:rgba(180,201,232,0.75);letter-spacing:1px;}
.screen-clock strong{
  font-size:clamp(20px,3.2vh,38px);font-weight:700;color:#9FC4FF;
  font-variant-numeric:tabular-nums;letter-spacing:2px;
}
.screen-exit{
  width:clamp(32px,4.4vh,48px);height:clamp(32px,4.4vh,48px);padding:0;
  border-radius:50%;border:1px solid rgba(159,196,255,0.35);
  background:rgba(47,123,255,0.10);color:#9FC4FF;font-size:clamp(13px,1.8vh,18px);
  cursor:pointer;transition:all .18s ease;flex:none;
}
.screen-exit:hover{background:rgba(47,123,255,0.30);color:#fff;transform:rotate(90deg);}

/* KPI 行 */
.screen-kpis{
  position:relative;z-index:2;
  display:grid;grid-template-columns:repeat(5,1fr);gap:1vw;
}
.sc-kpi{
  position:relative;overflow:hidden;
  padding:1.7vh 1.2vw 1.5vh;
  border-radius:12px;
  background:linear-gradient(160deg,rgba(47,123,255,0.13),rgba(255,255,255,0.03));
  border:1px solid rgba(120,155,210,0.20);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.06);
}
.sc-kpi::before{
  content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,#2F7BFF,rgba(47,123,255,0.15));
}
.sc-kpi-warn::before{background:linear-gradient(90deg,#FBBF24,rgba(251,191,36,0.15));}
.sc-kpi-label{
  font-size:clamp(11px,1.5vh,16px);color:rgba(180,201,232,0.78);
  letter-spacing:1px;display:flex;align-items:center;gap:.5vw;margin-bottom:1vh;
}
.sc-kpi-label i{color:#5E9BFF;}
.sc-kpi-warn .sc-kpi-label i{color:#FBBF24;}
.sc-kpi-value{
  font-size:clamp(26px,4.4vh,54px);font-weight:700;color:#FFFFFF;line-height:1.05;
  font-variant-numeric:tabular-nums;letter-spacing:-0.5px;
  text-shadow:0 0 24px rgba(94,155,255,0.35);
}
.sc-kpi-warn .sc-kpi-value{text-shadow:0 0 24px rgba(251,191,36,0.35);}
.sc-kpi-unit{font-size:clamp(12px,1.7vh,20px);color:rgba(180,201,232,0.65);font-weight:500;margin-left:.4vw;}

/* 图表区 */
.screen-charts{
  position:relative;z-index:2;
  flex:1.25 1 auto;min-height:0;
  display:grid;grid-template-columns:1.55fr 1fr;gap:1vw;
}
.sc-chart-box{
  display:flex;flex-direction:column;min-height:0;
  border-radius:12px;padding:1.4vh 1vw .6vh;
  background:rgba(16,24,40,0.55);
  border:1px solid rgba(120,155,210,0.18);
  backdrop-filter:blur(4px);
}
.sc-chart-box h4{
  margin:0 0 .8vh;font-size:clamp(12px,1.7vh,18px);font-weight:600;
  color:#C9DCF7;letter-spacing:1px;
  display:flex;align-items:center;gap:.5vw;
}
.sc-chart-box h4 i{color:#5E9BFF;}
.sc-chart-box h4 span{margin-left:auto;font-size:clamp(10px,1.25vh,13px);font-weight:400;color:rgba(180,201,232,0.5);letter-spacing:.5px;}
.sc-chart{flex:1;min-height:0;width:100%;}

/* 最近订单 */
.sc-orders-box{
  position:relative;z-index:2;
  flex:1 1 auto;min-height:0;display:flex;flex-direction:column;
  border-radius:12px;padding:1.4vh 1vw 1vh;
  background:rgba(16,24,40,0.55);
  border:1px solid rgba(120,155,210,0.18);
}
.sc-orders-box h4{
  margin:0 0 1vh;font-size:clamp(12px,1.7vh,18px);font-weight:600;
  color:#C9DCF7;letter-spacing:1px;display:flex;align-items:center;gap:.5vw;
}
.sc-orders-box h4 i{color:#5E9BFF;}
.sc-orders-box h4 span{margin-left:auto;font-size:clamp(10px,1.25vh,13px);font-weight:400;color:rgba(180,201,232,0.5);}
.sc-orders-viewport{flex:1;min-height:0;overflow:hidden;position:relative;}
.sc-orders-viewport::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:3.6vh;pointer-events:none;
  background:linear-gradient(transparent,rgba(12,17,29,0.9));
}
.sc-orders-track{display:flex;flex-direction:column;will-change:transform;}
.sc-order-row{
  display:grid;grid-template-columns:1.1fr 1.2fr .8fr .7fr .8fr .8fr;align-items:center;gap:.8vw;
  padding:0 1vw;min-height:var(--sc-row-h,4.6vh);
  font-size:clamp(11px,1.55vh,16px);color:#D5E2F5;
  border-bottom:1px solid rgba(120,155,210,0.10);
  font-variant-numeric:tabular-nums;
}
.sc-order-row.sc-order-head{
  min-height:3.6vh;color:rgba(159,196,255,0.7);font-size:clamp(10px,1.3vh,13px);
  letter-spacing:1px;border-bottom:1px solid rgba(120,155,210,0.25);
}
.sc-order-row .sc-o-price{text-align:right;color:#9FC4FF;font-weight:600;}
.sc-order-row .sc-o-status{justify-self:start;}
.sc-status{
  display:inline-flex;align-items:center;padding:.3vh .7vw;border-radius:99px;
  font-size:clamp(10px,1.3vh,13px);font-weight:600;letter-spacing:.5px;white-space:nowrap;
}
.sc-status.shipped{color:#7EE7B0;background:rgba(34,197,94,0.14);border:1px solid rgba(34,197,94,0.35);}
.sc-status.boss{color:#FFD08A;background:rgba(245,158,11,0.14);border:1px solid rgba(245,158,11,0.35);}
.sc-status.workshop{color:#9FC4FF;background:rgba(47,123,255,0.16);border:1px solid rgba(47,123,255,0.40);}
.sc-status.default{color:#C2CCDB;background:rgba(148,163,184,0.14);border:1px solid rgba(148,163,184,0.32);}
.sc-orders-empty{padding:3vh 0;text-align:center;color:rgba(180,201,232,0.5);font-size:clamp(12px,1.7vh,17px);}

/* 竖屏 / 超窄窗口兜底：图表改上下堆叠 */
@media (max-aspect-ratio: 4/3){
  .screen-charts{grid-template-columns:1fr;grid-template-rows:1fr 1fr;}
}
@media (prefers-reduced-motion: reduce){
  .screen-glow-a,.screen-glow-b{animation:none;}
}

/* ============================================================
   📱 移动端适配（2026-10 一轮）
   断点：≤768px 手机主断点 / ≤480px 小屏微调
   原则：纯增强，桌面零影响；颜色一律走变量；动画尊重 reduced-motion
   1) 安全区 + dvh  2) 侧栏全站抽屉  3) 弹窗底部 Sheet
   4) 表格除工单外统一横滑兜底  5) 触控热区 ≥40px
   ============================================================ */

/* ===== 手机端筛选折叠条（桌面端完全不显示，.mf 两个类在宽屏无任何效果） ===== */
.mf-toggle{display:none;}
.mf-body{display:block;}
/* 顶栏当前页标题：仅手机端显示（原生导航栏形态），桌面端保持 logo */
.topbar-page-title{display:none;}
/* 手机端 FAB / 溢出动作菜单 / ••• 钮 / 面板内清空钮：桌面端全部隐藏 */
.mobile-fab,.mobile-sheet-mask,.mobile-sheet,.mf-more,.mf-clear-only{display:none;}

@media (max-width:768px){
  /* ===== 手机端统一视觉尺度（参考 GitHub Mobile：8px 间距网格 / 两档触控高 / 克制圆角）=====
     以下 token 仅手机端生效，桌面变量不受影响；本段所有组件只允许从这里取值，禁止再写散落的 36/42/46 等高度 */
  :root{
    --safe-top:env(safe-area-inset-top,0px);
    --m-touch:44px;        /* 标准触控高：主按钮/输入框/下拉/搜索/表单行 */
    --m-touch-sm:40px;     /* 紧凑触控高：图标钮/行内操作钮/分页/分段控件/开关行 */
    --m-space:12px;        /* 页面边距 / 卡片间距 / 卡片内边距（统一一档） */
    --m-r-card:12px;       /* 卡片 / 底部 Sheet / 组合控件圆角 */
    --m-r-ctl:8px;         /* 按钮 / 输入框圆角 */
    --m-fs-sm:12px;        /* 辅助说明 / 标签 / 小钮文字 */
    --m-fs:14px;           /* 正文 / 普通按钮 / 导航项 */
    --m-fs-lg:16px;        /* 区块标题 / KPI 数值（输入框 16px 另由硬规则保证，防 iOS 聚焦放大） */
    /* 覆盖桌面尺寸变量：字号整体抬一档、标准控件进入触控尺寸、卡片圆角 8→12 */
    --font-size-xs:11px;
    --font-size-sm:12px;
    --font-size-base:13px;
    --font-size-md:14px;
    --font-size-lg:14px;
    --form-height:44px;
    --form-height-sm:40px;
    --radius-card:12px;
  }
  html.safe-top-off{--safe-top:0px;}

  /* ---------- 1. 视口高度与安全区 ---------- */
  /* lg 必须在 .app-root 自身上覆盖：桌面段在 .app-root 声明的自定义属性
     会压过 :root 继承值（自定义属性就近原则，非特异性原则） */
  .app-root{height:100vh;height:100dvh;--font-size-lg:14px;}
  .global-top-bar{
    height:calc(56px + var(--safe-top));
    padding-top:var(--safe-top);
  }
  /* 下载入口：仅 PC 端显示，移动端隐藏 */
  #desktopDownloadWrap{display:none !important;}

  /* ---------- 2. 顶栏 ---------- */
  .topbar-logo-section{padding:0 6px 0 8px;gap:6px;}
  .topbar-logo-section .sidebar-logo{height:50px;}
  .sidebar-brand .brand-text{font-size:13px;}
  #sidebarToggle{
    width:40px;height:40px;min-width:40px;
    display:inline-flex;align-items:center;justify-content:center;
  }
  /* 手机无 hover，隐藏顶栏按钮 tooltip（点按会残留气泡） */
  .global-top-bar [data-tip]:hover::after,
  .global-top-bar [data-tip]:active::after{display:none !important;}
  .topbar-actions .icon-btn,
  #noticeBtn,#chatbotBtn{min-width:40px;min-height:40px;}
  /* 原生导航栏：logo 让位给"☰ + 当前页标题"（特异性须与桌面 .topbar-logo-section .sidebar-brand 持平） */
  .topbar-logo-section .sidebar-brand{display:none;}
  .topbar-page-title{
    display:block;
    font-size:17px;font-weight:600;color:var(--text-primary);
    margin-left:2px;white-space:nowrap;letter-spacing:.2px;
  }

  /* ---------- 2b. App 观感：切页淡入 / 去点击蓝块 / 按压反馈 ---------- */
  /* 消除微信/安卓浏览器点按时的蓝色高亮方块，并禁双击缩放（保留平移/捏合） */
  *{-webkit-tap-highlight-color:transparent;touch-action:manipulation;}
  /* 页面切换：新页 180ms 淡入（旧页 display 瞬切，观感等同淡入淡出） */
  .page.active{animation:mPageFade .18s ease both;}
  @keyframes mPageFade{from{opacity:0;}to{opacity:1;}}
  /* 可点元素按下时轻微透明，模拟原生"按下去"响应 */
  button:active,
  .menu-item:active,
  .notes-tab:active,
  .bill-panel-tab:active,
  .page-subtab:active,
  .topbar-action-btn:active,
  .user-menu-item:active,
  .mf-toggle:active{opacity:.7;}
  /* 可点元素文字防长按选中/弹出放大镜 */
  button,.menu-item,.topbar-action-btn,.notes-tab,.bill-panel-tab,.page-subtab,.mf-toggle{
    -webkit-user-select:none;user-select:none;
  }
  @media (prefers-reduced-motion:reduce){
    .page.active{animation:none;}
  }

  /* ---------- 3. 侧栏：全站抽屉化（复用 sidebar-drawer-open 机制） ---------- */
  .sidebar,
  body.immersive .sidebar{
    position:fixed !important;
    top:0 !important;bottom:0;left:0;right:auto;
    width:min(82vw,320px) !important;
    height:100vh;height:100dvh;
    margin:0;
    transform:translateX(-100%);
    transition:transform .25s var(--ease-out,ease);
    z-index:60 !important;
    padding-top:calc(12px + var(--safe-top));
    padding-bottom:env(safe-area-inset-bottom,0px);
    display:flex !important;
    flex-direction:column;
  }
  body.sidebar-drawer-open .sidebar{transform:translateX(0);}
  /* 抽屉打开时顶栏抬到侧栏之上：☰ 始终可点收起，不会被菜单挡住 */
  body.sidebar-drawer-open .global-top-bar{z-index:70;}
  body.sidebar-drawer-open #sidebarToggle{
    z-index:71;background:#E2E8F0;color:var(--text-primary);
  }
  .sidebar-drawer-mask{
    top:0 !important;bottom:0;left:0;right:0;
    z-index:50;
  }
  body.sidebar-drawer-open .sidebar-drawer-mask{display:block;}
  /* 抽屉底部关闭条：戴手套一键收起；桌面隐藏 */
  .sidebar-drawer-close{
    display:none;
    flex:0 0 auto;
    margin:8px 12px calc(8px + env(safe-area-inset-bottom,0px));
    min-height:48px;
    border:1px solid var(--border);
    border-radius:var(--m-r-ctl);
    background:var(--bg-subtle);
    color:var(--text-secondary);
    font:600 var(--m-fs)/1 inherit;
    cursor:pointer;
  }
  body.sidebar-drawer-open .sidebar-drawer-close{
    display:flex;align-items:center;justify-content:center;gap:8px;
  }
  .sidebar-drawer-close:active{opacity:.7;background:var(--brand-soft,#E8F1FF);}
  .menu-list{flex:1 1 auto;min-height:0;overflow-y:auto;}
  .menu-item{min-height:var(--m-touch);}

  /* ---------- 3b. 触控热区：分页/关闭等小控件补到 40–44 ----------
     勾选框保持正常视觉尺寸（18px 左右），只略增单元格内边距方便点按，
     不要用 padding 扩边框——那样整框会被撑得很大 */
  .table-wrap input[type="checkbox"],
  input.fm-row-checkbox,
  .fm-table-wrap input[type="checkbox"],
  #page-customer input[type="checkbox"],
  #page-aftersale input[type="checkbox"],
  #page-ledger input[type="checkbox"]{
    -webkit-appearance:none;appearance:none;
    width:18px;height:18px;
    margin:0;
    box-sizing:border-box;
    background:#fff;
    background-clip:border-box;
    border:1.5px solid #94A3B8;
    border-radius:4px;
    flex-shrink:0;
    vertical-align:middle;
    accent-color:#0969DA;
  }
  .table-wrap input[type="checkbox"]:checked,
  input.fm-row-checkbox:checked,
  .fm-table-wrap input[type="checkbox"]:checked,
  #page-customer input[type="checkbox"]:checked,
  #page-aftersale input[type="checkbox"]:checked,
  #page-ledger input[type="checkbox"]:checked{
    background-color:#0969DA;
    border-color:#0969DA;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 10'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M1 5l3.5 3.5L11 1'/%3E%3C/svg%3E");
    background-repeat:no-repeat;
    background-position:center;
    background-size:12px 10px;
  }
  /* 勾选列左右多留一点空白，手指好点，框本身不变大 */
  .table-wrap td:first-child,
  .table-wrap th:first-child,
  .fm-table-wrap td:first-child,
  .fm-table-wrap th:first-child{
    padding-left:6px;padding-right:6px;
  }
  /* 表头/行整体加高一点，勾选与文字更好点 */
  .table-wrap th,.fm-table-wrap th{min-height:40px;}
  .table-wrap td,.fm-table-wrap td{padding-top:10px;padding-bottom:10px;}
  /* 分页 / 关闭 / 管理小钮 */
  .fm-page-btn,
  .fm-page-size,
  .pager-input,
  .notice-drawer-close,
  .cons-cat-manage{
    min-width:40px;min-height:40px;
  }
  .notice-drawer-close{width:40px;height:40px;}
  /* 耗材分类项：加宽触控 */
  .cons-cat-item{
    min-height:40px;
    min-width:44px;
    padding-left:10px;padding-right:10px;
  }
  /* 顶栏头像/铃铛保底 44 */
  .user-avatar-btn,
  #noticeBtn,
  #chatbotBtn{
    min-width:44px;min-height:44px;
  }
  /* 主操作实心色块：手机强光下描边钮不够醒目，主按钮加深底色+白字 */
  .btn-primary,
  .page-btn.btn-primary,
  .auth-btn{
    background:var(--brand,#0969DA);
    border-color:var(--brand,#0969DA);
    color:#fff !important;
  }
  .btn-primary:active{filter:brightness(.92);}

  /* ---------- 4. 页面骨架：上下自然滑动，左右锁定一屏 ----------
     · 纵向：保持自然流，页面至少满屏、内容超高时整页上下滚动（不固定高、不裁切纵向）；
     · 横向：main-content / content-wrap 横向裁切，超宽表格只在 .table-wrap 内部横滑，
       任何元素都不允许把整页撑出横向滚动条。 */
  .main-content{overflow-x:hidden;}
  .page.active{min-height:calc(100dvh - 56px - var(--safe-top));}
  /* 覆盖 ≤820px 的 100vh 最小高（改用 dvh 并扣顶部安全区），height 保持 auto 自然流 */
  .page-inner{min-height:calc(100dvh - 56px - var(--safe-top));}
  .page-content-wrap{overflow-x:hidden;}
  .page-body{
    padding:var(--m-space) var(--m-space) calc(var(--m-space) + env(safe-area-inset-bottom,0px));
    gap:var(--m-space);
  }
  .dashboard-panel-wrap{
    padding:var(--m-space) var(--m-space) calc(var(--m-space) + env(safe-area-inset-bottom,0px));
  }
  /* 页头/二级 tab 不被压缩 */
  .page-header,.page-subtabs{flex:0 0 auto;}
  /* 工单/客户页内联写死 gap:8px，统一 12 档 */
  #page-workorder .page-body,
  #page-customer .page-body{gap:var(--m-space) !important;}
  /* gap 容器内卡片自带 margin-bottom 会叠成 24px，页面级容器内清零，间距由 gap 统一
     （弹窗 body 等非 gap 容器不受影响，仍保留卡片外边距） */
  .page-body > .card,
  .lm-pane > .card{margin-bottom:0;}
  /* 文件管理是独立的固定高内部滚动布局（桌面亦然），维持原模型不放开 */
  #page-file{
    height:calc(100dvh - 56px - var(--safe-top));
    min-height:0;max-height:none;
  }

  /* ---------- 4b. 自然流下仅统一间距，纵向滚动交给页面（不锁内部高度） ---------- */
  .lm-pane.active{gap:var(--m-space);}
  #page-aftersale-body .as-pane{gap:var(--m-space) !important;}
  #billListWrap{gap:var(--m-space);}

  /* ---------- 4c. 筛选折叠条（GitHub Mobile 形态，默认收起） ---------- */
  .mf-toggle{
    display:flex;align-items:center;justify-content:space-between;
    width:100%;min-height:var(--m-touch);padding:0 14px;
    border:1px solid var(--border);border-radius:var(--m-r-ctl);
    background:var(--bg-subtle);color:var(--text-secondary);
    font-size:var(--m-fs);font-weight:500;font-family:inherit;
  }
  .mf-toggle:active{background:#E9EDF2;}
  .mf-toggle-label{display:inline-flex;align-items:center;gap:8px;}
  .mf-toggle-label i{font-size:13px;}
  .mf-toggle-arrow{font-size:11px;transition:transform .2s ease;}
  .mf.is-collapsed .mf-toggle-arrow{transform:rotate(-90deg);}
  .mf.is-collapsed .mf-body{display:none;}
  /* 展开后筛选区与折叠条留 12px 间距（修复顶格） */
  .mf:not(.is-collapsed) .mf-body{margin-top:var(--m-space);}
  /* 筛选网格：grid 项默认 min-width:auto 会被日期输入框固有宽度撑破，
     导致右列（版号/品名等）溢出屏幕被裁；强制 min-width:0 锁在卡内。
     折叠卡内网格底部间距交给后续按钮（清空/查询）自身 margin，避免叠加 */
  .mf .filter-form-grid{margin-bottom:0;}
  .filter-form-grid > .filter-item{min-width:0;}
  /* 展开面板内的"清空筛选条件"：整宽次级钮（桌面端 display:none，仍走原按钮条） */
  .mf-clear-only{
    display:inline-flex;align-items:center;justify-content:center;gap:8px;
    width:100%;min-height:var(--m-touch-sm);margin-top:var(--m-space);
    border:1px solid var(--border);border-radius:var(--m-r-ctl);
    background:var(--bg-subtle);color:var(--text-secondary);
    font-size:var(--m-fs);font-family:inherit;
  }
  /* 已填写条件时折叠条高亮（品牌蓝浅底 + 小蓝点提示） */
  .mf-toggle.is-active{
    border-color:#0969DA;background:#E8F1FE;color:#0969DA;
  }
  .mf-toggle.is-active .mf-toggle-label::after{
    content:"";width:7px;height:7px;border-radius:50%;background:#0969DA;
  }
  body[data-theme="dark"] .mf-toggle.is-active{
    border-color:var(--brand);background:rgba(77,142,255,.15);color:#4D8EFF;
  }
  body[data-theme="dark"] .mf-toggle.is-active .mf-toggle-label::after{background:#4D8EFF;}
  /* ---------- 4d. FAB + 溢出动作菜单（GitHub Mobile 形态） ---------- */
  /* 筛选条头部：筛选 pill 自适应 + 右侧 ••• 溢出钮 */
  .mf-head{display:flex;align-items:center;gap:8px;}
  .mf-head .mf-toggle{width:auto;flex:1 1 auto;}
  .mf-more{
    display:inline-flex;align-items:center;justify-content:center;
    flex:0 0 auto;width:44px;height:44px;padding:0;
    border:1px solid var(--border);border-radius:var(--m-r-ctl);
    background:var(--bg-subtle);color:var(--text-secondary);
    font-size:15px;
  }
  /* 原按钮条整块隐藏：主操作上 FAB，其余进 ••• 菜单（仅标记 js-actions 的作用域） */
  .js-actions .filter-actions{display:none;}
  .page-header.js-actions .page-header-actions{flex:0 0 auto;justify-content:flex-end;gap:8px;}
  .page-header.js-actions .page-header-actions > button:not(.js-more){display:none;}
  /* 悬浮主操作钮：右下角拇指区，实心品牌色 + 描边光圈保证强光可辨 */
  .mobile-fab{
    display:none;position:fixed;
    right:16px;bottom:calc(20px + env(safe-area-inset-bottom,0px));
    width:56px;height:56px;border-radius:50%;
    background:#0969DA;color:#fff;border:2px solid rgba(255,255,255,.55);
    z-index:9990;
    font-size:24px;align-items:center;justify-content:center;
    box-shadow:0 8px 22px rgba(9,105,218,.5),0 2px 6px rgba(0,0,0,.25);
    transition:transform .12s ease, opacity .15s ease;
  }
  .mobile-fab.show{display:flex;}
  .mobile-fab:active{transform:scale(.92);filter:brightness(.92);}
  /* 底部 Action Sheet */
  .mobile-sheet-mask{
    display:block;position:fixed;inset:0;z-index:9995;
    background:rgba(0,0,0,.45);opacity:0;pointer-events:none;
    transition:opacity .22s ease;
  }
  .mobile-sheet{
    display:block;position:fixed;z-index:9996;
    left:0;right:0;bottom:0;margin:0 auto;max-width:520px;
    padding:6px 10px calc(10px + env(safe-area-inset-bottom,0px));
    background:var(--bg-surface);
    border-radius:var(--m-r-card) var(--m-r-card) 0 0;
    box-shadow:0 -4px 30px rgba(0,0,0,.20);
    transform:translateY(100%);
    transition:transform .26s cubic-bezier(.2,.8,.2,1);
  }
  body.m-sheet-open .mobile-sheet-mask{opacity:1;pointer-events:auto;}
  body.m-sheet-open .mobile-sheet{transform:translateY(0);}
  .m-sheet-grab{
    width:36px;height:4px;border-radius:2px;margin:4px auto 2px;
    background:var(--border-strong);opacity:.6;
  }
  .m-sheet-title{
    text-align:center;font-size:13px;color:var(--text-tertiary);
    padding:6px 0 8px;
  }
  .m-sheet-row{
    display:flex;align-items:center;justify-content:flex-start;gap:14px;width:100%;
    min-height:48px;padding:0 14px;
    border:none;background:transparent;border-radius:8px;
    font-size:16px;font-family:inherit;color:var(--text-primary);
    text-align:left;
  }
  .m-sheet-row i{width:20px;flex:0 0 20px;text-align:center;color:var(--text-secondary);font-size:15px;}
  .m-sheet-row:active{background:var(--bg-subtle);}
  .m-sheet-row.is-danger{color:#E5534B;}
  .m-sheet-row.is-danger i{color:#E5534B;}
  .m-sheet-cancel{
    width:100%;min-height:48px;margin-top:6px;padding:0 14px;
    border:none;border-top:1px solid var(--border);
    background:transparent;border-radius:0;
    font-size:16px;font-weight:600;font-family:inherit;color:var(--text-primary);
  }
  .m-sheet-cancel:active{background:var(--bg-subtle);}
  @media (prefers-reduced-motion:reduce){
    .mobile-sheet{transition:none;}
  }

  /* 财务对账/收款：筛选控件与主操作在同一 flex 行（手机端重排规则依赖直接子选择器，
     不能包 wrapper），收起时仅隐藏条件控件与重置，主操作钮（新建/登记）常显 */
  .mf.is-collapsed .bill-filter-bar > #billFilterCust,
  .mf.is-collapsed .bill-filter-bar > #billFilterStatus,
  .mf.is-collapsed .bill-filter-bar > .btn-reset,
  .mf.is-collapsed .pay-filter-bar > #payFilterCust,
  .mf.is-collapsed .pay-filter-bar > .pay-date,
  .mf.is-collapsed .pay-filter-bar > .pay-date-sep,
  .mf.is-collapsed .pay-filter-bar > .btn-reset{display:none;}

  /* iOS 输入框聚焦不自动放大：字号必须 ≥16px */
  input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]),
  select,textarea{font-size:16px;}
  .pager-input,.share-link-row input,.lt-trash-input{font-size:16px;}
  /* 组件化封装的表单（计算器输入行 / 通用筛选行）桌面走 13-14px 变量，
     手机端必须显式抬到 16px，否则 iOS 聚焦仍会放大（类选择器特异性高于上面的裸元素规则） */
  .input-row input,.input-row select,
  .result-row input,.result-row select,
  .filter-item input,.filter-item select,.filter-item textarea{font-size:16px;}
  .input-row,.result-row{min-height:var(--m-touch);}

  /* ---------- 4b. 全局控件尺度归一（消除各页 36/40/42/46 并存的参差感）---------- */
  /* 默认按钮：桌面 --form-height 已在本段抬到 44、字号 14；这里统一横向留白与圆角 */
  button{padding:0 16px;border-radius:var(--m-r-ctl);}
  /* 紧凑档：表格行内/弹窗内的小按钮保持 32 高（外层容器统一横滑，不承担主操作） */
  .btn-sm{height:32px;padding:0 12px;font-size:var(--m-fs-sm);}
  /* 通用图标钮：全站统一 40×40 圆形/圆角触控热区（顶栏另由专用规则约束） */
  .icon-btn{
    width:var(--m-touch-sm);height:var(--m-touch-sm);
    min-width:var(--m-touch-sm);padding:0;
    display:inline-flex;align-items:center;justify-content:center;
  }
  /* 页内二级 tab（记事本 / 台账子页等）与胶囊导航：统一 40 高、14px 字 */
  .notes-tab{min-height:var(--m-touch-sm);display:inline-flex;align-items:center;font-size:var(--m-fs);}
  .page-subtab{min-height:var(--m-touch-sm);display:inline-flex;align-items:center;}
  /* 卡片基类：桌面 padding10/间距8 与各业务卡 12/12 混用，手机端统一到同一档 */
  .card{padding:var(--m-space);margin-bottom:var(--m-space);}
  .card:last-child{margin-bottom:0;}
  /* 通用筛选网格：桌面 auto-fill(180px) 在 360-414 宽临界点忽 1 列忽 2 列。
     弹窗内表单统一单列（最稳的手机表单形态）；台账/售后页内筛选区为短字段，双列等宽 */
  .filter-form-grid{grid-template-columns:1fr;gap:var(--m-space);margin-bottom:var(--m-space);}
  #page-ledger .filter-form-grid,
  #page-aftersale .filter-form-grid{grid-template-columns:1fr 1fr;}
  /* 筛选操作区：单行紧凑工具条（清空在左、业务操作在右），
     窄屏条内横滑；禁止文字断行竖排，按钮统一 40px 触控档 */
  .filter-actions{
    flex-direction:row;flex-wrap:nowrap;align-items:center;
    gap:8px;overflow-x:auto;-webkit-overflow-scrolling:touch;
    padding-bottom:2px;
  }
  .filter-actions::-webkit-scrollbar{display:none;}
  .filter-actions .btn-group{
    width:auto;flex:0 0 auto;margin-top:0;gap:8px;
    flex-wrap:nowrap;
  }
  .filter-actions .btn-group button{
    flex:0 0 auto;min-width:0;width:auto;
    min-height:var(--m-touch-sm);height:var(--m-touch-sm);
    padding:0 14px;font-size:13px;white-space:nowrap;
  }
  .filter-actions .btn-group .btn-primary,
  .filter-actions .btn-group .btn-danger{flex:0 0 auto;width:auto;}
  /* 组内非按钮临时块（如导入进度条）独占整行，不挤压按钮列宽 */
  .filter-actions .btn-group > div{flex:1 1 100%;}
  /* 首页功能工具卡：圆角/内距与全站卡片对齐，网格间距 10→12 */
  .dashboard-tool-grid{gap:var(--m-space);}
  .dashboard-tool-card{padding:var(--m-space);border-radius:var(--m-r-card);}
  .dashboard-tool-card-cover{border-radius:var(--m-r-ctl);}
  /* 计算器页：桌面固定双列 grid（手机未覆盖会被挤压），改为上下堆叠；
     内部双列输入网格同样改单列，34px 输入行抬到标准触控高 */
  .calc-grid{grid-template-columns:1fr;gap:var(--m-space);}
  .calc-grid > .card{padding:var(--m-space);}
  .calc-input-grid{grid-template-columns:1fr;gap:var(--m-space);}
  .calc-input-grid .input-row{min-height:var(--m-touch);}
  .calc-grid .btn-group{margin:var(--m-space) 0 6px;}
  /* 分享弹窗链接行：34px 输入/钮抬到紧凑触控档（字号 16 已由前面硬规则保证） */
  .share-link-row input{height:var(--m-touch-sm);}
  .share-link-row .btn-primary{height:var(--m-touch-sm);}
  /* 聊天面板：输入区/发送钮对齐 40 档与 8 圆角 */
  .chatbot-input{min-height:var(--m-touch-sm);}
  .chatbot-send{width:var(--m-touch-sm);height:var(--m-touch-sm);border-radius:var(--m-r-ctl);}

  /* ---------- 5. 首页 KPI / 卡片 ---------- */
  .dashboard-kpi-grid{grid-template-columns:repeat(2,1fr);gap:var(--m-space);}
  .dashboard-kpi-card{padding:var(--m-space);}
  /* 桌面 32px 展示数字在手机两列卡内过大，收敛到 22（小屏 20，见 ≤480 段） */
  .dashboard-kpi-value{font-size:22px;}
  .dashboard-tool-grid{grid-template-columns:repeat(2,1fr);}
  .dashboard-section-body [id$="Chart"]{height:160px !important;}

  /* 首页数据面板工具行（GitHub Mobile 形态）：
     隐藏大屏入口；月份选择器与刷新钮统一 44 触控高；刷新降级为纯图标钮 */
  #dashScreenBtn{display:none;}
  #panel-data .dashboard-body > div:first-child{gap:var(--m-space);}
  #panel-data .dashboard-body > div:first-child > .filter-item{
    flex:1 1 auto;min-width:0;min-height:var(--m-touch) !important;padding:0 12px;
  }
  #dashMonth{font-size:16px;}
  #dashRefreshBtn{
    width:var(--m-touch);min-width:var(--m-touch);height:var(--m-touch);
    padding:0 !important;font-size:0 !important;flex:0 0 auto;
    display:inline-flex;align-items:center;justify-content:center;
  }
  #dashRefreshBtn i{font-size:16px;margin:0;}

  /* ---------- 6. 工单生产页：表格 → 纵向卡片（DOM 不变，纯 CSS 重排） ---------- */
  /* 概览/工序统计卡：两列，竖分隔线改横向 */
  .lt-stat-overview{
    flex:1 1 100% !important;flex-wrap:wrap;
    padding:0 0 10px !important;margin:0 0 2px !important;
    border-right:none !important;border-bottom:1px solid var(--border);
  }
  .lt-stat-overview .lt-stat-card,
  .lt-stat-steps .lt-stat-card{flex:1 1 calc(50% - 6px) !important;min-width:0 !important;}
  .lt-stat-card{padding:var(--m-space);}

  /* 每行 tr 变独立卡片，三个 td 纵向堆叠 */
  .lt-timeline-table{width:100%;}
  .lt-timeline-row{
    display:block;margin-bottom:var(--m-space);
    border:1px solid var(--border);border-radius:var(--m-r-card);
    overflow:hidden;
  }
  .lt-timeline-row td{
    display:block !important;width:auto !important;
    padding:var(--m-space) !important;
    border:none !important;border-radius:0 !important;
    background:transparent !important;
    white-space:normal;vertical-align:top;
  }
  body[data-theme="dark"] .lt-timeline-row td{background:transparent !important;}
  /* 卡片内三个区块用淡分隔线隔开 */
  .lt-timeline-cell,
  .lt-timeline-op{border-top:1px solid var(--border) !important;}
  .lt-timeline-info{white-space:normal;}
  .lt-timeline-cust{margin-top:4px;}
  .lt-spec{white-space:normal;word-break:break-all;}
  /* 停留天数徽标触控热区 */
  .lt-flow-days{min-height:28px;display:inline-flex;align-items:center;}

  /* 六工序时间线：卡片内部横向滑动，节点给足宽度，工序名不再重叠 */
  .lt-timeline{
    flex-wrap:nowrap;
    overflow-x:auto;-webkit-overflow-scrolling:touch;
    padding:2px 2px 6px;
  }
  .lt-tl-node{
    width:auto;min-width:74px;flex:0 0 auto;
  }
  .lt-tl-label{flex-wrap:nowrap;}
  .lt-tl-line{flex:0 0 18px;min-width:18px;margin-top:12px;}
  .lt-tl-duration{text-align:center;}
  /* 备注"+"触控热区加大，圆钮内字形强制居中（避免被压缩时加号偏移） */
  .lt-step-memo-btn.add{
    width:22px;height:22px;
    font-size:12px;line-height:1;
    padding:0;
    display:inline-flex;align-items:center;justify-content:center;
  }
  /* FA 字体的 plus 字形在 em-box 内偏上（底部有 descender 留白），
     容器虽已 flex 居中，字形视觉仍偏上；伪元素转 inline-block 后下移补偿 */
  .lt-step-memo-btn.add::before{
    display:inline-block;
    line-height:1;
    transform:translateY(4px);
  }

  /* 操作区：分享靠左，确认/回退/快递单号靠右，整行可换行 */
  .lt-timeline-op{text-align:left;}
  .lt-tl-op-inner{justify-content:flex-end;flex-wrap:wrap;row-gap:8px;}
  .lt-tl-share-btn{margin-right:auto;min-height:var(--m-touch-sm);display:inline-flex;align-items:center;}
  .lt-tl-confirm-btn,.lt-tl-rollback-btn{min-height:var(--m-touch-sm);display:inline-flex;align-items:center;}
  .lt-tl-tracking-input{flex:1 1 130px;min-width:0;height:var(--m-touch-sm);padding:0 10px;}

  /* ---------- 7. 表格：除工单外一律横向滑动兜底 ---------- */
  /* 自然流下必须把超宽表格锁在容器内：祖先 flex/grid 项给 min-width:0，
     滚动容器 max-width:100%，否则宽表会撑破卡片、被页面 overflow-x:hidden 裁掉而无法横滑 */
  .page-content-wrap,.page-body,.dashboard-panel-wrap,
  .lm-pane,.as-pane,.card{min-width:0;}
  .table-wrap,.notice-table-wrap,.fm-table-wrap,.quote-table-scroll,
  #asHistoryTableWrap,#calcHistoryTableWrap{
    overflow-x:auto;-webkit-overflow-scrolling:touch;
    max-width:100%;min-width:0;
  }
  .table-wrap table,
  table.data-table,
  table.notice-table,
  table.fm-table,
  table.admin-user-table,
  table.quote-form-table{min-width:640px;}
  .table-wrap table th,table.data-table th,table.notice-table th,
  table.fm-table th,table.admin-user-table th{white-space:nowrap;}

  /* ---------- 8. 分页器 ---------- */
  .pagination-bar{flex-wrap:wrap;row-gap:8px;}
  .pager-info{order:3;width:100%;flex:none;margin-top:4px;}
  .pager-btn{min-height:var(--m-touch-sm);display:inline-flex;align-items:center;justify-content:center;}
  /* 记事本分类 tab 过多时横向滑动，不折行挤压 */
  .notes-filter-bar{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .notes-filter-bar .notes-tab{flex:0 0 auto;}

  /* ---------- 8b. 工具条：搜索独占一行、按钮整行均分 ----------
     客户 / 耗材 / 计算记录三处共用 .history-header，
     桌面端"搜索左 + 按钮组 margin-left:auto 右"在手机换行后中间会空一大块 */
  .history-header{gap:var(--m-space);}
  .history-header > *{flex:1 1 100%;min-width:0;}
  .history-header .btn-group{margin-left:0 !important;width:100%;}
  .history-header .btn-group button{flex:1 1 0;min-width:0;min-height:var(--m-touch);white-space:nowrap;}
  /* 耗材搜索框内联写死 240px 宽 / 12px 字号，手机端拉满并防 iOS 聚焦放大 */
  #consumableSearch{width:100% !important;font-size:16px !important;}
  /* ---------- 8b-2. 页头：顶栏已有页面标题，页内大标题手机端删除，仅留操作钮一行 ---------- */
  .page-header{flex-wrap:wrap;gap:0;padding:0;margin:0;min-height:0;border-bottom:none;}
  .page-header-main{display:none;}
  /* 无操作钮的纯标题页头整块移除（否则空 div 会在 flex gap 中多占一条 12px 间距） */
  .page-header:not(:has(.page-header-actions)){display:none;}
  .page-header-actions{flex:1 1 100%;margin-left:0;justify-content:flex-start;}
  .page-header-actions > button{flex:0 0 auto;min-height:var(--m-touch-sm);white-space:nowrap;}
  /* 首页：数据/工具 tab 胶囊不拉伸，右对齐 */
  .dashboard-panel-wrap > .page-header .page-header-actions{flex:1 1 100%;justify-content:flex-end;}
  /* 客户页底部分页：页码信息独占一行居中，上一页/下一页均分 */
  #page-customer .card > div:last-child{flex-wrap:wrap;row-gap:8px;}
  #page-customer .card > div:last-child > span{flex:1 1 100%;text-align:center;}
  #page-customer .card > div:last-child .btn-group{width:100%;}
  #page-customer .card > div:last-child .btn-group button{flex:1 1 0;min-height:var(--m-touch);}

  /* ---------- 8c. 财务对账（收款 / 对账）手机端重排 ----------
     该页由 app.js 以大量内联样式渲染（4列KPI、左右两栏、固定宽筛选框），
     内联优先级高于普通规则，以下一律 !important 覆盖，桌面端不受影响 */
  /* KPI：4 列 → 2 列，卡片内部由横向改为上下居中 */
  .pay-stats-grid{grid-template-columns:repeat(2,1fr) !important;}
  .pay-stats-grid .pay-stat-card{
    flex-direction:column !important;
    justify-content:center;
    gap:4px !important;
    padding:12px 8px !important;
    text-align:center;
  }
  .pay-stats-grid .pay-stat-val{font-size:16px !important;}
  .pay-stats-grid .pay-stat-pct{margin-left:0 !important;}
  /* 客户收款进度 / 月度收款趋势：左右两栏 → 上下堆叠 */
  .pay-board-grid{grid-template-columns:1fr !important;}
  .pay-board-grid .pay-sub-panel{padding:12px !important;}
  .pay-board-grid .pay-sub-panel:first-child{max-height:300px !important;}
  .pay-board-grid .pay-sub-panel:nth-child(2){max-height:none !important;}
  /* 柱高为百分比、依赖父链确定高，手机端给图表固定高，否则柱子会塌 */
  #payMonthlyChart{flex:none !important;height:220px !important;min-height:220px !important;gap:4px !important;}
  /* 进度面板头：标题独占一行，搜索框整行，"按未收金额降序"隐藏 */
  .pay-cust-head{flex-wrap:wrap !important;}
  .pay-cust-head h4{flex:1 1 100% !important;}
  #payCustSearch{flex:1 1 100% !important;width:100%;height:var(--m-touch);font-size:16px !important;}
  .pay-cust-sort{display:none;}
  /* 客户条目：名称与金额上下两行，不再互相挤压 */
  .pay-cust-name{flex:1 1 100% !important;max-width:100% !important;}
  .pay-cust-amt{flex:1 1 100% !important;}
  /* 筛选条：整行换行布局——客户名整行、起止日期并排、两个按钮各占整行 */
  .pay-filter-bar,.bill-filter-bar{flex-direction:row !important;flex-wrap:wrap !important;align-items:stretch !important;gap:var(--m-space) !important;}
  .pay-filter-bar > #payFilterCust,
  .bill-filter-bar > #billFilterCust,
  .bill-filter-bar > #billFilterStatus{flex:1 1 100% !important;width:100% !important;}
  .pay-filter-bar .pay-date{flex:1 1 0 !important;width:auto !important;min-width:0;}
  .pay-filter-bar .pay-date-sep{flex:0 0 auto !important;align-self:center;}
  .pay-filter-bar input,
  .bill-filter-bar input,
  .bill-filter-bar select{height:var(--m-touch) !important;font-size:16px !important;box-sizing:border-box;}
  .pay-filter-bar .btn-reset,.pay-filter-bar .btn-primary,
  .bill-filter-bar .btn-reset,.bill-filter-bar .btn-primary{
    flex:1 1 100% !important;width:100% !important;margin-left:0 !important;height:var(--m-touch);
  }
  /* 主操作（新建对账单/登记收款）已迁移到 FAB，筛选条内隐藏 */
  .bill-filter-bar .btn-primary[data-fab],
  .pay-filter-bar .btn-primary[data-fab]{display:none !important;}
  /* 对账分页居中 */
  #billPager{text-align:center !important;}
}

/* ============================================================
   🏭 排产面板（GitHub Projects 风格看板）
   ============================================================ */

/* ---- 顶部 KPI 条 ---- */
.sched-kpis{display:flex;gap:8px;flex-wrap:wrap;}
.sched-kpi{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;
  border:1px solid var(--border);border-radius:8px;background:var(--bg-surface);
  font-size:var(--font-size-base);}
.kpi-dot{width:8px;height:8px;border-radius:50%;display:inline-block;line-height:1;}
/* FontAwesome 图标型圆点：不套用 8px 盒子，按字号居中对齐，避免与文字错位 */
i.kpi-dot{width:auto;height:auto;border-radius:0;font-size:13px;
  display:inline-flex;align-items:center;justify-content:center;}
.dot-pending{background:#BF8700;}
.dot-producing{background:#1F883D;}
.kpi-name{color:var(--text-tertiary);}
.kpi-num{font-weight:600;color:var(--text-primary);min-width:14px;text-align:center;}
.sched-kpi.is-attention{border-color:#F0A19B;background:#FFFBF8;}
.sched-kpi.is-attention .kpi-dot{width:auto;height:auto;background:none;color:#CF222E;font-size:13px;}
.sched-kpi.is-attention .kpi-num{color:#CF222E;}
.sched-kpi-error{color:#CF222E;}

/* ---- 看板两栏 ---- */
.sched-board{flex:1;min-height:0;display:flex;gap:10px;}
.sched-col{flex:1 1 0;min-width:0;display:flex;flex-direction:column;
  border:1px solid var(--border);border-radius:10px;
  background:rgba(125,133,144,.10);overflow:hidden;}
.sched-col[data-col="1"]{flex:2 1 0;}
.sched-col-head{display:flex;align-items:center;gap:8px;padding:10px 12px;
  border-bottom:1px solid var(--border);background:var(--bg-surface);}
.sched-col-head h2{font-size:var(--font-size-base);font-weight:600;color:var(--text-secondary);margin:0;}
.sched-col-dot{width:10px;height:10px;border-radius:50%;}
.sched-col-count{margin-left:2px;min-width:20px;padding:1px 7px;border-radius:20px;
  background:var(--bg-subtle);font-size:var(--font-size-sm);color:var(--text-tertiary);text-align:center;}
/* 列头排序按钮（默认靠右，与计数徽章一组） */
.sched-sort-btn{margin-left:auto;width:26px;height:26px;border:none;background:transparent;border-radius:6px;
  color:var(--text-tertiary);cursor:pointer;font-size:13px;
  display:inline-flex;align-items:center;justify-content:center;transition:background .15s,color .15s;}
.sched-sort-btn:hover{background:var(--bg-subtle);color:var(--text-secondary);}
.sched-sort-btn.active{color:#0969DA;background:#E8F1FE;}
.sched-sort-btn.active:hover{color:#0969DA;background:#D8E8FD;}
.sched-col-body{flex:1;min-height:0;overflow-y:auto;padding:8px;
  display:flex;flex-direction:column;gap:8px;}
.sched-col-body.drag-over{background:rgba(9,105,218,.07);}

/* ---- 空状态（虚线占位，GitHub 空列提示） ---- */
.sched-empty{border:1.5px dashed var(--border-strong);border-radius:8px;padding:18px 10px;
  text-align:center;color:var(--text-muted);font-size:var(--font-size-base);}
.sched-empty-error{color:#CF222E;border-color:#F0A19B;}

/* ---- 看板卡片 ---- */
.lt-card{background:var(--bg-surface);border:1px solid var(--border);border-radius:8px;
  padding:0;margin:0;
  cursor:pointer;transition:border-color .15s,box-shadow .15s;position:relative;}
.lt-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-xs);}
.lt-card-main{padding:10px 12px;display:flex;flex-direction:column;gap:5px;}
.lt-card-head{display:flex;align-items:center;gap:6px;margin-bottom:0;}
.lt-card-no{font-size:var(--font-size-md);font-weight:600;color:var(--text-primary);}
.lt-view-icon{margin-left:auto;color:#94A3B8;font-size:11px;cursor:pointer;}
.lt-view-icon:hover{color:#0969DA;}
.lt-card-cust{font-size:var(--font-size-sm);color:var(--text-secondary);}
.lt-card-spec{font-size:var(--font-size-sm);color:var(--text-tertiary);}

/* 优先级小药丸（高/中/低） */
.lt-card-prio{font-size:10px;padding:1px 6px;border-radius:10px;font-weight:600;line-height:1.5;}
.lt-card-prio.prio-high{color:#CF222E;background:#FFEBE9;}
.lt-card-prio.prio-normal{color:#0969DA;background:#DDF4FF;}
.lt-card-prio.prio-low{color:var(--text-tertiary);background:var(--bg-subtle);}

/* 六步进度点 */
.lt-card-dots{display:flex;gap:5px;}
.lt-pdot{width:9px;height:9px;border-radius:50%;background:#D1D9E3;border:1px solid transparent;}
.lt-pdot.done{background:#0969DA;}
.lt-pdot.current{background:#fff;border-color:#0969DA;
  box-shadow:0 0 0 2px rgba(9,105,218,.25);animation:pdot-pulse 1.6s ease-in-out infinite;}
.lt-pdot.skipped{background:none;border:1px dashed #AEB8C6;}
@keyframes pdot-pulse{
  0%,100%{box-shadow:0 0 0 2px rgba(9,105,218,.25);}
  50%{box-shadow:0 0 0 4px rgba(9,105,218,.10);}
}

/* 卡片底部：日期 + 操作 */
.lt-card-foot{display:flex;align-items:center;gap:6px;margin-top:2px;
  padding-top:0;border-top:none;justify-content:flex-start;flex-wrap:nowrap;}
.lt-card-date{display:inline-flex;align-items:center;gap:4px;font-size:var(--font-size-sm);color:var(--text-tertiary);
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.lt-card-date.overdue{color:#CF222E;font-weight:600;}
.lt-card-date.today,.lt-card-date.soon{color:#BF8700;font-weight:600;}
.lt-card-actions{margin-left:auto;display:inline-flex;gap:4px;flex:0 0 auto;}
.lt-card-btn{width:26px;height:26px;border:none;background:transparent;border-radius:6px;
  color:var(--text-tertiary);cursor:pointer;font-size:12px;
  display:inline-flex;align-items:center;justify-content:center;transition:background .15s,color .15s;}
.lt-card-btn:hover{background:var(--bg-subtle);color:var(--text-secondary);}
.lt-card-btn.primary{color:#0969DA;}
.lt-card-btn.primary:hover{background:#E8F1FE;color:#0969DA;}
.lt-card-btn.danger{color:#CF222E;}
.lt-card-btn.danger:hover{background:#FFEBE9;color:#CF222E;}

/* ---- 拖拽状态 ---- */
.lt-card.dragging{opacity:.45;}
.lt-card.drop-before::before{content:"";position:absolute;top:-5px;left:0;right:0;height:3px;
  border-radius:2px;background:#0969DA;z-index:5;}
.lt-card.drop-before{position:relative;}

/* ---- 卡片展开区（六步时间线 + 确认操作） ---- */
.lt-card-detail{border-top:1px solid var(--border);padding:10px 12px;background:var(--bg-field);overflow:hidden;}
.lt-card-flow .lt-timeline{padding:0 18px;min-width:0;}
.lt-card-opbar{margin-top:10px;display:flex;justify-content:flex-end;}
.lt-card-opbar .lt-tl-op-inner{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
/* 展开区按钮与卡片外层统一：确认/回退=30px 高 12px 字 */
.lt-card-opbar .lt-tl-confirm-btn,
.lt-card-opbar .lt-tl-rollback-btn{height:30px;padding:0 12px;font-size:12px;
  display:inline-flex;align-items:center;gap:5px;}
.lt-card-opbar .lt-tl-tracking-input{height:30px;font-size:12px;}

/* ---- 排产弹窗表单 ---- */
.lt-sched-form{display:flex;flex-direction:column;gap:14px;padding:4px 2px;}
.lt-sched-field{display:flex;flex-direction:column;gap:7px;}
.lt-sched-label{font-size:var(--font-size-base);color:var(--text-secondary);font-weight:500;}
.lt-prio-seg{display:flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;}
.lt-prio-seg button{flex:1;height:32px;border:none;background:var(--bg-surface);color:var(--text-tertiary);
  font-size:var(--font-size-base);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;transition:background .15s,color .15s;}
.lt-prio-seg button+button{border-left:1px solid var(--border);}
.lt-prio-seg button:hover{background:var(--bg-subtle);}
.lt-prio-seg button.active{background:#0969DA;color:#fff;font-weight:600;}
.lt-prio-seg button.active:hover{background:#0969DA;}
.prio-flag{width:8px;height:8px;border-radius:50%;background:currentColor;opacity:.7;}
.lt-sched-date{height:36px;border:var(--form-border);border-radius:8px;padding:0 12px;
  font-size:var(--font-size-md);background:var(--form-bg);color:var(--text-primary);}
.lt-sched-date:focus{border-color:#0969DA;outline:none;}

/* ---- 深色模式：Primer 固定色补丁（其余走变量自动适配） ---- */
body[data-theme="dark"] .sched-col{background:rgba(139,148,158,.12);}
body[data-theme="dark"] .sched-col-body.drag-over{background:rgba(77,142,255,.10);}
body[data-theme="dark"] .sched-sort-btn.active{color:#4D8EFF;background:rgba(77,142,255,.15);}
body[data-theme="dark"] .sched-sort-btn.active:hover{color:#4D8EFF;background:rgba(77,142,255,.22);}
body[data-theme="dark"] .lt-card-btn.primary,
body[data-theme="dark"] .lt-view-icon:hover{color:#4D8EFF;}
body[data-theme="dark"] .lt-card-btn.primary:hover{background:rgba(77,142,255,.15);}
body[data-theme="dark"] .lt-pdot.done{background:#4D8EFF;}
body[data-theme="dark"] .lt-pdot.current{border-color:#4D8EFF;box-shadow:0 0 0 2px rgba(77,142,255,.3);}
body[data-theme="dark"] .lt-prio-seg button.active,
body[data-theme="dark"] .lt-prio-seg button.active:hover{background:#4D8EFF;}
body[data-theme="dark"] .lt-sched-date:focus{border-color:#4D8EFF;}
body[data-theme="dark"] .lt-card.drop-before::before{background:#4D8EFF;}
body[data-theme="dark"] .sched-kpi.is-attention{background:rgba(255,107,107,.08);border-color:rgba(255,107,107,.4);}
body[data-theme="dark"] .lt-card-prio.prio-high,
body[data-theme="dark"] .lt-card-date.overdue{color:var(--danger);}
body[data-theme="dark"] .lt-card-prio.prio-high{background:var(--danger-soft);}
body[data-theme="dark"] .lt-card-prio.prio-normal{color:#4D8EFF;background:rgba(77,142,255,.15);}
body[data-theme="dark"] .lt-card-btn.danger{color:var(--danger);}
body[data-theme="dark"] .lt-card-btn.danger:hover{background:var(--danger-soft);color:var(--danger);}

/* ---- 手机端：上下堆叠自然流（整页上下滑），KPI 单行横滑，按钮 40 ---- */
@media (max-width:768px){
  /* KPI 条：单行横滑胶囊，不折行占纵向空间（横向滑动收在条内，不撑破页面） */
  .sched-kpis{
    flex:0 0 auto;flex-wrap:nowrap;
    overflow-x:auto;-webkit-overflow-scrolling:touch;
    padding-bottom:2px;
  }
  .sched-kpis::-webkit-scrollbar{display:none;}
  .sched-kpis .sched-kpi{flex:0 0 auto;}
  /* 两列上下排列、随内容自然撑高，卡片全部展开，纵向滚动交给整页 */
  .sched-board{flex:0 0 auto;flex-direction:column;gap:var(--m-space);}
  .sched-col{flex:0 0 auto;display:flex;flex-direction:column;}
  .sched-col-head{flex:0 0 auto;}
  .sched-col-body{
    flex:0 0 auto;max-height:none;gap:var(--m-space);
    overflow:visible;
  }
  /* 列头排序钮补 40 触控 */
  .sched-sort-btn{width:40px;height:40px;}
  .lt-card-btn{width:40px;height:40px;font-size:14px;}
  .lt-card-actions{gap:8px;}
  /* 卡片展开区：确认/回退 40、均分整行，快递单号输入框同行 40 / 16px 防放大 */
  .lt-card-opbar{margin-top:12px;}
  .lt-card-opbar .lt-tl-op-inner{gap:8px;}
  .lt-card-opbar .lt-tl-confirm-btn,
  .lt-card-opbar .lt-tl-rollback-btn{
    height:40px;min-height:40px;padding:0 14px;font-size:13px;flex:1 1 0;min-width:0;
  }
  .lt-card-opbar .lt-tl-tracking-input{
    flex:1 1 100%;height:40px;font-size:16px;
  }
  .lt-card-flow .lt-timeline{flex-wrap:wrap;row-gap:12px;}
}

@media (max-width:768px){
  /* ---------- 8d. 文件管理：工具区降噪重排 ----------
     旧版 4 行 9 个描边方块（‹ › ⟳、搜索框、格式框、🔍、上传、新建、容量框、☰、▦），
     视觉噪音重显得廉价。手机端改为三层：
     A 幽灵导航（无框） / B 搜索组合控件（三框合一） / C 主次操作 + 无框容量条与分段视图 */
  /* A. 导航行：返回/前进/刷新全部去边框，只留图标，40px 触控 */
  .fm-topbar{gap:4px;}
  .fm-crumbs{flex-wrap:nowrap;gap:2px;}
  .fm-crumbs > .fm-nav-btn{
    width:40px;height:40px;flex:0 0 40px;
    border-color:transparent;background:transparent;
    color:#64748B;border-radius:50%;
  }
  .fm-crumbs > .fm-nav-btn:hover:not(:disabled),
  .fm-crumbs > .fm-nav-btn:active:not(:disabled){
    background:rgba(148,163,184,.16);border-color:transparent;color:var(--text-primary);
  }
  .fm-crumb-path{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .fm-crumb.current{font-size:16px;}

  /* B. 搜索行：输入框 / 格式筛选 / 搜索钮 合并成一个描边组合控件 */
  .fm-top-search{
    gap:0;width:100%;height:var(--m-touch);
    border:var(--form-border);border-radius:var(--m-r-card);
    background:var(--form-bg-focus);
    transition:border-color .15s,box-shadow .15s;
  }
  .fm-top-search:focus-within{border-color:var(--form-border-focus);box-shadow:var(--form-shadow-focus);}
  .fm-search-input{
    flex:1 1 auto;width:auto;min-width:0;height:100%;
    border:none;background:transparent;box-shadow:none;font-size:16px;padding:0 4px 0 14px;
  }
  .fm-search-select{
    flex:0 0 96px;width:96px;height:100%;
    border:none;border-left:1px solid var(--form-border);
    border-radius:0;background:transparent;box-shadow:none;
    padding:0 22px 0 10px;font-size:var(--m-fs-sm);color:var(--text-secondary);
  }
  .fm-top-search > .fm-nav-btn{
    width:46px;flex:0 0 46px;height:100%;
    border:none;background:transparent;color:var(--brand);
  }
  .fm-top-search > .fm-nav-btn:hover{background:transparent;color:var(--brand);}

  /* C. 操作行：手机端隐藏桌面文字版"上传/新建"（改用 D 行纯图标钮）；
     勾选文件时"批量操作"仍独占整行可用 */
  .fm-toolbar{gap:var(--m-space);}
  .fm-tb-left{width:100%;gap:var(--m-space);}
  .fm-tb-left > .fm-tb-btn{display:none;}
  /* 未勾选文件时批量区隐藏，整个左组随之收起，避免空行缝隙（:has 不支持时仅余 10px 间距，无害） */
  .fm-tb-left:has(.fm-batch-op-wrap[hidden]){display:none;}
  .fm-batch-op-wrap{flex:1 1 100%;}
  .fm-batch-op-wrap > .fm-tb-btn{width:100%;height:var(--m-touch);}

  /* D. 状态行：容量(无框细条) → 上传/新建图标钮 → 列表/网格分段控件 */
  .fm-tb-right{
    width:100%;gap:0;justify-content:flex-start;align-items:center;
    padding-top:10px;border-top:1px solid var(--form-border);
  }
  .fm-disk-chip{
    flex:1 1 auto;height:auto;padding:0;margin-right:12px;
    border-color:transparent !important;background:transparent !important;
  }
  .fm-disk-mini-bar{position:static;flex:1 1 auto;max-width:130px;height:4px;margin:0 8px;}
  /* 上传/新建：40px 纯图标钮，上传为品牌色实心、新建中性描边 */
  .fm-tb-right > .fm-mobile-act{
    display:inline-flex;width:var(--m-touch-sm);height:var(--m-touch-sm);flex:0 0 var(--m-touch-sm);
    padding:0;justify-content:center;border-radius:var(--m-r-ctl);
  }
  .fm-tb-right > .fm-mobile-act i{font-size:16px;}
  .fm-tb-right > .fm-mobile-act.fm-tb-primary{
    background:var(--brand);border-color:var(--brand);color:#FFFFFF;
  }
  .fm-tb-right > .fm-mobile-act.fm-tb-primary:hover{background:#0d5bbf;border-color:#0d5bbf;color:#FFFFFF;}
  .fm-tb-right > .fm-mobile-act.fm-tb-primary{margin-right:8px;}
  .fm-tb-right > .fm-view-btn{width:var(--m-touch-sm);height:var(--m-touch-sm);flex:0 0 var(--m-touch-sm);margin-top:0;}
  #fmViewListBtn{border-radius:var(--m-r-ctl) 0 0 var(--m-r-ctl);margin-left:4px;margin-right:-1px;}
  #fmViewGridBtn{border-radius:0 var(--m-r-ctl) var(--m-r-ctl) 0;}
  .fm-disk-pop{max-width:calc(100vw - 32px);}

  /* ---------- 8e. 个人中心 / 系统设置：二级导航 + 表单 + 按钮手机端重排 ---------- */
  /* 关键修复：基础规则用 ID 选择器写死 flex-direction:row（L4160），
     旧 ≤820px 块用类选择器改 column 因特异性不足从未生效，
     导致手机上横条导航被拉伸成全屏白框、内容区被挤没。此处用同特异性 ID 翻回纵向 */
  #page-profile .profile-layout,
  #page-settings .profile-layout{
    /* 上下自然滑动：纵向高度交给 ≤820 段的 height:auto + 最小满屏高，不锁固定高 */
    flex-direction:column;
  }
  /* 二级导航：顶部横滑胶囊，40px 触控项；务必取消桌面侧栏卡片的纵向拉伸 */
  .pf-nav{
    flex:none;width:auto;align-self:auto;
    margin:var(--m-space) var(--m-space) 0;padding:6px;gap:6px;
    flex-direction:row;align-items:center;
    overflow-x:auto;overflow-y:hidden;
  }
  .pf-nav-title{display:none;}
  .pf-nav .page-subtab{
    flex:0 0 auto;justify-content:center;
    min-height:var(--m-touch-sm);padding:0 16px;font-size:var(--m-fs);
  }
  #page-profile .profile-main,
  #page-settings .profile-main{margin:var(--m-space) var(--m-space) calc(var(--m-space) + 2px);}
  #page-profile .profile-content,
  #page-settings .profile-content{padding:0 0 16px;}

  /* 表单行：桌面"左标签+右输入"32px 高框 → 手机"标签在上、输入在下"44px 高 */
  .profile-form-row{
    flex-wrap:wrap;align-items:center;gap:6px 8px;
    height:auto;min-height:var(--m-touch);padding:9px var(--m-space);
  }
  .profile-form-label{flex:1 1 100%;font-size:var(--m-fs-sm);}
  .profile-form-value{flex:1 1 auto;font-size:var(--m-fs);min-width:0;}
  .profile-form-input{flex:1 1 100%;min-width:0;font-size:16px;}
  /* 只读信息行："编辑"链接留在第二行右侧 */
  .profile-edit-link{flex:0 0 auto;margin-left:auto;padding:6px 4px;}
  /* 开关行加高 */
  .profile-toggle-row{min-height:var(--m-touch-sm);height:auto;}
  .profile-toggle-label{font-size:var(--m-fs);}
  /* 密码强度条跟随整宽 */
  .profile-pwd-bar{flex:1 1 auto;width:auto;max-width:220px;}

  /* App 发布：版本名/版本码同属一行，该行标签不独占 */
  .profile-form-row:has(#arVersionName) .profile-form-label{flex:0 0 auto;}
  #arVersionName,#arVersionCode{flex:1 1 110px !important;min-width:0 !important;}
  #arReleaseNotes{flex:1 1 100%;font-size:16px;}
  #arApkFile{flex:1 1 100%;font-size:16px !important;}
  /* 免打扰时间输入拉满整行、字号 16 防放大 */
  #noticeDndStart,#noticeDndEnd{flex:1 1 100% !important;max-width:none;width:100%;font-size:16px;}

  /* 按钮组：按钮等宽整行、标准触控高（表格内小按钮不受影响） */
  .profile-btn-group{gap:var(--m-space);}
  .profile-btn-group .profile-btn{
    flex:1 1 0;min-width:0;min-height:var(--m-touch);padding:0 12px;
    font-size:var(--m-fs);display:inline-flex;align-items:center;justify-content:center;
  }

  /* 子账号表：表格 min-width 已由第 7 段给 640，这里补卡片级横滑容器 */
  .profile-card:has(> .admin-user-table){overflow-x:auto;-webkit-overflow-scrolling:touch;}

  /* 磁盘清理：条目允许换行加高；汇总块上下堆叠 */
  .disk-clean-item{height:auto;min-height:var(--m-touch-sm);flex-wrap:wrap;padding:8px 10px;}
  .disk-summary{flex-direction:column;align-items:flex-start;gap:4px;padding:var(--m-space);}

  /* 操作日志筛选：六项改两列网格；重置/查询整行均分 */
  .audit-filter-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--m-space);}
  .audit-filter-row .filter-item{flex:none;min-width:0;min-height:var(--m-touch);}
  .audit-filter-actions{display:grid;grid-template-columns:1fr 1fr;gap:var(--m-space);margin:var(--m-space) 0 2px;}
  .audit-filter-actions button{height:var(--m-touch);}

  /* 编辑邮箱/手机弹窗：居中 → 底部 Sheet */
  .profile-edit-modal{align-items:flex-end !important;justify-content:stretch !important;}
  .profile-edit-panel{
    width:100% !important;max-width:100% !important;
    border-radius:var(--m-r-card) var(--m-r-card) 0 0 !important;
    max-height:92dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;
  }

  /* ---------- 9. 弹窗：居中弹层 → 底部 Sheet ---------- */
  .tool-modal,
  #formulaModal,#contractModal,
  #editLedgerModal,#addLedgerModal,#consumableModal,#consumableCategoryModal,
  #customerEditModal,#customerDetailModal,#orderShareModal{
    align-items:flex-end !important;
    justify-content:stretch !important;
    padding:0 !important;
  }
  .tool-modal > .tool-modal-panel{
    width:100% !important;max-width:100% !important;
    max-height:92dvh !important;
    border-radius:var(--m-r-card) var(--m-r-card) 0 0 !important;
  }
  .tool-modal-body{overflow-y:auto;-webkit-overflow-scrolling:touch;}
  /* 底部按钮条（GitHub Mobile 形态）：按钮整宽 44、竖排 8px 间距，不再挤在右侧；
     报价单 footer 为多导出操作，保持横排但补足 44 高 */
  .tool-modal .tool-modal-footer{
    flex-direction:column;align-items:stretch;justify-content:flex-start;
    gap:8px;padding:var(--m-space);
  }
  .tool-modal .tool-modal-footer > button{
    width:100%;min-height:var(--m-touch);
    display:inline-flex;align-items:center;justify-content:center;
  }
  #quoteModal .tool-modal-footer{flex-direction:row;align-items:center;}
  #quoteModal .tool-modal-footer > button{flex:1 1 0;min-width:0;width:auto;}
  #quoteModal .tool-modal-footer > div{flex:0 0 12px;}
  /* 公式弹窗：恢复默认 / 取消 / 保存 整宽竖排 */
  .formula-btn-bar{flex-direction:column;gap:8px;}
  .formula-btn-bar button{
    width:100%;min-height:var(--m-touch);
    display:inline-flex;align-items:center;justify-content:center;
  }
  /* 通用确认框：保持居中，按钮整宽 44 竖排 */
  .confirm-modal-footer{flex-direction:column;gap:8px;}
  .confirm-modal-footer .btn{
    width:100%;min-height:var(--m-touch);padding:0 16px;
    display:inline-flex;align-items:center;justify-content:center;
  }
  .formula-panel,.contract-panel{
    width:100% !important;max-width:100% !important;
    max-height:92dvh;border-radius:var(--m-r-card) var(--m-r-card) 0 0;
  }
  #editLedgerModal > div,#addLedgerModal > div,#consumableModal > div,
  #consumableCategoryModal > div,#customerEditModal > div,
  #customerDetailModal > div,#orderShareModal > div{
    width:100%;max-width:100%;
    max-height:92dvh;overflow-y:auto;
    border-radius:var(--m-r-card) var(--m-r-card) 0 0;
  }
  #formulaTextarea{height:220px;}
  #contractText{min-height:240px;}
  /* 确认框：信息轻量，保持居中，仅收窄 */
  .confirm-modal-box{width:calc(100vw - 32px);max-width:360px;}

  /* 报价单：结构复杂，手机直接全屏，编辑区/预览上下分栏 */
  #quoteModal > .tool-modal-panel{
    height:100dvh !important;max-height:100dvh !important;
    border-radius:0 !important;
  }
  #quoteModal .quote-main-split{
    display:flex !important;flex-direction:column;
  }
  #quoteModal .quote-splitter{display:none;}
  #quoteModal .quote-form-wrap{
    min-width:0 !important;max-width:none !important;width:100% !important;
    flex:0 0 auto;max-height:42dvh;border-right:none !important;
    border-bottom:1px solid #E5E7EB;
  }
  #quoteModal .quote-preview-wrap{flex:1 1 auto;min-height:0;}

  /* ---------- 10. 通知抽屉 / 聊天面板 ---------- */
  .drawer-mask{top:calc(56px + var(--safe-top));}
  .notice-drawer{
    width:100vw;max-width:380px;
    top:calc(56px + var(--safe-top));
  }
  .chatbot-panel{
    left:8px;right:8px;bottom:calc(8px + env(safe-area-inset-bottom,0px));
    width:auto;height:70dvh;max-height:none;
  }

  /* ---------- 10b. 内联小按钮补触控档（桌面内联 padding:4px 12px，手机约 26px 高） ---------- */
  /* 合同模板"添加字段"、系统设置 App 发布"刷新"：抬到 40 紧凑触控高 */
  button[onclick="ccAddFieldRow()"],
  button[onclick="arLoadList()"]{
    min-height:var(--m-touch-sm) !important;
    padding:0 16px !important;font-size:var(--m-fs) !important;
    display:inline-flex;align-items:center;justify-content:center;
  }

  /* ---------- 12. 新一轮手机排版精修（390px 视口实测问题） ---------- */
  /* 12-1 弹窗表单强制单列：
     根因——"备注/售后原因"等子项内联 grid-column:span 2，在桌面双列网格正常，
     手机端网格改为单列后，span 2 会造出第 2 条隐式列，自动布局把其余字段
     两两塞进两条轨道（实测左列被压到 104px、"自动生成"被截断）。
     弹窗内网格统一单列、子项跨列一律取消（内联样式需 !important 覆盖） */
  .tool-modal .filter-form-grid,
  #addLedgerModal .filter-form-grid,
  #editLedgerModal .filter-form-grid,
  #consumableModal .filter-form-grid,
  #consumableCategoryModal .filter-form-grid,
  #customerEditModal .filter-form-grid{
    grid-template-columns:1fr !important;
  }
  .tool-modal .filter-form-grid > *,
  #addLedgerModal .filter-form-grid > *,
  #editLedgerModal .filter-form-grid > *,
  #consumableModal .filter-form-grid > *,
  #consumableCategoryModal .filter-form-grid > *,
  #customerEditModal .filter-form-grid > *{
    grid-column:auto !important;
  }
  /* 12-2 弹窗底部按钮条：右下角小钮 → 整宽竖排 44 触控高 */
  .contract-btn-bar{flex-direction:column;gap:8px;}
  .contract-btn-bar > button{
    width:100%;min-height:var(--m-touch);height:auto;
    display:inline-flex;align-items:center;justify-content:center;
  }
  /* 12-3 客户/耗材页头：仅余 ••• 钮时让其整行右对齐，不再孤悬左上角 */
  #page-customer .page-header.js-actions .page-header-actions,
  #page-consumable .page-header.js-actions .page-header-actions{
    flex:1 1 100%;justify-content:flex-end;
  }
  /* 12-4 售后空状态：图标与文字纵向居中排列（JS 以内联 display:block 控制显隐，
     属性选择器仅在显示态翻成 flex；display:none 隐藏态不受影响） */
  #asHistoryEmpty{
    flex-direction:column;align-items:center;justify-content:center;gap:10px;
  }
  #asHistoryEmpty i{margin-bottom:0 !important;}
  #asHistoryEmpty[style*="display: block"],
  #asHistoryEmpty[style*="display:block"]{display:flex !important;}
  /* 12-5 售后分页：统计独占一行，翻页钮下一行均分，页码居中 */
  #page-aftersale .pagination-card{flex-wrap:wrap;row-gap:8px;}
  #page-aftersale .pagination-card > div{flex:1 1 100%;}
  #page-aftersale .pagination-card > div:last-child{justify-content:space-between;}
  #page-aftersale .pagination-card .page-btn{
    flex:1 1 0;min-width:0;min-height:var(--m-touch-sm);
    display:inline-flex;align-items:center;justify-content:center;
  }
  /* 12-6 客户空态：空 td 在 640px 宽表内居中会偏到屏外，手机端改左对齐 */
  #page-customer td.notice-empty{text-align:left !important;padding:24px 14px !important;}
  /* 12-7 文件管理底部分页：隐藏每页条数选择器与跳页输入，只留翻页钮/页码/统计 */
  .fm-page-size,.fm-page-jump{display:none;}
}

/* ---------- 11. ≤480px 小屏微调 ---------- */
@media (max-width:480px){
  /* 小屏紧凑档：页面边距 8、卡片内距 10（同页内保持这一套，不再出现第三种尺寸） */
  .sidebar-brand .brand-text{font-size:12px;}
  .page-body{padding:8px;}
  .dashboard-kpi-card{padding:10px;}
  .dashboard-kpi-value{font-size:20px;}
  .lt-stat-card{padding:10px;}
  /* 小屏工序节点稍收窄（仍须容下4字工序名+备注钮，防止加号被挤偏） */
  .lt-tl-node{min-width:72px;}
  .lt-tl-line{flex-basis:14px;min-width:14px;}
}

/* 抽屉/Sheet 动效遵循系统"减少动态效果"设置 */
@media (max-width:768px) and (prefers-reduced-motion:reduce){
  .sidebar{transition:none !important;}
  .tool-modal > .tool-modal-panel,
  .formula-panel,.contract-panel{animation:none !important;}
}
