﻿/* ============================================================
   佳霖量化 · 客户端补充样式（登录屏 / 连接指示 / 占位 / 表格）
   基底样式沿用 app.css（从原型 v1 提取，保持视觉一致）
   ============================================================ */

/* ---------- 登录屏 ---------- */
.login{
  position:fixed; inset:0; z-index:100;
  display:flex; align-items:center; justify-content:center;
  background:var(--bg);
  background-image:
    radial-gradient(760px 420px at 50% 26%,rgba(34,211,238,.10),transparent 66%),
    radial-gradient(560px 320px at 84% 96%,rgba(167,139,250,.08),transparent 66%),
    linear-gradient(rgba(26,39,64,.34) 1px,transparent 1px),
    linear-gradient(90deg,rgba(26,39,64,.34) 1px,transparent 1px);
  background-size:auto,auto,36px 36px,36px 36px;
}
.login.hide{display:none}
.login-card{
  width:432px; padding:38px 40px 26px; border-radius:18px; position:relative;
  background:linear-gradient(180deg,rgba(14,22,34,.97),rgba(8,13,22,.99));
  border:1px solid var(--line2);
  box-shadow:0 0 0 1px rgba(34,211,238,.06),0 26px 70px rgba(0,0,0,.72),inset 0 0 40px rgba(34,211,238,.035);
}
.login-logo{width:212px; height:66px; margin:0 auto 10px}
.login-logo img{width:100%; height:100%; object-fit:contain; filter:drop-shadow(0 0 14px rgba(34,211,238,.28))}
.login-t1{text-align:center; font-size:22px; font-weight:700; letter-spacing:.5px; white-space:nowrap}
.login-t2{text-align:center; font-size:11px; color:var(--dim); letter-spacing:3.2px; margin:7px 0 26px}
.fld{margin-bottom:15px}
.fld label{display:block; font-size:13px; color:var(--mid); margin-bottom:7px; letter-spacing:.4px}
.inp{
  width:100%; height:48px; border-radius:10px; padding:0 15px; font-size:16px; color:var(--txt);
  background:linear-gradient(180deg,#0b1220,#080d16); border:1px solid var(--line2); outline:none;
  font-family:var(--sans); transition:.18s;
}
.inp::placeholder{color:var(--faint)}
.inp:focus{border-color:var(--cy); box-shadow:0 0 0 3px rgba(34,211,238,.14),inset 0 0 18px rgba(34,211,238,.06)}
.lg-row{display:flex; align-items:center; justify-content:space-between; margin:2px 0 18px}
.cb{display:flex; align-items:center; gap:9px; font-size:14px; color:var(--mid); cursor:pointer; user-select:none}
.cb i{width:17px; height:17px; border-radius:5px; border:1px solid var(--line2); background:#0a1220;
  display:inline-block; position:relative; transition:.15s}
.cb.on i{background:var(--cyBg); border-color:var(--cy)}
.cb.on i::after{content:""; position:absolute; left:5px; top:2px; width:5px; height:9px;
  border:2px solid var(--cy); border-top:0; border-left:0; transform:rotate(42deg)}
.lnk{font-size:13px; color:var(--cy); cursor:pointer; text-decoration:none; opacity:.9}
.lnk:hover{opacity:1; text-decoration:underline}
.btn{
  width:100%; height:52px; border-radius:11px; border:1px solid var(--cyBd); cursor:pointer;
  font:700 17px var(--sans); letter-spacing:4px; color:#eafcff;
  background:linear-gradient(180deg,rgba(34,211,238,.28),rgba(20,150,180,.16));
  box-shadow:0 0 26px rgba(34,211,238,.24),inset 0 0 20px rgba(34,211,238,.10); transition:.2s;
}
.btn:hover{transform:translateY(-1px); box-shadow:0 0 34px rgba(34,211,238,.42),inset 0 0 24px rgba(34,211,238,.18)}
.btn:disabled{opacity:.5; cursor:not-allowed; transform:none}
.lg-msg{min-height:20px; margin-top:12px; font-size:13px; text-align:center; color:var(--warn)}
.login-stat{
  display:flex; justify-content:center; gap:24px; font-size:13px; color:var(--mid);
  padding-top:16px; margin-top:6px; border-top:1px dashed var(--line);
}
.login-foot{
  position:absolute; left:0; right:0; bottom:16px; display:flex; justify-content:space-between;
  padding:0 26px; font-size:12px; color:var(--faint);
}
.dot{width:9px; height:9px; border-radius:50%; display:inline-block; margin-right:7px; vertical-align:middle; background:var(--faint)}
.dot.ok{background:var(--dn); box-shadow:0 0 9px var(--dn)}
.dot.bad{background:var(--up); box-shadow:0 0 9px var(--up)}
.dot.cy{background:var(--cy); box-shadow:0 0 9px var(--cy)}

/* ---------- 顶栏连接指示 ---------- */
.conn{
  margin-left:14px; display:flex; align-items:center; gap:2px;
  font-size:12.5px; color:var(--dim); padding:6px 12px; border-radius:8px;
  border:1px solid var(--line); background:#0a1018; white-space:nowrap;
}

/* ---------- 占位 ---------- */
.placeholder{
  padding:38px 24px; border:1px dashed var(--line2); border-radius:12px;
  color:var(--dim); font-size:14px; line-height:1.9; background:rgba(255,255,255,.012);
}

/* ---------- 信号表 ---------- */
.sigtable{overflow:auto; border:1px solid var(--line); border-radius:12px; background:var(--pnl)}
.sigtable table{width:100%; border-collapse:collapse; font-size:13.5px}
.sigtable th{
  position:sticky; top:0; text-align:left; padding:10px 14px; font-size:12.5px; color:var(--dim);
  background:#0c1420; border-bottom:1px solid var(--line); font-weight:700; letter-spacing:.5px; z-index:1;
}
.sigtable td{padding:9px 14px; border-bottom:1px solid #121b2b; color:var(--txt)}
.sigtable tr:last-child td{border-bottom:0}
.sigtable .mono{font-family:var(--mono); font-variant-numeric:tabular-nums}
.sigtable .empty{color:var(--dim); padding:26px; text-align:center}
.tag{padding:2px 9px; border-radius:999px; font-size:12px; font-weight:700; white-space:nowrap}
.tag.up{background:var(--upBg); color:var(--up); border:1px solid var(--upBd)}
.tag.dn{background:var(--dnBg); color:var(--dn); border:1px solid var(--dnBd)}
.tag.warn{background:var(--warnBg); color:var(--warn); border:1px solid var(--warnBd)}
.tag.cy{background:var(--cyBg); color:var(--cy); border:1px solid var(--cyBd)}

/* ---------- 设置卡片 ---------- */
.setwrap{display:flex; flex-direction:column; gap:16px; max-width:940px}
.setcard{border:1px solid var(--line); border-radius:12px; background:var(--pnl); padding:18px 20px}
.setcard h3{font-size:16px; font-weight:700; margin-bottom:12px; display:flex; align-items:center; gap:8px}
.setcard h3::before{content:"▍"; color:var(--cy)}
.setrow{display:flex; align-items:center; gap:14px; padding:9px 0; border-bottom:1px solid #121b2b; font-size:14px}
.setrow:last-child{border-bottom:0}
.setrow .k{width:150px; color:var(--dim); flex:0 0 auto}
.setrow .v{font-family:var(--mono); color:var(--txt); flex:1; word-break:break-all}
.setrow .act{flex:0 0 auto}
.btn.sm{width:auto; height:34px; padding:0 16px; font-size:13.5px; letter-spacing:1px; border-radius:8px}
.hint{font-size:12.5px; color:var(--dim); line-height:1.85; margin-top:10px}

/* ---------- 系统告警条（云端失联 / 重启） ---------- */
.sysbanner{display:flex; align-items:center; gap:10px; padding:9px 18px; font-size:14px; font-weight:600; letter-spacing:.4px}
.sysbanner[hidden]{display:none}
.sysbanner.bad{background:#3a1414; color:#ff9b9b; border-bottom:1px solid #7a2a2a}
.sysbanner.warn{background:#3a2f10; color:#ffd479; border-bottom:1px solid #7a6220}
.sb-led{width:9px; height:9px; border-radius:50%; background:currentColor; box-shadow:0 0 8px currentColor; animation:sbpulse 1s infinite}
@keyframes sbpulse{0%,100%{opacity:1}50%{opacity:.22}}
.sb-time{margin-left:auto; font-weight:400; opacity:.85; font-size:12px; font-family:var(--mono)}

/* ---------- 运行日志 / 事件流 ---------- */
.runlog{margin:10px 0 2px}
.rl-head{display:flex; align-items:center; justify-content:space-between; font-size:13px; color:var(--dim); margin:10px 0 6px; font-weight:600}
.rl-cnt{font-weight:400; opacity:.8; font-family:var(--mono)}
.rl-body{max-height:230px; overflow:auto; background:rgba(0,0,0,.30); border:1px solid var(--line); border-radius:8px; padding:10px 12px; font-family:var(--mono); font-size:12px; line-height:1.7; color:#b9c6d2; white-space:pre-wrap; word-break:break-all; margin:0}
.evlist{max-height:200px; overflow:auto; border:1px solid var(--line); border-radius:8px}
.ev{display:flex; gap:10px; padding:6px 10px; font-size:12px; border-bottom:1px solid #121b2b}
.ev:last-child{border-bottom:0}
.ev-t{font-family:var(--mono); color:var(--dim); flex:0 0 132px}
.ev-m{flex:1; word-break:break-all}
.ev.warn .ev-m{color:#ffd479}
.ev.bad .ev-m{color:#ff9b9b}
.empty{padding:14px; text-align:center; color:var(--dim); font-size:13px}

/* ---------- 数据页：健康度 / 一键补全 ---------- */
.databanner{cursor:pointer}
.databanner .sb-time{text-decoration:underline}
.dtcard{
  display:flex; align-items:center; gap:32px; flex-wrap:wrap;
  border:1px solid var(--line); border-radius:14px; background:var(--pnl);
  padding:22px 26px; margin-bottom:16px;
}
.dt-gauge{flex:0 0 auto; text-align:center; min-width:132px;
  border-right:1px solid var(--line); padding-right:28px}
.dt-big{font-size:46px; font-weight:800; line-height:1.05; font-family:var(--mono); letter-spacing:-1px}
.dt-big.ok{color:var(--dn)}
.dt-big.warn{color:var(--warn)}
.dt-big.bad{color:var(--up)}
.dt-lbl{font-size:12.5px; color:var(--dim); letter-spacing:2px; margin-top:6px}
.dt-stats{display:grid; grid-template-columns:repeat(2,minmax(150px,1fr)); gap:10px 34px; flex:1 1 320px}
.dts{display:flex; justify-content:space-between; gap:14px; font-size:14px; border-bottom:1px dashed #16202f; padding-bottom:7px}
.dts .k{color:var(--dim)}
.dts .v{font-family:var(--mono); font-weight:700}
.dt-act{flex:0 0 auto; min-width:224px; display:flex; flex-direction:column; gap:10px}
.dt-act .btn{height:46px; font-size:15px; letter-spacing:2px}
.dt-msg{font-size:12.5px; color:var(--dim); line-height:1.6; min-height:18px; text-align:center}
.dt-msg.ok{color:var(--dn)} .dt-msg.warn{color:var(--warn)} .dt-msg.bad{color:var(--up)}

.dtprog{border:1px solid var(--cyBd); border-radius:12px; background:rgba(34,211,238,.05); padding:14px 16px; margin-bottom:16px}
.dtp-head{display:flex; align-items:center; gap:10px; font-size:14px; font-weight:700; color:var(--cy); margin-bottom:10px}
.led{width:9px;height:9px;border-radius:50%;background:var(--cy);box-shadow:0 0 9px var(--cy);display:inline-block}
.led.pulse{animation:sbpulse 1s infinite}
.dtp-log{max-height:240px; overflow:auto; background:rgba(0,0,0,.34); border:1px solid var(--line); border-radius:8px; padding:10px 12px; margin:0; font-family:var(--mono); font-size:12px; line-height:1.7; color:#b9c6d2; white-space:pre-wrap; word-break:break-all}

.dtable{border:1px solid var(--line); border-radius:12px; background:var(--pnl); overflow:auto}
.dtable table{width:100%; border-collapse:collapse; font-size:13.5px}
.dtable th{position:sticky; top:0; text-align:left; padding:10px 14px; font-size:12.5px; color:var(--dim); background:#0c1420; border-bottom:1px solid var(--line); font-weight:700; letter-spacing:.5px; z-index:1}
.dtable td{padding:9px 14px; border-bottom:1px solid #121b2b}
.dtable tr:last-child td{border-bottom:0}
.dtable .mono{font-family:var(--mono); font-variant-numeric:tabular-nums}
.dtable .empty{color:var(--dim); padding:26px; text-align:center}
.st-dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:8px;vertical-align:middle}
.st-dot.ok{background:var(--dn);box-shadow:0 0 8px var(--dn)}
.st-dot.warn{background:var(--warn);box-shadow:0 0 8px var(--warn)}
.st-dot.bad{background:var(--up);box-shadow:0 0 8px var(--up)}
.miss-cell{font-family:var(--mono); font-size:12px; color:var(--dim); max-width:520px; word-break:break-all}
tr.row-miss td{background:rgba(255,120,120,.05)}


/* ═══════════════ 启动动画（F1 · 钟老板 2026-10-17）═══════════════ */
.boot {
  position: fixed; top: 0; right: 0; bottom: 0; left: 0;
  z-index: 99999; background: #04060a;
  opacity: 1; transition: opacity .62s ease;
}
.boot::before {
  content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0;
  background: #04060a url(boot.jpg) center center / cover no-repeat;
}
.boot.noimg::before { background: #04060a; }
.boot.out { opacity: 0; }
.boot-panel {
  position: absolute; left: 50%; transform: translateX(-50%);
  bottom: 7.5%; width: 46%; min-width: 300px; max-width: 780px;
}
.boot-bar {
  height: 6px; border-radius: 4px; overflow: hidden;
  background: rgba(255,255,255,.12);
  box-shadow: 0 0 0 1px rgba(212,175,55,.28), 0 2px 18px rgba(0,0,0,.85);
}
.boot-bar > i {
  display: block; height: 100%; width: 0;
  background: linear-gradient(90deg, #7d6018, #d4af37 55%, #f7e59a);
  box-shadow: 0 0 16px rgba(212,175,55,.85);
  transition: width .12s linear;
}
.boot-meta {
  display: flex; justify-content: space-between; align-items: center;
  margin-top: 10px; font-size: 13px; letter-spacing: .7px;
  color: #ecdfb8; text-shadow: 0 1px 8px rgba(0,0,0,.95);
}
.boot-meta > b {
  font-variant-numeric: tabular-nums; color: #f7e59a; font-weight: 700;
  text-shadow: 0 1px 8px rgba(0,0,0,.95);
}

/* ═══════════════ 外部告警横幅（H3）═══════════════ */
.notices {
  position: fixed; top: 14px; right: 14px; z-index: 9000;
  display: flex; flex-direction: column; gap: 8px; max-width: 460px;
}
.notice {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 10px 12px; border-radius: 8px; font-size: 12.5px; line-height: 1.5;
  background: rgba(20,24,32,.96); color: #e7eaf0;
  border: 1px solid rgba(212,175,55,.45);
  box-shadow: 0 8px 26px rgba(0,0,0,.55);
  animation: noticeIn .22s ease;
}
.notice.error { border-color: rgba(255,90,90,.7); }
.notice b { color: #f7e59a; font-weight: 700; flex: none; }
.notice span { flex: 1; word-break: break-all; }
.notice i {
  cursor: pointer; font-style: normal; color: #8b93a3; flex: none; padding: 0 2px;
}
.notice i:hover { color: #fff; }
@keyframes noticeIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }


/* ═══════════ 主力接力页（钟老板 2026-10-17 确认稿）═══════════ */
.jlr-status{display:grid; grid-template-columns:repeat(4,1fr); gap:1px;
  background:var(--line); border:1px solid var(--line); border-radius:8px;
  overflow:hidden; margin:0 0 14px}
.jlr-status>div{background:var(--pnl2); padding:11px 16px}
.jlr-status .k{font-size:11px; color:var(--dim); margin-bottom:5px}
.jlr-status .v{font-size:16px; font-weight:700; color:var(--txt)}
.jlr-status .v.warn{color:var(--warn)} .jlr-status .v.cy{color:var(--cy)}

.jlr-table{border:1px solid var(--line); border-radius:8px; overflow:hidden}
.jlr-head,.jlr-row{display:grid;
  grid-template-columns:46px 0.92fr 1.06fr 0.98fr 0.86fr 0.62fr 1.36fr 1.02fr 2.5fr;
  align-items:center; gap:0}
.jlr-head{background:var(--pnl3); height:38px; font-size:12px; font-weight:700; color:var(--dim)}
.jlr-head>span,.jlr-row>span{padding:0 14px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.jlr-row{height:54px; border-top:1px solid var(--line); font-size:13px; color:var(--mid)}
.jlr-row:nth-child(even){background:rgba(14,22,34,.55)}
.jlr-row .nm{font-weight:700; color:var(--txt)}
.jlr-row .seq{color:var(--txt); font-family:var(--mono); font-size:13px; font-weight:700}
.jlr-cand .del{display:inline-block; margin-left:5px; cursor:pointer; color:var(--up);
  font-weight:700; font-style:normal}
.jlr-cand .del:hover{color:#fff}
.jlr-row .nm em{font-style:normal; font-family:var(--mono); font-size:11px; color:var(--dim); font-weight:400; margin-left:5px}
.jlr-row .mono{font-family:var(--mono); font-size:12px}
.jlr-row .prev{font-family:var(--mono); font-size:12px; color:var(--dim)}
.jlr-row .left.warn{color:var(--warn); font-weight:700}
.jlr-row .left.bad{color:var(--up); font-weight:700}
.jlr-cand{display:inline-block; margin-right:6px; padding:2px 7px; border-radius:4px;
  font-size:11px; color:var(--cy2); background:rgba(34,211,238,.06);
  border:1px solid rgba(34,211,238,.30); font-family:var(--mono)}
.jlr-none{font-size:12px; color:var(--faint)}
.jlr-pill{display:inline-flex; align-items:center; gap:7px; padding:5px 12px; border-radius:13px;
  font-size:12px; font-weight:700}
.jlr-pill i{width:8px; height:8px; border-radius:50%; display:block}
.jlr-pill.ok{color:var(--dn); background:var(--dnBg); border:1px solid var(--dnBd)}
.jlr-pill.ok i{background:var(--dn)}
.jlr-pill.warn{color:var(--warn); background:var(--warnBg); border:1px solid var(--warnBd)}
.jlr-pill.warn i{background:var(--warn)}
.jlr-pill.bad{color:var(--up); background:var(--upBg); border:1px solid var(--upBd)}
.jlr-pill.bad i{background:var(--up)}
.jlr-pill.gray{color:var(--dim); background:rgba(109,132,160,.14); border:1px solid rgba(109,132,160,.35)}
.jlr-pill.gray i{background:var(--dim)}
.jlr-op{display:flex; gap:5px; justify-content:flex-end; flex-wrap:wrap; padding-right:4px}
.jlr-head>span, .jlr-row>span{padding:0 8px}
.jlr-btn{padding:5px 9px; font-size:11.5px}
.jlr-btn{padding:6px 12px; border-radius:5px; font-size:12px; cursor:pointer;
  background:var(--pnl3); border:1px solid var(--line2); color:var(--mid); white-space:nowrap}
.jlr-btn:hover{border-color:var(--cy); color:var(--cy)}
.jlr-btn.pri{background:rgba(251,191,36,.10); border-color:var(--warnBd); color:var(--warn); font-weight:700}
.jlr-btn.pri:hover{background:rgba(251,191,36,.20); color:var(--warn)}

.jlr-bottom{display:grid; grid-template-columns:1.62fr 1fr; gap:24px; margin-top:22px}
.jlr-sec-t{font-size:14px; font-weight:700; color:var(--txt); margin-bottom:12px}
.jlr-sec-t>i{font-style:normal; font-size:12px; font-weight:400; color:var(--dim); margin-left:10px}
.jlr-wgrid{display:grid; grid-template-columns:1fr 1fr; gap:14px}
.jlr-wcard{display:flex; align-items:center; gap:12px; padding:12px 14px; border-radius:6px;
  background:var(--pnl2); border:1px solid var(--line)}
.jlr-wcard .t{font-family:var(--mono); font-size:13px; font-weight:700; color:var(--txt)}
.jlr-wcard .r{font-size:11px; color:var(--vio)}
.jlr-wcard .l{font-size:11px; color:var(--mid); margin-left:auto}
.jlr-wcard .d{width:8px; height:8px; border-radius:50%; flex:none}
.jlr-wcard .d.on{background:var(--dn); box-shadow:0 0 8px var(--dn)}
.jlr-wcard .d.off{background:var(--faint)}

.jlr-hlist{border:1px solid var(--line); border-radius:6px; overflow:hidden}
.jlr-hhead,.jlr-hrow{display:grid; grid-template-columns:110px 60px 1fr; align-items:center;
  padding:0 14px; font-size:12px}
.jlr-hhead{height:40px; background:var(--pnl3); color:var(--dim); font-weight:700}
.jlr-hrow{height:40px; border-top:1px solid var(--line); color:var(--mid); font-family:var(--mono)}
.jlr-hrow .p{font-family:var(--sans); font-weight:700; color:var(--cy2)}
.jlr-empty{padding:18px 14px; font-size:12px; color:var(--faint)}

.jlr-mask{position:fixed; inset:0; z-index:9500; background:rgba(4,6,12,.86);
  display:none; align-items:center; justify-content:center}
/* ★bug 修复（2026-10-17）：旧写法同时留了 hidden 属性与 display:flex，
   CSS 压过 hidden ⇒ 遮罩一进页面就全屏盖住，整页黑屏"什么也没有"。
   现在默认 display:none，只由 .on 类显形。 */
.jlr-mask.on{display:flex}
.jlr-card{width:640px; max-width:92vw; border-radius:12px; padding:26px 26px 22px;
  background:var(--pnl2); border:1px solid var(--line2); box-shadow:0 20px 60px rgba(0,0,0,.7)}
.jlr-card h3{font-size:18px; color:var(--txt); margin:0 0 6px}
.jlr-card .sub2{font-size:13px; color:var(--mid); margin-bottom:18px}
.jlr-card .sub2 b{color:var(--cy)}
.jlr-card .kv{display:flex; gap:10px; font-size:13px; color:var(--mid); margin-bottom:16px}
.jlr-card .kv b{color:var(--txt)}
.jlr-card .eff{display:flex; align-items:flex-start; gap:10px; font-size:12px;
  color:var(--mid); margin-bottom:9px; line-height:1.55}
.jlr-card .eff i{width:8px; height:8px; border-radius:50%; margin-top:5px; flex:none}
.jlr-card .eff b{color:var(--txt); font-family:var(--mono)}
.jlr-card .note{padding:12px 14px; border-radius:6px; font-size:12px; line-height:1.7;
  background:rgba(34,211,238,.06); border:1px solid rgba(34,211,238,.32); color:var(--cy); margin-top:8px}
.jlr-card .note small{display:block; color:var(--mid); font-size:11px; margin-top:3px}
.jlr-card .inp2{width:100%; padding:9px 12px; border-radius:6px; font-size:13px;
  background:var(--bg2); border:1px solid var(--line2); color:var(--txt); font-family:var(--mono)}
.jlr-card .lab{font-size:12px; color:var(--dim); margin:14px 0 6px}
.jlr-card .acts{display:flex; gap:12px; justify-content:flex-end; margin-top:22px}
.jlr-card .acts .jlr-btn{padding:10px 20px; font-size:13px}

.jlr-gaps{margin-top:26px}
.jlr-glist{border:1px solid var(--line); border-radius:8px; overflow:hidden}
.jlr-ghead,.jlr-grow{display:grid;
  grid-template-columns:110px 130px 190px 70px 90px 1fr;
  align-items:center; padding:0 14px; font-size:12px}
.jlr-ghead{height:36px; background:var(--pnl3); color:var(--dim); font-weight:700}
.jlr-grow{height:46px; border-top:1px solid var(--line); color:var(--mid)}
.jlr-grow .mono{font-family:var(--mono); font-size:12px}
.jlr-grow b{font-weight:700}
.jlr-grow b.ok{color:var(--dn)} .jlr-grow b.warn{color:var(--warn)} .jlr-grow b.bad{color:var(--up)}
.jlr-gop{display:flex; gap:8px; justify-content:flex-end}
.jlr-sec-t{display:flex; align-items:center; gap:10px}

.jlr-alert{margin:0 0 14px; padding:12px 16px; border-radius:8px;
  background:rgba(255,77,94,.10); border:1px solid rgba(255,77,94,.45); color:var(--up);
  font-size:13px; line-height:1.8}
.jlr-alert b{display:block; margin-bottom:6px; font-size:13.5px}
.jlr-alert-row{display:flex; gap:12px; color:var(--mid); font-size:12px}
.jlr-alert-row .t{color:var(--up); font-weight:700; min-width:160px}
.jlr-alert-row .t em{font-style:normal; font-family:var(--mono); font-weight:400; color:var(--dim)}
.jlr-recycle{margin-top:26px}
.jlr-rlist{border:1px solid var(--line); border-radius:8px; overflow:hidden}
.jlr-rhead,.jlr-rrow{display:grid; grid-template-columns:180px 160px 90px 100px 1fr;
  align-items:center; padding:0 14px; font-size:12px}
.jlr-rhead{height:36px; background:var(--pnl3); color:var(--dim); font-weight:700}
.jlr-rrow{height:46px; border-top:1px solid var(--line); color:var(--mid)}
.jlr-rrow .mono{font-family:var(--mono); font-size:12px}

.jlr-tools{display:flex; gap:10px; margin:0 0 14px; flex-wrap:wrap}
.jlr-tool{position:relative; padding:8px 16px; border-radius:7px; cursor:pointer;
  font-size:12.5px; color:var(--mid); background:var(--pnl2);
  border:1px solid var(--line2); display:flex; align-items:center; gap:7px}
.jlr-tool:hover{border-color:var(--cy); color:var(--cy)}
.jlr-tool.on{background:rgba(34,211,238,.10); border-color:var(--cyBd); color:var(--cy)}
.jlr-badge{background:var(--up); color:#fff; font-size:10.5px; font-weight:700;
  border-radius:9px; padding:1px 6px; line-height:1.5}
.jlr-panel{margin:0 0 16px}
.jlr-ok{color:var(--dn); font-size:13px; padding:10px 14px; border-radius:8px;
  background:rgba(37,193,134,.08); border:1px solid rgba(37,193,134,.35)}

.sigsum{display:flex; align-items:baseline; gap:10px; flex-wrap:wrap;
  padding:14px 18px; margin-bottom:14px; border-radius:10px;
  background:linear-gradient(135deg,rgba(34,211,238,.10),rgba(34,211,238,.02));
  border:1px solid rgba(34,211,238,.28)}
.sigsum .ss-n{font-size:30px; font-weight:800; color:var(--cy); line-height:1;
  font-family:var(--mono); text-shadow:0 0 18px rgba(34,211,238,.45)}
.sigsum .ss-u{font-size:14px; color:var(--mid); margin-right:6px}
.sigsum .ss-r{font-size:13px; color:var(--txt); font-family:var(--mono);
  padding:3px 10px; border-radius:6px; background:rgba(255,255,255,.05)}
.sigsum .ss-f{font-size:12px; color:var(--warn); margin-left:auto}
.sigfilter{display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:14px}
.sigfilter .sf-l{display:flex; align-items:center; gap:6px; font-size:12px; color:var(--dim)}
.sigfilter input[type=date], .sigfilter select{
  padding:6px 10px; border-radius:6px; font-size:12px; font-family:var(--mono);
  background:var(--bg2); border:1px solid var(--line2); color:var(--txt)}
.sigfilter .sf-sep{width:1px; height:18px; background:var(--line2)}
.sf-b{padding:6px 13px; border-radius:6px; font-size:12px; cursor:pointer;
  background:var(--pnl3); border:1px solid var(--line2); color:var(--mid)}
.sf-b:hover{border-color:var(--cy); color:var(--cy)}
.sf-b.on{background:rgba(34,211,238,.12); border-color:var(--cyBd); color:var(--cy); font-weight:700}
.sf-b.sf-reset{margin-left:auto; color:var(--faint)}

.cc-btn{padding:5px 12px; border-radius:6px; font-size:11.5px; cursor:pointer;
  background:rgba(251,191,36,.10); border:1px solid var(--warnBd); color:var(--warn); font-weight:700}
.cc-btn:hover{background:rgba(251,191,36,.22)}
.cc-btn:disabled{opacity:.5; cursor:default}
.tg.cc-ok{color:var(--dn); background:var(--dnBg); border:1px solid var(--dnBd)}
.lay-cur{padding:12px 16px; margin-bottom:14px; border-radius:8px; font-size:13px;
  color:var(--mid); background:var(--pnl2); border:1px solid var(--line)}
.lay-cur b.mono{color:var(--cy); font-size:14px}
.lay-ok{color:var(--dn)} .lay-warn{color:var(--warn)}
.lay-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:14px}
.lay-card{border-radius:8px; background:var(--pnl2); border:1px solid var(--line); overflow:hidden}
.lay-h{display:flex; align-items:center; justify-content:space-between;
  padding:10px 14px; background:var(--pnl3); border-bottom:1px solid var(--line)}
.lay-t{font-size:12.5px; font-weight:700; color:var(--txt)}
.lay-h .okc{color:var(--dn); font-size:12px} .lay-h .badc{color:var(--up); font-size:12px}
.lay-b{padding:12px 14px; font-size:12px; color:var(--mid); line-height:1.8; min-height:52px}
.lay-p{color:var(--faint); font-size:11px; font-family:var(--mono); word-break:break-all}

.lay-card{cursor:pointer; transition:border-color .15s}
.lay-card:hover{border-color:var(--cy)}
.lay-card:hover .lay-open{color:var(--cy)}
.lay-open{margin-left:auto; font-size:11px; color:var(--faint)}
.lay-detail{display:none; margin-top:14px; border:1px solid var(--cyBd); border-radius:8px;
  background:rgba(34,211,238,.04); overflow:hidden}
.lay-detail.on{display:block}
.lay-dhead{display:flex; align-items:center; justify-content:space-between;
  padding:11px 16px; background:rgba(34,211,238,.10); border-bottom:1px solid var(--cyBd)}
.lay-dhead b{font-size:13px; color:var(--cy)}
.lay-dclose{font-size:11.5px; color:var(--dim); cursor:pointer}
.lay-dclose:hover{color:var(--up)}
.lay-err{padding:14px 16px; color:var(--up); font-size:12.5px}
.lay-tbl{width:100%; border-collapse:collapse; font-size:12.5px}
.lay-tbl th{width:220px; text-align:left; padding:9px 16px; color:var(--dim); font-weight:400;
  border-bottom:1px solid var(--line); background:rgba(255,255,255,.015)}
.lay-tbl td{padding:9px 16px; color:var(--txt); font-family:var(--mono); border-bottom:1px solid var(--line);
  word-break:break-all}
.lay-ring-h{padding:12px 16px 8px; font-size:12px; color:var(--dim)}
.lay-rings{display:flex; flex-wrap:wrap; gap:8px; padding:0 16px 16px}
.lay-ring{display:inline-flex; align-items:baseline; gap:5px; padding:5px 10px; border-radius:6px;
  background:var(--pnl3); border:1px solid var(--line2); font-family:var(--mono); font-size:11.5px}
.lay-ring i{font-style:normal; color:var(--cy2); font-family:var(--sans)}
.lay-ring b{color:var(--txt)}
.lay-ring em{font-style:normal; color:var(--faint)}
.lay-ring u{text-decoration:none; color:var(--mid)}

.rx-exp{display:block; font-style:normal; font-size:10.5px; color:var(--faint); margin-top:2px}


/* ── 2026-10-18 钟老板：日期选择器弹层是白的，跟深色主题不搭 ── */
:root{color-scheme:dark}
.sigfilter input[type=date],.sigfilter input[type=datetime-local],
.sigfilter input[type=time]{
  color-scheme:dark;
  background:#0d1a26; color:#dbe9f7;
  border:1px solid #24405c; border-radius:6px; padding:4px 8px;
}
.sigfilter input[type=date]::-webkit-calendar-picker-indicator{
  filter:invert(0.75) brightness(1.6); cursor:pointer;
}
.sigfilter input[type=date]:focus{outline:none; border-color:#3fd0ff; box-shadow:0 0 0 2px rgba(63,208,255,.15)}

/* ── 系统内弹框（替代浏览器原生 prompt）── */
.jlpm-mask{position:fixed; inset:0; background:rgba(3,10,18,.72); z-index:9999;
  display:none; align-items:center; justify-content:center}
.jlpm-mask.on{display:flex}
.jlpm{width:440px; max-width:92vw; background:#0b1826; border:1px solid #24405c;
  border-radius:10px; box-shadow:0 20px 60px rgba(0,0,0,.6); overflow:hidden;
  font-size:13px; color:#dbe9f7}
.jlpm-h{display:flex; align-items:center; justify-content:space-between;
  padding:12px 14px; border-bottom:1px solid #1b3247; background:#0e2032}
.jlpm-h b{font-size:13.5px; color:#8fe3ff; font-weight:600}
.jlpm-x{cursor:pointer; color:#7f9ab3; font-size:16px; line-height:1; padding:0 4px}
.jlpm-x:hover{color:#ff6b6b}
.jlpm-b{padding:14px}
.jlpm-tip{color:#8fa8bf; font-size:12px; line-height:1.7; margin-bottom:9px}
.jlpm-b input{width:100%; box-sizing:border-box; background:#08131d; color:#e8f4ff;
  border:1px solid #24405c; border-radius:6px; padding:8px 10px; font-size:13px;
  font-family:inherit; outline:none}
.jlpm-b input:focus{border-color:#3fd0ff; box-shadow:0 0 0 2px rgba(63,208,255,.15)}
.jlpm-f{display:flex; gap:8px; justify-content:flex-end; padding:10px 14px;
  border-top:1px solid #1b3247; background:#0a1521}
.jlpm-f button{background:#13283a; color:#cfe4f6; border:1px solid #24405c;
  border-radius:6px; padding:6px 16px; font-size:12.5px; cursor:pointer}
.jlpm-f button:hover{border-color:#3fd0ff; color:#8fe3ff}
.jlpm-f button.pri{background:#0f4c66; border-color:#1e7fa6; color:#e6f8ff}
.jlpm-f button.pri:hover{background:#12607f}
.jlpm-err{color:#ff8a8a; font-size:12px; margin-top:7px; min-height:16px}
