*{box-sizing:border-box}
:root{
  --bg:#e4e7eb;
  --panel:#e8ebef;
  --inset:#dce1e7;
  --text:#3c4043;
  --muted:#96a0ac;
  --primary:#4285f4;
  --purple:#875bd9;
  --green:#34a853;
  --orange:#fbbc04;
  --red:#ea4335;
}
html{background:var(--bg)}
body{
  margin:0;
  min-height:100vh;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--text);
  background:var(--bg)
}
button,input,select{font:inherit}
button{cursor:pointer}
.hidden{display:none!important}

.app-shell{
  min-height:100vh;
  display:grid;
  grid-template-columns:112px 1fr
}

.sidebar{
  position:sticky;
  top:0;
  height:100vh;
  padding:18px 12px;
  display:flex;
  flex-direction:column;
  align-items:center;
  background:#dfe4ea;
  box-shadow:8px 0 22px rgba(163,177,198,.18);
  z-index:20
}

.side-brand{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:8px;
  text-align:center;
  margin:3px 0 28px
}

.brand-icon{
  width:52px;
  height:52px;
  border-radius:17px;
  display:grid;
  place-items:center;
  color:#fff;
  font-weight:800;
  font-size:22px;
  background:linear-gradient(135deg,#5a9bff,#7b5ad8);
  box-shadow:-6px -6px 12px rgba(255,255,255,.72),6px 6px 12px rgba(132,146,171,.25)
}

.side-brand b{font-size:13px}
.side-brand small{font-size:10px;color:var(--muted)}

.side-nav{
  width:100%;
  display:flex;
  flex-direction:column;
  gap:12px
}

.nav-item{
  width:100%;
  border:0;
  border-radius:18px;
  padding:11px 6px;
  background:transparent;
  color:#68717c;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:7px;
  font-size:11px;
  font-weight:700;
  transition:.2s
}

.nav-icon{
  width:42px;
  height:42px;
  border-radius:14px;
  display:grid;
  place-items:center;
  font-size:19px;
  background:#e5e9ee;
  box-shadow:-5px -5px 10px rgba(255,255,255,.78),5px 5px 10px rgba(155,169,190,.26)
}

.nav-item:hover{color:#4c67cf;transform:translateY(-1px)}
.nav-item.active{color:#4666d8}
.nav-item.active .nav-icon{
  color:#fff;
  background:linear-gradient(135deg,#5b8ff3,#755bd7);
  box-shadow:inset 2px 2px 4px rgba(255,255,255,.18),4px 4px 10px rgba(92,101,164,.28)
}

.worker-status-rail{
  width:96px;
  min-height:76px;
  margin-top:auto;
  padding:10px 10px 11px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:6px;
  color:#858e99;
  background:#e8ebef;
  border:0;
  border-radius:16px;
  box-shadow:-5px -5px 10px rgba(255,255,255,.72),5px 5px 10px rgba(163,177,198,.22);
  writing-mode:horizontal-tb;
  transform:translateY(6px);
  cursor:default;
  user-select:none
}

.worker-main-row{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  line-height:1
}

.worker-label{
  font-size:12px;
  line-height:1;
  font-weight:750;
  letter-spacing:.01em;
  color:#74808c
}

.worker-state{
  font-size:11px;
  line-height:1.2;
  font-weight:650;
  color:#8e99a5
}

.worker-dot{
  width:8px;
  height:8px;
  flex:0 0 8px;
  border-radius:50%;
  display:inline-block
}

.worker-online{background:#34a853;box-shadow:0 0 0 5px rgba(52,168,83,.11)}
.worker-waiting{background:#fbbc04;box-shadow:0 0 0 5px rgba(251,188,4,.12)}
.worker-offline{background:#ea4335;box-shadow:0 0 0 5px rgba(234,67,53,.12)}
.worker-unknown{background:#9aa0a6;box-shadow:0 0 0 5px rgba(154,160,166,.11)}

.workspace{min-width:0}

.topbar{
  min-height:82px;
  padding:14px 28px;
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:24px;
  position:sticky;
  top:0;
  z-index:40;
  background:#e7ebf0;
  box-shadow:0 8px 20px rgba(163,177,198,.14)
}

.breadcrumb{
  display:flex;
  gap:9px;
  align-items:center;
  color:#9aa3ae;
  font-size:13px
}
.breadcrumb b{color:#54616f}
.breadcrumb i{font-style:normal;color:#b2bac4}

.top-query-status{
  height:58px;
  box-sizing:border-box;
  display:flex;
  align-items:center;
  gap:11px;
  padding:10px 14px;
  border-radius:16px;
  background:#e8ebef;
  box-shadow:-5px -5px 10px rgba(255,255,255,.72),5px 5px 10px rgba(163,177,198,.22)
}
.top-query-status small{
  display:block;
  color:#929ba6;
  font-size:10px;
  margin-bottom:3px
}
.top-query-status b{font-size:13px}

.status-orb{
  width:12px;
  height:12px;
  border-radius:50%;
  background:#aab1ba;
  box-shadow:0 0 0 6px rgba(160,168,180,.10)
}
.orb-idle{background:#aab1ba}
.orb-busy{background:#fbbc04;box-shadow:0 0 0 6px rgba(251,188,4,.12)}
.orb-ok{background:#34a853;box-shadow:0 0 0 6px rgba(52,168,83,.12)}
.orb-error{background:#ea4335;box-shadow:0 0 0 6px rgba(234,67,53,.12)}

.content{
  padding:30px;
  min-height:calc(100vh - 82px);
  background:
    radial-gradient(circle at 88% 0%,rgba(201,210,255,.34),transparent 24%),
    radial-gradient(circle at 18% 2%,rgba(255,255,255,.65),transparent 24%),
    var(--bg)
}

.soft-card{
  background:rgba(232,235,239,.94);
  border-radius:22px;
  box-shadow:-9px -9px 18px rgba(255,255,255,.78),9px 9px 18px rgba(163,177,198,.27)
}

.notice{
  width:100%;
  box-sizing:border-box;
  margin:0 0 20px;
  padding:10px 12px;
  border-radius:13px;
  background:#f0dddd;
  color:#bd4a42;
  font-size:10px;
  font-weight:700;
  line-height:1.55;
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.18),
    inset -2px -2px 5px rgba(255,255,255,.68);
}

.eyebrow{
  font-size:10px;
  font-weight:900;
  letter-spacing:.16em;
  color:#5c72df
}

.view-panel{display:none}
.view-panel.active{display:block}

.page-heading{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:20px;
  margin-bottom:18px
}

.page-heading h1{
  margin:6px 0 0;
  font-size:28px;
  color:#303742
}

.query-workbench{
  max-width:980px;
  padding:28px
}

.query-form{
  display:grid;
  grid-template-columns:120px minmax(0,1fr) 130px;
  gap:10px;
  padding:8px;
  border-radius:18px;
  background:#dce1e7;
  box-shadow:
    inset 4px 4px 9px rgba(163,177,198,.28),
    inset -4px -4px 9px rgba(255,255,255,.78)
}

.query-form select,
.query-form input{
  border:0;
  outline:0;
  background:transparent;
  color:#48515d
}

.query-form select{
  width:100%;
  padding:13px 10px
}

.query-form input{
  padding:13px 10px;
  min-width:0
}

.query-form button{
  border:0;
  border-radius:13px;
  padding:13px 18px;
  color:#fff;
  font-weight:800;
  background:linear-gradient(135deg,#5b94f5,#477ae6);
  box-shadow:-4px -4px 8px rgba(255,255,255,.42),4px 4px 9px rgba(66,104,180,.30)
}
.query-form button:disabled{opacity:.55;cursor:not-allowed}

.query-guide{
  margin-top:24px;
  display:flex;
  align-items:center;
  gap:16px;
  padding:20px;
  border-radius:18px;
  background:#e6e9ed;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.20),
    inset -3px -3px 7px rgba(255,255,255,.74)
}

.guide-icon{
  width:54px;
  height:54px;
  border-radius:17px;
  display:grid;
  place-items:center;
  color:#5872da;
  font-size:24px;
  background:#e8ebef;
  box-shadow:-4px -4px 8px rgba(255,255,255,.72),4px 4px 8px rgba(163,177,198,.22)
}

.query-guide h3{margin:0 0 6px}
.query-guide p{margin:0;color:#7e8894;font-size:13px;line-height:1.7}

.query-progress{
  margin-top:20px;
  padding:20px;
  border-radius:18px;
  background:#e6e9ed;
  box-shadow:-5px -5px 10px rgba(255,255,255,.72),5px 5px 10px rgba(163,177,198,.22)
}

.progress-row{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:15px
}
.progress-row small{color:#929ba6;font-size:10px;letter-spacing:.08em}
.progress-row h3{margin:5px 0 0}

.queue-badge,
.soft-chip{
  display:inline-flex;
  align-items:center;
  white-space:nowrap;
  padding:7px 11px;
  border-radius:999px;
  font-size:12px;
  font-weight:700;
  color:#4f68ce;
  background:#dde5f7
}

.soft-progress{
  height:10px;
  margin:15px 0 10px;
  border-radius:999px;
  overflow:hidden;
  background:#d7dce3;
  box-shadow:
    inset 3px 3px 6px rgba(163,177,198,.28),
    inset -3px -3px 6px rgba(255,255,255,.72)
}

.soft-progress i{
  display:block;
  position:relative;
  height:100%;
  width:20%;
  overflow:hidden;
  border-radius:999px;
  background:linear-gradient(90deg,#4c84ec,#795bd7);
  transition:width .24s linear;
  will-change:width
}

/* 查询进行中：百分比仍然只按 1% 推进；流光只负责让 99% 等待阶段保持活跃感。 */
.soft-progress.is-query-active i::after{
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  left:0;
  width:34%;
  pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.34),transparent);
  transform:translateX(-180%);
  animation:query-progress-sheen 1.45s linear infinite
}

@keyframes query-progress-sheen{
  from{transform:translateX(-180%)}
  to{transform:translateX(395%)}
}

@media (prefers-reduced-motion:reduce){
  .soft-progress.is-query-active i::after{animation:none;opacity:.2}
}

.query-progress p{
  color:#7a8490;
  margin-bottom:0
}

.query-complete{
  margin-top:20px;
  padding:17px 20px;
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:16px;
  border-radius:18px;
  background:#e4ebe5;
  box-shadow:
    inset 3px 3px 7px rgba(125,160,130,.12),
    inset -3px -3px 7px rgba(255,255,255,.72)
}
.query-complete small{color:#839088;font-size:10px}
.query-complete h3{margin:5px 0 0}

.empty-state-page{
  min-height:420px;
  padding:40px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center
}

.empty-symbol{
  width:72px;
  height:72px;
  border-radius:22px;
  display:grid;
  place-items:center;
  color:#5872da;
  font-size:30px;
  margin-bottom:18px;
  background:#e8ebef;
  box-shadow:-6px -6px 12px rgba(255,255,255,.75),6px 6px 12px rgba(163,177,198,.24)
}

.empty-state-page h2{margin:0 0 8px}
.empty-state-page p{margin:0 0 18px;color:#8a949f}

.soft-btn{
  border:0;
  border-radius:13px;
  padding:10px 15px;
  color:#4b67d3;
  background:#e8ebef;
  font-weight:800;
  box-shadow:-4px -4px 8px rgba(255,255,255,.76),4px 4px 8px rgba(163,177,198,.22)
}

.device-overview{padding:28px}

.device-hero{
  display:flex;
  justify-content:space-between;
  gap:20px;
  align-items:flex-start;
  margin-bottom:8px
}

.device-hero small,
.card-top small,
.card-heading small,
.stat-card small{
  color:#8c96a1;
  font-size:10px;
  letter-spacing:.08em
}

.device-hero h2{margin:7px 0 0;font-size:24px}

.info-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:0 28px
}
.info-grid.single{grid-template-columns:1fr}

.info-item{
  padding:14px 0;
  border-bottom:1px solid rgba(255,255,255,.58)
}

.info-item label{
  display:block;
  color:#8b95a0;
  font-size:11px;
  margin-bottom:6px
}

.info-item b{
  font-size:15px;
  color:#303741;
  word-break:break-word
}

.status-pill{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  align-self:flex-start;
  width:auto;
  white-space:nowrap;
  padding:7px 11px;
  border-radius:999px;
  font-size:12px;
  font-weight:800
}

.status-good{color:#287a3b;background:#d9eedc}
.status-bad{color:#ba433b;background:#f1dddd}
.status-warn{color:#967000;background:#f4e8c0}
.status-neutral{color:#4d66cb;background:#dde5f7}

.sim-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:22px
}

.sim-card{padding:24px}

.card-top{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:16px
}

.card-top h2{margin:6px 0 0}

.stats-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:18px;
  margin-bottom:20px
}

.stat-card{padding:20px}
.stat-card strong{
  display:block;
  font-size:28px;
  margin:8px 0 5px;
  color:#343b45
}
.stat-card span{font-size:11px;color:#99a1ab}

.charts-grid{
  display:grid;
  grid-template-columns:minmax(300px,.75fr) minmax(420px,1.25fr);
  gap:20px;
  margin-bottom:20px
}

.chart-card{padding:22px}
.card-heading h3{margin:5px 0 0;font-size:17px}
.chart-wrap{height:300px;margin-top:12px}
.doughnut-wrap{height:300px;max-width:390px;margin:12px auto 0}

.package-card-shell{padding:22px}

.package-tabs{
  display:inline-flex;
  gap:8px;
  padding:6px;
  border-radius:16px;
  background:#dce1e7;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.28),
    inset -3px -3px 7px rgba(255,255,255,.75)
}

.package-tab{
  border:0;
  background:transparent;
  color:#66707d;
  padding:11px 16px;
  border-radius:12px;
  font-weight:800
}

.package-tab span{
  display:inline-flex;
  min-width:22px;
  justify-content:center;
  margin-left:5px;
  padding:2px 6px;
  border-radius:999px;
  background:rgba(255,255,255,.55);
  font-size:11px
}

.package-tab.active{
  color:#4565d0;
  background:#e8ebef;
  box-shadow:-4px -4px 8px rgba(255,255,255,.78),4px 4px 8px rgba(163,177,198,.25)
}

.package-pane{display:none;margin-top:18px}
.package-pane.active{display:block}

.package-table-wrap{
  overflow:hidden;
  border-radius:16px;
  background:#e7eaee;
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.18),
    inset -2px -2px 5px rgba(255,255,255,.72)
}

.package-table{
  width:100%;
  border-collapse:collapse;
  font-size:12px
}

.package-table th{
  padding:13px 11px;
  text-align:left;
  color:#6c7580;
  background:#dde2e7;
  border-bottom:1px solid rgba(255,255,255,.62);
  white-space:nowrap
}

.package-table td{
  padding:13px 11px;
  color:#3d454f;
  border-bottom:1px solid rgba(255,255,255,.55);
  vertical-align:middle
}

.package-table tr:last-child td{border-bottom:0}
.pkg-name{font-weight:700}
.package-table tbody tr:hover{background:rgba(255,255,255,.20)}

.mobile-packages{display:none}

.mobile-package-card{
  padding:17px;
  margin-bottom:16px;
  border-radius:18px;
  background:#e8ebef;
  box-shadow:-5px -5px 10px rgba(255,255,255,.72),5px 5px 10px rgba(163,177,198,.22)
}

.mobile-package-head{
  display:flex;
  justify-content:space-between;
  gap:12px;
  align-items:flex-start
}

.mobile-package-head small{
  display:block;
  color:#919aa5;
  font-size:10px;
  margin-bottom:5px
}

.mobile-package-head h3{margin:0;font-size:17px}
.mobile-package-grid{margin-top:10px}

.empty-state{
  text-align:center;
  color:#929ba5;
  padding:28px;
  border-radius:16px;
  background:#dfe4e9;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.22),
    inset -3px -3px 7px rgba(255,255,255,.72)
}

.mobile-nav{display:none}

@media(max-width:1100px){
  .stats-grid{grid-template-columns:repeat(2,1fr)}
  .charts-grid{grid-template-columns:1fr}
  .query-workbench{max-width:none}
}

@media(max-width:820px){
  .app-shell{display:block}
  .sidebar{display:none}

  .topbar{
    min-height:auto;
    padding:12px;
    position:sticky;
    top:0;
    z-index:30
  }

  .content{
    padding:16px 12px 94px;
    min-height:100vh
  }

  .mobile-nav{
    display:grid;
    grid-template-columns:repeat(4,1fr);
    position:fixed;
    bottom:12px;
    left:12px;
    right:12px;
    z-index:50;
    padding:7px;
    border-radius:18px;
    background:#e3e7ec;
    box-shadow:-7px -7px 14px rgba(255,255,255,.72),7px 7px 14px rgba(118,132,154,.28)
  }

  .mobile-nav-item{
    border:0;
    background:transparent;
    padding:10px 5px;
    border-radius:12px;
    color:#737d89;
    font-weight:800;
    font-size:12px
  }

  .mobile-nav-item.active{
    color:#fff;
    background:linear-gradient(135deg,#5a8ff0,#755bd5)
  }

  .query-workbench{padding:18px}
  .query-form{grid-template-columns:1fr}
  .query-form button{width:100%}

  .query-guide{align-items:flex-start}

  .page-heading h1{font-size:24px}
  .device-overview{padding:18px}
  .info-grid{grid-template-columns:1fr}
  .sim-grid{grid-template-columns:1fr}
  .sim-card{padding:18px}

  .stats-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:12px
  }

  .stat-card{padding:16px}
  .stat-card strong{font-size:23px}

  .charts-grid{
    grid-template-columns:1fr;
    gap:14px
  }

  .chart-card{padding:16px}
  .chart-wrap,.doughnut-wrap{height:260px}

  .package-card-shell{padding:16px}

  .package-tabs{
    display:grid;
    grid-template-columns:1fr 1fr;
    width:100%
  }

  .package-tab{padding:10px 8px}

  .desktop-packages{display:none}
  .mobile-packages{display:block}
}

@media(max-width:520px){
  .breadcrumb{font-size:11px}

  .top-query-status{
    padding:8px 10px
  }

  .top-query-status small{display:none}

  .stats-grid{grid-template-columns:1fr 1fr}
  .stat-card strong{font-size:21px}
}


/* ===== V5 设备查询页：三块独立卡片 + 上下左右居中 ===== */
#queryView.active{
  min-height:calc(100vh - 142px);
  display:flex;
  align-items:center;
  justify-content:center;
}

.query-page-center{
  width:min(820px,100%);
  margin:auto;
  display:flex;
  flex-direction:column;
  gap:22px;
}

.query-page-title{
  text-align:center;
  margin-bottom:2px;
}

.query-page-title h1{
  margin:0 0 8px;
  font-size:32px;
  line-height:1.2;
  color:#303742;
  letter-spacing:.01em;
}

.query-page-title .eyebrow{
  display:block;
}

.query-search-card{
  padding:18px;
}

.query-search-row{
  display:grid;
  grid-template-columns:minmax(0,1fr) 110px;
  gap:12px;
  padding:9px;
  border-radius:18px;
  background:#dce1e7;
  box-shadow:
    inset 4px 4px 9px rgba(163,177,198,.28),
    inset -4px -4px 9px rgba(255,255,255,.78);
}

.query-search-row input{
  width:100%;
  min-width:0;
  border:0;
  outline:0;
  background:transparent;
  color:#404854;
  padding:15px 15px;
  font-size:15px;
}

.query-search-row input::placeholder{
  color:#98a1ad;
}

.query-search-row button{
  border:0;
  border-radius:13px;
  padding:13px 18px;
  color:#fff;
  font-weight:800;
  background:linear-gradient(135deg,#5b94f5,#477ae6);
  box-shadow:
    -4px -4px 8px rgba(255,255,255,.42),
    4px 4px 9px rgba(66,104,180,.30);
}

.query-search-row button:disabled{
  opacity:.55;
  cursor:not-allowed;
}

.query-help-card{
  padding:22px 24px;
  display:flex;
  align-items:center;
  gap:18px;
}

.query-help-icon{
  flex:0 0 auto;
  width:48px;
  height:48px;
  border-radius:16px;
  display:grid;
  place-items:center;
  font-weight:900;
  font-family:Georgia,serif;
  font-size:22px;
  color:#5b72da;
  background:#e8ebef;
  box-shadow:
    -5px -5px 10px rgba(255,255,255,.76),
    5px 5px 10px rgba(163,177,198,.22);
}

.query-help-card h3{
  margin:0 0 7px;
  font-size:16px;
}

.query-help-card p{
  margin:3px 0;
  color:#7f8995;
  font-size:13px;
  line-height:1.65;
}

.query-status-card{
  padding:23px 24px;
  min-height:170px;
}

.query-status-header{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:16px;
}

.query-status-header small{
  color:#8b95a0;
  font-size:11px;
}

.query-status-header h3{
  margin:6px 0 0;
  font-size:20px;
}

.query-idle-text{
  margin-top:20px;
  padding-top:16px;
  border-top:1px solid rgba(255,255,255,.62);
  color:#8b95a0;
  font-size:13px;
}

.query-status-card .query-progress{
  margin-top:18px;
  padding:0;
  border-radius:0;
  background:transparent;
  box-shadow:none;
}

.query-status-card .query-complete{
  margin-top:18px;
}

@media(max-width:820px){
  #queryView.active{
    min-height:calc(100vh - 170px);
    align-items:flex-start;
  }

  .query-page-center{
    gap:16px;
    padding-top:14px;
  }

  .query-page-title h1{
    font-size:27px;
  }

  .query-search-card{
    padding:14px;
  }

  .query-search-row{
    grid-template-columns:1fr;
  }

  .query-search-row button{
    width:100%;
  }

  .query-help-card{
    align-items:flex-start;
    padding:18px;
  }

  .query-status-card{
    padding:19px;
  }
}


/* ===== 设备详情可视化三卡 ===== */
.device-visual-grid{display:grid;grid-template-columns:1.15fr .9fr .9fr;gap:20px;margin-bottom:22px}
.visual-card{min-width:0;padding:22px}
.visual-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px}
.visual-card-head small{display:block;color:#8d97a3;font-size:10px;letter-spacing:.1em}
.visual-card-head h3{margin:5px 0 0;font-size:17px}
.visual-badge{display:inline-flex;align-items:center;justify-content:center;max-width:56%;padding:7px 10px;border-radius:999px;font-size:11px;font-weight:800;color:#5268c8;background:#dde5f7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.device-map{height:250px;border-radius:17px;overflow:hidden;background:#dce2e8;box-shadow:inset 3px 3px 7px rgba(163,177,198,.20),inset -3px -3px 7px rgba(255,255,255,.72)}

.visual-foot{display:flex;justify-content:space-between;gap:12px;margin-top:14px;padding-top:13px;border-top:1px solid rgba(255,255,255,.58);color:#9099a4;font-size:12px}
.visual-foot b{color:#48515d;text-align:right}

.signal-gauge-wrap{position:relative;height:210px;display:flex;align-items:center;justify-content:center}
.signal-gauge{width:220px;max-width:100%;overflow:visible}
.gauge-track,.gauge-value{fill:none;stroke-width:15;stroke-linecap:round}
.gauge-track{stroke:#d8dde4;filter:drop-shadow(2px 3px 4px rgba(150,160,176,.18))}
.gauge-value{stroke:#9aa0a6;stroke-dasharray:0 100;transition:stroke-dasharray .55s ease,stroke .35s ease}
.signal-gauge-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-12%);text-align:center}
.signal-gauge-center strong{display:block;font-size:30px;line-height:1;color:#343b45}
.signal-gauge-center span{display:block;margin-top:9px;font-size:13px;color:#7f8995}
.signal-caption{text-align:center;color:#7f8995;font-size:13px;padding:10px 12px;border-radius:13px;background:#e1e5ea;box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.72)}

.wifi-load-visual{min-height:210px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.wifi-icon{position:relative;width:120px;height:92px;margin-bottom:10px}
.wifi-arc{position:absolute;left:50%;transform:translateX(-50%);border-style:solid;border-color:#5b72da transparent transparent transparent;border-radius:50%}
.wifi-arc-1{width:112px;height:112px;top:4px;border-width:8px}
.wifi-arc-2{width:78px;height:78px;top:22px;border-width:8px}
.wifi-arc-3{width:44px;height:44px;top:40px;border-width:8px}
.wifi-icon i{position:absolute;left:50%;bottom:3px;transform:translateX(-50%);width:13px;height:13px;border-radius:50%;background:#5b72da}
.wifi-load-visual strong{font-size:25px;color:#343b45}
.wifi-load-visual span{margin-top:7px;font-size:13px;font-weight:800}
.load-meter{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.load-meter i{height:10px;border-radius:999px;background:#d5dae1;box-shadow:inset 2px 2px 4px rgba(163,177,198,.22),inset -2px -2px 4px rgba(255,255,255,.68)}
.load-meter i.active{box-shadow:none}
.load-low{color:#34a853!important}.load-mid{color:#f59e0b!important}.load-high{color:#ea4335!important}.load-unknown{color:#9aa0a6!important}
.load-meter i.active.load-low{background:#34a853}.load-meter i.active.load-mid{background:#f59e0b}.load-meter i.active.load-high{background:#ea4335}

@media(max-width:1100px){
  .device-visual-grid{grid-template-columns:1fr 1fr}
  .map-card{grid-column:1/-1}
}
@media(max-width:820px){
  .device-visual-grid{grid-template-columns:1fr;gap:16px}
  .map-card{grid-column:auto}
  .device-map{height:230px}
}


/* ===== 地区定位地图 V3：仅本地展示，不允许交互 ===== */
.fixed-region-map{
  position:relative;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:12px;
  overflow:hidden;
  pointer-events:none;
  user-select:none;
  background:
    radial-gradient(circle at 70% 20%,rgba(91,114,218,.10),transparent 34%),
    linear-gradient(145deg,#e4e9ef,#dce2e8);
}

.fixed-region-map::after{
  content:"";
  position:absolute;
  inset:10px;
  border-radius:14px;
  border:1px solid rgba(255,255,255,.58);
  box-shadow:inset 0 0 24px rgba(91,114,218,.05);
  pointer-events:none;
}

.fixed-region-map img{
  width:100%;
  height:100%;
  object-fit:contain;
  opacity:.72;
  filter:contrast(.9) saturate(.65);
  -webkit-user-drag:none;
  user-select:none;
}

.region-marker{
  position:absolute;
  width:14px;
  height:14px;
  border-radius:50%;
  transform:translate(-50%,-50%);
  background:#4f7df3;
  border:4px solid rgba(255,255,255,.95);
  box-shadow:0 0 0 6px rgba(79,125,243,.13),0 5px 14px rgba(79,125,243,.32);
  z-index:3;
}

.region-marker-label{
  position:absolute;
  transform:translate(-50%,15px);
  max-width:160px;
  padding:6px 9px;
  border-radius:10px;
  background:rgba(235,239,245,.96);
  color:#394554;
  font-size:10px;
  font-weight:800;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
  box-shadow:-3px -3px 7px rgba(255,255,255,.78),3px 3px 8px rgba(132,146,166,.22);
  z-index:4;
}

.region-unavailable{
  position:absolute;
  left:50%;
  top:50%;
  transform:translate(-50%,-50%);
  z-index:5;
  padding:10px 15px;
  border-radius:14px;
  color:#7f8995;
  background:rgba(231,235,240,.94);
  font-size:14px;
  font-weight:800;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.74);
}


/* ===== V5 地图坐标缩放修复：定位点与 SVG 使用同一个 1000:850 坐标盒 ===== */
.fixed-region-map{
  padding:12px;
}

.region-map-stage{
  position:relative;
  height:100%;
  aspect-ratio:1000 / 850;
  max-width:100%;
  margin:auto;
  flex:0 1 auto;
}

.region-map-stage img{
  display:block;
  width:100%;
  height:100%;
  object-fit:fill;
  opacity:.72;
  filter:contrast(.9) saturate(.65);
  -webkit-user-drag:none;
  user-select:none;
  pointer-events:none;
}

/* Override the old image rule so the image no longer stretches across the wide card. */
.fixed-region-map > img{
  display:none;
}

.region-map-stage .region-marker,
.region-map-stage .region-marker-label{
  position:absolute;
}


/* ===== SIM 信息 V7：启用卡总览 + 运营商 ===== */
.sim-active-overview{
  display:flex;
  align-items:center;
  gap:18px;
  min-height:96px;
  padding:20px 24px;
  margin-bottom:22px;
}

.sim-active-overview.hidden{display:none}

.sim-active-icon{
  width:54px;
  height:54px;
  flex:0 0 54px;
  display:grid;
  place-items:center;
  border-radius:17px;
  background:#e8ebef;
  box-shadow:
    -5px -5px 10px rgba(255,255,255,.78),
    5px 5px 10px rgba(163,177,198,.24);
}

.sim-active-icon span{
  position:relative;
  width:22px;
  height:30px;
  border:2px solid #7b8795;
  border-radius:4px;
}

.sim-active-icon span::before{
  content:"";
  position:absolute;
  width:8px;
  height:7px;
  right:-2px;
  top:-2px;
  background:#e8ebef;
  border-left:2px solid #7b8795;
  border-bottom:2px solid #7b8795;
}

.sim-active-main{
  min-width:0;
  flex:1;
}

.sim-active-main small{
  display:block;
  color:#929ca8;
  font-size:11px;
  margin-bottom:5px;
}

.sim-active-main strong{
  display:block;
  color:#343b45;
  font-size:21px;
  line-height:1.25;
}

.sim-active-main span{
  display:block;
  margin-top:7px;
  color:#7d8793;
  font-size:12px;
}

.sim-active-overview.is-active .sim-active-icon span{
  border-color:#34a853;
}

.sim-active-overview.is-active .sim-active-icon span::before{
  border-color:#34a853;
}

.sim-active-overview.is-active .sim-active-icon{
  box-shadow:
    inset 0 0 0 1px rgba(52,168,83,.08),
    -5px -5px 10px rgba(255,255,255,.78),
    5px 5px 10px rgba(163,177,198,.24);
}

.sim-card-active{
  box-shadow:
    inset 0 0 0 1px rgba(52,168,83,.16),
    -8px -8px 18px rgba(255,255,255,.74),
    8px 8px 18px rgba(163,177,198,.20);
}

.sim-operator-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  margin:18px 0;
  padding:13px 15px;
  border-radius:14px;
  background:#e1e5ea;
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.18),
    inset -2px -2px 5px rgba(255,255,255,.72);
}

.sim-operator-row span{
  color:#89939f;
  font-size:11px;
  font-weight:700;
}

.sim-operator-row strong{
  color:#45505d;
  font-size:14px;
  text-align:right;
}

@media(max-width:820px){
  .sim-active-overview{
    align-items:flex-start;
    padding:18px;
  }

  .sim-active-main strong{font-size:18px}

  .sim-active-overview > .status-pill{
    margin-left:auto;
  }
}

@media(max-width:520px){
  .sim-active-overview{
    display:grid;
    grid-template-columns:auto 1fr;
  }

  .sim-active-overview > .status-pill{
    grid-column:2;
    justify-self:start;
    margin-left:0;
  }
}


/* ===== 套餐有效期圆环 V8：原地替换“套餐数量分布” ===== */
.package-validity-wrap{
  position:relative;
}

.package-validity-center{
  position:absolute;
  left:50%;
  top:50%;
  transform:translate(-50%,-50%);
  width:150px;
  text-align:center;
  pointer-events:none;
}

.package-validity-center strong{
  display:block;
  color:#3f4854;
  font-size:30px;
  line-height:1.1;
  font-weight:800;
}

.package-validity-center span{
  display:block;
  margin-top:7px;
  color:#8a94a0;
  font-size:12px;
  font-weight:700;
}

.package-validity-summary{
  margin-top:4px;
  text-align:center;
  color:#737e8a;
  font-size:13px;
  font-weight:700;
}


/* ===== 套餐有效期圆环 V10：恢复圆环 + 缩小尺寸 + 拉开底部间距 ===== */
.package-validity-wrap{
  position:relative;
  width:100%;
  max-width:340px;
  height:260px !important;
  margin:8px auto 0;
}

.package-validity-wrap canvas{
  display:block !important;
  width:100% !important;
  height:100% !important;
}

.package-validity-center{
  width:130px;
}

.package-validity-center strong{
  font-size:27px;
}

.package-validity-summary{
  margin-top:24px;
  padding-bottom:6px;
}

@media(max-width:820px){
  .package-validity-wrap{
    max-width:300px;
    height:230px !important;
    margin-top:6px;
  }

  .package-validity-center{
    width:120px;
  }

  .package-validity-center strong{
    font-size:25px;
  }

  .package-validity-summary{
    margin-top:20px;
  }
}


/* ===== V12 设备状态总结：可拖拽悬浮按钮 ===== */
.device-summary-float{
  position:fixed;
  right:24px;
  bottom:24px;
  z-index:1200;
  width:64px;
  height:64px;
  border:0;
  border-radius:21px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:2px;
  cursor:grab;
  touch-action:none;
  user-select:none;
  color:#fff;
  background:linear-gradient(145deg,#5b8df6,#7158e6);
  box-shadow:
    -5px -5px 12px rgba(255,255,255,.72),
    8px 8px 18px rgba(83,101,136,.28);
  transition:transform .18s ease, box-shadow .18s ease;
}

.device-summary-float:hover{
  transform:translateY(-2px);
}

.device-summary-float.is-dragging{
  cursor:grabbing;
  transform:scale(.97);
  box-shadow:4px 6px 12px rgba(83,101,136,.30);
}

.device-summary-float-icon{
  font-size:20px;
  line-height:1;
  font-weight:800;
}

.device-summary-float-text{
  font-size:10px;
  font-weight:800;
  letter-spacing:.08em;
}

.device-summary-modal{
  position:fixed;
  inset:0;
  z-index:1300;
  display:grid;
  place-items:center;
  padding:24px;
}

.device-summary-modal.hidden{
  display:none;
}

.device-summary-backdrop{
  position:absolute;
  inset:0;
  background:rgba(55,65,81,.30);
  backdrop-filter:blur(7px);
  -webkit-backdrop-filter:blur(7px);
}

.device-summary-panel{
  position:relative;
  z-index:1;
  width:min(720px, calc(100vw - 32px));
  max-height:calc(100vh - 48px);
  overflow:auto;
  padding:28px;
  border-radius:26px;
}

.device-summary-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:20px;
  padding-bottom:20px;
  margin-bottom:18px;
  border-bottom:1px solid rgba(255,255,255,.72);
}

.device-summary-head h2{
  margin:5px 0 4px;
  color:#343b45;
  font-size:28px;
}

.device-summary-head p{
  margin:0;
  color:#8a95a1;
  font-size:13px;
  font-weight:700;
}

.device-summary-close{
  width:44px;
  height:44px;
  flex:0 0 44px;
  border:0;
  border-radius:14px;
  color:#697482;
  background:#e5e9ee;
  font-size:27px;
  line-height:1;
  cursor:pointer;
  box-shadow:
    -4px -4px 9px rgba(255,255,255,.78),
    4px 4px 9px rgba(163,177,198,.24);
}

.device-summary-close:active{
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.25),
    inset -2px -2px 5px rgba(255,255,255,.80);
}

.device-summary-empty{
  min-height:220px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:8px;
  text-align:center;
  color:#8994a0;
}

.device-summary-empty strong{
  color:#46505c;
  font-size:20px;
}

.device-summary-content{
  display:grid;
  gap:14px;
}

.device-summary-content.hidden{
  display:none;
}

.device-summary-item{
  display:grid;
  grid-template-columns:54px minmax(0,1fr) auto;
  align-items:center;
  gap:16px;
  min-height:100px;
  padding:18px;
  border-radius:19px;
  background:#e3e7ec;
  box-shadow:
    inset 1px 1px 0 rgba(255,255,255,.68),
    -5px -5px 11px rgba(255,255,255,.68),
    5px 5px 12px rgba(163,177,198,.20);
}

.summary-index{
  width:48px;
  height:48px;
  display:grid;
  place-items:center;
  border-radius:15px;
  color:#5579dc;
  font-size:12px;
  font-weight:900;
  letter-spacing:.06em;
  background:#e7ebf0;
  box-shadow:
    -4px -4px 9px rgba(255,255,255,.76),
    4px 4px 9px rgba(163,177,198,.22);
}

.summary-copy{
  min-width:0;
}

.summary-copy small{
  display:block;
  margin-bottom:5px;
  color:#929ca8;
  font-size:11px;
  font-weight:700;
}

.summary-copy strong{
  display:block;
  color:#3d4652;
  font-size:16px;
  line-height:1.45;
  word-break:break-word;
}

.summary-copy span{
  display:block;
  margin-top:5px;
  color:#7f8995;
  font-size:12px;
  line-height:1.5;
  word-break:break-word;
}

@media(max-width:720px){
  .device-summary-float{
    right:16px;
    bottom:84px;
    width:58px;
    height:58px;
    border-radius:19px;
  }

  .device-summary-modal{
    padding:14px;
  }

  .device-summary-panel{
    width:100%;
    max-height:calc(100vh - 28px);
    padding:20px 16px;
    border-radius:22px;
  }

  .device-summary-head h2{
    font-size:23px;
  }

  .device-summary-item{
    grid-template-columns:46px minmax(0,1fr);
    align-items:start;
    gap:13px;
  }

  .device-summary-item > .status-pill{
    grid-column:2;
    justify-self:start;
  }

  .summary-index{
    width:42px;
    height:42px;
  }
}


/* ===== V13 设备状态总结：弹窗阴影修复 ===== */
.device-summary-backdrop{
  background:rgba(55,65,81,.24) !important;
  backdrop-filter:blur(3px) !important;
  -webkit-backdrop-filter:blur(3px) !important;
}

.device-summary-panel{
  box-shadow:
    0 16px 38px rgba(70,80,100,.16),
    0 4px 12px rgba(70,80,100,.08) !important;
}

/* 避免 soft-card 原有的双向 Neumorphism 阴影继续叠加 */
.device-summary-panel.soft-card{
  box-shadow:
    0 16px 38px rgba(70,80,100,.16),
    0 4px 12px rgba(70,80,100,.08) !important;
}

/* ===== V15 登录 / 用户管理 / 黑名单 ===== */
/* 鉴权未完成/未登录时主应用不参与布局，避免 iOS Safari 仍为隐藏页面生成滚动区域 */
.auth-pending{display:none!important;}
/* 手机底部导航首帧默认锁定；只有鉴权成功后由 JS 明确解锁 */
.mobile-nav.auth-nav-hidden{display:none!important;}
.login-gate{position:fixed;inset:0;z-index:3000;display:grid;place-items:center;padding:24px;background:#e4e7eb;}
.login-gate.hidden{display:none;}
.login-card{width:min(430px,calc(100vw - 32px));padding:30px;border-radius:26px;}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:28px;}
.login-brand>div{display:flex;flex-direction:column;gap:2px;}.login-brand b{font-size:20px;color:#3c4043}.login-brand small{font-size:10px;letter-spacing:.16em;color:#8b949e;font-weight:800}
.login-title h1{margin:0 0 6px;font-size:28px;color:#343a43}.login-title p{margin:0 0 24px;color:#7b8591;font-size:13px}
#loginForm{display:grid;gap:16px}#loginForm label{display:grid;gap:7px;font-size:12px;font-weight:800;color:#69727e}
#loginForm input,.admin-form input{border:0;outline:0;background:#dde1e6;color:#3c4043;border-radius:14px;padding:13px 14px;box-shadow:inset 3px 3px 7px rgba(163,177,198,.28),inset -3px -3px 7px rgba(255,255,255,.78);font:inherit}
#loginBtn{height:46px;border:0;border-radius:14px;background:linear-gradient(145deg,#5b8df6,#7158e6);color:#fff;font-weight:800;cursor:pointer;box-shadow:5px 5px 12px rgba(83,101,136,.24),-4px -4px 10px rgba(255,255,255,.68)}
#loginBtn:disabled{opacity:.6;cursor:not-allowed}.login-message{padding:10px 12px;border-radius:12px;background:rgba(234,67,53,.09);color:#c53d32;font-size:12px;font-weight:700}.login-foot{text-align:center;color:#98a1ab;font-size:11px;margin:18px 0 0}
.topbar-actions{display:flex;align-items:center;gap:14px}.top-user-box{display:flex;align-items:center;gap:10px;padding-left:14px;border-left:1px solid rgba(120,130,145,.14)}.top-user-box>div{display:flex;flex-direction:column;min-width:80px}.top-user-box small{color:#9aa0a6;font-size:10px}.top-user-box b{color:#49515b;font-size:13px}.top-logout{border:0;border-radius:10px;padding:7px 10px;background:#e4e7eb;color:#6e7782;font-weight:700;cursor:pointer;box-shadow:-3px -3px 7px rgba(255,255,255,.72),3px 3px 7px rgba(163,177,198,.2)}
.admin-grid{display:grid;grid-template-columns:1fr;gap:20px}.admin-card{padding:22px;border-radius:22px}.admin-wide{grid-column:1/-1}.admin-form{margin:16px 0 20px}.admin-form-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.admin-form-row.two{grid-template-columns:1fr 1fr}.admin-form label{display:grid;gap:6px;color:#747e89;font-size:11px;font-weight:800}.admin-form-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;color:#8b949f;font-size:11px}.admin-table-wrap{width:100%;overflow:auto;border-radius:15px}.admin-table{width:100%;border-collapse:collapse;min-width:850px}.admin-table th,.admin-table td{padding:12px 10px;text-align:left;border-bottom:1px solid rgba(120,130,145,.10);font-size:12px;color:#56606b;vertical-align:middle}.admin-table th{font-size:10px;letter-spacing:.04em;color:#9099a3;text-transform:uppercase}.admin-table td strong{display:block;color:#3f4853;font-size:12px}.admin-table td small{display:block;margin-top:3px;color:#929ba5}.admin-actions{display:flex;gap:6px;flex-wrap:wrap}.admin-mini-btn{border:0;border-radius:9px;padding:6px 9px;background:#e4e7eb;color:#5e6874;font-size:11px;font-weight:700;cursor:pointer;box-shadow:-2px -2px 5px rgba(255,255,255,.72),2px 2px 5px rgba(163,177,198,.18)}.admin-mini-btn.danger{color:#d54a40}.admin-mini-btn.good{color:#2f9451}.admin-empty{text-align:center!important;padding:24px!important;color:#98a1ab!important}.admin-role-chip{display:inline-flex;align-items:center;border-radius:999px;padding:4px 8px;background:rgba(66,133,244,.10);color:#4285f4;font-size:10px;font-weight:800}.admin-role-chip.root{background:rgba(113,88,230,.11);color:#7158e6}.admin-role-chip.level1{background:rgba(66,133,244,.10);color:#4285f4}.admin-role-chip.level2{background:rgba(120,130,145,.10);color:#737d87}
@media(max-width:980px){.admin-form-row{grid-template-columns:1fr 1fr}.top-user-box #topUserTag{display:none!important}}
@media(max-width:720px){.topbar-actions{gap:7px}.top-user-box{padding-left:8px}.top-user-box>div{display:none}.top-query-status{min-width:auto}.admin-card{padding:16px}.admin-form-row,.admin-form-row.two{grid-template-columns:1fr}.admin-form-actions{align-items:flex-end;flex-direction:column}.mobile-nav{grid-template-columns:repeat(5,1fr)}}


/* ===== V16 分级功能权限 ===== */
.permission-summary{white-space:nowrap;color:#66717d!important;font-weight:800}
.permission-modal{position:fixed;inset:0;z-index:3400;display:grid;place-items:center;padding:22px}
.permission-modal.hidden{display:none}
.permission-backdrop{position:absolute;inset:0;background:rgba(55,65,81,.24);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
.permission-panel{position:relative;z-index:1;width:min(620px,calc(100vw - 28px));max-height:calc(100vh - 44px);overflow:auto;padding:26px;border-radius:24px;box-shadow:0 16px 38px rgba(70,80,100,.16),0 4px 12px rgba(70,80,100,.08)!important}
.permission-head{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;margin-bottom:18px;padding-bottom:17px;border-bottom:1px solid rgba(255,255,255,.72)}
.permission-head h2{margin:5px 0 4px;font-size:25px;color:#343b45}.permission-head p{margin:0;color:#8b95a0;font-size:12px;font-weight:700}
.permission-list{display:grid;gap:11px}.permission-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:18px;padding:15px 16px;border-radius:17px;background:#e2e6eb;box-shadow:-4px -4px 9px rgba(255,255,255,.70),4px 4px 9px rgba(163,177,198,.18);cursor:pointer}
.permission-row strong{display:block;color:#46505b;font-size:14px}.permission-row small{display:block;margin-top:4px;color:#8c96a1;font-size:11px;line-height:1.55}.permission-row.permission-unavailable{opacity:.56;cursor:not-allowed}
.permission-row>span{position:relative;width:48px;height:27px;flex:0 0 auto}.permission-row input{position:absolute;opacity:0;pointer-events:none}.permission-row i{position:absolute;inset:0;border-radius:999px;background:#cfd5dc;box-shadow:inset 2px 2px 5px rgba(120,132,150,.20),inset -2px -2px 5px rgba(255,255,255,.70);transition:.18s}.permission-row i:after{content:"";position:absolute;top:4px;left:4px;width:19px;height:19px;border-radius:50%;background:#eef1f4;box-shadow:1px 2px 5px rgba(100,112,130,.23);transition:.18s}.permission-row input:checked+i{background:linear-gradient(135deg,#5b94f5,#7158e6)}.permission-row input:checked+i:after{transform:translateX(21px)}.permission-row input:disabled+i{filter:grayscale(.5)}
.permission-hint{margin-top:15px;padding:11px 13px;border-radius:13px;background:rgba(66,133,244,.07);color:#65758b;font-size:11px;line-height:1.6}.permission-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
@media(max-width:720px){.permission-panel{padding:19px 15px}.permission-row{padding:13px}.permission-actions{display:grid;grid-template-columns:1fr 1fr}.permission-actions .soft-btn{width:100%}}

/* ===== V17 分级用户 / 临时用户 / 历史管理 ===== */
.admin-form select,.admin-form textarea,.modal-field input,.modal-field textarea{
  border:0;outline:0;background:#dde1e6;color:#3c4043;border-radius:14px;padding:13px 14px;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.28),inset -3px -3px 7px rgba(255,255,255,.78);font:inherit
}
.admin-create-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.admin-check-label{align-content:end}.admin-inline-check{min-height:43px;display:flex;align-items:center;gap:8px;padding:0 4px;color:#5f6974;font-size:12px}.admin-inline-check input{width:17px;height:17px}
.admin-tree-help{margin:-5px 0 12px;color:#8b95a0;font-size:11px}.admin-user-tree-table{min-width:1180px}
.user-tree-name{display:flex;align-items:center;gap:6px}.tree-toggle{width:24px;height:24px;border:0;border-radius:8px;background:#e4e7eb;color:#65717f;cursor:pointer;font-weight:900;box-shadow:-2px -2px 5px rgba(255,255,255,.72),2px 2px 5px rgba(163,177,198,.18)}.tree-toggle-spacer{width:24px;display:inline-block;flex:0 0 24px}
.user-tree-row.level-level2 td:first-child{background:rgba(66,133,244,.018)}.user-tree-row.level-level3 td:first-child{background:rgba(113,88,230,.018)}
.admin-role-chip.level3{background:rgba(52,168,83,.09);color:#2e8e48}.soft-chip.temp{background:rgba(251,188,4,.13);color:#a87900}
.admin-recent-heading{align-items:center}.admin-heading-actions{display:flex;gap:8px}.soft-btn.danger{color:#c7473f}.admin-history-filter{display:flex;align-items:end;gap:10px;flex-wrap:wrap;margin:12px 0 14px}.admin-history-filter label{display:grid;gap:5px;color:#7a8490;font-size:11px;font-weight:800}.admin-history-filter input{border:0;outline:0;background:#dde1e6;color:#3c4043;border-radius:12px;padding:10px 12px;box-shadow:inset 2px 2px 5px rgba(163,177,198,.25),inset -2px -2px 5px rgba(255,255,255,.75)}
.admin-history-stats{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px 0 14px;padding:12px 14px;border-radius:14px;background:rgba(66,133,244,.06);color:#647082;font-size:12px}.admin-history-stats strong{color:#44505d}.admin-history-stats span{padding:5px 9px;border-radius:999px;background:#e4e7eb;box-shadow:-2px -2px 5px rgba(255,255,255,.68),2px 2px 5px rgba(163,177,198,.16)}
.user-action-panel{width:min(560px,calc(100vw - 28px))}.user-action-body{display:grid;gap:13px}.modal-field{display:grid;gap:7px;color:#6f7984;font-size:12px;font-weight:800}.modal-field textarea{resize:vertical;min-height:96px}.modal-warning{padding:14px 15px;border-radius:14px;background:rgba(251,188,4,.08);color:#75612f;font-size:12px;line-height:1.7}.modal-warning.danger{background:rgba(234,67,53,.08);color:#a6433d}
.permission-actions .soft-btn.primary.danger{color:#fff;background:linear-gradient(135deg,#e15b52,#cc4138)}
@media(max-width:980px){.admin-create-grid{grid-template-columns:1fr 1fr}}
@media(max-width:720px){.admin-create-grid{grid-template-columns:1fr}.admin-history-filter{align-items:stretch;flex-direction:column}.admin-history-filter .soft-btn{width:100%}}


/* ===== V18 最近提交：每页7条 + Soft UI 日期选择 ===== */
.admin-history-filter{
  align-items:flex-end;
  gap:12px;
}

.history-date-field{
  display:grid;
  gap:7px;
}

.history-date-label{
  color:#7a8490;
  font-size:11px;
  font-weight:800;
  letter-spacing:.02em;
}

.history-date-selects{
  display:flex;
  align-items:center;
  gap:8px;
  padding:7px;
  border-radius:16px;
  background:#dde1e6;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.26),
    inset -3px -3px 7px rgba(255,255,255,.76);
}

.history-select-shell{
  position:relative;
  display:flex !important;
  grid-template-columns:none !important;
  align-items:center;
  gap:4px !important;
  min-width:92px;
  padding:0 11px;
  border-radius:12px;
  background:#e7eaee;
  color:#56616e !important;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.72),
    3px 3px 7px rgba(163,177,198,.18);
}

.history-select-shell:first-child{
  min-width:112px;
}

.history-select-shell select{
  appearance:none;
  -webkit-appearance:none;
  flex:1;
  min-width:0;
  height:42px;
  padding:0 19px 0 2px;
  border:0;
  outline:0;
  background:
    linear-gradient(45deg,transparent 50%,#6c7784 50%) calc(100% - 8px) 18px/5px 5px no-repeat,
    linear-gradient(135deg,#6c7784 50%,transparent 50%) calc(100% - 3px) 18px/5px 5px no-repeat;
  color:#3f4853;
  font:inherit;
  font-size:13px;
  font-weight:800;
  cursor:pointer;
}

.history-select-shell span{
  flex:0 0 auto;
  color:#8a949f;
  font-size:11px;
  font-weight:800;
}

.history-select-shell:focus-within{
  box-shadow:
    0 0 0 2px rgba(66,133,244,.15),
    -3px -3px 7px rgba(255,255,255,.72),
    3px 3px 7px rgba(163,177,198,.18);
}

.admin-pagination{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  margin-top:16px;
  padding:12px 14px;
  border-radius:16px;
  background:#e1e5ea;
  box-shadow:
    inset 1px 1px 0 rgba(255,255,255,.68),
    -4px -4px 9px rgba(255,255,255,.62),
    4px 4px 9px rgba(163,177,198,.16);
}

.admin-pagination.hidden{
  display:none;
}

.admin-page-info{
  color:#7d8895;
  font-size:11px;
  font-weight:800;
  white-space:nowrap;
}

.admin-page-buttons{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:7px;
  flex-wrap:wrap;
}

.admin-page-btn{
  min-width:34px;
  height:34px;
  padding:0 10px;
  border:0;
  border-radius:11px;
  background:#e5e8ec;
  color:#65717f;
  font-size:12px;
  font-weight:800;
  cursor:pointer;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.74),
    3px 3px 7px rgba(163,177,198,.19);
  transition:transform .15s ease,box-shadow .15s ease,color .15s ease;
}

.admin-page-btn:hover:not(:disabled){
  transform:translateY(-1px);
  color:#4269d8;
}

.admin-page-btn.active{
  color:#fff;
  background:linear-gradient(135deg,#5b94f5,#7158e6);
  box-shadow:0 5px 12px rgba(78,103,205,.20);
}

.admin-page-btn.nav{
  min-width:64px;
}

.admin-page-btn:disabled{
  opacity:.42;
  cursor:not-allowed;
  box-shadow:none;
}

.admin-page-ellipsis{
  min-width:20px;
  text-align:center;
  color:#909aa5;
  font-weight:900;
}

@media(max-width:820px){
  .admin-history-filter{
    align-items:stretch;
  }

  .history-date-selects{
    display:grid;
    grid-template-columns:1.15fr 1fr 1fr;
    width:100%;
  }

  .history-select-shell,
  .history-select-shell:first-child{
    min-width:0;
    width:100%;
  }

  .admin-pagination{
    align-items:flex-start;
    flex-direction:column;
  }

  .admin-page-buttons{
    justify-content:flex-start;
    width:100%;
  }
}

@media(max-width:520px){
  .history-date-selects{
    grid-template-columns:1fr;
  }

  .admin-page-btn{
    min-width:32px;
    height:32px;
    padding:0 8px;
  }
}


/* ===== V19 系统管理标题区协调：标题与操作保持同一行 ===== */

/* 仅调整这三个管理卡片，避免影响设备/SIM/套餐等其它页面 */
#adminQueueCard > .card-heading,
#adminRecentCard > .card-heading,
#adminBanHistoryCard > .card-heading{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:18px;
  width:100%;
  margin-bottom:18px;
}

#adminQueueCard > .card-heading > div:first-child,
#adminRecentCard > .card-heading > div:first-child,
#adminBanHistoryCard > .card-heading > div:first-child{
  min-width:0;
}

#adminQueueCard > .card-heading h3,
#adminRecentCard > .card-heading h3,
#adminBanHistoryCard > .card-heading h3{
  margin:6px 0 0;
}

/* 右侧操作采用统一的紧凑尺寸，不再像一个独立的大卡片 */
#adminRefreshBtn,
#recentClearBtn{
  flex:0 0 auto;
  min-height:40px;
  padding:0 16px;
  border-radius:12px;
  font-size:12px;
  line-height:1;
  white-space:nowrap;
}

#adminRecentCard .admin-heading-actions{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:8px;
  flex:0 0 auto;
}

/* “仅 Root / 一级用户可见”作为标题说明标签放在右侧，尺寸与操作按钮统一 */
#adminBanHistoryCard > .card-heading > .soft-chip{
  flex:0 0 auto;
  min-height:36px;
  display:inline-flex;
  align-items:center;
  padding:0 13px;
  border-radius:12px;
  font-size:11px;
  letter-spacing:.01em;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.68),
    3px 3px 7px rgba(163,177,198,.14);
}

/* 三个标题区域在视觉上使用一致的右侧间距 */
#adminQueueCard > .card-heading .soft-btn,
#adminRecentCard > .card-heading .soft-btn{
  margin:0;
}

/* 窄屏允许标题和操作自然换行，不挤压标题 */
@media(max-width:720px){
  #adminQueueCard > .card-heading,
  #adminRecentCard > .card-heading,
  #adminBanHistoryCard > .card-heading{
    align-items:flex-start;
    flex-wrap:wrap;
    gap:12px;
  }

  #adminQueueCard > .card-heading > :last-child,
  #adminRecentCard > .card-heading > :last-child,
  #adminBanHistoryCard > .card-heading > :last-child{
    margin-left:0;
  }
}


/* ===== V20 临时用户：Soft UI 开关 + 自定义有效期控件 ===== */

/* 旧版浏览器原生 checkbox / datetime-local 已不再作为视觉控件使用 */
.admin-temp-field,
.admin-expiry-field{
  display:grid;
  gap:8px;
  min-width:0;
}

.admin-temp-field{
  align-content:end;
}

.admin-field-title{
  color:#7a8490;
  font-size:11px;
  font-weight:800;
  letter-spacing:.02em;
}

/* 整个临时用户开关是一块 Soft UI 凹槽 */
.admin-temp-switch{
  min-height:52px;
  display:flex;
  align-items:center;
  gap:11px;
  padding:0 14px;
  border-radius:15px;
  background:#dde1e6;
  cursor:pointer;
  user-select:none;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.26),
    inset -3px -3px 7px rgba(255,255,255,.76);
}

.admin-temp-switch input{
  position:absolute;
  width:1px !important;
  height:1px !important;
  opacity:0;
  pointer-events:none;
}

.admin-temp-switch-track{
  position:relative;
  flex:0 0 46px;
  width:46px;
  height:27px;
  border-radius:999px;
  background:#cfd5dc;
  box-shadow:
    inset 2px 2px 5px rgba(139,151,169,.26),
    inset -2px -2px 5px rgba(255,255,255,.72);
  transition:background .18s ease, box-shadow .18s ease;
}

.admin-temp-switch-track b{
  position:absolute;
  top:4px;
  left:4px;
  width:19px;
  height:19px;
  border-radius:50%;
  background:#f0f3f6;
  box-shadow:
    2px 2px 5px rgba(99,111,128,.20),
    -1px -1px 3px rgba(255,255,255,.86);
  transition:transform .18s ease;
}

.admin-temp-switch input:checked + .admin-temp-switch-track{
  background:linear-gradient(135deg,#5b94f5,#7158e6);
  box-shadow:
    inset 2px 2px 5px rgba(62,79,154,.20),
    0 0 0 3px rgba(91,148,245,.08);
}

.admin-temp-switch input:checked + .admin-temp-switch-track b{
  transform:translateX(19px);
}

.admin-temp-switch input:focus-visible + .admin-temp-switch-track{
  outline:2px solid rgba(66,133,244,.32);
  outline-offset:3px;
}

.admin-temp-switch-text{
  color:#56616e;
  font-size:13px;
  font-weight:800;
}

/* 截止时间区域横跨两格，为五段时间选择保留空间 */
.admin-expiry-field{
  grid-column:span 2;
}

.admin-expiry-field.hidden{
  display:none;
}

.admin-expiry-selects{
  display:grid;
  grid-template-columns:1.2fr .9fr .9fr .9fr .9fr;
  gap:7px;
  padding:7px;
  border-radius:16px;
  background:#dde1e6;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.26),
    inset -3px -3px 7px rgba(255,255,255,.76);
}

.admin-expiry-select{
  min-width:0;
  display:flex !important;
  grid-template-columns:none !important;
  align-items:center;
  gap:3px !important;
  padding:0 9px;
  border-radius:12px;
  background:#e7eaee;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.72),
    3px 3px 7px rgba(163,177,198,.17);
}

.admin-expiry-select select{
  appearance:none;
  -webkit-appearance:none;
  flex:1;
  min-width:0;
  height:40px;
  padding:0 18px 0 1px;
  border:0 !important;
  outline:0;
  border-radius:0 !important;
  background:
    linear-gradient(45deg,transparent 50%,#707b87 50%) calc(100% - 7px) 17px/5px 5px no-repeat,
    linear-gradient(135deg,#707b87 50%,transparent 50%) calc(100% - 2px) 17px/5px 5px no-repeat !important;
  box-shadow:none !important;
  color:#3f4853;
  font:inherit;
  font-size:12px;
  font-weight:800;
  cursor:pointer;
}

.admin-expiry-select > span{
  flex:0 0 auto;
  color:#8a949f;
  font-size:10px;
  font-weight:800;
}

.admin-expiry-select:focus-within{
  box-shadow:
    0 0 0 2px rgba(66,133,244,.14),
    -3px -3px 7px rgba(255,255,255,.72),
    3px 3px 7px rgba(163,177,198,.17);
}

.admin-expiry-hint{
  color:#98a1ab;
  font-size:10px;
  font-weight:700;
  line-height:1.5;
}

/* 覆盖 V17 对表单 select 的通用大输入框样式 */
.admin-form .admin-expiry-select select{
  padding-top:0;
  padding-bottom:0;
}

@media(max-width:1100px){
  .admin-expiry-field{
    grid-column:1 / -1;
  }
}

@media(max-width:720px){
  .admin-expiry-selects{
    grid-template-columns:1.25fr 1fr 1fr;
  }

  .admin-expiry-select:nth-child(4),
  .admin-expiry-select:nth-child(5){
    grid-column:auto;
  }
}

@media(max-width:520px){
  .admin-expiry-selects{
    grid-template-columns:1fr 1fr;
  }

  .admin-expiry-select:first-child{
    grid-column:1 / -1;
  }
}


/* ===== V21 临时账户有效期：弹窗式 Soft UI ===== */

/* 创建用户表单里只保留开关 + 简洁摘要，不再横向铺日期控件 */
#adminTempField.admin-temp-field{
  grid-column:span 2;
  display:grid;
  grid-template-columns:minmax(240px,.8fr) minmax(280px,1.2fr);
  align-items:end;
  gap:12px;
}

#adminTempField > .admin-field-title{
  grid-column:1 / -1;
}

#adminTempField .admin-temp-switch{
  width:100%;
}

.admin-expiry-summary{
  min-height:52px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  padding:9px 10px 9px 15px;
  border-radius:15px;
  background:#dde1e6;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.25),
    inset -3px -3px 7px rgba(255,255,255,.76);
}

.admin-expiry-summary.hidden{
  display:none;
}

.admin-expiry-summary > div{
  min-width:0;
  display:grid;
  gap:2px;
}

.admin-expiry-summary small{
  color:#98a1ab;
  font-size:9px;
  font-weight:800;
}

.admin-expiry-summary strong{
  color:#49535f;
  font-size:12px;
  font-weight:900;
}

.admin-expiry-summary span{
  overflow:hidden;
  color:#7f8995;
  font-size:10px;
  font-weight:700;
  white-space:nowrap;
  text-overflow:ellipsis;
}

.admin-expiry-edit{
  flex:0 0 auto;
  min-width:54px;
  height:34px;
  padding:0 12px;
  border:0;
  border-radius:10px;
  background:#e6e9ed;
  color:#5070d9;
  font-size:11px;
  font-weight:900;
  cursor:pointer;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.72),
    3px 3px 7px rgba(163,177,198,.18);
}

/* 弹窗本体 */
.expiry-modal{
  z-index:2200;
}

.expiry-panel{
  width:min(690px,calc(100vw - 30px));
  max-height:calc(100vh - 36px);
  overflow:auto;
  padding:26px;
  border-radius:26px;
}

.expiry-head{
  margin-bottom:18px;
}

.expiry-head p{
  max-width:520px;
}

/* 四种有效期模式 */
.expiry-mode-tabs{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:8px;
  padding:7px;
  margin-bottom:16px;
  border-radius:17px;
  background:#dce1e7;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.26),
    inset -3px -3px 7px rgba(255,255,255,.76);
}

.expiry-mode-tab{
  min-height:43px;
  padding:0 10px;
  border:0;
  border-radius:12px;
  background:transparent;
  color:#788390;
  font-size:11px;
  font-weight:900;
  cursor:pointer;
  transition:.16s ease;
}

.expiry-mode-tab:hover{
  color:#4d6bd2;
}

.expiry-mode-tab.active{
  background:#e8ebef;
  color:#4d6bd2;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.74),
    3px 3px 7px rgba(163,177,198,.18);
}

.expiry-pane.hidden{
  display:none;
}

.expiry-relative-card{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:18px;
  padding:17px;
  border-radius:18px;
  background:#e2e6eb;
  box-shadow:
    inset 1px 1px 0 rgba(255,255,255,.68),
    -4px -4px 9px rgba(255,255,255,.62),
    4px 4px 9px rgba(163,177,198,.15);
}

.expiry-relative-card > div:first-child{
  min-width:0;
  display:grid;
  gap:5px;
}

.expiry-relative-card small{
  color:#87919e;
  font-size:10px;
  font-weight:800;
}

.expiry-relative-card strong{
  color:#49535f;
  font-size:13px;
  line-height:1.5;
}

.expiry-stepper{
  flex:0 0 auto;
  display:flex;
  align-items:center;
  gap:7px;
  padding:6px;
  border-radius:14px;
  background:#d9dee5;
  box-shadow:
    inset 2px 2px 6px rgba(163,177,198,.23),
    inset -2px -2px 6px rgba(255,255,255,.74);
}

.expiry-stepper button{
  width:35px;
  height:35px;
  border:0;
  border-radius:10px;
  background:#e7eaee;
  color:#5574d8;
  font-size:18px;
  font-weight:900;
  cursor:pointer;
  box-shadow:
    -2px -2px 5px rgba(255,255,255,.76),
    2px 2px 5px rgba(163,177,198,.17);
}

.expiry-stepper input{
  width:76px;
  height:35px;
  padding:0 7px !important;
  border:0 !important;
  outline:0;
  border-radius:10px !important;
  background:#dce1e7 !important;
  color:#3f4853;
  text-align:center;
  font-size:14px;
  font-weight:900;
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.23) !important,
    inset -2px -2px 5px rgba(255,255,255,.72) !important;
  -moz-appearance:textfield;
}

.expiry-stepper input::-webkit-outer-spin-button,
.expiry-stepper input::-webkit-inner-spin-button{
  margin:0;
  -webkit-appearance:none;
}

.expiry-stepper span{
  min-width:34px;
  color:#7d8793;
  font-size:11px;
  font-weight:900;
  text-align:center;
}

.expiry-presets{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin-top:12px;
}

.expiry-preset{
  min-height:34px;
  padding:0 13px;
  border:0;
  border-radius:11px;
  background:#e5e8ec;
  color:#77828e;
  font-size:10px;
  font-weight:900;
  cursor:pointer;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.70),
    3px 3px 7px rgba(163,177,198,.16);
}

.expiry-preset.active{
  color:#fff;
  background:linear-gradient(135deg,#5b94f5,#7158e6);
  box-shadow:0 5px 13px rgba(74,100,205,.19);
}

/* 自定义截止日期 */
.expiry-custom-grid{
  display:grid;
  grid-template-columns:1.2fr repeat(4,1fr);
  gap:8px;
  padding:8px;
  border-radius:17px;
  background:#dce1e7;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.25),
    inset -3px -3px 7px rgba(255,255,255,.75);
}

.expiry-select-shell{
  min-width:0;
  display:grid;
  gap:4px;
  padding:8px 9px;
  border-radius:12px;
  background:#e7eaee;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.72),
    3px 3px 7px rgba(163,177,198,.17);
}

.expiry-select-shell > span{
  color:#929ca8;
  font-size:9px;
  font-weight:800;
}

.expiry-select-shell select{
  appearance:none;
  -webkit-appearance:none;
  width:100%;
  height:34px;
  padding:0 20px 0 1px !important;
  border:0 !important;
  outline:0;
  border-radius:0 !important;
  background:
    linear-gradient(45deg,transparent 50%,#707b87 50%) calc(100% - 7px) 14px/5px 5px no-repeat,
    linear-gradient(135deg,#707b87 50%,transparent 50%) calc(100% - 2px) 14px/5px 5px no-repeat !important;
  box-shadow:none !important;
  color:#414a55;
  font-size:12px;
  font-weight:900;
  cursor:pointer;
}

.expiry-preview{
  display:grid;
  gap:4px;
  margin-top:16px;
  padding:15px 17px;
  border-radius:16px;
  background:#dfe4ea;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.20),
    inset -3px -3px 7px rgba(255,255,255,.72);
}

.expiry-preview small{
  color:#909aa5;
  font-size:9px;
  font-weight:800;
}

.expiry-preview strong{
  color:#3f4954;
  font-size:15px;
  font-weight:900;
}

.expiry-preview span{
  color:#7d8793;
  font-size:10px;
  line-height:1.6;
  font-weight:700;
}

.expiry-actions{
  margin-top:17px;
}

@media(max-width:820px){
  #adminTempField.admin-temp-field{
    grid-column:1 / -1;
    grid-template-columns:1fr;
  }

  .expiry-mode-tabs{
    grid-template-columns:1fr 1fr;
  }

  .expiry-custom-grid{
    grid-template-columns:1.2fr 1fr 1fr;
  }

  .expiry-custom-grid .expiry-select-shell:nth-child(4),
  .expiry-custom-grid .expiry-select-shell:nth-child(5){
    grid-column:auto;
  }
}

@media(max-width:560px){
  .expiry-panel{
    padding:20px 15px;
  }

  .expiry-mode-tabs{
    grid-template-columns:1fr 1fr;
  }

  .expiry-relative-card{
    align-items:stretch;
    flex-direction:column;
  }

  .expiry-stepper{
    align-self:flex-start;
  }

  .expiry-custom-grid{
    grid-template-columns:1fr 1fr;
  }

  .expiry-custom-grid .expiry-select-shell:first-child{
    grid-column:1 / -1;
  }
}


/* ===== V22 临时用户开关热修复 =====
   原因：.admin-form label 的 display:grid 覆盖了 V21 开关的 flex，
   导致开关和“启用有效期”上下错位；同时改为按钮触发，确保点击必定弹窗。 */

.admin-temp-native{
  position:absolute !important;
  width:1px !important;
  height:1px !important;
  opacity:0 !important;
  pointer-events:none !important;
}

.admin-form #adminTempToggle.admin-temp-switch{
  width:100%;
  min-height:52px;
  display:flex !important;
  grid-template-columns:none !important;
  align-items:center !important;
  justify-content:flex-start !important;
  gap:11px !important;
  padding:0 14px !important;
  border:0 !important;
  border-radius:15px !important;
  background:#dde1e6 !important;
  color:#56616e !important;
  cursor:pointer;
  user-select:none;
  text-align:left;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.26),
    inset -3px -3px 7px rgba(255,255,255,.76) !important;
}

#adminTempToggle .admin-temp-switch-track{
  flex:0 0 46px;
}

#adminTempToggle.is-on .admin-temp-switch-track{
  background:linear-gradient(135deg,#5b94f5,#7158e6);
  box-shadow:
    inset 2px 2px 5px rgba(62,79,154,.20),
    0 0 0 3px rgba(91,148,245,.08);
}

#adminTempToggle.is-on .admin-temp-switch-track b{
  transform:translateX(19px);
}

#adminTempToggle:focus-visible{
  outline:2px solid rgba(66,133,244,.35);
  outline-offset:3px;
}

#adminTempToggle .admin-temp-switch-text{
  display:block !important;
  margin:0 !important;
  color:#56616e !important;
  font-size:13px !important;
  font-weight:800 !important;
  line-height:1 !important;
}

/* 保证有效期弹窗永远压在系统管理与其它浮层之上 */
.permission-modal.expiry-modal{
  z-index:3600 !important;
}


/* ===== V23 临时用户：表单字段式状态控件 ===== */
#adminTempField.admin-temp-field{
  grid-column:auto !important;
  display:grid !important;
  grid-template-columns:1fr !important;
  align-content:initial !important;
  align-items:initial !important;
  gap:6px !important;
  min-width:0;
}
#adminTempField > .admin-field-title{
  grid-column:auto !important;
  color:#747e89;
  font-size:11px;
  font-weight:800;
  letter-spacing:0;
}
.admin-form #adminTempControl.admin-temp-control{
  min-width:0;
  height:52px;
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  align-items:stretch;
  gap:7px;
  padding:0;
  border-radius:15px;
  background:#dde1e6;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.26),inset -3px -3px 7px rgba(255,255,255,.76);
  transition:box-shadow .18s ease,background .18s ease;
}
.admin-form #adminTempControl.admin-temp-control.is-on{
  background:#dfe4ea;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.22),inset -3px -3px 7px rgba(255,255,255,.78),0 0 0 1px rgba(91,125,228,.05);
}
.admin-form #adminTempToggle.admin-temp-main{
  min-width:0;
  height:52px;
  display:flex !important;
  align-items:center !important;
  justify-content:space-between !important;
  gap:12px !important;
  padding:0 13px 0 15px !important;
  border:0 !important;
  border-radius:15px !important;
  background:transparent !important;
  box-shadow:none !important;
  color:#56616e !important;
  cursor:pointer;
  text-align:left;
}
.admin-temp-copy{min-width:0;display:grid;gap:2px;}
.admin-temp-copy strong{color:#56616e;font-size:13px;font-weight:800;line-height:1.25;}
.admin-temp-copy small{overflow:hidden;color:#98a1ab;font-size:9px;font-weight:700;line-height:1.25;white-space:nowrap;text-overflow:ellipsis;}
#adminTempToggle.is-on .admin-temp-copy strong{color:#4c67c9;}
#adminTempToggle .admin-temp-switch-track{position:relative;flex:0 0 42px;width:42px;height:24px;border-radius:999px;background:#cfd5dc;box-shadow:inset 2px 2px 5px rgba(139,151,169,.24),inset -2px -2px 5px rgba(255,255,255,.72);}
#adminTempToggle .admin-temp-switch-track b{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#f2f4f7;box-shadow:2px 2px 5px rgba(99,111,128,.18),-1px -1px 3px rgba(255,255,255,.88);transition:transform .18s ease;}
#adminTempToggle.is-on .admin-temp-switch-track{background:linear-gradient(135deg,#5b94f5,#7158e6);}
#adminTempToggle.is-on .admin-temp-switch-track b{transform:translateX(18px);}
.admin-form #adminTempControl .admin-expiry-edit{align-self:center;flex:0 0 auto;min-width:48px;height:32px;margin-right:9px;padding:0 10px;border:0;border-radius:10px;background:#e7eaee;color:#5070d9;font-size:10px;font-weight:900;cursor:pointer;box-shadow:-2px -2px 5px rgba(255,255,255,.72),2px 2px 5px rgba(163,177,198,.16);}
.admin-form #adminTempControl .admin-expiry-edit.hidden{display:none;}
#adminTempToggle:focus-visible,#adminExpiryEdit:focus-visible{outline:2px solid rgba(66,133,244,.32);outline-offset:2px;}
#adminExpirySummary{display:none !important;}
@media(max-width:980px){#adminTempField.admin-temp-field{grid-column:auto !important;}}
@media(max-width:720px){#adminTempField.admin-temp-field{grid-column:1 / -1 !important;}}


/* ===== V24 用户层级 / 所属上级：自定义 Soft UI 下拉 ===== */
.admin-native-select-proxy,.admin-temp-native{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important;overflow:hidden!important;}
.admin-soft-select-field{position:relative;min-width:0;display:grid;gap:6px;}
.admin-soft-select-label{color:#747e89;font-size:11px;font-weight:800;line-height:1.25;}
.admin-soft-select{position:relative;min-width:0;}
.admin-soft-select-button{width:100%;min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 15px;border:0;border-radius:15px;background:#dde1e6;color:#505b67;cursor:pointer;text-align:left;box-shadow:inset 3px 3px 7px rgba(163,177,198,.26),inset -3px -3px 7px rgba(255,255,255,.76);transition:box-shadow .16s ease,background .16s ease;}
.admin-soft-select-button:hover:not(:disabled),.admin-soft-select.is-open .admin-soft-select-button{background:#dfe4ea;box-shadow:inset 3px 3px 7px rgba(163,177,198,.22),inset -3px -3px 7px rgba(255,255,255,.80),0 0 0 2px rgba(76,105,210,.08);}
.admin-soft-select-button:disabled{opacity:.58;cursor:not-allowed;}
.admin-soft-select-copy{min-width:0;display:grid;gap:2px;}
.admin-soft-select-copy strong{overflow:hidden;color:#4d5763;font-size:13px;font-weight:850;line-height:1.25;white-space:nowrap;text-overflow:ellipsis;}
.admin-soft-select-copy small{overflow:hidden;color:#98a1ab;font-size:9px;font-weight:700;line-height:1.25;white-space:nowrap;text-overflow:ellipsis;}
.admin-soft-select-chevron{position:relative;flex:0 0 18px;width:18px;height:18px;}
.admin-soft-select-chevron::before,.admin-soft-select-chevron::after{content:"";position:absolute;top:8px;width:7px;height:2px;border-radius:2px;background:#7b8692;transition:transform .16s ease;}
.admin-soft-select-chevron::before{left:2px;transform:rotate(45deg)} .admin-soft-select-chevron::after{right:2px;transform:rotate(-45deg)}
.admin-soft-select.is-open .admin-soft-select-chevron::before{transform:rotate(-45deg)} .admin-soft-select.is-open .admin-soft-select-chevron::after{transform:rotate(45deg)}
.admin-soft-select-menu{position:absolute;z-index:3300;top:calc(100% + 8px);left:0;right:0;display:grid;gap:6px;max-height:310px;overflow:auto;padding:8px;border:1px solid rgba(255,255,255,.70);border-radius:16px;background:#e3e7ec;box-shadow:0 18px 38px rgba(70,80,100,.16),-5px -5px 12px rgba(255,255,255,.48);}
.admin-soft-select-menu.hidden{display:none;}
.admin-soft-select-option{width:100%;min-height:48px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 11px 8px 13px;border:0;border-radius:12px;background:transparent;color:#56616d;cursor:pointer;text-align:left;transition:background .14s ease,box-shadow .14s ease,transform .14s ease;}
.admin-soft-select-option:hover{background:#e9ecf0;box-shadow:-2px -2px 5px rgba(255,255,255,.70),2px 2px 5px rgba(163,177,198,.14);}
.admin-soft-select-option.active{background:linear-gradient(135deg,rgba(91,148,245,.14),rgba(113,88,230,.11));box-shadow:inset 0 0 0 1px rgba(82,108,211,.10),-2px -2px 5px rgba(255,255,255,.66),2px 2px 5px rgba(163,177,198,.12);}
.admin-soft-select-option>span{min-width:0;display:grid;gap:3px}.admin-soft-select-option strong{color:#4d5763;font-size:12px;font-weight:900}.admin-soft-select-option small{color:#909aa5;font-size:9px;font-weight:700}
.admin-soft-select-option>i{position:relative;flex:0 0 18px;width:18px;height:18px;border-radius:50%;background:#d7dce2;box-shadow:inset 1px 1px 3px rgba(163,177,198,.22),inset -1px -1px 3px rgba(255,255,255,.72)}
.admin-soft-select-option.active>i{background:linear-gradient(135deg,#5b94f5,#7158e6);box-shadow:0 3px 8px rgba(82,105,203,.20)}
.admin-soft-select-option.active>i::after{content:"";position:absolute;left:6px;top:4px;width:4px;height:7px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
.admin-soft-select-empty{padding:15px 12px;color:#969faa;font-size:10px;font-weight:800;text-align:center;}
#adminRoleSelectText,#adminRoleSelectMeta{transition:color .15s ease} #adminRoleSelect.is-open #adminRoleSelectText{color:#4f6dd2}
#adminTempField,#adminTempControl,#adminExpirySummary{display:none!important;}
@media(max-width:720px){.admin-soft-select-menu{position:fixed;z-index:3700;top:auto;left:14px;right:14px;bottom:18px;max-height:min(56vh,420px);border-radius:20px;padding:10px}.admin-soft-select-option{min-height:52px}}


/* ===== V25 用户层级：已选择状态改为单行 ===== */
/* 只作用于收起后的用户层级显示，不修改展开菜单 */
#adminRoleSelectButton .admin-soft-select-copy{
  display:flex !important;
  align-items:center;
  gap:8px;
}

#adminRoleSelectButton .admin-soft-select-copy strong{
  flex:0 0 auto;
}

#adminRoleSelectButton .admin-soft-select-copy small{
  display:inline-flex;
  align-items:center;
  flex:0 1 auto;
  color:#929ca8;
  font-size:10px;
}

#adminRoleSelectButton .admin-soft-select-copy small::before{
  content:"·";
  margin-right:8px;
  color:#a0a8b2;
  font-weight:900;
}

/* 所属上级保持 V24 原来的两行展示，不受本次修改影响 */


/* ===== V26 用户层级 / 所属上级：输入框尺寸统一 ===== */
/* 与“账户 / 密码 / 标签”等普通表单框保持同高、同圆角、同内阴影。 */
.admin-form .admin-soft-select-button{
  min-height:43px !important;
  height:43px !important;
  padding:0 14px !important;
  border-radius:14px !important;
  background:#dde1e6 !important;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.28),
    inset -3px -3px 7px rgba(255,255,255,.78) !important;
}

/* V25 已经改为单行，这里让文字在较矮的框里真正垂直居中。 */
#adminRoleSelectButton .admin-soft-select-copy{
  height:43px;
  align-items:center !important;
}

#adminRoleSelectButton .admin-soft-select-copy strong,
#adminRoleSelectButton .admin-soft-select-copy small{
  line-height:1 !important;
}

/* 所属上级仍保持两行文案，但外框尺寸和普通输入框一致。 */
#adminParentSelectButton .admin-soft-select-copy{
  justify-content:center;
  gap:1px;
}

/* 箭头也缩到与普通表单框协调的尺寸。 */
.admin-form .admin-soft-select-chevron{
  flex-basis:16px;
  width:16px;
  height:16px;
}

/* 展开的 Soft UI 菜单完全沿用 V24/V25，不修改选项布局。 */


/* ===== V27 系统管理：顶部 Tab 模块切换 ===== */
.admin-module-tabs{
  position:relative;
  display:flex;
  align-items:center;
  gap:8px;
  width:100%;
  margin:4px 0 18px;
  padding:7px;
  border-radius:20px;
  background:#dde2e8;
  box-shadow:
    inset 3px 3px 8px rgba(163,177,198,.24),
    inset -3px -3px 8px rgba(255,255,255,.76),
    0 1px 0 rgba(255,255,255,.56);
  overflow-x:auto;
  scrollbar-width:none;
  -webkit-overflow-scrolling:touch;
}

.admin-module-tabs::-webkit-scrollbar{display:none}

.admin-module-tab{
  position:relative;
  flex:0 0 auto;
  min-height:44px;
  padding:0 18px;
  border:0;
  border-radius:14px;
  background:transparent;
  color:#66727f;
  font-size:12px;
  font-weight:850;
  white-space:nowrap;
  cursor:pointer;
  transition:color .16s ease,background .16s ease,box-shadow .16s ease,transform .16s ease;
}

.admin-module-tab:hover:not(.active){
  color:#4f67bb;
  background:rgba(255,255,255,.28);
}

.admin-module-tab.active{
  color:#5575dc;
  background:#e8ebef;
  box-shadow:
    -4px -4px 9px rgba(255,255,255,.70),
    4px 4px 9px rgba(163,177,198,.17),
    inset 0 0 0 1px rgba(255,255,255,.34);
}

.admin-module-tab.active::after{
  content:"";
  position:absolute;
  left:22%;
  right:22%;
  bottom:5px;
  height:2px;
  border-radius:999px;
  background:linear-gradient(90deg,#5b94f5,#7158e6);
  opacity:.68;
}

.admin-module-tab:focus-visible{
  outline:2px solid rgba(66,133,244,.30);
  outline-offset:2px;
}

.admin-tab-grid{
  display:block !important;
  min-width:0;
}

.admin-tab-panel{
  width:100%;
  margin:0;
}

.admin-tab-panel:not(.active){
  display:none !important;
}

.admin-tab-panel.active:not(.hidden){
  display:block;
  animation:adminTabEnter .18s ease-out;
}

@keyframes adminTabEnter{
  from{opacity:.65;transform:translateY(4px)}
  to{opacity:1;transform:translateY(0)}
}

/* 单模块展示后，卡片本身不再需要为了“上下堆叠”留额外间距。 */
#adminView .admin-tab-panel{
  border-radius:22px;
}

@media(max-width:900px){
  .admin-module-tabs{
    gap:6px;
    padding:6px;
    border-radius:17px;
  }
  .admin-module-tab{
    min-height:41px;
    padding:0 14px;
    font-size:11px;
  }
}

@media(max-width:560px){
  .admin-module-tabs{
    margin-bottom:14px;
  }
  .admin-module-tab{
    min-height:39px;
    padding:0 12px;
    font-size:10px;
  }
}


/* ===== V28 系统管理 Tab：凹陷选中态 / 无底部指示条 =====
   只覆盖 V27 Tab 视觉，不修改 Tab 切换与权限逻辑。 */

#adminView .admin-module-tabs{
  position:relative;
  display:flex;
  align-items:center;
  gap:10px;
  width:100%;
  margin:4px 0 18px;
  padding:9px 10px;
  border:0;
  border-radius:20px;
  background:#dde2e8;
  box-shadow:
    inset 2px 2px 6px rgba(163,177,198,.18),
    inset -2px -2px 6px rgba(255,255,255,.64);
  overflow-x:auto;
  scrollbar-width:none;
  -webkit-overflow-scrolling:touch;
}

/* 普通 Tab：融入底板，不做独立凸起卡片 */
#adminView .admin-module-tab{
  position:relative;
  flex:0 0 auto;
  min-height:46px;
  padding:0 20px;
  border:0;
  border-radius:14px;
  background:transparent !important;
  box-shadow:none !important;
  color:#5f6d7a;
  font-size:12px;
  font-weight:850;
  line-height:1;
  white-space:nowrap;
  cursor:pointer;
  transform:none !important;
  transition:
    color .15s ease,
    background .15s ease,
    box-shadow .15s ease;
}

/* 未选中仅轻微变色，不产生浮起感 */
#adminView .admin-module-tab:hover:not(.active){
  color:#536fbf;
  background:rgba(255,255,255,.16) !important;
  box-shadow:none !important;
}

/* 选中态：真正的“按下去 / 凹进去” Soft UI */
#adminView .admin-module-tab.active{
  color:#5575dc !important;
  background:#dfe3e8 !important;
  box-shadow:
    inset 5px 5px 10px rgba(156,169,187,.28),
    inset -5px -5px 10px rgba(255,255,255,.78) !important;
  transform:none !important;
}

/* V27 的蓝紫底部指示条彻底移除 */
#adminView .admin-module-tab.active::after{
  content:none !important;
  display:none !important;
  width:0 !important;
  height:0 !important;
  background:none !important;
}

/* 不使用长条/下划线/伪元素作为选中标识 */
#adminView .admin-module-tab::before{
  content:none !important;
  display:none !important;
}

/* 键盘焦点仍保留，但不破坏凹陷视觉 */
#adminView .admin-module-tab:focus-visible{
  outline:2px solid rgba(66,133,244,.24);
  outline-offset:2px;
}

/* 移动端保持横向滑动，不把五个 Tab 挤成一团 */
@media(max-width:900px){
  #adminView .admin-module-tabs{
    gap:7px;
    padding:7px 8px;
    border-radius:17px;
  }

  #adminView .admin-module-tab{
    min-height:43px;
    padding:0 16px;
    font-size:11px;
  }
}

@media(max-width:560px){
  #adminView .admin-module-tabs{
    margin-bottom:14px;
  }

  #adminView .admin-module-tab{
    min-height:41px;
    padding:0 14px;
    font-size:10px;
  }
}


/* ===== V29 手机端：最近提交 / 查询历史日期区紧凑修复 =====
   只覆盖 #adminRecentCard 的移动端布局，桌面端与业务逻辑不变。 */

@media(max-width:720px){

  /* 表单改成明确的两列网格：
     第一行 = 日期区域；第二行 = 两个操作按钮。 */
  #adminRecentCard #recentDateForm.admin-history-filter{
    display:grid !important;
    grid-template-columns:minmax(0,1fr) minmax(0,1fr) !important;
    align-items:stretch !important;
    gap:10px !important;
    margin:12px 0 14px !important;
    width:100% !important;
  }

  #adminRecentCard #recentDateForm .history-date-field{
    grid-column:1 / -1 !important;
    display:grid !important;
    grid-template-columns:1fr !important;
    gap:7px !important;
    width:100% !important;
    min-width:0 !important;
  }

  #adminRecentCard #recentDateForm .history-date-label{
    display:block !important;
    margin:0 !important;
    color:#7a8490 !important;
    font-size:11px !important;
    font-weight:800 !important;
    line-height:1.35 !important;
  }

  /* 年 / 月 / 日始终同一行，不再被旧 520px 规则拆成三大块。 */
  #adminRecentCard #recentDateForm .history-date-selects{
    display:grid !important;
    grid-template-columns:minmax(0,1.35fr) minmax(0,.82fr) minmax(0,.82fr) !important;
    align-items:center !important;
    gap:6px !important;
    width:100% !important;
    min-width:0 !important;
    padding:6px !important;
    margin:0 !important;
    border-radius:15px !important;
    background:#dde1e6 !important;
    box-shadow:
      inset 3px 3px 7px rgba(163,177,198,.24),
      inset -3px -3px 7px rgba(255,255,255,.75) !important;
  }

  #adminRecentCard #recentDateForm .history-select-shell,
  #adminRecentCard #recentDateForm .history-select-shell:first-child{
    display:flex !important;
    align-items:center !important;
    gap:3px !important;
    width:100% !important;
    min-width:0 !important;
    min-height:44px !important;
    height:44px !important;
    margin:0 !important;
    padding:0 9px !important;
    border-radius:11px !important;
  }

  #adminRecentCard #recentDateForm .history-select-shell select{
    flex:1 1 auto !important;
    width:100% !important;
    min-width:0 !important;
    height:40px !important;
    padding:0 17px 0 1px !important;
    font-size:12px !important;
    line-height:40px !important;
  }

  #adminRecentCard #recentDateForm .history-select-shell span{
    flex:0 0 auto !important;
    font-size:10px !important;
    line-height:1 !important;
  }

  /* 查询 / 返回按钮并排，不再一按钮占一整行。 */
  #adminRecentCard #recentDateForm > .soft-btn{
    width:100% !important;
    min-width:0 !important;
    min-height:44px !important;
    height:44px !important;
    margin:0 !important;
    padding:0 10px !important;
    border-radius:13px !important;
    font-size:12px !important;
    line-height:1 !important;
  }

  /* 日期统计卡保持紧凑。 */
  #adminRecentCard .admin-history-stats{
    margin:10px 0 12px !important;
  }

  /* 分页在手机端保持紧凑，不让按钮撑爆宽度。 */
  #adminRecentCard .admin-pagination{
    width:100% !important;
    gap:9px !important;
    margin-top:12px !important;
    padding:10px !important;
    border-radius:14px !important;
  }

  #adminRecentCard .admin-page-info{
    white-space:normal !important;
    line-height:1.45 !important;
  }

  #adminRecentCard .admin-page-buttons{
    display:flex !important;
    gap:5px !important;
    width:100% !important;
    flex-wrap:wrap !important;
  }

  #adminRecentCard .admin-page-btn{
    min-width:31px !important;
    height:31px !important;
    padding:0 7px !important;
    border-radius:9px !important;
    font-size:10px !important;
  }

  #adminRecentCard .admin-page-btn.nav{
    min-width:56px !important;
  }
}

/* 极窄屏仍保持年月日一行；只进一步压缩字号和间距。 */
@media(max-width:390px){
  #adminRecentCard #recentDateForm{
    gap:8px !important;
  }

  #adminRecentCard #recentDateForm .history-date-selects{
    grid-template-columns:minmax(0,1.4fr) minmax(0,.8fr) minmax(0,.8fr) !important;
    gap:4px !important;
    padding:5px !important;
  }

  #adminRecentCard #recentDateForm .history-select-shell,
  #adminRecentCard #recentDateForm .history-select-shell:first-child{
    min-height:42px !important;
    height:42px !important;
    padding:0 7px !important;
  }

  #adminRecentCard #recentDateForm .history-select-shell select{
    height:38px !important;
    padding-right:14px !important;
    font-size:11px !important;
    line-height:38px !important;
  }

  #adminRecentCard #recentDateForm .history-select-shell span{
    font-size:9px !important;
  }

  #adminRecentCard #recentDateForm > .soft-btn{
    min-height:42px !important;
    height:42px !important;
    font-size:11px !important;
  }
}


/* ===== V30 系统管理 > 用户管理：用户注册 / 用户管理双分组 ===== */
#adminView #adminAuthorizationCard.admin-users-panel,
#adminView #adminUsersCard.admin-users-panel{
  width:100%;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;
  background:transparent!important;box-shadow:none!important;
}
#adminView #adminAuthorizationCard .admin-user-section,
#adminView #adminUsersCard .admin-user-section{
  width:100%;margin:0;padding:22px;border-radius:22px;
}
#adminView #adminAuthorizationCard .admin-user-section + .admin-user-section,
#adminView #adminUsersCard .admin-user-section + .admin-user-section{margin-top:18px}
#adminView #adminAuthorizationCard .admin-user-section-heading,
#adminView #adminUsersCard .admin-user-section-heading{
  display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:15px;
}
#adminView #adminAuthorizationCard .admin-user-section-heading small,
#adminView #adminUsersCard .admin-user-section-heading small{
  display:block;
  margin-bottom:5px;
  color:#8c96a1;
  font-size:10px;
  font-weight:400;
  letter-spacing:.08em;
}
#adminView #adminAuthorizationCard .admin-user-section-heading h3,
#adminView #adminUsersCard .admin-user-section-heading h3{
  margin:0;color:#3f4853;font-size:18px;line-height:1.2;
}
#adminView #adminUserRegistrationSection #userCreateForm{margin:0}
#adminView #adminUserRegistrationSection .admin-form-actions{margin-top:14px}
#adminView #adminUserManagementSection .admin-tree-help{
  margin:0 0 14px;padding:10px 12px;border-radius:13px;background:#dde2e8;color:#87929e;
  font-size:10px;font-weight:700;line-height:1.55;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.68);
}
#adminView #adminUserManagementSection .admin-table-wrap{margin-top:0}
@media(min-width:981px){
  #adminView #adminUserRegistrationSection{padding:22px 24px 20px}
  #adminView #adminUserManagementSection{padding:22px 24px}
}
@media(max-width:720px){
  #adminView #adminAuthorizationCard .admin-user-section,
  #adminView #adminUsersCard .admin-user-section{padding:16px;border-radius:18px}
  #adminView #adminAuthorizationCard .admin-user-section + .admin-user-section,
  #adminView #adminUsersCard .admin-user-section + .admin-user-section{margin-top:14px}
  #adminView #adminAuthorizationCard .admin-user-section-heading,
  #adminView #adminUsersCard .admin-user-section-heading{margin-bottom:13px}
  #adminView #adminAuthorizationCard .admin-user-section-heading h3,
  #adminView #adminUsersCard .admin-user-section-heading h3{font-size:17px}
  #adminView #adminUserManagementSection .admin-tree-help{margin-bottom:12px;padding:9px 10px}
}


