/* Tabler 骨架 + 样例后台侧栏风格（电建蓝） */
:root{
  --bg:#e8eef5;
  --card:#ffffff;
  --ink:#1c2333;
  --ink-2:#5a6478;
  --ink-3:#8b93a7;
  --line:#c5d0de;
  --brand:#005bac;
  --brand-dark:#003e7e;
  --brand-deep:#0a2d5c;
  --brand-soft:#e8f2fb;
  --red:#d4000f;
  --red-soft:#fdeaea;
  --gold:#f0a92e;
  --gold-soft:#fdf3e2;
  --green:#1a9e4b;
  --green-soft:#e9f8ef;
  --radius:10px;
  --shadow:0 1px 2px rgba(28,35,51,.06),0 8px 20px rgba(10,45,92,.09);
  --shadow-hover:0 4px 10px rgba(10,45,92,.08),0 14px 28px rgba(0,91,172,.16);
  --sidebar-w:216px;
  --tblr-primary:#005bac;
  --tblr-font-sans-serif:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;
  --tblr-body-bg:var(--bg);
  --tblr-body-color:var(--ink);
}
html,body{
  margin:0;
  min-height:100%;
  font-family:var(--tblr-font-sans-serif);
  background:var(--bg);
  color:var(--ink);
  line-height:1.5;
}
a{text-decoration:none;color:inherit}
ul{list-style:none;margin:0;padding:0}
button,input,select,textarea{font:inherit}

