/* ===== Toolbox 数据查询 · DevExpress GridControl 风格（三套皮肤） =====
   皮肤通过 html[data-theme] 切换：flat（简洁，默认）/ tech（科技）/ dark（暗色）
   所有颜色都走变量，换肤只改变量，不改选择器。 */

/* ---------- 简洁（默认皮肤） ---------- */
:root{
  /* ========== 简洁 · Xmas(Blue) 浅色版 ==========
     冷蓝白面 + 浅冰蓝表头（2px 深蓝底边）+ 冰蓝强调，与登录页夜景同一色相家族 */
  /* 基础面 */
  --bg:#e6edf6;
  --panel:#ffffff;
  --panel-2:#f4f8fd;
  --panel-3:#e8f1fb;
  --bd:#cfdbea;
  --bd-soft:#e3ebf5;
  --bd-row:#eef3f9;
  --bd-strong:#b9c9dd;
  --txt:#1f2f42;
  --txt-2:#5f7189;
  --txt-3:#8f9fb4;
  --cell-ink:#26374b;
  --null-ink:#c0cbd9;

  /* 主色（Xmas 冰蓝） */
  --accent:#2c74c4;
  --accent-dark:#1d5590;
  --accent-soft:#e5f0fb;
  --accent-line:#b4d4f0;
  --accent-ring:rgba(44,116,196,.15);

  /* 数据行 */
  --row-alt:#f7fafd;
  --row-hover:#e8f3fd;
  --row-sel:#bcdcf8;          /* 选中行：明显深于 hover / 斑马纹 */
  --row-sel-hover:#a9d0f5;
  --idx-bg:#f5f9fe;
  --idx-hover:#dfeefb;
  --idx-sel:#a6cbf2;
  --idx-ink:var(--txt-3);

  /* 表头（浅冰蓝 + 2px 深蓝底边） */
  --hdr-1:#eef6ff;
  --hdr-2:#d5e6f8;
  --hdr-hover-1:#f8fcff;
  --hdr-hover-2:#c8dcf3;
  --hdr-sorted-1:#dcecff;
  --hdr-sorted-2:#bfd8f3;
  --hdr-ink:#26445f;
  --hdr-line:rgba(255,255,255,.9);
  --hdr-bd:#2f6ba3;
  --hdr-ctl:#6f90ae;
  --hdr-ctl-bg:#e3eefa;
  --hdr-ctl-bd:#b8d3ee;
  --hdr-on-bg:#2f6ba3;
  --hdr-on-ink:#ffffff;
  --hdr-sorted-ink:#1d5590;
  --hd-ink:#2b3f57;
  --sort-ink:#9fb4c9;
  --sort-ink-on:#5c86ab;

  /* 按钮 */
  --btn-1:#ffffff;
  --btn-2:#eff5fb;
  --btn-bd:var(--bd);
  --btn-ink:#2c415a;
  --btn-hover-1:#ffffff;
  --btn-hover-2:#e4eefa;
  --btn-hover-bd:#b0c6dc;
  --btn-active:#dde9f6;

  /* 主按钮 */
  --pri-1:#5aa0e0;
  --pri-2:#2f74bb;
  --pri-bd:#2866a8;
  --pri-ink:#ffffff;
  --pri-hover-1:#69adea;
  --pri-hover-2:#3580c9;
  --pri-shadow:0 1px 2px rgba(36,94,160,.35);

  /* 弹层 */
  --pop-bg:#ffffff;
  --pop-bd:#c2d2e4;
  --pop-hd-1:#fbfdff;
  --pop-hd-2:#eaf2fb;
  --pop-ft:#f7fafd;
  --pop-shadow:0 12px 32px rgba(18,38,60,.20),0 2px 6px rgba(18,38,60,.10);

  /* 其他 */
  --shadow:0 1px 3px rgba(23,46,72,.09);
  --overlay:rgba(244,249,254,.88);
  --scroll-track:#edf3fa;
  --scroll-thumb:#c2d3e4;
  --scroll-thumb-h:#a4bbd3;
  --spinner-track:#d6e4f3;
  --logo-1:#5aa7e8;
  --logo-2:#22629e;
  --logo-shadow:0 2px 6px rgba(34,98,158,.35);
  --ok-ink:#2f6b52;
  --ok-bg:#e8f6ee;
  --ok-bd:#c7e6d5;
  --ok-dot:#2f9e63;
  --err-ink:#a23a2e;
  --err-bg:#fdecea;
  --err-bd:#f6cdc7;
  --err-dot:#d93026;
  --ic-bg:#e9f1fb;
  --ic-ink:#5f7189;
  --badge-bg:#e9f1fb;
  --badge-ink:#6f8199;
  --toast-bg:rgba(21,37,56,.95);
  --toast-ink:#ffffff;
  --radius:7px;
}

/* ---------- 科技（深蓝 + 霓虹青） ---------- */
html[data-theme="tech"]{
  color-scheme:dark;
  --bg:#08111d;
  --panel:#0c1929;
  --panel-2:#0f2033;
  --panel-3:#14304a;
  --bd:#1c3a58;
  --bd-soft:#17314a;
  --bd-row:#142b41;
  --bd-strong:#26547c;
  --txt:#d8ecff;
  --txt-2:#8fb2cf;
  --txt-3:#5f819c;
  --cell-ink:#cfe6f8;
  --null-ink:#37546d;

  --accent:#21d4fd;
  --accent-dark:#8fe8ff;
  --accent-soft:rgba(33,212,253,.13);
  --accent-line:rgba(33,212,253,.45);
  --accent-ring:rgba(33,212,253,.18);

  --row-alt:#0e1d2f;
  --row-hover:rgba(33,212,253,.09);
  --row-sel:rgba(33,212,253,.30);
  --row-sel-hover:rgba(33,212,253,.40);
  --idx-bg:#0b1725;
  --idx-hover:rgba(33,212,253,.13);
  --idx-sel:rgba(33,212,253,.42);
  --idx-ink:#5f819c;

  --hdr-1:#11283f;
  --hdr-2:#0a1828;
  --hdr-hover-1:#16344f;
  --hdr-hover-2:#0e2337;
  --hdr-sorted-1:#123449;
  --hdr-sorted-2:#0d263b;
  --hdr-ink:#b9dcf2;
  --hdr-line:rgba(33,212,253,.2);
  --sort-ink:#3d637f;
  --sort-ink-on:#6ea6c8;
  --hdr-bd:#26547c;
  --hdr-ctl:#9fd3ee;
  --hdr-ctl-bg:rgba(33,212,253,.14);
  --hdr-ctl-bd:rgba(33,212,253,.40);
  --hdr-on-bg:#21d4fd;
  --hdr-on-ink:#04141f;
  --hdr-sorted-ink:#8fe8ff;
  --hd-ink:#d8ecff;

  --btn-1:#122c44;
  --btn-2:#0d2033;
  --btn-bd:#1e4665;
  --btn-ink:#b7d9ee;
  --btn-hover-1:#17405f;
  --btn-hover-2:#10283d;
  --btn-hover-bd:#2d6c96;
  --btn-active:#0a1a29;

  --pri-1:#1dbfe0;
  --pri-2:#0e9dc4;
  --pri-bd:#0e9dc4;
  --pri-ink:#04141f;
  --pri-hover-1:#35d6f5;
  --pri-hover-2:#12aed6;
  --pri-shadow:0 0 12px rgba(33,212,253,.35);

  --pop-bg:#0e1e30;
  --pop-bd:#23516f;
  --pop-hd-1:#13304a;
  --pop-hd-2:#0d2033;
  --pop-ft:#0b1a2a;
  --pop-shadow:0 16px 40px rgba(0,0,0,.6),0 0 0 1px rgba(33,212,253,.12);

  --shadow:0 2px 10px rgba(0,0,0,.45);
  --overlay:rgba(8,17,29,.82);
  --scroll-track:#0a1523;
  --scroll-thumb:#1d3b55;
  --scroll-thumb-h:#2a5b7f;
  --spinner-track:#1b3a55;
  --logo-1:#21d4fd;
  --logo-2:#1668d6;
  --logo-shadow:0 0 16px rgba(33,212,253,.45);
  --ok-ink:#6ee0a8;
  --ok-bg:rgba(32,196,120,.12);
  --ok-bd:rgba(32,196,120,.35);
  --ok-dot:#35e08f;
  --err-ink:#ff9a90;
  --err-bg:rgba(233,80,60,.14);
  --err-bd:rgba(233,80,60,.4);
  --err-dot:#ff6a55;
  --ic-bg:#14304a;
  --ic-ink:#7fb6d6;
  --badge-bg:#14304a;
  --badge-ink:#86b5d4;
  --toast-bg:rgba(8,23,38,.95);
  --toast-ink:#cdeaf8;
}