/* ===== V31 用户注册提示位置统一 =====
   放在“用户注册”和昵称之间，并与用户管理说明框使用同一视觉参数。 */

#adminView #adminUserRegistrationSection .admin-registration-help{
  width:100%;
  box-sizing:border-box;
  margin:0 0 14px;
  padding:10px 12px;
  border-radius:13px;
  background:#dde2e8;
  color:#87929e;
  font-size:10px;
  font-weight:700;
  line-height:1.55;
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.18),
    inset -2px -2px 5px rgba(255,255,255,.68);
}

/* 用户注册底部不再承载提示文字，只保留“添加用户”按钮。 */
#adminView #adminUserRegistrationSection .admin-registration-actions{
  justify-content:flex-end;
}

/* 手机端与用户管理说明框保持同样的紧凑间距。 */
@media(max-width:720px){
  #adminView #adminUserRegistrationSection .admin-registration-help{
    margin-bottom:12px;
    padding:9px 10px;
  }
}


/* ===== V32 不可查询设备号提示位置统一 =====
   放在“不可查询设备号”标题与设备号输入框之间，
   样式与“用户注册 / 用户管理”说明框保持一致。 */

#adminView #adminBlacklistCard .admin-blacklist-help{
  width:100%;
  box-sizing:border-box;
  margin:0 0 14px;
  padding:10px 12px;
  border-radius:13px;
  background:#dde2e8;
  color:#87929e;
  font-size:10px;
  font-weight:700;
  line-height:1.55;
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.18),
    inset -2px -2px 5px rgba(255,255,255,.68);
}