.sidebar{
  position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-w);z-index:60;
  background:linear-gradient(180deg,var(--brand-deep) 0%,var(--brand-dark) 100%);
  display:flex;flex-direction:column;transition:transform .28s ease;
}
.sb-brand{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.09)}
.sb-logo{
  width:34px;height:34px;border-radius:9px;flex:none;
  background:linear-gradient(135deg,var(--brand),var(--gold));
  display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px rgba(0,0,0,.25);
}
.sb-logo svg{width:21px;height:21px;stroke:#fff;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sb-title{color:#fff;font-size:13px;font-weight:700;line-height:1.3}
.sb-title span{display:block;font-size:10px;font-weight:400;color:rgba(255,255,255,.5);letter-spacing:1px}
.sb-nav{flex:1;overflow-y:auto;padding:4px 0 8px}
.sb-nav::-webkit-scrollbar{width:0}
.nav-group{padding:10px 18px 3px;font-size:10px;color:rgba(255,255,255,.38);letter-spacing:2.5px}
.sb-link{
  display:flex;align-items:center;gap:10px;margin:1px 8px;padding:7px 11px;border-radius:8px;
  color:rgba(255,255,255,.72);font-size:13px;cursor:pointer;position:relative;transition:all .18s;
}
.sb-link svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.sb-link:hover{background:rgba(255,255,255,.08);color:#fff}
.sb-link.active{background:rgba(255,255,255,.13);color:#fff;font-weight:700}
.sb-link.active::before{content:"";position:absolute;left:-8px;top:7px;bottom:7px;width:3px;border-radius:2px;background:var(--gold)}
.sb-link.soon{opacity:.55}
.sb-link .n-badge{margin-left:auto;font-size:10px;font-weight:700;background:rgba(255,255,255,.16);color:#fff;border-radius:999px;padding:0 7px;line-height:16px}
.sb-user{border-top:1px solid rgba(255,255,255,.09);padding:10px 14px;display:flex;align-items:center;gap:8px}
.sb-avatar{width:34px;height:34px;border-radius:50%;flex:none;background:linear-gradient(135deg,var(--brand),var(--gold));
  display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;font-weight:700;border:2px solid rgba(255,255,255,.25)}
.sb-user .u-n{color:#fff;font-size:13px;font-weight:600;line-height:1.3}
.sb-user .u-r{color:rgba(255,255,255,.5);font-size:11px;margin-top:2px}
.sb-user .perm{font-size:10px;font-weight:700;padding:2px 8px;border-radius:999px;border:none;cursor:pointer;background:rgba(255,255,255,.12);color:#fff}
.sb-user .perm.read{background:rgba(232,242,251,.2);color:#cfe6fb}
.sb-user .perm.write{background:rgba(26,158,75,.35);color:#d8ffe6}
.sb-lock{margin-left:auto;font-size:11px;font-weight:700;color:rgba(255,255,255,.7);background:transparent;border:1px solid rgba(255,255,255,.18);border-radius:8px;padding:5px 8px;cursor:pointer}
.sb-lock:hover{color:#fff;border-color:rgba(255,255,255,.4)}

.shell-mask{position:fixed;inset:0;background:rgba(10,45,92,.5);z-index:55;opacity:0;pointer-events:none;transition:opacity .25s}
.shell-mask.show{opacity:1;pointer-events:auto}

.shell-main{margin-left:var(--sidebar-w);min-height:100vh;display:flex;flex-direction:column}
.shell-topbar{
  position:sticky;top:0;z-index:40;height:52px;
  background:rgba(255,255,255,.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:12px;padding:0 16px;
}
.burger{display:none;width:36px;height:36px;border:1px solid var(--line);border-radius:9px;background:#fff;cursor:pointer;align-items:center;justify-content:center}
.burger svg{width:18px;height:18px;stroke:var(--ink-2);stroke-width:2;stroke-linecap:round;fill:none}
.shell-crumb{font-size:12px;color:var(--ink-3)}
.shell-crumb b{color:var(--brand);font-weight:600}
.shell-heading{font-size:15px;font-weight:800;color:var(--brand-dark);line-height:1.2}
.shell-right{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.tb-clock{text-align:right;line-height:1.25}
.tb-clock .t{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--brand-dark)}
.tb-clock .d{font-size:11px;color:var(--ink-3)}
.perm{font-size:11px;font-weight:700;padding:4px 10px;border-radius:999px;background:#f0f2f7;color:var(--ink-3);cursor:pointer;border:none}
.perm.read{background:var(--brand-soft);color:var(--brand)}
.perm.write{background:var(--green-soft);color:var(--green)}
.btn{font:inherit;font-size:12px;font-weight:700;border:none;border-radius:8px;padding:7px 12px;cursor:pointer;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}
.btn-ghost{background:#fff;color:var(--brand-dark);border:1px solid var(--line)}
.btn-ghost:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.btn-brand{background:var(--brand);color:#fff}
.btn-brand:hover{background:var(--brand-dark)}
.btn:focus-visible,.perm:focus-visible,.sb-lock:focus-visible,.burger:focus-visible{
  outline:2px solid var(--brand);outline-offset:2px;
}
.shell-body{padding:10px 14px 18px;flex:1}

body.is-docs .shell-body{padding:0;overflow:hidden;display:flex;flex-direction:column;min-height:0}
body.is-docs, body.is-docs .shell-main{height:100vh;overflow:hidden}
body.is-docs .shell-main{min-height:0}
body.is-docs .shell-body > .shell{flex:1;min-height:0;height:calc(100vh - 52px) !important}
@media(max-width:992px){
  body.is-docs .side{height:calc(100vh - 52px) !important}
}

@media(max-width:760px){
  .tb-clock,.shell-crumb{display:none}
}
@media(max-width:992px){
  .sidebar{transform:translateX(-100%)}
  .sidebar.open{transform:translateX(0);box-shadow:0 0 40px rgba(10,45,92,.4)}
  .shell-mask.show{opacity:1;pointer-events:auto}
  .shell-main{margin-left:0}
  .burger{display:flex}
}

@media print{
  .sidebar,.shell-topbar,.shell-mask,#biao-gate{display:none !important}
  .shell-main{margin-left:0 !important}
  .shell-body{padding:0 !important}
}

.shell-toast{
  position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(12px);
  background:var(--brand-deep);color:#fff;font-size:13px;padding:10px 16px;border-radius:10px;
  opacity:0;pointer-events:none;transition:.25s;z-index:80;
}
.shell-toast.on{opacity:1;transform:translateX(-50%)}

.tbl-wrap,.tbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
@media(max-width:760px){
  table.tbl{min-width:560px}
}

/* Tabler 与门户共用 .legend / .row / .card / .status / .modal，会把图例压成小色块、把栅格拉成全宽叠字 */
.legend{
  width:auto;
  height:auto;
  min-width:0;
  min-height:0;
  max-width:none;
  background:transparent;
  border:none;
  padding:0;
  box-sizing:border-box;
  vertical-align:inherit;
}
.row{
  --tblr-gutter-x:0;
  --tblr-gutter-y:0;
}
.row > *{
  width:auto;
  max-width:none;
  padding-left:0;
  padding-right:0;
  flex-shrink:1;
}
.card{
  display:block;
  height:auto;
  min-width:0;
  flex:none;
  flex-direction:unset;
  align-items:unset;
  justify-content:unset;
}
.status{
  height:auto;
  min-height:0;
  gap:0;
}
.modal{
  width:auto;
  height:auto;
}