/* ---------- 暗色（中性深灰） ---------- */
html[data-theme="dark"]{
  color-scheme:dark;
  --bg:#16181c;
  --panel:#1e2126;
  --panel-2:#22262c;
  --panel-3:#282d35;
  --bd:#33383f;
  --bd-soft:#2b3037;
  --bd-row:#262b31;
  --bd-strong:#3a4048;
  --txt:#dcdfe4;
  --txt-2:#9aa3af;
  --txt-3:#6f7883;
  --cell-ink:#cfd4db;
  --null-ink:#4a515a;

  --accent:#5b93f8;
  --accent-dark:#9dc0ff;
  --accent-soft:rgba(91,147,248,.15);
  --accent-line:rgba(91,147,248,.45);
  --accent-ring:rgba(91,147,248,.18);

  --row-alt:#20242a;
  --row-hover:#272d36;
  --row-sel:#344b70;
  --row-sel-hover:#3d587f;
  --idx-bg:#1b1e23;
  --idx-hover:#252b33;
  --idx-sel:#3a5378;
  --idx-ink:#6f7883;

  --hdr-1:#262a31;
  --hdr-2:#1d2026;
  --hdr-hover-1:#2c313a;
  --hdr-hover-2:#23272e;
  --hdr-sorted-1:#26344a;
  --hdr-sorted-2:#1f2a3b;
  --hdr-ink:#c6ccd4;
  --hdr-line:rgba(255,255,255,.05);
  --sort-ink:#5b636e;
  --sort-ink-on:#8b97a6;
  --hdr-bd:#3a4048;
  --hdr-ctl:#aeb8c6;
  --hdr-ctl-bg:#333a43;
  --hdr-ctl-bd:#4a525d;
  --hdr-on-bg:#5b93f8;
  --hdr-on-ink:#0f1216;
  --hdr-sorted-ink:#9dc0ff;
  --hd-ink:#dcdfe4;

  --btn-1:#2a2f37;
  --btn-2:#22262c;
  --btn-bd:#3a414a;
  --btn-ink:#cbd1d9;
  --btn-hover-1:#333a43;
  --btn-hover-2:#282d34;
  --btn-hover-bd:#4a525d;
  --btn-active:#1c2026;

  --pri-1:#4f8cf7;
  --pri-2:#3a72d8;
  --pri-bd:#3a72d8;
  --pri-ink:#ffffff;
  --pri-hover-1:#6199f8;
  --pri-hover-2:#447ce4;
  --pri-shadow:0 1px 3px rgba(0,0,0,.5);

  --pop-bg:#23272e;
  --pop-bd:#3c434c;
  --pop-hd-1:#2a2f37;
  --pop-hd-2:#22262c;
  --pop-ft:#1e2126;
  --pop-shadow:0 14px 36px rgba(0,0,0,.55);

  --shadow:0 2px 8px rgba(0,0,0,.35);
  --overlay:rgba(22,24,28,.85);
  --scroll-track:#1b1e23;
  --scroll-thumb:#3b424b;
  --scroll-thumb-h:#4c545f;
  --spinner-track:#333a43;
  --logo-1:#5b93f8;
  --logo-2:#3568cf;
  --logo-shadow:0 2px 8px rgba(0,0,0,.45);
  --ok-ink:#7ddba5;
  --ok-bg:rgba(60,190,120,.12);
  --ok-bd:rgba(60,190,120,.3);
  --ok-dot:#4ece8c;
  --err-ink:#ff9d92;
  --err-bg:rgba(220,80,65,.14);
  --err-bd:rgba(220,80,65,.35);
  --err-dot:#f2705f;
  --ic-bg:#2b3038;
  --ic-ink:#98a2ae;
  --badge-bg:#2b3038;
  --badge-ink:#98a2ae;
  --toast-bg:rgba(12,14,17,.96);
  --toast-ink:#dfe4ea;
}

*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{
  background:var(--bg);
  color:var(--txt);
  font-family:"Segoe UI","Microsoft YaHei","PingFang SC",system-ui,-apple-system,sans-serif;
  font-size:13px;
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit;cursor:pointer}
::-webkit-scrollbar{width:12px;height:12px}
::-webkit-scrollbar-track{background:var(--scroll-track)}
::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border:2px solid var(--scroll-track);border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:var(--scroll-thumb-h)}
::-webkit-scrollbar-corner{background:var(--scroll-track)}