/* 表单底部只保留“加入黑名单”按钮。 */
#adminView #adminBlacklistCard .admin-blacklist-actions{
  justify-content:flex-end;
}

@media(max-width:720px){
  #adminView #adminBlacklistCard .admin-blacklist-help{
    margin-bottom:12px;
    padding:9px 10px;
  }
}


/* ===== V33 不可查询设备号：标题与提示框间距修复 ===== */
/* V32 提示框本身只有下边距，标题与提示框之间过近；
   这里单独增加标题区底部留白，不影响其它管理模块。 */
#adminView #adminBlacklistCard > .card-heading{
  margin-bottom:18px !important;
}

#adminView #adminBlacklistCard .admin-blacklist-help{
  margin-top:0 !important;
}

/* 手机端稍微收紧，但仍保留明显层级。 */
@media(max-width:720px){
  #adminView #adminBlacklistCard > .card-heading{
    margin-bottom:14px !important;
  }
}


/* ===== V34 临时用户：恢复 / 转正式 / 生命周期 UI ===== */
.temporary-user-row .soft-chip.temp{
  color:#6d5bd0;
  background:rgba(113,88,230,.10);
}
.temp-expired-text{
  color:#c67a22 !important;
  font-weight:800 !important;
}

.convert-section{
  display:grid;
  gap:9px;
  margin-bottom:14px;
}
.convert-label{
  color:#7d8793;
  font-size:10px;
  font-weight:900;
}
.convert-choice-grid{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:8px;
}
.convert-choice-grid.two{
  grid-template-columns:repeat(2,minmax(0,1fr));
}
.convert-choice{
  min-height:62px;
  display:grid;
  align-content:center;
  gap:4px;
  padding:10px 12px;
  border:0;
  border-radius:14px;
  background:#e4e7eb;
  color:#56616d;
  text-align:left;
  cursor:pointer;
  box-shadow:-3px -3px 7px rgba(255,255,255,.70),3px 3px 7px rgba(163,177,198,.16);
}
.convert-choice.compact{min-height:56px}
.convert-choice strong{font-size:12px;font-weight:900;color:#4b5561}
.convert-choice small{font-size:9px;font-weight:700;color:#929ca7;line-height:1.45}
.convert-choice.active{
  background:#dce1e7;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.25),inset -3px -3px 7px rgba(255,255,255,.76);
}
.convert-choice.active strong{color:#5575dc}

.convert-parent-box{
  display:grid;
  gap:9px;
  margin:2px 0 14px;
}
.convert-parent-box>span{
  color:#7d8793;
  font-size:10px;
  font-weight:900;
}
.convert-parent-options{
  display:grid;
  gap:7px;
  max-height:220px;
  overflow:auto;
  padding:7px;
  border-radius:15px;
  background:#dce1e7;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.23),inset -3px -3px 7px rgba(255,255,255,.74);
}
.convert-parent-option{
  min-height:46px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:8px 11px;
  border:0;
  border-radius:11px;
  background:transparent;
  color:#56616d;
  cursor:pointer;
  text-align:left;
}
.convert-parent-option:hover{background:rgba(255,255,255,.28)}
.convert-parent-option.active{
  background:#e9ecf0;
  box-shadow:-2px -2px 5px rgba(255,255,255,.68),2px 2px 5px rgba(163,177,198,.13);
}
.convert-parent-option strong{font-size:11px;font-weight:900;color:#4b5561}
.convert-parent-option small{font-size:9px;font-weight:800;color:#8e98a3}
.convert-parent-option.active strong{color:#5575dc}

@media(max-width:620px){
  .convert-choice-grid{grid-template-columns:1fr}
  .convert-choice-grid.two{grid-template-columns:1fr 1fr}
  .convert-choice{min-height:54px}
}


/* ===== V35 全局错误提示：统一 Soft UI 视觉 =====
   保留红色错误语义，只统一圆角、字号、字重、内边距和凹陷阴影。 */
@media(max-width:720px){
  .notice{
    padding:9px 10px;
  }
}


/* ===== V36 系统管理专用提示区 + 登录错误提示 Soft UI 统一 =====
   系统管理提示仅显示在 Tab 导航与当前模块内容之间；
   登录页“账户或密码错误”等提示保留原位置，但使用同一套 Soft UI 错误视觉。 */

#adminView .admin-notice{
  width:100%;
  box-sizing:border-box;
  margin:0 0 20px;
  padding:14px 16px;
  border:1px solid rgba(189,74,66,.055);
  border-radius:16px;
  background:#f0dddd;
  color:#b74740;
  font-size:13px;
  font-weight:800;
  line-height:1.55;
  letter-spacing:.005em;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.20),
    inset -3px -3px 7px rgba(255,255,255,.72),
    0 1px 0 rgba(255,255,255,.42);
}

/* 登录页：账户或密码错误 / 登录失败 / 网络异常等，同步为协调的 Soft UI 错误提示。 */
.login-message{
  width:100%;
  box-sizing:border-box;
  padding:12px 14px;
  border:1px solid rgba(189,74,66,.055);
  border-radius:14px;
  background:#f0dddd;
  color:#b74740;
  font-size:12px;
  font-weight:800;
  line-height:1.55;
  box-shadow:
    inset 3px 3px 7px rgba(163,177,198,.20),
    inset -3px -3px 7px rgba(255,255,255,.72),
    0 1px 0 rgba(255,255,255,.42);
}

@media(max-width:720px){
  #adminView .admin-notice{
    margin-bottom:16px;
    padding:12px 14px;
    border-radius:14px;
    font-size:12px;
  }
  .login-message{
    padding:11px 13px;
    font-size:12px;
  }
}


/* ===== V37 安全警告次数管理 + 系统管理时间显示修复 ===== */
.warning-pill-btn{
  border:0;
  cursor:pointer;
  font:inherit;
  transition:box-shadow .18s ease,transform .18s ease;
}
.warning-pill-btn:hover{
  transform:translateY(-1px);
  box-shadow:-3px -3px 7px rgba(255,255,255,.68),3px 3px 7px rgba(163,177,198,.18);
}
.warning-pill-btn:active{
  transform:none;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.22),inset -2px -2px 5px rgba(255,255,255,.70);
}
.security-warning-panel{width:min(640px,calc(100vw - 28px))}
.security-warning-summary{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:12px;
  margin-bottom:16px;
}
.security-warning-summary>div{
  display:grid;
  gap:5px;
  padding:15px 16px;
  border-radius:16px;
  background:#dfe3e8;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.24),inset -3px -3px 7px rgba(255,255,255,.76);
}
.security-warning-summary small,.security-warning-label,.security-warning-custom span{
  color:#8a949f;
  font-size:10px;
  font-weight:900;
}
.security-warning-summary strong{color:#4a5561;font-size:22px;font-weight:900}
.security-warning-section{display:grid;gap:10px;margin-bottom:15px}
.security-warning-presets{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:9px;
}
.security-warning-presets button{
  min-height:46px;
  border:0;
  border-radius:14px;
  background:#e4e7eb;
  color:#66717d;
  font-size:12px;
  font-weight:900;
  cursor:pointer;
  box-shadow:-3px -3px 7px rgba(255,255,255,.72),3px 3px 7px rgba(163,177,198,.17);
}
.security-warning-presets button.active{
  color:#5575dc;
  background:#dce1e7;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.26),inset -3px -3px 7px rgba(255,255,255,.76);
}
.security-warning-custom{display:grid;gap:7px}
.security-warning-custom input{
  width:100%;box-sizing:border-box;border:0;outline:0;background:#dde1e6;color:#3c4043;border-radius:14px;padding:13px 14px;
  box-shadow:inset 3px 3px 7px rgba(163,177,198,.28),inset -3px -3px 7px rgba(255,255,255,.78);font:inherit
}
.security-warning-feedback{
  margin-top:12px;padding:10px 12px;border-radius:12px;background:rgba(52,168,83,.08);color:#3e8550;font-size:11px;font-weight:800;line-height:1.55
}
.security-warning-feedback.bad{background:rgba(234,67,53,.08);color:#b74740}
.security-warning-actions{align-items:center}
.security-warning-action-spacer{flex:1}
.warning-reset-btn{color:#b06c2f!important}
@media(max-width:620px){
  .security-warning-summary{grid-template-columns:1fr 1fr}
  .security-warning-presets{grid-template-columns:repeat(2,minmax(0,1fr))}
  .security-warning-actions{grid-template-columns:1fr 1fr!important}
  .security-warning-actions .warning-reset-btn{grid-column:1/-1}
  .security-warning-action-spacer{display:none}
}


/* ===== V38 桌面端顶部栏固定 =====
   顶部栏保持在视口顶部；正文继续正常滚动。仅修改布局定位，不改业务逻辑。 */
@media(min-width:821px){
  .topbar{
    position:sticky;
    top:0;
    z-index:40;
  }
}


/* ===== V39 左侧 Worker 平面状态块 =====
   不使用 Soft UI 凸起阴影；原 Worker 接口、心跳周期及 title 详情逻辑不变。 */
.worker-status-rail:has(.worker-online) .worker-state{color:#6f9a7a}
.worker-status-rail:has(.worker-waiting) .worker-state{color:#aa965d}
.worker-status-rail:has(.worker-offline) .worker-state{color:#bd736d}


/* ===== V40 Worker 边框 / 文字协调 =====
   使用普通 CSS 实线边框，不使用凸起阴影；文字整体降低对比度。 */
.worker-status-rail{
  transition:border-color .18s ease, background-color .18s ease;
}


/* ===== V41 顶部方形头像 / 账户下拉 ===== */
.topbar-actions{position:relative}
.top-account-wrap{position:relative;display:flex;align-items:center}
.top-account-button{
  width:58px;
  height:58px;
  box-sizing:border-box;
  padding:10px;
  border:0;
  border-radius:16px;
  display:grid;
  place-items:center;
  background:#e8ebef;
  color:#6d7783;
  cursor:pointer;
  box-shadow:
    -5px -5px 10px rgba(255,255,255,.72),
    5px 5px 10px rgba(163,177,198,.22);
  transition:transform .15s ease,box-shadow .15s ease
}
.top-account-button:hover{transform:translateY(-1px)}
.top-account-button:active,.top-account-button[aria-expanded="true"]{
  transform:none;box-shadow:inset 2px 2px 5px rgba(163,177,198,.20),inset -2px -2px 5px rgba(255,255,255,.68)
}
.top-avatar-square{
  width:34px;
  height:34px;
  border-radius:10px;
  display:grid;
  place-items:center;
  background:rgba(220,226,233,.72);
  color:#74808c;
  font-size:14px;
  font-weight:800;
  line-height:1
}
.top-account-menu{
  position:absolute;right:0;top:calc(100% + 12px);z-index:90;width:276px;padding:16px;border-radius:20px;
  background:#e7ebf0;border:1px solid rgba(255,255,255,.62);
  box-shadow:0 18px 40px rgba(78,90,108,.18),0 5px 14px rgba(78,90,108,.08)
}
.top-account-menu.hidden{display:none}
.account-profile-row{display:flex;align-items:center;gap:12px;padding-bottom:14px;border-bottom:1px solid rgba(255,255,255,.70)}
.account-avatar-circle{width:46px;height:46px;flex:0 0 46px;border-radius:50%;display:grid;place-items:center;background:#dce2e9;color:#687482;font-size:17px;font-weight:850;box-shadow:inset 2px 2px 5px rgba(163,177,198,.16),inset -2px -2px 5px rgba(255,255,255,.70)}
.account-profile-copy{min-width:0;display:grid;gap:4px}.account-profile-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#46505b;font-size:15px}.account-profile-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#929ba6;font-size:10px}
.account-meta-card{margin-top:13px;padding:12px 13px;border-radius:15px;background:#dde2e8;box-shadow:inset 2px 2px 5px rgba(163,177,198,.17),inset -2px -2px 5px rgba(255,255,255,.68)}
.account-meta-card>div{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:28px}.account-meta-card span{color:#929ba6;font-size:10px;font-weight:750}.account-meta-card b{color:#5b6672;font-size:11px;font-weight:800;text-align:right}.account-meta-card .account-login-time{align-items:flex-start}.account-meta-card .account-login-time b{font-variant-numeric:tabular-nums}
.account-menu-tag{display:inline-flex;margin-top:11px}
.account-logout{width:100%;margin-top:13px;border:0;border-radius:13px;padding:11px 13px;background:#e3e7ec;color:#9b5b56;font-size:12px;font-weight:800;cursor:pointer;box-shadow:-3px -3px 7px rgba(255,255,255,.66),3px 3px 7px rgba(163,177,198,.16)}
.account-logout:active{box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.68)}

/* ===== V41 用户管理：登录时间 / 全部登录记录 ===== */
#adminView #adminUserManagementSection .admin-user-tree-table{min-width:1320px}
.admin-login-time{display:grid;gap:5px;min-width:128px}.admin-login-time>span{font-variant-numeric:tabular-nums;white-space:nowrap;color:#606b77}.admin-mini-link{justify-self:start;border:0;background:transparent;padding:0;color:#7182ca;font-size:10px;font-weight:800;cursor:pointer}.admin-mini-link:hover{text-decoration:underline}
.login-history-panel{width:min(1180px,calc(100vw - 28px))}
.login-history-summary{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:15px}.login-history-summary>div{padding:12px 14px;border-radius:15px;background:#dde2e8;box-shadow:inset 2px 2px 5px rgba(163,177,198,.17),inset -2px -2px 5px rgba(255,255,255,.68)}.login-history-summary small{display:block;color:#919ba6;font-size:10px;font-weight:750}.login-history-summary strong{display:block;margin-top:5px;color:#525d69;font-size:13px;font-variant-numeric:tabular-nums}
.login-history-table-wrap{max-height:430px;overflow:auto;border-radius:15px;-webkit-overflow-scrolling:touch;scrollbar-width:none}.login-history-table-wrap::-webkit-scrollbar{width:0;height:0}.login-history-table{min-width:1040px}.login-history-table th,.login-history-table td{vertical-align:middle;white-space:nowrap}.login-history-table th:first-child,.login-history-table td:first-child{width:58px;text-align:center}.login-history-table td strong{font-variant-numeric:tabular-nums;font-size:12px}.login-history-table .login-history-region{white-space:normal;min-width:180px;line-height:1.45}.login-history-table .login-history-ip code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace;font-size:11px;color:#64707d;background:rgba(255,255,255,.32);padding:4px 7px;border-radius:8px}.login-history-index{font-variant-numeric:tabular-nums}.login-history-time{min-width:145px}
.login-history-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:15px;color:#8a949f;font-size:11px}.login-history-page-actions{display:flex;gap:8px}.login-history-page-actions .soft-btn:disabled{opacity:.45;cursor:not-allowed}

@media(max-width:720px){
  .top-account-button{width:42px;height:42px;border-radius:12px}.top-avatar-square{width:29px;height:29px}
  .top-account-menu{position:fixed;right:12px;top:72px;width:min(276px,calc(100vw - 24px));box-sizing:border-box}
  .login-history-summary{grid-template-columns:1fr}.login-history-footer{align-items:stretch;flex-direction:column}.login-history-page-actions{display:grid;grid-template-columns:1fr 1fr}.login-history-page-actions .soft-btn{width:100%}
  .login-history-panel{width:calc(100vw - 20px);max-width:calc(100vw - 20px)}
  .login-history-table-wrap{max-width:100%;max-height:min(52vh,430px)}
  .login-history-table{min-width:980px}
}


/* ===== V42 顶部头像入口与查询状态统一 =====
   外层背景、圆角、凸起阴影完全沿用 .top-query-status 的视觉参数。 */


/* ===== V43 顶部头像与查询状态外框尺寸对齐 =====
   两个外框统一 58px 高；头像入口保持 58x58 正方形，
   内部头像四边留白一致，视觉基线与查询状态卡一致。 */


/* ===== V44 Worker 外框与顶部状态卡统一 =====
   左下角 Worker 外框改为与顶部查询状态 / 头像入口同一套圆角、背景、阴影语言；
   同时保留现有 Worker 在线/离线逻辑与圆点状态颜色。 */


/* ===== V45 Worker 位置微调 =====
   仅将左下角 Worker 状态框整体向下移动 6px；其它尺寸、样式和功能不变。 */


/* ===== V46 用户管理：统一操作区 + 同级多选 ===== */
#adminView #adminUserManagementSection .admin-tree-help{
  margin-bottom:12px;
}
#adminView #adminUserManagementSection .admin-user-action-bar{
  width:100%;
  box-sizing:border-box;
  margin:0 0 18px;
  padding:14px 16px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  border-radius:16px;
  background:#e1e5ea;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.68);
}
#adminView #adminUserManagementSection .admin-user-action-summary{
  min-width:188px;
  display:grid;
  gap:3px;
}
#adminView #adminUserManagementSection .admin-user-action-summary small{
  color:#98a1ab;
  font-size:9px;
  font-weight:850;
  letter-spacing:.12em;
}
#adminView #adminUserManagementSection .admin-user-action-summary strong{
  color:#5c6672;
  font-size:12px;
  font-weight:850;
  line-height:1.35;
}
#adminView #adminUserManagementSection .admin-user-action-summary span{
  color:#929ca7;
  font-size:10px;
  font-weight:650;
  line-height:1.4;
}
#adminView #adminUserManagementSection .admin-user-action-buttons{
  min-width:0;
  display:flex;
  align-items:center;
  justify-content:flex-end;
  flex-wrap:wrap;
  gap:8px;
}
#adminView #adminUserManagementSection .admin-operation-btn{
  min-height:34px;
  padding:0 12px;
  border:0;
  border-radius:10px;
  background:#e7eaee;
  color:#65707c;
  font-size:11px;
  font-weight:800;
  line-height:1;
  white-space:nowrap;
  cursor:pointer;
  box-shadow:-2px -2px 5px rgba(255,255,255,.72),2px 2px 5px rgba(163,177,198,.18);
  transition:transform .14s ease,box-shadow .14s ease,opacity .14s ease;
}
#adminView #adminUserManagementSection .admin-operation-btn:hover:not(:disabled){transform:translateY(-1px)}
#adminView #adminUserManagementSection .admin-operation-btn:active:not(:disabled){transform:none;box-shadow:inset 2px 2px 4px rgba(163,177,198,.16),inset -2px -2px 4px rgba(255,255,255,.65)}
#adminView #adminUserManagementSection .admin-operation-btn:disabled{opacity:.34;cursor:not-allowed;box-shadow:none}
#adminView #adminUserManagementSection .admin-operation-btn.good{color:#4c8d61}
#adminView #adminUserManagementSection .admin-operation-btn.warning{color:#9b7b47}
#adminView #adminUserManagementSection .admin-operation-btn.danger{color:#c85b53}
#adminView #adminUserManagementSection .admin-operation-btn.utility{color:#89939e;background:#e2e6ea}
#adminView #adminUserManagementSection .admin-user-action-divider{width:1px;height:24px;margin:0 1px;background:rgba(118,132,148,.16)}
#adminView #adminUserManagementSection .admin-user-tree-table{min-width:1080px}
#adminView #adminUserManagementSection .user-tree-name{gap:7px}
#adminView #adminUserManagementSection .admin-user-select,
#adminView #adminUserManagementSection .admin-user-select-spacer{
  width:22px;
  height:22px;
  flex:0 0 22px;
}
#adminView #adminUserManagementSection .admin-user-select{
  padding:0;
  border:1px solid rgba(118,132,148,.20);
  border-radius:7px;
  display:grid;
  place-items:center;
  background:#e5e9ed;
  color:#fff;
  cursor:pointer;
  box-shadow:inset 1px 1px 3px rgba(163,177,198,.14),inset -1px -1px 3px rgba(255,255,255,.58);
}
#adminView #adminUserManagementSection .admin-user-select span{font-size:12px;font-weight:900;line-height:1}
#adminView #adminUserManagementSection .admin-user-select.selected{
  border-color:transparent;
  background:linear-gradient(135deg,#5b8ff3,#755bd7);
  box-shadow:0 2px 6px rgba(92,101,164,.20);
}
#adminView #adminUserManagementSection .admin-user-select.selection-locked{opacity:.25;cursor:not-allowed}
#adminView #adminUserManagementSection .admin-user-select-spacer{display:inline-block}
#adminView #adminUserManagementSection .admin-user-selected td{background:rgba(82,113,208,.038)}
#adminView #adminUserManagementSection .admin-user-selected td:first-child{box-shadow:inset 3px 0 0 rgba(82,113,208,.30)}
#adminView #adminUserManagementSection .admin-selection-locked-row .user-tree-name>span:last-child{opacity:.58}

@media(max-width:900px){
  #adminView #adminUserManagementSection .admin-user-action-bar{align-items:flex-start;flex-direction:column;padding:13px 14px;gap:12px}
  #adminView #adminUserManagementSection .admin-user-action-summary{min-width:0;width:100%}
  #adminView #adminUserManagementSection .admin-user-action-buttons{width:100%;justify-content:flex-start}
}
@media(max-width:520px){
  #adminView #adminUserManagementSection .admin-user-action-bar{margin-bottom:14px;padding:12px;border-radius:14px}
  #adminView #adminUserManagementSection .admin-user-action-buttons{gap:7px}
  #adminView #adminUserManagementSection .admin-operation-btn{min-height:32px;padding:0 10px;font-size:10px}
  #adminView #adminUserManagementSection .admin-user-action-divider{display:none}
}


/* ===== V47 用户管理：安全警告并入统一操作区 =====
   表格移除“安全警告”列；统一操作区新增同尺寸按钮。
   不增加额外上下 margin，继续沿用 V46 的 12px / 18px 区块间距。 */
#adminView #adminUserManagementSection #adminBatchSecurityWarningBtn{
  min-height:34px;
}
@media(max-width:520px){
  #adminView #adminUserManagementSection #adminBatchSecurityWarningBtn{min-height:32px}
}


/* ===== V49 系统管理：用户授权 / 用户管理拆分 =====
   顶部顺序：用户授权 → 用户管理 → 不可查询设备号 → 排队任务 → 最近提交/查询历史 → 封禁记录。
   两个用户模块沿用同一套 Soft UI 卡片间距；不改变 V47/V48 的操作区、Worker、头像及查询状态样式。 */

/* ===== V50 用户授权 / 用户管理英文小标题统一 =====
   USER REGISTRATION / USER MANAGEMENT 与 DEVICE BLACKLIST 等模块一致。
   只统一英文小标题字体参数；中文标题、卡片间距、顶部 Tab 和业务逻辑不变。 */

/* ===== V51 用户授权 / 用户管理标题顶部视觉间距统一 =====
   两个拆分后的用户卡片标题整体下移 12px，
   对齐 DEVICE BLACKLIST / QUEUE 等模块截图中的标题顶部视觉留白。
   只影响 USER REGISTRATION / USER MANAGEMENT 标题区域。 */
#adminView #adminAuthorizationCard .admin-user-section-heading,
#adminView #adminUsersCard .admin-user-section-heading{
  padding-top:12px;
}

@media(max-width:720px){
  #adminView #adminAuthorizationCard .admin-user-section-heading,
  #adminView #adminUsersCard .admin-user-section-heading{
    padding-top:12px;
  }
}

