/* ===== styles.css (31378B) ===== */

:root{
  --blue:#185FA5;--blue2:#0C447C;--blue-l:#E6F1FB;--teal:#0F6E56;--teal-l:#E1F5EE;
  --amber:#854F0B;--amber-l:#FAEEDA;--red:#A32D2D;--red-l:#FCEBEB;--pink:#993556;
  --gray:#5F5E5A;--gray-l:#F1EFE8;--txt:#2C2C2A;--txt2:#444441;--border:#D3D1C7;
  --bg2:#F7F5EF;--shadow:0 2px 10px rgba(12,68,124,.08);
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{font-family:"Microsoft YaHei","PingFang SC",-apple-system,sans-serif;background:var(--bg,#f6f8fb);color:var(--txt);font-size:14px;line-height:1.6}
button{font-family:inherit;cursor:pointer;border:none;background:none}
input,select,textarea{font-family:inherit;font-size:14px;border:1px solid var(--border);border-radius:8px;padding:8px 10px;outline:none;background:var(--card,#fff);color:var(--txt)}
input:focus,select:focus,textarea:focus{border-color:var(--blue)}
.hidden{display:none!important}
/* ---------- 登录页 ---------- */
#loginPage{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--login-a,#0C447C),var(--login-b,#185FA5) 60%,var(--login-c,#1D9E75) 130%);padding:20px}
.login-card{background:var(--card,#fff);border-radius:18px;padding:40px 42px;width:100%;max-width:420px;box-shadow:0 20px 60px rgba(0,0,0,.25)}
.login-card h1{font-size:24px;color:var(--blue2);margin-bottom:6px}
.login-card .sub{color:var(--gray);font-size:13px;margin-bottom:26px}
.role-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:22px}
.role-btn{border:1px solid var(--border);border-radius:12px;padding:14px 12px;text-align:center;transition:all .15s;background:var(--card,#fff)}
.role-btn:hover{border-color:var(--blue);background:var(--blue-l)}
.role-btn .ic{font-size:22px;display:block;margin-bottom:4px}
.role-btn .nm{font-weight:600;font-size:14px;color:var(--txt)}
.role-btn .dt{font-size:11px;color:var(--gray)}
.role-btn.active{border-color:var(--blue);background:var(--blue-l);box-shadow:0 0 0 2px rgba(24,95,165,.15)}
.login-btn{width:100%;background:var(--blue);color:#fff;border-radius:10px;padding:12px;font-size:15px;font-weight:600;transition:.15s}
.login-btn:hover{background:var(--blue2)}
.demo-tip{margin-top:14px;font-size:12px;color:var(--gray);text-align:center}
/* ---------- 主框架 ---------- */
#app{display:none;height:100vh;flex-direction:column}
.topbar{height:56px;background:var(--topbar,#fff);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:14px;flex-shrink:0}
.topbar .logo{font-size:17px;font-weight:700;color:var(--blue2);display:flex;align-items:center;gap:8px}
.topbar .logo .dot{width:10px;height:10px;border-radius:3px;background:var(--teal);display:inline-block}
.topbar .mode-switch{margin-left:auto;display:flex;border:1px solid var(--border);border-radius:8px;overflow:hidden}
.topbar .mode-switch button{padding:6px 14px;font-size:13px;color:var(--gray)}
.topbar .mode-switch button.active{background:var(--blue);color:#fff}
.topbar .user-chip{background:var(--blue-l);color:var(--blue2);border-radius:999px;padding:5px 14px;font-size:13px;font-weight:600;white-space:nowrap}
.topbar .logout-btn{color:var(--gray);font-size:13px;padding:6px 10px;border-radius:8px}
.topbar .logout-btn:hover{background:var(--gray-l);color:var(--red)}
.org-sel{height:32px;border:1px solid var(--border);border-radius:8px;padding:0 8px;font-size:13px;color:var(--blue2);background:var(--card,#fff);cursor:pointer;max-width:170px}
/* ---------- 顶栏窄屏适配(修复窄窗口/平板竖屏横向溢出) ---------- */
@media(max-width:1180px){
  .topbar{padding:0 12px;gap:8px}
  .topbar .logo{font-size:15px;white-space:nowrap}
  .topbar .mode-switch button{padding:6px 10px;font-size:12px}
  .topbar .user-chip{max-width:190px;overflow:hidden;text-overflow:ellipsis}
  .org-sel{max-width:130px}
}
@media(max-width:920px){
  .topbar .mode-switch{display:none}          /* 窄屏隐藏 PC/手机 切换,移动端仍可经手机/PDA 入口 */
  .topbar .user-chip{max-width:150px;font-size:12px;padding:5px 10px}
  .org-sel{max-width:110px;font-size:12px}
}
@media(max-width:640px){
  .topbar{padding:0 8px;gap:6px}
  .topbar .logo{font-size:13px}
  .topbar>div[style*="font-size:12px"]{display:none}   /* 隐藏「系统版 v2.0」 */
  .topbar .user-chip{max-width:96px;font-size:11.5px;padding:4px 8px}
  .org-sel{max-width:80px}
  .content{padding:14px 12px}
  .sidebar{width:180px}
}
@media(max-width:480px){
  .topbar .org-sel{display:none}             /* 极端窄屏隐藏园区选择(移动端有独立园区选择) */
  .topbar .user-chip{max-width:110px}
  .content{padding:12px 10px}
}
.m-org{display:flex;align-items:center;gap:6px;margin-top:8px}
.m-org select{flex:1;padding:6px 8px;border-radius:8px;border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.15);color:#fff;font-size:12px}
.m-org select option{color:#222}
.main{display:flex;flex:1;min-height:0}
/* 侧边栏 */
.sidebar{width:224px;background:var(--side,#fff);border-right:1px solid var(--border);padding:14px 10px;overflow-y:auto;flex-shrink:0}
/* 一二级分组导航 */
.nav-group{margin-bottom:4px}
.nav-group-h{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:10px;cursor:pointer;user-select:none;transition:.15s}
.nav-group-h:hover{background:var(--gray-l)}
.nav-group-h.open{background:linear-gradient(135deg,var(--blue-l),#F4FAFF)}
.nav-group-h .ng-ic{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
.nav-group-h .ng-t{font-size:13.5px;font-weight:600;color:var(--txt2);flex:1}
.nav-group-h .ng-arrow{font-size:11px;color:var(--gray);transition:transform .18s;opacity:.7}
.nav-group-h.open .ng-arrow{color:var(--blue2)}
.nav-group-h .badge{margin-left:auto;background:var(--red);color:#fff;font-size:11px;border-radius:999px;padding:0 7px;min-width:18px;text-align:center}
.nav-group-body{padding:3px 0 6px;margin-left:12px;border-left:1px solid var(--border);padding-left:12px;animation:navIn .16s ease}
@keyframes navIn{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
/* 独立首页入口(驾驶舱)—— 置顶于分组之上,不随手风琴收起 */
.sidebar .nav-home{display:flex;align-items:center;gap:10px;margin:2px 0 12px;padding:10px 12px;border-radius:11px;cursor:pointer;user-select:none;font-size:14px;font-weight:700;color:var(--blue2);background:linear-gradient(135deg,var(--blue-l,#EAF4FF),#EAF4FF);border:1px solid var(--blue-l,#CFE3FB);transition:.15s}
.sidebar .nav-home:hover{background:linear-gradient(135deg,#E3F0FF,#D6E9FF);box-shadow:0 2px 8px rgba(24,95,165,.12)}
.sidebar .nav-home .nh-ic{width:30px;height:30px;border-radius:9px;background:var(--blue,#185FA5);color:#fff;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
.sidebar .nav-home .nh-t{flex:1}
.sidebar .nav-home.active{background:linear-gradient(135deg,var(--blue,#185FA5),#1A6FC4);color:#fff;border-color:var(--blue,#185FA5)}
.sidebar .nav-home.active .nh-ic{background:rgba(255,255,255,.22);color:#fff}
/* 多标签页(内容区顶部:可切换/关闭,消息标签带未读徽章) */
.tab-bar{display:flex;align-items:center;gap:6px;padding:9px 26px;background:var(--bg2,#F3F6FB);border-bottom:1px solid var(--border);margin:-22px -26px 16px;overflow-x:auto;position:sticky;top:0;z-index:6}
.tab-bar::-webkit-scrollbar{height:0}
.tab{display:flex;align-items:center;gap:7px;padding:7px 9px 7px 14px;border-radius:8px;background:var(--card,#fff);border:1px solid var(--border);font-size:13px;color:var(--gray);cursor:pointer;user-select:none;white-space:nowrap;transition:.12s;flex-shrink:0}
.tab:hover{color:var(--blue2);border-color:var(--blue-l)}
.tab.active{color:var(--blue2);font-weight:600;border-color:var(--blue-l);box-shadow:0 1px 4px rgba(24,95,165,.10)}
.tab .tx{max-width:130px;overflow:hidden;text-overflow:ellipsis}
.tab .badge{background:var(--red);color:#fff;font-size:11px;border-radius:999px;padding:0 7px;min-width:18px;text-align:center}
.tab .x{width:16px;height:16px;border-radius:99px;display:inline-flex;align-items:center;justify-content:center;font-size:12px;line-height:1;color:var(--gray);flex-shrink:0}
.tab .x:hover{background:var(--red);color:#fff}
body.theme-dark .tab-bar{background:#111826}
/* 标签页右键/长按菜单 */
.ctx-menu{position:fixed;z-index:1300;min-width:140px;background:var(--card,#fff);border:1px solid var(--border);border-radius:10px;box-shadow:0 12px 32px rgba(0,0,0,.18);padding:5px;color:var(--text,#222)}
.ctx-i{padding:8px 12px;border-radius:7px;font-size:13px;cursor:pointer;white-space:nowrap}
.ctx-i:hover{background:var(--blue-l);color:var(--blue2)}
.ctx-sep{height:1px;background:var(--border);margin:4px 2px}
body.theme-dark .ctx-menu{background:#1b2230;color:#e8edf5}
body.theme-dark .ctx-i:hover{background:#2b3444;color:#fff}
.sidebar .menu-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;color:var(--txt2);font-size:13.5px;cursor:pointer;margin-bottom:1px;transition:.12s;user-select:none;position:relative}
.sidebar .menu-item:hover{background:var(--blue-l);color:var(--blue2)}
.sidebar .menu-item.active{background:var(--blue-l);color:var(--blue2);font-weight:600}
.sidebar .menu-item .mi-dot{width:5px;height:5px;border-radius:99px;background:var(--border);flex-shrink:0;transition:.15s}
.sidebar .menu-item:hover .mi-dot{background:var(--blue)}
.sidebar .menu-item.active .mi-dot{background:var(--blue);box-shadow:0 0 0 3px rgba(24,95,165,.15)}
.sidebar .menu-item.active::after{content:'';position:absolute;left:-1px;top:20%;height:60%;width:3px;border-radius:99px;background:var(--blue)}
.sidebar .menu-item .badge{margin-left:auto;background:var(--red);color:#fff;font-size:11px;border-radius:999px;padding:0 7px;min-width:18px;text-align:center}
/* 内容区 */
.content{flex:1;overflow-y:auto;padding:22px 26px;min-width:0}
.page{display:none}
.page.active{display:block}
.page-title{font-size:20px;font-weight:700;color:var(--blue2);margin-bottom:4px}
.page-sub{color:var(--gray);font-size:13px;margin-bottom:18px}
/* 卡片与统计 */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:18px}
.stat-card{background:var(--card,#fff);border:1px solid var(--border);border-radius:12px;padding:16px 18px;position:relative;overflow:hidden}
.stat-card .v{font-size:26px;font-weight:700;color:var(--txt)}
.stat-card .l{font-size:13px;color:var(--gray);margin-top:2px}
.stat-card .tag{position:absolute;top:14px;right:14px;font-size:11px;padding:2px 8px;border-radius:999px}
.panel{background:var(--card,#fff);border:1px solid var(--border);border-radius:12px;padding:18px 20px;margin-bottom:16px}
.panel .p-title{font-size:15px;font-weight:600;color:var(--blue2);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.panel .p-title .dot{width:8px;height:8px;border-radius:2px;background:var(--blue);display:inline-block}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:900px){.row2{grid-template-columns:1fr}}
/* 表格 */
.tbl-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px}
table.tbl{width:100%;border-collapse:collapse;font-size:13px;background:var(--card,#fff)}
.tbl th{background:var(--blue-l);color:var(--blue2);text-align:left;padding:10px 12px;font-weight:600;white-space:nowrap;font-size:12.5px}
.tbl td{padding:9px 12px;border-top:1px solid #edf0f4;color:var(--txt2);vertical-align:middle}
.tbl tr:hover td{background:var(--hover,#fafcff)}
/* 徽标 */
.pill{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11.5px;white-space:nowrap;font-weight:500}
.p-blue{background:var(--blue-l);color:var(--blue2)}.p-teal{background:var(--teal-l);color:var(--teal)}
.p-amber{background:var(--amber-l);color:var(--amber)}.p-red{background:var(--red-l);color:var(--red)}
.p-gray{background:var(--gray-l);color:var(--gray)}.p-pink{background:#FBEAF0;color:var(--pink)}
/* 按钮 */
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 15px;border-radius:8px;font-size:13px;font-weight:500;transition:.13s;border:1px solid transparent}
.btn-primary{background:var(--blue);color:#fff}.btn-primary:hover{background:var(--blue2)}
.btn-outline{border-color:var(--border);color:var(--blue2);background:var(--card,#fff)}.btn-outline:hover{border-color:var(--blue)}
.btn-teal{background:var(--teal);color:#fff}.btn-teal:hover{background:#0b5544}
.btn-danger{background:var(--red);color:#fff}
.btn-sm{padding:4px 10px;font-size:12px;border-radius:6px}
.btn-ghost{color:var(--blue);font-size:12.5px;padding:4px 8px;border-radius:6px}
.btn-ghost:hover{background:var(--blue-l)}
.btn-ghost.red{color:var(--red)}.btn-ghost.red:hover{background:var(--red-l)}
/* 过滤条 */
.fbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.fbar select{min-width:110px}
.fbar .spacer{flex:1}
/* 维修工单操作指引 */
.bs-guide{font-size:12px;line-height:1.9;color:var(--txt2);background:var(--amber-l,#fff7e6);border:1px solid #ffe1a8;border-left:4px solid var(--amber,#FFB443);border-radius:8px;padding:8px 14px;margin:-4px 0 14px}
.bs-guide b{color:var(--blue2)}
/* IoT 接入配置说明块 */
.iot-doc{margin-top:12px;border:1px solid var(--border);border-radius:10px;background:var(--bg2);padding:10px 12px;font-size:12.5px;line-height:1.9}
.iot-doc-h{font-weight:700;color:var(--blue2);margin-bottom:6px}
.iot-doc-row{padding:1px 0}
.iot-doc code{background:rgba(30,80,170,.1);color:var(--blue2);border-radius:4px;padding:1px 6px;font-family:monospace;font-size:11.5px}
/* 基础数据字典 */
.dict-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:12px;margin-bottom:14px}
.dict-card{background:var(--card,#fff);border:1px solid var(--border);border-radius:12px;padding:14px 12px;cursor:pointer;transition:.15s;text-align:center}
.dict-card:hover{border-color:var(--blue);box-shadow:0 6px 18px rgba(30,80,170,.1);transform:translateY(-2px)}
.dict-ic{font-size:24px;margin-bottom:6px}
.dict-nm{font-size:13px;font-weight:600;color:var(--blue2)}
.dict-cnt{font-size:11.5px;color:var(--gray);margin-top:4px}
.dict-tip{background:var(--blue-l);border-radius:10px;padding:10px 14px;font-size:12.5px;color:var(--blue2)}
.dict-indent{color:var(--gray)}
.dict-swatch{display:inline-block;width:22px;height:14px;border-radius:4px;border:1px solid rgba(0,0,0,.12);vertical-align:middle}
.dict-card{display:flex;flex-direction:column;align-items:center;gap:2px}
.dict-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
@media(max-width:640px){.dict-grid{grid-template-columns:repeat(3,1fr);gap:8px}.dict-card{padding:10px 6px}.dict-ic{font-size:19px}.dict-nm{font-size:11.5px}.dict-cnt{font-size:10px}}
/* 基础数据表格内嵌小按钮 */
.btn-ghost.danger{color:var(--red)}
.btn-ghost.danger:hover{background:var(--red-l)}
/* 表单 */
.fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px 14px}
.fitem label{display:block;font-size:12.5px;color:var(--gray);margin-bottom:4px;font-weight:500}
.fitem input,.fitem select{width:100%}
.fitem textarea{width:100%;resize:vertical;min-height:56px;line-height:1.6;padding:7px 10px;border:1px solid var(--border);border-radius:8px;font-size:13px;font-family:inherit;background:var(--card,#fff);color:var(--txt)}
.fitem textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-l)}
/* 表单弹窗:6列基座,span 2=三分之一行 / span 3=半行,全宽项用 grid-column:1/-1 */
.fgrid-form{grid-template-columns:repeat(6,minmax(0,1fr));gap:10px 12px}
.fgrid-form .fg-2{grid-column:span 3}
.fgrid-form .fg-3{grid-column:span 2}
/* 分区标题(跨整行) */
.fsec{grid-column:1/-1;display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--blue2);margin:8px 0 0;letter-spacing:.5px}
.fsec::before{content:"";width:3px;height:12px;border-radius:2px;background:var(--blue);flex:none}
.fsec:first-child{margin-top:0}
/* 弹窗底部必填提示(靠左,按钮保持靠右) */
.m-foot .m-foot-tip{margin-right:auto;font-size:12px;color:var(--gray)}
/* 空日期输入的 "年-月-日" 占位置灰化,降低视觉噪音 */
input[type=date]:invalid::-webkit-datetime-edit{color:var(--gray)}
/* 模态框 */
.modal-mask{position:fixed;inset:0;background:rgba(12,44,84,.45);z-index:100;display:none;align-items:flex-start;justify-content:center;padding:60px 16px;overflow-y:auto}
.modal-mask.show{display:flex}
.modal{background:var(--card,#fff);border-radius:14px;width:100%;max-width:560px;padding:24px 26px;box-shadow:0 20px 50px rgba(0,0,0,.25)}
.modal.modal-lg{max-width:860px}
.modal.modal-md{max-width:680px}
.modal h3{font-size:17px;color:var(--blue2);margin-bottom:16px}
.modal .m-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
/* toast */
#toast{position:fixed;top:70px;left:50%;transform:translateX(-50%) translateY(-10px);background:var(--blue2);color:#fff;padding:10px 22px;border-radius:10px;font-size:13.5px;z-index:200;opacity:0;transition:.25s;pointer-events:none;box-shadow:0 8px 24px rgba(0,0,0,.2)}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
#toast.err{background:var(--red)}
/* 图表 */
.chart-box{position:relative;width:100%}
.chart-box svg{width:100%;height:auto;display:block}
.legend{display:flex;flex-wrap:wrap;gap:14px;font-size:12px;color:var(--gray);margin-top:6px}
.legend span{display:flex;align-items:center;gap:5px}
.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}
/* 看板 */
.kanban{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.kb-col{background:var(--gray-l);border-radius:10px;padding:10px;min-height:120px}
.kb-col h4{font-size:13px;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.kb-col h4 .cnt{background:#fff;border-radius:999px;padding:0 8px;font-size:11px;color:var(--gray)}
.kb-item{background:var(--card,#fff);border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:8px;font-size:12.5px}
.kb-item b{color:var(--txt);font-size:13px}
.kb-item .meta{color:var(--gray);font-size:11.5px;margin-top:4px}
.kb-item .ops{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}
/* 任务步骤 */
.steps{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12.5px;color:var(--gray)}
.steps .st{background:var(--gray-l);padding:3px 10px;border-radius:999px;white-space:nowrap}
.steps .st.done{background:var(--teal-l);color:var(--teal)}
.steps .st.now{background:var(--blue-l);color:var(--blue2);font-weight:600}
/* 日周月 */
.rec-card{border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:10px;background:var(--card,#fff)}
.rec-card .rc-h{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.rec-card .rc-t{font-weight:600;color:var(--txt)}
.rec-card .rc-b{font-size:13px;color:var(--txt2)}
/* 消息 */
.msg-item{display:flex;gap:12px;padding:12px 4px;border-bottom:1px solid #edf0f4;align-items:flex-start}
.msg-item:last-child{border-bottom:none}
.msg-item .mi-ic{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0}
.msg-item .mi-t{font-weight:600;font-size:13.5px}
.msg-item .mi-c{font-size:12.5px;color:var(--gray)}
.msg-item .mi-tm{font-size:11px;color:var(--gray);margin-left:auto;white-space:nowrap}
/* 移动端 */
#mobileApp{display:none;max-width:460px;margin:0 auto;min-height:100vh;background:var(--bg,#f6f8fb);flex-direction:column}
.m-top{background:linear-gradient(135deg,#0C447C,#185FA5);color:#fff;padding:16px 18px 14px}
.m-top .m-user{font-size:13px;opacity:.85}
.m-top .m-title{font-size:19px;font-weight:700;margin-top:2px}
.m-body{flex:1;padding:14px 14px 90px;overflow-y:auto}
.m-nav{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:460px;background:var(--card,#fff);border-top:1px solid var(--border);display:flex;z-index:50;padding-bottom:env(safe-area-inset-bottom)}
.m-nav button{flex:1;padding:9px 0 7px;font-size:11px;color:var(--gray);display:flex;flex-direction:column;align-items:center;gap:2px}
.m-nav button .mi{font-size:19px}
.m-nav button.active{color:var(--blue2)}
.m-card{background:var(--card,#fff);border:1px solid var(--border);border-radius:12px;padding:14px;margin-bottom:12px}
.m-card .mc-h{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.m-card .mc-t{font-weight:600;font-size:14px;color:var(--txt)}
.m-card .mc-b{font-size:12.5px;color:var(--gray)}
.m-btn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;padding:12px;border-radius:10px;font-size:14px;font-weight:600}
.m-btn.primary{background:var(--blue);color:#fff}.m-btn.teal{background:var(--teal);color:#fff}.m-btn.outline{border:1px solid var(--border);color:var(--blue2);background:var(--card,#fff)}.m-btn.danger{background:var(--red);color:#fff}
.m-check{display:flex;align-items:center;gap:10px;border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:10px;background:var(--card,#fff)}
.m-check .st{width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0;border:1.5px solid var(--border);color:transparent}
.m-check.ok .st{background:var(--teal-l);border-color:var(--teal);color:var(--teal)}
.m-check.bad .st{background:var(--red-l);border-color:var(--red);color:var(--red)}
.m-check .txt{font-size:13px;color:var(--txt)}
.m-check .std{font-size:11.5px;color:var(--gray)}
.m-check .badge{margin-left:auto;font-size:11px}
.scan-box{background:linear-gradient(135deg,#0C447C,#185FA5);border-radius:14px;padding:20px;text-align:center;color:#fff;margin-bottom:14px}
.scan-box .sc-ic{font-size:38px;margin-bottom:6px}
.scan-box .sc-t{font-size:15px;font-weight:600}
.scan-box .sc-b{font-size:12px;opacity:.8;margin-bottom:12px}
.scan-box input{width:80%;background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.35);color:#fff;text-align:center;font-size:16px;letter-spacing:2px;padding:10px;border-radius:10px}
.scan-box input::placeholder{color:rgba(255,255,255,.5)}
.m-seg{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}
.m-seg button{padding:6px 13px;border-radius:999px;font-size:12.5px;background:var(--card,#fff);border:1px solid var(--border);color:var(--gray)}
.m-seg button.active{background:var(--blue);border-color:var(--blue);color:#fff}
.offline-tip{position:fixed;top:60px;left:50%;transform:translateX(-50%);background:var(--amber);color:#fff;padding:6px 16px;border-radius:999px;font-size:12px;z-index:60;display:none}
.qr-box{background:var(--gray-l);border-radius:10px;padding:14px;text-align:center;margin:10px 0}
.qr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:10px;margin-top:10px}
.qr-tile{background:var(--card,#fff);border:1px solid var(--border);border-radius:8px;padding:8px;text-align:center;font-size:10.5px;color:var(--gray)}
.qr-tile .qt-code{font-family:monospace;color:var(--blue2);font-weight:700;font-size:12px;display:block;letter-spacing:.5px}
/* 打印 */
@media print{
  body *{visibility:hidden}
  #printArea,#printArea *{visibility:visible}
  #printArea{position:absolute;inset:0;background:#fff;padding:20px}
}
#printArea{display:none}
/* 滚动条 */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--border,#c8d3e0);border-radius:99px}
::-webkit-scrollbar-track{background:transparent}
.empty-tip{text-align:center;color:var(--gray);padding:34px 10px;font-size:13.5px}
/* ---------- 附件 ---------- */
.att-box{border:1px dashed var(--border);border-radius:8px;padding:8px 10px;background:var(--hover,#fbfcfe);min-height:40px}
.att-empty{color:var(--gray);font-size:12.5px;padding:4px 2px}
.att-item{display:flex;align-items:center;gap:8px;padding:5px 4px;border-bottom:1px solid #eef1f5;font-size:13px}
.att-item:last-child{border-bottom:none}
.att-item .att-ic{font-size:15px;flex-shrink:0}
.att-item .att-nm{color:var(--blue);text-decoration:none;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att-item .att-nm:hover{text-decoration:underline}
.att-item .att-sz{color:var(--gray);font-size:11.5px;flex-shrink:0}
.att-item .att-op{color:var(--red);cursor:pointer;padding:0 4px;font-size:12px;flex-shrink:0}
.att-actions{margin-top:7px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.att-tip{font-size:11.5px;color:var(--gray)}
.att-chip{display:inline-flex;align-items:center;gap:4px;background:var(--blue-l);color:var(--blue2);border-radius:6px;padding:2px 8px;font-size:12px;text-decoration:none;margin:2px 4px 2px 0}
.att-chip:hover{background:#d5e6f7}
/* C5 列表缩略图:图片附件在列表中以缩略图呈现,点击才加载原图(E4 预览层) */
.att-thumb{height:96px;max-width:160px;border-radius:6px;object-fit:cover;cursor:pointer;display:inline-block;vertical-align:middle;border:1px solid var(--border);background:#fff;margin:2px 4px 2px 0}
.att-item .att-thumb{height:64px;max-width:96px;margin:0 6px 0 0}
/* 附件一览(只读弹窗):纵向大按钮,便于手机点开原文 */
.att-open-list{display:flex;flex-direction:column;gap:8px;margin-bottom:4px}
.att-open-list .att-chip{width:100%;justify-content:flex-start;padding:10px 12px;font-size:13px;margin:0;border:1px solid var(--border);background:var(--card,#fff);color:var(--txt)}
.att-open-list .att-chip:hover{background:var(--blue-l);border-color:var(--blue);color:var(--blue2)}
.att-open-list .att-chip>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 法规详情(只读弹窗) */
.ld-pills{display:flex;gap:6px;margin:-8px 0 12px;flex-wrap:wrap}
.ld-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--border);border:1px solid var(--border);border-radius:8px;overflow:hidden;margin-bottom:14px}
.ld-meta{background:var(--card,#fff);padding:9px 12px;display:flex;align-items:baseline;gap:8px;font-size:12.5px}
.ld-meta>span{color:var(--gray);flex:none}
.ld-meta>b{color:var(--txt);font-weight:600;overflow:hidden;text-overflow:ellipsis}
.ld-sec{font-size:12.5px;font-weight:600;color:var(--blue2);margin:0 0 6px;display:flex;align-items:center;gap:7px}
.ld-sec::before{content:"";width:3px;height:12px;border-radius:2px;background:var(--blue);flex:none}
.ld-text{font-size:13px;line-height:1.8;color:var(--txt2);background:var(--hover,#fbfcfe);border-radius:8px;padding:10px 12px;margin-bottom:14px;white-space:pre-wrap}
.att-readonly{border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:var(--hover,#fbfcfe)}
/* 上传进度条 */
.att-item.att-up{background:#f4f8fd;border-radius:6px}
.att-item.att-up .att-nm{color:var(--txt2)}
.att-bar{flex:1;min-width:70px;height:7px;background:#e3e9f1;border-radius:99px;overflow:hidden;margin:0 4px}
.att-bar-in{display:block;height:100%;width:0;background:linear-gradient(90deg,#185FA5,#1D9E75);border-radius:99px;transition:width .15s}
.att-pct{font-variant-numeric:tabular-nums;min-width:44px;text-align:right}
.att-item.att-ok .att-ok-ic{color:var(--teal);font-weight:700;margin-left:auto;padding-right:6px}
.att-item.att-fail .att-pct{color:var(--red)}

/* ================= 深色主题适配(themes.js: dark) ================= */
body.theme-dark .login-card{box-shadow:0 20px 60px rgba(0,0,0,.6)}
body.theme-dark .topbar .logo{color:var(--blue2)}
body.theme-dark .nav-group-h.open{background:linear-gradient(135deg,var(--blue-l),#16233A)}
body.theme-dark .sidebar .menu-item:hover{background:var(--blue-l)}
body.theme-dark .tbl th{background:var(--blue-l)}
body.theme-dark .tbl td{border-top:1px solid var(--border)}
body.theme-dark .btn-outline:hover{background:var(--blue-l)}
body.theme-dark .m-top{background:linear-gradient(135deg,#0A1220,#12233D)}
body.theme-dark .scan-box{background:linear-gradient(135deg,#0A1220,#12233D)}
body.theme-dark .qr-box{background:var(--gray-l)}
body.theme-dark .att-chip:hover{background:#24406B}
body.theme-dark .att-thumb{background:#0e1622;border-color:#2E3A4E}
body.theme-dark .att-open-list .att-chip{background:#141C2A;border-color:#2E3A4E;color:var(--txt)}
body.theme-dark .att-open-list .att-chip:hover{background:#1B2A45;border-color:#3E6DA8;color:#8BB8E8}
body.theme-dark .ld-grid{background:#243044;border-color:#243044}
body.theme-dark .ld-meta{background:#171F2E}
body.theme-dark .ld-text{background:#141C2A;color:#C3CCDA}
body.theme-dark .msg-item{border-bottom:1px solid var(--border)}
body.theme-dark .att-item{border-bottom:1px solid var(--border)}
body.theme-dark .inp{background:#101825;color:var(--txt);border-color:var(--border)}
body.theme-dark select option{background:#171F2E;color:var(--txt)}
body.theme-dark .att-bar{background:#232D3D}
body.theme-dark .att-item.att-up{background:#1B2A45}
body.theme-dark .kb-col h4 .cnt{background:var(--gray-l)}
.att-item.att-fail{background:var(--red-l);border-radius:6px}
/* ㉑ 全局搜索结果行 */
.gs-row{padding:8px 10px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;cursor:pointer;font-size:13px;background:var(--bg2);transition:background .15s}
.gs-row:hover{background:var(--blue-l);border-color:var(--blue)}
/* ㉔ 列表分页条 */
.pager{display:flex;align-items:center;gap:6px;justify-content:flex-end;margin-top:10px;font-size:12.5px;color:var(--gray);flex-wrap:wrap}
.pager button{padding:3px 9px;border:1px solid var(--line);background:var(--bg2);color:var(--text);border-radius:6px;cursor:pointer;font-size:12.5px}
.pager button:hover:not(:disabled){border-color:var(--blue);color:var(--blue)}
.pager button:disabled{opacity:.45;cursor:not-allowed}
.pager .cur{padding:3px 9px;border-radius:6px;background:var(--blue);color:#fff}
/* ㉖ 批量操作条(选中时出现) */
.bulk-bar{display:flex;align-items:center;gap:8px;padding:8px 10px;margin-bottom:8px;border:1px solid var(--blue);background:var(--blue-l);border-radius:8px;font-size:12.5px}
/* ㉓ 表单必填标记 */
.req{color:var(--red);margin-right:2px}
.inp-err{border-color:var(--red)!important;box-shadow:0 0 0 2px var(--red-l)}
.err-tip{color:var(--red);font-size:12px;margin-top:4px}


/* ===== 弹窗右上角关闭按钮(2026-10-19):所有业务单据/表单统一 ===== */
.modal{position:relative}
.modal-xbar{position:sticky;top:-8px;z-index:40;height:0;display:flex;justify-content:flex-end;margin:-10px -14px 0 0;pointer-events:none}
.modal-xbar .modal-x{pointer-events:auto;width:34px;height:34px;border-radius:50%;border:1px solid var(--line,#E4E9F0);background:#fff;color:#3B4A5A;font-size:16px;font-weight:700;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.16);transition:background .15s,color .15s,transform .15s;-webkit-tap-highlight-color:transparent}
.modal-xbar .modal-x:hover{background:#C0392B;border-color:#C0392B;color:#fff;transform:rotate(90deg)}
.modal-xbar .modal-x:active{transform:scale(.94)}
@media (max-width:820px){
  .modal-xbar{top:-4px;margin:-6px -6px 0 0}
  .modal-xbar .modal-x{width:36px;height:36px;font-size:17px;background:rgba(255,255,255,.96);box-shadow:0 3px 10px rgba(0,0,0,.2)}
}

/* 关闭按钮占位:避免长标题文字压到右上角 ✕ */
.modal h3{padding-right:46px}
.modal .p-title{padding-right:46px}
.modal .modal-hd{padding-right:46px}

/* ===== extra.css (25930B) ===== */
/* ===== 平台版补充样式:登录表单 / 弹窗表单 / 表格 ===== */
.login-card h1{font-size:22px;margin:0 0 6px}
.login-card .sub{color:#cfe0f2;font-size:13px;margin-bottom:4px}
.login-form{display:flex;flex-direction:column;gap:12px;margin:16px 0}
.inp{width:100%;padding:10px 12px;border:1px solid #d6dde6;border-radius:9px;font-size:14px;box-sizing:border-box;background:#fff;outline:none}
.inp:focus{border-color:#185FA5;box-shadow:0 0 0 3px rgba(24,95,165,.15)}
.login-hint{font-size:12px;color:#e8f0fb;background:rgba(255,255,255,.12);border-radius:10px;padding:10px 12px;margin-top:14px;line-height:1.8}
.login-hint b{color:#fff}
.form{margin:10px 0}
.form label{display:block;font-size:12px;color:#5b6b7b;margin-bottom:4px}
.mt12{margin-top:12px}
.empty{padding:34px;text-align:center;color:#8a98a8}

/* ===== 多选下拉框(审批角色等) ===== */
.msel{position:relative;display:block;width:100%;max-width:360px}
.msel-btn{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 11px;border:1px solid var(--border);border-radius:8px;background:var(--card,#fff);color:var(--txt);font-size:13px;text-align:left;transition:border-color .13s}
.msel-btn:hover{border-color:var(--blue)}
.msel-arrow{color:var(--gray);font-size:11px;flex-shrink:0}
.msel-panel{display:none;position:absolute;z-index:130;top:calc(100% + 4px);left:0;min-width:100%;max-height:230px;overflow-y:auto;background:var(--card,#fff);border:1px solid var(--border);border-radius:10px;box-shadow:0 12px 30px rgba(12,68,124,.18);padding:6px}
.msel-panel.open{display:block;animation:mselIn .12s ease}
@keyframes mselIn{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}
.msel-opt{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:7px;font-size:13px;color:var(--txt2);cursor:pointer;user-select:none}
.msel-opt:hover{background:var(--blue-l);color:var(--blue2)}
.msel-opt input{accent-color:var(--blue);flex-shrink:0}
body.theme-dark .msel-panel{box-shadow:0 12px 30px rgba(0,0,0,.5)}

/* ===== 主题选择卡片 ===== */
.theme-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:12px}
.theme-card{border:2px solid var(--border);border-radius:12px;padding:10px;cursor:pointer;text-align:center;background:var(--card,#fff);transition:.15s;user-select:none}
.theme-card:hover{border-color:var(--blue);transform:translateY(-1px)}
.theme-card.active{border-color:var(--blue);box-shadow:0 0 0 3px rgba(24,95,165,.18)}
.tc-prev{height:54px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:24px;margin-bottom:8px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.25)}
.tc-nm{font-size:13px;font-weight:600;color:var(--txt2)}
.tc-sub{font-size:11px;color:var(--gray);margin-top:2px}

/* ===== 故障知识库 新增/编辑表单(分区引导) ===== */
.kbf-tip{background:var(--blue-l);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:12.5px;color:var(--txt2);margin-bottom:12px;line-height:1.7}
.kbf-sec{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:700;color:var(--txt);margin:14px 0 8px;padding-bottom:6px;border-bottom:1px dashed var(--border)}
.kbf-sec:first-of-type{margin-top:2px}
.kbf-no{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--blue);color:#fff;font-size:11.5px;font-weight:700;flex-shrink:0}
.kbf-sec-sub{font-size:11.5px;font-weight:400;color:var(--gray)}
.kbf-hint{font-size:11px;color:var(--gray);margin-top:3px}

/* ===== 真二维码容器(scan.js 动态渲染) ===== */
.qr-real{display:flex;align-items:center;justify-content:center;min-height:56px}
.qr-real canvas,.qr-real img{display:block;image-rendering:pixelated}

/* ===== OCR 识别填充(证书等) ===== */
.ocr-pick{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ocr-bar{height:6px;background:var(--gray-l);border-radius:99px;overflow:hidden}
.ocr-bar-in{height:100%;background:linear-gradient(90deg,var(--blue),var(--blue2));border-radius:99px;transition:width .2s}
.ocr-raw{background:var(--gray-l);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:11.5px;color:var(--txt2);white-space:pre-wrap;max-height:160px;overflow:auto;margin-top:6px;line-height:1.6}
.ocr-flash{animation:ocrFlash 1.4s ease}
@keyframes ocrFlash{0%,55%{box-shadow:0 0 0 2px var(--blue);background:#FFF6DC}100%{box-shadow:none;background:transparent}}
body.theme-dark .ocr-flash{animation-name:ocrFlashD}
@keyframes ocrFlashD{0%,55%{box-shadow:0 0 0 2px var(--blue2);background:#1B2A45}100%{box-shadow:none;background:transparent}}

/* ===== 手机端扫码面板(报修选设备等) ===== */
.scan-cam{position:relative;width:100%;border-radius:12px;overflow:hidden;background:#0A1220;aspect-ratio:4/3}
.scan-cam video{width:100%;height:100%;object-fit:cover;display:block}
.scan-frame{position:absolute;inset:18% 12%;border:2px solid rgba(255,255,255,.85);border-radius:12px;box-shadow:0 0 0 9999px rgba(0,0,0,.28)}
.scan-frame::after{content:'对准设备二维码';position:absolute;left:50%;bottom:-26px;transform:translateX(-50%);font-size:11.5px;color:#fff;white-space:nowrap;text-shadow:0 1px 3px rgba(0,0,0,.6)}
.scan-manual{margin-top:12px}
.scan-tip{font-size:12px;color:var(--gray);margin-top:8px;line-height:1.6}
.scan-qr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;margin-top:10px;max-height:220px;overflow-y:auto}
.scan-qr-item{border:1px solid var(--border);border-radius:10px;padding:8px 4px;text-align:center;cursor:pointer;background:var(--card,#fff);transition:.12s}
.scan-qr-item:hover{border-color:var(--blue);background:var(--blue-l)}
.scan-qr-item b{display:block;font-size:11.5px;color:var(--txt);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.scan-qr-item span{font-size:10.5px;color:var(--gray)}
.scan-qr-item canvas,.scan-qr-item img{display:block;margin:4px auto 0}
body.theme-dark .scan-frame{border-color:rgba(120,180,255,.9)}
.rep-drill-sum{display:flex;gap:18px;align-items:center;flex-wrap:wrap;font-size:12.5px;color:var(--txt2);background:var(--bg2);border-radius:8px;padding:8px 12px;margin:8px 0 10px}
.rep-drill-sum b{color:var(--txt);font-variant-numeric:tabular-nums}
.rep-drill-head{display:grid;grid-template-columns:158px minmax(120px,1.6fr) minmax(110px,1.3fr) 92px 72px 84px;gap:8px;font-size:11.5px;color:var(--gray);padding:6px 10px;border-bottom:1px solid var(--border);font-weight:600}
.rep-drill-list{max-height:52vh;overflow-y:auto;border-bottom:1px solid var(--border)}
.rep-drill-row{display:grid;grid-template-columns:158px minmax(120px,1.6fr) minmax(110px,1.3fr) 92px 72px 84px;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--border);font-size:12.5px;cursor:pointer;transition:background .12s}
.rep-drill-row:last-child{border-bottom:none}
.rep-drill-row:hover{background:var(--hover,#fafcff)}
.rd-id{font-weight:700;color:var(--blue2);white-space:nowrap}
.rd-pills{display:flex;gap:4px;flex-wrap:wrap}
.rd-ttl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;color:var(--txt)}
.rd-meta{color:var(--txt2);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-nowrap{white-space:nowrap}
.rd-fee{color:var(--amber);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:600}
body.theme-dark .rep-drill-sum{background:var(--bg2)}
@media (max-width:720px){
  .rep-drill-head,.rep-drill-row{grid-template-columns:120px 1fr 72px}
  .rep-drill-head span:nth-child(n+4),.rep-drill-row .rd-meta.rd-nowrap,.rd-fee{display:none}
}

/* ===== 操作审计日志 ===== */
.audit-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.audit-bar .inp{min-width:160px}
.audit-pager{display:flex;gap:8px;align-items:center;justify-content:flex-end;margin-top:10px;font-size:12.5px;color:var(--gray)}
body.theme-dark .audit-bar .inp{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.14);color:#e5eaf3}

/* ===== 日/周/月管控 · 周期多选 ===== */
.dwm-pick{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.dwm-pick-item{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border:1px solid var(--line,#DDE3EA);border-radius:20px;font-size:12.5px;cursor:pointer;user-select:none;background:var(--bg2,#F7F9FB);color:var(--text,#1F2733);transition:.15s}
.dwm-pick-item:hover{border-color:var(--blue,#185FA5)}
.dwm-pick-item.on{border-color:var(--blue,#185FA5);background:var(--blue-l,#E6F1FB);color:var(--blue2,#0C447C);font-weight:600}
.dwm-pick-item input{accent-color:var(--blue,#185FA5);cursor:pointer}
body.theme-dark .dwm-pick-item{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.16);color:#e5eaf3}
body.theme-dark .dwm-pick-item.on{background:rgba(24,95,165,.28);border-color:#4A9EE0;color:#cfe6fb}

/* ===== 主体责任模块(对标特卫士):三列面板/印章风格告知卡 ===== */
.row3{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-bottom:14px}
@media(max-width:760px){.row3{grid-template-columns:1fr}}

.p-yellow{background:var(--amber-l);color:#8a6d00}

/* 系统设置页签(2026-10-17):面板堆叠改分组页签 */
.set-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 14px}
.set-tab{border:1px solid var(--line);background:var(--bg2);color:var(--text);border-radius:18px;padding:7px 16px;font-size:13px;cursor:pointer}
.set-tab.on{background:var(--blue2);border-color:var(--blue2);color:#fff;font-weight:600}

/* 功能启用管理 优化(2026-10-18 重做:卡片网格 + 强状态 + 分组折叠) */
.feat-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:4px 0 12px}
.feat-toolbar .fsearch{flex:1;min-width:160px;max-width:300px}
.feat-stat{font-size:12.5px;color:var(--gray);white-space:nowrap}
.feat-grp{margin-bottom:14px}
.feat-grp-h{display:flex;align-items:center;gap:9px;font-size:13.5px;font-weight:700;color:var(--txt);margin-bottom:8px;padding:7px 10px;background:var(--bg2);border:1px solid var(--border);border-radius:9px;cursor:pointer;user-select:none}
.feat-grp-h:hover{background:var(--blue-l)}
.feat-grp-h .g-ic{font-size:17px}
.feat-grp-h .g-name{flex:0 0 auto}
.feat-grp-h .g-count{font-size:11px;font-weight:600;color:#fff;background:var(--gray);border-radius:9px;padding:1px 8px}
.feat-grp-h .g-pct{font-size:11.5px;color:var(--teal);font-weight:600;margin-left:auto}
.feat-grp-h .g-caret{font-size:12px;color:var(--gray);transition:transform .15s;margin-left:4px}
.feat-grp.collapsed .g-caret{transform:rotate(-90deg)}
.feat-grp.collapsed .feat-grid{display:none}
.feat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:10px}
.feat-card{display:flex;align-items:flex-start;gap:11px;padding:11px 13px;border:1px solid var(--border);border-radius:11px;background:#fff;cursor:pointer;transition:all .15s;box-shadow:0 1px 2px rgba(12,68,124,.04)}
.feat-card:hover{border-color:var(--blue2);box-shadow:0 2px 10px rgba(12,68,124,.12)}
.feat-card.on{border-left:3px solid var(--teal)}
.feat-card.off{opacity:.6;background:var(--bg2)}
.feat-card .fc-ic{font-size:19px;width:30px;height:30px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;border-radius:8px;background:var(--bg2)}
.feat-card.off .fc-ic{filter:grayscale(1);opacity:.7}
.feat-card .fc-main{flex:1;min-width:0}
.feat-card .fc-name{font-size:13.5px;font-weight:600;color:var(--txt)}
.feat-card .fc-desc{font-size:11.5px;color:var(--gray);margin-top:2px;line-height:1.45}
.feat-card .fc-right{display:flex;flex-direction:column;align-items:flex-end;gap:7px;flex:0 0 auto}
.fc-state{font-size:10.5px;font-weight:600;padding:1px 8px;border-radius:9px;white-space:nowrap}
.feat-card.on .fc-state{background:var(--teal-l);color:var(--teal)}
.feat-card.off .fc-state{background:#E3E1D8;color:#666}
.feat-sw{width:46px;height:25px;border-radius:25px;background:#C9C6BD;position:relative;flex:0 0 auto;transition:background .18s;border:none;padding:0;cursor:pointer;pointer-events:none}
.feat-sw.on{background:var(--teal)}
.feat-sw .knob{position:absolute;top:2px;left:2px;width:21px;height:21px;border-radius:50%;background:#fff;transition:left .18s;box-shadow:0 1px 2px rgba(0,0,0,.25)}
.feat-sw.on .knob{left:23px}
.feat-card.locked{opacity:1;cursor:default;border-left:3px solid var(--amber)}
.feat-card.locked:hover{box-shadow:0 1px 2px rgba(12,68,124,.04);border-color:var(--border)}
.feat-card.locked .fc-ic{filter:none}
.feat-lock{font-size:11px;color:var(--amber);background:var(--amber-l);border-radius:9px;padding:2px 9px;font-weight:700;white-space:nowrap}
.feat-empty{text-align:center;color:var(--gray);font-size:13px;padding:22px;border:1px dashed var(--border);border-radius:10px;margin-top:6px}

/* 钉钉集成配置指南 (2026-10-18) */
.dt-guide{margin-top:14px}
.dt-guide-hd{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.dt-guide-hd .g-title{font-size:14px;font-weight:700;color:var(--txt)}
.dt-guide-hd .g-toggle{margin-left:auto;font-size:12px;color:var(--blue2);cursor:pointer;user-select:none}
.dt-step{border:1px solid var(--border);border-radius:10px;padding:11px 13px;margin-bottom:9px;background:#fff}
.dt-step .s-hd{display:flex;align-items:center;gap:10px}
.dt-step .s-no{width:24px;height:24px;flex:0 0 auto;border-radius:50%;background:var(--blue2);color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center}
.dt-step .s-title{font-size:13.5px;font-weight:700;color:var(--txt)}
.dt-step .s-where{margin-left:auto;font-size:11px;padding:2px 9px;border-radius:10px;font-weight:600;white-space:nowrap;color:#fff}
.dt-step .s-where.in{background:var(--teal)}
.dt-step .s-where.out{background:var(--amber)}
.dt-step .s-body{font-size:12.5px;color:var(--txt2);line-height:1.7;margin-top:7px}
.dt-step .s-body ol{margin:2px 0 0;padding-left:20px}
.dt-step .s-body li{margin-bottom:4px}
.dt-step .s-body code{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-size:11.5px;color:var(--txt)}
.dt-step .s-tip{margin-top:7px;padding:6px 9px;border-left:3px solid var(--amber);background:var(--amber-l);border-radius:5px;font-size:11.8px;color:var(--txt2)}
.dt-step .s-field{display:inline-block;background:var(--teal-l);border:1px solid #BFE3D6;border-radius:5px;padding:1px 7px;font-size:11.5px;color:var(--teal);font-weight:600;margin:1px 2px}

/* ===================== E4 附件在线预览层 ===================== */
html.attv-lock,html.attv-lock body{overflow:hidden!important}
.attv{position:fixed;inset:0;z-index:10060;display:none}
.attv.show{display:block}
.attv-mask{position:absolute;inset:0;background:rgba(8,14,24,.82)}
.attv-panel{position:relative;margin:2.2vh auto;width:min(1120px,94vw);height:95.4vh;display:flex;flex-direction:column;overflow:hidden;
  background:var(--bg,#fff);border:1px solid var(--border,#dde3ec);border-radius:12px;box-shadow:0 24px 80px rgba(0,0,0,.45)}
.attv-hd{display:flex;align-items:center;gap:12px;padding:9px 14px;border-bottom:1px solid var(--border,#e5e8ee);background:var(--bg2,#f7f9fc);flex:none}
.attv-title{flex:1;min-width:0}
.attv-name{font-size:13.5px;font-weight:600;color:var(--txt,#1d2433);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.attv-meta{font-size:11.5px;color:var(--txt2,#8792a6);margin-top:2px}
.attv-tools{display:flex;align-items:center;gap:6px;flex:none}
.attv-tools-zoom{display:flex;align-items:center;gap:3px;margin-right:4px}
.attv-zoom{font-size:11.5px;color:var(--txt2);min-width:38px;text-align:center;font-variant-numeric:tabular-nums}
.attv-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;height:28px;min-width:28px;padding:0 8px;
  border:1px solid var(--border,#d7dde7);border-radius:6px;background:var(--bg,#fff);color:var(--txt,#25303f);
  font-size:12.5px;cursor:pointer;text-decoration:none;line-height:1;white-space:nowrap}
.attv-btn:hover{background:var(--blue-l,#eef6ff);border-color:var(--blue,#185FA5);color:var(--blue,#185FA5)}
.attv-x:hover{background:#FDECEE;border-color:#E4556A;color:#C9384E}
.attv-body{flex:1;position:relative;display:flex;align-items:center;justify-content:center;background:#101820;overflow:hidden;min-height:0}
.attv-img{max-width:100%;max-height:100%;transform-origin:center center;user-select:none;cursor:grab;
  transition:transform .08s linear;-webkit-user-drag:none}
.attv-img.dragging{cursor:grabbing;transition:none}
.attv-frame{width:100%;height:100%;border:0;background:#fff;display:block}
.attv-media{max-width:100%;max-height:100%;background:#000;display:block}
.attv-audio{display:flex;flex-direction:column;align-items:center;gap:14px;color:#dbe6f3;padding:24px}
.attv-audio-ic{font-size:64px;line-height:1}
.attv-audio-nm{font-size:13px;max-width:80%;text-align:center;word-break:break-all;opacity:.85}
.attv-audio audio{width:min(420px,80vw)}
.attv-text{width:100%;height:100%;margin:0;padding:16px 18px;overflow:auto;background:var(--bg,#fff);color:var(--txt,#1d2433);
  font:12.5px/1.75 ui-monospace,SFMono-Regular,Consolas,"Courier New",monospace;white-space:pre-wrap;word-break:break-word}
.attv-ft{display:flex;align-items:center;justify-content:center;gap:18px;padding:7px;border-top:1px solid var(--border,#e5e8ee);
  background:var(--bg2,#f7f9fc);font-size:12px;color:var(--txt2);flex:none}
.attv-nav{background:none;border:0;color:var(--blue,#185FA5);font-size:12.5px;cursor:pointer;padding:2px 8px;border-radius:5px}
.attv-nav:hover{background:var(--blue-l,#eef6ff)}
.attv-pos{font-variant-numeric:tabular-nums;color:var(--txt2)}
@media (max-width:820px){
  .attv-panel{width:100vw;height:100vh;margin:0;border-radius:0;border:0}
  .attv-meta{display:none}
  .attv-hd{padding:7px 10px}
  .attv-ft{padding:10px;padding-bottom:calc(10px + env(safe-area-inset-bottom))}
}

/* ===================== C7 实时事件流提示条 ===================== */
.live-tip{position:fixed;top:8px;left:50%;transform:translateX(-50%);z-index:10070;display:flex;align-items:center;gap:10px;
  padding:7px 14px;border-radius:20px;background:var(--blue,#185FA5);color:#fff;font-size:12.5px;line-height:1.45;
  box-shadow:0 6px 22px rgba(0,0,0,.24);max-width:92vw}
.live-tip>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.live-tip.warn{background:var(--amber,#BA7517)}
.live-tip button{border:0;background:rgba(255,255,255,.24);color:#fff;border-radius:12px;padding:3px 11px;
  font-size:12px;cursor:pointer;white-space:nowrap}
.live-tip button:hover{background:rgba(255,255,255,.36)}
@media (max-width:820px){.live-tip{top:auto;bottom:calc(56px + env(safe-area-inset-bottom))}}

/* ===================== C2 分页条增强 ===================== */
.pager .pg-info{color:var(--txt2);margin-right:auto;font-variant-numeric:tabular-nums}
.pager .pg-size{display:inline-flex;align-items:center;gap:4px;color:var(--txt2)}
.pager .pg-size select{padding:2px 4px;border:1px solid var(--line);border-radius:5px;background:var(--bg2);color:var(--text);font-size:12px;cursor:pointer}
.pager .pg-gap{color:var(--gray);padding:0 1px;letter-spacing:1px}

/* ===================== C3 看板列折叠 ===================== */
.kb-more{display:block;width:100%;margin-top:8px;padding:6px 8px;border:1px dashed var(--border,#d7dde7);border-radius:8px;
  background:transparent;color:var(--blue,#185FA5);font-size:12.5px;cursor:pointer;transition:background .15s,border-color .15s}
.kb-more:hover{background:var(--blue-l,#eef6ff);border-color:var(--blue,#185FA5)}
/* 深色驾驶舱/维修大屏里的折叠按钮需要浅色系,否则蓝字压深蓝底看不见 */
.bs-panel .kb-more,.bs-rep-col .kb-more{color:#8FB6E8;border-color:rgba(98,160,255,.35)}
.bs-panel .kb-more:hover,.bs-rep-col .kb-more:hover{background:rgba(98,160,255,.14);color:#CFE3FF;border-color:rgba(98,160,255,.6)}

/* ===================== C3 消息中心虚拟滚动 ===================== */
.vlist{height:calc(100vh - 268px);min-height:320px;overflow-y:auto;position:relative;contain:layout paint}
.vlist-inner{position:relative}
.vlist-vp{position:absolute;left:0;right:0;top:0;will-change:transform}
.vlist .msg-item{height:68px;padding:10px 12px;box-sizing:border-box;overflow:hidden}
.vlist .msg-item .mi-c{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:820px){.vlist{height:calc(100vh - 220px)}}

/* ===================== E2 表单草稿提示条 ===================== */
.draft-tip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:-2px 0 12px;padding:8px 12px;
  border:1px solid #E8C98A;background:#FFF8E8;border-radius:8px;font-size:12.5px;color:#7A5410}
.draft-tip>span{flex:1;min-width:150px}
.draft-tip button{border:1px solid #E0B866;background:#fff;color:#7A5410;border-radius:6px;padding:3px 11px;font-size:12px;cursor:pointer}
.draft-tip button:hover{border-color:#BA7517}
.draft-tip .dt-ok{background:#BA7517;border-color:#BA7517;color:#fff}
.draft-tip .dt-ok:hover{background:#9C6112}
body.theme-dark .draft-tip{background:rgba(186,117,23,.16);border-color:rgba(232,201,138,.35);color:#F0D9A8}
body.theme-dark .draft-tip button{background:rgba(255,255,255,.08);color:#F0D9A8;border-color:rgba(232,201,138,.35)}
body.theme-dark .draft-tip .dt-ok{background:#BA7517;border-color:#BA7517;color:#fff}

/* D3 在线设备:本机标记 */
.sess-cur{display:inline-block;margin-left:6px;padding:0 6px;border-radius:99px;background:#ecfdf5;border:1px solid #a7f3d0;color:#0f766e;font-size:10.5px;font-weight:700;line-height:1.6;vertical-align:middle}
body.theme-dark .sess-cur{background:rgba(16,185,129,.15);border-color:rgba(16,185,129,.45);color:#6ee7b7}

/* ===== H3/H4:状态可辨识性 + 大字号适配 =====
   H3 颜色+图标/文字并行("● 逾期""◐ 临期")，pill 上加 aria-label，用户依赖读屏或形状而非仅颜色
   H4 rem + clamp，支持系统字号缩放，老年用户阅读困难*/
.pill.p-red::before{content:"● ";font-size:10px}
.pill.p-amber::before{content:"◐ ";font-size:10px}
.pill.p-teal::before{content:"✓ ";font-size:10px}
.pill.p-blue::before{content:"● ";font-size:10px}
@media (prefers-reduced-motion:no-preference){
  .pill{transition:transform .12s}
}
html{font-size:clamp(13px, 0.85vw + 11px, 16px)}
body{font-size:1rem}
@media (max-width:820px){
  .m-card,.panel{font-size:clamp(12.5px, 2.8vw, 14px)}
}

/* ===== E6 首屏骨架屏 =====
   登录后等待 bootstrap 期间为 #content/#mBody 加 .skel 占位，避免空白像卡死*/
.skel{position:relative;overflow:hidden;background:var(--bg2,#f3f6fb)}
.skel::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);animation:skelShine 1.1s ease infinite}
@keyframes skelShine{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.skel-card{height:96px;border-radius:10px;margin:10px 0}
.skel-line{height:12px;border-radius:6px;margin:8px 0}
.skel-line.w60{width:60%}.skel-line.w80{width:80%}.skel-line.w40{width:40%}


/* ---- H3 状态图示 + H4 大字号适配 + E6 骨架屏 (2026-10-20) ---- */
:root{ --fs-clamp: clamp(12px, 0.875rem + 0.25vw, 16px); --fs-title: clamp(20px, 1.25rem + 0.5vw, 28px); }
body{ font-size: var(--fs-clamp); }
h1, .page-title{ font-size: var(--fs-title); }
.pill-icon{ display:inline-block; width:8px; height:8px; border-radius:99px; margin-right:6px; vertical-align:middle; }
.p-red .pill-icon{ background:#dc2626; } .p-amber .pill-icon{ background:#f59e0b; } .p-green .pill-icon{ background:#16a34a; }
.sk-root{ position:fixed; left:0; top:0; right:0; bottom:0; z-index:999; background:var(--bg, #f5f7fa); padding:72px 32px; box-sizing:border-box; }
body.theme-dark .sk-root{ background:#0f172a; }
.sk-block{ border-radius:10px; background:linear-gradient(100deg, rgba(0,0,0,.06) 40%, rgba(0,0,0,.12) 50%, rgba(0,0,0,.06) 60%); background-size:200% 100%; animation:skShimmer 1.2s infinite; }
body.theme-dark .sk-block{ background:linear-gradient(100deg, rgba(255,255,255,.05) 40%, rgba(255,255,255,.12) 50%, rgba(255,255,255,.05) 60%); background-size:200% 100%; }
@keyframes skShimmer{ 0%{background-position:200% 0} 100%{background-position:-200% 0} }
.sk-head{ height:46px; margin-bottom:24px; }
.sk-row{ display:flex; gap:16px; margin-bottom:18px; }
.sk-side{ width:200px; height:320px; } .sk-main{ flex:1; height:320px; }
.sk-line{ height:18px; margin-bottom:14px; } .sk-line.short{ width:55%; }
/* F8: 大屏轮播焦点 */
.dash-focus{ outline:2px solid #3b82f6; outline-offset:2px; box-shadow:0 0 0 4px rgba(59,130,246,.15); transform:scale(1.015); transition:all .45s ease; }
/* ===== 长文本截断兜底 (2026-10-20): 只截断会撑破布局的容器, 不误伤多行场景 ===== */
.tbl-wrap{max-width:100%;overflow-x:auto}
/* 表格文本列: 默认单行省略, 悬停 title 看全; 数字/操作列不受影响 */
td.cell-cut{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
td .cell-cut, .tbl-text{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:middle}
/* 信息条/提示/消息单行省略 */
.live-tip>span,.msg-item .mi-c,.att-tip,.empty-tip,.batch-tip,.dt-tip,.page-sub,.m-tip,.m-empty{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
/* 弹窗/表单内正文允许换行(不截断) */
.modal-body p,.modal-body .fdesc,.form-desc{white-space:normal;overflow:visible;text-overflow:clip}
/* 通用 flex 弹性文本: 内部自动收缩避免撑破 */
.fx{display:flex;min-width:0}
.fx>.grow{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:760px){td .cell-cut,td.cell-cut,.tbl-text{max-width:120px}}
/* 表格容器横向滚动兜底: 宽表不撑破页面, 窄表无感知 */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
@media(max-width:760px){.table-scroll{-webkit-overflow-scrolling:touch}}
/* ===== bs.css (24056B) ===== */
/* ============ 安全驾驶舱 · 深色科技大屏 (bs-*) ============ */
.bs-root{
  position:relative;min-height:820px;border-radius:14px;overflow:hidden;
  background:radial-gradient(1200px 500px at 50% -80px,rgba(35,80,180,.35),transparent 60%),
             linear-gradient(180deg,#050D24 0%,#071230 55%,#040A1C 100%);
  padding:14px 16px 18px;color:#DCEBFF;
  font-variant-numeric:tabular-nums;
}
.bs-root:before{ /* 网格底纹 */
  content:'';position:absolute;inset:0;pointer-events:none;opacity:.35;
  background:linear-gradient(rgba(62,139,255,.07) 1px,transparent 1px),
             linear-gradient(90deg,rgba(62,139,255,.07) 1px,transparent 1px);
  background-size:44px 44px;
}
.bs-root:after{ /* 扫描光带 */
  content:'';position:absolute;left:0;right:0;height:120px;top:-120px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(55,230,255,.06),transparent);
  animation:bsScan 7s linear infinite;
}
@keyframes bsScan{0%{top:-120px}100%{top:100%}}

/* ---- 顶部横幅 ---- */
.bs-head{position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;margin-bottom:14px}
.bs-head .l,.bs-head .r{display:flex;gap:8px;align-items:center}
.bs-head .r{justify-content:flex-end}
.bs-title{
  font-size:26px;font-weight:800;letter-spacing:6px;white-space:nowrap;
  background:linear-gradient(180deg,#EAF6FF 20%,#7CC7FF 80%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  text-shadow:0 0 26px rgba(62,139,255,.45);
  padding:2px 34px;position:relative;
}
.bs-title:before,.bs-title:after{
  content:'';position:absolute;top:50%;width:120px;height:10px;transform:translateY(-50%);
  background:linear-gradient(90deg,transparent,rgba(55,230,255,.8));clip-path:polygon(0 40%,100% 0,100% 100%,0 60%);
}
.bs-title:before{left:-92px}
.bs-title:after{right:-92px;transform:translateY(-50%) scaleX(-1)}
.bs-chip{
  display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#9FC3F5;
  border:1px solid rgba(62,139,255,.35);border-radius:999px;padding:4px 12px;
  background:rgba(13,32,70,.55);box-shadow:inset 0 0 12px rgba(62,139,255,.12);
}
.bs-chip b{color:#EAF6FF;font-weight:700}

/* ---- 布局 ---- */
.bs-grid{position:relative;display:grid;grid-template-columns:minmax(240px,292px) minmax(0,1fr) minmax(240px,292px);gap:14px}
.bs-col{display:flex;flex-direction:column;gap:14px;min-width:0}
.bs-panel{
  position:relative;border-radius:10px;padding:12px 14px 14px;
  background:linear-gradient(165deg,rgba(16,36,78,.66),rgba(8,18,44,.85));
  border:1px solid rgba(62,139,255,.24);
  box-shadow:inset 0 0 24px rgba(24,70,160,.18),0 4px 18px rgba(2,8,24,.45);
  animation:bsUp .5s ease both;
}
.bs-panel:nth-child(2){animation-delay:.08s}.bs-panel:nth-child(3){animation-delay:.16s}
@keyframes bsUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.bs-panel:before,.bs-panel:after{
  content:'';position:absolute;width:16px;height:16px;pointer-events:none;
  border:2px solid #37E6FF;filter:drop-shadow(0 0 4px rgba(55,230,255,.8));
}
.bs-panel:before{top:-1px;left:-1px;border-right:none;border-bottom:none;border-radius:10px 0 0 0}
.bs-panel:after{bottom:-1px;right:-1px;border-left:none;border-top:none;border-radius:0 0 10px 0}
.bs-ptitle{
  display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:700;color:#BFE0FF;
  letter-spacing:2px;margin-bottom:10px;
}
.bs-ptitle:before{
  content:'';width:5px;height:14px;border-radius:2px;
  background:linear-gradient(180deg,#37E6FF,#3E8BFF);box-shadow:0 0 8px rgba(55,230,255,.9);
}
.bs-ptitle .more{margin-left:auto;font-size:11px;color:#6FA1DE;cursor:pointer;font-weight:400;letter-spacing:0}
.bs-ptitle .more:hover{color:#37E6FF}

/* ---- KPI 大数字 ---- */
.bs-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:14px}
.bs-kpi{
  position:relative;border-radius:10px;padding:14px 16px 12px;overflow:hidden;
  background:linear-gradient(150deg,rgba(20,46,96,.6),rgba(9,20,48,.85));
  border:1px solid rgba(62,139,255,.26);
  box-shadow:inset 0 0 20px rgba(24,70,160,.16);
}
.bs-kpi .cap{font-size:12px;color:#8FB4E4;letter-spacing:2px;display:flex;align-items:center;gap:6px}
.bs-kpi .cap:before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor}
.bs-num{
  font-size:34px;font-weight:800;line-height:1.15;margin-top:2px;letter-spacing:1px;
  text-shadow:0 0 18px currentColor;
}
.bs-num small{font-size:15px;font-weight:600;margin-left:2px;opacity:.85}
.bs-kpi .sub{font-size:11px;color:#7FA3D0;margin-top:2px}
.bs-kpi .spark{position:absolute;right:10px;bottom:8px;opacity:.85}
.c-cyan{color:#37E6FF}.c-blue{color:#4D9AFF}.c-teal{color:#2CF6C3}.c-amber{color:#FFB443}.c-red{color:#FF5D6C}.c-purple{color:#9B8CFF}

/* ---- 排行条 ---- */
.bs-rank{display:flex;align-items:center;gap:9px;padding:6.5px 0}
.bs-rank .no{
  width:20px;height:20px;border-radius:5px;flex:none;display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;color:#04122E;
}
.bs-rank .no1{background:linear-gradient(180deg,#FFE28A,#FFB443);box-shadow:0 0 10px rgba(255,180,67,.7)}
.bs-rank .no2{background:linear-gradient(180deg,#DFF3FF,#8FC6FF);box-shadow:0 0 10px rgba(143,198,255,.6)}
.bs-rank .no3{background:linear-gradient(180deg,#FFD0B0,#FF9466);box-shadow:0 0 10px rgba(255,148,102,.6)}
.bs-rank .nox{background:rgba(62,139,255,.25);color:#9FC3F5}
.bs-rank .nm{width:86px;flex:none;font-size:11.5px;color:#C9E2FF;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bs-rank .track{flex:1;height:9px;border-radius:99px;background:rgba(62,139,255,.14);overflow:hidden;position:relative}
.bs-rank .fill{
  display:block;height:100%;border-radius:99px;transform-origin:left;
  background:linear-gradient(90deg,rgba(62,139,255,.65),#37E6FF);
  box-shadow:0 0 10px rgba(55,230,255,.55);
  animation:bsBar .9s cubic-bezier(.2,.7,.3,1) both;
}
@keyframes bsBar{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.bs-rank .val{width:26px;flex:none;text-align:right;font-size:12.5px;font-weight:700;color:#EAF6FF}

/* ---- 深色迷你表 ---- */
.bs-tbl{width:100%;border-collapse:collapse;font-size:12px}
.bs-tbl th{
  color:#7FA3D0;font-weight:600;text-align:right;padding:5px 8px;letter-spacing:1px;
  background:rgba(62,139,255,.10);border-bottom:1px solid rgba(62,139,255,.25);
}
.bs-tbl th:first-child{text-align:left}
.bs-tbl td{padding:6.5px 8px;text-align:right;color:#DCEBFF;border-bottom:1px dashed rgba(62,139,255,.14)}
.bs-tbl td:first-child{text-align:left;color:#BFE0FF}
.bs-tbl tr:hover td{background:rgba(62,139,255,.07)}

/* ---- 预警条目 ---- */
.bs-warn{display:flex;gap:9px;align-items:flex-start;padding:7px 0;border-bottom:1px dashed rgba(62,139,255,.16)}
.bs-warn:last-child{border-bottom:none}
.bs-warn .ic{flex:none;width:22px;height:22px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:12px}
.ic-red{background:rgba(255,93,108,.16);box-shadow:0 0 8px rgba(255,93,108,.35)}
.ic-amber{background:rgba(255,180,67,.16);box-shadow:0 0 8px rgba(255,180,67,.35)}
.bs-warn .t{font-size:12px;font-weight:600;color:#EAF6FF;line-height:1.35}
.bs-warn .s{font-size:11px;color:#7FA3D0;margin-top:1px;line-height:1.4}

/* ---- 图表通用 ---- */
.bs-chart-box svg{display:block;width:100%;height:auto}
.bs-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11px;color:#8FB4E4;margin-top:6px}
.bs-legend i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:-1px}

/* ---- 中央态势区 ---- */
.bs-center-wrap{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.bs-gauge-big{position:relative;flex:none}
.bs-gauge-big .in{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
}
.bs-gauge-big .in b{font-size:40px;font-weight:800;color:#37E6FF;text-shadow:0 0 22px rgba(55,230,255,.8);line-height:1}
.bs-gauge-big .in span{font-size:11px;color:#7FA3D0;letter-spacing:2px}
.bs-side-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;flex:1;min-width:230px}
.bs-side-stat{
  border-radius:8px;padding:10px 12px;text-align:center;
  background:rgba(62,139,255,.09);border:1px solid rgba(62,139,255,.22);
}
.bs-side-stat b{display:block;font-size:24px;font-weight:800;text-shadow:0 0 14px currentColor}
.bs-side-stat span{font-size:11px;color:#8FB4E4;letter-spacing:1px}

/* ---- 环形图例 ---- */
.bs-ring-legend{display:flex;flex-direction:column;gap:7px;font-size:11.5px;color:#C9E2FF}
.bs-ring-legend i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px}

/* ---- 底部横条 ---- */
.bs-foot{display:flex;justify-content:space-between;align-items:center;margin-top:14px;padding-top:10px;border-top:1px solid rgba(62,139,255,.18);font-size:11px;color:#6FA1DE;letter-spacing:1px}
.bs-foot .dotline{display:flex;gap:6px;align-items:center}
.bs-foot .dotline i{width:6px;height:6px;border-radius:50%;background:#2CF6C3;box-shadow:0 0 8px #2CF6C3;animation:bsBlink 1.6s ease infinite}
@keyframes bsBlink{50%{opacity:.25}}

/* ---- 响应式 ---- */
@media (max-width:1180px){
  .bs-grid{grid-template-columns:1fr 1fr}
  .bs-grid .bs-col.mid{grid-column:span 2;order:-1}
}
@media (max-width:760px){
  .bs-grid{grid-template-columns:1fr}
  .bs-grid .bs-col.mid{grid-column:span 1}
  .bs-kpis{grid-template-columns:1fr 1fr}
  .bs-title{font-size:19px;letter-spacing:3px;padding:2px 18px}
  .bs-title:before,.bs-title:after{display:none}
}
/* ===== 驾驶舱下钻抽屉 ===== */
.bs-click{cursor:pointer;transition:filter .16s ease,box-shadow .16s ease}
.bs-click:hover{filter:brightness(1.16);box-shadow:0 0 0 1px rgba(55,230,255,.45),0 0 16px rgba(55,230,255,.22)}
.bs-leg-item{cursor:pointer;transition:all .16s ease}
.bs-leg-item:hover{color:#37E6FF;text-shadow:0 0 8px rgba(55,230,255,.6)}
.bs-drill{position:fixed;inset:0;z-index:1600;display:none}
.bs-drill.show{display:block}
.bs-drill-mask{position:absolute;inset:0;background:rgba(2,8,24,.55);backdrop-filter:blur(2px);animation:bsfade .2s ease}
.bs-drill-panel{position:absolute;top:0;right:0;height:100%;width:min(580px,94vw);background:linear-gradient(160deg,#0a1838,#0b1f4a);border-left:1px solid rgba(55,230,255,.35);box-shadow:-16px 0 44px rgba(0,0,0,.55);display:flex;flex-direction:column;animation:bsSlide .26s cubic-bezier(.2,.8,.2,1)}
@keyframes bsfade{from{opacity:0}to{opacity:1}}
@keyframes bsSlide{from{transform:translateX(46px);opacity:.35}to{transform:none;opacity:1}}
.bs-drill-head{display:flex;align-items:flex-start;justify-content:space-between;padding:18px 20px 14px;border-bottom:1px solid rgba(62,139,255,.18)}
.bs-drill-x{background:none;border:1px solid rgba(120,160,220,.4);color:#9FC3F5;width:32px;height:32px;border-radius:8px;font-size:20px;cursor:pointer;line-height:1;flex:none}
.bs-drill-x:hover{background:rgba(255,93,108,.18);color:#FF5D6C;border-color:rgba(255,93,108,.5)}
.bs-drill-body{padding:14px 16px;overflow:auto;flex:1}
.bs-drill-foot{display:flex;gap:10px;justify-content:flex-end;padding:14px 20px;border-top:1px solid rgba(62,139,255,.18);background:rgba(7,18,48,.5)}
.bs-drill-scroll{overflow:auto;border-radius:10px;border:1px solid rgba(62,139,255,.16)}
.bs-drill-tbl{width:100%;border-collapse:collapse;font-size:13px}
.bs-drill-tbl th{text-align:left;color:#7FA3D0;font-weight:500;font-size:12px;padding:10px 12px;border-bottom:1px solid rgba(62,139,255,.25);position:sticky;top:0;background:#0b1f4a;white-space:nowrap}
.bs-drill-tbl td{padding:10px 12px;border-bottom:1px solid rgba(62,139,255,.10);color:#C8DCF5;vertical-align:top;font-size:13px}
.bs-drill-tr:hover{background:rgba(55,230,255,.09);cursor:pointer}
.bs-drill-empty{padding:34px;text-align:center;color:#5F7FB2;font-size:13px}

/* ===== 维修工单 · 深色科技大屏 (bs-rep-*) ===== */
.bs-rep-root{
  position:relative;border-radius:14px;overflow:hidden;
  background:radial-gradient(1100px 460px at 50% -90px,rgba(35,80,180,.35),transparent 60%),
             linear-gradient(180deg,#050D24 0%,#071230 55%,#040A1C 100%);
  padding:16px 16px 18px;color:#DCEBFF;font-variant-numeric:tabular-nums;
}
.bs-rep-root:before{ /* 网格底纹 */
  content:'';position:absolute;inset:0;pointer-events:none;opacity:.32;
  background:linear-gradient(rgba(62,139,255,.07) 1px,transparent 1px),
             linear-gradient(90deg,rgba(62,139,255,.07) 1px,transparent 1px);
  background-size:44px 44px;
}
.bs-rep-root:after{ /* 扫描光带 */
  content:'';position:absolute;left:0;right:0;height:120px;top:-120px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(55,230,255,.06),transparent);
  animation:bsScan 7s linear infinite;
}
/* 顶栏 */
.bs-rep-head{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:14px}
.bs-rep-title{
  font-size:21px;font-weight:800;letter-spacing:5px;white-space:nowrap;
  background:linear-gradient(180deg,#EAF6FF 20%,#7CC7FF 80%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  text-shadow:0 0 24px rgba(62,139,255,.45);padding:2px 10px;
}
.bs-rep-sub{font-size:11.5px;color:#6FA1DE;letter-spacing:1px;margin-left:4px}
.bs-rep-head .sp{flex:1}
/* 操作按钮(深色) */
.rep-bbtn{
  display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:#C9E2FF;
  background:rgba(62,139,255,.16);border:1px solid rgba(62,139,255,.45);border-radius:8px;
  padding:6px 13px;cursor:pointer;transition:all .16s ease;letter-spacing:1px;
}
.rep-bbtn:hover{background:rgba(55,230,255,.22);border-color:#37E6FF;color:#EAF6FF;box-shadow:0 0 12px rgba(55,230,255,.35)}
.rep-bbtn.danger{background:rgba(255,93,108,.18);border-color:rgba(255,93,108,.55);color:#FFB8C0}
.rep-bbtn.danger:hover{background:rgba(255,93,108,.3);border-color:#FF5D6C;box-shadow:0 0 12px rgba(255,93,108,.45)}
.rep-bbtn.ghost{background:transparent;border-color:rgba(120,160,220,.4);color:#9FC3F5}
.rep-bbtn.ghost:hover{border-color:#37E6FF;color:#37E6FF;box-shadow:none}
.rep-bbtn.on{background:rgba(44,246,195,.16);border-color:rgba(44,246,195,.5);color:#A7F5DD}
.rep-bbtn.on:hover{background:rgba(44,246,195,.26);border-color:#2CF6C3;color:#EAF6FF}
/* 深色筛选条 */
.bs-rep-bar{position:relative;display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.bs-rep-bar select{
  background:rgba(13,32,70,.7);color:#C9E2FF;border:1px solid rgba(62,139,255,.4);border-radius:8px;
  padding:7px 30px 7px 12px;font-size:12.5px;outline:none;cursor:pointer;
}
.bs-rep-bar select:hover{border-color:#37E6FF}
.bs-rep-bar select option{background:#0b1f4a;color:#DCEBFF}
/* 三列网格 */
.bs-rep-grid{position:relative;display:grid;grid-template-columns:minmax(250px,1.05fr) minmax(0,1.55fr) minmax(250px,1.05fr);gap:14px;align-items:start}
.bs-rep-col{display:flex;flex-direction:column;gap:14px;min-width:0}
/* KPI 面板(带角标+发光数字) */
.bs-rep-kpi{
  position:relative;border-radius:10px;padding:13px 15px 11px;overflow:hidden;
  background:linear-gradient(150deg,rgba(20,46,96,.6),rgba(9,20,48,.85));
  border:1px solid rgba(62,139,255,.26);
  box-shadow:inset 0 0 20px rgba(24,70,160,.16);animation:bsUp .5s ease both;
}
.bs-rep-kpi:before{content:'';position:absolute;top:0;left:0;width:3px;height:100%;background:currentColor;opacity:.85;box-shadow:0 0 10px currentColor}
.bs-rep-kpi .cap{font-size:11.5px;color:#8FB4E4;letter-spacing:2px;display:flex;align-items:center;gap:6px}
.bs-rep-kpi .cap:before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 8px currentColor}
.bs-rep-kpi .num{font-size:30px;font-weight:800;line-height:1.1;margin-top:2px;text-shadow:0 0 16px currentColor}
.bs-rep-kpi .sub{font-size:10.5px;color:#7FA3D0;margin-top:2px;letter-spacing:1px}
/* 工单卡片 */
.bs-rep-card{
  position:relative;border-radius:9px;padding:10px 12px 9px;margin-bottom:9px;
  background:linear-gradient(160deg,rgba(16,36,78,.6),rgba(8,18,44,.82));
  border:1px solid rgba(62,139,255,.22);transition:all .16s ease;
}
.bs-rep-card:hover{border-color:rgba(55,230,255,.5);box-shadow:0 0 14px rgba(55,230,255,.14)}
.bs-rep-card .row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12.5px}
.bs-rep-card .id{font-weight:800;color:#EAF6FF;letter-spacing:1px}
.bs-rep-card .ttl{color:#DCEBFF;font-weight:600;margin-top:5px;font-size:13.5px}
.bs-rep-card .dsc{color:#7FA3D0;font-size:11.5px;margin-top:2px;line-height:1.5}
.bs-rep-card .meta{color:#5F7FB2;font-size:11px;margin-top:5px}
.bs-rep-card .ops{margin-top:8px;display:flex;gap:7px;flex-wrap:wrap}
.bs-rep-card .time{color:#5F7FB2;font-size:10.5px;margin-left:auto}
/* 深色 pill */
.rep-pill{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;border-radius:999px;padding:2px 9px;letter-spacing:.5px;border:1px solid}
.rep-pill.red{color:#FFB8C0;border-color:rgba(255,93,108,.5);background:rgba(255,93,108,.14)}
.rep-pill.amber{color:#FFD9A0;border-color:rgba(255,180,67,.45);background:rgba(255,180,67,.13)}
.rep-pill.teal{color:#A7F5DD;border-color:rgba(44,246,195,.4);background:rgba(44,246,195,.12)}
.rep-pill.blue{color:#BFE0FF;border-color:rgba(62,139,255,.45);background:rgba(62,139,255,.14)}
.rep-pill.purple{color:#CFC6FF;border-color:rgba(155,140,255,.45);background:rgba(155,140,255,.14)}
.rep-pill.pink{color:#FFC4DE;border-color:rgba(255,130,180,.4);background:rgba(255,130,180,.12)}
.rep-pill.gray{color:#9FB2CC;border-color:rgba(120,160,220,.35);background:rgba(120,160,220,.1)}
/* 状态分布进度条 */
.bs-rep-dist{display:flex;flex-direction:column;gap:8px}
.bs-rep-dist .it{display:flex;align-items:center;gap:9px}
.bs-rep-dist .lb{width:58px;flex:none;font-size:11.5px;color:#8FB4E4;letter-spacing:1px}
.bs-rep-dist .tk{flex:1;height:9px;border-radius:99px;background:rgba(62,139,255,.14);overflow:hidden;position:relative}
.bs-rep-dist .fl{display:block;height:100%;border-radius:99px;transform-origin:left;animation:bsBar .9s cubic-bezier(.2,.7,.3,1) both;box-shadow:0 0 8px currentColor}
.bs-rep-dist .vl{width:26px;flex:none;text-align:right;font-weight:700;font-size:12.5px;color:#EAF6FF}
/* 空态 */
.bs-rep-empty{padding:28px 10px;text-align:center;color:#5F7FB2;font-size:12.5px;letter-spacing:1px}

/* ===== 业务弹窗(跟随主题变量,任何主题下文字清晰;深色主题切回科技深色,见末尾 body.theme-dark 段) ===== */
.bs-rep-modal{
  background:var(--card,#fff)!important;
  color:var(--txt)!important;border:1px solid var(--border)!important;
  box-shadow:0 20px 50px rgba(0,0,0,.22)!important;
}
.bs-rep-modal h3{color:var(--blue2)!important;letter-spacing:.5px}
.bs-rep-modal .fitem label{color:var(--gray)!important}
.bs-rep-modal .fitem input,.bs-rep-modal .fitem select,.bs-rep-modal .fitem textarea{
  background:var(--card,#fff)!important;color:var(--txt)!important;border:1px solid var(--border)!important;outline:none!important;
}
.bs-rep-modal .fitem input:focus,.bs-rep-modal .fitem select:focus,.bs-rep-modal .fitem textarea:focus{border-color:var(--blue)!important}
.bs-rep-modal .fitem select option{background:var(--card,#fff);color:var(--txt)}
.bs-rep-modal .rep-note{font-size:12px;color:var(--gray);margin-top:6px}
.bs-rep-modal .m-foot .btn-outline{background:var(--card,#fff);border-color:var(--border);color:var(--blue2)}
.bs-rep-modal .m-foot .btn-outline:hover{border-color:var(--blue);color:var(--blue)}
.bs-rep-info{background:var(--blue-l);border:1px solid var(--border);border-radius:8px;padding:10px 14px;font-size:13px;color:var(--txt2);margin-bottom:10px}
.bs-rep-info b{color:var(--txt)}
.bs-rep-info.amber{background:var(--amber-l);border-color:var(--amber-l);color:var(--amber)}
.bs-rep-info.teal{background:var(--teal-l);border-color:var(--teal-l);color:var(--teal)}
.bs-rep-tl{border-left:2px solid var(--blue)!important;padding-left:10px}
.bs-rep-tl .it{display:flex;gap:8px;margin-bottom:6px;font-size:12.5px;color:var(--txt2)}
.bs-rep-tl .t{color:var(--blue);font-size:11.5px;white-space:nowrap;font-variant-numeric:tabular-nums}
.bs-rep-tl-label{font-size:13px;font-weight:700;color:var(--blue2);margin:8px 0 6px;letter-spacing:1px}

/* ---- 深色主题:业务弹窗切回科技深色 ---- */
body.theme-dark .bs-rep-modal{
  background:linear-gradient(165deg,#0a1838,#0b1f4a)!important;
  color:#DCEBFF!important;border:1px solid rgba(62,139,255,.4)!important;
  box-shadow:0 20px 50px rgba(0,0,0,.5)!important;
}
body.theme-dark .bs-rep-modal h3{color:#BFE0FF!important}
body.theme-dark .bs-rep-modal .fitem label{color:#8FB4E4!important}
body.theme-dark .bs-rep-modal .fitem input,body.theme-dark .bs-rep-modal .fitem select,body.theme-dark .bs-rep-modal .fitem textarea{
  background:rgba(13,32,70,.7)!important;color:#DCEBFF!important;border:1px solid rgba(62,139,255,.4)!important;
}
body.theme-dark .bs-rep-modal .fitem input:focus,body.theme-dark .bs-rep-modal .fitem select:focus,body.theme-dark .bs-rep-modal .fitem textarea:focus{border-color:#37E6FF!important}
body.theme-dark .bs-rep-modal .fitem select option{background:#0b1f4a;color:#DCEBFF}
body.theme-dark .bs-rep-modal .m-foot .btn-outline{background:transparent;border-color:rgba(120,160,220,.4);color:#9FC3F5}
body.theme-dark .bs-rep-modal .m-foot .btn-outline:hover{border-color:#37E6FF;color:#37E6FF}
body.theme-dark .bs-rep-info{background:rgba(62,139,255,.1);border-color:rgba(62,139,255,.25);color:#C9E2FF}
body.theme-dark .bs-rep-info b{color:#EAF6FF}
body.theme-dark .bs-rep-info.amber{background:rgba(255,180,67,.1);border-color:rgba(255,180,67,.35);color:#FFD9A0}
body.theme-dark .bs-rep-info.teal{background:rgba(44,246,195,.09);border-color:rgba(44,246,195,.3);color:#A7F5DD}
body.theme-dark .bs-rep-tl{border-left:2px solid rgba(62,139,255,.35)!important}
body.theme-dark .bs-rep-tl .it{color:#9FC3F5}
body.theme-dark .bs-rep-tl .t{color:#37E6FF}
body.theme-dark .bs-rep-tl-label{color:#4D9AFF}

/* ===== 移动端维修页(深色局部) ===== */
.bs-rep-m{
  position:relative;border-radius:12px;overflow:hidden;padding:12px;
  background:radial-gradient(800px 400px at 50% -60px,rgba(35,80,180,.32),transparent 60%),
             linear-gradient(180deg,#050D24 0%,#071230 60%,#040A1C 100%);
  color:#DCEBFF;min-height:360px;
}
.bs-rep-m:before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.3;
  background:linear-gradient(rgba(62,139,255,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(62,139,255,.06) 1px,transparent 1px);background-size:40px 40px}
.bs-rep-m>*{position:relative}
.bs-rep-m .m-seg button{background:rgba(13,32,70,.7);border-color:rgba(62,139,255,.4);color:#8FB4E4}
.bs-rep-m .m-seg button.active{background:rgba(62,139,255,.4);border-color:#4D9AFF;color:#EAF6FF}
.bs-rep-m .empty-tip{color:#5F7FB2}
.bs-rep-m .m-btn.teal{background:rgba(44,246,195,.2);border:1px solid rgba(44,246,195,.5);color:#A7F5DD}
.bs-rep-m .m-btn.teal:hover{background:rgba(44,246,195,.3)}
.bs-rep-m .m-card{background:linear-gradient(160deg,rgba(16,36,78,.6),rgba(8,18,44,.85));border-color:rgba(62,139,255,.28);border-left:3px solid currentColor}
.bs-rep-m .m-card .mc-t{color:#EAF6FF}
.bs-rep-m .m-card .mc-b{color:#8FB4E4}
.bs-rep-m .m-card:hover{border-color:rgba(55,230,255,.5)}
.bs-rep-m .mg-card{background:rgba(255,93,108,.14);border:1px solid rgba(255,93,108,.4);border-radius:9px;padding:9px 11px}
.bs-rep-m .mg-card .t{color:#FFD9D0;font-weight:600;font-size:13px}
.bs-rep-m .mg-card .s{color:#7FA3D0;font-size:11.5px;margin:3px 0 7px}
.bs-rep-m .mg-btn{display:inline-flex;align-items:center;gap:5px;padding:6px 18px;border-radius:8px;font-weight:700;font-size:12.5px;color:#fff;background:linear-gradient(135deg,#FF5D6C,#FF82B4);border:none;cursor:pointer;box-shadow:0 0 10px rgba(255,93,108,.4)}
.bs-rep-m .mg-btn:active{transform:scale(.97)}
.bs-rep-m .mg-pool{background:linear-gradient(135deg,rgba(255,93,108,.22),rgba(255,180,67,.16));border:1px solid rgba(255,93,108,.45);border-radius:10px;padding:10px 12px;margin-bottom:12px}
.bs-rep-m .mg-pool .ph{font-size:13px;font-weight:700;color:#FFB8C0;margin-bottom:8px}

/* ===== batch.css (1582B) ===== */
/* ================= ㉔ 列表分页 + ㉖ 批量多选 样式 ================= */
.bsel{width:16px;height:16px;cursor:pointer;accent-color:var(--blue,#185FA5);margin:0 auto;display:block}
.bchk{display:inline-flex;align-items:center;margin-right:2px;cursor:pointer}
.bchk input{width:15px;height:15px;cursor:pointer;accent-color:var(--blue,#185FA5)}
.tbl.has-batch th:first-child,.tbl.has-batch td:first-child{width:34px;text-align:center;vertical-align:middle}
.pager{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:12px;font-size:13px;color:var(--gray,#5F5E5A)}
.pager .pg{min-width:30px;height:30px;padding:0 8px;border:1px solid var(--border,#D3D1C7);border-radius:7px;background:var(--card,#fff);color:var(--txt,#2C2C2A);font-size:13px;cursor:pointer;transition:.15s}
.pager .pg:hover:not(:disabled){border-color:var(--blue,#185FA5);color:var(--blue,#185FA5)}
.pager .pg.on{background:var(--blue,#185FA5);border-color:var(--blue,#185FA5);color:#fff}
.pager .pg:disabled{opacity:.4;cursor:not-allowed}
.batch-bar{display:flex;align-items:center;gap:10px;margin-top:12px;padding:9px 14px;background:var(--blue-l,#E6F1FB);border:1px solid var(--blue,#185FA5);border-radius:10px;position:sticky;bottom:10px;z-index:5}
.batch-bar .bc{font-size:13px;font-weight:600;color:var(--blue2,#0C447C)}
.batch-bar .btn-sm{padding:5px 12px;font-size:12.5px}


/* ===== 功能启用/停用:停用态样式(移动端「我的」入口) ===== */
.wv-feat-off{opacity:.5;filter:grayscale(.7)}
.wv-feat-off .mc-t{text-decoration:line-through;text-decoration-color:var(--gray)}

/* ===== weaver.css (10218B) ===== */
/* =====================================================================
 * 泛微专业企业风皮肤层(参考 e-cology 视觉:紧凑 / 方正 / 高信息密度)
 *  - 通过 body.skin-weaver 全局生效(见 index.html <body class="skin-weaver">)
 *  - 与 themes.js 的 5 套主题并存:颜色仍走 CSS 变量,本层只改"形"(圆角/间距/层级)
 *  - 深色主题下自动适配(所有覆盖均带 body.theme-dark 分支)
 * ===================================================================== */

/* ---------- 全局基调:方正小圆角 / 细边框 ---------- */
body.skin-weaver{--radius:6px;--radius-s:4px}
body.skin-weaver input,body.skin-weaver select,body.skin-weaver textarea,
body.skin-weaver .inp{border-radius:var(--radius-s);border-color:#D9DFE7;padding:7px 10px;font-size:13.5px}
body.skin-weaver input:focus,body.skin-weaver select:focus,body.skin-weaver textarea:focus,
body.skin-weaver .inp:focus{box-shadow:0 0 0 3px rgba(24,95,165,.12)}

/* ---------- 顶栏:白底细边 + 品牌蓝标识,右区紧凑 ---------- */
body.skin-weaver .topbar{height:52px;border-bottom:2px solid var(--blue,#185FA5);padding:0 18px;gap:12px;box-shadow:none}
body.skin-weaver .topbar .logo{gap:9px}
body.skin-weaver .topbar .logo::before{content:'';width:26px;height:26px;border-radius:6px;background:linear-gradient(135deg,var(--blue,#185FA5),var(--teal,#0F6E56));display:inline-block;flex-shrink:0}
body.skin-weaver .topbar .logo .dot{display:none}
body.skin-weaver .gs-input{border-radius:16px!important;border:1px solid #D9DFE7!important;background:var(--card,#fff)!important;padding:5px 12px!important;font-size:12.5px!important}
body.skin-weaver .gs-input:focus{border-color:var(--blue,#185FA5)!important;box-shadow:0 0 0 3px rgba(24,95,165,.12)!important}
body.skin-weaver .mode-switch{border-radius:var(--radius-s);overflow:hidden}
body.skin-weaver .mode-switch button{padding:5px 12px;font-size:12.5px}
body.skin-weaver .mode-switch button.active{background:var(--blue,#185FA5)}
body.skin-weaver .user-chip{padding:4px 12px;font-size:12.5px}
body.skin-weaver .org-sel{height:30px;border-radius:var(--radius-s);font-size:12.5px}

/* ---------- 侧栏:紧凑分组导航 ---------- */
body.skin-weaver .sidebar{width:216px;padding:10px 8px}
body.skin-weaver .nav-group-h{padding:7px 8px;border-radius:var(--radius-s);gap:8px}
body.skin-weaver .nav-group-h .ng-ic{width:26px;height:26px;border-radius:6px;font-size:14px}
body.skin-weaver .nav-group-h .ng-t{font-size:13px}
body.skin-weaver .nav-group-body{margin-left:8px;padding-left:9px;border-left:1px solid var(--border,#E3E8EF)}
body.skin-weaver .sidebar .menu-item{padding:6.5px 9px;border-radius:var(--radius-s);font-size:13px;margin-bottom:0}
body.skin-weaver .sidebar .menu-item.active::after{left:-1px;width:3px}
body.skin-weaver .sidebar .menu-item .mi-dot{width:4px;height:4px}

/* ---------- 内容区:信息密度提升 ---------- */
body.skin-weaver .content{padding:16px 18px}
body.skin-weaver .page-title{font-size:17px;margin-bottom:2px;letter-spacing:.2px}
body.skin-weaver .page-sub{font-size:12.5px;margin-bottom:14px}

/* ---------- 统计卡 / 面板:方正 + 顶部分隔 ---------- */
body.skin-weaver .stat-card{border-radius:8px;padding:14px 16px;border:1px solid #E3E8EF!important;box-shadow:none}
body.skin-weaver .stat-card .v{font-size:23px}
body.skin-weaver .stat-card .l{font-size:12.5px}
body.skin-weaver .stat-card .tag{border-radius:var(--radius-s)}
body.skin-weaver .panel{border-radius:8px;padding:16px 18px;margin-bottom:14px;border:1px solid #E3E8EF!important;box-shadow:none}
body.skin-weaver .panel .p-title{font-size:14px;margin-bottom:10px}
body.skin-weaver .panel .p-title .dot{width:3px;height:14px;border-radius:2px}

/* ---------- 表格:浅灰表头 / 细分隔 / 紧凑行 ---------- */
body.skin-weaver .tbl-wrap{border-radius:6px;border-color:#E3E8EF}
body.skin-weaver table.tbl{font-size:12.8px}
body.skin-weaver .tbl th{background:#F4F6FA;color:#3D4B5F;padding:9px 12px;font-weight:600;font-size:12.3px;border-bottom:1px solid #E3E8EF;white-space:nowrap}
body.skin-weaver .tbl td{padding:8px 12px;border-top:1px solid #EEF1F6}
body.skin-weaver .tbl tr:hover td{background:#F7FAFD}

/* ---------- 按钮:紧凑方正 ---------- */
body.skin-weaver .btn{padding:7px 14px;border-radius:var(--radius-s);font-size:12.8px}
body.skin-weaver .btn-sm{padding:3.5px 10px;font-size:12px;border-radius:var(--radius-s)}
body.skin-weaver .btn-ghost{padding:4px 8px;font-size:12.3px}
body.skin-weaver .btn-primary{background:linear-gradient(180deg,var(--blue,#1E6FBF),var(--blue2,#16508C));border:none}
body.skin-weaver .btn-primary:hover{filter:brightness(1.08)}
body.skin-weaver .btn-outline{border:1px solid #C9D2DD;color:var(--blue2,#16508C)}

/* ---------- 表单:紧凑网格 ---------- */
body.skin-weaver .fgrid{gap:10px 12px}
body.skin-weaver .fitem label{font-size:12px;margin-bottom:3px}
body.skin-weaver .fbar{gap:8px;margin-bottom:12px}
body.skin-weaver .fbar select{min-width:100px;padding:6px 8px}

/* ---------- 模态:方正头 ---------- */
body.skin-weaver .modal{border-radius:10px;padding:20px 22px}
body.skin-weaver .modal h3{font-size:15.5px;margin-bottom:14px}
body.skin-weaver .modal .m-foot{margin-top:16px}

/* ---------- 标签页条:紧凑 ---------- */
body.skin-weaver .tab-bar{padding:7px 18px;margin:-16px -18px 14px;border-bottom:1px solid #E3E8EF}
body.skin-weaver .tab{padding:5.5px 8px 5.5px 12px;border-radius:var(--radius-s);font-size:12.5px}
body.skin-weaver .tab.active{box-shadow:none;border-color:var(--blue,#185FA5);color:var(--blue2,#16508C)}

/* ---------- 徽标:细胆 ---------- */
body.skin-weaver .pill{padding:2px 8px;font-size:11.3px;border-radius:var(--radius-s)}

/* ---------- 看板列:紧凑卡片 ---------- */
body.skin-weaver .kb-col{border-radius:6px;padding:8px}
body.skin-weaver .kb-item{border-radius:var(--radius-s);padding:8px 10px;margin-bottom:6px;font-size:12.3px}
body.skin-weaver .kb-item b{font-size:12.8px}

/* ---------- 日周月记录卡 / 消息 ---------- */
body.skin-weaver .rec-card{border-radius:6px;padding:12px 14px}
body.skin-weaver .msg-item .mi-ic{width:32px;height:32px;border-radius:6px;font-size:15px}

/* ---------- 移动端:保持圆润(触屏)但统一品牌 ---------- */
body.skin-weaver .m-card{border-radius:8px}
body.skin-weaver .m-check{border-radius:8px}
body.skin-weaver .m-btn{border-radius:8px}

/* ================= 深色主题适配 ================= */
body.theme-dark.skin-weaver input,body.theme-dark.skin-weaver select,body.theme-dark.skin-weaver textarea,
body.theme-dark.skin-weaver .inp{border-color:#2E3A4E;background:rgba(255,255,255,.04);color:var(--txt,#E8EDF4)}
body.theme-dark.skin-weaver .gs-input{border-color:#2E3A4E!important;background:#101825!important;color:var(--txt,#E8EDF4)!important}
body.theme-dark.skin-weaver .tbl th{background:#1B2434;color:#B9C6D9;border-bottom-color:#2E3A4E}
body.theme-dark.skin-weaver .tbl td{border-top-color:#242F43}
body.theme-dark.skin-weaver .tbl tr:hover td{background:#1E2938}
body.theme-dark.skin-weaver .stat-card,body.theme-dark.skin-weaver .panel{border-color:#2E3A4E!important}
body.theme-dark.skin-weaver .btn-outline{border-color:#3A4A63;color:var(--blue2,#9FC3F5)}
body.theme-dark.skin-weaver .btn-primary{background:linear-gradient(180deg,#2E6FB8,#1B4E82)}
body.theme-dark.skin-weaver .tab-bar{border-bottom-color:#2E3A4E}
body.theme-dark.skin-weaver .tab{border-color:#2E3A4E}

/* ================= 窄屏适配 ================= */
@media(max-width:920px){
  body.skin-weaver .sidebar{width:190px}
  body.skin-weaver .content{padding:14px 14px}
  body.skin-weaver .tab-bar{margin:-14px -14px 12px;padding:6px 14px}
}

/* ================= 结构性增强:页头蓝色竖条 + 工具条 ================= */
/* 页标题:左侧品牌色竖条(泛微经典区块标题样式) */
body.skin-weaver .page-title{position:relative;padding-left:11px}
body.skin-weaver .page-title::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:4px;height:16px;border-radius:2px;background:var(--blue,#185FA5)}
body.skin-weaver .page-sub{padding-left:11px}

/* 过滤工具条:顶部细线分隔,按钮右对齐更规整 */
body.skin-weaver .fbar{padding-bottom:10px;border-bottom:1px solid #EEF1F6;margin-bottom:12px}
body.skin-weaver .fbar .btn{white-space:nowrap}
body.skin-weaver .fbar .spacer{flex:1;min-width:8px}

/* 面板标题:同样带短竖条,层级更清晰 */
body.skin-weaver .panel .p-title{padding-left:0}
body.skin-weaver .panel .p-title .dot{width:4px;height:14px;border-radius:2px;background:var(--blue,#185FA5)}

/* 空态:泛微风格的中性提示块 */
body.skin-weaver .empty,body.skin-weaver .empty-tip{background:#FAFBFD;border:1px dashed #E3E8EF;border-radius:6px;color:#8A97A8;padding:28px 12px;font-size:13px}

/* 表格首个数据列加粗(突出主键列,提升扫读效率) */
body.skin-weaver .tbl td:first-child{color:var(--txt,#2C2C2A);font-weight:500}

/* 统计卡:数值与标题左对齐更紧凑 */
body.skin-weaver .stat-card .v{letter-spacing:-.5px}

/* 分页条:更贴近泛微列表底部条 */
body.skin-weaver .pager{background:#FAFBFD;border:1px solid #EEF1F6;border-radius:6px;padding:7px 12px;margin-top:12px}
body.skin-weaver .pager button{border-color:#D9DFE7;background:#fff;padding:3px 10px}
body.skin-weaver .pager button:hover:not(:disabled){border-color:var(--blue,#185FA5);color:var(--blue2,#16508C);background:#F2F8FE}
body.skin-weaver .pager .cur{background:var(--blue,#185FA5);border-color:var(--blue,#185FA5);color:#fff}

/* 批量操作条:泛微式提示条 */
body.skin-weaver .batch-bar{border-radius:6px;background:#EAF3FC;border:1px solid #B9D6F0;padding:7px 12px}

/* 深色适配:上述结构性元素 */
body.theme-dark.skin-weaver .fbar{border-bottom-color:#242F43}
body.theme-dark.skin-weaver .empty,body.theme-dark.skin-weaver .empty-tip{background:#151D2B;border-color:#2E3A4E;color:#8A94A6}
body.theme-dark.skin-weaver .pager{background:#151D2B;border-color:#2E3A4E}
body.theme-dark.skin-weaver .pager button{border-color:#2E3A4E;background:#171F2E;color:#C3CCD9}
body.theme-dark.skin-weaver .batch-bar{background:#1B2A45;border-color:#2E4A6E}
/* ===== weaver-layout.css (21950B) ===== */
/* =====================================================================
 * 泛微式页面骨架原语(四段式列表页布局)
 *  ① 面包屑条 ② 页头操作区 ③ 查询条件区 ④ 亮条工具栏 ⑤ 序号表格
 *  仅在 body.skin-weaver 下渲染可见;现代风(modern)自动隐藏,布局回退为原生
 * ===================================================================== */

/* ---------- 现代风:隐藏四段骨架,恢复原生标题/工具条 ---------- */
body:not(.skin-weaver) .wv-crumb,
body:not(.skin-weaver) .wv-tool{display:none}
body:not(.skin-weaver) .wv-head{border:none;background:none;padding:0 0 12px;display:block}
body:not(.skin-weaver) .wv-head-t{font-size:20px;color:var(--blue2);font-weight:700}
body:not(.skin-weaver) .wv-head-t .dot{display:none}
body:not(.skin-weaver) .wv-head-s{font-size:13px;color:var(--gray);margin-bottom:14px}
body:not(.skin-weaver) .wv-head-r{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-start;margin-bottom:14px}
body:not(.skin-weaver) .wv-query{border:none;background:none;padding:0;margin-bottom:14px}
body:not(.skin-weaver) .wv-query .qsp{max-width:260px}
body:not(.skin-weaver) .page-title::before{display:none}
body:not(.skin-weaver) .tbl th.wv-seq,
body:not(.skin-weaver) .tbl td.wv-seq{display:none}

/* ---------- ① 面包屑条(可点击导航) ---------- */
.wv-crumb{display:flex;align-items:center;gap:6px;padding:7px 16px;background:#F4F6FA;border:1px solid #E3E8EF;border-bottom:none;border-radius:6px 6px 0 0;font-size:12.3px;color:#6B7A90;white-space:nowrap;overflow:hidden}
.wv-crumb b{color:#1E3550;font-weight:600;white-space:nowrap}
.wv-crumb .sep{opacity:.45}
/* 可点击节点与分组下拉 */
.wv-crumb .wvc-link{color:#1E6FBF;text-decoration:none;cursor:pointer}
.wv-crumb .wvc-link:hover{text-decoration:underline}
.wvc-drop{position:relative;display:inline-flex;align-items:center;gap:3px;cursor:pointer}
.wvc-caret{font-size:10px;opacity:.6}
.wvc-menu{display:none;position:absolute;left:0;top:calc(100% + 4px);z-index:140;min-width:150px;background:#fff;border:1px solid #D2DDEA;border-radius:6px;box-shadow:0 10px 26px rgba(12,68,124,.16);padding:5px}
.wvc-menu.show{display:block}
.wvc-menu a{display:block;padding:6px 10px;border-radius:4px;font-size:12.8px;color:#33455C;text-decoration:none}
.wvc-menu a:hover{background:#F2F8FE;color:#1E6FBF}
.wvc-menu a.on{background:#E6F1FB;color:#0C447C;font-weight:600}
body.theme-dark .wvc-menu{background:#171F2E;border-color:#2E3A4E}
body.theme-dark .wvc-menu a{color:#C3CCD9}
body.theme-dark .wvc-menu a:hover{background:#1E2938}
body.theme-dark .wvc-menu a.on{background:#1B2A45;color:#9FC3F5}

/* ② 页头操作区:左侧标题 + 右侧主操作(泛微式页面级按钮区) */
.wv-head{display:flex;align-items:flex-start;gap:12px;padding:10px 16px 9px;border:1px solid #E3E8EF;background:#fff;border-radius:0;justify-content:space-between;flex-wrap:wrap}
.wv-head-l{flex:1;min-width:180px}
.wv-head-t{font-size:15.5px;font-weight:700;color:#1A3355;line-height:1.4;display:flex;align-items:center;gap:8px}
.wv-head-t .dot{width:4px;height:16px;border-radius:2px;background:#185FA5;display:inline-block;flex-shrink:0}
.wv-head-s{font-size:12.3px;color:#6B7A90;margin-top:2px}
.wv-head-r{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}

/* ③ 查询条件区:浅底/紧凑表单行 */
.wv-query{padding:10px 16px 8px;background:#FAFBFD;border:1px solid #E3E8EF;border-top:none;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.wv-query label{font-size:12.5px;color:#4B5D75;white-space:nowrap}
.wv-query .inp,.wv-query select{height:30px;padding:4px 8px;font-size:13px}
.wv-query .qsp{flex:1 1 auto;min-width:220px;max-width:360px;margin-left:auto}

/* ④ 亮条工具栏:分页信息在左,批量操作与导出在右 */
.wv-tool{display:flex;align-items:center;gap:8px;padding:7px 10px;background:#EEF3FA;border:1px solid #D2DDEA;border-top:none;border-radius:0 0 0 0;font-size:12.5px;color:#4B5D75;flex-wrap:wrap}
.wv-tool .spacer{flex:1}

/* ⑤ 序号列与文字操作列 */
.tbl th.wv-seq{width:44px;text-align:center}
.tbl td.wv-seq{text-align:center;color:#8A97A8;font-variant-numeric:tabular-nums;font-size:12.3px}
.tbl .wv-ops{white-space:nowrap}
.tbl .wv-ops a,.tbl .wv-ops button{font-size:12.3px;color:#1E6FBF;text-decoration:none;background:none;border:none;padding:2px 4px;cursor:pointer}
.tbl .wv-ops a:hover,.tbl .wv-ops button:hover{text-decoration:underline}
.tbl .wv-ops .danger{color:#A32D2D}
.tbl .wv-ops .muted{color:#8A97A8}

/* 泛微风下:四段容器的圆角合并为一个整体外观 */
body.skin-weaver .wv-crumb{border-color:#E3E8EF}
body.skin-weaver .wv-head{border-color:#E3E8EF}
body.skin-weaver .wv-query{border-color:#E3E8EF}
body.skin-weaver .wv-tool{border-color:#D2DDEA}
body.skin-weaver .tbl-wrap{border-radius:0 0 6px 6px;border-top:none;margin-top:0}
body.skin-weaver .tbl th.wv-seq{background:#F4F6FA}

/* 面包屑直连传统标题页(page-title/page-sub)时的衔接:合并为一体化页头块 */
body.skin-weaver .wv-crumb+.page-title{margin-top:0;padding:11px 16px 2px 27px;background:#fff;border:1px solid #E3E8EF;border-top:none;border-bottom:none;font-size:15.5px}
body.skin-weaver .wv-crumb+.page-title::before{left:16px}
body.skin-weaver .wv-crumb+.page-title+.page-sub{padding:0 16px 10px 27px;background:#fff;border:1px solid #E3E8EF;border-top:none;margin-bottom:0}
/* 紧随其后的工具条/面板与之连成整体 */
body.skin-weaver .wv-crumb+.page-title+.page-sub+.fbar{padding:10px 16px 8px;background:#FAFBFD;border:1px solid #E3E8EF;border-top:none;margin-bottom:0}
body.skin-weaver .wv-crumb+.page-title+.page-sub+.fbar+.tbl-wrap,
body.skin-weaver .wv-crumb+.page-title+.page-sub+.tbl-wrap{border-radius:0 0 6px 6px;border-top:none;margin-top:0}
body.skin-weaver .wv-crumb+.page-title+.page-sub+.row2,
body.skin-weaver .wv-crumb+.page-title+.page-sub+.cards,
body.skin-weaver .wv-crumb+.page-title+.page-sub+.panel{margin-top:12px}

/* 深色适配 */
body.theme-dark .wv-crumb{background:#111826;border-color:#2E3A4E;color:#8A94A6}
body.theme-dark .wv-crumb b{color:#C3CCD9}
body.theme-dark .wv-head{background:#171F2E;border-color:#2E3A4E}
body.theme-dark .wv-head-t{color:#E8EDF4}
body.theme-dark .wv-query{background:#131A27;border-color:#2E3A4E}
body.theme-dark .wv-tool{background:#0F1A2B;border-color:#2E3A4E;color:#8A94A6}
body.theme-dark .tbl th.wv-seq{background:#1B2434;color:#B9C6D9}

/* 窄屏:查询区纵向 */
@media(max-width:640px){
  .wv-query{flex-direction:column;align-items:stretch}
  .wv-query .qsp{max-width:none;margin-left:0}
  .wv-head{flex-direction:column}
  .wv-head-r{justify-content:flex-start}
}

/* ---------- ⑥ 表单:泛微固定双列紧凑网格 + 右对齐标签 ---------- */
body.skin-weaver .fgrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border:1px solid #E3E8EF;border-radius:6px;overflow:hidden;background:#fff}
body.skin-weaver .fgrid>.fitem{margin:0;padding:8px 12px;border-bottom:1px solid #EEF1F6;border-right:1px solid #EEF1F6;display:flex;align-items:center;gap:10px;min-height:42px}
body.skin-weaver .fgrid>.fitem:nth-child(2n){border-right:none}
body.skin-weaver .fgrid>.fitem>label{flex:0 0 92px;margin:0;font-size:12.5px;color:#5A6B80;text-align:right;font-weight:400}
body.skin-weaver .fgrid>.fitem>input,body.skin-weaver .fgrid>.fitem>select,
body.skin-weaver .fgrid>.fitem>.msel,body.skin-weaver .fgrid>.fitem>div{flex:1 1 auto;min-width:0;width:auto}
body.skin-weaver .fgrid>.fitem>div{font-size:13px;color:var(--txt,#2C2C2A)}
/* 跨列项(整行):标签上置 */
body.skin-weaver .fgrid>.fitem[style*="grid-column"]{display:block;border-right:none}
body.skin-weaver .fgrid>.fitem[style*="grid-column"]>label{text-align:left;margin-bottom:4px}
@media(max-width:640px){
  body.skin-weaver .fgrid{grid-template-columns:1fr}
  body.skin-weaver .fgrid>.fitem{border-right:none}
  body.skin-weaver .fgrid>.fitem>label{flex-basis:80px}
}
body.theme-dark.skin-weaver .fgrid{background:#171F2E;border-color:#2E3A4E}
body.theme-dark.skin-weaver .fgrid>.fitem{border-bottom-color:#242F43;border-right-color:#242F43}
body.theme-dark.skin-weaver .fgrid>.fitem>label{color:#8A94A6}
/* 表单弹窗:分区标题 + 6列基座在泛微风下收敛为双列(标签右对齐横排) */
body.skin-weaver .fgrid-form .fg-2,body.skin-weaver .fgrid-form .fg-3{grid-column:span 1}
body.skin-weaver .fgrid-form .fsec{margin:0;padding:7px 12px;border-bottom:1px solid #EEF1F6;background:#F7F9FC;font-size:12px;color:#5A6B80;font-weight:600}
body.theme-dark.skin-weaver .fgrid-form .fsec{border-bottom-color:#242F43;background:#1B2436;color:#8A94A6}
body.skin-weaver .fgrid-form .fsec::before{background:#2E6BE6}

/* ---------- ⑧ 表格密度切换(紧凑/标准/宽松) ---------- */
body.skin-weaver.density-compact .tbl td{padding:5px 12px}
body.skin-weaver.density-compact .tbl th{padding:6px 12px}
body.skin-weaver.density-loose .tbl td{padding:13px 12px}
body.skin-weaver.density-loose .tbl th{padding:12px}
/* 列设置:隐藏指定列(data-col 匹配) */
body.skin-weaver table.tbl.wv-hide-idx th.wv-c-idx,body.skin-weaver table.tbl.wv-hide-idx td.wv-c-idx{display:none}
body.skin-weaver table.tbl.wv-hide-regno th.wv-c-regno,body.skin-weaver table.tbl.wv-hide-regno td.wv-c-regno{display:none}
body.skin-weaver table.tbl.wv-hide-purchase th.wv-c-purchase,body.skin-weaver table.tbl.wv-hide-purchase td.wv-c-purchase{display:none}
body.skin-weaver table.tbl.wv-hide-expire th.wv-c-expire,body.skin-weaver table.tbl.wv-hide-expire td.wv-c-expire{display:none}
body.skin-weaver table.tbl.wv-hide-manual th.wv-c-manual,body.skin-weaver table.tbl.wv-hide-manual td.wv-c-manual{display:none}
body.skin-weaver table.tbl.wv-hide-maint th.wv-c-maint,body.skin-weaver table.tbl.wv-hide-maint td.wv-c-maint{display:none}
/* ---------- ⑨ 行内快速编辑:悬停暗示 + 编辑态 ---------- */
body.skin-weaver .tbl td.wv-inline{cursor:pointer}
body.skin-weaver .tbl td.wv-inline:hover{background:#F2F8FE;box-shadow:inset 0 0 0 1px #B9D6F0}
body.skin-weaver .tbl td.wv-inline:hover::after{content:' ✎';font-size:10px;color:#1E6FBF;opacity:.7}
body.skin-weaver .tbl td.wv-inline-edit{padding:2px 6px!important}
body.theme-dark.skin-weaver .tbl td.wv-inline:hover{background:#1E2938;box-shadow:inset 0 0 0 1px #2E4A6E}

/* 列设置下拉面板 */
.wv-colset{position:relative;display:inline-block}
.wv-colset-panel{display:none;position:absolute;right:0;top:calc(100% + 4px);z-index:130;min-width:190px;background:#fff;border:1px solid #D2DDEA;border-radius:6px;box-shadow:0 10px 26px rgba(12,68,124,.16);padding:8px}
.wv-colset-panel.open{display:block}
.wv-colset-panel .hd{font-size:12px;color:#6B7A90;padding:2px 6px 7px;border-bottom:1px solid #EEF1F6;margin-bottom:5px}
.wv-colset-panel label{display:flex;align-items:center;gap:7px;padding:5px 6px;border-radius:4px;font-size:12.8px;color:#33455C;cursor:pointer;user-select:none}
.wv-colset-panel label:hover{background:#F2F8FE}
.wv-colset-panel input{accent-color:#185FA5}
body.theme-dark .wv-colset-panel{background:#171F2E;border-color:#2E3A4E}
body.theme-dark .wv-colset-panel .hd{color:#8A94A6;border-bottom-color:#242F43}
body.theme-dark .wv-colset-panel label{color:#C3CCD9}
body.theme-dark .wv-colset-panel label:hover{background:#1E2938}
/* ---------- ⑩ 列拖拽调宽:表头右侧拖柄 + 拖拽提示 ---------- */
body.skin-weaver .tbl th{position:relative}
body.skin-weaver .tbl th .wv-col-resizer{position:absolute;top:0;right:-3px;width:7px;height:100%;cursor:col-resize;z-index:3}
body.skin-weaver .tbl th .wv-col-resizer::after{content:'';position:absolute;left:3px;top:22%;height:56%;width:1px;background:transparent}
body.skin-weaver .tbl th:hover .wv-col-resizer::after{background:#B9D6F0}
body.skin-weaver .tbl th .wv-col-resizer:hover::after{background:#185FA5;width:2px;left:2.5px}
.wv-col-drag-hint{position:fixed;z-index:200;background:#0C447C;color:#fff;font-size:11.5px;padding:2px 7px;border-radius:4px;pointer-events:none;font-variant-numeric:tabular-nums}
body.theme-dark.skin-weaver .tbl th:hover .wv-col-resizer::after{background:#2E4A6E}

/* ---------- ⑪ 导出列选择弹窗 ---------- */
.wv-exp-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px;max-height:270px;overflow:auto;border:1px solid #E3E8EF;border-radius:6px;padding:8px;margin:8px 0}
.wv-exp-cols label{display:flex;align-items:center;gap:7px;padding:5px 7px;border-radius:4px;font-size:12.8px;color:#33455C;cursor:pointer;user-select:none}
.wv-exp-cols label:hover{background:#F2F8FE}
.wv-exp-cols input{accent-color:#185FA5}
body.theme-dark .wv-exp-cols{border-color:#2E3A4E}
body.theme-dark .wv-exp-cols label{color:#C3CCD9}

/* ---------- ⑦ 表格增强:粘性表头 + 选中行高亮 + 斑马纹 ---------- */
body.skin-weaver table.tbl{position:relative}
body.skin-weaver .tbl-wrap{position:relative}
body.skin-weaver table.tbl>tr:first-child th{position:sticky;top:0;z-index:2}
body.skin-weaver .tbl tr:has(.bsel:checked) td{background:#EAF3FC}
body.theme-dark.skin-weaver .tbl tr:has(.bsel:checked) td{background:#1B2A45}
body.skin-weaver table.tbl>tr:nth-child(even) td{background:#FBFCFE}
body.skin-weaver table.tbl>tr:nth-child(even):hover td{background:#F7FAFD}
body.theme-dark.skin-weaver table.tbl>tr:nth-child(even) td{background:#141C29}

/* =====================================================================
 * 三级菜单中心(hub):L2 菜单项点开后,右侧以功能卡片列出其下 L3 页面
 * ===================================================================== */
.hub-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(272px,1fr));gap:12px;padding:14px 16px;border:1px solid #E3E8EF;border-top:none;border-radius:0 0 6px 6px;background:#fff}
.hub-card{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1px solid #E3E8EF;border-radius:6px;background:#fff;cursor:pointer;transition:.15s;position:relative}
.hub-card:hover{border-color:#185FA5;box-shadow:0 6px 18px rgba(24,95,165,.12);transform:translateY(-1px)}
.hub-card .hc-ic{width:42px;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.hub-card .hc-main{flex:1;min-width:0}
.hub-card .hc-n{font-size:14.2px;font-weight:600;color:#1A3355;margin-bottom:2px}
.hub-card .hc-s{font-size:12.2px;color:#6B7A90;line-height:1.5}
.hub-card .hc-stat{font-size:11.5px;color:#0F6E56;background:#EAF6F1;border-radius:999px;padding:2px 9px;white-space:nowrap;align-self:flex-start}
.hub-card .hc-go{font-size:12px;color:#185FA5;opacity:0;transition:.15s;white-space:nowrap}
.hub-card:hover .hc-go{opacity:1}
/* 侧栏 L2 菜单项的三级数徽标与箭头 */
.sidebar .menu-item.lv2{font-weight:500}
.sidebar .menu-item .lv2-cnt{margin-left:auto;background:#EEF3FA;color:#4B5D75;font-size:10.8px;border-radius:999px;padding:0 7px;min-width:16px;text-align:center;font-variant-numeric:tabular-nums}
.sidebar .menu-item .lv2-arrow{margin-left:6px;color:#A9B6C7;font-size:14px;line-height:1}
.sidebar .menu-item.active .lv2-arrow{color:#185FA5}
/* 深色适配 */
body.theme-dark .hub-grid{background:#141B26;border-color:#2A3545}
body.theme-dark .hub-card{background:#171F2E;border-color:#2A3545}
body.theme-dark .hub-card:hover{border-color:#3E6EA8;box-shadow:0 6px 18px rgba(0,0,0,.4)}
body.theme-dark .hub-card .hc-n{color:#E5EAF3}
body.theme-dark .hub-card .hc-s{color:#8B9BB0}
body.theme-dark .hub-card .hc-stat{background:#16283A;color:#7FD1B0}
body.theme-dark .sidebar .menu-item .lv2-cnt{background:#22303F;color:#A9B6C7}
/* 窄屏 */
@media(max-width:640px){.hub-grid{grid-template-columns:1fr;padding:10px}}
/* 现代风:hub 也保持卡片外观(不禁用),仅去亮条边框感 */
body:not(.skin-weaver) .hub-grid{border:none;padding:0;gap:14px}
body:not(.skin-weaver) .hub-card{border-radius:12px;padding:16px 18px}

/* =====================================================================
 * 移动端导航简化(2026-10-15):底部 5 项 + 业务一二级菜单
 * ===================================================================== */
/* 底部导航:中间「扫码」为主操作,凸起圆按钮 */
.m-nav button .mi{position:relative;display:inline-flex;align-items:center;justify-content:center}
.m-nav button.big .mi{width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,#185FA5,#0F6E56);color:#fff;font-size:22px;margin-top:-20px;box-shadow:0 6px 16px rgba(24,95,165,.38);border:3px solid var(--card,#fff)}
.m-nav button.big{color:var(--blue2)}
.m-nav .m-badge{position:absolute;top:-4px;right:-8px;background:#E23D3D;color:#fff;font-size:9.5px;font-weight:600;border-radius:999px;padding:0 5px;min-width:15px;height:15px;line-height:15px;text-align:center;box-shadow:0 0 0 2px var(--card,#fff)}
/* 业务「一二级菜单」页 */
.mb-head{font-size:13px;font-weight:700;color:var(--blue2);margin:2px 0 10px;display:flex;align-items:center;gap:8px}
.mb-head .mb-tip{font-size:11px;font-weight:400;color:var(--gray);margin-left:auto}
.mb-sec{margin-bottom:14px}
.mb-sec-h{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.mb-sec-h b{font-size:13px;color:var(--txt)}
.mb-sec-ic{width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:14px}
.mb-l2{display:flex;align-items:center;gap:8px;background:var(--card,#fff);border:1px solid var(--border);border-radius:10px;padding:11px 13px;margin-bottom:6px;font-size:13.5px;font-weight:600;color:var(--txt);cursor:pointer;transition:.14s}
.mb-l2:active{background:var(--blue-l)}
.mb-l2.open{border-color:var(--blue);background:var(--blue-l)}
.mb-l2 .mdot{width:5px;height:5px;border-radius:99px;background:var(--blue);flex-shrink:0}
.mb-l2 .mt{flex:1;min-width:0}
.mb-l2 .mb-cnt{background:#EEF3FA;color:#4B5D75;font-size:10.5px;border-radius:999px;padding:0 7px;font-variant-numeric:tabular-nums}
.mb-l2 .mgo{color:#A9B6C7;font-size:15px;line-height:1}
.mb-l2.open .mgo{color:var(--blue2)}
/* 三级功能项 */
.mb-l3{margin:-2px 0 8px 12px;padding-left:12px;border-left:2px solid var(--blue-l)}
.mb-l3-item{display:flex;align-items:center;gap:10px;background:var(--card,#fff);border:1px solid var(--border);border-radius:9px;padding:10px 11px;margin-bottom:6px;cursor:pointer}
.mb-l3-item:active{background:var(--hover,#fafcff)}
.mb-l3-item .l3-ic{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0}
.mb-l3-item .l3-t{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.mb-l3-item .l3-t b{font-size:13px;color:var(--txt)}
.mb-l3-item .l3-t span{font-size:11.2px;color:var(--gray);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mb-l3-item .mb-tag{font-size:9.8px;border-radius:999px;padding:1px 7px;background:var(--teal-l,#EAF6F1);color:var(--teal,#0F6E56);white-space:nowrap}
.mb-l3-item .mb-tag.off{background:var(--gray-l,#F1EFE8);color:var(--gray,#8A97A8)}
.mb-l3-item .mgo{color:#A9B6C7;font-size:15px}
/* m-body 底部留白(底部导航变高) */
.m-body{padding-bottom:104px}

/* =====================================================================
 * 移动端「业务」图标宫格(2026-10-15):分组 + 图标方块,替代折叠列表
 * ===================================================================== */
/* 顶部高频快捷条 */
.mg-quick{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
.mg-q{display:flex;flex-direction:column;align-items:center;gap:5px;padding:11px 4px;background:var(--card,#fff);border:1px solid var(--border);border-radius:12px;cursor:pointer;transition:.14s}
.mg-q:active{transform:scale(.96);background:var(--blue-l)}
.mg-q-ic{width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:19px}
.mg-q-n{font-size:11.5px;font-weight:600;color:var(--txt);white-space:nowrap}
/* 分组 */
.mg-sec{margin-bottom:15px}
.mg-sec-h{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.mg-sec-h b{font-size:13px;color:var(--txt)}
.mg-sec-ic{width:24px;height:24px;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0}
.mg-sec-n{margin-left:auto;font-size:10.5px;color:var(--gray);background:var(--hover,#F1F4F9);border-radius:999px;padding:1px 8px;font-variant-numeric:tabular-nums}
/* 图标网格:每行 4 个 */
.mg-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}
.mg-tile{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:13px 4px 11px;background:var(--card,#fff);border:1px solid var(--border);border-radius:12px;cursor:pointer;transition:.14s}
.mg-tile:active{transform:scale(.95);border-color:var(--blue)}
.mg-ic{width:44px;height:44px;border-radius:13px;display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0}
.mg-n{font-size:11.6px;font-weight:600;color:var(--txt);text-align:center;line-height:1.28;padding:0 2px}
.mg-pc{position:absolute;top:5px;right:5px;font-size:8.6px;line-height:1;background:var(--gray-l,#F1EFE8);color:var(--gray,#8A97A8);border-radius:4px;padding:2px 4px;letter-spacing:.3px}
/* 深色适配 */
body.theme-dark .mg-q,body.theme-dark .mg-tile{background:#171F2E;border-color:#2A3545}
body.theme-dark .mg-q:active{background:#1D2836}
body.theme-dark .mg-n,body.theme-dark .mg-sec-h b{color:#E5EAF3}
body.theme-dark .mg-sec-n{background:#22303F;color:#8B9BB0}
body.theme-dark .mg-pc{background:#22303F;color:#8B9BB0}
/* 现代风:更圆润 */
body:not(.skin-weaver) .mg-q,body:not(.skin-weaver) .mg-tile{border-radius:14px}
@media(max-width:380px){.mg-grid,.mg-quick{grid-template-columns:repeat(3,1fr)}}
/* 宫格瓦片副标题 */
.mg-s{font-size:10.2px;color:var(--gray);text-align:center;line-height:1.3;padding:0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
body.theme-dark .mg-s{color:#8B9BB0}

/* ===== ui.css (9387B) ===== */
/* =====================================================================
 * 统一视觉组件层(2026-11)
 *  - 8 区业务主线色身份:--zone(当前页分组主题色)由 app.js 在导航时写入 body
 *  - 头部(wHead / page-title)、KPI 卡、分区、标签、空态统一此层,达到全站一致
 *  - 本文件在 bundle 中位于 weaver-layout.css 之后,可覆盖其默认值
 * ===================================================================== */
:root{ --zone:#185FA5; --zone-soft:#E6F1FB; }

/* ---- 头部区色身份 ---- */
body.skin-weaver .wv-head{ border-left:4px solid var(--zone,#185FA5); }
.wv-head-t .dot{ background:var(--zone,#185FA5); }
.page-title{ border-left:4px solid var(--zone,#185FA5); padding-left:12px; }

/* ---- 分区标题(列表页内的小标题) ---- */
.wv-section{ display:flex; align-items:center; gap:8px; margin:18px 0 10px;
  font-size:14px; font-weight:600; color:var(--blue2); }
.wv-section::before{ content:''; width:4px; height:14px; border-radius:2px; background:var(--zone,#185FA5); }

/* ---- KPI 数字卡(驾驶舱风格下沉到各列表页顶部) ---- */
.wv-kpi-row{ display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; margin:14px 0; }
.wv-kpi{ position:relative; overflow:hidden; background:var(--card,#fff);
  border:1px solid var(--border,#D3D1C7); border-radius:10px; padding:12px 14px 12px 18px; }
.wv-kpi .bar{ position:absolute; left:0; top:0; bottom:0; width:4px; background:var(--zone,#185FA5); }
.wv-kpi .l{ font-size:12.5px; color:var(--gray); margin-bottom:4px; }
.wv-kpi .v{ font-size:24px; font-weight:600; color:var(--txt); line-height:1.1; }
.wv-kpi .s{ font-size:11.5px; color:var(--gray); margin-top:3px; }
.wv-kpi.warn .bar{ background:var(--red,#C0392B); }
.wv-kpi.warn .v{ color:var(--red,#C0392B); }

/* ---- 标签 / 徽章(统一配色,可带区色) ---- */
.wv-tag{ display:inline-block; padding:1px 9px; border-radius:999px; font-size:12px;
  border:1px solid var(--border); color:var(--txt2); background:var(--bg2); white-space:nowrap; }
.wv-tag.zone{ background:var(--zone-soft,#E6F1FB); color:var(--zone,#185FA5); border-color:transparent; }

/* ---- 空态(强化现有 .empty) ---- */
.empty{ color:var(--gray); }
.wv-empty{ text-align:center; padding:40px 16px; color:var(--gray); }
.wv-empty .ic{ font-size:34px; opacity:.5; }
.wv-empty .t{ font-size:14px; margin-top:8px; color:var(--txt2); }
.wv-empty .d{ font-size:12.5px; margin-top:4px; }

/* ---- 全页表单 / 详情(铺满右侧内容区,替代窄弹窗) ---- */
.pf-wrap{ background:var(--card,#fff); border:1px solid var(--border,#D3D1C7); border-radius:12px; margin-top:12px; overflow:hidden; }
.pf-body{ padding:18px 22px; }
.pf-foot{ display:flex; gap:8px; justify-content:flex-end; padding:12px 18px; border-top:1px solid var(--border,#D3D1C7); background:var(--bg2,#F5F6F2); flex-wrap:wrap; }
/* 全页场景下 fgrid 用更宽的列,信息更舒展 */
.pf-body .fgrid{ grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); }
/* 全页详情:标签信息块与时间轴逐行舒展 */
.pf-body .bs-rep-info{ margin-bottom:10px; }
.pf-body .tbl{ margin-top:10px; }
@media (max-width:820px){
  .pf-body{ padding:14px; }
  .pf-foot{ padding:10px 14px; }
}

/* ---- 设备档案:页头右上角小型扫码标识(替代原居中大二维码块) ---- */
.qr-corner{ display:flex; align-items:center; gap:8px; background:var(--bg2,#F5F6F2);
  border:1px solid var(--border,#D3D1C7); border-radius:10px; padding:6px 10px; }
.qr-corner .qr-real{ width:56px; height:56px; min-height:56px; background:#fff;
  border-radius:6px; overflow:hidden; flex-shrink:0; }
.qr-corner .qc-code{ font-family:monospace; font-size:12px; font-weight:700;
  color:var(--blue2,#185FA5); letter-spacing:.5px; }
.qr-corner .qc-tip{ display:block; font-size:10.5px; color:var(--gray,#8A8A82); margin-top:2px; }
.qr-corner .qc-code,.qr-corner .qc-tip{ white-space:nowrap; }
/* 窄屏时仍保留小码,但更紧凑 */
@media (max-width:820px){
  .qr-corner{ padding:4px 8px; }
  .qr-corner .qr-real{ width:44px; height:44px; min-height:44px; }
  .qr-corner .qc-tip{ display:none; }
}

/* 窄屏/手机弹窗版:横向细条,同样不占版面 */
.qr-bar{ display:flex; align-items:center; gap:10px; background:var(--bg2,#F5F6F2);
  border:1px solid var(--border,#D3D1C7); border-radius:10px; padding:8px 10px; margin:0 0 10px; }
.qr-bar .qr-real{ width:52px; height:52px; min-height:52px; background:#fff; border-radius:6px; overflow:hidden; flex-shrink:0; }
.qr-bar .qb-code{ font-family:monospace; font-size:13px; font-weight:700; color:var(--blue2,#185FA5); letter-spacing:.5px; }
.qr-bar .qb-tip{ font-size:11px; color:var(--gray,#8A8A82); margin-top:2px; }

/* ---- 版本自检横幅:页面是旧 bundle 时提示刷新 ---- */
.ver-stale-bar{ position:fixed; left:50%; transform:translateX(-50%); bottom:18px; z-index:99999;
  display:flex; align-items:center; gap:10px; max-width:min(92vw,720px);
  background:#FFF8E6; color:#7A4A00; border:1px solid #F0C36D; border-radius:10px;
  padding:10px 14px; font-size:13px; box-shadow:0 6px 24px rgba(0,0,0,.16); }
.ver-stale-bar .vs-ic{ font-size:16px; flex-shrink:0; }
.ver-stale-bar b{ color:#7A4A00; }
.ver-stale-bar .btn{ flex-shrink:0; }

/* ---- 角色表单:页面访问白名单勾选区 ---- */
.pg-wrap{ margin-top:16px; border:1px solid var(--border,#D3D1C7); border-radius:10px; overflow:hidden; }
.pg-head{ display:flex; align-items:center; gap:6px; padding:9px 12px; background:var(--bg2,#F5F6F2);
  border-bottom:1px solid var(--border,#D3D1C7); font-size:13px; font-weight:600; color:var(--blue2); }
.pg-head>span:first-child{ margin-right:auto; }
.pg-hint{ padding:8px 12px; font-size:12px; line-height:1.6; color:var(--gray);
  background:#FDF3E3; border-bottom:1px solid var(--border,#D3D1C7); }
.pg-hint.on{ background:#E8F5F0; color:#0F6E56; }
.pg-list{ max-height:300px; overflow-y:auto; padding:8px 12px 12px; }
.pg-grp{ padding:8px 0; border-bottom:1px dashed var(--border,#D3D1C7); }
.pg-grp:last-child{ border-bottom:0; }
.pg-grp-h{ display:flex; align-items:center; gap:6px; font-size:12.5px; color:var(--txt2); margin-bottom:6px; }
.pg-grp-h .pg-ic{ font-size:13px; }
.pg-grp-h .pg-sp{ flex:1; }
.pg-mini{ font-size:11.5px; padding:1px 6px; }
.pg-items{ display:flex; flex-wrap:wrap; gap:4px 10px; }
.pg-item{ display:inline-flex; align-items:center; gap:4px; font-size:12.5px; color:var(--txt);
  padding:3px 8px; border-radius:6px; cursor:pointer; background:var(--bg2,#F5F6F2); }
.pg-item:hover{ background:var(--zone-soft,#E6F1FB); }
.pg-item input{ margin:0; }

/* ---- U4 首次登录引导 ---- */
.fg-mask{ position:fixed; inset:0; z-index:9000; background:rgba(20,28,38,.55);
  display:flex; align-items:center; justify-content:center; padding:20px; }
.fg-box{ width:min(520px,94vw); background:var(--card,#fff); border-radius:16px; overflow:hidden;
  box-shadow:0 20px 60px rgba(0,0,0,.3); }
.fg-head{ padding:14px 20px; background:var(--blue2,#2F6FED); color:#fff; font-size:14px; font-weight:600; }
.fg-steps{ display:flex; align-items:center; gap:8px; padding:16px 20px 0; }
.fg-dot{ width:24px; height:24px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center;
  font-size:12px; background:var(--bg2,#EEF1F5); color:var(--gray,#8a94a6); }
.fg-dot.on{ background:var(--blue2,#2F6FED); color:#fff; }
.fg-dot.done{ background:#E8F5F0; color:#0F6E56; }
.fg-card{ padding:26px 22px; text-align:center; }
.fg-ic{ font-size:48px; margin-bottom:12px; }
.fg-title{ font-size:17px; font-weight:700; color:var(--txt,#1f2733); margin-bottom:12px; }
.fg-desc{ font-size:13.5px; line-height:1.85; color:var(--txt2,#5b6472); }
.fg-foot{ display:flex; align-items:center; gap:8px; padding:14px 20px 18px; border-top:1px solid var(--border,#ECECEC); }
.fg-foot .fg-skip{ margin-right:auto; }
.fg-foot .btn{ font-size:13px; }

/* U1 统一加载态:一致转圈+文案,主题色自适应(亮/暗) */
.wv-loading{ display:flex; align-items:center; justify-content:center; gap:10px; padding:24px 12px; color:var(--gray,#6b7280); font-size:13px; min-height:48px; }
.wv-loading-inline{ display:inline-flex; padding:2px 0; vertical-align:middle; }
.wv-spin{ width:var(--sp,18px); height:var(--sp,18px); border:2.5px solid rgba(47,111,237,.18); border-top-color:var(--blue2,#2F6FED); border-radius:50%; box-sizing:border-box; flex:0 0 auto; animation:wvSpin .7s linear infinite; }
.wv-loading-txt{ line-height:1.4; }
@keyframes wvSpin{ to{ transform:rotate(360deg) } }

/* U3 设备导入向导:步骤条 + 分区面板 */
.imp-steps{ display:flex; gap:8px; margin:4px 0 14px; }
.imp-step{ flex:1; display:flex; flex-direction:column; align-items:center; gap:2px; padding:10px 6px; border:1px solid var(--border,#ECECEC); border-radius:10px; background:var(--bg2,#f3f6fb); text-align:center; }
.imp-step-n{ width:22px; height:22px; line-height:22px; border-radius:50%; background:var(--blue2,#2F6FED); color:#fff; font-size:12px; font-weight:700; }
.imp-step-t{ font-size:13px; font-weight:600; color:var(--txt,#1f2733); }
.imp-step-s{ font-size:11px; color:var(--gray,#6b7280); }
.imp-panel{ border:1px solid var(--line,#ECECEC); border-radius:10px; padding:12px 14px; margin-bottom:12px; background:var(--card,#fff); }
.imp-panel-h{ font-size:14px; font-weight:700; color:var(--zone,#185FA5); margin-bottom:8px; }

/* ===== mobile-ux.css (5492B) ===== */
/* =====================================================================
 * mobile-ux.css — 手机 / PDA / 钉钉容器 H5 体验优化（2026-10-18）
 * 目标：让现场作业人员在手机上用起来接近原生 App 的手感
 *  - 触摸：点击高亮透明 / 禁选中禁长按菜单 / touch-action 去 300ms 延迟
 *  - 滚动：m-body 惯性滚动 + 隐藏滚动条 + 页面切换转场动画
 *  - 适配：刘海屏安全区 / iOS 输入框自动放大修正 / 弹窗底部抽屉化
 *  - 触控：底部导航与可点元素 ≥44px 触控区 + :active 按压反馈
 * 作用域：全局触摸规则对所有端无害；布局规则仅作用于 #mobileApp 与小屏
 * ===================================================================== */

/* ---------- ① 全局触摸基础（对所有端无害） ---------- */
*{ -webkit-tap-highlight-color: transparent; }
button, .mg-tile, .m-btn, .m-card, .msg-item, .rec-card, .kb-item,
.m-check, .m-seg button, .tbl tbody tr[onclick], [onclick]:not(input):not(select):not(textarea){
  -webkit-user-select: none; user-select: none;
  -webkit-touch-callout: none;
  touch-action: manipulation;   /* 去掉双击缩放/300ms 点击延迟 */
}
input, textarea, select{ touch-action: manipulation; }

/* ---------- ② 手机端容器：滚动与转场 ---------- */
#mobileApp .m-body{
  -webkit-overflow-scrolling: touch;      /* iOS 惯性滚动 */
  overscroll-behavior-y: contain;          /* 防滚动穿透到页面 */
  scrollbar-width: none;                   /* Firefox 隐藏滚动条 */
}
#mobileApp .m-body::-webkit-scrollbar{ display: none; }
/* 页面切换转场（renderMobile 每次重渲染时由 JS 挂 .m-page-in 触发） */
#mobileApp .m-body.m-page-in{ animation: mPageIn .2s ease both; }
@keyframes mPageIn{
  from{ opacity: 0; transform: translateY(10px); }
  to  { opacity: 1; transform: none; }
}
/* 列表/宫格按压反馈（桌面 hover 保持） */
#mobileApp .mg-tile:active{ transform: scale(.94); }
#mobileApp .m-btn:active{ filter: brightness(.92); transform: scale(.99); }
#mobileApp .m-nav button:active{ background: var(--hover, #F1F4F9); }
#mobileApp .m-card[onclick]:active{ border-color: var(--blue); }
#mobileApp .m-seg button:active{ transform: scale(.96); }

/* ---------- ③ 安全区（刘海屏 / iPhone 底部横条） ---------- */
#mobileApp .m-top{
  padding-top: calc(14px + env(safe-area-inset-top));
  padding-left: calc(18px + env(safe-area-inset-left));
  padding-right: calc(18px + env(safe-area-inset-right));
}
#mobileApp .m-body{ padding-left: calc(14px + env(safe-area-inset-left)); padding-right: calc(14px + env(safe-area-inset-right)); }
#mobileApp .m-nav{
  padding-bottom: calc(6px + env(safe-area-inset-bottom));
  padding-left: env(safe-area-inset-left);
  padding-right: env(safe-area-inset-right);
}
#mobileApp .m-nav button{ min-height: 46px; padding: 7px 0 5px; }
#mobileApp .m-nav button .mi{ font-size: 20px; line-height: 1.1; }
/* PWA  standalone 下 m-body 底部留出导航高度 */
#mobileApp .m-body{ padding-bottom: calc(96px + env(safe-area-inset-bottom)); }

/* ---------- ④ iOS 输入框自动放大修正（font-size<16px 时聚焦会整页缩放） ---------- */
#mobileApp input:not([type=checkbox]):not([type=radio]),
#mobileApp select, #mobileApp textarea{ font-size: 16px; }
#mobileApp .inp, #mobileApp input.inp, #mobileApp select.inp{ font-size: 16px !important; }

/* ---------- ⑤ 小屏弹窗：底部抽屉化（大屏仍是居中卡片） ---------- */
@media (max-width: 820px){
  .modal-mask{ padding: 0; align-items: flex-end; }
  .modal, .modal.modal-lg, .modal.modal-md{
    max-width: none !important;
    width: 100%;
    border-radius: 18px 18px 0 0;
    max-height: 92vh;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 20px 16px calc(16px + env(safe-area-inset-bottom));
    animation: mSheetUp .24s cubic-bezier(.2,.8,.3,1) both;
  }
  /* 抽屉把手（视觉提示可下滑关闭） */
  .modal::before{
    content: ''; display: block; width: 38px; height: 4px; border-radius: 99px;
    background: var(--border, #D8DEE8); margin: -6px auto 12px;
  }
  .modal .m-foot, .modal .modal-ft{
    position: sticky; bottom: 0; background: var(--card, #fff);
    margin-left: -16px; margin-right: -16px; padding: 10px 16px calc(10px + env(safe-area-inset-bottom));
    border-top: 1px solid var(--border, #E4E9F0);
  }
  /* 抽屉内表单统一单列(兼容泛微风 skin 的双列规则) */
  .fgrid-form{ grid-template-columns: 1fr; }
  .fgrid-form .fg-2, .fgrid-form .fg-3{ grid-column: 1/-1 !important; }
  .fgrid-form .fsec{ margin-top: 4px; }
}
@keyframes mSheetUp{
  from{ transform: translateY(40px); opacity: .4; }
  to  { transform: none; opacity: 1; }
}

/* ---------- ⑥ 手机端表格横向滚动（宽表格不撑破布局） ---------- */
#mobileApp .tbl-wrap, #mobileApp .table-scroll{ overflow-x: auto; -webkit-overflow-scrolling: touch; }
#mobileApp table.tbl{ min-width: 100%; }
#mobileApp table.tbl th, #mobileApp table.tbl td{ white-space: nowrap; }

/* ---------- ⑦ 手机端页头/标题紧凑化 ---------- */
#mobileApp .p-title{ font-size: 16px; }
#mobileApp .panel{ padding: 12px; }
#mobileApp .tbl{ font-size: 12.5px; }
#mobileApp .tbl th, #mobileApp .tbl td{ padding: 7px 8px; }

/* ---------- ⑧ 小屏时登录页更紧凑 ---------- */
@media (max-width: 820px){
  .login-card{ padding: 26px 20px; border-radius: 16px; }
  .login-card h1{ font-size: 21px; }
}

/* ===== camera.css (4485B) ===== */
/* camera.css — 现场拍照 + 水印（2026-10-18） */
.cam-mask {
  position: fixed; inset: 0; z-index: 1200;
  background: rgba(0, 0, 0, 0.72);
  display: none; align-items: center; justify-content: center;
  padding: 16px; opacity: 0; transition: opacity .18s ease;
}
.cam-mask.show { opacity: 1; }
.cam-sheet {
  width: 100%; max-width: 460px;
  background: var(--bg, #fff); color: var(--text, #222);
  border-radius: 16px; overflow: hidden;
  box-shadow: 0 20px 60px rgba(0, 0, 0, .35);
  display: flex; flex-direction: column;
}
.cam-hd {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 14px; font-size: 15px; font-weight: 600;
  border-bottom: 1px solid var(--line, #e5e7eb);
}
.cam-x {
  border: none; background: var(--bg2, #f1f5f9); color: var(--text, #333);
  width: 30px; height: 30px; border-radius: 50%; font-size: 15px; cursor: pointer;
}
.cam-stage {
  position: relative; background: #000;
  aspect-ratio: 3 / 4; max-height: 56vh; overflow: hidden;
}
#camVideo {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; background: #000;
}
/* 实时水印叠层（与合成水印一致） */
.cam-wm {
  position: absolute; inset: 0; pointer-events: none;
  display: flex; flex-direction: column; justify-content: space-between;
  padding: 12px; box-sizing: border-box;
  color: #fff; text-shadow: 0 1px 3px rgba(0, 0, 0, .8);
}
.cam-wm-top { font-size: 13px; font-weight: 700; }
.cam-wm-bottom { text-align: left; }
.cam-wm-time { font-family: Consolas, monospace; font-size: 20px; font-weight: 700; line-height: 1.2; }
.cam-wm-sub { font-size: 12px; opacity: .92; line-height: 1.3; }
.cam-flash {
  position: absolute; inset: 0; background: #fff; opacity: 0;
  transition: opacity .15s ease; pointer-events: none;
}
.cam-fallback {
  position: absolute; inset: 0; background: #111;
  color: #ddd; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 8px; padding: 24px; text-align: center;
}
.cam-fb-ic { font-size: 44px; }
.cam-fb-tip { font-size: 12px; opacity: .75; max-width: 260px; }
.cam-preview { background: #000; display: flex; align-items: center; justify-content: center; max-height: 56vh; }
.cam-preview img { max-width: 100%; max-height: 56vh; display: block; }
.cam-ops {
  display: flex; gap: 8px; padding: 12px 14px; flex-wrap: wrap;
  background: var(--bg, #fff); border-top: 1px solid var(--line, #e5e7eb);
}
.cam-btn {
  flex: 1 1 auto; min-width: 88px; padding: 10px 12px; border-radius: 10px;
  border: 1px solid var(--line, #d1d5db); background: var(--bg2, #f1f5f9);
  color: var(--text, #222); font-size: 14px; cursor: pointer;
}
.cam-btn:active { transform: scale(.97); }
.cam-primary {
  background: var(--blue, #185FA5); color: #fff; border-color: transparent; font-weight: 600;
}
/* 深色主题适配 */
body.theme-dark .cam-sheet { background: #1b2230; color: #e8edf5; }
body.theme-dark .cam-hd { border-color: #2b3444; }
body.theme-dark .cam-x { background: #2b3444; color: #e8edf5; }
body.theme-dark .cam-ops { background: #1b2230; border-color: #2b3444; }
body.theme-dark .cam-btn { background: #2b3444; color: #e8edf5; border-color: #38445a; }
/* 实时水印:事项行 */
.cam-wm-matter { font-size: 11px; font-weight: 600; opacity: .95; margin-top: 3px; line-height: 1.25; max-width: 100%; word-break: break-all; text-shadow: 0 1px 3px rgba(0,0,0,.8); }
body.theme-dark .cam-wm-matter { color: #e8edf5; }
/* 移动端全屏化 */
@media (max-width: 560px) {
  .cam-mask { padding: 0; }
  .cam-sheet { max-width: 100%; border-radius: 0; height: 100%; }
  .cam-stage { max-height: none; flex: 1; aspect-ratio: auto; }
  .cam-preview { flex: 1; max-height: none; }
  .cam-btn { padding: 13px 10px; font-size: 15px; }
}

/* 拍照面板定位状态条 */
.cam-locbar{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:12.5px;color:var(--txt2,#475569);background:var(--hover,#f6f8fb);border-top:1px solid var(--border,#e5e7eb)}
.cam-locbar .cam-loc-txt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cam-locbar.cam-loc-ok{color:var(--teal,#0f9d8a)}
.cam-locbar.cam-loc-fail{color:var(--red,#d93025);background:var(--red-l,#fdecea)}
.cam-loc-btn{flex-shrink:0;border:1px solid var(--border,#d5d9e0);background:#fff;color:var(--txt2,#334155);border-radius:6px;padding:3px 9px;font-size:12px;cursor:pointer}
.cam-loc-btn:hover{border-color:var(--blue,#2563eb);color:var(--blue,#2563eb)}