/* 简洁（Xmas Blue）皮肤：冷蓝空气感 + 表头 2px 深蓝底边 —— 只在非深色皮肤下生效 */
html:not([data-theme="tech"]):not([data-theme="dark"]) body{
  background-image:
    radial-gradient(1200px 560px at 6% -14%,rgba(92,152,214,.16),transparent 62%),
    radial-gradient(980px 520px at 98% 112%,rgba(126,186,236,.14),transparent 58%);
  background-attachment:fixed;
}
html:not([data-theme="tech"]):not([data-theme="dark"]) .appbar{
  background:linear-gradient(180deg,#ffffff,#f6fafe);
  border-top:2px solid #7fb3de;
}
html:not([data-theme="tech"]):not([data-theme="dark"]) .sidenav{
  background:linear-gradient(180deg,#fdfeff 0%,#f2f8fe 100%);
}
html:not([data-theme="tech"]):not([data-theme="dark"]) .snav-head{
  background:linear-gradient(180deg,#eef6fe,#e6f0fb);
  border-bottom-color:#d7e5f3;
}
/* 表头底边：1px 边框 + 1px 内阴影 = 2px 深蓝，压住浅冰蓝表头 */
html:not([data-theme="tech"]):not([data-theme="dark"]) thead th{
  border-bottom-color:var(--hdr-bd);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -1px 0 var(--hdr-bd);
}
/* 科技皮肤：背景网格 + 光晕，数字用等宽字体 */
html[data-theme="tech"] body{
  background-color:var(--bg);
  background-image:
    radial-gradient(circle at 14% -6%,rgba(33,212,253,.16),transparent 42%),
    radial-gradient(circle at 88% 106%,rgba(58,110,255,.14),transparent 46%),
    repeating-linear-gradient(0deg,rgba(45,190,230,.055) 0 1px,transparent 1px 32px),
    repeating-linear-gradient(90deg,rgba(45,190,230,.055) 0 1px,transparent 1px 32px);
}
html[data-theme="tech"] td.num{font-family:"JetBrains Mono",ui-monospace,Consolas,"Courier New",monospace;font-size:12px}
html[data-theme="tech"] .appbar,
html[data-theme="tech"] .toolbar,
html[data-theme="tech"] .sidenav,
html[data-theme="tech"] .grid-wrap,
html[data-theme="tech"] .footer{box-shadow:var(--shadow),inset 0 0 0 1px rgba(33,212,253,.05)}

.app{
  height:100vh;
  display:flex;
  flex-direction:column;
  padding:12px 14px 10px;
  gap:9px;
  min-width:720px;
}

/* ---------- 顶栏 ---------- */
.appbar{
  display:flex;align-items:center;justify-content:space-between;
  background:var(--panel);border:1px solid var(--bd);border-radius:var(--radius);
  padding:9px 14px;box-shadow:var(--shadow);
}
.brand{display:flex;align-items:center;gap:11px}
.logo{
  width:34px;height:34px;border-radius:8px;color:#fff;
  background:linear-gradient(140deg,var(--logo-1),var(--logo-2));
  display:flex;align-items:center;justify-content:center;
  box-shadow:var(--logo-shadow);
}
.brand-txt h1{font-size:15px;font-weight:600;letter-spacing:.2px}
.brand-txt p{font-size:11.5px;color:var(--txt-3);margin-top:2px}
/* 切换功能时图标换一次，做个小过渡 */
@keyframes icoSwap{
  from{opacity:.2;transform:scale(.72) rotate(-14deg)}
  to{opacity:1;transform:none}
}
.logo.ico-swap svg{animation:icoSwap .28s cubic-bezier(.2,.8,.3,1.2)}
.appbar-right{display:flex;align-items:center;gap:10px}
.dbchip{
  font-size:11.5px;color:var(--ok-ink);background:var(--ok-bg);border:1px solid var(--ok-bd);
  padding:4px 10px;border-radius:20px;display:inline-flex;align-items:center;gap:6px;
}
.dbchip::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok-dot)}
.dbchip.err{color:var(--err-ink);background:var(--err-bg);border-color:var(--err-bd)}
.dbchip.err::before{background:var(--err-dot)}

/* ---------- 工具栏 ---------- */
.toolbar{
  display:flex;align-items:center;gap:8px;
  background:var(--panel);border:1px solid var(--bd);border-radius:var(--radius);
  padding:7px 10px;box-shadow:var(--shadow);flex-wrap:nowrap;
}
.search{
  position:relative;display:flex;align-items:center;flex:1 1 240px;min-width:120px;max-width:360px;
  height:30px;border:1px solid var(--bd);border-radius:5px;background:var(--panel-2);
  padding:0 8px;color:var(--txt-3);transition:.15s;
}
.search:focus-within{border-color:var(--accent);background:var(--panel);box-shadow:0 0 0 3px var(--accent-ring)}
.search input{
  flex:1;border:0;outline:none;background:transparent;font-size:12.5px;
  color:var(--txt);padding:0 6px;height:100%;
}
.search input::placeholder{color:var(--txt-3)}
.mini-x{
  border:0;background:var(--btn-active);color:var(--txt-2);width:16px;height:16px;border-radius:50%;
  line-height:14px;font-size:13px;padding:0;flex:0 0 16px;
}
.mini-x:hover{background:var(--btn-hover-bd);color:var(--txt)}
.tb-sep{width:1px;height:22px;background:var(--bd-soft);margin:0 2px}

.btn{
  display:inline-flex;align-items:center;gap:5px;
  height:30px;padding:0 11px;border:1px solid var(--btn-bd);border-radius:5px;
  background:linear-gradient(var(--btn-1),var(--btn-2));
  color:var(--btn-ink);font-size:12.5px;white-space:nowrap;transition:.13s;
}
.btn:hover{background:linear-gradient(var(--btn-hover-1),var(--btn-hover-2));border-color:var(--btn-hover-bd)}
/* [hidden] 的 UA display:none 会被上面的 inline-flex 压掉，没权限的按钮就藏不住 */
.btn[hidden],.toolbar [hidden],.pg-toolbar [hidden]{display:none!important}
.btn:active{background:var(--btn-active)}
.btn.toggle.is-on{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent-dark);box-shadow:inset 0 0 0 1px var(--accent-ring)}
.btn.primary{
  background:linear-gradient(var(--pri-1),var(--pri-2));border-color:var(--pri-bd);color:var(--pri-ink);
  box-shadow:var(--pri-shadow);
}
.btn.primary:hover{background:linear-gradient(var(--pri-hover-1),var(--pri-hover-2))}
.btn svg{opacity:.85}

.link{
  border:0;background:transparent;color:var(--accent);font-size:12px;padding:2px 4px;
  border-radius:4px;margin-left:auto;
}
.link:hover{background:var(--accent-soft);text-decoration:underline}

/* ---------- 网格容器 ---------- */
.grid-wrap{
  position:relative;flex:1;min-height:0;
  background:var(--panel);border:1px solid var(--bd);border-radius:var(--radius);
  box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column;
}
.grid-scroll{flex:1;overflow:auto;min-height:0;position:relative}

table.grid{
  border-collapse:separate;border-spacing:0;table-layout:fixed;width:100%;
  font-size:12.5px;
}

/* ---------- 表头 ---------- */
thead th{
  position:sticky;top:0;z-index:6;
  background:linear-gradient(var(--hdr-1),var(--hdr-2));
  border-bottom:1px solid var(--bd-strong);
  border-right:1px solid var(--bd-soft);
  height:34px;padding:0 6px;
  font-weight:600;color:var(--hdr-ink);font-size:12px;
  text-align:left;white-space:nowrap;user-select:none;
  box-shadow:inset 0 -1px 0 var(--hdr-line);
}
thead th.th-idx,thead th.th-chk{text-align:center;padding:0}
th .th-inner{display:flex;align-items:center;gap:4px;height:34px;position:relative}
th .th-txt{overflow:hidden;text-overflow:ellipsis;flex:1;cursor:pointer}
th.num .th-txt{text-align:right}
th:hover{background:linear-gradient(var(--hdr-hover-1),var(--hdr-hover-2))}
th.sorted{color:var(--hdr-sorted-ink);background:linear-gradient(var(--hdr-sorted-1),var(--hdr-sorted-2))}
.sort-ind{
  display:inline-flex;flex-direction:column;gap:1px;line-height:0;margin-left:2px;
  color:var(--sort-ink);transition:.1s;
}
.sort-ind svg{display:block}
.sort-ind .on{color:var(--accent)}
th.sorted .sort-ind{color:var(--sort-ink-on)}