/* ===== V52 用户管理表格：交互与信息密度优化 =====
   1) 勾选框默认隐藏，悬停用户名区域显示；已选中始终显示。
   2) 标签超过 6 个字符时固定 6 字宽并自动横向滑动。
   3) 正式账户显示“正式”；临时账户显示“剩X天”，悬停查看实际到期时间。
   4) 最近查询 / 登录时间默认显示 MM-DD HH:mm，悬停查看完整时间。 */

/* 勾选框：保留 22px 布局占位，避免 hover 时整行左右跳动。 */
#adminView #adminUserManagementSection .admin-user-select{
  opacity:0;
  pointer-events:none;
  transition:opacity .16s ease,transform .16s ease,box-shadow .16s ease;
}
#adminView #adminUserManagementSection .user-tree-name:hover .admin-user-select,
#adminView #adminUserManagementSection .user-tree-name:focus-within .admin-user-select,
#adminView #adminUserManagementSection .admin-user-select:focus-visible,
#adminView #adminUserManagementSection .admin-user-select.selected{
  opacity:1;
  pointer-events:auto;
}
#adminView #adminUserManagementSection .user-tree-name:hover .admin-user-select.selection-locked,
#adminView #adminUserManagementSection .user-tree-name:focus-within .admin-user-select.selection-locked{
  opacity:.25;
  pointer-events:auto;
}

