/* PANECO Ops Console —— 方案 A「黑金编辑部」深色控制台（DESIGN_HANDOFF.md · 2026-09-20）
   深藏青底 × 香槟金强调 × 衬线页标题；1px 半透明 hairline 分层，静止卡片无阴影。
   状态绿 #287D60 仅限状态语义（在线/正常/成功），红仅用于危险操作与失败回执。
   零 CDN：本地系统字体链；数字一律无衬线 + tabular-nums。
   本文件只做视觉层：类名与 DOM 结构沿用生产版，业务逻辑见 js/{core,app}.js（未动）。 */
/* DeepStone 官方字体自托管（零外链；OFL 许可） */
@font-face{font-family:'EB Garamond';src:url('fonts/EBGaramond-Regular.ttf') format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:'EB Garamond';src:url('fonts/EBGaramond-SemiBold.ttf') format('truetype');font-weight:600;font-display:swap}
@font-face{font-family:'Swei B2 Serif CJKtc';src:url('fonts/SweiB2SerifCJKtc-Medium.woff2') format('woff2');font-weight:400 500;font-display:swap}
@font-face{font-family:'Swei B2 Serif CJKtc';src:url('fonts/SweiB2SerifCJKtc-SemiBold.woff2') format('woff2');font-weight:600 700;font-display:swap}