/* 筛选按钮 */
.filter-btn{
  width:14px;height:16px;border:1px solid transparent;border-radius:3px;background:transparent;
  display:flex;align-items:center;justify-content:center;color:var(--hdr-ctl);padding:0;flex:0 0 14px;
}
.filter-btn:hover{background:var(--hdr-ctl-bg);border-color:var(--hdr-ctl-bd);color:var(--hdr-ink)}
.filter-btn.active{color:var(--hdr-on-ink);background:var(--hdr-on-bg);border-color:var(--hdr-on-bg)}

/* 拖动调整列宽 */
.col-resizer{
  position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;z-index:8;
}
.col-resizer::after{
  content:"";position:absolute;left:2px;top:5px;bottom:5px;width:1px;background:transparent;
}
.col-resizer:hover::after{background:var(--hdr-bd)}

/* 自动筛选行 */
thead tr.filter-row th{
  position:sticky;top:34px;z-index:5;
  background:var(--panel-2);border-bottom:1px solid var(--bd-strong);
  height:30px;padding:2px 4px;
}
.f-input{
  width:100%;height:23px;border:1px solid var(--bd);border-radius:3px;background:var(--panel);
  font-size:11.5px;padding:0 5px;outline:none;color:var(--txt);font-family:inherit;
}
.f-input::placeholder{color:var(--txt-3)}
.f-input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-ring)}
.f-input.has-val{border-color:var(--accent-line);background:var(--accent-soft)}

/* ---------- 行 ---------- */
tbody td{
  height:30px;padding:0 8px;border-bottom:1px solid var(--bd-row);
  border-right:1px solid var(--bd-row);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;color:var(--cell-ink);
}
tbody tr:nth-child(even) td{background:var(--row-alt)}
tbody tr:hover td{background:var(--row-hover)}
tbody tr.selected td{background:var(--row-sel)}
tbody tr.selected:hover td{background:var(--row-sel-hover)}
td.num{text-align:right;font-variant-numeric:tabular-nums;letter-spacing:.2px}
td.null{color:var(--null-ink)}
td.cell-focus{position:relative}
td.cell-focus::after{
  content:"";position:absolute;inset:0;border:2px solid var(--accent);
  pointer-events:none;z-index:2;
}
td.cell-focus::before{
  content:"";position:absolute;right:0;bottom:0;z-index:3;
  border:5px solid transparent;border-right-color:var(--accent);border-bottom-color:var(--accent);
}
td.td-idx,td.td-chk{
  text-align:center;color:var(--idx-ink);font-size:11px;background:var(--idx-bg);padding:0;
}
tbody tr:hover td.td-idx{background:var(--idx-hover);color:var(--accent-dark);font-weight:600}
tbody tr.selected td.td-idx{background:var(--idx-sel);color:var(--accent-dark);font-weight:600}
td.td-chk input{width:13px;height:13px;accent-color:var(--accent);cursor:pointer;vertical-align:middle}

/* ---------- 选中行一眼可辨（三套皮肤通用） ----------
   各单据的选中态类名不统一：selected / sel / is-sel / on，这里一次覆盖。
   除了更深的底色，再加上下描边 + 首列 3px 主色竖条，避免「点了一行看不出选中哪行」。
   用 inset box-shadow 画边，不会像 border 那样把行高撑高 1px。 */
tbody tr.selected td,
table.tk-table tbody tr.sel td,
.pgrid tbody tr.is-sel td,
table.bom-grid tbody tr.on td,
table.mk-grid tbody tr.sel td{
  background:var(--row-sel);
  box-shadow:inset 0 1px 0 var(--accent-line),inset 0 -1px 0 var(--accent-line);
}
tbody tr.selected:hover td,
table.tk-table tbody tr.sel:hover td,
.pgrid tbody tr.is-sel:hover td,
table.bom-grid tbody tr.on:hover td,
table.mk-grid tbody tr.sel:hover td{background:var(--row-sel-hover)}

tbody tr.selected td:first-child,
table.tk-table tbody tr.sel td:first-child,
.pgrid tbody tr.is-sel td:first-child,
table.bom-grid tbody tr.on td:first-child,
table.mk-grid tbody tr.sel td:first-child{
  box-shadow:inset 3px 0 0 var(--accent),inset 0 1px 0 var(--accent-line),inset 0 -1px 0 var(--accent-line);
  color:var(--accent-dark);font-weight:700;
}
/* 序号列本身有更深的底色，也补一条竖条，视觉上仍是整行被框住 */
tbody tr.selected td.td-idx,
table.tk-table tbody tr.sel td:first-child.td-idx{
  box-shadow:inset 3px 0 0 var(--accent),inset 0 1px 0 var(--accent-line),inset 0 -1px 0 var(--accent-line);
}

/* 空态 / 加载 */
.grid-loading,.grid-empty{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:10px;color:var(--txt-2);font-size:13px;background:var(--overlay);z-index:20;
}
.grid-empty{color:var(--txt-3)}
.grid-loading[hidden],.grid-empty[hidden]{display:none}
.spinner{
  width:26px;height:26px;border:2.5px solid var(--spinner-track);border-top-color:var(--accent);
  border-radius:50%;animation:spin .7s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- 底部 ---------- */
.footer{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;row-gap:6px;
  background:var(--panel);border:1px solid var(--bd);border-radius:var(--radius);
  padding:6px 11px;box-shadow:var(--shadow);font-size:12.5px;color:var(--txt-2);
}
.footer-left{display:flex;align-items:center;gap:14px;flex-wrap:wrap;min-width:0}
.footer-left .f-src{display:flex;align-items:center;gap:14px}
.footer-left b{color:var(--txt);font-weight:600}
.footer-left .sep{width:1px;height:14px;background:var(--bd-soft)}
.footer-right{display:flex;align-items:center;gap:12px}
.pagesize{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--txt-2)}
.pagesize select{
  height:26px;border:1px solid var(--bd);border-radius:4px;background:var(--panel);
  font-size:12px;padding:0 4px;color:var(--txt);outline:none;cursor:pointer;
}
.pager{display:flex;align-items:center;gap:3px}
.pg{
  min-width:26px;height:26px;padding:0 6px;border:1px solid var(--bd);border-radius:4px;
  background:linear-gradient(var(--btn-1),var(--btn-2));color:var(--btn-ink);font-size:12px;
  display:inline-flex;align-items:center;justify-content:center;transition:.12s;
}
.pg:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent-dark)}
.pg:disabled{opacity:.42;cursor:default}
.pg.cur{background:var(--accent);border-color:var(--accent);color:var(--pri-ink);font-weight:600}
.pg.dots{border-color:transparent;background:transparent;color:var(--txt-3)}
.pg-info{font-size:12px;color:var(--txt-2);margin:0 4px;white-space:nowrap}