/* 标签：正常标签按内容宽度；超过 6 字后固定显示 6 字宽，文字自动往返滑动。 */
#adminView #adminUserManagementSection .admin-user-tag{
  overflow:hidden;
  vertical-align:middle;
}
#adminView #adminUserManagementSection .admin-user-tag.is-long{
  width:6em;
  max-width:6em;
}
#adminView #adminUserManagementSection .admin-user-tag-text{
  display:inline-block;
  min-width:max-content;
  white-space:nowrap;
}
#adminView #adminUserManagementSection .admin-user-tag.is-long .admin-user-tag-text{
  animation:adminUserTagMarquee 6s ease-in-out infinite alternate;
  will-change:transform;
}
#adminView #adminUserManagementSection .admin-user-tag.is-long:hover .admin-user-tag-text{
  animation-play-state:paused;
}
@keyframes adminUserTagMarquee{
  0%,16%{transform:translateX(0)}
  84%,100%{transform:translateX(calc(-100% + 6em))}
}
@media(prefers-reduced-motion:reduce){
  #adminView #adminUserManagementSection .admin-user-tag.is-long .admin-user-tag-text{animation:none}
}

/* 账户期限：正式/剩余天数只占一行，不再在单元格下方堆完整日期。 */
#adminView #adminUserManagementSection .admin-account-formal{
  color:#65707c;
  font-size:12px;
  font-weight:750;
  white-space:nowrap;
}
#adminView #adminUserManagementSection .admin-expiry-compact{
  cursor:help;
  white-space:nowrap;
}
#adminView #adminUserManagementSection .admin-expiry-compact.expired{
  color:#b06b53;
  background:rgba(234,67,53,.08);
}

/* 时间：默认紧凑显示，完整值通过 title 悬停查看；登录记录入口和时间保持同一视觉行。 */
#adminView #adminUserManagementSection .admin-time-compact{
  display:inline-block;
  color:#606b77;
  font-variant-numeric:tabular-nums;
  font-feature-settings:'tnum' 1;
  white-space:nowrap;
  cursor:help;
  line-height:1.4;
}
#adminView #adminUserManagementSection .admin-time-empty{
  color:#9aa3ad;
  font-size:11px;
  font-weight:650;
  white-space:nowrap;
}
#adminView #adminUserManagementSection .admin-login-time{
  min-width:0;
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
}
#adminView #adminUserManagementSection .admin-login-time .admin-mini-link{
  flex:0 0 auto;
  justify-self:auto;
  line-height:1.3;
}


/* ===== V53 用户表格对齐 / 无位移选择 / Soft UI 提示 =====
   修复 V52 六个问题：勾选框 hover 不再推动用户名；完整时间改为 Soft UI 提示；
   标签/账户期限/查询次数列统一居中；从未登录不显示“全部记录”。 */

/* 1) 用户 / 层级：选择框固定在自己的 22px 槽位，显示与隐藏完全脱离 flex 流。 */
#adminView #adminUserManagementSection .user-tree-name{
  position:relative;
  padding-left:calc(var(--tree-indent, 0px) + 29px);
}
#adminView #adminUserManagementSection .admin-user-select,
#adminView #adminUserManagementSection .admin-user-select-spacer{
  position:absolute;
  left:var(--tree-indent, 0px);
  top:50%;
  margin:0;
  transform:translateY(-50%);
}
#adminView #adminUserManagementSection .admin-user-select{
  transition:opacity .16s ease,box-shadow .16s ease,background .16s ease;
}
#adminView #adminUserManagementSection .admin-user-select:hover,
#adminView #adminUserManagementSection .admin-user-select:active,
#adminView #adminUserManagementSection .admin-user-select.selected{
  transform:translateY(-50%);
}

/* 2/3/5) 表头与内容用同一水平中心线，避免 pill / 数字视觉偏左。 */
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(2),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(2),
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(4),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(4),
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(6),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(6){
  text-align:center;
}
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(2) .admin-user-tag,
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(4) .admin-account-formal,
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(4) .admin-expiry-compact{
  margin-left:auto;
  margin-right:auto;
}
#adminView #adminUserManagementSection .admin-account-formal,
#adminView #adminUserManagementSection .admin-expiry-compact{
  display:inline-flex;
  align-items:center;
  justify-content:center;
}

/* 2) 标签动画元素固定为块级，短标签和长标签都在单元格中心。 */
#adminView #adminUserManagementSection .admin-user-tag{
  display:inline-flex;
  align-items:center;
  justify-content:flex-start;
}

/* 4) 完整时间 / 到期时间 / 长标签：替代浏览器原生黑色 title，使用站点 Soft UI。 */
#adminView #adminUserManagementSection .admin-soft-tooltip{
  position:relative;
  outline:none;
}
#adminView #adminUserManagementSection .admin-soft-tooltip::after{
  content:attr(data-tooltip);
  position:absolute;
  left:50%;
  bottom:calc(100% + 9px);
  z-index:120;
  min-width:max-content;
  max-width:280px;
  padding:8px 11px;
  border:1px solid rgba(118,132,148,.12);
  border-radius:10px;
  background:#e7ebf0;
  color:#606b77;
  font-size:11px;
  font-weight:750;
  line-height:1.35;
  letter-spacing:0;
  white-space:nowrap;
  box-shadow:-4px -4px 9px rgba(255,255,255,.78),4px 4px 10px rgba(163,177,198,.25);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transform:translate(-50%,4px);
  transition:opacity .14s ease,transform .14s ease,visibility .14s ease;
}
#adminView #adminUserManagementSection .admin-soft-tooltip::before{
  content:"";
  position:absolute;
  left:50%;
  bottom:calc(100% + 4px);
  z-index:121;
  width:9px;
  height:9px;
  background:#e7ebf0;
  transform:translateX(-50%) rotate(45deg);
  box-shadow:2px 2px 3px rgba(163,177,198,.10);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .14s ease,visibility .14s ease;
}
#adminView #adminUserManagementSection .admin-soft-tooltip:hover::after,
#adminView #adminUserManagementSection .admin-soft-tooltip:focus-visible::after{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,0);
}
#adminView #adminUserManagementSection .admin-soft-tooltip:hover::before,
#adminView #adminUserManagementSection .admin-soft-tooltip:focus-visible::before{
  opacity:1;
  visibility:visible;
}
#adminView #adminUserManagementSection .admin-user-tree-table td:has(.admin-soft-tooltip:hover),
#adminView #adminUserManagementSection .admin-user-tree-table td:has(.admin-soft-tooltip:focus-visible){
  position:relative;
  z-index:20;
}

/* ===== V54 用户 / 层级：未触碰靠左，悬停/选中向右让出勾选框 =====
   未触碰且未选中：勾选框隐藏，用户内容靠左；
   悬停/键盘聚焦：勾选框出现，用户内容平滑右移；
   已选中：勾选框常显，用户内容保持右移；取消选择并移开后自动回左。 */
#adminView #adminUserManagementSection .user-tree-name{
  padding-left:var(--tree-indent, 0px);
  transition:padding-left .16s ease;
}
#adminView #adminUserManagementSection .user-tree-name:has(.admin-user-select):hover,
#adminView #adminUserManagementSection .user-tree-name:has(.admin-user-select):focus-within,
#adminView #adminUserManagementSection .admin-user-selected .user-tree-name{
  padding-left:calc(var(--tree-indent, 0px) + 29px);
}

/* ===== V55 用户表格列距 / 状态列对齐 =====
   收紧“功能权限 → 账户期限”的横向空白；状态表头和所有状态 pill 使用同一中心线。
   V54 用户选择 hover 位移、V53 tooltip、标签/期限/查询次数对齐逻辑保持不变。 */
