/* LHOS 2 · 深色矿场风。
 * 配色 1:1 对齐 GpuOS 真机取色（矿场/钱包/超频三张原图逐像素采样 + theme.json）：
 * 页底 #1e2128 / 顶栏 #242830 / 卡面 #24262d / 主按钮 #5c3d24 实心 + #fff4ea 字 / 主橙 #f0a020。 */
:root {
  --bg: #1e2128; --bg-elevated: #1a1d23; --topbar: #242830;
  --panel: #24262d; --panel2: #21242b; --surface-hover: #2a2e37;
  --border: #343a45; --border-subtle: #2a2f38;
  --text: #f0f4fc; --muted: #9aa0ab;
  --primary: #f0a020; --primary-dark: #c58328;
  --btnp-bg: #5c3d24; --btnp-bg-hover: #6b4729; --btnp-fg: #fff4ea;
  --accent: #f0a020;
  --green: #34d399; --red: #f87171; --orange: #f0a020; --cyan: #4f8cff;
  --radius: 8px; --radius-lg: 10px;
  --header-h: 56px; --page-max: 1440px; --page-px: 20px;
  --shadow: 0 4px 24px rgba(0, 0, 0, .45);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { background: var(--bg); color: var(--text); min-height: 100vh;
  font: 14px/1.5 Inter, -apple-system, "Segoe UI", "Noto Sans SC", "Microsoft YaHei", "PingFang SC", sans-serif; }
a { color: var(--primary); text-decoration: none; }
.num { font-variant-numeric: tabular-nums; font-family: Consolas, "JetBrains Mono", monospace; }
.muted { color: var(--muted); font-size: 12px; }
.hidden { display: none !important; }
.c-red { color: var(--red); } .c-green { color: var(--green); } .c-orange { color: var(--orange); }
.c-cyan { color: var(--cyan); } .c-muted { color: var(--muted); }

/* ---------- 顶栏（黑条 + logo 图标 + 右侧图标组，对齐 GpuOS） ---------- */
#topbar { background: var(--topbar); border-bottom: 1px solid var(--border-subtle); position: sticky; top: 0; z-index: 20; }
.tb-in { max-width: var(--page-max); margin: 0 auto; display: flex; align-items: center; gap: 8px;
  padding: 0 var(--page-px); height: var(--header-h); position: relative; }
.logo { font-weight: 600; letter-spacing: .3px; color: #fff; font-size: 14px; display: flex; align-items: center; }
.logo-ico { width: 22px; height: 22px; border-radius: 5px; margin-right: 8px;
  background: linear-gradient(135deg, #fb923c, #ea580c);
  display: inline-flex; align-items: center; justify-content: center; font-size: 12px; color: #fff; }
.logo b { color: #fff; }
.logo .logo-sub { color: var(--muted); font-weight: 400; font-size: 12px; letter-spacing: 0; margin-left: 6px; }
.tb-in .sp { margin-left: auto; }
/* 顶栏面包屑（矿机详情页：logo 右边 矿场∨ › 机器∨，对齐 GpuOS） */
.tb-crumb { display: flex; align-items: center; gap: 6px; margin-left: 14px; }
.tb-crumb.hidden { display: none; }
.tb-crumb select { max-width: 200px; padding: 3px 8px; font-size: 12.5px; background: transparent;
  border-color: var(--border); }
.tb-crumb .crumb-sep { color: var(--muted); font-size: 13px; }
/* 顶栏图标按钮：描边圆形、透明底 */
.icobtn { width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--border);
  background: transparent; color: var(--muted); cursor: pointer; font-size: 13px; line-height: 1; }
.icobtn:hover { color: var(--text); border-color: var(--muted); }
/* 主按钮的「实心暖橙棕」变体（GpuOS btnPrimary 取色 #5c3d24 / #fff4ea）：+ 创建矿场 这类 */
.btn.opri { background: var(--btnp-bg); border-color: var(--btnp-bg); color: var(--btnp-fg); }
.btn.opri:hover { background: var(--btnp-bg-hover); border-color: var(--btnp-bg-hover); }
.usermenu { position: absolute; top: 48px; right: var(--page-px);
  background: var(--panel); border: 1px solid var(--border); border-radius: 10px;
  box-shadow: var(--shadow); min-width: 180px; padding: 6px; z-index: 60; }
.usermenu a { display: block; padding: 8px 12px; border-radius: 6px; color: var(--text);
  font-size: 13px; cursor: pointer; }
.usermenu a:hover { background: var(--surface-hover); }
.usermenu a.danger { color: #ff9a9a; }
/* 旧规则保留（有些地方还在用） */
.nav { display: flex; gap: 4px; }
.nav a { padding: 6px 14px; border-radius: 6px; color: var(--muted); font-size: 13px; }
.nav a.on { background: var(--panel2); color: #fff; }
.tb-stat { display: flex; gap: 18px; font-size: 12px; color: var(--muted); align-items: center; }
.tb-stat b { color: var(--text); font-size: 13px; }

/* ---------- 统计卡行（数值上 / 标签下，在线数绿色，对齐 GpuOS） ---------- */
#statbar { max-width: var(--page-max); margin: 0 auto; padding: 12px var(--page-px) 0;
  display: flex; gap: 8px; flex-wrap: wrap; }
.sbox { border: 1px solid var(--border); background: var(--panel); border-radius: 8px;
  padding: 5px 14px 6px; min-width: 96px; }
.sbox .v { font-size: 13px; font-weight: 600; letter-spacing: -.2px; }
.sbox .s { font-size: 10px; color: var(--muted); margin-top: 0; }
.sbox .k { display: none; }   /* 标签挪到 .s 里（数值下的那行小字） */

/* ---------- 页签行（纯文字选中式，无下划线，对齐 GpuOS） ---------- */
#tabbar { max-width: var(--page-max); margin: 12px auto 0; padding: 0 var(--page-px);
  display: flex; gap: 4px; border-bottom: 1px solid var(--border-subtle); overflow-x: auto;
  align-items: center; }
#tabbar a { padding: 7px 12px; font-size: 13px; color: var(--muted); white-space: nowrap;
  border-radius: 6px; }
#tabbar a:hover { color: var(--text); }
#tabbar a.on { color: #fff; font-weight: 600; }

/* ---------- 布局 ---------- */
main { max-width: var(--page-max); margin: 0 auto; padding: 18px var(--page-px); }
.panel { background: var(--panel); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; }
.panel + .panel { margin-top: 14px; }
.panel-title { font-size: 14px; font-weight: 600; margin-bottom: 12px; display: flex; align-items: center; gap: 10px; }
.panel-title .sp { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.row { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }

/* ---------- 按钮 / 输入 ---------- */
.btn { border: 1px solid var(--border); background: var(--panel2); color: var(--text);
  padding: 6px 14px; border-radius: 6px; cursor: pointer; font-size: 13px; }
.btn:hover { border-color: #3b4658; }
.btn.primary { background: var(--btnp-bg); border-color: var(--btnp-bg); color: var(--btnp-fg); }
.btn.primary:hover { background: var(--btnp-bg-hover); }
.btn.ghost { background: transparent; }
.btn.danger { border-color: #5b2a2a; color: #ff9a9a; }
.btn.small { padding: 3px 10px; font-size: 12px; }
/* 列表里名称旁的 ✏️ 改名小按钮：默认淡一点，悬停才显眼 */
.rnbtn { padding: 1px 6px; font-size: 11px; margin-left: 6px; opacity: .55; }
.rnbtn:hover { opacity: 1; }
.btn:disabled { opacity: .45; cursor: not-allowed; }
input, select, textarea { background: #262b34; border: 1px solid var(--border); color: var(--text);
  border-radius: 6px; padding: 6px 10px; font-size: 13px; outline: none; }
input:focus, select:focus, textarea:focus { border-color: var(--primary); }
/* 原生下拉的弹出列表是操作系统/浏览器画的，页面背景管不到 —— 不声明 color-scheme 就是白底白字
 * （2026-10-13 胡老板截图：「全部矿机」下拉一片白）。整站深色，声明成 dark 让弹出列表也走深色。 */
select, textarea { color-scheme: dark; }
textarea { min-height: 60px; resize: vertical; font: inherit; }
select option { background-color: var(--panel); color: var(--text); }
label.fld { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--muted); }

/* ---------- 卡片 / 表格 ---------- */
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.fcard { background: var(--panel); border: 1px solid var(--border); border-radius: 10px; padding: 14px; cursor: pointer; }
.fcard:hover { border-color: var(--primary); }
.fcard h3 { font-size: 15px; margin-bottom: 8px; display: flex; align-items: center; gap: 8px; }
.fcard .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 12px; font-size: 12px; }
.fcard .grid span { color: var(--muted); }

table.tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 13px;
  background: var(--panel2); border: 1px solid var(--border-subtle); border-radius: 8px; overflow: hidden; }
table.tbl th { text-align: left; color: var(--muted); font-weight: 500; font-size: 12px;
  padding: 8px 10px; border-bottom: 1px solid var(--border); white-space: nowrap; background: var(--panel2); }
table.tbl td { padding: 8px 10px; border-bottom: 1px solid var(--border-subtle); }
table.tbl tbody tr:last-child td { border-bottom: none; }
table.tbl tbody tr:hover td { background: var(--surface-hover); }
table.tbl td.r, table.tbl th.r { text-align: right; }
table.tbl tbody tr { cursor: pointer; }

.badge { display: inline-block; padding: 1px 7px; border-radius: 20px; font-size: 11px;
  border: 1px solid var(--border); color: var(--muted); background: #262b34; }
.badge.on { color: var(--green); border-color: #1d4a35; background: #14291f; }
.badge.off { color: var(--red); border-color: #52282b; background: #2a1a1c; }

.crumbs { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; font-size: 13px; }
.crumbs a { color: var(--muted); } .crumbs a:hover { color: var(--primary); }
.crumbs b { color: #fff; }

.scards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.scard { background: var(--panel2); border: 1px solid var(--border); border-radius: 8px; padding: 12px; }
.scard .k { font-size: 12px; color: var(--muted); }
.scard .v { font-size: 20px; font-weight: 600; margin-top: 2px; }
.scard .s { font-size: 11px; color: var(--muted); margin-top: 2px; }

.kv { display: grid; grid-template-columns: 130px 1fr; gap: 6px 12px; font-size: 13px; }
.kv .k { color: var(--muted); }

.events { max-height: 260px; overflow: auto; font-size: 12px; }
.events div { padding: 4px 0; border-bottom: 1px solid var(--border-subtle); display: flex; gap: 8px; }
.events .t { color: var(--muted); white-space: nowrap; }
.events .w { color: var(--orange); } .events .e { color: var(--red); }

.oc-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.oc-grid label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--muted); }

.term { background: #0d1117; color: #c9d1d9; border: 1px solid var(--border); border-radius: 8px;
  font: 12px/1.6 Consolas, "JetBrains Mono", monospace; padding: 10px; height: 300px; overflow: auto; white-space: pre-wrap; word-break: break-word; }
.term .in { color: #34d399; } .term .er { color: #ff9a9a; } .term .wait { color: #d29922; } .term .sys { color: #8b949e; }
.term-line { display: flex; align-items: center; gap: 8px; margin-top: 8px; background: #0d1117; border: 1px solid var(--border); border-radius: 8px; padding: 9px 10px; font: 12px/1.6 Consolas, "JetBrains Mono", monospace; }
.term-line .prompt { color: #34d399; white-space: nowrap; }
.term-line input { flex: 1; background: transparent; border: none; outline: none; color: #e6edf3; font: inherit; padding: 0; }
.term-in { display: flex; gap: 8px; margin-top: 8px; }
.term-in input { flex: 1; font-family: Consolas, monospace; }
.chip { border: 1px solid var(--border); background: #262b34; color: var(--muted);
  border-radius: 20px; padding: 2px 10px; font-size: 12px; cursor: pointer; }
.chip:hover { color: var(--text); border-color: var(--primary); }
.chip.hot { color: var(--btnp-fg); background: var(--btnp-bg); border-color: var(--primary); }
.shell-chips { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 6px; }
.shell-note { margin-top: 8px; font-size: 12px; }

/* ---------- 弹窗 / 提示 ---------- */
#modal { position: fixed; inset: 0; background: rgba(0, 0, 0, .6); display: flex; align-items: center; justify-content: center; z-index: 50; }
.mcard { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 20px; width: 480px; max-width: 92vw; max-height: 88vh; overflow: auto; }
.mcard.wide { width: 700px; }
.mcard h3 { margin-bottom: 14px; font-size: 15px; }
.mcard .fld + .fld { margin-top: 10px; }
.mcard .fld input, .mcard .fld select, .mcard .fld textarea { width: 100%; }
.fld2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.fld2 + .fld2, .fld2 + .fld, .fld + .fld2 { margin-top: 10px; }
.sub-h { font-size: 12px; color: var(--primary); margin: 16px 0 8px; padding-bottom: 5px; border-bottom: 1px solid var(--border); }
.hint { font-size: 11px; color: var(--muted); line-height: 1.6; margin-top: 6px; }
.hint code { color: var(--cyan); font-family: Consolas, monospace; }
label.ck { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--muted); margin-top: 10px; }
label.ck input { width: auto; }
.tag { display: inline-block; padding: 1px 7px; border-radius: 5px; font-size: 11px;
  background: rgba(240, 160, 32, .14); border: 1px solid rgba(240, 160, 32, .45); color: #f2d08a; }
.mfoot { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }
.err { color: #ff9a9a; font-size: 12px; margin-top: 8px; }
#toast { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%);
  background: #262f3d; border: 1px solid var(--border); color: #fff; padding: 9px 18px;
  border-radius: 8px; font-size: 13px; z-index: 99; }
#toast.bad { border-color: #5b2a2a; color: #ffb4b4; }

/* ---------- 登录 ---------- */
#login { min-height: 100vh; display: flex; align-items: center; justify-content: center; }
#login .box { width: 340px; background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 26px; }
#login h1 { font-size: 18px; margin-bottom: 4px; text-align: center; }
#login p.sub { text-align: center; color: var(--muted); font-size: 12px; margin-bottom: 20px; }
#login .fld + .fld { margin-top: 10px; }
#login input { width: 100%; }
#login button { width: 100%; margin-top: 16px; }

@media (max-width: 900px) {
  .scards { grid-template-columns: 1fr 1fr; }
  .oc-grid { grid-template-columns: 1fr 1fr; }
  .tb-stat { display: none; }
}

/* ===== 批量操作栏 ===== */
.bulk { display:flex; gap:8px; align-items:center; flex-wrap:wrap; padding:8px 12px;
  background:rgba(240,160,32,.10); border:1px solid rgba(240,160,32,.35); border-radius:8px; margin-bottom:10px; }
.bulk b { margin-right:4px; color:#f2d08a; }

/* ===== HiveOS Workers 式矿机列表（2026-10-14 胡老板截图：密表格 + 逐卡温度条） ===== */
.tbl.workers td { padding: 5px 8px; font-size: 12px; }
.tbl.workers th { font-size: 11px; white-space: nowrap; }
/* 单元格垂直居中（2026-10-14 胡老板「机器和列表上下没有对齐」）：
 * 「状态/在线时长」是两行，默认 baseline 对齐会让同一行里其它单行内容贴着上沿
 * —— 居中之后每一行的内容都在同一水平线上。 */
.tbl.workers th, .tbl.workers td { vertical-align: middle; }
.wname { font-weight: 600; white-space: nowrap; }
/* 掉线的机器整行淡灰，和在线的一眼区分（2026-10-22 胡老板）：
 * opacity 连彩色数字（算力绿/份额红/温度块）一起淡掉，行内不再有抢眼的颜色。 */
.tbl tbody tr.offrow { opacity: .5; }
.tbl tbody tr.offrow td .wname.offline, .tbl tbody tr.offrow td.wname.offline { color: var(--muted); }
.wname.offline { color: var(--muted); }
.wcoin .tag { font-size: 11px; }
.wacc { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.whash b { display: block; font-size: 12.5px; }
.wsub { display: block; font-size: 10.5px; color: var(--muted); font-weight: 400; }
.wnum { white-space: nowrap; }
.wtemps { white-space: nowrap; }
.tcell { display: inline-block; min-width: 22px; text-align: center; padding: 1px 3px; margin-right: 2px;
  border-radius: 3px; font-size: 10.5px; font-style: normal; font-weight: 600;
  background: rgba(46,160,67,.28); color: #6fdc84; }
.tcell.twarm { background: rgba(245,158,11,.30); color: #fbbf24; }
.tcell.thot { background: rgba(220,38,38,.34); color: #f87171; }
.tcell.tna { background: rgba(255,255,255,.06); color: var(--muted); }
.wstate { white-space: nowrap; font-weight: 600; }
/* HiveOS Workers 11 列在窄屏会挤 —— 整张表横向滚动，别把列压变形 */
.wscroll { overflow-x: auto; }
.wscroll table.tbl.workers { min-width: 1150px; }
.wnum .wsep { color: var(--muted); margin: 0 1px; }
.whash b, .wacc b, .wpow b { font-weight: 650; }
.wcpu, .wmem { font-size: 11.5px; }
.wminer { font-size: 11.5px; }
/* Workers 名字前的收藏星（HiveOS 同款：☆ 未收藏 / ★ 已收藏，收藏的置顶） */
.wstar { cursor: pointer; color: var(--muted); font-size: 13px; line-height: 1; margin-right: 5px; }
.wstar.on, .wstar:hover { color: var(--primary); }

/* ===== 分页 ===== */
.pager { display:flex; gap:6px; align-items:center; justify-content:flex-end; padding:10px 4px 0; font-size:12px; flex-wrap:wrap; }
.pager button[disabled] { opacity:.35; cursor:default; }
/* 矿机列表顶部：统计卡行 + 筛选行（GpuOS farm 页同款，2026-10-14 胡老板截图） */
.statcards { display:flex; gap:8px; flex-wrap:wrap; margin:0 2px 12px; }
.statcard { border:1px solid var(--border); border-radius:8px; padding:8px 14px; min-width:92px; background:rgba(255,255,255,.02); }
.statcard b { display:block; font-size:15px; }
.statcard b i { font-style:normal; font-size:12px; color:var(--muted); }
.statcard span { display:block; font-size:11px; color:var(--muted); margin-top:2px; }
.rig-filterbar { display:flex; align-items:center; gap:14px; padding:2px 2px 12px; flex-wrap:wrap; font-size:12.5px;
  border-bottom:1px solid var(--border-subtle); margin-bottom:10px; }
.rig-filterbar > a { color:var(--muted); cursor:pointer; white-space:nowrap; }
.rig-filterbar > a:hover { color:var(--text); }
.rig-filterbar > a.on { color:#fff; font-weight:600; }
.rig-filterbar .sp { margin-left:auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.rig-filterbar .pgnum { cursor:pointer; color:var(--muted); }
.rig-filterbar .pgnum:hover { color:var(--text); }
.rig-filterbar .pgnum.on { color:#fff; font-weight:600; }
.rig-filterbar .pgnav { display:inline-flex; gap:4px; align-items:center; }
.rig-filterbar .pgnav a { cursor:pointer; color:var(--muted); padding:0 3px; }
.rig-filterbar .pgnav a:hover { color:#fff; }
/* 设备表最上面那行「整机超频」（HiveOS 设备页同款：整机一份参数，单卡另设过的以单卡为准） */
/* ⚙ 整机超频按钮**靠最右**（2026-10-20 胡老板）。横条里的参数文字和 .sp 占位符都删了之后
 * 只剩这一个按钮，靠 justify-content 直接右对齐（以前是靠 .sp 的 margin-left:auto 推的）。 */
.ocbar { display:flex; align-items:center; justify-content:flex-end; gap:10px; padding:8px 10px; margin-bottom:8px;
  border:1px solid var(--border); border-radius:8px; background:rgba(255,255,255,.02); font-size:12.5px; }
.ocbar .ocbar-k { font-weight:600; }
.ocbar .ocbar-v { color:var(--muted); }
.ocbar .sp { margin-left:auto; }
/* Spark Shell 独立页（#/shell/<id>，GpuOS 的 /rig-shell 同款） */
.shell-head { display:flex; align-items:center; gap:10px; margin-bottom:10px; font-size:14px; }
.shell-head .sp { margin-left:auto; }
.shell-panel .term { height: calc(100vh - 320px); min-height: 260px; }
/* 实时算力曲线面板（HiveOS 概述页同款：右上当前算力大字 + 细长青绿面积图） */
.rt-panel { padding: 12px 14px 10px; }
.rt-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; font-size: 12px; }
.rt-head .sp { margin-left: auto; }
.rt-cur { display: flex; align-items: baseline; gap: 8px; }
.rt-algo { color: var(--muted); font-size: 11px; letter-spacing: 1.5px; }
.rt-cur b { font-size: 20px; }
.rt-panel svg { border-radius: 6px; }
.rt-ticks { display: flex; justify-content: space-between; font-size: 10px; color: var(--muted); margin-top: 3px; padding: 0 2px; }

/* 矿工消息行（HiveOS 详情页同款「> 消息 23s × 🗑」） */
.msgrow {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px;
  padding: 6px 14px; margin-bottom: 10px; font-size: 12px;
  background: var(--card, #24262d); border: 1px solid #2a2f38; border-radius: 6px;
}
.msgitem { display: inline-flex; align-items: baseline; gap: 5px; color: var(--fg, #e6e8eb); }
.msgitem::before { content: ''; }
.msgage { color: var(--muted); font-style: normal; font-size: 11px; }
.msgx { cursor: pointer; text-decoration: none; color: var(--muted); font-size: 12px; }
.msgx:hover { color: var(--red, #f87171); }

/* 悬停十字线 + 气泡（HiveOS 同款：鼠标在哪显示那一刻的时间 + 算力） */
.rt-canvas { position: relative; }
.rt-cursor { position: absolute; top: 0; bottom: 0; width: 1px; background: rgba(255, 255, 255, .28); pointer-events: none; }
.rt-tip {
  position: absolute; z-index: 5; white-space: nowrap; pointer-events: none;
  background: #14171d; border: 1px solid #2a2f38; border-radius: 4px;
  padding: 3px 7px; font-size: 11px; color: var(--fg, #e6e8eb);
  box-shadow: 0 4px 12px rgba(0, 0, 0, .45);
}
/* 实时 Shell（xterm.js 真终端，HiveOS hssh 同款） */
.shell-panel.rt .xterm-host { height: calc(100vh - 320px); min-height: 320px; background: #1e2128; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
.shell-panel.rt .xterm .xterm-viewport { background-color: #1e2128 !important; }
.shell-panel.rt .xterm { padding: 8px; }
.rt-install { background: rgba(240,160,32,.08); border: 1px solid rgba(240,160,32,.3); border-radius: 8px; padding: 10px 12px; margin-bottom: 10px; font-size: 13px; line-height: 1.7; }
.rt-install .btn { margin-top: 2px; }
/* 超频表单 · GpuOS 式（默认配置/常见预设 两页签、两列、每项带说明、黄字提示） */
.oc-tabs { display:flex; gap:4px; border-bottom:1px solid var(--border-subtle); margin-bottom:10px; }
.oc-tabs a { padding:7px 12px; cursor:pointer; color:var(--muted); font-size:13px; white-space:nowrap; }
.oc-tabs a:hover { color:var(--text); }
.oc-tabs a.on { color:#fff; font-weight:600; box-shadow: inset 0 -2px 0 #f0a020; }
.oc-grid2 { display:grid; grid-template-columns:1fr 1fr; gap:12px 18px; }
.ocf { display:flex; flex-direction:column; gap:4px; }
.ocf .ocf-l { font-size:12.5px; font-weight:600; }
.ocf input { width:100%; }
.ocf small { color:var(--muted); font-size:11px; line-height:1.5; }
.oc-warn { color:#f0a020; font-size:12px; margin-top:12px; line-height:1.6; }
.preset-list { display:flex; flex-direction:column; gap:8px; align-items:stretch; }
.preset-list .btn { text-align:left; }

/* ===== 超频模板参数（2026-10-13：列名常显在输入框上方，输入数字后也看得出是哪项） ===== */
.tpl-params { display:grid; grid-template-columns:repeat(3,1fr); gap:10px 12px; margin-bottom:4px; }
.tpl-params .tp { display:flex; flex-direction:column; gap:4px; }
.tpl-params .tp span { font-size:12px; color:var(--muted); }
.tpl-params .tp input { width:100%; }
@media (max-width: 560px) { .tpl-params { grid-template-columns:repeat(2,1fr); } }

/* ===== 矿机多选 ===== */
.tbl th.ck, .tbl td.ck { width:30px; text-align:center; padding-left:8px; padding-right:0; }
.rig-pick { max-height:44vh; overflow:auto; border:1px solid rgba(255,255,255,.08); border-radius:8px; padding:8px 10px; }
.rig-pick .ck { display:block; margin:4px 0; }

/* ===== 结果列表 ===== */
ul.rslt { margin:6px 0 0 16px; padding:0; line-height:1.65; font-size:13px; }
ul.rslt li { margin:2px 0; }

/* ===== 飞行表导入：预览勾选列表（2026-10-22 剪切板导入） ===== */
.imp-list { max-height:46vh; overflow:auto; margin-top:8px;
  border:1px solid rgba(255,255,255,.08); border-radius:8px; padding:4px 8px; }
.imp-row { display:flex; gap:8px; align-items:flex-start; padding:7px 4px;
  border-bottom:1px solid rgba(255,255,255,.06); font-size:13px; cursor:pointer; }
.imp-row:last-child { border-bottom:0; }
.imp-row input { margin-top:3px; flex:0 0 auto; accent-color:var(--primary); }
.imp-row > span { line-height:1.5; word-break:break-all; }

/* ===== 温度告警色 ===== */
.c-orange { color:#f59e0b; }
.badge.warn { background:rgba(245,158,11,.18); color:#fbbf24; border-color:rgba(245,158,11,.4); }

/* ===== 接入矿机页（对齐 GpuOS /install） ===== */.page-h { font-size:18px; font-weight:600; margin-bottom:4px; }
.page-sub { color:var(--muted); font-size:12.5px; margin-bottom:14px; }
.notice { display:flex; gap:8px; padding:10px 12px; border-radius:8px; font-size:12.5px; line-height:1.6;
  background:rgba(240,160,32,.10); border:1px solid rgba(240,160,32,.35); color:#f2d08a; margin-bottom:14px; }
.notice b { color:#ffd166; }
.cmdbox { display:flex; align-items:center; gap:8px; background:#0d1117; border:1px solid var(--border);
  border-radius:8px; padding:8px 8px 8px 12px; margin-top:8px; }
.cmdbox code { flex:1; font:12.5px/1.6 Consolas, "JetBrains Mono", monospace; color:#e6edf3;
  white-space:pre-wrap; word-break:break-all; }
.inst2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:12px; }
.inst2 .cell { background:var(--panel2); border:1px solid var(--border); border-radius:8px; padding:10px 12px; }
.inst2 .cell .k { font-size:11px; color:var(--muted); margin-bottom:4px; }
.inst2 .cell .v { font:12.5px/1.6 Consolas, monospace; word-break:break-all; }
.inst2 .cell .v .btn { margin-left:6px; }
ol.steps { margin:8px 0 0 18px; padding:0; line-height:1.75; color:var(--muted); font-size:12.5px; }
ol.steps b { color:var(--text); }
ol.steps code { color:var(--cyan); font-family:Consolas, monospace; }
@media (max-width: 760px) { .inst2 { grid-template-columns:1fr; } }

/* ===== 超频模板卡片 ===== */
.oc-card h3 { flex-wrap: wrap; }
.oc-rows-view { display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; }
.ocrow-view { display: flex; gap: 8px; align-items: baseline; }
.ocrow-view b { min-width: 130px; font-weight: 600; }

/* ===== 飞行表：内联快速创建 + 行式列表 ===== */
.fld4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.fld4 + .fld4 { margin-top: 10px; }
.fld4 input, .fld4 select { width: 100%; }
.fs-list { display: flex; flex-direction: column; gap: 6px; }
.fs-row { display: grid; grid-template-columns: 34px 1.3fr 1fr 1.2fr 1fr 1.2fr auto; gap: 10px;
  align-items: center; background: var(--panel2); border: 1px solid var(--border);
  border-radius: 8px; padding: 8px 12px; cursor: pointer; font-size: 13px; }
.fs-row:hover { border-color: var(--primary); }
.fs-row .num { font-size: 12px; }
.coinbadge { width: 26px; height: 26px; border-radius: 50%; display: inline-flex; align-items: center;
  justify-content: center; font-size: 12px; font-weight: 700; background: #f87171; color: #fff;
  border: none; }
.fs-name { font-weight: 600; }
.fs-act { display: flex; gap: 4px; justify-content: flex-end; }

/* ===== 矿机详情：双下拉面包屑 + 概要条 + 七页签 ===== */
.righead { display: flex; gap: 8px; align-items: center; margin-bottom: 10px; }
.righead select { max-width: 260px; }
.rig-title { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; flex-wrap: wrap; }
.rig-title h2 { font-size: 19px; font-weight: 650; }
.rig-title .sp { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap; }
/* --- HiveOS 式矿机详情头部（2026-10-14 胡老板截图） --- */
.hive-hpower { font-weight: 650; font-size: 13px; }
.hive-fs { display: flex; align-items: center; gap: 10px; background: #0d1117; border: 1px solid var(--border);
  border-radius: 8px; padding: 9px 12px; margin-bottom: 8px; }
.hive-fs .fs-main { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; font-size: 12.5px; min-width: 0; }
.hive-fs .fs-main b { font-size: 13px; }
.hive-fs .fs-coin { color: var(--primary); font-weight: 650; }
.hive-fs .fs-pool { color: var(--cyan); font-size: 12px; }
.hive-fs .fs-tag { margin-left: auto; font-size: 11px; color: var(--muted);
  border: 1px solid var(--border-subtle); border-radius: 6px; padding: 2px 8px; white-space: nowrap; }
.hive-fs.fs-none .fs-main { font-size: 12px; }
.hive-status { display: flex; flex-wrap: wrap; gap: 4px 10px; font-size: 12px; color: var(--muted); margin: 2px 0 4px; }
.hive-status b, .hive-status a { color: var(--text); }
.hive-status .hsep { opacity: .45; }

/* ===== 矿机详情头部（2026-10-14 胡老板第三张截图：GpuOS 机器页）=====
 * 标题行（☆+名+徽标 | 一排图标按钮）· 信息行（矿场/飞行表/超频模板/时长/最后在线 + 已启动/IP）
 * · 逐卡小条 · 通知条 · 四张统计卡 */
.rig-title .wstar { font-size: 17px; }
.rigicons { display: flex; gap: 4px; align-items: center; }
.icobtn { width: 30px; height: 28px; display: inline-flex; align-items: center; justify-content: center;
  background: var(--panel2); border: 1px solid var(--border); border-radius: 7px; color: var(--text);
  font-size: 14px; line-height: 1; cursor: pointer; text-decoration: none; padding: 0; }
.icobtn:hover { border-color: var(--primary); color: var(--primary); }
.icobtn.danger:hover { border-color: var(--red); color: var(--red); }
.rig-info { display: flex; gap: 14px; align-items: flex-start; flex-wrap: wrap; margin: 2px 0 10px; }
.rig-info-l { min-width: 0; flex: 1 1 520px; }
.iline, .iline2 { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: baseline; font-size: 12.5px; }
.iline { margin-bottom: 4px; }
.iline .ik, .iline2 .ik { color: var(--muted); font-size: 12px; }
.iline b, .iline2 b { font-weight: 600; }
.iline a, .iline2 a { color: var(--cyan); text-decoration: none; cursor: pointer; }
.iline a:hover, .iline2 a:hover { color: var(--primary); }
.tag.ioc { background: rgba(240,160,32,.14); color: #f2c078; border-color: rgba(240,160,32,.35); }
/* 顶部逐卡小条：一格一卡（编号 / 温度 / 算力 / 功耗） */
.riggpus { display: flex; gap: 6px; flex-wrap: wrap; }
.gmini { display: flex; flex-direction: column; align-items: center; gap: 1px; min-width: 62px;
  background: var(--panel2); border: 1px solid var(--border-subtle); border-radius: 7px; padding: 4px 6px; }
.gmini .gm-i { font-size: 10px; color: var(--muted); }
.gmini .gm-t { font-size: 13px; font-weight: 650; }
.gmini .gm-h { font-size: 11px; color: var(--green); }
.gmini .gm-p { font-size: 11px; color: var(--muted); }
/* 通知条：配置已变更 … ✕ */
.noticebar { display: flex; align-items: center; gap: 8px; background: rgba(240,160,32,.10);
  border: 1px solid rgba(240,160,32,.35); border-radius: 8px; padding: 7px 10px; margin-bottom: 10px; font-size: 12.5px; }
.noticebar .nb-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--primary); flex: none; }
.noticebar .nb-t { color: #f2d08a; }
.noticebar .nb-ago { margin-left: auto; }
.noticebar .icobtn { width: 24px; height: 22px; font-size: 12px; }

/* 概述页逐卡表格（GpuOS：设备/算力/核心·显存/风扇/功耗/核偏/锁核/存偏/锁存/PL/⚙） */
.tbl.gputbl td, .tbl.gputbl th { padding: 7px 10px; font-size: 12px; white-space: nowrap; }
.gputbl .gdev { white-space: normal; min-width: 260px; }
.gputbl .gdev-1 { font-size: 12.5px; }
.gputbl .gdev-1 .gbrand { font-size: 10px; }
.gputbl .gdev-2 { font-size: 11px; margin-top: 2px; }
.gputbl tr.gcpu td { color: var(--muted); }
/* 主机信息两列成对：整块收窄居中、两列靠拢（2026-10-14 胡老板「往左移/都挪到中间，离得太远」——
 * 原来 .hv 定死 34% 宽，剩下的全成了中间的空隙）。 */
.tbl.hosttbl { width:100%; max-width:860px; margin:0 auto; }
.tbl.hosttbl td { padding: 7px 12px; font-size: 12.5px; border-bottom: 1px solid var(--border-subtle); }
.hosttbl .hk { color: var(--muted); width: 100px; white-space: nowrap; }

/* --- 概述：HiveOS 式逐卡卡片 --- */
.gcard { display: grid; grid-template-columns: minmax(200px, 1.7fr) 100px 70px 110px 80px 80px 80px 64px;
  gap: 10px; align-items: center; padding: 9px 12px; border-bottom: 1px solid var(--border-subtle); }
.gcard:last-child { border-bottom: none; }
.gcard-h { padding: 4px 12px 8px; font-size: 11px; color: var(--muted); border-bottom: 1px solid var(--border-subtle); }
.gc-main { min-width: 0; }
.gc-id { display: flex; align-items: baseline; gap: 8px; }
.gc-id b { font-size: 13px; }
.gc-bus { font-size: 11px; color: var(--muted); }
.gc-name { font-size: 12px; margin-top: 2px; }
.gc-name .c-green { font-style: normal; font-weight: 650; }
.gc-sub { font-size: 11px; margin-top: 2px; }
.gc-col { text-align: right; font-size: 12.5px; min-width: 0; }
.gc-col .gc-k { display: block; font-size: 10px; color: var(--muted); letter-spacing: .04em; }
.gc-col b { font-weight: 600; }
.oc2sub { display: block; font-size: 11px; color: var(--muted); font-weight: 400; }
.fanwrap { display: flex; flex-direction: column; gap: 3px; align-items: flex-end; }
.fanwrap .gpubar { min-width: 60px; }
.gcard.gcpu { opacity: .6; grid-template-columns: minmax(200px, 1.7fr); }
.gcard.gcpu .gc-name { font-size: 12px; }
.gc-act button { white-space: nowrap; }
@media (max-width: 980px) {
  .gcard { grid-template-columns: 1fr 1fr 1fr; }
  .gcard-h { display: none; }
  .gc-main { grid-column: 1 / -1; }
}
.sumline { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 12.5px; color: var(--muted);
  background: var(--panel2); border: 1px solid var(--border-subtle); border-radius: 8px; padding: 8px 12px; }
.sumline b { color: var(--text); }
.subtabs { display: flex; gap: 2px; margin: 14px 0 0; border-bottom: 1px solid var(--border-subtle); overflow-x: auto; }
.subtabs a { padding: 8px 14px; font-size: 13px; color: var(--muted); cursor: pointer; white-space: nowrap; }
.subtabs a:hover { color: var(--text); }
.subtabs a.on { color: #fff; font-weight: 600; }
.rigsec { margin-top: 14px; }
.gpubar { height: 6px; background: #2a2e37; border-radius: 4px; overflow: hidden; min-width: 80px; }
.gpubar i { display: block; height: 100%; background: var(--primary); }
.gpu-cell { display: flex; align-items: center; gap: 8px; }
.gpu-sub { font-size: 11px; }
@media (max-width: 900px) { .fld4 { grid-template-columns: 1fr 1fr; } }

/* ===== 矿场卡片（对齐 GpuOS：星 + 四统计 + 底部行） ===== */
.fc-top { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.fc-top h3 { font-size: 15px; margin: 0; }
.fc-star { cursor: pointer; color: var(--muted); font-size: 15px; line-height: 1; }
.fc-star.on, .fc-star:hover { color: var(--primary); }
.fc-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; text-align: center; padding: 6px 0 10px; }
.fc-stats b { display: block; font-size: 15px; font-weight: 600; }
.fc-stats span { font-size: 11px; color: var(--muted); }
.fc-foot { display: flex; align-items: center; gap: 14px; border-top: 1px solid var(--border-subtle);
  padding-top: 8px; font-size: 12px; color: var(--muted); }
.fc-foot b { color: var(--text); }
.fc-edit { background: none; border: none; cursor: pointer; font-size: 13px; color: var(--muted); padding: 0; }
.fc-edit:hover { color: var(--primary); }

/* ===== 飞行表：表单底行 / 列表头筛选 ===== */
.fs-foot { display: flex; justify-content: space-between; align-items: center; margin-top: 12px; flex-wrap: wrap; gap: 8px; }
.fs-head { display: flex; align-items: center; gap: 18px; margin: 18px 2px 10px; font-size: 14px; font-weight: 600; }
.fs-tabs { display: flex; gap: 2px; font-weight: 400; }
.fs-tabs a { padding: 4px 12px; font-size: 13px; color: var(--muted); cursor: pointer; border-radius: 6px; }
.fs-tabs a:hover { color: var(--text); }
.fs-tabs a.on { color: var(--text); background: var(--panel2); }
/* 风扇自检结果（2026-10-24「风扇一直固定 22」） */
.fandiag { margin-top: 10px; border: 1px solid var(--border-subtle); border-radius: var(--radius); padding: 8px 10px; background: var(--panel2); }
.fandiag .fd-hd { font-size: 13px; font-weight: 600; margin-bottom: 6px; }
.fandiag .fd-verdict { font-size: 13px; line-height: 1.6; margin-bottom: 6px; }
.fandiag .fd-row { display: flex; gap: 8px; align-items: baseline; padding: 3px 0; font-size: 12px; flex-wrap: wrap; }
.fandiag .fd-k { flex: 0 0 190px; color: var(--muted); }
.fandiag code { font-family: Consolas, "JetBrains Mono", monospace; font-size: 12px; word-break: break-all; }

/* 现有飞行表标题行右侧的「复制列表 / 导出文件」 */
.fs-head .fs-exp { margin-left: auto; display: flex; gap: 6px; }
.fs-cm { font-size: 12px; color: var(--text); white-space: nowrap; }

/* ===== 页首说明行（说明句 + 右上橙描边按钮，对齐 GpuOS） ===== */
.page-line { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.page-line .sp { margin-left: auto; }
.page-line .muted { font-size: 12.5px; }

/* ===== 矿场页页签（矿机 / 设置，纯文字选中式，对齐 GpuOS） ===== */
.farm-tabs { display: flex; gap: 4px; margin: 0 2px 12px; }
.farm-tabs a { padding: 7px 12px; font-size: 13px; color: var(--muted); cursor: pointer; white-space: nowrap;
  border-radius: 6px; }
.farm-tabs a:hover { color: var(--text); }
.farm-tabs a.on { color: #fff; font-weight: 600; }

/* ===== 矿场页工具行（全部/☆收藏 + 搜索框） ===== */
.farm-toolbar { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.farm-toolbar .sp { margin-left: auto; }
.ff-tabs { display: flex; gap: 6px; }
.ff-tabs a { padding: 4px 12px; font-size: 12.5px; color: var(--muted); cursor: pointer;
  border: 1px solid transparent; border-radius: 6px; }
.ff-tabs a:hover { color: var(--text); }
.ff-tabs a.on { color: var(--text); border-color: var(--border); background: var(--panel); }
.farm-toolbar input { width: 200px; }

/* ===== 钱包：币种分组 ===== */
.coin-group { margin-bottom: 18px; }
.coin-ghead { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; font-size: 13px; }
.coin-ghead b { color: var(--text); }
.coinbadge.sm { width: 20px; height: 20px; font-size: 10px; }

/* ===== 超频模版：全宽单列卡片 ===== */
.oc-wide { display: flex; align-items: flex-start; gap: 14px; background: var(--panel);
  border: 1px solid var(--border); border-radius: 8px; padding: 12px 16px; margin-bottom: 10px; cursor: pointer; }
.oc-wide:hover { border-color: #4a5160; }
.oc-wmain { flex: 1; min-width: 0; }
.oc-wmain h3 { font-size: 14px; font-weight: 600; margin-bottom: 4px; }
.oc-wmain p { margin: 0; font-size: 12px; line-height: 1.7; }
.oc-wacts { display: flex; gap: 4px; align-items: center; }

/* ===== HiveOS 式超频矩阵（行=参数、列=每张卡+整机） ===== */
.ocmtx input { width: 100%; min-width: 64px; }
.ocmtx .mtx-lbl { white-space: nowrap; font-size: 12px; color: var(--muted); }
.ocmtx th.mtx-card { max-width: 120px; overflow: hidden; text-overflow: ellipsis; }
.ocmtx .mtx-all .mtx-sub { display: block; font-size: 10px; color: var(--muted); font-weight: 400; }

/* ===== 固定转速的生效状态（设定 / 实际 / 上次下发结果，2026-10-21） ===== */
.fanstate { margin: 0 0 10px; padding: 8px 10px; border-radius: var(--radius);
  background: var(--panel2); border: 1px solid var(--border-subtle);
  font-size: 12.5px; line-height: 1.8; }
.fanstate b { font-weight: 600; }


/* ===== 矿工消息里的可点入口（Spark Shell，2026-10-21）：带平台小图标，点一下进终端 ===== */
.msg-link { display: inline-flex; align-items: center; gap: 4px; color: var(--text); text-decoration: none; }
.msg-link:hover { color: var(--primary); text-decoration: underline; }
.msg-link .msg-ico { width: 14px; height: 14px; border-radius: 3px; font-size: 9px; margin-right: 0; }


/* ===== 顶栏面包屑（2026-10-21）：名字是链接（点名字进主页），右边的 ▾ 才是切换器 ===== */
.crumb-a { color: var(--text); text-decoration: none; padding: 2px 2px; border-radius: 4px; max-width: 180px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.crumb-a:hover { color: var(--primary); background: var(--surface-hover); }
.tb-caret { width: auto; min-width: 0; padding: 0 2px; border: 0; background: transparent;
  color: var(--muted); font-size: 11px; cursor: pointer; -webkit-appearance: none; appearance: none; }
.tb-caret:hover { color: var(--primary); }
.tb-caret option { color: var(--text); background: var(--panel); }


/* ===== 顶栏面包屑（HiveOS 同款「大汉 ⇕」）：名字是链接，⇕ 是切换器（2026-10-21） ===== */
.crumb-a { color: var(--text); text-decoration: none; padding: 2px 3px; border-radius: 4px;
  max-width: 190px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.crumb-a:hover { color: var(--primary); background: var(--surface-hover); }
.crumb-sw { background: transparent; border: 1px solid transparent; color: var(--muted); cursor: pointer;
  font-size: 12px; line-height: 1; padding: 3px 4px; border-radius: 4px; }
.crumb-sw:hover { color: var(--primary); border-color: var(--border); }
/* 切换列表（⇕ 弹出） */
.pick-list { display: flex; flex-direction: column; gap: 6px; min-width: 220px; }
.pick-list .btn { justify-content: flex-start; text-align: left; }


/* ===== 手机端（2026-10-25 胡老板「手机端显示不全」）：表格横向滚动 + 卡片两列 ===== */
@media (max-width: 760px) {
  :root { --page-px: 10px; }
  main { padding: 10px var(--page-px); }
  /* 表格：外层横向滚动，列不再被压扁/裁掉 */
  .card, .panel, .view, section.card { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .tbl { min-width: 620px; }
  .tbl.workers { min-width: 760px; }
  .tbl.gputbl { min-width: 700px; }
  .tbl.hosttbl { min-width: 420px; }
  /* 统计卡、矿场卡：两列，别挤成一列长条 */
  .cards { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .stats, .statgrid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  /* 顶栏：允许换行，别把右侧图标挤出屏幕 */
  .topbar, header.top { flex-wrap: wrap; gap: 6px; }
  .crumb select, .crumb-a { max-width: 120px; }
  /* 页签横滑 */
  .tabs, .farm-tabs { overflow-x: auto; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; }
  .tabs a, .farm-tabs a { white-space: nowrap; }
  /* 弹窗贴近屏幕边缘 */
  #modal .mcard { max-width: calc(100vw - 16px); margin: 8px; }
}


/* ===== 手机端工人列表：卡片式（2026-10-25 胡老板「改成这种」GpuOS 手机版） ===== */
.rigcards { display: flex; flex-direction: column; gap: 8px; }
.rigcard { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 10px 12px; border: 1px solid var(--border-subtle); border-radius: 10px;
  background: var(--panel); text-decoration: none; color: var(--text); }
.rigcard:active { background: var(--surface-hover); }
.rigcard.off { opacity: .55; }
.rigcard .rc-l { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.rigcard .rc-1 { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.rigcard .rc-1 b { font-size: 14px; }
.rigcard .rc-2 { display: flex; align-items: center; gap: 8px; font-size: 11.5px; color: var(--muted); flex-wrap: wrap; }
.rigcard .rc-star { color: var(--muted); cursor: pointer; }
.rigcard .rc-star.on { color: #f0a020; }
.rigcard .rc-r { text-align: right; display: flex; flex-direction: column; gap: 6px; flex: none; align-items: flex-end; }
.rigcard .rc-r b { font-size: 15px; color: var(--text); }
@media (max-width: 760px) { .wscroll { overflow-x: visible; } }

/* 手机上每张卡一个温度方块（绿/橙/红/灰），右侧算力与币种（2026-10-25 GpuOS 同款） */
/* 8 张卡也要挤在一行（2026-10-25 胡老板「温度搞成1行的」） */
.rigcard .rc-gpus { display: flex; gap: 2px; flex-wrap: nowrap; justify-content: flex-end; max-width: none; }
.rigcard .rc-block { flex: none; min-width: 17px; height: 16px; border-radius: 3px; background: #3a4048; color: #0b0f14;
  font-size: 9.5px; line-height: 16px; text-align: center; font-weight: 700; padding: 0 2px; }
.rigcard .rc-block.ok { background: #3fbf6f; }
.rigcard .rc-block.warn { background: #f0a020; }
.rigcard .rc-block.crit { background: #e04b4b; }
.rigcard .rc-block.na { background: #3a4048; }
.rigcard .rc-hs { font-size: 12.5px; color: var(--muted); display: flex; align-items: center; gap: 4px; }
.rigcard .rc-hs b { color: var(--text); font-size: 14px; }


/* 离线机器用红色表示（2026-10-25 胡老板「矿场离线的机器用红色表示」） */
.tbl tbody tr.offrow td { color: var(--muted); }
.tbl tbody tr.offrow .wname, .tbl tbody tr.offrow .wname-a, .tbl tbody tr.offrow .wname-a:hover { color: var(--muted); }
.tbl tbody tr.offrow .wstar { color: var(--muted); }
.rigcard.off { opacity: .95; border-color: var(--border-subtle); }
.rigcard.off b, .rigcard.off .rc-2, .rigcard.off .rc-2 .muted { color: var(--muted); }

/* 矿场卡片：离线数红色且不折行（2026-10-25 胡老板截图里 (离线 1) 被拆成竖排） */
.fc-stats .c-red, .fc-stats span[style*="e04b4b"] { color: #e04b4b !important; }
.fc-stats .v, .fc-stats .s { white-space: nowrap; }


/* 在线/离线配色（2026-10-25 胡老板：在线机器绿色状态 + 白色名字，离线灰色名字） */
.tbl tbody tr:not(.offrow) .wname-a { color: var(--text); }
.tbl tbody tr.offrow .wname-a { color: var(--muted); }
.rigcard:not(.off) b { color: var(--text); }
.rigcard.off b { color: var(--muted); }
/* 矿场卡片：手机上一行一个，别挤成两列 */
@media (max-width: 760px) {
  .cards { grid-template-columns: 1fr !important; }
  .fc-stats { display: flex; flex-wrap: wrap; gap: 10px 16px; }
}

/* 矿场卡片：在线数强制绿色，总数保持默认白色（2026-10-25） */
.fc-stats .v span[style*="var(--green)"], .fc-stats span[style*="var(--green)"] { color: var(--green) !important; }
.fc-stats .v { color: var(--text); }

/* 矿场卡片字号：数值在 <b class="num"> 里（不是 .v），在线绿字是它内部的 span —— 三者都 16px */
.fc-stats b.num, .fc-stats b.num span, .fc-stats b.num a { font-size: 16px !important; }
.fc-stats > div > span { font-size: 12px !important; }

/* 矿场卡片标签「矿机 在线/离线」在小屏不折行 */
.fc-stats > div > span { white-space: nowrap; }

/* 2026-10-26 胡老板：掉卡（缺卡）用**红框**、显卡有问题（温度偏高/异常）用**黄框** */
.tcell.tmiss { background: rgba(220,38,38,.10); color: #f87171; border: 1.5px solid #e04b4b; box-sizing: border-box; }
.tcell.twarm { background: rgba(245,158,11,.30); color: #fbbf24; }        /* 偏热：只变橙，不加框 */
.tcell.thot { background: rgba(220,38,38,.34); color: #f87171; }         /* 高温：只变红，不加框 */
/* 手机端方块同理 */
.rigcard .rc-block.na { background: rgba(220,38,38,.10); color: #f87171; box-shadow: inset 0 0 0 1.5px #e04b4b; }
.rigcard .rc-block.warn { background: #f0a020; color: #0b0f14; }        /* 偏热：橙底，不加框 */

/* 2026-10-26 胡老板：温度阈值只管**颜色**；「显卡报错/读不到」用**黄框**；掉卡用**红框** */
.tcell.tna { background: rgba(245,158,11,.10); color: #fbbf24; border: 1.5px solid #f5a623; box-sizing: border-box; }
.rigcard .rc-block.na { background: rgba(245,158,11,.12); color: #fbbf24; box-shadow: inset 0 0 0 1.5px #f5a623; }
.rigcard .rc-block.miss { background: rgba(220,38,38,.10); color: #f87171; box-shadow: inset 0 0 0 1.5px #e04b4b; }

/* 3.11.2：温度分档只靠颜色，不再加边框（边框只给「掉卡=红 / 报错=黄」） */
.rigcard .rc-block.crit { background: #e04b4b; color: #0b0f14; }

/* 手机卡片左侧的批量选择框（2026-10-26 胡老板「手机端没有批量选择机器的按钮」） */
.rigcard .rigck { flex: none; width: 16px; height: 16px; margin: 0 8px 0 0; accent-color: var(--primary); }
.rigcard { align-items: center; }

/* 2026-10-28 手机卡片对齐：复选框顶对齐，左边内容占满剩余宽度并左对齐 */
.rigcard { align-items: flex-start; justify-content: flex-start; }
.rigcard .rigck { margin-top: 2px; }
.rigcard .rc-l { flex: 1 1 auto; min-width: 0; text-align: left; }
.rigcard .rc-1, .rigcard .rc-2 { justify-content: flex-start; text-align: left; }
.rigcard .rc-r { margin-left: auto; }

/* 2026-10-28 顶栏面包屑（HiveOS 同款：矿场名可点 + 小箭头切矿场） */
.crumb-a { color: var(--text); text-decoration: none; font-weight: 600; }
.crumb-a:hover { color: var(--primary); text-decoration: underline; }
.crumb-pick { background: transparent; border: 0; color: var(--muted); cursor: pointer; font-size: 13px; padding: 0 2px; }
.crumb-pick:hover { color: var(--text); }
.crumb-sep { color: var(--muted); margin: 0 4px; }
.crumb-sel { background: transparent; border: 1px solid transparent; color: var(--text); font-weight: 600; padding: 2px 4px; }
.crumb-sel:hover { border-color: var(--border); }
.fspick { display: flex; flex-direction: column; gap: 2px; max-height: 60vh; overflow: auto; }
.fspick-item { display: block; padding: 9px 12px; border-radius: 8px; color: var(--text); text-decoration: none; }
.fspick-item:hover { background: var(--surface-hover); }
.fspick-item.on { background: rgba(245,158,11,.14); color: #fbbf24; }





/* 飞行表行内按钮（手机也要能看到「📋 复制 / 套用 / ✏️ / 🗑」） */
.fs-act { display: flex; gap: 4px; flex-wrap: wrap; justify-content: flex-end; }
@media (max-width: 760px) {
  .fs-act { justify-content: flex-start; width: 100%; margin-top: 6px; }
  .fs-row { flex-wrap: wrap; }
}

/* 右上角动作按钮改成文字（2026-11-02）：小号文字按钮，浅底，危险动作红字 */
.icobtn.txt { width: auto; padding: 0 9px; height: 28px; font-size: 12.5px; font-weight: 500;
  border-radius: 7px; white-space: nowrap; }
.icobtn.txt.danger { color: #f87171; border-color: rgba(248,113,113,.35); }
.icobtn.txt.danger:hover { background: rgba(248,113,113,.12); }
.rigicons { display: flex; gap: 6px; flex-wrap: wrap; }

/* 2026-11-02 胡老板「算力改成单行」：数值和单位不折行（以前窄列会把 TH/s 挤到下一行） */
.whash, .whash b, .whash span { white-space: nowrap; }
.tbl.workers td.whash { min-width: 74px; }

/* 2026-11-02：份额列别那么宽；桌面端整表收进容器，不出现左右滚动条 */
.tbl.workers th, .tbl.workers td { padding-left: 6px; padding-right: 6px; }
.tbl.workers th:nth-child(5), .tbl.workers td:nth-child(5) { max-width: 150px; }
.tbl.workers { width: 100%; }
@media (min-width: 761px) {
  .wscroll { overflow-x: hidden; }
}

/* 统计卡里的副数字（离线数）：红色、不折行（2026-11-02） */
.statcard b i { white-space: nowrap; }
.statcard b i.off { color: #e04b4b; }

/* 2026-11-06 胡老板：列表里的币种标签文字改成白色（边框/底色不变） */
.tbl.workers td .tag, .tbl.workers .tag { color: var(--text); }

/* 2026-11-07 胡老板「这个字看不清楚」：温度徽标改成实底高对比 + 加粗加大一点。
 * 以前「偏热」是琥珀字 + 18% 琥珀底，11px 中文字在深色主题下糊成一团。 */
.badge.tbadge { font-size: 11.5px; font-weight: 700; letter-spacing: .5px; border-radius: 6px; padding: 1px 8px; }
.badge.tbadge.warm { background: #f59e0b; color: #1b1203; border-color: #f59e0b; }
.badge.tbadge.crit { background: #dc2626; color: #fff; border-color: #dc2626; }

/* 2026-11-08 飞行表行尾下拉（HiveOS 同款）：<details> 做，不需要 JS 定坐标 */
.fsmenu { position: relative; display: inline-block; }
.fsmenu > summary { list-style: none; cursor: pointer; user-select: none; }
.fsmenu > summary::-webkit-details-marker { display: none; }
.fsmenu > summary::marker { content: ''; }
.fsmenu[open] > summary { border-color: var(--primary); color: var(--primary); }
.fsmenu-pop {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 60;
  display: flex; flex-direction: column; gap: 2px; min-width: 132px; padding: 6px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
  box-shadow: 0 10px 28px rgba(0,0,0,.45);
}
.fsmenu-pop button {
  display: block; width: 100%; text-align: left; padding: 7px 10px; border: 0; border-radius: 6px;
  background: transparent; color: var(--text); font: inherit; font-size: 13px; cursor: pointer;
}
.fsmenu-pop button:hover { background: rgba(255,255,255,.08); }

/* 2026-11-08 飞行表行尾 ▾ 浮层（按钮 + 绝对定位，不依赖 details） */
.fs-act { position: relative; }
.fsmenu-pop {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 80;
  display: flex; flex-direction: column; gap: 2px; min-width: 138px; padding: 6px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 10px;
  box-shadow: 0 10px 28px rgba(0,0,0,.45);
}
.fsmenu-pop.hidden { display: none; }
.fsmenu-pop button {
  display: block; width: 100%; text-align: left; padding: 7px 10px; border: 0; border-radius: 6px;
  background: transparent; color: var(--text); font: inherit; font-size: 13px; cursor: pointer;
}
.fsmenu-pop button:hover { background: rgba(255,255,255,.08); }