/* ---------- 弹层 ---------- */
.popup-layer{position:fixed;inset:0;z-index:100;pointer-events:none}
.popup-layer.on{pointer-events:auto}
.popup{
  position:absolute;background:var(--pop-bg);border:1px solid var(--pop-bd);border-radius:7px;
  box-shadow:var(--pop-shadow);
  font-size:12.5px;overflow:hidden;animation:pop .1s ease-out;color:var(--txt);
}
@keyframes pop{from{transform:translateY(-5px)}to{transform:none}}
.popup-hd{
  padding:8px 11px;background:linear-gradient(var(--pop-hd-1),var(--pop-hd-2));border-bottom:1px solid var(--bd-soft);
  font-weight:600;font-size:12px;color:var(--txt);display:flex;align-items:center;justify-content:space-between;
}
.popup-hd .x{border:0;background:transparent;color:var(--txt-3);font-size:15px;line-height:1;padding:0 2px}
.popup-hd .x:hover{color:var(--err-dot)}
.popup-bd{padding:8px 10px}
.popup-ft{
  padding:7px 10px;border-top:1px solid var(--bd-soft);background:var(--pop-ft);
  display:flex;gap:7px;justify-content:flex-end;
}
.popup-ft .btn{height:26px;font-size:12px;padding:0 10px}

.vals-toolbar{display:flex;align-items:center;gap:8px;padding:0 0 7px;border-bottom:1px solid var(--bd-soft);margin-bottom:6px}
.vals-toolbar input{
  flex:1;height:26px;border:1px solid var(--bd);border-radius:4px;padding:0 7px;
  font-size:12px;outline:none;font-family:inherit;background:var(--panel);color:var(--txt);
}
.vals-toolbar input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-ring)}
.vals-list{max-height:260px;overflow:auto;margin:0 -4px}
.val-item{
  display:flex;align-items:center;gap:7px;padding:4px 5px;border-radius:4px;cursor:pointer;
  font-size:12.5px;color:var(--cell-ink);
}
.val-item:hover{background:var(--panel-3)}
.val-item input{accent-color:var(--accent);width:13px;height:13px;cursor:pointer}
.val-item .cnt{margin-left:auto;font-size:11px;color:var(--txt-3);font-variant-numeric:tabular-nums}
.val-item.all{font-weight:600;color:var(--txt);border-bottom:1px solid var(--bd-soft);border-radius:0;margin-bottom:2px}

.cols-list{max-height:320px;overflow:auto;display:flex;flex-direction:column;gap:1px}

/* ---------- 皮肤选择弹层 ---------- */
.theme-list{display:flex;flex-direction:column;gap:4px}
.theme-item{
  display:flex;align-items:center;gap:9px;width:100%;padding:6px 7px;
  border:1px solid transparent;border-radius:6px;background:transparent;
  color:var(--txt);text-align:left;transition:.13s;
}
.theme-item:hover{background:var(--panel-3)}
.theme-item.is-on{border-color:var(--accent-line);background:var(--accent-soft)}
.theme-swatch{display:flex;border-radius:5px;overflow:hidden;border:1px solid var(--bd);flex:0 0 auto}
.theme-swatch i{display:block;width:13px;height:22px}
.theme-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.theme-txt b{font-size:12.5px;font-weight:600}
.theme-txt em{font-style:normal;font-size:11px;color:var(--txt-3)}
.theme-chk{color:var(--accent);opacity:0;flex:0 0 14px}
.theme-item.is-on .theme-chk{opacity:1}

/* toast */
.toast{
  position:fixed;left:50%;bottom:34px;transform:translate(-50%,14px);
  background:var(--toast-bg);color:var(--toast-ink);font-size:12.5px;padding:8px 16px;border-radius:6px;
  opacity:0;pointer-events:none;transition:.22s;z-index:200;box-shadow:0 6px 20px rgba(0,0,0,.2);
}
.toast.on{opacity:1;transform:translate(-50%,0)}

@media (max-width:900px){
  .app{padding:8px;min-width:0;gap:7px}
  .workspace{gap:7px}
  .search{flex:1 1 140px}
  .toolbar{flex-wrap:wrap}
  .btn span.lbl{display:none}
}
/* 窗口不宽时，页脚的数据源让位给分页控件（数据源在右上角状态胶囊里同样可见） */
@media (max-width:1240px){
  .footer-left .f-src{display:none}
}

/* ---------- 无数据行 ---------- */
tr.nodata-row td.grid-nodata{
  text-align:center;color:var(--txt-3);font-size:12.5px;height:110px;
  background:var(--panel)!important;border-right:0;
}
tr.nodata-row .link{margin:0 0 0 6px;display:inline-block}
thead th.th-chk input{width:13px;height:13px;accent-color:var(--accent);cursor:pointer;vertical-align:middle;margin-top:1px}

/* ---------- 列设置列表 ---------- */
.cols-item-main{
  display:flex;align-items:center;gap:7px;font-size:12.5px;cursor:pointer;
  padding:5px 7px;border-radius:4px;
}
.cols-item-main:hover{background:var(--panel-3)}
.cols-item-main input{accent-color:var(--accent)}
.type-tag{color:var(--txt-3);font-size:10.5px;margin-left:5px;border:1px solid var(--bd-soft);border-radius:3px;padding:0 4px}

/* ---------- 左侧导航（可折叠） ---------- */
.workspace{flex:1;min-height:0;display:flex;gap:9px}
.main{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;gap:9px}

.sidenav{
  flex:0 0 216px;width:216px;display:flex;flex-direction:column;
  background:var(--panel);border:1px solid var(--bd);border-radius:var(--radius);
  box-shadow:var(--shadow);overflow:hidden;
  transition:flex-basis .16s ease,width .16s ease;
}
.snav-head{
  display:flex;align-items:center;gap:6px;height:38px;flex:0 0 38px;
  padding:0 7px 0 11px;
  background:linear-gradient(180deg,var(--panel-2),var(--panel));
  border-bottom:1px solid var(--bd-soft);
}
/* 标题前的小竖条：呼应左上角 logo 的配色，给整栏一个视觉起点 */
.snav-title{
  flex:1;display:flex;align-items:center;gap:7px;
  font-size:11.5px;font-weight:700;color:var(--txt-2);letter-spacing:1px;
}
.snav-title::before{
  content:"";flex:0 0 3px;width:3px;height:12px;border-radius:2px;
  background:linear-gradient(180deg,var(--logo-1),var(--logo-2));
}
.snav-toggle{
  flex:0 0 22px;width:22px;height:22px;border:1px solid transparent;border-radius:6px;
  background:transparent;color:var(--txt-3);padding:0;
  display:flex;align-items:center;justify-content:center;transition:.13s;
}
.snav-toggle:hover{border-color:var(--accent-line);color:var(--accent);background:var(--accent-soft)}
.snav-toggle svg{transition:transform .16s}
.workspace.nav-collapsed .snav-toggle svg{transform:rotate(180deg)}