#adminView #adminUserManagementSection .admin-user-tree-table{
  min-width:1140px;
  table-layout:fixed;
}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(1),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(1){width:15%;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(2),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(2){width:8%;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(3),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(3){width:20%;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(4),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(4){width:10%;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(5),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(5){width:9%;text-align:center;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(6),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(6){width:8%;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(7),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(7){width:12%;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(8),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(8){width:18%;}
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(5) .status-pill{
  vertical-align:middle;
}
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(5)>small{
  text-align:center;
}


/* ===== V56 用户管理表格八列间距整体优化 =====
   重新分配 8 列宽度，让“用户/层级 → 标签 → 功能权限 → 账户期限 → 状态 → 查询次数 → 最近查询 → 登录时间”
   的视觉节奏更紧凑；除用户/层级与功能权限保持左对齐外，其余信息列统一以列中心线排列。 */
#adminView #adminUserManagementSection .admin-user-tree-table{
  min-width:1140px;
  table-layout:fixed;
}
#adminView #adminUserManagementSection .admin-user-tree-table th,
#adminView #adminUserManagementSection .admin-user-tree-table td{
  box-sizing:border-box;
  padding-left:8px;
  padding-right:8px;
}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(1),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(1){width:13%;text-align:left;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(2),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(2){width:8%;text-align:center;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(3),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(3){width:18%;text-align:left;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(4),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(4){width:10%;text-align:center;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(5),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(5){width:9%;text-align:center;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(6),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(6){width:8%;text-align:center;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(7),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(7){width:13%;text-align:center;}
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(8),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(8){width:21%;text-align:center;}
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(7) .admin-time-compact,
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(7) .admin-time-empty{
  display:inline-flex;
  justify-content:center;
}
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(8) .admin-login-time{
  justify-content:center;
  gap:8px;
  width:100%;
}
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(3) .permission-summary{
  line-height:1.45;
}

/* ===== V59 手机端顶部查询状态 / 头像尺寸统一 =====
   修复移动端旧规则只把头像缩到 42px、查询状态仍保持 58px，
   导致两块高度不一致、顶部栏被较高的查询状态卡撑大的问题。
   仅影响 <=720px 手机端，不改桌面端。 */
@media(max-width:720px){
  .topbar{
    min-height:66px;
    padding:12px;
    align-items:center;
  }
  .topbar-actions{
    align-items:center;
    gap:7px;
  }
  .top-query-status{
    height:42px;
    min-height:42px;
    padding:7px 10px;
    border-radius:12px;
    gap:9px;
  }
  .top-query-status small{
    display:none;
  }
  .top-query-status b{
    display:block;
    font-size:12px;
    line-height:1;
    white-space:nowrap;
  }
  .top-account-button{
    width:42px;
    height:42px;
    border-radius:12px;
  }
  .top-avatar-square{
    width:29px;
    height:29px;
  }
}

/* ===== V60 手机端头像内层灰块严格居中 =====
   V59 将外层按钮缩为 42px，但仍继承桌面 padding:10px。
   外层 content box 因此只有 22px，而内层头像仍是 29px；
   Grid 隐式轨道被内层尺寸撑大后会产生溢出，视觉上偏向右下。
   手机端清零 padding，并使用 flex 对外层与内层进行双重居中。
   仅影响 <=720px，不改桌面端。 */
@media(max-width:720px){
  .top-account-button{
    width:42px;
    height:42px;
    padding:0;
    display:flex;
    align-items:center;
    justify-content:center;
    line-height:1;
  }
  .top-avatar-square{
    width:29px;
    height:29px;
    flex:0 0 29px;
    margin:0;
    display:flex;
    align-items:center;
    justify-content:center;
    line-height:1;
  }
}

/* ===== 最近提交：清理确认弹窗（沿用现有 USER ACTION / 临时用户转正式风格） ===== */
.recent-clear-panel{width:min(560px,calc(100vw - 28px))}
.recent-clear-body{display:grid;gap:14px}
.recent-clear-section{display:grid;gap:9px}
.recent-clear-label{
  color:#7d8793;
  font-size:10px;
  font-weight:900;
}
.recent-clear-card{
  display:grid;
  gap:5px;
  padding:14px 15px;
  border-radius:14px;
  background:#e4e7eb;
  box-shadow:-3px -3px 7px rgba(255,255,255,.70),3px 3px 7px rgba(163,177,198,.16);
}
.recent-clear-card strong{
  color:#4b5561;
  font-size:12px;
  font-weight:900;
}
.recent-clear-card small{
  color:#8e98a3;
  font-size:10px;
  font-weight:700;
  line-height:1.6;
}
@media(max-width:620px){
  .recent-clear-card{padding:13px}
}



/* ===== 夜间模式 v1：系统自动跟随 + 用户菜单手动切换 ===== */
.account-quick-actions{
  display:grid;
  grid-template-columns:repeat(4,42px);
  gap:8px;
  min-height:42px;
  margin:13px 0;
  align-items:center;
  justify-content:start;
}
.account-quick-action{
  width:42px;
  height:42px;
  padding:0;
  border:0;
  border-radius:13px;
  display:grid;
  place-items:center;
  background:#e5e9ee;
  color:#697482;
  cursor:pointer;
  box-shadow:-4px -4px 9px rgba(255,255,255,.76),4px 4px 9px rgba(163,177,198,.22);
  transition:transform .15s ease,box-shadow .15s ease,background-color .2s ease;
}
.account-quick-action span{font-size:20px;line-height:1;transform:translateY(-.5px)}
.account-quick-action:hover{transform:translateY(-1px)}
.account-quick-action:active{
  transform:none;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.24),inset -2px -2px 5px rgba(255,255,255,.72);
}
.account-quick-action:focus-visible{outline:2px solid rgba(91,116,226,.42);outline-offset:2px}

html[data-theme="dark"]{
  --bg:#1f242b;
  --panel:#252b33;
  --inset:#1b2128;
  --text:#edf1f5;
  --muted:#9fa9b5;
  --primary:#6f9cff;
  --purple:#9b7cf0;
  --green:#59bd78;
  --orange:#e7b84b;
  --red:#ee6a61;
  --dark-surface:#252b33;
  --dark-surface-2:#20262d;
  --dark-inset:#1b2128;
  --dark-text:#edf1f5;
  --dark-muted:#9fa9b5;
  --dark-border:rgba(255,255,255,.08);
  --dark-raised:-5px -5px 11px rgba(255,255,255,.025),6px 6px 13px rgba(0,0,0,.42);
  --dark-raised-small:-3px -3px 7px rgba(255,255,255,.024),3px 3px 7px rgba(0,0,0,.38);
  --dark-inset-shadow:inset 3px 3px 7px rgba(0,0,0,.42),inset -3px -3px 7px rgba(255,255,255,.024);
  color-scheme:dark;
}
html[data-theme="dark"],
html[data-theme="dark"] body{
  background:#1f242b;
  color:var(--dark-text);
}
html[data-theme="dark"] body{color-scheme:dark}
html[data-theme="dark"] .app-shell,
html[data-theme="dark"] .workspace{background:#1f242b}

/* 主框架 / 导航 / 顶部栏 */
html[data-theme="dark"] .sidebar{
  background:#1b2027;
  box-shadow:8px 0 22px rgba(0,0,0,.28);
}
html[data-theme="dark"] .side-brand b{color:#eef2f6}
html[data-theme="dark"] .side-brand small,
html[data-theme="dark"] .worker-label,
html[data-theme="dark"] .worker-state{color:#9da7b3}
html[data-theme="dark"] .nav-item{color:#a8b1bc}
html[data-theme="dark"] .nav-item:hover{color:#9bafff}
html[data-theme="dark"] .nav-icon,
html[data-theme="dark"] .worker-status-rail,
html[data-theme="dark"] .top-query-status,
html[data-theme="dark"] .top-account-button,
html[data-theme="dark"] .account-quick-action{
  background:var(--dark-surface);
  box-shadow:var(--dark-raised);
}
html[data-theme="dark"] .worker-status-rail{border-color:rgba(255,255,255,.07)}
html[data-theme="dark"] .topbar{
  background:#242a32;
  box-shadow:0 8px 20px rgba(0,0,0,.28);
}
html[data-theme="dark"] .breadcrumb{color:#929ca8}
html[data-theme="dark"] .breadcrumb b{color:#d7dde5}
html[data-theme="dark"] .breadcrumb i{color:#6f7985}
html[data-theme="dark"] .top-query-status small{color:#98a2ae}
html[data-theme="dark"] .top-query-status b{color:#edf1f5}
html[data-theme="dark"] .top-avatar-square{
  background:#1d232a;
  color:#aab4c0;
}
html[data-theme="dark"] .content{
  background:
    radial-gradient(circle at 88% 0%,rgba(77,91,153,.14),transparent 26%),
    radial-gradient(circle at 18% 2%,rgba(255,255,255,.025),transparent 25%),
    #1f242b;
}
html[data-theme="dark"] .mobile-nav{
  background:#232930;
  box-shadow:-7px -7px 14px rgba(255,255,255,.018),7px 7px 16px rgba(0,0,0,.42);
}
html[data-theme="dark"] .mobile-nav-item{color:#a7b0bb}

/* 通用 Soft UI 表面 */
html[data-theme="dark"] .soft-card,
html[data-theme="dark"] .mobile-package-card,
html[data-theme="dark"] .device-summary-item{
  background:rgba(37,43,51,.98);
  box-shadow:var(--dark-raised);
}
html[data-theme="dark"] .soft-btn,
html[data-theme="dark"] .admin-mini-btn,
html[data-theme="dark"] .tree-toggle,
html[data-theme="dark"] .admin-operation-btn,
html[data-theme="dark"] .device-summary-close,
html[data-theme="dark"] .summary-index{
  background:#252b33;
  color:#9fb1ff;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .soft-btn:active,
html[data-theme="dark"] .admin-mini-btn:active,
html[data-theme="dark"] .tree-toggle:active,
html[data-theme="dark"] .admin-operation-btn:active,
html[data-theme="dark"] .device-summary-close:active,
html[data-theme="dark"] .account-quick-action:active{
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .soft-chip,
html[data-theme="dark"] .queue-badge,
html[data-theme="dark"] .visual-badge{
  background:rgba(101,126,230,.16);
  color:#9eb1ff;
}
html[data-theme="dark"] .eyebrow{color:#8098ff}
html[data-theme="dark"] .notice,
html[data-theme="dark"] .admin-notice,
html[data-theme="dark"] .login-message{
  background:rgba(238,106,97,.12);
  color:#f08b84;
  box-shadow:var(--dark-inset-shadow);
}

/* 查询页 / 空状态 */
html[data-theme="dark"] .query-page-title h1,
html[data-theme="dark"] .page-heading h1,
html[data-theme="dark"] .device-hero h2,
html[data-theme="dark"] .query-help-card h3,
html[data-theme="dark"] .query-status-header h3,
html[data-theme="dark"] .query-complete h3,
html[data-theme="dark"] .empty-state-page h2{color:#eef2f6}
html[data-theme="dark"] .query-search-row,
html[data-theme="dark"] .query-form,
html[data-theme="dark"] .query-guide,
html[data-theme="dark"] .soft-progress,
html[data-theme="dark"] .query-progress,
html[data-theme="dark"] .empty-state{
  background:var(--dark-inset);
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .query-status-card .query-progress{background:transparent;box-shadow:none}
html[data-theme="dark"] .query-search-row input,
html[data-theme="dark"] .query-form input,
html[data-theme="dark"] .query-form select{
  color:#edf1f5!important;
  background:transparent!important;
  box-shadow:none!important;
}
html[data-theme="dark"] .query-search-row input::placeholder{color:#77818e}
html[data-theme="dark"] .query-help-icon,
html[data-theme="dark"] .empty-symbol,
html[data-theme="dark"] .sim-active-icon{
  background:#252b33;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .query-help-card p,
html[data-theme="dark"] .query-idle-text,
html[data-theme="dark"] .query-progress p,
html[data-theme="dark"] .empty-state-page p,
html[data-theme="dark"] .progress-row small,
html[data-theme="dark"] .query-status-header small{color:#9fa9b5}
html[data-theme="dark"] .query-idle-text{border-color:var(--dark-border)}
html[data-theme="dark"] .query-complete{
  background:#202b25;
  box-shadow:inset 3px 3px 7px rgba(0,0,0,.32),inset -3px -3px 7px rgba(255,255,255,.02);
}

/* 设备详情 / SIM / 套餐 */
html[data-theme="dark"] .info-item{border-color:var(--dark-border)}
html[data-theme="dark"] .info-item label,
html[data-theme="dark"] .device-hero small,
html[data-theme="dark"] .card-top small,
html[data-theme="dark"] .card-heading small,
html[data-theme="dark"] .stat-card small,
html[data-theme="dark"] .visual-card-head small,
html[data-theme="dark"] .mobile-package-head small{color:#98a2ae}
html[data-theme="dark"] .info-item b,
html[data-theme="dark"] .stat-card strong,
html[data-theme="dark"] .visual-foot b,
html[data-theme="dark"] .signal-gauge-center strong,
html[data-theme="dark"] .wifi-load-visual strong,
html[data-theme="dark"] .sim-active-main strong,
html[data-theme="dark"] .sim-operator-row strong,
html[data-theme="dark"] .package-validity-center strong,
html[data-theme="dark"] .card-heading h3,
html[data-theme="dark"] .visual-card-head h3,
html[data-theme="dark"] .card-top h2{color:#eef2f6}
html[data-theme="dark"] .device-map,
html[data-theme="dark"] .signal-caption,
html[data-theme="dark"] .load-meter i,
html[data-theme="dark"] .sim-operator-row,
html[data-theme="dark"] .package-tabs,
html[data-theme="dark"] .package-table-wrap{
  background:#1b2128;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .visual-foot{border-color:var(--dark-border);color:#98a2ae}
html[data-theme="dark"] .signal-gauge-center span,
html[data-theme="dark"] .signal-caption,
html[data-theme="dark"] .sim-active-main small,
html[data-theme="dark"] .sim-active-main span,
html[data-theme="dark"] .sim-operator-row span,
html[data-theme="dark"] .package-validity-center span,
html[data-theme="dark"] .package-validity-summary{color:#9fa9b5}
html[data-theme="dark"] .gauge-track{stroke:#343b44;filter:drop-shadow(2px 3px 4px rgba(0,0,0,.28))}
html[data-theme="dark"] .load-meter i{background:#343a43}
html[data-theme="dark"] .package-tab{color:#aab3bd}
html[data-theme="dark"] .package-tab span{background:rgba(255,255,255,.06)}
html[data-theme="dark"] .package-tab.active{
  color:#9fb2ff;
  background:#252b33;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .package-table th{
  color:#aab3bd;
  background:#20262d;
  border-color:var(--dark-border);
}
html[data-theme="dark"] .package-table td{color:#dbe1e8;border-color:var(--dark-border)}
html[data-theme="dark"] .package-table tbody tr:hover{background:rgba(255,255,255,.025)}
html[data-theme="dark"] .fixed-region-map{
  background:radial-gradient(circle at 70% 20%,rgba(115,137,230,.12),transparent 34%),linear-gradient(145deg,#222932,#1b2128);
}
html[data-theme="dark"] .region-map-stage img{opacity:.54;filter:brightness(.68) contrast(.94) saturate(.55)}
html[data-theme="dark"] .sim-active-icon span::before{background:#252b33}

/* 状态标签在深色下保持状态色，但降低底色亮度 */
html[data-theme="dark"] .status-good{color:#80d79a;background:rgba(52,168,83,.15)}
html[data-theme="dark"] .status-bad{color:#f18a82;background:rgba(234,67,53,.15)}
html[data-theme="dark"] .status-warn{color:#e9c669;background:rgba(251,188,4,.14)}
html[data-theme="dark"] .status-neutral{color:#a7b7ff;background:rgba(91,114,218,.16)}

/* 系统管理 */
/* ===== Dark V4 系统管理：用户授权 / 用户管理主标题颜色统一 =====
   仅修复深色模式下高优先级基础规则压过通用 .card-heading h3 的问题。
   参照 DEVICE BLACKLIST 主标题颜色；白天模式不变。 */
html[data-theme="dark"] #adminView #adminAuthorizationCard .admin-user-section-heading h3,
html[data-theme="dark"] #adminView #adminUsersCard .admin-user-section-heading h3{
  color:#eef2f6;
}

html[data-theme="dark"] .admin-form label,
html[data-theme="dark"] .admin-form-actions,
html[data-theme="dark"] .admin-history-filter label,
html[data-theme="dark"] .modal-field,
html[data-theme="dark"] .admin-tree-help,
html[data-theme="dark"] .permission-head p,
html[data-theme="dark"] .permission-row small,
html[data-theme="dark"] .permission-summary{color:#9fa9b5!important}
html[data-theme="dark"] #loginForm input,
html[data-theme="dark"] .admin-form input,
html[data-theme="dark"] .admin-form select,
html[data-theme="dark"] .admin-form textarea,
html[data-theme="dark"] .modal-field input,
html[data-theme="dark"] .modal-field textarea,
html[data-theme="dark"] .admin-history-filter input{
  background:#1b2128!important;
  color:#edf1f5!important;
  box-shadow:var(--dark-inset-shadow)!important;
}
html[data-theme="dark"] .admin-table th,
html[data-theme="dark"] .admin-table td{border-color:var(--dark-border);color:#c3cbd5}
html[data-theme="dark"] .admin-table th{color:#949eaa}
html[data-theme="dark"] .admin-table td strong{color:#edf1f5}
html[data-theme="dark"] .admin-table td small{color:#98a2ae}
html[data-theme="dark"] .admin-history-stats,
html[data-theme="dark"] .permission-hint{
  background:rgba(102,131,238,.10);
  color:#aeb9c8;
}
html[data-theme="dark"] .admin-history-stats strong{color:#e5eaf0}
html[data-theme="dark"] .admin-history-stats span{
  background:#252b33;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .permission-backdrop,
html[data-theme="dark"] .device-summary-backdrop{
  background:rgba(7,10,14,.56)!important;
}
html[data-theme="dark"] .permission-panel,
html[data-theme="dark"] .device-summary-panel{
  background:#252b33;
  border-color:rgba(255,255,255,.06);
  box-shadow:0 18px 42px rgba(0,0,0,.46),0 5px 16px rgba(0,0,0,.28)!important;
}
html[data-theme="dark"] .permission-head,
html[data-theme="dark"] .device-summary-head{border-color:var(--dark-border)}
html[data-theme="dark"] .permission-head h2,
html[data-theme="dark"] .device-summary-head h2{color:#eef2f6}
html[data-theme="dark"] .permission-row{
  background:#20262d;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .permission-row strong{color:#e8edf2}
html[data-theme="dark"] .permission-row i{
  background:#343b44;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .permission-row i:after{background:#cbd3dc;box-shadow:1px 2px 5px rgba(0,0,0,.35)}
html[data-theme="dark"] .modal-warning{background:rgba(231,184,75,.10);color:#d8bd78}
html[data-theme="dark"] .modal-warning.danger{background:rgba(238,106,97,.13);color:#ef928b}
html[data-theme="dark"] .recent-clear-card{
  background:#20262d;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .recent-clear-label{color:#98a2ae}
html[data-theme="dark"] .recent-clear-card strong{color:#e7ecf2}
html[data-theme="dark"] .recent-clear-card small{color:#9fa9b5}
html[data-theme="dark"] #adminView #adminUserRegistrationSection .admin-registration-help,
html[data-theme="dark"] #adminView #adminBlacklistCard .admin-blacklist-help,
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-tree-help,
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-user-action-bar{
  background:#1d232a;
  color:#9fa9b5;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-user-action-summary strong{color:#d7dde5}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-user-action-summary small,
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-user-action-summary span{color:#98a2ae}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-operation-btn{
  background:#252b33;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-user-select{
  background:#20262d;
  border-color:rgba(255,255,255,.10);
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-user-selected td{background:rgba(111,140,255,.055)}

/* 顶部账户菜单 / 夜间按钮 */
html[data-theme="dark"] .top-account-menu{
  background:#252b33;
  border-color:rgba(255,255,255,.07);
  box-shadow:0 18px 40px rgba(0,0,0,.46),0 5px 14px rgba(0,0,0,.30);
}
html[data-theme="dark"] .account-profile-row{border-color:var(--dark-border)}
html[data-theme="dark"] .account-avatar-circle{
  background:#1d232a;
  color:#b3bdc8;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .account-profile-copy strong{color:#edf1f5}
html[data-theme="dark"] .account-profile-copy small{color:#9da7b3}
html[data-theme="dark"] .account-meta-card{
  background:#1b2128;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .account-meta-card span{color:#9ca6b2}
html[data-theme="dark"] .account-meta-card b{color:#dce2e9}
html[data-theme="dark"] .account-logout{
  background:#20262d;
  color:#e08a84;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .account-logout:active{box-shadow:var(--dark-inset-shadow)}

/* 设备状态总结 */
html[data-theme="dark"] .device-summary-head p,
html[data-theme="dark"] .device-summary-empty,
html[data-theme="dark"] .summary-copy small,
html[data-theme="dark"] .summary-copy span{color:#9da7b3}
html[data-theme="dark"] .device-summary-empty strong,
html[data-theme="dark"] .summary-copy strong{color:#edf1f5}
html[data-theme="dark"] .summary-index{color:#9fb2ff}

/* 登录页：覆盖 V62 末尾内联 CSS，确保系统夜间模式首屏也是深色 */
html[data-theme="dark"] #loginGate.login-gate{background:#1f242b!important}
html[data-theme="dark"] #loginGate .login-card{
  background:#252b33!important;
  box-shadow:var(--dark-raised)!important;
}
html[data-theme="dark"] .login-brand b,
html[data-theme="dark"] .login-title h1{color:#eef2f6}
html[data-theme="dark"] .login-brand small,
html[data-theme="dark"] .login-title p,
html[data-theme="dark"] #loginForm label,
html[data-theme="dark"] .login-foot{color:#9fa9b5}
html[data-theme="dark"] #loginGate .login-scene::before{
  background:radial-gradient(circle at 50% 50%,rgba(72,112,184,.13) 0%,rgba(72,112,184,.05) 46%,rgba(72,112,184,0) 72%)!important;
}
html[data-theme="dark"] #loginGate .login-scene-floor{
  background:linear-gradient(145deg,#262e37 0%,#1b2128 100%)!important;
  box-shadow:-18px -18px 36px rgba(255,255,255,.018),24px 28px 46px rgba(0,0,0,.38)!important;
}
html[data-theme="dark"] #loginGate .login-scene-device-base{
  background:linear-gradient(145deg,#2c3540,#1c232b)!important;
  box-shadow:-10px -10px 20px rgba(255,255,255,.02),13px 16px 26px rgba(0,0,0,.40)!important;
}
html[data-theme="dark"] #loginGate .login-scene-device-core{
  background:linear-gradient(135deg,#343e49,#202831)!important;
  box-shadow:0 10px 24px rgba(0,0,0,.38)!important;
}
html[data-theme="dark"] #loginGate .login-scene-cube{
  background:linear-gradient(135deg,#293a48 0%,#366d91 58%,#345f9a 100%)!important;
  box-shadow:0 12px 28px rgba(0,0,0,.30)!important;
}
html[data-theme="dark"] #loginGate .login-scene-node-person{background:#252d36!important}
html[data-theme="dark"] #loginGate .login-scene-scan{opacity:.5}

/* 登录历史 / 其它凹陷信息区 */
html[data-theme="dark"] .login-history-summary>div,
html[data-theme="dark"] .security-warning-summary,
html[data-theme="dark"] .security-warning-presets,
html[data-theme="dark"] .security-warning-custom,
html[data-theme="dark"] .expiry-relative-card,
html[data-theme="dark"] .expiry-preview{
  background:#1d232a;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .login-history-summary small{color:#9ca6b2}
html[data-theme="dark"] .login-history-summary strong{color:#e3e8ee}
html[data-theme="dark"] .login-history-footer{color:#9ca6b2}
html[data-theme="dark"] .login-history-table .login-history-ip code{color:#c7d0da;background:rgba(255,255,255,.055)}

@media(max-width:720px){
  .account-quick-actions{grid-template-columns:repeat(4,40px);gap:8px;min-height:40px}
  .account-quick-action{width:40px;height:40px;border-radius:12px}
  .account-quick-action span{font-size:19px}
}

/* ===== 夜间模式 v1：系统管理 / 有效期 / 自定义下拉补充适配 ===== */
html[data-theme="dark"] #adminView .admin-module-tabs,
html[data-theme="dark"] .history-date-selects,
html[data-theme="dark"] .expiry-mode-tabs,
html[data-theme="dark"] .expiry-custom-grid{
  background:#1b2128;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] #adminView .admin-module-tab{color:#aab3bd!important}
html[data-theme="dark"] #adminView .admin-module-tab:hover:not(.active){
  color:#9fb2ff!important;
  background:rgba(255,255,255,.035)!important;
}
html[data-theme="dark"] #adminView .admin-module-tab.active{
  color:#9fb2ff!important;
  background:#1d232a!important;
  box-shadow:inset 5px 5px 10px rgba(0,0,0,.38),inset -5px -5px 10px rgba(255,255,255,.025)!important;
}
html[data-theme="dark"] .history-date-label{color:#9fa9b5}
html[data-theme="dark"] .history-select-shell,
html[data-theme="dark"] .expiry-select-shell,
html[data-theme="dark"] .expiry-preset,
html[data-theme="dark"] .expiry-stepper button,
html[data-theme="dark"] .admin-page-btn{
  background:#252b33;
  color:#aeb8c4!important;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .history-select-shell select,
html[data-theme="dark"] .expiry-select-shell select{
  color:#e7ecf2!important;
  background-color:transparent!important;
}
html[data-theme="dark"] .history-select-shell span,
html[data-theme="dark"] .expiry-select-shell>span,
html[data-theme="dark"] .admin-page-info,
html[data-theme="dark"] .admin-page-ellipsis{color:#9fa9b5}
html[data-theme="dark"] .admin-pagination{
  background:#20262d;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .expiry-mode-tab{color:#a4aeba}
html[data-theme="dark"] .expiry-mode-tab:hover{color:#9fb2ff}
html[data-theme="dark"] .expiry-mode-tab.active{
  color:#9fb2ff;
  background:#252b33;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .expiry-relative-card{
  background:#20262d;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .expiry-relative-card small,
html[data-theme="dark"] .expiry-stepper span,
html[data-theme="dark"] .expiry-preview small,
html[data-theme="dark"] .expiry-preview span{color:#9fa9b5}
html[data-theme="dark"] .expiry-relative-card strong,
html[data-theme="dark"] .expiry-preview strong{color:#e6ebf1}
html[data-theme="dark"] .expiry-stepper{
  background:#1b2128;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .expiry-stepper input{
  background:#1b2128!important;
  color:#edf1f5!important;
  box-shadow:var(--dark-inset-shadow)!important;
}
html[data-theme="dark"] .expiry-preview{background:#1b2128;box-shadow:var(--dark-inset-shadow)}
html[data-theme="dark"] .admin-soft-select-label{color:#a0aab6}
html[data-theme="dark"] .admin-soft-select-button{
  background:#1b2128;
  color:#e5eaf0;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .admin-soft-select-button:hover:not(:disabled),
html[data-theme="dark"] .admin-soft-select.is-open .admin-soft-select-button{
  background:#1d232a;
  box-shadow:var(--dark-inset-shadow),0 0 0 2px rgba(111,140,255,.10);
}
html[data-theme="dark"] .admin-soft-select-copy strong{color:#e7ecf2}
html[data-theme="dark"] .admin-soft-select-copy small{color:#9aa4b0}
html[data-theme="dark"] .admin-soft-select-chevron::before,
html[data-theme="dark"] .admin-soft-select-chevron::after{background:#a4aeba}
html[data-theme="dark"] .admin-soft-select-menu{
  border-color:rgba(255,255,255,.08);
  background:#252b33;
  box-shadow:0 18px 38px rgba(0,0,0,.45),-5px -5px 12px rgba(255,255,255,.018);
}
html[data-theme="dark"] .admin-soft-select-option{color:#c4ccd6}
html[data-theme="dark"] .admin-soft-select-option:hover{background:#2a313a;box-shadow:var(--dark-raised-small)}
html[data-theme="dark"] .admin-soft-select-option.active{
  background:linear-gradient(135deg,rgba(91,148,245,.14),rgba(113,88,230,.14));
  box-shadow:inset 0 0 0 1px rgba(111,140,255,.12),var(--dark-raised-small);
}
html[data-theme="dark"] .admin-soft-select-option strong{color:#e7ecf2}
html[data-theme="dark"] .admin-soft-select-option small,
html[data-theme="dark"] .admin-soft-select-empty{color:#9aa4b0}
html[data-theme="dark"] .admin-soft-select-option>i{background:#343b44;box-shadow:var(--dark-inset-shadow)}
html[data-theme="dark"] .security-warning-summary>div,
html[data-theme="dark"] .security-warning-presets button{
  background:#20262d;
  box-shadow:var(--dark-raised-small);
}
html[data-theme="dark"] .security-warning-summary small,
html[data-theme="dark"] .security-warning-label,
html[data-theme="dark"] .security-warning-custom span{color:#9fa9b5}
html[data-theme="dark"] .security-warning-summary strong{color:#e6ebf1}
html[data-theme="dark"] .security-warning-presets button{color:#aeb8c4}
html[data-theme="dark"] .security-warning-presets button.active{
  color:#9fb2ff;
  background:#1b2128;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .security-warning-custom input{
  background:#1b2128;
  color:#edf1f5;
  box-shadow:var(--dark-inset-shadow);
}
html[data-theme="dark"] .security-warning-feedback{background:rgba(89,189,120,.10);color:#85d49d}
html[data-theme="dark"] .security-warning-feedback.bad{background:rgba(238,106,97,.12);color:#ef928b}

/* ===== 夜间模式 v2：修复残留浅色阴影 / 选择框 / 系统管理弹窗 =====
   仅作用于 data-theme="dark"，白天模式不改。 */

/* 1/2. 登录页与主导航 JX Logo：去掉浅色模式遗留的白色光晕 */
html[data-theme="dark"] .brand-icon,
html[data-theme="dark"] #loginGate .brand-icon,
html[data-theme="dark"] .side-brand .brand-icon{
  box-shadow:
    -3px -3px 8px rgba(255,255,255,.012),
    5px 6px 12px rgba(0,0,0,.42)!important;
}

/* 登录主按钮与设备查询按钮：保留蓝紫层次，但阴影改为暗色环境参数 */
html[data-theme="dark"] #loginBtn{
  box-shadow:
    0 7px 15px rgba(0,0,0,.38),
    0 0 0 1px rgba(124,145,255,.08)!important;
}
html[data-theme="dark"] #loginBtn:hover{
  box-shadow:
    0 8px 17px rgba(0,0,0,.42),
    0 0 0 1px rgba(124,145,255,.12)!important;
}
html[data-theme="dark"] #loginBtn:active{
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.30),
    inset -2px -2px 5px rgba(255,255,255,.035)!important;
}
html[data-theme="dark"] .query-search-row button{
  box-shadow:
    0 6px 13px rgba(0,0,0,.34),
    0 0 0 1px rgba(104,139,255,.08)!important;
}
html[data-theme="dark"] .query-search-row button:hover:not(:disabled){
  box-shadow:
    0 7px 15px rgba(0,0,0,.39),
    0 0 0 1px rgba(104,139,255,.11)!important;
}
html[data-theme="dark"] .query-search-row button:active:not(:disabled){
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.30),
    inset -2px -2px 5px rgba(255,255,255,.03)!important;
}

/* 3. SIM 当前启用卡图标：覆盖 is-active 的高优先级浅色阴影 */
html[data-theme="dark"] .sim-active-overview .sim-active-icon,
html[data-theme="dark"] .sim-active-overview.is-active .sim-active-icon{
  background:#252b33!important;
  box-shadow:
    inset 0 0 0 1px rgba(89,189,120,.10),
    -3px -3px 7px rgba(255,255,255,.012),
    4px 5px 10px rgba(0,0,0,.40)!important;
}
html[data-theme="dark"] .sim-active-overview .sim-active-icon span::before,
html[data-theme="dark"] .sim-active-overview.is-active .sim-active-icon span::before{
  background:#252b33!important;
}

/* 4. 系统管理 > 用户注册：用户层级 / 所属上级。
   V26 基础规则带 !important，v2 用同等作用域 + !important 正确压过浅色背景。 */
html[data-theme="dark"] #adminView .admin-form .admin-soft-select-button,
html[data-theme="dark"] #adminView #adminRoleSelectButton,
html[data-theme="dark"] #adminView #adminParentSelectButton{
  background:#1b2128!important;
  color:#e7ecf2!important;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.42),
    inset -3px -3px 7px rgba(255,255,255,.022)!important;
}
html[data-theme="dark"] #adminView .admin-form .admin-soft-select-button:hover:not(:disabled),
html[data-theme="dark"] #adminView .admin-form .admin-soft-select.is-open .admin-soft-select-button{
  background:#1d232a!important;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.40),
    inset -3px -3px 7px rgba(255,255,255,.024),
    0 0 0 2px rgba(111,140,255,.09)!important;
}
html[data-theme="dark"] #adminView .admin-soft-select-copy strong{color:#e6ebf1!important}
html[data-theme="dark"] #adminView .admin-soft-select-copy small{color:#9aa4b0!important}
html[data-theme="dark"] #adminView #adminRoleSelectButton .admin-soft-select-copy small::before{color:#747f8b}

/* 5. 临时用户转正式：目标层级 / 归属方式 / 上级用户选择卡全部深色化 */
html[data-theme="dark"] .user-action-panel .convert-label,
html[data-theme="dark"] .user-action-panel .convert-parent-box>span{color:#9ca6b2}
html[data-theme="dark"] .user-action-panel .convert-choice{
  background:#252b33;
  color:#c4ccd6;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.012),
    4px 4px 9px rgba(0,0,0,.36);
}
html[data-theme="dark"] .user-action-panel .convert-choice:hover{
  background:#282f38;
  box-shadow:
    -2px -2px 6px rgba(255,255,255,.014),
    4px 4px 9px rgba(0,0,0,.38);
}
html[data-theme="dark"] .user-action-panel .convert-choice strong{color:#dbe2e9}
html[data-theme="dark"] .user-action-panel .convert-choice small{color:#98a2ae}
html[data-theme="dark"] .user-action-panel .convert-choice.active{
  background:#1b2128;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.42),
    inset -3px -3px 7px rgba(255,255,255,.022);
}
html[data-theme="dark"] .user-action-panel .convert-choice.active strong{color:#9fb2ff}
html[data-theme="dark"] .user-action-panel .convert-parent-options{
  background:#1b2128;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.42),
    inset -3px -3px 7px rgba(255,255,255,.022);
}
html[data-theme="dark"] .user-action-panel .convert-parent-option{color:#c4ccd6}
html[data-theme="dark"] .user-action-panel .convert-parent-option:hover{background:rgba(255,255,255,.035)}
html[data-theme="dark"] .user-action-panel .convert-parent-option.active{
  background:#252b33;
  box-shadow:
    -2px -2px 5px rgba(255,255,255,.012),
    3px 3px 7px rgba(0,0,0,.34);
}
html[data-theme="dark"] .user-action-panel .convert-parent-option strong{color:#dce3ea}
html[data-theme="dark"] .user-action-panel .convert-parent-option small{color:#98a2ae}
html[data-theme="dark"] .user-action-panel .convert-parent-option.active strong{color:#9fb2ff}

/* 6. 安全警告设置：取消多层“硬黑槽”，重新整理为统一的暗色 Soft UI 层级 */
html[data-theme="dark"] .security-warning-panel{
  background:#252b33!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-summary{
  background:transparent!important;
  box-shadow:none!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-summary>div{
  background:#222830!important;
  box-shadow:
    -3px -3px 8px rgba(255,255,255,.012),
    4px 5px 10px rgba(0,0,0,.34)!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-summary small,
html[data-theme="dark"] .security-warning-panel .security-warning-label,
html[data-theme="dark"] .security-warning-panel .security-warning-custom span{color:#9da7b3!important}
html[data-theme="dark"] .security-warning-panel .security-warning-summary strong{color:#edf1f5!important}
html[data-theme="dark"] .security-warning-panel .security-warning-presets{
  background:transparent!important;
  box-shadow:none!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-presets button{
  background:#222830!important;
  color:#b2bbc6!important;
  box-shadow:
    -3px -3px 7px rgba(255,255,255,.012),
    4px 4px 9px rgba(0,0,0,.34)!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-presets button:hover{
  background:#272e37!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-presets button.active{
  background:#1b2128!important;
  color:#a8b8ff!important;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.42),
    inset -3px -3px 7px rgba(255,255,255,.022)!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-custom{
  background:transparent!important;
  box-shadow:none!important;
}
html[data-theme="dark"] .security-warning-panel .security-warning-custom input{
  background:#1b2128!important;
  color:#edf1f5!important;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.42),
    inset -3px -3px 7px rgba(255,255,255,.022)!important;
}
html[data-theme="dark"] .security-warning-panel .modal-warning{
  background:rgba(207,164,66,.13)!important;
  color:#e2c979!important;
  box-shadow:none!important;
}
html[data-theme="dark"] .security-warning-panel .warning-reset-btn{
  background:#252b33!important;
  color:#d68b46!important;
  box-shadow:var(--dark-raised-small)!important;
}
html[data-theme="dark"] .security-warning-panel .warning-reset-btn:active{box-shadow:var(--dark-inset-shadow)!important}

/* 7. 封禁记录标题右侧可见范围标签：覆盖基础样式里的白色凸起阴影 */
html[data-theme="dark"] #adminBanHistoryCard > .card-heading > .soft-chip{
  background:rgba(101,126,230,.16)!important;
  color:#a8b8ff!important;
  box-shadow:
    -2px -2px 6px rgba(255,255,255,.012),
    4px 4px 9px rgba(0,0,0,.36)!important;
}

/* ===== 夜间模式 v3：必填提示条 + 设备状态悬浮按钮阴影修复 =====
   只覆盖 dark 主题，白天模式保持原样。 */

/* 1. 系统管理必填/错误提示：基础规则带 #adminView，v3 用更高优先级覆盖，避免夜间模式出现浅粉白条。 */
html[data-theme="dark"] #adminView .admin-notice{
  border-color:rgba(238,106,97,.14)!important;
  background:#35272a!important;
  color:#ef8a84!important;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.30),
    inset -2px -2px 5px rgba(255,255,255,.018)!important;
}

/* 2. 右下角“状态”悬浮按钮：保留蓝紫渐变，只移除浅色 Soft UI 白光。 */
html[data-theme="dark"] .device-summary-float{
  box-shadow:
    0 8px 18px rgba(0,0,0,.42),
    0 0 0 1px rgba(111,140,255,.08)!important;
}
html[data-theme="dark"] .device-summary-float:hover{
  box-shadow:
    0 10px 21px rgba(0,0,0,.46),
    0 0 0 1px rgba(111,140,255,.11)!important;
}
html[data-theme="dark"] .device-summary-float.is-dragging{
  box-shadow:
    0 6px 14px rgba(0,0,0,.44),
    0 0 0 1px rgba(111,140,255,.07)!important;
}

/* ===== 夜间模式 v5：手机端最近提交日期选择外层去除亮色 Soft UI =====
   仅覆盖 dark + <=720px；桌面端、白天模式、日期业务逻辑均不变。 */
@media(max-width:720px){
  html[data-theme="dark"] #adminRecentCard #recentDateForm .history-date-selects{
    background:#1b2128 !important;
    border:0 !important;
    box-shadow:
      inset 3px 3px 7px rgba(0,0,0,.36),
      inset -3px -3px 7px rgba(255,255,255,.025) !important;
  }
}

/* ===== 公告推送 v5：记录卡 + 阅读明细弹窗 ===== */
.announcement-bell-btn{position:relative}
.announcement-unread-badge{
  position:absolute;right:-5px;top:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;
  display:grid;place-items:center;background:#ea4335;color:#fff;font-size:9px;font-weight:900;line-height:1;
  box-shadow:0 3px 7px rgba(234,67,53,.28);border:2px solid #e5e9ee
}

/* 系统管理里的公告模块：一张 admin-card，不再套大卡 */
#adminAnnouncementsCard .announcement-workspace-card{padding:22px;border-radius:22px}
#adminAnnouncementsCard .announcement-workspace-heading{
  display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:14px
}
#adminAnnouncementsCard .announcement-workspace-heading h3{margin:5px 0 0;color:#3f4853;font-size:18px;line-height:1.2}
#adminAnnouncementsCard .announcement-scope-hint{
  width:100%;margin:0 0 14px;padding:10px 12px;border-radius:13px;background:#dde2e8;color:#87929e;
  font-size:10px;font-weight:700;line-height:1.55;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.68)
}

/* 内部只保留“推送信息 / 公告推送记录”两个轻量 Tab */
#adminAnnouncementsCard .announcement-workspace-tabs{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;padding:6px;margin:0 0 16px;
  border-radius:15px;background:#dde2e8;
  box-shadow:inset 2px 2px 6px rgba(163,177,198,.18),inset -2px -2px 6px rgba(255,255,255,.64)
}
#adminAnnouncementsCard .announcement-workspace-tab{
  min-width:0;min-height:44px;padding:7px 12px;border:0;border-radius:11px;background:transparent;color:#6e7985;
  display:grid;align-content:center;gap:2px;text-align:left;cursor:pointer;transition:.15s ease;font:inherit
}
#adminAnnouncementsCard .announcement-workspace-tab span{font-size:11px;font-weight:900}
#adminAnnouncementsCard .announcement-workspace-tab small{font-size:8.5px;color:#929ca7;font-weight:700}
#adminAnnouncementsCard .announcement-workspace-tab:hover:not(.active){color:#536fbf;background:rgba(255,255,255,.14)}
#adminAnnouncementsCard .announcement-workspace-tab.active{
  color:#5575dc;background:#dfe3e8;
  box-shadow:inset 4px 4px 8px rgba(156,169,187,.24),inset -4px -4px 8px rgba(255,255,255,.72)
}
#adminAnnouncementsCard .announcement-workspace-tab.active small{color:#8491a1}
#adminAnnouncementsCard .announcement-workspace-tab:focus-visible{outline:2px solid rgba(66,133,244,.24);outline-offset:2px}
#adminAnnouncementsCard .announcement-workspace-panel.hidden{display:none!important}

/* 推送信息：严格参考用户授权，一条提示 + 普通表单 + 右下按钮 */
#adminAnnouncementsCard .announcement-create-form{margin:0;display:grid;gap:0}
#adminAnnouncementsCard .announcement-compose-fields{display:grid;gap:12px}
#adminAnnouncementsCard .announcement-compose-fields textarea{min-height:210px;resize:vertical;line-height:1.75}
#adminAnnouncementsCard .announcement-content-count{justify-self:end;margin-top:-2px;color:#9aa3ad;font-size:9px;font-weight:700}
#adminAnnouncementsCard .announcement-content-count b{color:#89939e}
#adminAnnouncementsCard .announcement-create-actions{justify-content:space-between;margin-top:14px}
#adminAnnouncementsCard .announcement-create-actions>span{max-width:620px;line-height:1.55}
#adminAnnouncementsCard .announcement-create-actions .soft-btn{min-width:120px}

/* 记录页：按确认的紧凑记录卡布局展示统计，名单放在“明细”弹窗 */
#adminAnnouncementsCard .announcement-record-toolbar{
  display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:12px
}
#adminAnnouncementsCard .announcement-record-heading{min-width:0}
#adminAnnouncementsCard .announcement-record-heading h4{margin:0;color:#404a55;font-size:15px;line-height:1.3}
#adminAnnouncementsCard .announcement-record-heading p{margin:4px 0 0;color:#9aa3ad;font-size:9.5px;font-weight:700}
#adminAnnouncementsCard .announcement-record-toolbar .soft-btn{flex:0 0 auto;min-width:76px}
#adminAnnouncementsCard .announcement-record-list{display:grid;gap:9px}
#adminAnnouncementsCard .announcement-record-empty{padding:28px!important;border-radius:14px;background:#e4e8ed}
#adminAnnouncementsCard .announcement-record-card{
  padding:13px 14px;border-radius:14px;background:#eef1f5;
  box-shadow:-2px -2px 6px rgba(255,255,255,.78),2px 2px 6px rgba(163,177,198,.15)
}
#adminAnnouncementsCard .announcement-record-card.retracted{opacity:.82}
#adminAnnouncementsCard .announcement-record-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
#adminAnnouncementsCard .announcement-record-copy{min-width:0;flex:1}
#adminAnnouncementsCard .announcement-record-title-line{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}
#adminAnnouncementsCard .announcement-record-title-line h4{
  margin:0;color:#48525d;font-size:12.5px;line-height:1.4;font-weight:900;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
#adminAnnouncementsCard .announcement-record-meta{display:flex;gap:10px;flex-wrap:wrap;margin-top:4px;color:#9aa3ad;font-size:9px;font-weight:700}
#adminAnnouncementsCard .announcement-record-actions{display:flex;gap:6px;flex:0 0 auto}
#adminAnnouncementsCard .announcement-record-action{padding:6px 11px;color:#6b7684;background:#e5e9ee;box-shadow:inset 1px 1px 3px rgba(163,177,198,.16),inset -1px -1px 3px rgba(255,255,255,.72)}
#adminAnnouncementsCard .announcement-record-action:hover{color:#4f70dc}
#adminAnnouncementsCard .announcement-record-action.detail{color:#4f70dc;background:rgba(66,133,244,.09)}
#adminAnnouncementsCard .announcement-record-stats{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:10px}
#adminAnnouncementsCard .announcement-stat-pill{padding:4px 10px;border-radius:999px;font-size:9px;font-weight:900;white-space:nowrap;background:#e5e9ee;color:#6b7684}
#adminAnnouncementsCard .announcement-stat-pill.read{background:rgba(76,175,130,.12);color:#3f8f68}
#adminAnnouncementsCard .announcement-stat-pill.unread{background:rgba(224,130,90,.12);color:#c0703f}
#adminAnnouncementsCard .announcement-read-progress{flex:1;min-width:90px;height:6px;border-radius:999px;background:#e2e7ec;overflow:hidden;box-shadow:inset 1px 1px 3px rgba(163,177,198,.20)}
#adminAnnouncementsCard .announcement-read-progress>i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#5a91f4,#725bdc);transition:width .22s ease}
#adminAnnouncementsCard .announcement-stat-pill.rate{min-width:52px;text-align:center}

/* 确认推送：复用现有 permission-modal / expiry 组件，只补公告所需结构 */
.announcement-send-panel{width:min(660px,calc(100vw - 28px))}
.announcement-send-body{display:grid;gap:16px}
.announcement-send-section{padding-bottom:16px;border-bottom:1px solid rgba(120,130,145,.10)}
.announcement-send-section:last-child{padding-bottom:0;border-bottom:0}
.announcement-send-section-head{
  display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px;color:#697480;font-size:10px;font-weight:800
}
.announcement-send-section-head strong{color:#4d5762;font-size:11px}
.announcement-send-section-head span{color:#8d97a2;font-size:9px}
.announcement-audience-groups{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;margin-bottom:9px}
.announcement-audience-groups button{
  min-height:48px;border:0;border-radius:11px;background:#e9edf1;color:#69737e;cursor:pointer;
  display:grid;gap:2px;justify-items:center;align-content:center;
  box-shadow:-2px -2px 5px rgba(255,255,255,.75),2px 2px 5px rgba(163,177,198,.15);transition:.15s ease
}
.announcement-audience-groups button b{font-size:13px;font-weight:900;line-height:1}
.announcement-audience-groups button small{font-size:8.5px;font-weight:700;opacity:.74}
.announcement-audience-groups button.active{color:#4f70dc;background:rgba(66,133,244,.08);box-shadow:inset 0 0 0 1.5px rgba(66,133,244,.32)}
.announcement-audience-groups button.partial{color:#6d7ca7;background:rgba(66,133,244,.045)}
.announcement-audience-groups button:disabled{opacity:.38;cursor:not-allowed;box-shadow:none}
.announcement-search{
  height:40px;margin-bottom:8px;padding:0 11px;display:flex;align-items:center;gap:7px;border-radius:11px;background:#dde2e8;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.70)
}
.announcement-search>span{color:#87929e}
.announcement-search input{min-width:0;width:100%;border:0;outline:0;background:transparent;color:#525d68;font:inherit;font-size:11px}
.announcement-search input::placeholder{color:#99a2ac}
.announcement-team-tree{display:grid;gap:2px;max-height:265px;overflow:auto;padding-right:2px}
.announcement-tree-node{
  display:grid;grid-template-columns:18px 20px minmax(0,1fr);gap:7px;align-items:center;
  padding:6px 9px 6px calc(7px + var(--ann-depth,0) * 18px);border-radius:9px;transition:.13s ease
}
.announcement-tree-node:hover{background:rgba(66,133,244,.045)}
.announcement-tree-node.root-node{background:rgba(66,133,244,.025)}
.announcement-tree-arrow{
  width:18px;height:20px;padding:0;border:0;background:transparent;color:#a0a9b3;font-size:8px;cursor:pointer;transition:transform .16s ease
}
.announcement-tree-arrow.open{transform:rotate(90deg)}
.announcement-tree-arrow.leaf{visibility:hidden}
.announcement-tree-check{
  width:18px;height:18px;padding:0;border:0;border-radius:6px;background:#dde2e8;position:relative;cursor:pointer;
  box-shadow:inset 1px 1px 3px rgba(163,177,198,.22),inset -1px -1px 3px rgba(255,255,255,.75)
}
.announcement-tree-node.selected .announcement-tree-check{background:linear-gradient(135deg,#5a91f4,#725bdc);box-shadow:0 2px 6px rgba(74,101,197,.24)}
.announcement-tree-node.selected .announcement-tree-check:after{content:"✓";position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-size:11px;font-weight:900}
.announcement-tree-node.partial .announcement-tree-check{background:rgba(66,133,244,.14);box-shadow:inset 0 0 0 1px rgba(66,133,244,.30)}
.announcement-tree-node.partial .announcement-tree-check:after{content:"";position:absolute;left:4px;right:4px;top:8px;height:2px;border-radius:2px;background:#4f70dc}
.announcement-tree-copy{display:grid;gap:1px;min-width:0}
.announcement-tree-copy strong{color:#48525d;font-size:11px;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.announcement-tree-copy small{color:#98a1ab;font-size:8.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.announcement-read-presets{margin-top:0}
.announcement-read-presets .expiry-preset{min-height:34px}
.announcement-read-custom{margin-top:10px}
.announcement-read-custom input{max-width:180px}
.announcement-send-mode.expiry-mode-tabs{grid-template-columns:repeat(3,minmax(0,1fr));margin-bottom:0}
.announcement-schedule-field{display:grid;gap:8px;margin-top:10px}
.announcement-schedule-field.hidden{display:none!important}
.announcement-schedule-preview{
  padding:9px 11px;border-radius:11px;background:rgba(66,133,244,.07);color:#6f7fa0;font-size:9px;font-weight:800;text-align:center
}
.announcement-send-actions{margin-top:18px}

/* 用户侧公告弹窗 / 历史：保持原系统 Soft UI */
.announcement-viewer-panel{width:min(680px,calc(100vw - 28px))}
.announcement-static-backdrop{cursor:default}
.announcement-viewer-body{display:grid;gap:14px;padding-top:4px}
.announcement-viewer-content{
  min-height:150px;max-height:42vh;overflow:auto;white-space:pre-wrap;word-break:break-word;padding:18px;border-radius:17px;
  background:#dde2e8;color:#47525e;line-height:1.9;font-size:13px;
  box-shadow:inset 3px 3px 8px rgba(163,177,198,.22),inset -3px -3px 8px rgba(255,255,255,.76)
}
.announcement-read-hint{padding:11px 13px;border-radius:13px;background:rgba(66,133,244,.08);color:#6d7fa2;font-size:10px;font-weight:800}
.announcement-stealth-notice{margin:0;font-size:10px;font-weight:850;line-height:1.7}
.announcement-viewer-panel .device-summary-close:disabled,.announcement-viewer-panel .soft-btn:disabled{opacity:.48;cursor:not-allowed;transform:none}
.announcement-history-panel{width:min(780px,calc(100vw - 28px))}
.announcement-history-list{display:grid;gap:10px;max-height:58vh;overflow:auto;padding:3px}
.announcement-history-item{
  display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;padding:14px;border-radius:16px;background:#e5e9ee;
  box-shadow:-3px -3px 7px rgba(255,255,255,.68),3px 3px 7px rgba(163,177,198,.17)
}
.announcement-history-item.unread{box-shadow:inset 3px 3px 7px rgba(163,177,198,.16),inset -3px -3px 7px rgba(255,255,255,.72)}
.announcement-history-item-main{min-width:0}
.announcement-history-item-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.announcement-history-item-title strong{color:#46515c;font-size:12px}
.announcement-history-item p{margin:7px 0;color:#78838e;font-size:10px;line-height:1.6}
.announcement-history-item small{color:#9aa3ad;font-size:9px}
.announcement-history-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;color:#8e98a3;font-size:10px}
.announcement-history-footer>div{display:flex;gap:8px}
.announcement-admin-detail-panel{width:min(720px,calc(100vw - 28px));padding:0!important;overflow:hidden!important}
.announcement-admin-detail-panel .announcement-detail-head{margin:0;padding:20px 22px 16px;border-bottom:1px solid rgba(130,140,152,.13)}
.announcement-admin-detail-panel .announcement-detail-head h2{margin:0;font-size:17px}
.announcement-admin-detail-panel .announcement-detail-head p{margin-top:5px;font-size:10px}
.announcement-detail-filters{display:flex;gap:8px;padding:16px 22px 12px}
.announcement-detail-filters button{
  min-width:72px;height:36px;border:0;border-radius:10px;background:#e5e9ee;color:#6b7684;font:inherit;font-size:10.5px;font-weight:850;cursor:pointer;
  box-shadow:-2px -2px 5px rgba(255,255,255,.72),2px 2px 5px rgba(163,177,198,.15)
}
.announcement-detail-filters button.active{color:#4f70dc;background:rgba(66,133,244,.07);box-shadow:inset 0 0 0 1.5px rgba(66,133,244,.35)}
.announcement-recipient-table-wrap{margin:0 22px;max-height:54vh;border-radius:0;overflow:auto}
.announcement-detail-table{min-width:560px}
.announcement-detail-table th{font-size:9px;padding:8px 10px}
.announcement-detail-table td{font-size:10.5px;padding:10px;border-bottom-color:rgba(130,140,152,.09)}
.announcement-detail-table td strong{font-size:11px}
.announcement-detail-table td small{font-size:8.5px}
.announcement-detail-role{display:inline-block;padding:3px 8px;border-radius:7px;background:#e5e9ee;color:#78828d;font-size:8.5px;font-weight:850;white-space:nowrap}
.announcement-detail-status{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:999px;font-size:9px;font-weight:850;white-space:nowrap}
.announcement-detail-status i{width:5px;height:5px;border-radius:50%;background:currentColor}
.announcement-detail-status.read{background:rgba(76,175,130,.12);color:#3f8f68}
.announcement-detail-status.unread{background:rgba(224,130,90,.12);color:#c0703f}
.announcement-detail-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:14px;padding:13px 22px 18px;border-top:1px solid rgba(130,140,152,.13);color:#9aa3ad;font-size:9.5px}
.announcement-detail-footer .soft-btn{min-width:82px}


@media(max-width:720px){
  #adminAnnouncementsCard .announcement-workspace-card{padding:16px;border-radius:18px}
  #adminAnnouncementsCard .announcement-workspace-heading h3{font-size:17px}
  #adminAnnouncementsCard .announcement-scope-hint{margin-bottom:12px;padding:9px 10px}
  #adminAnnouncementsCard .announcement-workspace-tabs{margin-bottom:13px}
  #adminAnnouncementsCard .announcement-workspace-tab{min-height:42px;padding:6px 9px}
  #adminAnnouncementsCard .announcement-workspace-tab span{font-size:10px}
  #adminAnnouncementsCard .announcement-workspace-tab small{font-size:8px}
  #adminAnnouncementsCard .announcement-compose-fields textarea{min-height:180px}
  #adminAnnouncementsCard .announcement-create-actions{align-items:stretch;flex-direction:column}
  #adminAnnouncementsCard .announcement-create-actions .soft-btn{width:100%}
  #adminAnnouncementsCard .announcement-record-toolbar{align-items:stretch;flex-direction:column}
  #adminAnnouncementsCard .announcement-record-toolbar .soft-btn{width:100%}
  #adminAnnouncementsCard .announcement-record-head{flex-direction:column;gap:10px}
  #adminAnnouncementsCard .announcement-record-actions{width:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(72px,1fr))}
  #adminAnnouncementsCard .announcement-record-actions .admin-mini-btn{width:100%}
  #adminAnnouncementsCard .announcement-record-title-line h4{white-space:normal}
  #adminAnnouncementsCard .announcement-read-progress{order:10;flex-basis:calc(100% - 60px)}
  .announcement-send-panel{padding:19px 15px}
  .announcement-audience-groups{grid-template-columns:repeat(2,minmax(0,1fr))}
  .announcement-send-section-head{align-items:flex-start;flex-direction:column;gap:3px}
  .announcement-read-presets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .announcement-read-presets .expiry-preset{width:100%}
  .announcement-history-item{grid-template-columns:1fr}
  .announcement-history-item>.soft-btn{width:100%}
  .announcement-history-footer{align-items:stretch;flex-direction:column}
  .announcement-history-footer>div{display:grid;grid-template-columns:1fr 1fr}
  .announcement-history-footer .soft-btn{width:100%}
  .announcement-admin-detail-panel .announcement-detail-head{padding:18px 16px 14px}
  .announcement-detail-filters{padding:14px 16px 10px;display:grid;grid-template-columns:repeat(3,1fr)}
  .announcement-detail-filters button{min-width:0;width:100%}
  .announcement-recipient-table-wrap{margin:0 16px}
  .announcement-detail-footer{padding:12px 16px 16px}
  .announcement-viewer-content{max-height:48vh}
}

/* 深色：完全沿用现有系统管理的深色 Soft UI，不出现白色发光 */
html[data-theme="dark"] .announcement-unread-badge{border-color:#252b33;box-shadow:0 3px 8px rgba(0,0,0,.42)}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-workspace-heading h3{color:#eef2f6}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-scope-hint,
html[data-theme="dark"] #adminAnnouncementsCard .announcement-workspace-tabs{
  background:#1b2128;color:#9fa9b5;box-shadow:var(--dark-inset-shadow)
}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-workspace-tab{color:#aab3bd}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-workspace-tab small{color:#818b97}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-workspace-tab:hover:not(.active){color:#9fb2ff;background:rgba(111,140,255,.05)}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-workspace-tab.active{
  color:#9fb2ff;background:#20262d;box-shadow:var(--dark-inset-shadow)
}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-workspace-tab.active small{color:#8e99a7}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-content-count,
html[data-theme="dark"] #adminAnnouncementsCard .announcement-content-count b{color:#89939f}
html[data-theme="dark"] .announcement-send-section{border-bottom-color:rgba(255,255,255,.055)}
html[data-theme="dark"] .announcement-send-section-head{color:#919ba7}
html[data-theme="dark"] .announcement-send-section-head strong{color:#c8cfd7}
html[data-theme="dark"] .announcement-send-section-head span{color:#8d97a3}
html[data-theme="dark"] .announcement-audience-groups button{
  background:#252b33;color:#aeb7c2;box-shadow:var(--dark-raised-small)
}
html[data-theme="dark"] .announcement-audience-groups button.active{color:#9fb2ff;background:#20262d;box-shadow:inset 0 0 0 1.5px rgba(130,153,255,.28)}
html[data-theme="dark"] .announcement-audience-groups button.partial{color:#aab8ea;background:#222830}
html[data-theme="dark"] .announcement-search{background:#1b2128;box-shadow:var(--dark-inset-shadow)}
html[data-theme="dark"] .announcement-search>span{color:#89939f}
html[data-theme="dark"] .announcement-search input{color:#dce2e9}
html[data-theme="dark"] .announcement-search input::placeholder{color:#68727e}
html[data-theme="dark"] .announcement-tree-node:hover{background:rgba(111,140,255,.055)}
html[data-theme="dark"] .announcement-tree-node.root-node{background:rgba(111,140,255,.025)}
html[data-theme="dark"] .announcement-tree-arrow{color:#77828f}
html[data-theme="dark"] .announcement-tree-check{background:#1b2128;box-shadow:var(--dark-inset-shadow)}
html[data-theme="dark"] .announcement-tree-copy strong{color:#dce2e9}
html[data-theme="dark"] .announcement-tree-copy small{color:#8e98a4}
html[data-theme="dark"] .announcement-schedule-preview{background:rgba(111,140,255,.09);color:#aab8ea}
html[data-theme="dark"] .announcement-viewer-content{background:#1b2128!important;color:#e5eaf0!important;box-shadow:var(--dark-inset-shadow)!important}
html[data-theme="dark"] .announcement-read-hint{background:rgba(111,140,255,.10);color:#aab8ea}
html[data-theme="dark"] .announcement-history-item{background:#252b33;box-shadow:var(--dark-raised-small)}
html[data-theme="dark"] .announcement-history-item.unread{background:#20262d;box-shadow:var(--dark-inset-shadow)}
html[data-theme="dark"] .announcement-history-item-title strong{color:#edf1f5}
html[data-theme="dark"] .announcement-history-item p,
html[data-theme="dark"] .announcement-history-item small{color:#929ca8}


html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-heading h4{color:#e5eaf0}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-heading p,
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-meta{color:#8e98a4}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-empty{background:#1b2128;color:#929ca8!important}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-card{background:#252b33;box-shadow:var(--dark-raised-small)}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-title-line h4{color:#e1e6eb}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-action{background:#20262d;color:#a8b1bc;box-shadow:var(--dark-inset-shadow)}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-action:hover,
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-action.detail{color:#9fb2ff;background:rgba(111,140,255,.08)}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-stat-pill.total,
html[data-theme="dark"] #adminAnnouncementsCard .announcement-stat-pill.rate{background:#20262d;color:#aab3bd}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-read-progress{background:#1b2128;box-shadow:var(--dark-inset-shadow)}
html[data-theme="dark"] .announcement-admin-detail-panel{background:#252b33!important}
html[data-theme="dark"] .announcement-admin-detail-panel .announcement-detail-head{border-bottom-color:rgba(255,255,255,.06)}
html[data-theme="dark"] .announcement-admin-detail-panel .announcement-detail-head h2{color:#eef2f6}
html[data-theme="dark"] .announcement-admin-detail-panel .announcement-detail-head p{color:#929ca8}
html[data-theme="dark"] .announcement-detail-filters button{background:#252b33;color:#aab3bd;box-shadow:var(--dark-raised-small)}
html[data-theme="dark"] .announcement-detail-filters button.active{color:#9fb2ff;background:#20262d;box-shadow:inset 0 0 0 1.5px rgba(130,153,255,.28)}
html[data-theme="dark"] .announcement-detail-role{background:#20262d;color:#aab3bd}
html[data-theme="dark"] .announcement-detail-footer{border-top-color:rgba(255,255,255,.06);color:#929ca8}

/* ===== 公告推送 v6：定时推送 5 组时间选择器改为自定义 Soft UI Dropdown =====
   仅作用于公告定时推送；不影响系统其他 select / 日期控件。 */
.announcement-schedule-selects .announcement-soft-select{
  position:relative;
  overflow:visible;
}
.announcement-schedule-selects .announcement-soft-select.open{
  box-shadow:
    inset 2px 2px 5px rgba(163,177,198,.18),
    inset -2px -2px 5px rgba(255,255,255,.72),
    0 0 0 2px rgba(79,112,220,.12);
}
.announcement-soft-select-trigger{
  appearance:none;
  -webkit-appearance:none;
  width:100%;
  height:34px;
  padding:0 2px;
  border:0;
  outline:0;
  border-radius:8px;
  background:transparent;
  color:#414a55;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  cursor:pointer;
  font:inherit;
  font-size:12px;
  font-weight:900;
  text-align:left;
}
.announcement-soft-select-trigger:focus-visible{
  box-shadow:0 0 0 2px rgba(79,112,220,.22);
}
.announcement-soft-select-trigger .announcement-soft-select-value{
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  font:inherit;
  font-weight:900;
}
.announcement-soft-select-trigger>i{
  width:14px;
  height:18px;
  flex:0 0 14px;
  display:grid;
  place-items:center;
  color:#707b87;
  font-style:normal;
  font-size:12px;
  line-height:1;
}
.announcement-soft-select-trigger>i::before{content:"▾"}
.announcement-soft-select-trigger.open>i::before{content:"▴"}
.announcement-soft-select-menu{
  position:fixed;
  z-index:3900;
  display:none;
  gap:3px;
  padding:7px;
  overflow-y:auto;
  overscroll-behavior:contain;
  border:1px solid rgba(255,255,255,.72);
  border-radius:13px;
  background:#eef1f5;
  box-shadow:
    -5px -5px 12px rgba(255,255,255,.76),
    8px 10px 22px rgba(116,130,150,.28),
    0 1px 3px rgba(80,92,110,.10);
  scrollbar-width:thin;
  scrollbar-color:rgba(111,124,140,.35) transparent;
}
.announcement-soft-select-menu.open{display:grid}
.announcement-soft-select-menu::-webkit-scrollbar{width:6px}
.announcement-soft-select-menu::-webkit-scrollbar-track{background:transparent}
.announcement-soft-select-menu::-webkit-scrollbar-thumb{background:rgba(111,124,140,.30);border-radius:999px}
.announcement-soft-select-option{
  width:100%;
  min-height:34px;
  padding:7px 10px;
  border:0;
  border-radius:9px;
  background:transparent;
  color:#596470;
  cursor:pointer;
  font:inherit;
  font-size:11px;
  font-weight:850;
  text-align:left;
  transition:background .13s ease,color .13s ease,box-shadow .13s ease;
}
.announcement-soft-select-option:hover,
.announcement-soft-select-option:focus-visible{
  outline:0;
  color:#4f70dc;
  background:rgba(66,133,244,.075);
}
.announcement-soft-select-option.selected{
  color:#fff;
  background:linear-gradient(135deg,#5a91f4,#725bdc);
  box-shadow:0 3px 8px rgba(74,101,197,.24);
}
.announcement-soft-select-option.selected:hover,
.announcement-soft-select-option.selected:focus-visible{
  color:#fff;
  background:linear-gradient(135deg,#5a91f4,#725bdc);
}

html[data-theme="dark"] .announcement-schedule-selects .announcement-soft-select.open{
  background:#20262d;
  box-shadow:
    inset 3px 3px 7px rgba(0,0,0,.34),
    inset -2px -2px 6px rgba(255,255,255,.025),
    0 0 0 2px rgba(125,147,255,.12);
}
html[data-theme="dark"] .announcement-soft-select-trigger{color:#e7ebf0}
html[data-theme="dark"] .announcement-soft-select-trigger>i{color:#9aa5b2}
html[data-theme="dark"] .announcement-soft-select-trigger:focus-visible{
  box-shadow:0 0 0 2px rgba(143,162,255,.22);
}
html[data-theme="dark"] .announcement-soft-select-menu{
  border-color:rgba(255,255,255,.055);
  background:#252b33;
  box-shadow:
    0 16px 34px rgba(0,0,0,.48),
    0 4px 10px rgba(0,0,0,.26),
    inset 1px 1px 0 rgba(255,255,255,.018);
  scrollbar-color:rgba(168,178,190,.24) transparent;
}
html[data-theme="dark"] .announcement-soft-select-menu::-webkit-scrollbar-thumb{background:rgba(168,178,190,.20)}
html[data-theme="dark"] .announcement-soft-select-option{color:#c6ced8}
html[data-theme="dark"] .announcement-soft-select-option:hover,
html[data-theme="dark"] .announcement-soft-select-option:focus-visible{
  color:#aebcff;
  background:rgba(111,140,255,.09);
}
html[data-theme="dark"] .announcement-soft-select-option.selected,
html[data-theme="dark"] .announcement-soft-select-option.selected:hover,
html[data-theme="dark"] .announcement-soft-select-option.selected:focus-visible{
  color:#fff;
  background:linear-gradient(135deg,#587fea,#7359dc);
  box-shadow:0 4px 10px rgba(50,70,155,.28);
}

@media(max-width:720px){
  .announcement-soft-select-menu{border-radius:12px;padding:6px}
  .announcement-soft-select-option{min-height:38px;font-size:12px;padding:8px 10px}
}


/* v8: 公告阅读要求选中态（修复 dark 通用 !important 覆盖） */
#announcementReadPresets .expiry-preset.active{
  color:#fff !important;
  background:linear-gradient(135deg,#5b94f5,#7158e6) !important;
  box-shadow:0 5px 13px rgba(74,100,205,.19) !important;
}
#announcementReadPresets .expiry-preset:active{
  transform:translateY(1px);
}
html[data-theme="dark"] #announcementReadPresets .expiry-preset.active{
  color:#fff !important;
  background:linear-gradient(135deg,#5b84f1,#7258e4) !important;
  box-shadow:0 5px 14px rgba(45,60,150,.36) !important;
}
html[data-theme="dark"] #announcementReadPresets .expiry-preset:hover:not(.active){
  color:#9fb2ff !important;
  background:#29313b !important;
  box-shadow:-3px -3px 7px rgba(255,255,255,.025),3px 3px 7px rgba(0,0,0,.34) !important;
}

/* ===== 用户管理：功能权限摘要 v1 =====
   仅收紧“功能权限”列的展示密度；完整权限通过 +N 查看。 */
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(3) .permission-summary{
  display:inline-flex;
  align-items:center;
  gap:6px;
  max-width:100%;
  min-width:0;
  white-space:nowrap;
  vertical-align:middle;
}
#adminView #adminUserManagementSection .permission-summary-text{
  display:inline-block;
  min-width:0;
  max-width:100%;
  overflow:hidden;
  text-overflow:ellipsis;
  color:inherit;
}
#adminView #adminUserManagementSection .admin-permission-more{
  flex:0 0 auto;
  min-width:28px;
  height:26px;
  padding:0 8px;
  border:0;
  border-radius:9px;
  background:#e4e7eb;
  color:#5672dc;
  font:inherit;
  font-size:10px;
  font-weight:900;
  line-height:26px;
  cursor:pointer;
  box-shadow:-2px -2px 5px rgba(255,255,255,.72),2px 2px 5px rgba(163,177,198,.18);
  transition:transform .16s ease,box-shadow .16s ease,color .16s ease;
}
#adminView #adminUserManagementSection .admin-permission-more:hover{color:#4265df;transform:translateY(-1px)}
#adminView #adminUserManagementSection .admin-permission-more:active{
  transform:none;
  box-shadow:inset 2px 2px 4px rgba(163,177,198,.22),inset -2px -2px 4px rgba(255,255,255,.68);
}
#adminView #adminUserManagementSection .admin-permission-direct{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  height:24px;
  padding:0 7px;
  border-radius:8px;
  background:rgba(113,88,230,.10);
  color:#7158e6;
  font-size:9px;
  font-weight:900;
}
.admin-permission-summary-panel{width:min(480px,calc(100vw - 28px));}
.admin-permission-full-list{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px;
}
.admin-permission-full-item{
  min-width:0;
  padding:12px 13px;
  border-radius:14px;
  background:#e2e6eb;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.16),inset -2px -2px 5px rgba(255,255,255,.68);
}
.admin-permission-full-item span{display:block;color:#46505b;font-size:12px;font-weight:850;line-height:1.4}
.admin-permission-full-item small{display:block;margin-top:3px;color:#8c96a1;font-size:9px;font-weight:750}
.admin-permission-full-item.root-direct{background:rgba(113,88,230,.08)}
.admin-permission-full-item.root-direct span{color:#7158e6}
.admin-permission-full-empty{
  grid-column:1/-1;
  padding:24px 12px;
  text-align:center;
  color:#98a1ab;
  font-size:11px;
  font-weight:800;
}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-permission-more{
  background:#20262d;
  color:#9fb2ff;
  box-shadow:-2px -2px 5px rgba(255,255,255,.025),2px 2px 6px rgba(0,0,0,.34);
}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-permission-more:hover{color:#b5c4ff}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-permission-more:active{
  box-shadow:inset 2px 2px 4px rgba(0,0,0,.36),inset -2px -2px 4px rgba(255,255,255,.025);
}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-permission-direct{
  background:rgba(132,115,255,.12);
  color:#a9b8ff;
}
html[data-theme="dark"] .admin-permission-full-item{
  background:#1d232a;
  box-shadow:inset 2px 2px 5px rgba(0,0,0,.32),inset -2px -2px 5px rgba(255,255,255,.025);
}
html[data-theme="dark"] .admin-permission-full-item span{color:#e8edf2}
html[data-theme="dark"] .admin-permission-full-item small{color:#98a2ae}
html[data-theme="dark"] .admin-permission-full-item.root-direct{background:rgba(132,115,255,.09)}
html[data-theme="dark"] .admin-permission-full-item.root-direct span{color:#a9b8ff}
html[data-theme="dark"] .admin-permission-full-empty{color:#98a2ae}
@media(max-width:720px){
  .admin-permission-full-list{gap:8px}
  .admin-permission-summary-panel{width:min(460px,calc(100vw - 44px))}
}
.admin-permission-summary-panel .permission-actions{display:flex;justify-content:flex-end}
.admin-permission-summary-panel .permission-actions .soft-btn{width:auto;min-width:92px}

/* ===== 用户管理：功能权限列居中 v2 =====
   让“功能权限”真正位于“标签”和“账户期限”两列的视觉中点；
   仅调整第三列对齐，不改列顺序、权限摘要逻辑或其他表格列。 */
#adminView #adminUserManagementSection .admin-user-tree-table th:nth-child(3),
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(3){
  text-align:center;
}
#adminView #adminUserManagementSection .admin-user-tree-table td:nth-child(3) .permission-summary{
  justify-content:center;
  margin-left:auto;
  margin-right:auto;
}

/* ===== 公告推送：撤回后重新编辑 / 操作按钮状态 ===== */
#adminAnnouncementsCard .announcement-record-action.edit:not(:disabled){color:#4f70dc;background:rgba(66,133,244,.09)}
#adminAnnouncementsCard .announcement-record-action:disabled{opacity:.40;cursor:not-allowed;box-shadow:none;transform:none}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-action.edit:not(:disabled){color:#9fb2ff;background:rgba(111,140,255,.08)}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-action:disabled{opacity:.34;background:#1d232a;color:#77818d;box-shadow:none}

/* ===== 公告推送 v10：同公告编辑 / 撤回后重新推送 / 实时阅读统计 ===== */
#adminAnnouncementsCard .announcement-record-action.resend{
  color:#4f70dc;
  background:rgba(66,133,244,.09);
  font-weight:850;
}
#adminAnnouncementsCard .announcement-record-action.resend:hover{
  color:#405fc8;
  background:rgba(66,133,244,.13);
}
.announcement-admin-edit-panel{width:min(620px,calc(100vw - 28px));}
.announcement-admin-edit-body{display:grid;gap:14px;padding:4px 0 2px;}
.announcement-admin-edit-body .modal-field{display:grid;gap:7px;}
.announcement-admin-edit-body .modal-field>span{color:#697480;font-size:10px;font-weight:850;}
.announcement-admin-edit-body .modal-field input,
.announcement-admin-edit-body .modal-field textarea{
  width:100%;
  border:0;
  outline:0;
  border-radius:14px;
  background:#e4e8ed;
  color:#46515c;
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.18),inset -2px -2px 5px rgba(255,255,255,.72);
}
.announcement-admin-edit-body .modal-field input{min-height:42px;padding:0 13px;}
.announcement-admin-edit-body .modal-field textarea{min-height:190px;padding:12px 13px;resize:vertical;line-height:1.65;}
.announcement-admin-edit-body .announcement-content-count{justify-self:end;margin-top:-7px;color:#929ca7;font-size:9px;font-weight:750;}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-action.resend{
  color:#9fb2ff;
  background:rgba(111,140,255,.08);
}
html[data-theme="dark"] #adminAnnouncementsCard .announcement-record-action.resend:hover{background:rgba(111,140,255,.13);}
html[data-theme="dark"] .announcement-admin-edit-body .modal-field>span{color:#aeb7c1;}
html[data-theme="dark"] .announcement-admin-edit-body .modal-field input,
html[data-theme="dark"] .announcement-admin-edit-body .modal-field textarea{
  background:#1b2128;
  color:#eef2f6;
  box-shadow:inset 2px 2px 5px rgba(0,0,0,.34),inset -2px -2px 5px rgba(255,255,255,.025);
}
html[data-theme="dark"] .announcement-admin-edit-body .announcement-content-count{color:#98a2ae;}
@media(max-width:720px){
  .announcement-admin-edit-panel{width:min(580px,calc(100vw - 32px));}
  .announcement-admin-edit-body .modal-field textarea{min-height:170px;}
}


/* ===== 用户注册提交反馈：固定可见 Soft UI 成功 / 失败提示 ===== */
.admin-action-feedback{
  position:fixed;
  left:50%;
  top:24px;
  z-index:10020;
  width:min(460px,calc(100vw - 32px));
  min-height:78px;
  padding:14px 48px 14px 14px;
  display:grid;
  grid-template-columns:42px minmax(0,1fr);
  align-items:center;
  gap:12px;
  border:1px solid rgba(120,130,145,.08);
  border-radius:20px;
  background:var(--panel);
  color:var(--text);
  box-shadow:-8px -8px 18px rgba(255,255,255,.70),8px 8px 20px rgba(163,177,198,.26);
  opacity:0;
  transform:translate(-50%,-12px) scale(.985);
  transition:opacity .18s ease,transform .22s cubic-bezier(.22,.9,.35,1);
  pointer-events:none;
}
.admin-action-feedback.is-visible{opacity:1;transform:translate(-50%,0) scale(1);pointer-events:auto}
.admin-action-feedback-icon{
  width:42px;
  height:42px;
  border-radius:14px;
  display:grid;
  place-items:center;
  font-size:19px;
  font-weight:1000;
  background:var(--inset);
  box-shadow:inset 2px 2px 5px rgba(163,177,198,.20),inset -2px -2px 5px rgba(255,255,255,.72);
}
.admin-action-feedback.success .admin-action-feedback-icon{color:var(--green)}
.admin-action-feedback.error .admin-action-feedback-icon{color:var(--red)}
.admin-action-feedback-copy{min-width:0;display:grid;gap:3px}
.admin-action-feedback-title{font-size:14px;font-weight:950;line-height:1.35;color:var(--text)}
.admin-action-feedback-message{font-size:12px;font-weight:750;line-height:1.5;color:var(--muted)}
.admin-action-feedback-detail{font-size:10px;font-weight:800;line-height:1.45;color:var(--muted);overflow-wrap:anywhere}
.admin-action-feedback-close{
  position:absolute;
  right:12px;
  top:12px;
  width:30px;
  height:30px;
  padding:0;
  border:0;
  border-radius:10px;
  display:grid;
  place-items:center;
  color:var(--muted);
  background:var(--panel);
  font-size:18px;
  line-height:1;
  box-shadow:-2px -2px 5px rgba(255,255,255,.66),2px 2px 5px rgba(163,177,198,.20);
}
#adminView #userCreateForm button[type="submit"].is-loading{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  cursor:wait;
  opacity:.72;
  pointer-events:none;
}
#adminView #userCreateForm button[type="submit"].is-loading::before{
  content:"";
  width:11px;
  height:11px;
  border:2px solid currentColor;
  border-right-color:transparent;
  border-radius:50%;
  animation:adminRegistrationSpin .65s linear infinite;
}
@keyframes adminRegistrationSpin{to{transform:rotate(360deg)}}

html[data-theme="dark"] .admin-action-feedback{
  border-color:rgba(255,255,255,.035);
  box-shadow:-7px -7px 16px rgba(48,55,64,.40),8px 8px 20px rgba(4,7,10,.42);
}
html[data-theme="dark"] .admin-action-feedback-icon{
  box-shadow:inset 2px 2px 5px rgba(4,7,10,.34),inset -2px -2px 5px rgba(58,66,76,.32);
}
html[data-theme="dark"] .admin-action-feedback-close{
  box-shadow:-2px -2px 5px rgba(50,58,68,.24),2px 2px 5px rgba(4,7,10,.34);
}
@media(max-width:720px){
  .admin-action-feedback{top:14px;width:calc(100vw - 24px);min-height:72px;padding:12px 44px 12px 12px;border-radius:17px;grid-template-columns:38px minmax(0,1fr);gap:10px}
  .admin-action-feedback-icon{width:38px;height:38px;border-radius:12px;font-size:17px}
  .admin-action-feedback-title{font-size:13px}
  .admin-action-feedback-message{font-size:11px}
  .admin-action-feedback-detail{font-size:10px}
}
@media(prefers-reduced-motion:reduce){
  .admin-action-feedback{transition:none}
  #adminView #userCreateForm button[type="submit"].is-loading::before{animation-duration:1.2s}
}

/* ===== 设备状态总结：手机端沿用桌面 Soft UI 结构 v1 =====
   仅手机宽度生效：保留“编号｜内容｜状态”三列，不重新设计卡片。 */
@media (max-width:600px){
  .device-summary-modal{
    padding:12px max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));
  }

  .device-summary-panel,
  .device-summary-panel.soft-card{
    width:100%;
    max-height:calc(100vh - 24px);
    max-height:calc(100dvh - 24px);
    padding:20px;
    border-radius:24px;
    overflow:auto;
    -webkit-overflow-scrolling:touch;
  }

  .device-summary-head{
    align-items:flex-start;
    gap:14px;
    padding-bottom:17px;
    margin-bottom:14px;
  }

  .device-summary-head h2{
    margin:6px 0 5px;
    font-size:24px;
    line-height:1.2;
    letter-spacing:-.02em;
  }

  .device-summary-head p{
    font-size:12px;
    line-height:1.4;
  }

  .device-summary-close{
    width:42px;
    height:42px;
    flex:0 0 42px;
    border-radius:14px;
    font-size:25px;
  }

  .device-summary-content{
    gap:12px;
  }

  .device-summary-item{
    grid-template-columns:44px minmax(0,1fr) auto;
    align-items:center;
    gap:12px;
    min-height:88px;
    padding:15px 16px;
    border-radius:19px;
  }

  .device-summary-item > .status-pill{
    grid-column:auto;
    justify-self:end;
    align-self:center;
    padding:7px 10px;
    font-size:11px;
  }

  .summary-index{
    width:42px;
    height:42px;
    border-radius:14px;
    font-size:12px;
  }

  .summary-copy small{
    margin-bottom:4px;
    font-size:10px;
    line-height:1.35;
  }

  .summary-copy strong{
    font-size:15px;
    line-height:1.4;
  }

  .summary-copy span{
    margin-top:4px;
    font-size:11px;
    line-height:1.45;
  }
}

@media (max-width:370px){
  .device-summary-panel,
  .device-summary-panel.soft-card{
    padding:17px 14px;
  }

  .device-summary-item{
    grid-template-columns:40px minmax(0,1fr) auto;
    gap:9px;
    padding:14px 12px;
  }

  .summary-index{
    width:38px;
    height:38px;
    border-radius:13px;
  }

  .summary-copy strong{
    font-size:14px;
  }

  .device-summary-item > .status-pill{
    padding:6px 9px;
    font-size:10px;
  }
}

/* ===== 设备状态总结：手机端关闭按钮正方形与精准居中 v2 ===== */
@media (max-width:600px){
  #deviceSummaryClose.device-summary-close{
    position:relative;
    display:flex;
    align-items:center;
    justify-content:center;
    width:42px;
    min-width:42px;
    max-width:42px;
    height:42px;
    min-height:42px;
    max-height:42px;
    flex:0 0 42px;
    aspect-ratio:1 / 1;
    padding:0;
    margin:0;
    border:0;
    line-height:1;
    font-size:0;
    text-align:center;
    appearance:none;
    -webkit-appearance:none;
  }

  #deviceSummaryClose.device-summary-close::before,
  #deviceSummaryClose.device-summary-close::after{
    content:"";
    position:absolute;
    left:50%;
    top:50%;
    width:15px;
    height:2px;
    margin:0;
    border-radius:999px;
    background:currentColor;
    transform-origin:center;
    pointer-events:none;
  }

  #deviceSummaryClose.device-summary-close::before{
    transform:translate(-50%,-50%) rotate(45deg);
  }

  #deviceSummaryClose.device-summary-close::after{
    transform:translate(-50%,-50%) rotate(-45deg);
  }
}


/* ===== Tooltip 提示统一 v1：最近查询暗色 + 账户快捷按钮 Soft UI ===== */
/* 最近查询 / 登录时间 / 到期时间 / 长标签：夜间模式不再使用浅色气泡和白色发光。 */
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-soft-tooltip::after{
  border-color:rgba(255,255,255,.08);
  background:#252b33;
  color:#c3cbd5;
  box-shadow:-3px -3px 7px rgba(255,255,255,.022),4px 4px 10px rgba(0,0,0,.42);
}
html[data-theme="dark"] #adminView #adminUserManagementSection .admin-soft-tooltip::before{
  background:#252b33;
  box-shadow:2px 2px 4px rgba(0,0,0,.20);
}
/* 手机 Safari 触摸 tabindex 元素时通常进入 focus，而非 focus-visible。 */
#adminView #adminUserManagementSection .admin-soft-tooltip:focus::after{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,0);
}
#adminView #adminUserManagementSection .admin-soft-tooltip:focus::before{
  opacity:1;
  visibility:visible;
}
#adminView #adminUserManagementSection .admin-user-tree-table td:has(.admin-soft-tooltip:focus){
  position:relative;
  z-index:20;
}

/* 主题 / 公告快捷按钮：替代浏览器原生 title 黑框。 */
.account-quick-action[data-account-tooltip]{
  position:relative;
  overflow:visible;
}
.account-quick-action[data-account-tooltip]::after{
  content:attr(data-account-tooltip);
  position:absolute;
  left:50%;
  top:calc(100% + 10px);
  z-index:160;
  min-width:max-content;
  max-width:190px;
  padding:7px 10px;
  border:1px solid rgba(118,132,148,.12);
  border-radius:9px;
  background:#e7ebf0;
  color:#606b77;
  font-size:11px;
  font-weight:800;
  line-height:1.3;
  letter-spacing:0;
  white-space:nowrap;
  box-shadow:-3px -3px 7px rgba(255,255,255,.76),4px 4px 9px rgba(163,177,198,.22);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transform:translate(-50%,-4px);
  transition:opacity .14s ease,transform .14s ease,visibility .14s ease;
}
.account-quick-action[data-account-tooltip]::before{
  content:"";
  position:absolute;
  left:50%;
  top:calc(100% + 6px);
  z-index:161;
  width:8px;
  height:8px;
  border-left:1px solid rgba(118,132,148,.10);
  border-top:1px solid rgba(118,132,148,.10);
  background:#e7ebf0;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transform:translateX(-50%) rotate(45deg);
  transition:opacity .14s ease,visibility .14s ease;
}
.account-quick-action[data-account-tooltip]:hover::after,
.account-quick-action[data-account-tooltip]:focus-visible::after,
.account-quick-action[data-account-tooltip].is-tooltip-visible::after{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,0);
}
.account-quick-action[data-account-tooltip]:hover::before,
.account-quick-action[data-account-tooltip]:focus-visible::before,
.account-quick-action[data-account-tooltip].is-tooltip-visible::before{
  opacity:1;
  visibility:visible;
}
html[data-theme="dark"] .account-quick-action[data-account-tooltip]::after{
  border-color:rgba(255,255,255,.08);
  background:#252b33;
  color:#c3cbd5;
  box-shadow:-3px -3px 7px rgba(255,255,255,.022),4px 4px 10px rgba(0,0,0,.42);
}
html[data-theme="dark"] .account-quick-action[data-account-tooltip]::before{
  border-color:rgba(255,255,255,.055);
  background:#252b33;
}
@media(max-width:720px){
  .account-quick-action[data-account-tooltip]::after{
    font-size:10px;
    padding:7px 9px;
  }
}
@media(prefers-reduced-motion:reduce){
  .account-quick-action[data-account-tooltip]::after,
  .account-quick-action[data-account-tooltip]::before{
    transition:none;
  }
}

/* ===== 公告推送 v13：发送方式固定三按钮单行 ===== */
#announcementSendModal .announcement-send-mode.expiry-mode-tabs{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
  grid-auto-flow:column;
  align-items:stretch;
}
#announcementSendModal .announcement-send-mode .expiry-mode-tab{
  min-width:0;
  width:100%;
  white-space:nowrap;
}
@media(max-width:720px){
  #announcementSendModal .announcement-send-mode.expiry-mode-tabs{
    grid-template-columns:repeat(3,minmax(0,1fr))!important;
    gap:6px;
    padding:6px;
  }
  #announcementSendModal .announcement-send-mode .expiry-mode-tab{
    padding:0 6px;
    font-size:10.5px;
  }
}


/* ===== 移动端底部导航动态均分 + 公告阅读按钮收紧 v1 ===== */
@media(max-width:820px){
  /* 仅按实际可见入口均分：4 个即四等分，5 个即五等分，不保留隐藏权限入口空位 */
  .mobile-nav{
    display:flex;
    grid-template-columns:none;
  }
  .mobile-nav-item{
    flex:1 1 0;
    min-width:0;
  }
}

/* 公告阅读动作保持单按钮居中，避免继承 permission-actions 的双列布局 */
.announcement-viewer-panel .permission-actions{
  display:flex;
  align-items:center;
  justify-content:center;
}
.announcement-viewer-panel .permission-actions .soft-btn{
  width:auto;
  min-width:180px;
  max-width:100%;
  padding:11px 24px;
  text-align:center;
}
@media(max-width:720px){
  .announcement-viewer-panel .permission-actions{
    display:flex;
    grid-template-columns:none;
    justify-content:center;
  }
  .announcement-viewer-panel .permission-actions .soft-btn{
    width:min(220px,100%);
    min-width:0;
  }
}


/* ===== 全局页面滚动条仅隐藏外观 v1 =====
   保留滚轮 / 触控板 / 触摸滚动；只隐藏浏览器最外层滚动条。 */
html,
body{
  scrollbar-width:none;          /* Firefox / 部分安卓 Firefox */
  -ms-overflow-style:none;       /* 旧 Edge / IE 兼容 */
}
html::-webkit-scrollbar,
body::-webkit-scrollbar{
  width:0!important;
  height:0!important;
  display:none;
  background:transparent;        /* Chrome / Edge / Safari / Android Chromium / WebView */
}

/* ===== 鉴权首屏滚动与导航闪现修复 v2 =====
   loginGate 是登录态真正的滚动容器：保留触摸滚动，只隐藏其滚动条外观。 */
#loginGate.login-gate{
  scrollbar-width:none;
  -ms-overflow-style:none;
  overflow-x:hidden;
}
#loginGate.login-gate::-webkit-scrollbar{
  width:0!important;
  height:0!important;
  display:none!important;
  background:transparent!important;
}


/* ===== iOS Safari viewport 滚动条结构隔离 v3 =====
   手机端不再让 document/viewport 承担主页面滚动：
   appShell 固定铺满视觉视口并作为唯一主滚动容器。
   这样 Safari 页面级滚动指示条没有可绘制的 viewport scroll range。
   PC 保持原有 document 滚动方式。 */
@media (max-width:820px){
  html,
  body{
    width:100%;
    height:100%;
    min-height:0!important;
    overflow:hidden!important;
    overscroll-behavior:none;
  }

  #appShell.app-shell:not(.auth-pending){
    position:fixed;
    inset:0;
    width:100%;
    height:100%;
    height:100dvh;
    min-height:0!important;
    overflow-x:hidden;
    overflow-y:auto;
    overscroll-behavior-y:contain;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none!important;
    -ms-overflow-style:none!important;
  }
  #appShell.app-shell:not(.auth-pending)::-webkit-scrollbar{
    width:0!important;
    height:0!important;
    display:none!important;
    background:transparent!important;
  }

  /* 登录页同样只在自身内部滚动，避免任何内容溢出重新撑出 viewport。 */
  #loginGate.login-gate{
    overflow-x:hidden!important;
    overflow-y:auto!important;
    overscroll-behavior-y:contain;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none!important;
    -ms-overflow-style:none!important;
  }
  #loginGate.login-gate::-webkit-scrollbar{
    width:0!important;
    height:0!important;
    display:none!important;
    background:transparent!important;
  }
}

/* ===== V56.1 手机端管理弹窗回归修复 =====
   1) permission-modal 系列关闭按钮在 iOS Safari 下强制保持真正 1:1 正方形，X 使用伪元素精准居中；
   2) 登录记录 8 列表格只允许在表格容器内部横向滚动，禁止撑宽整个弹窗；
   3) 仅手机端生效，不改变 PC / 业务逻辑 / 深浅色主题变量。 */
@media (max-width:720px){
  .permission-modal{
    padding:
      max(12px,env(safe-area-inset-top))
      max(12px,env(safe-area-inset-right))
      max(12px,env(safe-area-inset-bottom))
      max(12px,env(safe-area-inset-left));
    overflow:hidden;
  }

  .permission-panel{
    width:100%;
    max-width:100%;
    max-height:calc(100vh - 24px);
    max-height:calc(100dvh - 24px);
    overflow-x:hidden;
    overflow-y:auto;
    -webkit-overflow-scrolling:touch;
  }

  .permission-head{
    min-width:0;
  }

  .permission-head > div{
    min-width:0;
    flex:1 1 auto;
  }

  .permission-panel .permission-head > .device-summary-close{
    position:relative;
    display:flex;
    align-items:center;
    justify-content:center;
    width:42px;
    min-width:42px;
    max-width:42px;
    height:42px;
    min-height:42px;
    max-height:42px;
    flex:0 0 42px;
    aspect-ratio:1 / 1;
    padding:0;
    margin:0;
    border:0;
    border-radius:14px;
    line-height:1;
    font-size:0;
    text-align:center;
    appearance:none;
    -webkit-appearance:none;
    box-sizing:border-box;
  }

  .permission-panel .permission-head > .device-summary-close::before,
  .permission-panel .permission-head > .device-summary-close::after{
    content:"";
    position:absolute;
    left:50%;
    top:50%;
    width:15px;
    height:2px;
    margin:0;
    border-radius:999px;
    background:currentColor;
    transform-origin:center;
    pointer-events:none;
  }

  .permission-panel .permission-head > .device-summary-close::before{
    transform:translate(-50%,-50%) rotate(45deg);
  }

  .permission-panel .permission-head > .device-summary-close::after{
    transform:translate(-50%,-50%) rotate(-45deg);
  }

  .login-history-panel{
    width:100%;
    max-width:100%;
    overflow-x:hidden;
  }

  .login-history-table-wrap{
    width:100%;
    min-width:0;
    max-width:100%;
    overflow-x:auto;
    overflow-y:auto;
    overscroll-behavior-x:contain;
    -webkit-overflow-scrolling:touch;
  }

  .login-history-table{
    width:max-content;
    min-width:980px;
  }
}

/* =========================================================
   v56.2 - 登录记录表格列宽收紧
   目的：避免“登录地址 / 登录IP / 运营商”被自动表格布局拉得过散。
   仅影响登录记录弹窗，不改变其它 admin-table。
   ========================================================= */
.login-history-table{
  table-layout:fixed;
  width:1040px !important;
  min-width:1040px !important;
  max-width:none;
}

.login-history-table th,
.login-history-table td{
  box-sizing:border-box;
}

.login-history-table th:nth-child(1),
.login-history-table td:nth-child(1){width:50px;}
.login-history-table th:nth-child(2),
.login-history-table td:nth-child(2){width:155px;}
.login-history-table th:nth-child(3),
.login-history-table td:nth-child(3){width:105px;}
.login-history-table th:nth-child(4),
.login-history-table td:nth-child(4){width:115px;}
.login-history-table th:nth-child(5),
.login-history-table td:nth-child(5){width:105px;}
.login-history-table th:nth-child(6),
.login-history-table td:nth-child(6){width:200px;}
.login-history-table th:nth-child(7),
.login-history-table td:nth-child(7){width:175px;}
.login-history-table th:nth-child(8),
.login-history-table td:nth-child(8){width:135px;}

.login-history-table .login-history-region{
  min-width:0;
  width:200px;
  overflow-wrap:anywhere;
}

.login-history-table .login-history-ip{
  width:175px;
}

/* =========================================================
   v58 - 订购套餐（仅新增模块，不改现有套餐/图表样式）
   ========================================================= */
.package-order-card{
  margin:20px 0;
  padding:20px 22px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:20px;
}
.package-order-copy{min-width:0}
.package-order-copy>small{display:block;color:#8e98a3;font-size:10px;font-weight:900;letter-spacing:.08em}
.package-order-copy h3{margin:5px 0 6px;color:#414a55;font-size:19px}
.package-order-copy p{margin:0;max-width:720px;color:#7d8792;font-size:12px;line-height:1.65}
.package-order-action{display:flex;align-items:center;justify-content:flex-end;gap:13px;flex:0 0 auto}
.package-order-device{padding:9px 12px;border-radius:12px;background:#e1e5ea;color:#7a8490;font-size:11px;box-shadow:inset 2px 2px 5px rgba(163,177,198,.20),inset -2px -2px 5px rgba(255,255,255,.72)}
.package-order-device strong{margin-left:5px;color:#47515d;font-size:12px}
.package-order-panel{width:min(620px,calc(100vw - 28px))}
.package-order-form{display:grid;gap:15px}
.package-order-field{display:grid;gap:7px;color:#697480;font-size:12px;font-weight:800}
.package-order-field>small{color:#929ca7;font-size:10px;font-weight:700;line-height:1.5}
.package-order-control{
  width:100%;box-sizing:border-box;border:0;outline:0;border-radius:12px;padding:12px 14px;
  background:#e1e5ea;color:#424c57;font:inherit;font-weight:700;
  box-shadow:inset 3px 3px 6px rgba(163,177,198,.28),inset -3px -3px 6px rgba(255,255,255,.78);
  transition:box-shadow .2s ease,opacity .2s ease;
}
.package-order-control:focus{box-shadow:inset 3px 3px 6px rgba(163,177,198,.30),inset -3px -3px 6px rgba(255,255,255,.82),0 0 0 3px rgba(66,133,244,.14)}
.package-order-control:disabled{opacity:.62;cursor:not-allowed}
.package-order-textarea{resize:vertical;min-height:86px;line-height:1.55}
.package-order-counter{text-align:right!important;margin-top:-3px}
.package-order-rules{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.package-order-rules label{position:relative;display:flex;align-items:center;gap:9px;min-height:42px;padding:0 13px;border-radius:12px;background:#e5e8ec;color:#66717d;cursor:pointer;box-shadow:-3px -3px 7px rgba(255,255,255,.70),3px 3px 7px rgba(163,177,198,.17);transition:.18s}
.package-order-rules input{position:absolute;opacity:0;pointer-events:none}
.package-order-rules i{width:17px;height:17px;border-radius:50%;background:#d4d9df;box-shadow:inset 2px 2px 4px rgba(130,143,160,.20),inset -2px -2px 4px rgba(255,255,255,.75);position:relative;flex:0 0 17px}
.package-order-rules i:after{content:"";position:absolute;inset:4px;border-radius:50%;background:transparent;transition:.18s}
.package-order-rules input:checked~i:after{background:#4285f4}
.package-order-rules input:checked~b{color:#3f68c8}
.package-order-rules b{font-size:12px}
.package-order-feedback{padding:11px 13px;border-radius:12px;background:rgba(66,133,244,.08);color:#5d6f88;font-size:11px;font-weight:700;line-height:1.6}
.package-order-feedback.bad{background:rgba(234,67,53,.08);color:#a44a43}
.package-order-feedback.good{background:rgba(52,168,83,.09);color:#3a8050}
.package-order-actions .soft-btn{min-width:104px}

@media(max-width:720px){
  .package-order-card{margin:16px 0;padding:17px 15px;display:grid;gap:15px}
  .package-order-action{display:grid;grid-template-columns:1fr;justify-content:stretch}
  .package-order-action .soft-btn{width:100%}
  .package-order-device{text-align:center;overflow-wrap:anywhere}
  .package-order-panel{padding:19px 15px}
  .package-order-rules{grid-template-columns:1fr}
  .package-order-actions{grid-template-columns:1fr 1fr}
  .package-order-actions .soft-btn{width:100%;min-width:0}
}

html[data-theme="dark"] .package-order-copy h3{color:#e1e6eb}
html[data-theme="dark"] .package-order-copy p,
html[data-theme="dark"] .package-order-copy>small,
html[data-theme="dark"] .package-order-field>small{color:#98a2ae}
html[data-theme="dark"] .package-order-device,
html[data-theme="dark"] .package-order-control,
html[data-theme="dark"] .package-order-rules label{background:#252b32;color:#aeb7c1;box-shadow:inset 2px 2px 5px rgba(0,0,0,.20),inset -2px -2px 5px rgba(255,255,255,.025)}
html[data-theme="dark"] .package-order-device strong,
html[data-theme="dark"] .package-order-control{color:#dde3e9}
html[data-theme="dark"] .package-order-rules i{background:#313842;box-shadow:inset 2px 2px 4px rgba(0,0,0,.22),inset -2px -2px 4px rgba(255,255,255,.03)}