:root {
  /* —— DeepStone v1.3.1（demo v2）：浅色主导（65-80% paper/white）+ navy 侧栏锚点带 + royal 3-8% —— */
  /* canonical 令牌导出（tokens.json） */
  --royal:#094197; --blue:#404082; --paper:#F7F7F7; --navyDS:#141539; --navy-deep:#121463;
  --ink:#0A0A1E; --mutedTok:#525267; --warning:#A96A13;
  --navy: #F7F7F7;      /* 页面底 = paper（原变量名保留兼容） */
  --panel: #FFFFFF;     /* 内容面板 = white（侧栏单独走 navy 锚点带） */
  --card: #FFFFFF;      /* 卡面 = white + 1px line 描边 */
  --line: #D8D8E2;      /* 中性分隔线 */
  --cream: #0A0A1E;     /* 主文字 = ink */
  --muted: #525267;     /* 次文字 */
  --dim: rgba(10, 10, 30, .45);
  --gold: #094197;      /* = royal：浅底可直书（链接/选中/填充） */
  --gold-hi: #404082;   /* = blue（hover） */
  --green: #287D60;     /* = success */
  --danger: #B94343;    /* = danger */
  /* —— 旧变量名别名（core.js/app.js 内联 style 与 toast 边框引用）—— */
  --bg: var(--navy);
  --surface: var(--panel);
  --elevated: var(--card);
  --fg: var(--cream);
  --subtle: var(--dim);
  --primary: var(--gold);
  --primary-fg: #FFFFFF;
  --ok: #287D60;
  --warn: var(--gold-hi);
  /* —— 字体链（零 CDN 本地降级）—— */
  --serif: 'EB Garamond', 'Swei B2 Serif CJKtc', Georgia, 'Songti SC', SimSun, serif;
  --sans: 'Swei B2 Serif CJKtc', 'Songti SC', SimSun, system-ui, 'Segoe UI', sans-serif;
  --mono: ui-monospace, 'SF Mono', Consolas, 'Courier New', monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { min-height: 100%; background: var(--navy); color: var(--cream); }
body {
  font-family: var(--sans);
  font-size: 14px; line-height: 1.5;
  font-variant-numeric: tabular-nums; /* 数字一律无衬线 + tabular 对齐 */
  -webkit-font-smoothing: antialiased;
}
.num { font-variant-numeric: tabular-nums; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
button:disabled { opacity: .45; cursor: not-allowed; }
a { color: inherit; text-decoration: none; }
.mono { font-family: var(--mono); }
.display { font-family: var(--serif); letter-spacing: -.01em; }

#gate, #app { min-height: 100vh; }
#app { display: none; }
#app.show { display: block; }
#gate.hide { display: none; }

/* ── 进门 gate ───────────────────────────────────────── */
.gate { max-width: 560px; margin: 0 auto; padding: 72px 24px 56px; }
.kicker {
  color: var(--gold); font-size: 11px; font-weight: 600;
  letter-spacing: .18em; text-transform: uppercase;
}
.kicker::before {
  content: ""; display: inline-block; width: 7px; height: 7px; border-radius: 50%;
  background: var(--gold); margin-right: 9px; vertical-align: 1px;
}
h1 { font-family: var(--serif); font-size: 40px; font-weight: 600; letter-spacing: -.01em; margin: 12px 0; }
h2 { font-family: var(--serif); font-size: 32px; font-weight: 600; letter-spacing: -.01em; margin: 12px 0 8px; }
h3 { font-size: 15px; font-weight: 600; color: var(--cream); }
.lede { color: var(--muted); font-size: 14px; line-height: 1.75; max-width: 70ch; }
.card {
  background: var(--panel); border: 1px solid var(--line);
  border-radius: 4px; padding: 26px 28px; margin-top: 28px;
}
.gate .card { margin-top: 24px; }
label { display: block; font-size: 12px; letter-spacing: .06em; color: var(--muted); margin: 0 0 8px; }
input, select, textarea {
  width: 100%; min-height: 44px; border: 1px solid var(--line);
  background: var(--card); border-radius: 3px; padding: 11px 16px; outline: none;
  color: var(--cream); transition: border-color .15s, box-shadow .15s;
}
textarea { min-height: 84px; resize: vertical; font-size: 13px; }
input:focus, select:focus, textarea:focus {
  border-color: var(--gold);
  box-shadow: 0 0 0 3px rgba(9, 65, 151, .18);
}
.hint { font-size: 12px; color: var(--dim); margin-top: 8px; line-height: 1.7; }
.err { color: var(--danger); font-size: 13px; margin-top: 8px; }
.pills { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-top: 24px; }
.pill { border: 1px solid var(--line); border-radius: 3px; padding: 12px; font-size: 12px; color: var(--muted); line-height: 1.6; }

/* ── 按钮系统（金主按钮 / 深色 ghost / 危险描边） ─────── */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  border: 0; border-radius: 3px; min-height: 44px; padding: 0 22px;
  font-size: 14px; font-weight: 600; white-space: nowrap;
  background: var(--gold); color: #FFFFFF;
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease, color .15s ease;
}
.btn:hover { background: var(--gold-hi); transform: translateY(-1px); box-shadow: 0 6px 18px rgba(9, 65, 151, .35); }
.btn:disabled { opacity: .45; cursor: not-allowed; transform: none; box-shadow: none; }
.btn.ghost {
  background: transparent; color: var(--cream);
  border: 1px solid var(--line);
}
.btn.ghost:hover { color: var(--cream); border-color: var(--muted); background: rgba(10, 10, 30, .04); box-shadow: none; }
/* 危险（B16 暂停 / B17 关池 / B14 建站）：透明底 + 红描边 */
.btn.danger, .btn.warn {
  background: transparent; color: var(--danger);
  border: 1px solid rgba(185, 67, 67, .45);
}
.btn.danger:hover, .btn.warn:hover {
  background: rgba(185, 67, 67, .14); border-color: var(--danger); box-shadow: none;
}
.btn.full { width: 100%; }
/* 小号 = dbtn：紧凑次级操作（触屏/窄屏统一抬高到 44px） */
.btn.mini {
  min-height: 34px; padding: 7px 14px; font-size: 12px;
  border-radius: 3px; transform: none; box-shadow: none;
}
.btn.mini:hover { transform: none; box-shadow: none; }

/* ── 侧栏 ─────────────────────────────────────────────── */
aside {
  position: fixed; inset: 0 auto 0 0; width: 244px;
  background: #141539; /* DeepStone darkBand 纵向（solid navy 回退） */
  background: linear-gradient(180deg, #141539 0%, #121463 100%);
  border-right: none;
  padding: 26px 18px; display: flex; flex-direction: column; gap: 4px;
  color: rgba(247, 247, 247, .78);
}
.brand { display: flex; gap: 12px; align-items: center; padding: 0 10px 24px; }
.mark {
  width: 34px; height: 34px; border-radius: 4px; background: var(--gold);
  display: grid; place-items: center; flex: none;
}
.mark svg { display: block; }
.brand .wordmark {
  font-family: var(--serif); font-size: 15px; font-weight: 600;
  letter-spacing: .12em; color: #FFFFFF; line-height: 1.2;
}
.brand small { display: block; font-size: 11px; color: rgba(247, 247, 247, .6); margin-top: 3px; }
.nav a {
  display: flex; align-items: center; gap: 10px;
  min-height: 44px; padding: 0 14px; border-radius: 100px;
  font-size: 13.5px; color: rgba(247, 247, 247, .75);
  border-left: 2px solid transparent; width: 100%; text-align: left;
  transition: color .15s, background .15s;
}
.nav a:hover { color: #FFFFFF; background: rgba(247, 247, 247, .07); }
.nav a.on {
  color: #FFFFFF; background: rgba(9, 65, 151, .55);
  border-left-color: transparent; font-weight: 600;
}
.side-foot { margin-top: auto; padding-top: 16px; border-top: 1px solid rgba(247, 247, 247, .16); font-size: 11.5px; color: rgba(247, 247, 247, .55); line-height: 2; }
.side-foot .mono { color: rgba(247, 247, 247, .68); font-size: 11px; }
/* 侧栏钱包区（顶栏极简化：与用户站 wallet-box 同构，深色面板） */
.wallet-box { background: rgba(247, 247, 247, .07); border: 1px solid rgba(247, 247, 247, .14); border-radius: 8px; padding: 12px; margin-top: 12px; line-height: 1.6; }
.wallet-box .wb-label { font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; color: rgba(247, 247, 247, .55); margin-bottom: 6px; }
.wallet-box .wb-note { font-size: 11.5px; color: rgba(247, 247, 247, .6); }
.wallet-box .wb-addr { font-size: 12.5px; font-weight: 600; color: #FFFFFF; overflow-wrap: anywhere; }
.wallet-box .btn { min-height: 34px; font-size: 12px; }
.foot-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 12px; }

.wrap { margin-left: 244px; }
header.top {
  position: sticky; top: 0; z-index: 5;
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  min-height: 60px; padding: 8px 44px; border-bottom: 1px solid var(--line);
  background: rgba(255, 255, 255, .92); backdrop-filter: blur(10px);
  font-size: 12.5px; color: var(--muted);
}
main { padding: 34px 44px 60px; max-width: 1180px; }
/* 顶栏左区：当前页标题（go() 同步）；链不匹配时 badge warn 可点切换网络 */
#topTitle { font-size: 13.5px; font-weight: 600; color: var(--cream); }
#chain-badge.warn { cursor: pointer; }
.page { display: none; animation: fadein .25s ease; }
.page.show { display: block; }
@keyframes fadein { from { opacity: 0; } to { opacity: 1; } }

/* ── 指标四 tile ──────────────────────────────────────── */
.stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin: 30px 0; }
.stat { background: var(--card); border: 1px solid var(--line); border-radius: 4px; padding: 20px 22px; }
.stat span { display: block; font-size: 10.5px; letter-spacing: .15em; text-transform: uppercase; color: var(--muted); }
.stat b {
  display: block; margin-top: 12px; font-size: 26px; font-weight: 500;
  font-family: var(--sans); letter-spacing: -.01em; color: var(--cream);
  overflow-wrap: anywhere; font-variant-numeric: tabular-nums;
}

/* ── 徽章（d-ok / d-warn / d-mute / 危险） ────────────── */
.badge {
  display: inline-flex; align-items: center; gap: 6px;
  border-radius: 999px; padding: 4px 10px; font-size: 11px; font-weight: 600;
  white-space: nowrap; letter-spacing: .02em;
}
.badge::before { content: ""; width: 6px; height: 6px; border-radius: 50%; flex: none; }
.ok { background: rgba(63, 182, 139, .14); color: #287D60; }
.ok::before { background: var(--green); }
.warn { background: rgba(9, 65, 151, .15); color: var(--gold-hi); }
.warn::before { background: var(--gold); }
.bad { background: rgba(185, 67, 67, .14); color: var(--danger); }
.bad::before { background: var(--danger); }
.mute { background: rgba(216, 216, 226, .06); color: var(--muted); }
.mute::before { background: #4A5266; }

/* ── 表格（ctable：hairline 行 + 金色行 hover + 横向滚动） ── */
table { width: 100%; border-collapse: collapse; font-size: 13px; }
th {
  text-align: left; font-weight: 600; color: var(--dim); font-size: 10.5px;
  letter-spacing: .12em; text-transform: uppercase;
  padding: 10px 12px 10px 0; border-bottom: 1px solid var(--line);
}
td { padding: 14px 12px 14px 0; border-bottom: 1px solid var(--line); vertical-align: middle; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
tbody tr:last-child td { border-bottom: 0; }
tbody tr:hover td { background: rgba(9, 65, 151, .05); }
.tbl-wrap { overflow: auto; border-radius: 3px; }
.tbl-wrap td, .tbl-wrap th { white-space: nowrap; }
.row2 { color: var(--dim); font-size: 11px; }
.split { display: grid; grid-template-columns: 1.1fr .9fr; gap: 16px; align-items: start; }
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }
.frow { display: grid; grid-template-columns: 170px 1fr; gap: 12px; align-items: center; margin-bottom: 12px; }
.frow > label { margin: 0; }

.list { list-style: none; }
.list li {
  display: flex; justify-content: space-between; gap: 8px; align-items: center;
  padding: 10px 12px; background: var(--card);
  border: 1px solid var(--line); border-radius: 3px; margin-bottom: 8px; font-size: 13px;
  overflow-wrap: anywhere;
}

/* ── 待签交易包 / 步骤流水线（金 = 当前，绿 = 完成） ──── */
.txpack { border: 1px solid var(--line); background: var(--card); border-radius: 4px; padding: 20px 22px; margin-top: 14px; }
.txpack-head { display: flex; justify-content: space-between; gap: 8px; flex-wrap: wrap; align-items: baseline; }
.txpack-head .hint { margin-top: 2px; }
.txstep { display: flex; gap: 14px; margin-top: 16px; }
.dot {
  width: 20px; height: 20px; border-radius: 50%;
  background: var(--panel); color: var(--muted);
  border: 1px solid var(--line);
  display: grid; place-items: center; font-size: 10px; flex: none;
  transition: background .15s, border-color .15s, box-shadow .15s;
}
.dot.on {
  background: var(--gold); color: #FFFFFF; border-color: var(--gold);
  box-shadow: 0 0 0 4px rgba(9, 65, 151, .18);
}
.dot.err { background: var(--danger); color: #FFFFFF; border-color: var(--danger); }
.txstep-main { flex: 1; min-width: 0; }
.txstep-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 10px; }
.txstep-actions .manual { display: inline-flex; gap: 6px; align-items: center; }
.txstep-actions .manual input { min-height: 34px; width: 260px; font-size: 12px; }
.calldata {
  display: block; font-size: 11px; color: var(--dim); margin-top: 4px; cursor: copy;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%;
}
.calldata:hover { color: var(--gold-hi); }
.kv { font-size: 12px; color: var(--muted); margin-top: 4px; overflow-wrap: anywhere; }

/* ── 回执条（成功绿 / 失败红） ────────────────────────── */
.okbar, .errbar {
  border-radius: 3px; padding: 12px 14px; margin-top: 10px; font-size: 13px; overflow-wrap: anywhere;
}
.okbar { background: rgba(63, 182, 139, .12); border: 1px solid rgba(63, 182, 139, .5); color: #287D60; }
.errbar { background: rgba(185, 67, 67, .12); border: 1px solid rgba(185, 67, 67, .5); color: var(--danger); }
.pendingbar {
  border-radius: 3px; padding: 12px 14px; margin-top: 10px; font-size: 13px;
  background: var(--panel); border: 1px dashed var(--line); color: var(--muted);
}
.spin {
  display: inline-block; width: 12px; height: 12px; border-radius: 50%;
  border: 2px solid var(--line); border-top-color: var(--gold);
  animation: spin 0.8s linear infinite; vertical-align: -2px; margin-right: 6px;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ── 重算奖励树进度条（v38）：hairline 轨道 + royal 填充，4-6px 细条；非 scanning 阶段不确定微动画 ── */
.rprog-track {
  position: relative; height: 5px; border-radius: 3px; margin-top: 6px;
  background: var(--line);   /* hairline #D8D8E2 */
  overflow: hidden;
}
.rprog-fill {
  height: 100%; border-radius: 3px;
  background: var(--gold);   /* royal #094197 */
  transition: width .4s ease;
}
/* 不确定态：填充保持当前宽度不回退，轨道上叠加 royal 微光扫过（不显示假百分比） */
.rprog-track.indet::after {
  content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0;
  background: linear-gradient(90deg, transparent, rgba(9, 65, 151, .22), transparent);
  animation: rprog-shine 1.2s linear infinite;
}
@keyframes rprog-shine { from { transform: translateX(-100%); } to { transform: translateX(100%); } }

details.jsonbox { margin-top: 8px; font-size: 12px; }
details.jsonbox summary { cursor: pointer; color: var(--dim); }
details.jsonbox summary:hover { color: var(--gold-hi); }
details.jsonbox pre {
  margin-top: 6px; padding: 10px 12px;
  background: var(--navy); border: 1px solid var(--line);
  border-radius: 3px; font-size: 11px; line-height: 1.5; overflow: auto; max-height: 320px;
  font-family: var(--mono); white-space: pre-wrap; overflow-wrap: anywhere;
  color: var(--muted);
}

.toast {
  position: fixed; right: 18px; bottom: 18px;
  background: var(--panel); border: 1px solid var(--line);
  border-radius: 3px; padding: 12px 14px; display: none; z-index: 60; max-width: 380px;
  font-size: 13px; overflow-wrap: anywhere; color: var(--cream);
  box-shadow: 0 10px 30px rgba(6, 9, 16, .5);
}
.toast.show { display: block; }

/* ── 模态确认（危险 = 红描边卡） ──────────────────────── */
.modal {
  position: fixed; inset: 0; display: none; z-index: 50;
  background: rgba(6, 9, 16, .7); backdrop-filter: blur(4px);
  align-items: center; justify-content: center; padding: 20px;
}
.modal.show { display: flex; }
.modal-card {
  background: var(--card); border: 1px solid var(--line);
  border-radius: 4px; max-width: 520px; width: 100%; padding: 28px;
}
.modal-card.danger { border-color: rgba(185, 67, 67, .6); }
.modal-card h3 { font-family: var(--serif); font-size: 17px; margin-bottom: 12px; color: var(--cream); }
.modal-body { font-size: 14px; line-height: 1.75; color: var(--muted); }
.modal-body b { color: var(--cream); }
.modal-body .warnbox {
  border: 1px solid rgba(185, 67, 67, .6); border-radius: 3px; padding: 10px 12px;
  color: var(--danger); font-size: 13px; margin-top: 12px; line-height: 1.7;
}
.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 20px; }

/* ── 其他小件 ─────────────────────────────────────────── */
.chips { display: inline-flex; gap: 4px; flex-wrap: wrap; }
.chip {
  font-size: 10px; letter-spacing: .06em; padding: 2px 8px;
  border: 1px solid var(--line); border-radius: 3px; color: var(--dim);
}
.chip.hot { border-color: rgba(185, 67, 67, .5); color: var(--danger); }
.chip.fine { border-color: rgba(63, 182, 139, .4); color: #287D60; }
.modes { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; }
.mode {
  border: 1px solid var(--line); border-radius: 3px; padding: 12px 14px;
  text-align: left; background: var(--card);
  transition: border-color .15s, box-shadow .15s;
}
.mode:hover { border-color: var(--muted); }
.mode.on, .mode:has(input:checked) {
  border-color: var(--gold); background: rgba(9, 65, 151, .08);
  box-shadow: 0 0 0 1px var(--gold) inset;
}
.mode b { display: block; font-size: 13.5px; }
.mode .hint { margin-top: 2px; }
.toggle {
  width: 100%; min-height: 50px; display: flex; justify-content: space-between; align-items: center; gap: 10px;
  border: 1px solid var(--line); background: var(--card); border-radius: 3px;
  padding: 0 14px; margin-bottom: 8px; font-size: 13.5px;
}
.txhash-link { color: var(--gold-hi); cursor: copy; }
.txhash-link:hover { text-decoration: underline; }
.divider { border: 0; border-top: 1px solid var(--line); margin: 18px 0; }
.footer-eps { margin-top: 12px; font-size: 11px; color: var(--dim); }
.warnbanner {
  border: 1px solid rgba(9, 65, 151, .4); background: rgba(9, 65, 151, .12);
  color: var(--gold-hi); border-radius: 3px; padding: 10px 12px; font-size: 12.5px;
  margin-top: 10px; line-height: 1.7;
}
.menu { display: none; }
.res-zone { margin-top: 12px; }
.log-item {
  display: flex; gap: 12px; align-items: baseline;
  padding: 13px 0; border-bottom: 1px solid var(--line); font-size: 13px;
}
.log-item:last-child { border-bottom: 0; }
.cursor-pointer { cursor: pointer; }
.sec-head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }

/* ── 响应式（980 主断点 / 480 微断点；热区 ≥44px） ────── */
@media (max-width: 980px) {
  aside { display: none; }
  aside.open { display: flex; z-index: 30; }
  .wrap { margin-left: 0; }
  .stats, .split, .pills, .modes, .grid2, .grid3, .frow { grid-template-columns: 1fr; }
  .menu { display: inline-flex; }
  main { padding: 24px 20px 60px; }
  header.top { padding: 8px 16px; }
  h2 { font-size: 26px; }
}
@media (max-width: 480px) {
  .stats { grid-template-columns: 1fr; }
}
@media (pointer: coarse), (max-width: 980px) {
  .btn.mini { min-height: 44px; }
  .chip { padding: 4px 10px; }
}

/* ═══════════ v2 追加：分组导航 / 本周作业卡 / donut ═══════════ */
.nav-group { margin-bottom: 14px; }
.nav-group-title {
  font-size: 10.5px; letter-spacing: .16em; color: var(--dim);
  padding: 0 14px 6px; text-transform: uppercase;
}
.wk-card { /* navy 侧栏锚点带内：白字 + royal/白 透明描边 */
  border: 1px solid rgba(247, 247, 247, .28); border-radius: 8px; padding: 10px 12px;
  background: rgba(9, 65, 151, .22); cursor: pointer; margin-bottom: 12px;
  transition: background .15s, border-color .15s;
}
.wk-card:hover { background: rgba(9, 65, 151, .38); }
.wk-card.ok { border-color: rgba(40, 125, 96, .8); background: rgba(40, 125, 96, .22); }
.wk-card .wk-epoch { font-size: 13px; font-weight: 700; color: #FFFFFF; }
.wk-card.ok .wk-epoch { color: #FFFFFF; }
.wk-card .wk-line { font-size: 11.5px; color: rgba(247, 247, 247, .7); margin-top: 2px; }
.wk-card.ok .wk-line { color: rgba(247, 247, 247, .8); }
.donut-wrap { display: flex; align-items: center; gap: 32px; flex-wrap: wrap; padding: 8px 0 4px; }
.donut { width: 190px; height: 190px; flex: none; }
.donut text { fill: var(--cream); text-anchor: middle; }
.donut .d-num { font-size: 24px; font-weight: 700; }
.donut .d-lab { font-size: 10.5px; fill: var(--muted); }
.donut-legend { flex: 1; min-width: 260px; display: flex; flex-direction: column; gap: 12px; }
.donut-legend .lg-row {
  display: grid; grid-template-columns: 12px 1fr auto 52px; gap: 10px;
  align-items: center; font-size: 13px; color: var(--cream);
}
.donut-legend .lg-row:last-child { gap: 6px; }
.donut-legend .lg-dot { width: 10px; height: 10px; border-radius: 3px; }
.donut-legend .lg-row span:last-child { color: var(--dim); text-align: right; font-size: 12px; }
.donut-legend .lg-row b { justify-self: end; font-size: 12.5px; color: var(--gold-hi); }
.donut-legend .lg-total {
  margin-top: 6px; padding-top: 10px; border-top: 1px solid var(--line);
  font-size: 12px; color: var(--muted); word-break: break-all;
}
.donut-legend .lg-total b { color: var(--gold-hi); }

/* ═══ v3 追加（2026-09-28）：概览金库总表 6 列重排 ═══
   「站点」副行（symbol · vault · asset · operator，mono）允许在空格处换行，
   以在 1280–1440 视口内放下全表；其余列维持 .tbl-wrap 的 nowrap + 横向滚动兜底。
   作用域仅限本表（#ov-table），不影响其他表格的 .row2。 */
#ov-table td:first-child .row2 { white-space: normal; }

/* ── v5：根治表格列挤压导致内容溢出到相邻列 ──
   ① .tbl-wrap 内的表格永远不窄于内容（min-width:max-content）：容器放不下时
      触发既有的 overflow:auto 横向滚动，而不是把列压扁让 nowrap 内容画到相邻格上；
   ② 概览金库总表状态列放开换行：chips 组与状态徽章各自 inline-block + 内部 nowrap，
      空间不足时徽章换到 chip 组下一行，绝不横向越界。 */
.tbl-wrap table { min-width: max-content; }
#ov-table td:nth-child(5) { white-space: normal; }
#ov-table td:nth-child(5) .chips { display: inline-block; white-space: nowrap; }
#ov-table td:nth-child(5) .badge { display: inline-block; white-space: nowrap; }
/* v7：金库总表 chip 间距微调（4 chip × 2px），1440 视口免横向滚动 */
#ov-table .chips .chip { padding: 2px 7px; }
#ov-table .chips .chip + .chip { margin-left: 1px; }

/* ═══ v10 追加（2026-09-28）：i18n 语言下拉（决策 1 形态 B · 深色面板 #141539 + 金 hover） ═══ */
.gate-lang { display: flex; justify-content: flex-end; margin-bottom: 4px; }
.langdd { position: relative; display: inline-block; }
.langdd-btn { /* v3.3：与用户站完全统一（白底胶囊/同边同字色） */
  display: inline-flex; align-items: center; gap: 7px; min-height: 34px; padding: 0 13px;
  border-radius: 999px; border: 1px solid rgba(10, 10, 30, .1); background: #FFFFFF;
  font-size: 12.5px; font-weight: 600; color: rgba(10, 10, 30, .62); white-space: nowrap;
}
.langdd-btn:hover { color: var(--ink); border-color: rgba(10, 10, 30, .35); }
.langdd-btn .car { flex: none; transition: transform .18s; }
.langdd.open .langdd-btn .car { transform: rotate(180deg); }
.langdd-menu {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 70; min-width: 168px;
  background: #FFFFFF; border: 1px solid var(--line); border-radius: 8px;
  box-shadow: 0 14px 36px rgba(10, 10, 30, .16); padding: 5px; display: none;
}
.langdd.open .langdd-menu { display: block; }
.langdd-menu button {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%;
  padding: 8px 12px; border-radius: 8px; font-size: 13px; color: var(--muted);
  text-align: left; min-height: 36px;
}
.langdd-menu button:hover { background: rgba(9, 65, 151, .07); color: var(--ink); }
.langdd-menu button.on { color: var(--gold); font-weight: 600; }
.langdd-menu button .ck { visibility: hidden; font-size: 11px; }
.langdd-menu button.on .ck { visibility: visible; }

/* ── v10：en 排版补偿（§2.2 映射表：字号字重不变，仅调字距） ── */
body.en .display { letter-spacing: -.005em; }
body.en th { letter-spacing: .08em; }
body.en .stat span { letter-spacing: .10em; }
body.en .kicker { letter-spacing: .12em; }
body.en .nav-group-title { letter-spacing: .11em; }
body.en .badge { letter-spacing: 0; }
body.en .chip { letter-spacing: .04em; }
/* v12：EN 态 chip 全词较长（Deposits Paused 等），chips 组允许组内换行，
   避免状态列被撑到 ~400px 引起表格溢出；单个 chip 仍 nowrap。 */
#ov-table td:nth-child(5) { max-width: 170px; }
#ov-table td:nth-child(5) .chips { display: inline-flex; flex-wrap: wrap; white-space: nowrap; }

/* ═══ v18 追加（2026-10-08）：地址筛查页 + 概览 ICO 运营卡组（M4/M3 前端） ═══
   来源：ui-demos/ico/console-screening.html 新增组件节（demo-bar 非产品 UI 不迁入）。
   色值全部引用既有 token（绿仅状态语义、红仅危险与失败），零新颜色。 */

/* chip 补档：金源（GoPlus / MistTrack）；OFAC/Oracle 用既有 chip.hot */
.chip.gold { border-color: rgba(9, 65, 151, .4); color: var(--gold-hi); }

/* 文字链按钮（MistTrack 报告入口；URL 由服务端下发，前端零外链资源） */
.linkish { background: none; border: none; color: var(--gold-hi); font-size: 12.5px; padding: 0;
  border-bottom: 1px dashed rgba(9, 65, 151, .5); cursor: pointer; }
.linkish:hover { color: var(--cream); }

/* 筛查结果卡（三态：allow=ok / review=warn / block=bad，大徽章放大） */
.verdict-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.verdict-addr { font-family: var(--mono); font-size: 14px; color: var(--cream); overflow-wrap: anywhere; }
.verdict-meta { margin-left: auto; display: flex; gap: 8px; align-items: center; font-size: 11.5px; color: var(--dim); flex-wrap: wrap; }
.reason-list { margin-top: 16px; display: flex; flex-direction: column; gap: 8px; }
.reason-row { display: flex; gap: 10px; align-items: baseline; padding: 10px 12px; background: var(--card);
  border: 1px solid var(--line); border-radius: 3px; font-size: 13px; line-height: 1.6; overflow-wrap: anywhere; }
.reason-row .src { flex: none; }
.verdict-actions { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; }
.lock-note { display: flex; gap: 8px; align-items: flex-start; color: var(--danger); font-size: 12.5px; line-height: 1.7;
  border: 1px solid rgba(185, 67, 67, .45); border-radius: 3px; padding: 10px 12px; margin-top: 16px; }

/* 白名单 / 双列表单行 */
.wl-entry { display: flex; gap: 10px; align-items: center; padding: 10px 12px; background: var(--card);
  border: 1px solid var(--line); border-radius: 3px; margin-bottom: 8px; font-size: 12.5px; }
.wl-entry .we-addr { font-family: var(--mono); color: var(--cream); overflow-wrap: anywhere; }
.wl-entry .we-note { color: var(--dim); font-size: 11.5px; }
.wl-entry .we-act { margin-left: auto; flex: none; }
.frow2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 10px; }

/* ICO 运营卡组（概览页嵌入；组头衬线标题 + 待办徽标 + 统计行） */
.ops-group { margin-top: 26px; }
.ops-group-title { font-family: var(--serif); font-size: 18px; color: var(--cream); display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.ops-state { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 10px; }
.ops-stat { font-size: 12.5px; color: var(--muted); }
.ops-stat b { color: var(--gold-hi); font-size: 15px; margin-left: 6px; }
.retry-item { border: 1px solid var(--line); border-radius: 3px; background: var(--card); padding: 14px 16px; margin-bottom: 10px; }
.retry-item .ri-top { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.retry-item .ri-reason { font-size: 12.5px; color: var(--muted); margin-top: 6px; line-height: 1.7; overflow-wrap: anywhere; }
.mint-item { border: 1px solid var(--line); border-radius: 3px; background: var(--card); padding: 14px 16px; margin-bottom: 10px; }
.mint-item .mi-top { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

/* v18 响应式补档（沿现网 980 主断点；frow2 与 grid2 同步单列） */
@media (max-width: 980px) {
  .frow2 { grid-template-columns: 1fr; }
  .verdict-meta { margin-left: 0; width: 100%; }
}

/* DeepStone demo：主按钮胶囊 */
.btn,.btn.mini,.btn.ghost{border-radius:100px}

/* ══ v3：进门页 = PDF 封面风（整页 navy + 白衬线 + royal 点缀）══ */
#gate {
  background: #141539;
  background: linear-gradient(160deg, #141539 0%, #121463 100%);
  color: rgba(247, 247, 247, .8);
}
#gate h1 { color: #FFFFFF; }
#gate .lede { color: rgba(247, 247, 247, .68); }
#gate .kicker { color: #FFFFFF; }
#gate .kicker::before { background: #FFFFFF; }
#gate .gate-lang .langdd-btn { color: rgba(247,247,247,.85); border-color: rgba(247,247,247,.3); }
#gate .gate-lang .langdd-btn:hover { color: #FFFFFF; border-color: rgba(247,247,247,.55); }
#gate .langdd-menu { background: #FFFFFF; }
#gate .langdd-menu button { color: var(--muted); }
#gate .card {
  background: rgba(247, 247, 247, .06);
  border: 1px solid rgba(247, 247, 247, .18);
  border-radius: 8px;
}
#gate label { color: rgba(247, 247, 247, .62); }
#gate input, #gate select {
  background: rgba(247, 247, 247, .1);
  border-color: rgba(247, 247, 247, .28);
  color: #FFFFFF;
}
#gate input:focus { border-color: #FFFFFF; box-shadow: 0 0 0 3px rgba(247,247,247,.16); }
#gate .hint { color: rgba(247, 247, 247, .5); }
#gate .gate-brand-rule { width: 64px; height: 3px; background: #FFFFFF; margin: 18px 0 22px; }
#gate #gate-btn { background: #FFFFFF; color: #141539; border: none; }
#gate #gate-btn:hover { background: rgba(247,247,247,.88); }

/* 规范：尊重 prefers-reduced-motion */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
}

/* v3.2：navy 表面子元素白字体系（枚举修复——gate 说明胶囊/错误文字、侧栏 ghost 按钮/角色提示/链徽章） */
#gate .pill { color: rgba(247, 247, 247, .75); border-color: rgba(247, 247, 247, .22); }
#gate .err { color: #FFFFFF; }
aside .btn.ghost { color: #FFFFFF; border-color: rgba(247, 247, 247, .32); background: transparent; }
aside .btn.ghost:hover { color: #FFFFFF; border-color: rgba(247, 247, 247, .6); background: rgba(247, 247, 247, .08); }
aside .hint { color: rgba(247, 247, 247, .6); }
aside .badge { color: #FFFFFF; border: 1px solid rgba(247, 247, 247, .3); background: rgba(247, 247, 247, .1); }
aside .badge::before { background: #FFFFFF; }

/* ═══ v39 追加（2026-10-25）：方案 B 底部固定「待签名」操作条（全局待签队列） ═══
   组单包不再注入卡内 res-zone，统一入队挂本操作条连签（js/app.js SQ）。
   white 面 + 上缘 hairline + 浅投影；royal 仅主按钮（renderPack 既有胶囊）与选中 chip；
   队列计数为衬线大数字；展开区限高 40vh 内部滚动；transform 过渡滑入滑出。
   z-index=25：高于主内容与顶栏(5)，低于移动端侧栏抽屉(30)/确认弹层(50)/toast(60)。 */
.sigbar {
  position: fixed; left: 244px; right: 0; bottom: 0; z-index: 25;
  background: var(--card); border-top: 1px solid var(--line);
  box-shadow: 0 -10px 30px rgba(10, 10, 30, .10);
  transform: translateY(110%); transition: transform .28s ease;
}
.sigbar.show { transform: none; }
.sigbar.thin .sq-full { display: none; }
/* 收起态 = 48px 概览薄条（待签计数仍在，再展开状态不丢） */
.sq-thin { display: none; align-items: center; gap: 14px; height: 48px; padding: 0 44px; font-size: 12.5px; color: var(--muted); }
.sigbar.thin .sq-thin { display: flex; }
.sq-thin .sq-sp { flex: 1; }
.sq-full { padding: 12px 44px 14px; }
.sq-head { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.sq-ov { display: flex; align-items: baseline; gap: 8px; white-space: nowrap; }
.sq-num { font-family: var(--serif); font-size: 24px; font-weight: 600; color: var(--cream); line-height: 1; }
.sq-ov-sub { font-size: 12px; color: var(--muted); }
.sq-chips { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; flex: 1; min-width: 0; }
/* 队列 chip：包名 + 步数 + 期望 signer 短标签；选中态 royal 描边 */
.sqchip {
  display: inline-flex; align-items: center; gap: 8px; border: 1px solid var(--line);
  background: var(--card); border-radius: 999px; padding: 5px 8px 5px 14px;
  font-size: 12px; color: var(--cream);
}
.sqchip:hover { border-color: var(--muted); }
.sqchip.on { border-color: var(--gold); box-shadow: 0 0 0 1px var(--gold) inset; background: rgba(9, 65, 151, .05); }
.sqchip b { font-weight: 600; }
.sqchip .cstep { color: var(--muted); }
.sqchip .role { font-size: 10px; color: var(--muted); border: 1px solid var(--line); border-radius: 999px; padding: 1px 7px; font-style: normal; }
.sqchip em { font-style: normal; font-size: 11px; color: var(--gold); }
.sqchip .qx, .ok-line .lx { color: var(--muted); font-size: 14px; line-height: 1; padding: 0 4px; border-radius: 999px; }
.sqchip .qx:hover, .ok-line .lx:hover { color: var(--danger); }
.sq-actions { display: flex; gap: 8px; align-items: center; }
.sq-cur-title { font-size: 12.5px; color: var(--muted); margin: 10px 0 2px; }
.sq-cur-title b { color: var(--cream); }
/* 展开区：复用 PAN.renderPack 挂入；限高 ~40vh 内部滚动，主按钮常驻视口 */
.sq-steps { max-height: 40vh; overflow: auto; padding: 2px 0 4px; }
.sq-steps .txpack { margin-top: 6px; padding: 14px 16px; }
.sq-done { margin-top: 6px; }
/* 成功行：success 徽章语义 + txHash 可复制；签完一包自动折为此行 */
.ok-line { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--green); padding: 6px 0; border-top: 1px dashed var(--line); flex-wrap: wrap; }
.ok-line .ol-name { font-weight: 600; }
.ok-line .lx { margin-left: auto; border: 0; background: none; }
.sq-allclear { padding: 12px 0 4px; font-size: 13.5px; font-weight: 600; color: var(--green); }
/* 卡内状态行（方案 B：卡片本体高度不变，只留一行轻量入口；royal 文字链属规范允许用法） */
.sq-line { display: flex; align-items: center; gap: 10px; margin-top: 14px; font-size: 12.5px; color: var(--muted); flex-wrap: wrap; }
.sq-line .qlink { color: var(--gold); white-space: nowrap; cursor: pointer; }
.sq-line .qlink:hover { text-decoration: underline; }
/* 主内容底部让位（防遮挡卡内最后的操作行）：展开 / 薄条两档 */
body.sq-open main { padding-bottom: 300px; }
body.sq-open.sq-thin main { padding-bottom: 110px; }
/* 980 断点：操作条全宽贴底；chip 单行横滚；侧栏移动抽屉(30)盖在操作条之上 */
@media (max-width: 980px) {
  .sigbar { left: 0; }
  .sq-full { padding: 12px 16px 14px; }
  .sq-thin { padding: 0 16px; }
  .sq-chips { flex-wrap: nowrap; overflow-x: auto; }
  body.sq-open main { padding-bottom: 340px; }
}