.snav-list{
  flex:1;overflow-y:auto;overflow-x:hidden;
  padding:3px 7px 8px;display:flex;flex-direction:column;gap:0;
}
.tab{
  position:relative;display:flex;align-items:center;gap:9px;width:100%;
  border:0;background:transparent;border-radius:6px;padding:4px 8px 4px 7px;
  color:var(--txt-2);font-size:12.5px;line-height:1.3;text-align:left;transition:.13s;
}
.tab:hover{background:var(--panel-3);color:var(--txt)}
/* 导航当前项：淡强调底 + 描边 + 左侧实色条，比整块深色底更轻 */
.tab.is-active{
  background:var(--accent-soft);color:var(--accent-dark);font-weight:700;
  box-shadow:inset 0 0 0 1px var(--accent-line);
}
.tab.is-active::before{
  content:"";position:absolute;left:1px;top:50%;transform:translateY(-50%);
  width:3px;height:14px;border-radius:2px;background:var(--accent);
}
.tab-ic{
  flex:0 0 19px;width:19px;height:19px;border-radius:5px;
  display:flex;align-items:center;justify-content:center;
  color:var(--txt-3);background:transparent;transition:.13s;
}
.tab-ic svg{display:block;width:16px;height:16px}
/* 没配图标的模块退回标题首字，这时才给淡底块 */
.tab-ic-txt{background:var(--ic-bg);font-size:10.5px;font-weight:600}
.tab:hover .tab-ic{color:var(--txt)}
.tab.is-active .tab-ic{color:var(--accent)}
.snav-txt{flex:1;min-width:0;display:flex;align-items:center;gap:6px}
.snav-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tab-badge{
  flex:0 0 auto;font-style:normal;font-size:10.5px;background:var(--badge-bg);color:var(--badge-ink);
  border-radius:9px;padding:1px 6px;text-align:center;
}
.tab.is-active .tab-badge{background:var(--panel);color:var(--accent-dark);box-shadow:0 0 0 1px var(--accent-line)}
.tab-badge:empty{display:none}

/* ---------- 左侧导航：功能模块分组 ---------- */
/* 每个分组是一条独立小节：上方细分隔线 + 小竖条标记 + 组内缩进引导线 */
.snav-grp{
  display:flex;flex-direction:column;gap:2px;
  padding:7px 0 6px;border-top:1px solid var(--bd-row);
}
.snav-grp:first-child{border-top:0;padding-top:2px}
.snav-grp-body{position:relative;display:flex;flex-direction:column;gap:1px;padding-left:11px}
.snav-grp-body::before{
  content:"";position:absolute;left:3px;top:2px;bottom:2px;width:1px;
  background:var(--bd);border-radius:1px;opacity:.75;
}
.snav-group{
  position:relative;display:flex;align-items:center;gap:6px;width:100%;
  min-height:30px;
  border:0;background:transparent;border-radius:6px;padding:6px 7px 6px 9px;
  /* 与条目同号但加粗：分组标题要明显比条目更「像一个标题」 */
  color:var(--txt-3);font-size:12.5px;font-weight:700;letter-spacing:.2px;
  line-height:1.25;
  text-align:left;cursor:pointer;transition:background .13s,color .13s;
}
.snav-group::before{
  content:"";position:absolute;left:0;top:50%;margin-top:-7px;
  width:3px;height:14px;border-radius:2px;background:var(--bd-strong);
  transition:background .13s;
}
.snav-group:hover{background:var(--panel-2);color:var(--txt-2)}
.snav-group:hover::before{background:var(--accent)}
.snav-group-txt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.snav-group-n{
  flex:0 0 auto;font-size:10.5px;font-weight:500;letter-spacing:0;color:var(--txt-3);
  background:var(--panel-3);border-radius:8px;padding:0 6px;line-height:17px;
  font-variant-numeric:tabular-nums;
}
/* 折叠箭头平时压得很淡，鼠标移到分组上才亮起来 */
.snav-group-caret{flex:0 0 auto;width:12px;height:12px;opacity:.3;transition:opacity .13s,transform .16s}
.snav-group:hover .snav-group-caret{opacity:.9}
.snav-grp.is-fold .snav-group-caret{opacity:.9;transform:rotate(-90deg)}
.snav-grp.is-fold .snav-grp-body{display:none}
.snav-grp.is-fold .snav-group::before{background:var(--bd-strong)}
/* 当前页所在的分组：标题跟着提亮，方便一眼定位在哪个章节 */
.snav-grp:has(.tab.is-active) .snav-group{color:var(--txt-2)}
.snav-grp:has(.tab.is-active) .snav-group::before{background:var(--accent)}

/* 折叠态：分组头变成一条细分隔线，文字/计数/箭头都收起；
   这时不允许折叠分组，否则 50px 宽的导航会把入口全藏掉 */
.workspace.nav-collapsed .snav-grp{padding:3px 0;border-top:0}
.workspace.nav-collapsed .snav-group{
  justify-content:center;height:8px;min-height:0;padding:0;margin:3px 2px 2px;
  border-top:1px solid var(--bd-soft);border-radius:0;
}
.workspace.nav-collapsed .snav-group::before{display:none}
.workspace.nav-collapsed .snav-group-txt,
.workspace.nav-collapsed .snav-group-n,
.workspace.nav-collapsed .snav-group-caret{display:none}
.workspace.nav-collapsed .snav-grp.is-fold .snav-grp-body{display:flex}
.workspace.nav-collapsed .snav-grp-body{padding-left:0}
.workspace.nav-collapsed .snav-grp-body::before{display:none}

/* 折叠态：只留图标 */
.workspace.nav-collapsed .sidenav{flex-basis:50px;width:50px}
.workspace.nav-collapsed .snav-title{display:none}
.workspace.nav-collapsed .snav-head{justify-content:center;padding:0 6px;border-bottom-color:transparent}
.workspace.nav-collapsed .snav-txt{display:none}
.workspace.nav-collapsed .snav-list{padding:4px}
.workspace.nav-collapsed .tab{justify-content:center;padding:6px 0;gap:0}
.workspace.nav-collapsed .tab-ic{flex:0 0 20px;width:20px;height:20px;color:var(--txt-2)}
.workspace.nav-collapsed .tab-ic svg{width:17px;height:17px}
.workspace.nav-collapsed .tab.is-active .tab-ic{color:var(--accent)}
.workspace.nav-collapsed .tab.is-active::before{display:none}

/* ---------- 自动换行 ---------- */
table.grid.wrap-cells td:not(.td-idx):not(.td-chk){
  white-space:normal;word-break:break-word;line-height:1.55;
  padding:6px 8px;height:auto;vertical-align:top;
}

/* 窄列时表头图标收紧，避免列名被截断 */
.sort-ind svg{width:7px;height:4px}
.filter-btn svg{width:10px;height:10px}

/* 排序图标默认隐藏，悬停或已排序时显示（窄列也能完整显示列名） */
.sort-ind{display:none}
th:hover .sort-ind,th.sorted .sort-ind{display:inline-flex}

/* ---------- 列很多的表：紧凑表头 ---------- */
table.grid.compact-hdr thead th{font-size:11px;padding:0 4px;letter-spacing:-.2px}
table.grid.compact-hdr .filter-row .f-input{font-size:11px;padding:0 3px}
table.grid.compact-hdr thead th .th-inner{gap:3px}

/* 导航项用 <a> 呈现时保持按钮观感（库存梳理入口） */
a.tab{text-decoration:none}
a.tab:visited{color:var(--txt-2)}
a.tab.is-active,a.tab.is-active:visited{color:var(--accent-dark)}

/* ================= 页头用户区（全局） ================= */
.ubox{position:relative}
.ubtn{
  display:flex;align-items:center;gap:7px;height:30px;padding:0 8px 0 5px;
  border:1px solid var(--btn-bd);border-radius:16px;cursor:pointer;
  background:linear-gradient(var(--btn-1),var(--btn-2));color:var(--btn-ink);
  font-family:inherit;font-size:12px;transition:border-color .14s,background .14s;
}
.ubtn:hover{border-color:var(--btn-hover-bd);background:linear-gradient(var(--btn-hover-1),var(--btn-hover-2))}
.ubox.is-open .ubtn{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent-dark)}
.uav{
  width:22px;height:22px;border-radius:50%;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;
  font-size:11.5px;font-weight:600;color:#fff;
  background:linear-gradient(150deg,var(--logo-1),var(--logo-2));box-shadow:var(--logo-shadow);
}
.uav.is-admin{background:linear-gradient(150deg,#f0a13c,#d97a1d);box-shadow:0 1px 3px rgba(200,120,20,.35)}
.utxt{display:flex;flex-direction:column;align-items:flex-start;line-height:1.16;min-width:0;max-width:132px}
.utxt b{font-size:12px;font-weight:600;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:132px}
.utxt em{font-style:normal;font-size:10px;color:var(--txt-3);white-space:nowrap}
.uche{flex:0 0 auto;opacity:.55;transition:transform .16s}
.ubox.is-open .uche{transform:rotate(180deg);opacity:.9}

.umenu{
  position:absolute;right:0;top:calc(100% + 6px);z-index:9000;width:196px;padding:5px;
  background:var(--pop-bg);border:1px solid var(--pop-bd);border-radius:var(--radius);
  box-shadow:var(--pop-shadow);animation:umIn .13s ease-out;
}
.umenu[hidden]{display:none}
@keyframes umIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.um-hd{padding:7px 9px 8px;border-bottom:1px solid var(--bd-soft);margin-bottom:4px}
.um-hd b{display:block;font-size:12.5px;color:var(--txt);font-weight:600}
.um-hd span{display:block;font-size:11px;color:var(--txt-3);margin-top:2px}
.um-i{
  display:flex;align-items:center;gap:8px;width:100%;height:30px;padding:0 9px;
  border:0;border-radius:5px;background:transparent;cursor:pointer;text-align:left;
  font-family:inherit;font-size:12.5px;color:var(--txt-2);text-decoration:none;
}
.um-i:hover{background:var(--row-hover);color:var(--txt)}
.um-i svg{flex:0 0 auto;opacity:.8}
.um-i.danger:hover{background:var(--err-bg);color:var(--err-ink)}
.um-i .um-cur{
  margin-left:auto;font-style:normal;font-size:11px;color:var(--txt-3);white-space:nowrap;
  max-width:70px;overflow:hidden;text-overflow:ellipsis;
}

/* 修改密码弹层 */
.up-f{display:block;font-size:11.5px;color:var(--txt-2);margin-bottom:10px}
.up-f input{
  display:block;width:100%;height:32px;margin-top:5px;padding:0 9px;
  border:1px solid var(--bd);border-radius:6px;background:var(--panel);
  font-size:12.5px;color:var(--txt);outline:none;font-family:inherit;
}
.up-f input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-ring)}
.up-ok{width:100%;height:32px;font-size:12.5px}
.up-err{
  margin:0 0 9px;padding:6px 9px;border-radius:5px;font-size:11.5px;
  background:var(--err-bg);border:1px solid var(--err-bd);color:var(--err-ink);
}
.up-err[hidden]{display:none}
.up-tip{margin-top:9px;font-size:11px;color:var(--txt-3);line-height:1.6}

/* ===== 顶部「问 IMA」· 由 IMA 生成回答（2026-11-06） =====
   范围限定「个人知识库 + 我创建的订阅知识库」，颜色全部走主题变量。 */
.ima-gs{position:relative;flex:0 1 272px;min-width:168px;max-width:272px}
.ima-gs-box{display:flex;align-items:center;gap:7px;height:32px;padding:0 8px 0 10px;
  background:var(--panel-2);border:1px solid var(--bd);border-radius:8px;
  transition:border-color .16s,box-shadow .16s}
.ima-gs-box:focus-within{border-color:var(--accent-line,var(--accent));box-shadow:0 0 0 3px var(--accent-ring,rgba(44,116,196,.13))}
.ima-gs-ic{flex:none;color:var(--txt-3)}
.ima-gs input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--txt);font-size:12.5px;font-family:inherit}
.ima-gs input::placeholder{color:var(--txt-3)}
.ima-gs-kbd{flex:none;font-size:10px;color:var(--txt-3);border:1px solid var(--bd);border-radius:4px;padding:1px 5px;background:var(--panel);white-space:nowrap}
.ima-gs-go{flex:none;border:1px solid var(--bd);background:var(--panel);color:var(--txt-2);
  font-size:12px;line-height:1;border-radius:5px;min-width:22px;height:21px;cursor:pointer;padding:0 4px}
.ima-gs-go:hover:not(:disabled){border-color:var(--accent-line,var(--accent));color:var(--accent,var(--txt))}
.ima-gs-go:disabled{opacity:.5;cursor:default}
.ima-gs-clear{flex:none;border:0;background:transparent;color:var(--txt-3);font-size:16px;line-height:1;cursor:pointer;padding:0 2px}
.ima-gs-clear:hover{color:var(--txt)}
.ima-gs-clear[hidden]{display:none!important}
.ima-gs-pop{position:absolute;top:calc(100% + 9px);right:0;width:520px;max-width:calc(100vw - 30px);
  background:var(--panel);border:1px solid var(--bd);border-radius:10px;
  box-shadow:0 14px 38px rgba(16,38,64,.2);z-index:8000;overflow:hidden}
.ima-gs-pop[hidden]{display:none!important}
.ima-gs-meta{padding:9px 13px;font-size:11.5px;color:var(--txt-3);border-bottom:1px solid var(--bd-soft,var(--bd));background:var(--panel-2)}
.ima-gs-meta.is-bad{color:var(--err-ink,var(--txt))}
.ima-gs-ans{max-height:min(62vh,470px);overflow:auto;padding:12px 15px}
.ima-gs-q{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;color:var(--txt);
  padding:8px 10px;margin-bottom:12px;background:var(--panel-2);border:1px solid var(--bd-soft,var(--bd));border-radius:7px;line-height:1.6}
.ima-gs-q[hidden]{display:none!important}
.ima-gs-q-lb{flex:none;font-size:10px;color:var(--accent,var(--txt-2));border:1px solid var(--bd);border-radius:4px;padding:1px 4px;background:var(--panel)}
.ima-gs-text{font-size:12.8px;line-height:1.78;color:var(--txt);word-break:break-word}
.ima-gs-text .ima-gs-p{margin:0 0 7px}
.ima-gs-text .ima-gs-p:last-child{margin-bottom:0}
.ima-gs-text strong{font-weight:650}
.ima-gs-text .ima-gs-h1,.ima-gs-text .ima-gs-h2,.ima-gs-text .ima-gs-h3,.ima-gs-text .ima-gs-h4{font-weight:650;margin:12px 0 6px;color:var(--txt)}
.ima-gs-text .ima-gs-h1{font-size:15px}.ima-gs-text .ima-gs-h2{font-size:14px}
.ima-gs-text .ima-gs-h3,.ima-gs-text .ima-gs-h4{font-size:13px}
.ima-gs-text .ima-gs-ul{margin:0 0 8px;padding-left:20px}
.ima-gs-text .ima-gs-ul li{margin:2px 0}
.ima-gs-text .ima-gs-pre{margin:8px 0;padding:8px 10px;background:var(--panel-2);border:1px solid var(--bd-soft,var(--bd));
  border-radius:6px;font-size:11.5px;line-height:1.55;white-space:pre-wrap;word-break:break-all;font-family:ui-monospace,Consolas,monospace}
.ima-gs-hint{padding:18px 6px 20px;text-align:center;color:var(--txt-3);font-size:12px;line-height:1.8}
.ima-gs-hint-ic{font-size:26px;line-height:1;margin-bottom:8px;opacity:.55;color:var(--accent,var(--txt-2))}
.ima-gs-hint-sub{font-size:11px;opacity:.8;margin-top:5px}
.ima-gs-refs{margin-top:13px;padding-top:10px;border-top:1px dashed var(--bd);font-size:11.5px}
.ima-gs-refs[hidden]{display:none!important}
.ima-gs-refs-hd{color:var(--txt-3);margin-bottom:6px}
.ima-gs-ref{display:flex;gap:7px;align-items:baseline;padding:3px 0;color:var(--txt-2)}
.ima-gs-ref-n{flex:none;width:16px;height:16px;line-height:16px;text-align:center;border-radius:4px;
  background:var(--panel-2);border:1px solid var(--bd);font-size:10px;color:var(--txt-3)}
.ima-gs-ref-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ima-gs-ref-kb{flex:none;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--txt-3);font-size:10.5px}
.ima-gs-foot{padding:8px 13px;font-size:11px;color:var(--txt-3);border-top:1px solid var(--bd-soft,var(--bd));background:var(--panel-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 系统设置卡片里的知识库范围列表 / 诊断框 */
.ima-set-kb{display:flex;align-items:baseline;gap:9px;font-size:12px;color:var(--txt-2);padding:4px 0;border-bottom:1px dashed var(--bd-soft,var(--bd))}
.ima-set-kb:last-child{border-bottom:0}
.ima-set-kb b{font-weight:600;color:var(--txt)}
.ima-set-kb em{font-style:normal;color:var(--txt-3);font-size:11px}
.ima-set-kb.is-bad{color:var(--err-ink,var(--txt))}
.ima-qa-raw{max-height:260px;overflow:auto;margin:6px 0 10px;padding:10px 12px;background:var(--panel-2);
  border:1px solid var(--bd);border-radius:7px;font-size:11px;line-height:1.6;color:var(--txt-2);
  white-space:pre-wrap;word-break:break-all;font-family:ui-monospace,Consolas,monospace}
.ima-qa-raw[hidden]{display:none!important}
@media (max-width:1180px){.ima-gs{flex-basis:210px;max-width:210px}}
@media (max-width:960px){.ima-gs{flex-basis:168px;max-width:168px}.ima-gs-kbd{display:none}}

/* ===== 计算单必填项标记（加热炉热效率 / 锅炉能效 / 离心泵能效 共用） =====
   * 只标「少了就算不出结果」的输入；标题等归档信息有默认值，不标。 */
.tb-req{display:inline-block;margin-left:4px;color:#e01b24;font-style:normal;font-weight:900;
  font-size:16px;line-height:1;vertical-align:-2px;
  text-shadow:0 1px 0 rgba(255,255,255,.85),0 0 3px rgba(224,27,36,.45)}
.tb-req-legend{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:11px;
  border:1px solid rgba(224,27,36,.38);background:rgba(224,27,36,.07);
  color:#b8151d;font-size:11.5px;font-weight:700;line-height:1.3;white-space:nowrap}
.tb-req-legend .tb-req{margin:0;font-size:15px;vertical-align:-1px}
.bl-case-tab .tb-req,.fn-comp-tab .tb-req{font-size:14px;vertical-align:-1px}
html[data-theme="tech"] .tb-req,html[data-theme="dark"] .tb-req{color:#ff5a5f;
  text-shadow:0 0 5px rgba(255,90,95,.55)}
html[data-theme="tech"] .tb-req-legend,html[data-theme="dark"] .tb-req-legend{
  border-color:rgba(255,90,95,.45);background:rgba(255,90,95,.10);color:#ff9b9e}
.tb-req-note{border-left:3px solid rgba(224,27,36,.55);padding-left:9px;margin:8px 0}
html[data-theme="tech"] .tb-req-note,html[data-theme="dark"] .tb-req-note{
  border-left-color:rgba(255,90,95,.6)}

/* ===== 站点备案页脚（工信部 ICP / 公安部联网备案）=====
   法规要求：首页底部展示备案号，且能点开查询。
     ICP  → https://beian.miit.gov.cn/（工信部政务服务平台）
     公安 → https://beian.mps.gov.cn/#/query/webSearch?code=…（全国互联网安全管理服务平台）
   一条 26px 的固定细栏；.app 同步减 26px，正文不会被压住。 */
.siteft{
  position:fixed;left:0;right:0;bottom:0;z-index:8;
  display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:2px 10px;
  min-height:26px;padding:3px 12px 4px;
  font-size:12px;line-height:16px;color:var(--txt-2,#6b7a90);text-align:center;
}
.siteft .sf-a{
  display:inline-flex;align-items:center;gap:5px;
  color:inherit;text-decoration:none;border-radius:4px;padding:1px 5px;
  transition:color .15s ease,background .15s ease;
}
.siteft .sf-a:hover{color:var(--accent,#2c74c4);background:var(--accent-soft,#e5f0fb)}
.siteft .sf-ico{display:block;width:13px;height:14px;flex:0 0 auto}
.siteft .sf-sep{width:1px;height:10px;background:var(--bd,#cfdbea);opacity:.85}
.app{height:calc(100vh - 26px)}
