:root {
  --bg: #23252b;
  --bg-2: #121316;
  --panel: #26282e;
  --panel-2: #2e3138;
  --line: #3a3d45;
  --text: #eceff4;
  --muted: #8b909a;
  --blue: #228be6;
  --green: #40c057;
  --red: #fa5252;
  --orange: #fd7e14;
  --yellow: #fab005;
  --purple: #cc5de8;
  --font: "Noto Sans SC", "IBM Plex Sans", system-ui, sans-serif;
}

* { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font);
  font-size: 15px;
}

.app.hive { min-height: 100%; padding-bottom: 48px; }

.shell {
  width: min(1280px, calc(100% - 48px));
  margin-left: auto;
  margin-right: auto;
}
.page { padding-top: 4px; }

/* Top bar */
.topbar {
  height: 46px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  background: #0e0f11;
  border-bottom: 1px solid #22242a;
}
.topbar-inner {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.topbar-left, .topbar-right { display: flex; align-items: center; gap: 6px; }
.brand {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  color: var(--text);
  font-weight: 700;
}
.brand-h {
  width: 24px; height: 24px;
  border-radius: 4px;
  background: linear-gradient(145deg, #ffb020, #f76707);
  color: #1a1b1e;
  display: grid; place-items: center;
  font-weight: 800; font-size: 13px;
}
.brand-name { font-size: 16px; }
.brand-logo {
  display: block;
  height: 28px;
  width: auto;
  max-width: 180px;
  object-fit: contain;
}
.login-logo {
  height: 36px;
  max-width: 220px;
}
.crumb-sep { color: #5c5f66; margin: 0 4px; }
.crumb-wrap { position: relative; }
.crumb {
  border: 0; background: transparent; color: var(--muted);
  font: 500 15px var(--font); cursor: pointer; padding: 4px 6px; border-radius: 4px;
}
.crumb:hover { background: var(--panel); color: #cfd3dc; }
.crumb.muted { color: var(--muted); background: transparent; }
.crumb.is-on {
  color: #fff;
  background: rgba(255,255,255,.08);
}
.crumb.is-on:hover { color: #fff; background: rgba(255,255,255,.12); }
.crumb-menu {
  position: absolute; top: 100%; left: 0; z-index: 40;
  min-width: 180px; margin-top: 4px;
  background: var(--panel); border: 1px solid var(--line); border-radius: 6px;
  box-shadow: 0 8px 24px rgba(0,0,0,.4); padding: 4px;
}
.crumb-menu button {
  display: block; width: 100%; text-align: left;
  border: 0; background: transparent; color: var(--text);
  padding: 8px 10px; border-radius: 4px; font: 14px var(--font); cursor: pointer;
}
.crumb-menu button:hover, .crumb-menu button.is-on { background: var(--panel-2); }
.tb-ico, .tb-link {
  border: 0; background: transparent; color: #c5c9d2;
  cursor: pointer; font: 14px var(--font); padding: 5px 7px; border-radius: 5px;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  line-height: 1;
}
.tb-ico:hover, .tb-link:hover, .tb-user:hover { color: var(--text); background: var(--panel); }
.tb-ico .ico, .tb-metric .ico { width: 22px; height: 22px; display: block; flex: 0 0 auto; }
.tb-metric {
  display: inline-flex; align-items: center; gap: 6px;
  color: #c5c9d2; padding: 4px 8px;
  font-variant-numeric: tabular-nums;
  font-size: 15px;
}
.tb-clock-txt {
  font-variant-numeric: tabular-nums;
  font-size: 14px;
  color: inherit;
}

.tb-update {
  appearance: none;
  border: 1px solid var(--line, #2a2f3a);
  background: transparent;
  color: var(--muted, #9aa3b2);
  border-radius: 999px;
  padding: 4px 10px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.02em;
  cursor: pointer;
  line-height: 1.2;
}
.tb-update:hover {
  color: var(--text, #e8ecf4);
  background: var(--panel, #151922);
  border-color: var(--text, #e8ecf4);
}
.tb-update:disabled {
  opacity: 0.55;
  cursor: wait;
}
.tb-update.is-busy::after {
  content: "…";
}

.tb-user {
  border: 0; background: transparent;
  color: var(--muted); padding: 5px 8px 5px 10px;
  font: 14px var(--font); cursor: pointer; border-radius: 5px;
}
.topbar-right { gap: 10px; }
.tb-refresh-wrap { position: relative; }
.tb-ico.tb-clock {
  background: #2a2c32;
  border: 1px solid #3a3d45;
  border-radius: 6px;
  padding: 5px 10px;
  min-height: 32px;
}
.tb-ico.tb-clock:hover { background: #32353c; }
.refresh-menu {
  position: absolute; top: calc(100% + 6px); right: 0; z-index: 50;
  min-width: 148px;
  background: #25262b;
  border: 1px solid #3a3d45;
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0,0,0,.45);
  padding: 6px;
}
.refresh-menu-title {
  color: var(--muted);
  font-size: 11px;
  padding: 6px 10px 4px;
}
.refresh-menu button {
  display: block; width: 100%; text-align: left;
  border: 0; background: transparent; color: var(--text);
  padding: 8px 10px; border-radius: 5px;
  font: 13px var(--font); cursor: pointer;
}
.refresh-menu button:hover { background: #2e3138; }
.refresh-menu button.is-on { background: rgba(34,139,230,.2); color: #74c0fc; }
.refresh-menu button.off { color: var(--muted); border-top: 1px solid #3a3d45; margin-top: 4px; border-radius: 0 0 5px 5px; }
.refresh-menu[hidden] { display: none !important; }

/* Cards — Hive style */
.cards {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 12px;
  padding: 16px 0 10px;
}
.card {
  position: relative;
  background: var(--panel);
  border: 1px solid #32353c;
  border-radius: 6px;
  padding: 16px 16px 14px;
  min-height: 84px;
  overflow: hidden;
}
.card .bar {
  position: absolute; left: 0; right: 0; top: 0; height: 3px;
  background: #373a40;
}
.card .bar > i {
  display: block; height: 100%;
}
.card .bar.ok > i { width: 100%; background: var(--yellow); }
.card .bar.warn > i { width: 40%; background: var(--red); margin-left: auto; }
.card .top {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 8px;
}
.card .v {
  font-size: 28px;
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
}
.card .side {
  font-size: 13px; font-weight: 600; padding-top: 4px;
}
.card .side.yellow { color: var(--yellow); }
.card .side.red { color: var(--red); }
.card .k { margin-top: 8px; color: var(--muted); font-size: 12px; }
.card .v.blue { color: #74c0fc; }
.card .v.green { color: var(--green); }
.card .v.red { color: var(--red); }
.card .v.sm { font-size: 22px; }
.card .v.cyan { color: #66d9e8; }

/* Hash totals card: fixed 2x2 slots */
.card-hash {
  padding: 10px;
  min-height: auto;
}
.hash-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5px;
}
.hash-item {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  background: #1c1e24;
  border: 1px solid #2a2d34;
  border-radius: 4px;
  padding: 5px 6px;
}
.hash-item .hv {
  font-size: 12px;
  font-weight: 600;
  color: #69db7c;
  line-height: 1.1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-variant-numeric: tabular-nums;
}
.hash-item .hk {
  font-size: 9px;
  color: #868e96;
  line-height: 1.1;
}
.hash-item.is-empty .hv { color: #495057; }
.hash-item.is-red .hv { color: var(--red); }

/* Menu tabs */
.menubar {
  display: flex;
  gap: 0;
  padding: 0;
  border-bottom: 1px solid #2c2e33;
  overflow-x: auto;
}
.menu {
  border: 0;
  background: transparent;
  color: var(--muted);
  padding: 13px 16px;
  font: 500 15px var(--font);
  cursor: pointer;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
}
.menu:hover { color: var(--text); }
.menu.is-active {
  color: var(--text);
  border-bottom-color: #fff;
}

/* Filter bar */
.filterbar {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: center;
  justify-content: space-between;
  padding: 12px 0;
}
.fb-left, .fb-right { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.cb { display: inline-flex; align-items: center; }
.fbtn {
  border: 0;
  background: transparent;
  color: var(--muted);
  padding: 6px 8px;
  font: 500 15px var(--font);
  cursor: pointer;
  border-radius: 4px;
}
.fbtn:hover { color: var(--text); }
.fbtn.is-on { color: var(--text); }
.btn-outline, .btn-dark {
  border: 1px solid #6b7280;
  background: transparent;
  color: rgba(255, 255, 255, 0.7);
  border-radius: 4px;
  padding: 6px 12px;
  font: 500 14px var(--font);
  cursor: pointer;
}
.btn-dark {
  background: var(--panel);
  border-color: #6b7280;
  color: rgba(255, 255, 255, 0.7);
}
.btn-outline:hover, .btn-dark:hover:not(:disabled) { border-color: #74c0fc; color: #fff; }
.btn-dark:disabled { opacity: 0.75; cursor: not-allowed; color: #e5e7eb; }
.batch { display: inline-flex; gap: 6px; align-items: center; margin-left: 6px; flex-wrap: wrap; }
.batch[hidden] { display: none !important; }
.batch-select {
  height: 30px;
  min-width: 150px;
  max-width: 220px;
  padding: 0 8px;
  border: 1px solid #6b7280;
  border-radius: 6px;
  background: #23252b;
  color: rgba(255, 255, 255, 0.7);
  font: 500 14px var(--font);
}
.batch-select:disabled { opacity: 0.8; color: #e5e7eb; }
.search-mini input {
  height: 30px;
  border: 1px solid var(--line);
  background: var(--bg-2);
  color: var(--text);
  border-radius: 4px;
  padding: 0 10px;
  width: 160px;
  outline: none;
}
.search-mini input:focus { border-color: var(--blue); }
.sel { color: rgba(255, 255, 255, 0.7); font-size: 14px; }
.sort-ctrl {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 4px;
}
.sort-dir {
  border: 0;
  background: transparent;
  color: var(--muted);
  padding: 2px 4px;
  cursor: pointer;
  line-height: 1;
  border-radius: 4px;
}
.sort-dir:hover { color: var(--text); background: #2a2d34; }
.sort-arrows {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 0;
  font-size: 9px;
  line-height: 1;
}
.sort-arrows .su,
.sort-arrows .sd { display: block; opacity: 0.35; }
.sort-ctrl.is-asc .sort-arrows .su { opacity: 1; color: #fff; }
.sort-ctrl.is-desc .sort-arrows .sd { opacity: 1; color: #fff; }
.sort-select {
  height: 30px;
  border: 1px solid var(--line);
  background: #2a2d34;
  color: var(--text);
  border-radius: 6px;
  padding: 0 26px 0 10px;
  font: 500 13px var(--font);
  outline: none;
  cursor: pointer;
  appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, #adb5bd 50%),
    linear-gradient(135deg, #adb5bd 50%, transparent 50%);
  background-position: calc(100% - 14px) 12px, calc(100% - 9px) 12px;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
}
.sort-select:focus { border-color: var(--blue); }
.sort { color: var(--muted); font-size: 12px; }
.view-btn {
  width: 30px; height: 30px;
  border: 1px solid var(--line);
  background: var(--panel);
  color: var(--muted);
  border-radius: 4px;
  cursor: pointer;
}
.view-btn.is-on { background: var(--blue); border-color: var(--blue); color: #fff; }

/* Rig list — Hive row */
.main { padding: 0 0 28px; }
.rig-list { background: transparent; border: 0; overflow-x: hidden; }
.rig-body { display: grid; gap: 0; width: 100%; min-width: 0; max-width: 100%; }
.rig-head,
.rig-row {
  display: grid;
  width: 100%;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
  justify-content: stretch;
  /* 全部用可收缩列，避免 max-content 撑出横向滚动条 */
  grid-template-columns:
    18px
    18px
    minmax(0, 1.1fr)            /* 矿机 */
    44px                        /* 收费 */
    minmax(0, 1.35fr)           /* 算力 */
    36px                        /* 有效 */
    36px                        /* 拒绝 */
    minmax(0, 1.8fr)            /* 显卡 */
    minmax(0, 0.55fr)           /* GPU */
    minmax(0, 0.6fr)            /* CPU */
    minmax(0, 0.55fr)           /* 总内存 */
    minmax(0, 0.6fr)            /* 内存 */
    minmax(0, 0.5fr)            /* 风扇 */
    minmax(0, 0.5fr)            /* 自动 */
    minmax(0, 0.65fr)           /* 功耗 */
    minmax(0, 0.7fr)            /* 刷新 */
    minmax(0, 0.7fr)            /* 版本 */
    36px;                       /* 远程 */
  gap: 4px;
  align-items: center;
  padding: 6px 4px;
}
.rig-head {
  background: #1c1e24;
  border-bottom: 1px solid #2a2d34;
  color: #868e96;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0;
  min-height: 34px;
  line-height: 1.2;
  text-align: left;
}
.rig-head .rh-name,
.rig-head .rh-hash,
.rig-head .rh-gpu,
.rig-head .rh-m,
.rig-head .rh-shares,
.rig-head .rh-remote {
  text-align: left;
  justify-self: start;
  width: 100%;
}
.rig-head .rh-shares { font-weight: 600; }
.rig-head .rh-m { font-weight: 600; }
.rig-spacer { display: none; }
.rig-shares-cell {
  text-align: left;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  font-weight: 600;
  color: var(--text);
  justify-self: start;
  width: 100%;
  max-width: none;
  overflow: visible;
}
.rig-head .rh-shares {
  font-size: 11px;
  line-height: 1.15;
  max-width: none;
}
.rig-shares-cell.is-ok { color: #69db7c; }
.rig-shares-cell.is-rej { color: #ff8787; }
.rig-shares-cell.is-empty { color: var(--muted); font-weight: 500; }
.rig-row {
  background: #23252b;
  border-bottom: 1px solid #1a1c20;
  min-height: 34px;
}
.rig-row:hover { background: #2a2d34; }
.rig-row.is-active { box-shadow: inset 0 0 0 1px rgba(34, 139, 230, 0.4); }
/* mining left bar removed: hashrate/power already show mining */
.rig-row.is-mining { box-shadow: none; }
.rig-row.is-stale-offline,
.billing-rig-row.is-stale-offline {
  opacity: 0.92;
}

/* MF-OFFLINE-GREY-2026-09-13: offline rows fully grey, no color */
.rig-row.is-offline-muted,
.rig-row.is-stale-offline,
.billing-rig-row.is-offline-muted,
.billing-rig-row.is-stale-offline,
.recv-rig-row.is-offline-muted {
  filter: grayscale(1) !important;
  opacity: 0.88;
}
.rig-row.is-offline-muted *,
.rig-row.is-stale-offline *,
.billing-rig-row.is-offline-muted *,
.billing-rig-row.is-stale-offline *,
.recv-rig-row.is-offline-muted * {
  /* keep structure; parent filter greys paints/SVG fills */
}
.rig-row.is-offline-muted .coin-val,
.rig-row.is-stale-offline .coin-val,
.rig-row.is-offline-muted .hash-val,
.rig-row.is-stale-offline .hash-val,
.rig-row.is-offline-muted .flight-name,
.rig-row.is-stale-offline .flight-name,
.rig-row.is-offline-muted .flight-name.is-warehouse,
.rig-row.is-stale-offline .flight-name.is-warehouse,
.rig-row.is-offline-muted .flight-name.is-bound-unknown,
.rig-row.is-stale-offline .flight-name.is-bound-unknown,
.rig-row.is-offline-muted .rig-name,
.rig-row.is-stale-offline .rig-name {
  color: #868e96 !important;
}
.rig-row.is-offline-muted .gpu-bars span,
.rig-row.is-stale-offline .gpu-bars span,
.rig-row.is-offline-muted .gpu-bars span.on,
.rig-row.is-stale-offline .gpu-bars span.on,
.rig-row.is-offline-muted .gpu-bars span.warn,
.rig-row.is-stale-offline .gpu-bars span.warn {
  background: #495057 !important;
  border-color: #495057 !important;
}
.rig-row.is-offline-muted .status-dot,
.rig-row.is-stale-offline .status-dot,
.rig-row.is-offline-muted .billing-status-dot,
.rig-row.is-stale-offline .billing-status-dot {
  background: #868e96 !important;
  box-shadow: none !important;
}

.rig-row.is-stale-offline .rig-name,
.rig-row.is-stale-offline .rig-name:hover,
.rig-row.is-stale-offline .rig-name.off,
.rig-row.is-stale-offline .hash-val,
.rig-row.is-stale-offline .hash-flight,
.rig-row.is-stale-offline .rig-metric,
.rig-row.is-stale-offline .fan-cell.is-on,
.rig-row.is-stale-offline .fan-speed.has-val,
.rig-row.is-stale-offline .pwr-cell,
.rig-row.is-stale-offline .rig-shares-cell,
.rig-row.is-stale-offline .rig-shares-cell.is-ok,
.rig-row.is-stale-offline .rig-shares-cell.is-rej,
.rig-row.is-stale-offline .gpu-model,
.rig-row.is-stale-offline .gpu-model.is-manual-oc,
.rig-row.is-stale-offline .gpu-oc-flag,
.rig-row.is-stale-offline .rig-fee-mark,
.rig-row.is-stale-offline .star,
.rig-row.is-stale-offline .star.on,
.rig-row.is-stale-offline .rig-remote,
.rig-row.is-stale-offline .rig-remote.is-on,
.rig-row.is-stale-offline .rig-remote.is-wait,
.rig-row.is-stale-offline .rig-remote.is-err,
.billing-rig-row.is-stale-offline .rig-name,
.billing-rig-row.is-stale-offline .rig-name:hover,
.billing-rig-row.is-stale-offline .rig-name.off,
.billing-rig-row.is-stale-offline .rig-metric,
.billing-rig-row.is-stale-offline .billing-cpu,
.billing-rig-row.is-stale-offline .billing-renter,
.billing-rig-row.is-stale-offline .billing-wait,
.billing-rig-row.is-stale-offline .billing-charged,
.billing-rig-row.is-stale-offline .billing-bal,
.billing-rig-row.is-stale-offline .billing-bal.is-low,
.billing-rig-row.is-stale-offline .fan-cell.is-on,
.billing-rig-row.is-stale-offline .gpu-model,
.billing-rig-row.is-stale-offline .gpu-oc-flag,
.billing-rig-row.is-stale-offline .btn-dark {
  color: #868e96 !important;
  border-color: #495057 !important;
}
.rig-row.is-stale-offline .gpu-bars span.on,
.rig-row.is-stale-offline .gpu-bars span.warn,
.billing-rig-row.is-stale-offline .gpu-bars span.on,
.billing-rig-row.is-stale-offline .gpu-bars span.warn {
  background: #495057 !important;
}
.rig-row.is-stale-offline .rig-fee-money,
.rig-row.is-stale-offline .rig-fee-money.is-rented {
  border-color: #495057 !important;
  background: rgba(73, 80, 87, 0.25) !important;
}
.rig-identity {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px;
  min-width: 0;
}
.rig-name {
  color: #74c0fc;
  font-weight: 600;
  font-size: 12px;
  text-decoration: none;
  cursor: pointer;
  flex-shrink: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
}
.rig-name:hover { text-decoration: underline; color: #a5d8ff; }
.rig-name.off { color: var(--muted); }

.rig-identity {
  display: flex;
  align-items: center;
  gap: 4px;
  min-width: 0;
}
.rig-ev-count {
  display: inline-block;
  flex: 0 0 3ch;
  width: 3ch;
  min-width: 3ch;
  max-width: 3ch;
  margin-left: 2px;
  text-align: left;
  color: #d48989;
  font-size: 11px;
  font-weight: 100;
  font-variant-numeric: tabular-nums;
  line-height: 1.2;
  overflow: hidden;
  white-space: nowrap;
}
#farmPage #view-workers .rig-row .rig-ev-count {
  flex: 0 0 3ch !important;
  width: 3ch !important;
  min-width: 3ch !important;
  color: #d48989 !important;
  font-weight: 100 !important;
}

.rig-hash-cell {
  min-width: 0;
  width: 100%;
  padding: 0;
  border-left: 0;
}
.hash-chip {
  display: inline-flex;
  align-items: baseline;
  gap: 3px;
  min-width: 0;
  max-width: 100%;
  line-height: 1.2;
}
.hash-chip .hash-val {
  color: #4dabf7;
  font-weight: 650;
  font-size: 11px;
  letter-spacing: 0;
  white-space: nowrap;
  flex: 0 0 auto;
}
.hash-chip .hash-flight {
  color: #868e96;
  font-size: 10px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
  flex: 1 1 auto;
}
.hash-chip.is-idle .hash-flight {
  color: #9775fa;
}
.mining-bar {
  width: 12px;
  height: 5px;
  border-radius: 2px;
  background: #40c057;
  flex-shrink: 0;
}
.rig-gpu-cell {
  /* MF-GPU-CELL-3ZONE-2026-09-13 */
  display: flex;
  align-items: center;
  gap: 4px;
  min-width: 0;
  width: 100%;
  max-width: 100%;
  overflow: hidden;
  flex-wrap: nowrap;
  box-sizing: border-box;
  justify-content: flex-start;
}
.rig-gpu-cell .gpu-oc-zone {
  flex: 0 0 18px;
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.rig-gpu-cell .gpu-oc-zone .gpu-oc-flag {
  margin: 0;
  font-size: 12px;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
}
.rig-gpu-cell .gpu-oc-zone .gpu-oc-flag.is-empty {
  visibility: hidden;
}
.rig-gpu-cell .gpu-oc-zone .gpu-oc-svg {
  display: block;
  width: 16px;
  height: 16px;
}
.rig-gpu-cell .gpu-model {
  color: var(--text);
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex: 0 0 auto;
  width: 4.6em;
  max-width: 4.6em;
  min-width: 4.6em;
  text-align: left;
}
.rig-gpu-cell .gpu-bars-zone {
  flex: 1 1 auto;
  min-width: 0;
  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  overflow: hidden;
}
.rig-gpu-cell .gpu-bars-zone .gpu-bars {
  display: inline-flex;
  align-items: center;
}
.rig-gpu-cell .gpu-model .gpu-oc-flag {
  margin-right: 0;
  font-size: 11px;
  line-height: 1;
}
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-oc-miss,
.rig-gpu-cell .gpu-model.is-oc-miss .gpu-oc-flag,
.rig-gpu-cell .gpu-oc-zone .gpu-oc-flag.is-miss,
.rig-gpu-cell .gpu-oc-zone .gpu-oc-flag.is-bound-grey {
  /* miss stays colored via svg; grey handled below */
}
.rig-gpu-cell .gpu-oc-zone .gpu-oc-flag.is-bound-grey {
  filter: grayscale(1) contrast(0.85) brightness(0.9);
  opacity: 0.8;
}
.rig-gpu-cell .gpu-model.is-manual-oc {
  color: #c9a87c;
}
.rig-metric {
  text-align: left;
  color: var(--text);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  justify-self: start;
  width: 100%;
  overflow: hidden;
}
.rig-metric.fan-cell.is-on {
  color: #69db7c;
  font-size: 12px;
}
.rig-metric.fan-speed.has-val {
  color: #69db7c;
  font-weight: 600;
}
.rig-metric.pwr-cell {
  color: #74c0fc;
  font-weight: 500;
}
.rig-metric.refresh-cell {
  color: #adb5bd;
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  white-space: nowrap;
}
.rig-metric.ver-cell {
  color: #adb5bd;
  font-size: 12px;
  white-space: nowrap;
}
.rig-remote {
  border: 0;
  background: transparent;
  color: #868e96;
  cursor: pointer;
  padding: 0;
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  justify-self: start;
}
.rig-remote svg {
  width: 18px;
  height: 18px;
  display: block;
}
.rig-remote:hover:not(:disabled) { color: #8ce99a; }
.rig-remote.is-on { color: #69db7c; }
.rig-remote.is-wait { color: #fcc419 !important; }
.rig-remote.is-err { color: #ff6b6b !important; }
.rig-remote.is-off,
.rig-remote:disabled {
  color: #868e96;
  cursor: not-allowed;
  opacity: 0.7;
}
.rig-remote.is-wait:not(:disabled),
.rig-remote.is-err:not(:disabled) {
  cursor: pointer;
  opacity: 1;
}
.alert-dot {
  width: 20px; height: 20px;
  border-radius: 50%;
  background: var(--red);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
  display: grid; place-items: center;
}
.alert-dot.hide { visibility: hidden; }
.ico-rocket { color: var(--red); font-size: 14px; text-align: center; }
.ico-dash { color: var(--muted); text-align: center; }
.ico-n {
  width: 18px; height: 18px;
  border-radius: 3px;
  background: #2b8a3e;
  color: #fff;
  font-size: 11px; font-weight: 700;
  display: grid; place-items: center;
}
.ico-n.off { background: #495057; }
.badge-flight { color: var(--purple); font-size: 12px; white-space: nowrap; }
.badge-ok { color: var(--green); font-size: 12px; }
.driver-install {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 120px;
  max-width: 220px;
}
.driver-install-bar {
  height: 6px;
  border-radius: 999px;
  background: #343a40;
  overflow: hidden;
}
.driver-install-bar > i {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, #228be6, #51cf66);
  transition: width 0.6s ease;
}
.driver-install.is-fail .driver-install-bar > i {
  background: linear-gradient(90deg, #e03131, #ff6b6b);
}
.driver-install-text {
  color: #74c0fc;
  font-size: 11px;
  line-height: 1.2;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.driver-install.is-fail .driver-install-text { color: #ff8787; }
.driver-install.is-success .driver-install-bar > i {
  background: linear-gradient(90deg, #40c057, #69db7c);
}
.driver-install.is-success .driver-install-text { color: #69db7c; }
.driver-install .driver-install-bar > i.expand {
  background: linear-gradient(90deg, #fab005, #ffd43b);
}
.gpu-bars {
  display: inline-flex;
  gap: 3px;
  align-items: center;
  justify-content: flex-start;
  flex: 0 0 auto;
  width: auto;
  min-width: 0;
  max-width: none;
  box-sizing: border-box;
}
.gpu-bars span {
  width: 12px;
  height: 12px;
  border-radius: 0;
  background: #373a40;
  flex: 0 0 10px;
  box-sizing: border-box;
}
.gpu-bars span.on { background: #40c057; }

.gpu-bars span.miss {
  background: transparent !important;
  border: 1.5px solid #ff6b6b !important;
  box-sizing: border-box;
  border-radius: 2px;
}

.gpu-bars span.warn { background: var(--yellow); }
.gpu-bars span.crit { background: #ff6b6b; }
.gpu-bars span.off { background: #495057; }
.gpu-bars span.empty { background: #2a2d34; opacity: 0.55; }
.rig-stats {
  display: flex;
  gap: 14px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
  justify-self: end;
  white-space: nowrap;
}
.rig-stats b { color: var(--text); font-weight: 500; }
.rig-stats .pwr { color: #74c0fc; }
.star {
  color: #5c5f66;
  cursor: pointer;
  font-size: 15px;
  border: 0;
  background: transparent;
  padding: 0;
}
.star.on { color: var(--yellow); }
.empty-tip {
  text-align: center;
  color: var(--muted);
  padding: 48px 16px;
  background: var(--panel);
  border-radius: 6px;
}

.placeholder {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 28px 22px;
  color: var(--muted);
}
.placeholder h2 { margin: 0 0 8px; color: var(--text); font-size: 18px; }
.section-title {
  margin: 28px 0 14px;
  color: var(--text);
  font-size: 15px;
  font-weight: 600;
}
.section-title:first-of-type { margin-top: 18px; }
.flight-form {
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 18px 28px !important;
  max-width: 920px !important;
  align-items: start !important;
  padding: 22px 24px;
  background: #23252b;
  border: 1px solid #2e3138;
  border-radius: 12px;
}
.flight-form label {
  gap: 10px !important;
  font-size: 13px !important;
  line-height: 1.4;
}
.flight-form input,
.flight-form select,
.flight-form textarea {
  padding: 12px 14px !important;
  border-radius: 8px !important;
  font-size: 14px !important;
  min-height: 44px;
  box-sizing: border-box;
}
.flight-form .hint-cmd textarea {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12px !important;
  color: #adb5bd;
  background: #1c1e23 !important;
  min-height: 72px;
  line-height: 1.55;
  resize: vertical;
}
.flight-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
  padding-top: 8px;
}
.flight-actions .btn {
  padding: 10px 18px;
  min-height: 40px;
}
.flight-page-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 8px;
}
.flight-page-head h2 { margin: 0 0 8px; }
.flight-page-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  flex-shrink: 0;
}
.flight-modal {
  /* width overridden later by .modal.flight-modal (after base .modal rule) */
  max-height: min(94vh, 980px);
  display: flex;
  flex-direction: column;
  border-radius: 14px;
  box-shadow: 0 18px 50px rgba(0, 0, 0, 0.45);
  overflow: hidden;
}
.flight-modal .modal-head {
  padding: 18px 28px;
  background: #252830;
}
.flight-modal .modal-head h2 {
  font-size: 20px;
  font-weight: 650;
  letter-spacing: 0.01em;
}
.flight-modal .modal-head .icon-btn {
  width: 36px;
  height: 36px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  line-height: 1;
  border-radius: 8px;
}
.flight-modal .modal-body {
  overflow: auto;
  max-height: calc(94vh - 140px);
  padding: 22px 28px 18px !important;
  gap: 16px !important;
  background: #1f2228;
}
.flight-modal .modal-body > .hint {
  margin: 0;
  padding: 12px 14px;
  font-size: 13px;
  line-height: 1.55;
  color: #c5cad3;
  background: #2a2e36;
  border: 1px solid #353a44;
  border-radius: 10px;
}
.flight-box {
  border: 1px solid #3a404c;
  background: #252830;
  border-radius: 12px;
  padding: 16px 18px 18px;
  min-width: 0;
  overflow: hidden;
}
.flight-boxes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  align-items: start;
  min-width: 0;
}
.flight-form-stack {
  grid-template-columns: 1fr !important;
  gap: 16px !important;
}
.flight-form-modal {
  max-width: none !important;
  margin: 0;
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  grid-template-columns: 1fr !important;
  gap: 16px !important;
  width: 100%;
  min-width: 0;
}
.flight-modal .flight-form-modal label {
  gap: 8px !important;
  font-size: 13px !important;
  color: #b8bfc9 !important;
  font-weight: 500;
  line-height: 1.35;
  min-width: 0;
  max-width: 100%;
}
.flight-modal .flight-form-modal input,
.flight-modal .flight-form-modal select,
.flight-modal .flight-form-modal textarea {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  padding: 13px 14px !important;
  border-radius: 10px !important;
  font-size: 14px !important;
  min-height: 48px !important;
  line-height: 1.4;
  background: #2a2e36 !important;
  border: 1px solid #3a404c !important;
  color: var(--text) !important;
  box-sizing: border-box;
}
.flight-modal .wallet-pick-row {
  grid-template-columns: 1fr;
  gap: 10px;
}
.flight-modal .coin-pick-row {
  grid-template-columns: 1fr;
  min-width: 0;
}
.flight-modal .coin-pick-row select,
.flight-modal .wallet-pick-row select,
.flight-modal .wallet-pick-row input {
  width: 100%;
  max-width: 100%;
  min-width: 0;
}
.flight-box-title {
  font-size: 13px;
  font-weight: 600;
  color: #e8eaed;
  margin: 0 0 14px;
  padding-bottom: 10px;
  border-bottom: 1px solid #343944;
  letter-spacing: 0.02em;
}
.flight-box-cmd textarea {
  width: 100%;
  box-sizing: border-box;
  min-height: 96px;
  padding: 14px 16px !important;
  border-radius: 10px !important;
  border: 1px solid #3a404c !important;
  background: #171a1f !important;
  color: #adb5bd !important;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 13px !important;
  line-height: 1.6;
  resize: vertical;
}
.flight-modal .flight-form-modal input:focus,
.flight-modal .flight-form-modal select:focus,
.flight-modal .flight-form-modal textarea:focus,
.flight-box-cmd textarea:focus {
  outline: none;
  border-color: #4dabf7 !important;
  box-shadow: 0 0 0 3px rgba(77, 171, 247, 0.18);
}
.flight-modal .modal-foot {
  padding: 16px 28px;
  background: #252830;
  gap: 12px;
}
.flight-modal .modal-foot .btn {
  min-height: 42px;
  padding: 10px 18px;
  font-size: 14px;
  border-radius: 9px;
}
.flight-modal .modal-foot .btn-primary {
  min-width: 128px;
}
@media (max-width: 820px) {
  .flight-page-head {
    flex-direction: column;
  }
  .flight-modal {
    width: calc(100vw - 12px);
  }
  .flight-modal .modal-body {
    padding: 14px 12px 10px !important;
  }
  .flight-form-modal {
    grid-template-columns: 1fr !important;
    gap: 14px !important;
  }
  .flight-modal .wallet-pick-row {
    grid-template-columns: 1fr;
  }
  .flight-boxes {
    grid-template-columns: 1fr;
  }
}
.rd-flight h2 { margin: 0 0 10px; font-size: 16px; }
.flight-card-list { display: grid; gap: 14px; margin-top: 16px; }
.flight-card {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  background: #23252b; border: 1px solid #2e3138; border-radius: 12px;
  padding: 16px 18px;
}
.flight-card.is-draft { opacity: 0.85; border-style: dashed; }
.flight-card-title { font-weight: 600; color: var(--text); margin-bottom: 8px; }
.flight-card-meta { color: var(--muted); font-size: 13px; line-height: 1.55; }
.flight-card-meta b { color: var(--text); font-weight: 500; }
.flight-card-warn { color: #ff922b; font-size: 12px; margin-top: 8px; }
.flight-card .btn[disabled] { opacity: 0.45; cursor: not-allowed; }

.wallet-pick-row {
  display: grid;
  grid-template-columns: minmax(180px, 280px) 1fr;
  gap: 12px;
  align-items: stretch;
}
.wallet-pick-row select,
.wallet-pick-row input {
  width: 100%;
  min-width: 0;
}
.coin-pick-row {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 10px;
  align-items: stretch;
}
.coin-pick-row select {
  width: 100%;
  min-width: 0;
}
.coin-pick-row .btn {
  white-space: nowrap;
  min-height: 44px;
  padding: 0 14px;
}
.wallet-addr {
  word-break: break-all;
  font-size: 12px;
  max-width: 420px;
  display: inline-block;
}
.wallet-chip-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 4px 0 16px;
}
.wallet-chip {
  border: 1px solid #2e3138;
  background: #23252b;
  color: var(--muted);
  border-radius: 8px;
  padding: 7px 12px;
  font-size: 13px;
  cursor: pointer;
}
.wallet-chip:hover { color: var(--text); border-color: #3d424c; }
.wallet-chip.is-on {
  color: var(--text);
  border-color: #4dabf7;
  background: #1e2a38;
}
.wallet-groups { display: grid; gap: 18px; }
.wallet-group-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin: 0 0 8px;
}
.wallet-group-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
}
@media (max-width: 820px) {
  .wallet-pick-row {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 820px) {
  .flight-form {
    grid-template-columns: 1fr !important;
    padding: 16px;
    gap: 14px !important;
  }
}
.form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 10px;
  align-items: end;
  max-width: 980px;
}
.form-grid label { display: grid; gap: 6px; color: var(--muted); font-size: 12px; }
.form-grid label.full { grid-column: 1 / -1; }
.form-grid input, .form-grid select, .form-grid textarea {
  border: 1px solid var(--line);
  background: var(--bg-2);
  color: var(--text);
  border-radius: 6px;
  padding: 8px 10px;
  font: 13px var(--font);
}
.install-box {
  background: var(--bg-2);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 14px 16px;
  color: var(--green);
  overflow-x: auto;
  white-space: pre-wrap;
  word-break: break-all;
  font-size: 13px;
  line-height: 1.5;
  margin: 12px 0;
}
.hint { color: var(--muted); line-height: 1.5; }
.btn, .btn-primary, .btn-ghost, .icon-btn {
  border-radius: 6px;
  padding: 7px 12px;
  font: 500 14px var(--font);
  cursor: pointer;
}
.btn-sm { padding: 5px 10px; font-size: 13px; }
.btn, .btn-primary {
  border: 1px solid var(--blue);
  background: var(--blue);
  color: #fff;
}
.btn-ghost, .icon-btn {
  border: 1px solid var(--line);
  background: var(--panel-2);
  color: var(--text);
}
.table-panel {
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: auto;
  background: var(--panel);
}
.workers { width: 100%; border-collapse: collapse; }
.workers th, .workers td {
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  text-align: left;
  white-space: nowrap;
}
.workers th { color: var(--muted); background: #2c2e33; font-weight: 500; font-size: 14px; }
.cmd { color: var(--muted); font-size: 14px; }

.toast {
  position: fixed; left: 50%; bottom: 28px;
  transform: translateX(-50%) translateY(8px);
  background: #101113; border: 1px solid var(--line);
  color: #fff; padding: 10px 16px; border-radius: 8px;
  opacity: 0; pointer-events: none; transition: 0.2s; z-index: 90;
}
.toast.is-show { opacity: 1; transform: translateX(-50%) translateY(0); }

.modal-mask {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.55);
  display: grid; place-items: center;
  z-index: 100; padding: 16px;
}
.modal-mask[hidden] { display: none !important; }
.modal {
  width: min(460px, 100%);
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
}
/* Must come after .modal — otherwise flight sheet stays 460px wide */
.modal.flight-modal {
  width: min(980px, 94vw) !important;
  max-width: none;
  max-height: min(94vh, 980px);
  display: flex;
  flex-direction: column;
  border-radius: 14px;
  box-shadow: 0 18px 50px rgba(0, 0, 0, 0.45);
  overflow: hidden;
}
.modal-head, .modal-foot {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 16px;
}
.modal-head { border-bottom: 1px solid var(--line); }
.modal-foot { border-top: 1px solid var(--line); }
.modal-head h2 { margin: 0; font-size: 16px; }
.modal-body { padding: 14px 16px; display: grid; gap: 12px; }
.modal-body label { display: grid; gap: 6px; color: var(--muted); font-size: 12px; }
.modal-body input[type="text"], .modal-body select, .modal-body textarea {
  border: 1px solid var(--line); background: var(--bg-2); color: var(--text);
  border-radius: 8px; padding: 9px 10px; font: 13px var(--font);
}
.modal-body .check-row { display: flex; align-items: center; gap: 8px; }
.modal-meta { font-size: 12px; color: var(--muted); line-height: 1.6; padding-top: 4px; border-top: 1px dashed var(--line); }
.modal-foot-right { display: flex; gap: 8px; }

.oc-modal { width: min(480px, 100%); }
.oc-modal-body { gap: 10px; }
.oc-gpu-count {
  margin: 0 0 4px;
  color: var(--muted);
  font-size: 12px;
}
.oc-row {
  display: grid !important;
  grid-template-columns: minmax(140px, 1fr) minmax(160px, 1.1fr);
  gap: 10px;
  align-items: center;
}
.oc-row .oc-lab {
  color: var(--text);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.35;
}
.oc-row .oc-lab em {
  display: block;
  font-style: normal;
  font-weight: 400;
  color: var(--muted);
  font-size: 11px;
  margin-top: 2px;
}
.oc-row input {
  width: 100%;
  border: 1px solid #3a3d45 !important;
  background: #1c1e23 !important;
  color: var(--text) !important;
  border-radius: 6px !important;
  padding: 9px 12px !important;
  font: 500 13px var(--font) !important;
}
.oc-row input:focus {
  border-color: #748ffc !important;
  outline: none;
  box-shadow: 0 0 0 1px rgba(116, 143, 252, 0.25);
}
.oc-row input::-webkit-outer-spin-button,
.oc-row input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.oc-row input[type=number] { -moz-appearance: textfield; appearance: textfield; }
.oc-tpl-page { max-width: 1100px; }
.oc-tpl-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}
.oc-tpl-head h2 { margin: 0; }
.float-field {
  display: grid !important;
  gap: 6px !important;
  background: #2a2d34;
  border: 1px solid #3a3d45;
  border-radius: 8px;
  padding: 8px 12px 10px;
}
.float-field:focus-within {
  border-color: #748ffc;
  box-shadow: 0 0 0 1px rgba(116, 143, 252, 0.25);
}
.float-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: #adb5bd;
  font-size: 12px;
  font-weight: 500;
}
.float-field input {
  border: 0 !important;
  background: transparent !important;
  color: var(--text) !important;
  padding: 2px 0 0 !important;
  font: 600 16px var(--font) !important;
  border-radius: 0 !important;
  outline: none;
  width: 100%;
}
.float-field input::-webkit-outer-spin-button,
.float-field input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.float-field input[type=number] { -moz-appearance: textfield; appearance: textfield; }
.info-i {
  display: none;
}
.zh-note {
  font-style: normal;
  font-weight: 400;
  color: #868e96;
  margin-left: 4px;
}

.login-body {
  min-height: 100vh; display: grid; place-items: center;
  background: radial-gradient(600px 300px at 30% 0%, rgba(34,139,230,0.15), transparent), var(--bg);
}
.login-shell {
  width: min(1100px, calc(100% - 48px));
  margin: 0 auto;
  padding: 32px 0;
  box-sizing: border-box;
}
.login-card {
  width: 100%;
  max-width: none;
  box-sizing: border-box;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 32px 28px;
  overflow: hidden;
}
.login-brand { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; flex-wrap: wrap; }
.brand-mark {
  width: 28px; height: 28px; border-radius: 6px;
  background: linear-gradient(135deg, #fab005, #fd7e14);
}
.login-card .brand-name { margin: 0; font-size: 18px; font-weight: 700; }
.brand-sub { margin: 2px 0 0; color: var(--muted); font-size: 12px; }
.login-card h1 { margin: 0 0 6px; font-size: 22px; }
.login-lead { margin: 0 0 16px; color: var(--muted); }
.login-form { display: grid; gap: 12px; width: 100%; box-sizing: border-box; }
.login-form label { display: grid; gap: 6px; color: var(--muted); }
.login-form input {
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  height: 40px; border-radius: 8px; border: 1px solid var(--line);
  background: var(--bg-2); color: var(--text); padding: 0 12px; outline: none;
  font: 14px var(--font);
}
.login-error { margin: 0; color: var(--red); }
.login-submit {
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  height: 42px;
  border: 0;
  border-radius: 8px;
  background: var(--blue);
  color: #fff;
  font: 600 15px var(--font);
  cursor: pointer;
}
.login-submit:disabled { opacity: 0.6; cursor: not-allowed; }
.login-submit:hover:not(:disabled) { filter: brightness(1.08); }

/* ===== Rig detail page ===== */
#rigPage[hidden], #farmPage[hidden] { display: none !important; }
.rig-detail { padding-bottom: 32px; }
.rd-head {
  display: flex; flex-wrap: wrap; gap: 16px 24px;
  justify-content: space-between; align-items: flex-start;
  padding: 8px 0 14px;
}
.rd-head-main { min-width: 0; flex: 1; }
.rd-gpu-tiles {
  display: flex; flex-wrap: nowrap; gap: 5px;
  justify-content: flex-end;
  align-items: flex-start;
  max-width: none;
  flex: 1 1 auto;
  min-width: 0;
  overflow-x: auto;
}
.rd-gpu-tile {
  flex: 0 0 auto;
  width: 58px;
  background: #25272d;
  border: 1px solid #32353c;
  border-radius: 4px;
  overflow: hidden;
  text-align: center;
  font-size: 11px;
  line-height: 1.2;
  color: #aeb0b5;
}
.rd-gpu-tile-temp {
  padding: 5px 4px 3px;
  font-weight: 500;
  letter-spacing: .02em;
}
.rd-gpu-tile-fan {
  padding: 3px 4px;
  font-weight: 600;
  color: #fff;
  background: #c92a2a;
}
.rd-gpu-tile-fan.is-ok { background: #2f9e44; }
.rd-gpu-tile-fan.is-warm { background: #e67700; }
.rd-gpu-tile-fan.is-hot { background: #c92a2a; }
.rd-gpu-tile-fan.is-idle { background: #3a3d45; color: #8b8e95; }
.rd-gpu-tile-hash {
  padding: 4px 3px 5px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rd-title-row {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  min-height: 36px;
}
.rd-back {
  border: 0;
  background: transparent;
  color: #91a7ff;
  font: 700 26px var(--font);
  padding: 0;
  cursor: pointer;
  letter-spacing: -0.02em;
  line-height: 1.15;
}
.rd-back:hover { color: #bac8ff; text-decoration: underline; text-underline-offset: 4px; }
.rd-crumb-sep {
  color: #5c5f66;
  font-size: 22px;
  font-weight: 500;
  line-height: 1;
  user-select: none;
  margin: 0 2px;
}
.rd-star {
  border: 0;
  background: transparent;
  color: #6c6f76;
  width: 28px;
  height: 28px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  border-radius: 6px;
  flex: 0 0 auto;
}
.rd-star svg { width: 18px; height: 18px; display: block; }
.rd-star:hover { color: #ffd43b; background: rgba(255, 212, 59, 0.08); }
.rd-star.on { color: var(--yellow); }
.rd-name {
  margin: 0;
  font-size: 26px;
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--text);
}
.rd-online {
  display: inline-flex;
  align-items: center;
  height: 22px;
  padding: 0 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.02em;
  margin-left: 2px;
}
.rd-online.is-on {
  color: #69db7c;
  background: rgba(64, 192, 87, 0.14);
}
.rd-online.is-off {
  color: #adb5bd;
  background: rgba(173, 181, 189, 0.12);
}
.rd-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.rd-tag {
  display: inline-flex; align-items: center;
  padding: 3px 8px; border-radius: 4px;
  font-size: 12px; font-weight: 600;
}
.rd-tag.flight { background: rgba(250,82,82,.15); color: #ff8787; }
.rd-tag.gpu { background: rgba(190,75,219,.15); color: #e599f7; }
.rd-tag.ok { background: rgba(64,192,87,.15); color: #69db7c; }
.rd-meta {
  margin-top: 10px; color: var(--muted); font-size: 12px; line-height: 1.7;
}
.rd-meta b { color: var(--text); font-weight: 500; }
.rd-hw {
  display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 18px;
  margin-top: 16px; color: var(--muted); font-size: 12px; line-height: 1.8;
  align-items: start;
}
.rd-hw b { color: var(--text); font-weight: 500; }
.rd-hw-right { justify-self: end; text-align: left; min-width: 200px; }
.rd-actions {
  display: flex; flex-wrap: wrap; gap: 6px;
  margin: 4px 0 12px;
}
.rd-actions .tb-ico {
  background: #2a2c32; border: 1px solid #3a3d45; min-width: 34px; min-height: 32px;
}
.rd-alerts {
  display: flex; flex-wrap: wrap; gap: 8px;
  padding: 8px 0 14px;
}
.rd-alert {
  display: flex; align-items: center; gap: 8px;
  background: #1f2126; border: 1px solid #32353c;
  border-radius: 6px; padding: 8px 10px;
  font-size: 12px; max-width: 280px;
}
.rd-alert.warn { border-color: rgba(250,176,5,.35); color: #ffd43b; }
.rd-alert.err { border-color: rgba(250,82,82,.4); color: #ff8787; }
.rd-alert.info { border-color: rgba(64,192,87,.3); color: #69db7c; }
.rd-alert .ago { color: var(--muted); margin-left: auto; white-space: nowrap; }
.rd-tabs {
  display: flex; gap: 0; border-bottom: 1px solid #2c2e33;
  overflow-x: auto; margin-bottom: 12px;
}
.rd-tab {
  border: 0; background: transparent; color: var(--muted);
  padding: 12px 14px; font: 500 13px var(--font); cursor: pointer;
  border-bottom: 2px solid transparent; white-space: nowrap;
}
.rd-tab:hover { color: var(--text); }
.rd-tab.is-active { color: var(--text); border-bottom-color: #fff; }
.rd-gpu-list {
  display: grid;
  gap: 0;
  overflow-x: auto;
  border: 1px solid #2c2e33;
  border-radius: 6px;
  background: #1c1e23;
}
.rd-gpu {
  display: grid;
  grid-template-columns: 72px minmax(200px, 1.6fr) 72px 72px 88px 88px 56px 88px 40px;
  gap: 8px;
  align-items: center;
  padding: 10px 12px;
  background: #23252b;
  border-bottom: 1px solid #1a1c20;
  font-variant-numeric: tabular-nums;
}
.rd-gpu:last-child { border-bottom: 0; }
.rd-gpu:hover { background: #2a2d34; }
.rd-gpu-head {
  background: #1f2126;
  border-bottom: 1px solid #2c2e33;
  padding: 8px 12px;
  min-height: 0;
  color: var(--muted);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .02em;
}
.rd-gpu-head > div { color: var(--muted); font-size: 11px; }
.rd-gpu .g-stack {
  display: flex;
  flex-direction: column;
  gap: 2px;
  line-height: 1.25;
}
.rd-gpu .g-top {
  color: var(--text);
  font-size: 13px;
  font-weight: 600;
}
.rd-gpu .g-bot {
  color: #868e96;
  font-size: 12px;
  font-weight: 500;
}
.rd-gpu .g-id { font-weight: 600; color: var(--text); font-size: 13px; }
.rd-gpu .g-bus { color: var(--muted); font-size: 11px; margin-top: 2px; }
.rd-gpu .g-name { font-weight: 600; color: var(--text); font-size: 13px; }
.rd-gpu .g-sub { color: var(--muted); font-size: 11px; margin-top: 3px; }
.rd-gpu .g-fan-val { color: var(--text); font-size: 13px; font-weight: 600; }
.rd-gpu .g-col-off .g-top.g-off-live { color: #69db7c; }
.rd-gpu .g-col-off .g-top.g-off-zero,
.rd-gpu .g-col-off .g-bot.g-off-zero { color: #868e96; }
.rd-gpu .g-col-off .g-top.g-off-unknown,
.rd-gpu .g-col-off .g-bot.g-off-unknown { color: #868e96; }
.rd-gpu .g-col-pwr .g-top { color: #ffa94d; }
.rd-gpu .g-oc-btn {
  border: 0;
  background: transparent;
  color: #91a7ff;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  padding: 4px;
  border-radius: 4px;
}
.rd-gpu .g-oc-btn:hover { background: #2f3340; color: #bac8ff; }
.rd-gpu .g-col-act { text-align: center; }
.gpu-table th,
.gpu-table td {
  font-size: 12px;
  white-space: nowrap;
}
.rd-gpu-head:hover { background: #1f2126; }
.rd-sys {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 10px; margin-top: 14px;
}
.rd-sys .box {
  background: #23252b; border: 1px solid #32353c; border-radius: 6px;
  padding: 12px 14px; min-height: 72px;
}
.rd-sys .box .v { font-size: 18px; font-weight: 600; }
.rd-sys .box .k { margin-top: 6px; color: var(--muted); font-size: 11px; }
.rd-debug { max-width: 640px; padding: 8px 0 24px; }
.rd-debug h2 { margin: 0 0 8px; font-size: 18px; }
.debug-actions { display: flex; flex-wrap: wrap; gap: 10px; margin: 14px 0; }
.debug-drv {
  display: grid; gap: 14px;
  background: #23252b; border: 1px solid #32353c; border-radius: 8px;
  padding: 14px 16px; margin-top: 8px;
}
.drv-upload { margin-top: 8px; }
.drv-series {
  display: inline-flex; align-items: center;
  padding: 2px 8px; border-radius: 999px;
  font-size: 11px; font-weight: 600;
  background: rgba(116,143,252,.15); color: #91a7ff;
}
.drv-series.rtx50 { background: rgba(64,192,87,.14); color: #69db7c; }
.drv-series.rtx40 { background: rgba(77,171,247,.14); color: #74c0fc; }
.rd-settings {
  max-width: 520px;
  display: grid;
  gap: 18px;
  padding: 8px 0 24px;
}
.rd-field { display: grid; gap: 8px; color: var(--muted); font-size: 13px; }
.rd-field input[type="text"],
.rd-field input[type="number"] {
  height: 40px;
  border: 1px solid var(--line);
  background: #1e2025;
  color: var(--text);
  border-radius: 8px;
  padding: 0 12px;
  font: 14px var(--font);
  outline: none;
}
.rd-field input:focus { border-color: var(--blue); }
.tag-row { display: flex; gap: 10px; align-items: center; }
.tag-row input { flex: 1; }
.tag-add {
  border: 0; background: transparent; color: #74c0fc;
  font: 500 14px var(--font); cursor: pointer; padding: 6px 4px; white-space: nowrap;
}
.tag-add:hover { color: #a5d8ff; }
.tag-list { display: flex; flex-wrap: wrap; gap: 8px; min-height: 28px; }
.tag-chip {
  display: inline-flex; align-items: center; gap: 4px;
  background: #2c2e33; border: 1px solid #3a3d45;
  border-radius: 999px; padding: 4px 10px;
  color: var(--text); font-size: 12px; cursor: pointer;
}
.tag-chip:hover { border-color: #fa5252; color: #ff8787; }
.rd-switch {
  display: flex; align-items: center; justify-content: space-between;
  color: var(--muted); font-size: 13px;
  padding: 4px 0;
}
.rd-switch input { position: absolute; opacity: 0; width: 0; height: 0; }
.switch-ui {
  width: 44px; height: 24px; border-radius: 999px;
  background: #3a3d45; position: relative; transition: .2s;
  flex: 0 0 auto;
}
.switch-ui::after {
  content: ""; position: absolute; top: 3px; left: 3px;
  width: 18px; height: 18px; border-radius: 50%;
  background: #fff; transition: .2s;
}
.rd-switch input:checked + .switch-ui { background: var(--blue); }
.rd-switch input:checked + .switch-ui::after { left: 23px; }
.rd-settings-foot {
  display: flex; justify-content: space-between; align-items: center;
  margin-top: 8px; gap: 12px;
}

/* ---- Rig stats charts ---- */
.rd-stats { display: grid; gap: 12px; }
.stats-toolbar {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 10px; padding: 4px 2px 8px;
}
.stats-nav { display: flex; align-items: center; gap: 10px; }
.stats-day { color: var(--text); font-size: 14px; font-weight: 500; min-width: 160px; text-align: center; }
.stats-ranges { display: inline-flex; background: #1f2126; border-radius: 8px; padding: 3px; gap: 2px; }
.stats-range {
  border: 0; background: transparent; color: var(--muted);
  font: 500 12px var(--font); padding: 6px 12px; border-radius: 6px; cursor: pointer;
}
.stats-range.is-on { background: var(--blue); color: #fff; }
.stats-range:hover:not(.is-on) { color: var(--text); }
.stats-charts { display: grid; gap: 12px; }
.stats-card {
  background: #23252b; border: 1px solid #2a2d34; border-radius: 10px; overflow: hidden;
}
.stats-card-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px 0;
}
.stats-card-head h3 { margin: 0; font-size: 13px; font-weight: 600; letter-spacing: .04em; color: var(--text); }
.stats-card-body {
  display: grid;
  grid-template-columns: 118px 1fr;
  gap: 8px;
  padding: 8px 12px 12px;
  align-items: stretch;
}
.stats-legend {
  display: flex; flex-direction: column; gap: 8px; justify-content: center;
  padding-top: 4px;
}
.stats-leg-item {
  display: grid; grid-template-columns: 1fr auto auto; gap: 6px; align-items: center;
  color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums;
}
.stats-leg-item b { color: var(--text); font-weight: 600; justify-self: start; }
.stats-leg-item i {
  width: 8px; height: 8px; border-radius: 50%; display: inline-block;
}
.stats-leg-item span { color: #868e96; min-width: 12px; text-align: right; }
.stats-leg-item.total { grid-template-columns: 1fr; }
.stats-leg-item.total b { color: #74c0fc; font-size: 14px; }
.stats-plot {
  background: #1c1e23; border-radius: 8px; min-height: 140px; overflow: hidden;
}
.stats-svg { width: 100%; height: 140px; display: block; }
.stats-loading, .stats-empty {
  color: var(--muted); font-size: 13px; padding: 28px 12px; text-align: center;
  background: #23252b; border-radius: 10px;
}

@media (max-width: 900px) {
  .stats-card-body { grid-template-columns: 1fr; }
  .stats-legend { flex-direction: row; flex-wrap: wrap; gap: 10px 14px; }
}

@media (max-width: 1200px) {
  .shell { width: min(100%, calc(100% - 32px)); }
  .cards { grid-template-columns: repeat(3, 1fr); }
  .rig-head { display: none; }
  .rig-body { min-width: 0; }
  .rig-row {
    grid-template-columns: 24px 24px minmax(90px, 1fr) 44px minmax(120px, 1.1fr);
  }
  .rig-row .rig-gpu-cell,
  .rig-row .rig-metric,
  .rig-row .rig-shares-cell,
  .rig-row .rig-remote,
  .alert-dot, .ico-rocket, .ico-dash, .ico-n, .gpu-bars, .rig-spacer, .mining-bar { display: none; }
  .rd-gpu { grid-template-columns: 1fr 1fr; }
  .rd-sys { grid-template-columns: repeat(2, 1fr); }
  .rd-hw { grid-template-columns: 1fr; }
  .rd-gpu-tiles { max-width: none; justify-content: flex-start; flex-wrap: nowrap; }
}
@media (max-width: 720px) {
  .shell { width: calc(100% - 24px); }
  .cards { grid-template-columns: repeat(2, 1fr); }
  .topbar { height: auto; padding: 8px 0; }
  .topbar-inner { flex-wrap: wrap; gap: 8px; padding: 4px 0; }
  .rd-name { font-size: 20px; }
  .rd-back { font-size: 20px; }
  .rd-crumb-sep { font-size: 18px; }
}

/* Miner warehouse category panel */
.miner-wh-layout {
  display: grid;
  grid-template-columns: 200px minmax(0, 1fr);
  gap: 14px;
  align-items: start;
  margin-top: 12px;
}
.miner-cat-panel {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--panel);
  overflow: hidden;
}
.miner-cat-panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  color: var(--muted);
  font-size: 13px;
  font-weight: 600;
}
.miner-cat-list { display: flex; flex-direction: column; padding: 6px; gap: 2px; }
.miner-cat-item {
  display: flex;
  align-items: center;
  gap: 4px;
  border-radius: 6px;
  padding: 2px 4px 2px 6px;
}
.miner-cat-item.is-active { background: var(--panel-2); }
.miner-cat-name {
  flex: 1;
  text-align: left;
  border: 0;
  background: transparent;
  color: var(--text);
  padding: 7px 6px;
  cursor: pointer;
  font-size: 13px;
  border-radius: 4px;
}
.miner-cat-name:hover { color: #fff; }
.miner-cat-del {
  width: 24px;
  height: 24px;
  padding: 0;
  opacity: 0.55;
  flex: 0 0 auto;
}
.miner-cat-item:hover .miner-cat-del { opacity: 1; }
.miner-wh-main { min-width: 0; }
@media (max-width: 900px) {
  .miner-wh-layout { grid-template-columns: 1fr; }
}


/* Autofan curve editor */
.af-panel { margin-top: 14px; max-width: 560px; }
.af-table input[type="number"] {
  width: 72px;
  height: 28px;
  padding: 0 8px;
  border: 1px solid var(--line);
  border-radius: 4px;
  background: #1c1e24;
  color: var(--text);
  font: 600 12px var(--font);
}
.af-table td { vertical-align: middle; }


/* ===== UI text size boost (requested) ===== */
.topbar { height: 50px; }
.rig-name, .rig-title, .worker-name { font-size: 14px !important; }
.rig-meta, .meta, .muted-sm { font-size: 12px !important; }
.hash-item .hk, .hash-item .hv { font-size: 12px !important; }
.badge, .chip, .tag { font-size: 12px !important; }
.gpu-row, .gpu-cell, .stat-cell { font-size: 12px !important; }
.placeholder h2 { font-size: 20px !important; }
.modal-head h2 { font-size: 18px !important; }
.modal-body label, .form-grid label { font-size: 13px !important; }
.modal-body input[type="text"], .modal-body select, .modal-body textarea {
  font-size: 14px !important;
}
.search-mini input { font-size: 14px; height: 34px; width: 180px; }
.batch-select { height: 34px; font-size: 14px !important; }
.rig-head { font-size: 12px !important; }


/* Login math captcha */
.captcha-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 200px;
  gap: 10px;
  align-items: center;
  width: 100%;
  box-sizing: border-box;
}
.captcha-row input {
  width: 100%;
  min-width: 0;
  height: 44px;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--bg-2);
  color: var(--text);
  padding: 0 12px;
  outline: none;
  font: 600 16px var(--font);
  letter-spacing: 0.08em;
  box-sizing: border-box;
}
.captcha-img-btn {
  border: 1px solid var(--line);
  background: #121316;
  border-radius: 8px;
  padding: 0;
  cursor: pointer;
  overflow: hidden;
  height: 44px;
  width: 200px;
  max-width: 200px;
  flex: 0 0 200px;
  box-sizing: border-box;
}
.captcha-img-btn:hover { border-color: #74c0fc; }
.captcha-img {
  display: block;
  width: 200px;
  height: 44px;
  object-fit: cover;
}
.login-hint {
  margin: -4px 0 0;
  color: var(--muted);
  font-size: 12px;
}


/* Login split: left form + right panel, centered on page */
.login-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
  align-items: stretch;
  width: 100%;
}
.login-pane {
  min-width: 0;
}
.login-side {
  border: 1px solid rgba(116, 192, 252, 0.18);
  border-radius: 14px;
  background:
    radial-gradient(520px 280px at 12% 0%, rgba(34, 139, 230, 0.42), transparent 62%),
    radial-gradient(440px 260px at 100% 100%, rgba(64, 192, 87, 0.28), transparent 58%),
    radial-gradient(300px 180px at 70% 20%, rgba(132, 94, 247, 0.16), transparent 55%),
    linear-gradient(145deg, #1e3a5f 0%, #1a2438 28%, #171a22 58%, #14241c 100%);
  padding: 36px 32px;
  box-sizing: border-box;
  display: flex;
  align-items: center;
}
.login-side-inner { width: 100%; }
.login-side-kicker {
  margin: 0 0 10px;
  color: #74c0fc;
  font: 600 13px var(--font);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.login-side-title {
  margin: 0 0 14px;
  color: #fff;
  font: 700 34px/1.2 "IBM Plex Sans", var(--font);
  letter-spacing: -0.02em;
  background: linear-gradient(120deg, #ffffff 0%, #a5d8ff 42%, #8ce99a 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}
.login-side-rent .login-side-title {
  background: linear-gradient(120deg, #ffffff 0%, #b2f2bb 45%, #69db7c 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}
.login-side-desc {
  margin: 0 0 22px;
  color: #adb5bd;
  font: 400 15px/1.6 var(--font);
  max-width: 34em;
}
.login-side-list {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 10px;
}
.login-side-list li {
  position: relative;
  padding: 10px 12px 10px 34px;
  border-radius: 8px;
  background: linear-gradient(105deg, rgba(34,139,230,0.14) 0%, rgba(255,255,255,0.04) 55%, rgba(64,192,87,0.10) 100%);
  border: 1px solid rgba(116, 192, 252, 0.14);
  color: #e9ecef;
  font: 500 14px var(--font);
}
.login-side-rent .login-side-list li {
  background: linear-gradient(105deg, rgba(64,192,87,0.18) 0%, rgba(255,255,255,0.04) 55%, rgba(34,139,230,0.10) 100%);
  border-color: rgba(105, 219, 124, 0.16);
}
.login-side-list li::before {
  content: "";
  position: absolute;
  left: 12px;
  top: 50%;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  transform: translateY(-50%);
  background: #40c057;
  box-shadow: 0 0 0 3px rgba(64,192,87,0.18);
}
@media (max-width: 900px) {
  .login-shell { width: min(560px, calc(100% - 32px)); padding: 20px 0; }
  .login-split { grid-template-columns: 1fr; gap: 16px; }
  .login-side { min-height: auto; padding: 28px 22px; }
  .login-side-title { font-size: 28px; }
}


.login-ok { margin: 0; color: #69db7c; }
.register-submit { background: #2f9e44; }
.register-submit:hover:not(:disabled) { filter: brightness(1.08); }
.register-card h1 { margin-top: 8px; }


/* Register entry under login button */
.login-register-link {
  display: block;
  width: 100%;
  margin-top: 10px;
  height: 40px;
  border: 1px solid #4a4e57;
  border-radius: 8px;
  background: transparent;
  color: #c5c9d2;
  font: 600 14px var(--font);
  cursor: pointer;
}
.login-register-link:hover {
  color: #fff;
  border-color: #74c0fc;
  background: rgba(34, 139, 230, 0.12);
}

/* Register modal popup */
.reg-modal-mask {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: rgba(0, 0, 0, 0.62);
  display: grid;
  place-items: center;
  padding: 20px;
  box-sizing: border-box;
}
.reg-modal-mask[hidden] { display: none !important; }
body.reg-modal-open { overflow: hidden; }
.reg-modal {
  width: min(440px, 100%);
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 14px;
  box-shadow: 0 18px 50px rgba(0, 0, 0, 0.45);
  overflow: hidden;
}
.reg-modal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 16px;
  border-bottom: 1px solid var(--line);
}
.reg-modal-head h2 {
  margin: 0;
  font-size: 18px;
  color: var(--text);
}
.reg-modal-close {
  border: 0;
  background: transparent;
  color: #adb5bd;
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
  width: 32px;
  height: 32px;
  border-radius: 6px;
}
.reg-modal-close:hover { color: #fff; background: #2a2d34; }
.reg-modal-body {
  padding: 18px 16px 20px;
}
.login-ok { margin: 0; color: #69db7c; }
.register-submit { background: #2f9e44; }
.register-submit:hover:not(:disabled) { filter: brightness(1.08); }


/* Login right promo carousel */
.login-side {
  position: relative;
  overflow: hidden;
}
.login-promo {
  width: 100%;
  height: 100%;
  min-height: 420px;
  position: relative;
  display: flex;
  flex-direction: column;
}
.login-promo-track {
  position: relative;
  flex: 1;
  min-height: 0;
}
.login-promo-slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transform: translateX(18px);
  pointer-events: none;
  transition: opacity 0.55s ease, transform 0.55s ease;
  display: flex;
  align-items: center;
}
.login-promo-slide.is-active {
  opacity: 1;
  transform: translateX(0);
  pointer-events: auto;
  z-index: 1;
}
.login-side-rent .login-side-kicker.is-rent,
.login-side-kicker.is-rent {
  color: #69db7c;
}
.login-side.login-pane {
  background:
    radial-gradient(520px 280px at 12% 0%, rgba(34, 139, 230, 0.42), transparent 62%),
    radial-gradient(440px 260px at 100% 100%, rgba(64, 192, 87, 0.28), transparent 58%),
    radial-gradient(300px 180px at 70% 20%, rgba(132, 94, 247, 0.16), transparent 55%),
    linear-gradient(145deg, #1e3a5f 0%, #1a2438 28%, #171a22 58%, #14241c 100%);
}
.login-side.login-pane.is-rent-slide {
  background:
    radial-gradient(520px 280px at 12% 0%, rgba(64, 192, 87, 0.38), transparent 62%),
    radial-gradient(440px 260px at 100% 100%, rgba(34, 139, 230, 0.22), transparent 58%),
    radial-gradient(300px 180px at 70% 20%, rgba(250, 176, 5, 0.12), transparent 55%),
    linear-gradient(145deg, #143528 0%, #1a2430 32%, #171a22 62%, #1a2a40 100%);
}
.login-promo-dots {
  display: flex;
  gap: 8px;
  justify-content: center;
  padding: 4px 0 2px;
  position: relative;
  z-index: 2;
}
.login-promo-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  border: 0;
  padding: 0;
  cursor: pointer;
  background: #495057;
}
.login-promo-dot.is-on {
  background: #74c0fc;
  box-shadow: 0 0 0 3px rgba(116,192,252,0.2);
}
.login-promo-dot[data-dot="1"].is-on {
  background: #69db7c;
  box-shadow: 0 0 0 3px rgba(105,219,124,0.2);
}
@media (max-width: 900px) {
  .login-promo { min-height: 360px; }
}


/* Register modal contacts */
.reg-contacts {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px dashed var(--line);
}
.reg-contacts-title {
  margin: 0 0 10px;
  color: var(--muted);
  font: 500 12px var(--font);
}
.reg-contacts-row {
  display: grid;
  gap: 8px;
}
.reg-contact-item {
  display: grid;
  grid-template-columns: 52px 1fr auto;
  gap: 8px;
  align-items: center;
  padding: 8px 10px;
  border-radius: 8px;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.06);
}
.reg-contact-lab {
  color: #74c0fc;
  font: 600 13px var(--font);
}
.reg-contact-val {
  color: var(--text);
  font: 500 13px var(--font);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.reg-contact-copy {
  border: 1px solid #4a4e57;
  background: transparent;
  color: #ced4da;
  border-radius: 6px;
  padding: 4px 10px;
  font: 500 12px var(--font);
  cursor: pointer;
}
.reg-contact-copy:hover {
  border-color: #74c0fc;
  color: #fff;
}


/* User contact on register (password recovery) */
.contact-row {
  display: grid;
  grid-template-columns: 96px 1fr;
  gap: 8px;
  align-items: center;
}
.contact-row select,
.contact-row input {
  height: 40px;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--bg-2);
  color: var(--text);
  padding: 0 10px;
  outline: none;
  font: 14px var(--font);
  box-sizing: border-box;
  width: 100%;
}
.contact-row select { cursor: pointer; }


.captcha-img-btn {
  position: relative;
  background: #1a1c21 !important;
}
.captcha-img {
  background: #1a1c21;
}


.captcha-img-btn {
  position: relative;
  background: #1a1c21 !important;
}
.captcha-img {
  background: #1a1c21;
}


/* Register biz type checks */
.biz-check-wrap { margin: 2px 0 4px; }
.biz-check-title {
  margin: 0 0 8px;
  color: var(--muted);
  font: 500 13px var(--font);
}
.biz-checks {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.biz-check {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--bg-2);
  cursor: pointer;
  color: var(--text);
  min-width: 0;
}
@media (max-width: 520px) {
  .biz-checks { grid-template-columns: 1fr; }
}
.biz-check input {
  width: 16px;
  height: 16px;
  margin-top: 2px;
  accent-color: #228be6;
}
.biz-check span {
  display: grid;
  gap: 2px;
  font: 600 14px var(--font);
}
.biz-check em {
  font-style: normal;
  font-weight: 400;
  color: #868e96;
  font-size: 12px;
}
.biz-check:has(input:checked) {
  border-color: #74c0fc;
  background: rgba(34,139,230,0.10);
}


/* Rent-in (租用机器) promo slide */
.login-side-kicker.is-rentin {
  color: #ffd43b;
}
.login-side-rentin .login-side-title {
  background: linear-gradient(120deg, #ffffff 0%, #ffe066 45%, #ff922b 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}
.login-side-rentin .login-side-list li {
  background: linear-gradient(105deg, rgba(255,212,59,0.16) 0%, rgba(255,255,255,0.04) 55%, rgba(255,146,43,0.12) 100%);
  border-color: rgba(255, 212, 59, 0.18);
}
.login-side.login-pane.is-rentin-slide {
  background:
    radial-gradient(520px 280px at 12% 0%, rgba(255, 212, 59, 0.28), transparent 62%),
    radial-gradient(440px 260px at 100% 100%, rgba(255, 146, 43, 0.22), transparent 58%),
    radial-gradient(300px 180px at 70% 20%, rgba(34, 139, 230, 0.14), transparent 55%),
    linear-gradient(145deg, #3a2a12 0%, #2a2218 32%, #171a22 62%, #1a2438 100%);
}
.login-promo-dot[data-dot="2"].is-on {
  background: #ffd43b;
  box-shadow: 0 0 0 3px rgba(255, 212, 59, 0.22);
}


/* Billing / rent-out */
.rent-mini-btn {
  margin-left: 8px;
  height: 22px;
  padding: 0 8px;
  border-radius: 6px;
  border: 1px solid rgba(105, 219, 124, 0.45);
  background: rgba(64, 192, 87, 0.14);
  color: #b2f2bb;
  font: 600 12px var(--font);
  cursor: pointer;
  vertical-align: middle;
}
.rent-mini-btn:hover { background: rgba(64, 192, 87, 0.28); color: #fff; }
.rent-badge {
  margin-left: 6px;
  font: 600 11px var(--font);
  color: #69db7c;
  vertical-align: middle;
}
.rd-title-row .rent-out-btn {
  margin-left: 10px;
  height: 28px;
  padding: 0 12px;
  font-size: 13px;
}
.modal.billing-modal { width: min(640px, calc(100vw - 32px)); }
.billing-modal-body { display: grid; gap: 14px; }
.billing-tpl-head {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
}
.billing-tpl-list { display: grid; gap: 8px; max-height: 220px; overflow: auto; }
.billing-tpl-item {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 10px;
  padding: 10px 12px; border-radius: 8px;
  border: 1px solid var(--line); background: rgba(255,255,255,0.03);
}
.billing-tpl-item strong { color: var(--text); }
.billing-tpl-meta { color: var(--muted); font-size: 12px; margin-top: 4px; line-height: 1.45; }
.billing-tpl-actions { display: flex; gap: 6px; flex-shrink: 0; }
.billing-tpl-form, .billing-apply-row {
  display: grid; gap: 10px; padding-top: 8px; border-top: 1px dashed var(--line);
}
.billing-form-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
}
@media (max-width: 640px) {
  .billing-form-grid { grid-template-columns: 1fr; }
}
.billing-tpl-form label, .billing-apply-row label {
  display: grid; gap: 6px; color: var(--muted); font-size: 13px;
}
.billing-tpl-form input, .billing-tpl-form select, .billing-tpl-form textarea,
.billing-apply-row input, .billing-apply-row select {
  width: 100%; box-sizing: border-box;
  background: #1c1e24; color: var(--text);
  border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px;
  font: 500 14px var(--font);
}
.billing-check {
  display: flex !important; align-items: center; gap: 8px; flex-direction: row !important;
  color: var(--text) !important;
}
.billing-form-actions { display: flex; justify-content: flex-end; gap: 8px; }
.billing-apply-row {
  grid-template-columns: 1.2fr 1fr auto auto;
  align-items: end;
}
@media (max-width: 720px) {
  .billing-apply-row { grid-template-columns: 1fr; }
}


/* 收费列：上架 $ 标识 */
.rig-head .rh-fee {
  text-align: left;
  justify-self: start;
  width: 100%;
  font-size: 11px;
  padding-left: 2px;
}
.rig-fee-cell {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  min-width: 0;
  padding: 0 0 0 2px;
  line-height: 1;
  justify-self: start;
  margin-left: -2px;
}
.rig-fee-money {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: 1px solid rgba(252, 196, 25, 0.55);
  background: rgba(252, 196, 25, 0.1);
  box-sizing: border-box;
}
.rig-fee-mark {
  display: block;
  font-size: 8px;
  font-weight: 700;
  font-style: normal;
  line-height: 1;
  color: #fcc419;
  font-family: "IBM Plex Sans", var(--font);
  transform: translateY(-0.5px);
}
.rig-fee-money.is-rented {
  border-color: rgba(34, 184, 207, 0.65);
  background: rgba(34, 184, 207, 0.12);
}
.rig-fee-money.is-rented .rig-fee-mark {
  color: #22b8cf;
}
.rig-fee-cell.is-rented .rig-fee-money {
  box-shadow: 0 0 0 2px rgba(34, 184, 207, 0.12);
}

/* 计费表 · 与矿机页统一风格 */
.billing-monitor-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
}
.billing-cards {
  padding-top: 8px;
  padding-bottom: 8px;
}
.billing-os-card {
  padding: 0;
  overflow: hidden;
}
.billing-os-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  min-height: 84px;
  height: 100%;
}
.billing-os-half {
  position: relative;
  border: 0;
  background: #2a2d34;
  color: inherit;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 16px 12px 14px;
  font: inherit;
  text-align: center;
  overflow: hidden;
  transition: background 0.15s ease, color 0.15s ease;
}
.billing-os-half::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 3px;
  background: transparent;
  transition: background 0.15s ease;
}
.billing-os-half + .billing-os-half {
  border-left: 1px solid #32353c;
}
.billing-os-half:hover:not(.is-on) {
  background: #32353c;
}
.billing-os-half.is-on .billing-os-k {
  color: #fff;
  font-weight: 600;
}
.billing-os-half[data-billing-os="ubtu"].is-on {
  background: #3a3528;
}
.billing-os-half[data-billing-os="ubtu"].is-on::before {
  background: var(--yellow);
}
.billing-os-half[data-billing-os="win"].is-on {
  background: #283038;
}
.billing-os-half[data-billing-os="win"].is-on::before {
  background: #66d9e8;
}
.billing-os-k {
  color: var(--muted);
  font-size: 15px;
  font-weight: 500;
  transition: color 0.15s ease;
}
.billing-gpu-cpu-card {
  padding: 0;
  overflow: hidden;
}
.billing-metric-split {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr 1fr;
  min-height: 84px;
  height: 100%;
}
.billing-metric-half {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 10px 12px;
}
.billing-metric-half + .billing-metric-half {
  border-left: 0;
  border-top: 1px solid #32353c;
}
.billing-metric-line {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 2px;
  width: 100%;
  text-align: center;
  line-height: 1.2;
}
.billing-metric-v {
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.02em;
  color: var(--text);
}
.billing-metric-v.blue {
  color: #74c0fc;
  font-size: 18px;
}
.billing-metric-sep,
.billing-metric-k {
  font-size: 12px;
  font-weight: 500;
  color: var(--muted);
}
.billing-metric-pwr .billing-metric-v {
  font-size: 16px;
}
button.card.billing-stat-card {
  position: relative;
  overflow: hidden;
  cursor: pointer;
  font: inherit;
  color: inherit;
  text-align: left;
  width: 100%;
  transition: background 0.15s ease, border-color 0.15s ease;
}
button.card.billing-stat-card:hover:not(.is-on) {
  background: #32353c;
}
button.card.billing-stat-card.is-on {
  background: #2f3339;
  border-color: #4a4e57;
}
button.card.billing-stat-card.is-on .k {
  color: var(--text);
  font-weight: 600;
}
button.card.billing-stat-card::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 3px;
  background: transparent;
  transition: background 0.15s ease;
}
button.card.billing-stat-card[data-billing-filter="waiting"].is-on::before {
  background: #dee2e6;
}
button.card.billing-stat-card[data-billing-filter="rented"].is-on::before {
  background: #66d9e8;
}
button.card.billing-stat-card[data-billing-filter="online"].is-on::before {
  background: var(--green);
}
button.card.billing-stat-card[data-billing-filter="offline"].is-on::before {
  background: var(--red);
}
#billingToolbar[hidden] { display: none !important; }
#billingTabs[hidden] { display: none !important; }
#view-billing-extra[hidden] { display: none !important; }
#view-billing-charges[hidden] { display: none !important; }
.billing-charge-page {
  padding: 12px 0 24px;
}
.billing-charge-panel {
  max-width: 1100px;
}
.billing-charge-panel .recharge-log-table-wrap {
  margin-top: 8px;
}
.billing-tpl-page {
  padding: 12px 0 24px;
}
.billing-tpl-panel {
  max-width: 920px;
}
.billing-menubar .billing-menu.is-active {
  color: var(--text);
  border-bottom-color: #fff;
}
.billing-menubar .billing-os-spacer {
  flex: 1 1 auto;
  min-width: 12px;
}
.billing-menubar .billing-os-switch {
  align-self: center;
  gap: 6px;
  margin: 0 0 0 12px;
  color: var(--muted);
  font: 500 14px var(--font);
  cursor: pointer;
  user-select: none;
  flex-shrink: 0;
}
.billing-menubar .billing-os-switch input {
  width: 14px;
  height: 14px;
  accent-color: var(--blue);
  cursor: pointer;
}
.billing-menubar .billing-os-switch:has(input:checked) {
  color: var(--text);
}
.billing-menubar .billing-charge-log-btn {
  align-self: stretch;
  margin-left: 0;
  flex-shrink: 0;
}
.billing-toolbar {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  padding: 10px 0 6px;
  margin-bottom: 0;
  justify-content: flex-start;
}
.billing-toolbar-top {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 8px;
}
.billing-toolbar .billing-batch-flat {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin: 0;
  padding: 6px 0 4px 28px; /* 与左侧勾选列对齐 */
  background: transparent;
  border: 0;
  border-top: 1px solid rgba(255, 255, 255, 0.06);
}
.billing-toolbar .billing-batch-flat .sel {
  margin-right: 4px;
  color: var(--muted);
  font: 500 12px/1.2 var(--font);
  letter-spacing: 0.02em;
}
.billing-toolbar .billing-batch-flat .bbtn {
  appearance: none;
  border: 1px solid rgba(255, 255, 255, 0.08);
  background: rgba(255, 255, 255, 0.06);
  color: #c5c9d1;
  font: 500 12px/1.2 var(--font);
  padding: 5px 14px;
  min-width: 64px;
  border-radius: 5px;
  cursor: pointer;
  text-align: center;
}
.billing-toolbar .billing-batch-flat .bbtn:hover {
  color: var(--text);
  background: rgba(255, 255, 255, 0.11);
  border-color: rgba(255, 255, 255, 0.14);
}
.billing-toolbar .fb-left {
  margin-left: 0;
}
.billing-toolbar .fb-right {
  margin-left: 0;
}
.billing-filter-sep {
  width: 1px;
  height: 18px;
  background: #3a3d45;
  margin: 0 4px;
  flex-shrink: 0;
}
.billing-rig-list {
  margin-top: 0;
}
/* 表头与数据行共用同一套列宽，保证上下左对齐 */
.billing-rig-head,
.billing-rig-row {
  --billing-cols: 22px 52px 100px 156px 48px 56px 84px 112px 64px 40px 40px 48px 148px minmax(8px, 1fr) 36px;
  display: grid;
  width: 100%;
  min-width: max-content;
  box-sizing: border-box;
  grid-template-columns: var(--billing-cols);
  column-gap: 12px;
  row-gap: 0;
  align-items: center;
  justify-content: start;
  padding: 4px 8px;
}
.billing-rig-head {
  background: #1c1e24;
  border-bottom: 1px solid #2a2d34;
  color: #868e96;
  font-size: 12px;
  font-weight: 600;
  min-height: 26px;
  line-height: 1.1;
  padding-bottom: 2px;
}
.billing-rig-head > *,
.billing-rig-row > * {
  text-align: left;
  justify-self: stretch;
  min-width: 0;
}
.billing-rig-row {
  background: #23252b;
  border-bottom: 1px solid #1a1c20;
  min-height: 28px;
  padding-top: 2px;
}
.billing-rig-row:hover { background: #2a2d34; }
.billing-rig-row.is-rented {
  background: rgba(34, 184, 207, 0.06);
  box-shadow: inset 3px 0 0 #22b8cf;
}
.billing-rig-row .rig-identity {
  min-width: 0;
  max-width: 100%;
}
.billing-rig-row .rig-metric {
  width: auto;
  max-width: 100%;
  justify-self: start;
  overflow: hidden;
  text-overflow: ellipsis;
}
.billing-rig-row .rig-gpu-cell {
  max-width: 100%;
  min-width: 0;
  overflow: hidden;
}
.billing-rig-actions {
  display: flex;
  flex-wrap: nowrap;
  gap: 6px;
  justify-self: center;
  justify-content: center;
  align-items: center;
  min-width: 0;
  width: 100%;
}
.billing-rig-actions .btn-dark {
  font-size: 11px;
  font-weight: 500;
  padding: 2px 8px;
  line-height: 1.2;
  min-height: 0;
}
.billing-rig-head .brh-act {
  text-align: center;
  justify-self: center;
}
.billing-status-dot {
  font-size: 12px;
  line-height: 1;
  color: #5c6370;
}
.billing-st-pair {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  gap: 3px;
  width: 100%;
}
.billing-st-pair .billing-status-dot {
  flex: 0 0 auto;
}
.billing-status-dot.is-on {
  color: #69db7c !important;
}
.billing-status-dot.is-wait,
.rig-metric.fan-cell.billing-status-dot.is-wait {
  color: #fcc419 !important;
}
.billing-status-dot.is-err,
.rig-metric.fan-cell.billing-status-dot.is-err {
  color: #ff6b6b !important;
}
.billing-rig-row.is-stale-offline .billing-status-dot.is-on,
.billing-rig-row.is-stale-offline .billing-status-dot.is-wait,
.billing-rig-row.is-stale-offline .billing-status-dot.is-err {
  color: #868e96 !important;
}
.billing-rig-head .brh-st,
.billing-rig-row .rig-metric.billing-st-cell {
  position: relative;
  display: flex !important;
  align-items: center;
  justify-content: center;
  justify-self: stretch !important;
  width: 100% !important;
  max-width: none !important;
  box-sizing: border-box;
  text-align: center;
  white-space: nowrap;
  gap: 0;
  padding: 0;
  margin: 0;
  line-height: 1.1;
  overflow: visible;
}
.billing-rig-head .brh-st:not(.brh-st-first)::before,
.billing-rig-row .billing-st-cell:not(.billing-st-first)::before {
  content: "|";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  color: #5c6370;
  font-weight: 400;
  font-style: normal;
  pointer-events: none;
}
.billing-spacer {
  min-width: 0;
  pointer-events: none;
}
.billing-rig-head .brh-auto,
.billing-rig-row .billing-auto-cell {
  justify-self: center;
  text-align: center;
}
.billing-prog-cell {
  padding: 0 !important;
  overflow: visible;
}
.billing-prog {
  position: relative;
  display: block;
  width: 100%;
  height: 16px;
  border-radius: 4px;
  background: #2a2d36;
  border: 1px solid #3a3d45;
  box-sizing: border-box;
  overflow: hidden;
}
.billing-rig-head .brh-flow {
  font-size: 11px;
  letter-spacing: 0;
  justify-content: center;
  gap: 0;
  white-space: nowrap;
}
.billing-prog-cell .billing-prog {
  width: 100%;
  max-width: 100%;
}
.billing-prog-fill {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 0;
  background: #495057;
  transition: width 0.25s ease;
}
.billing-prog.is-run .billing-prog-fill {
  background: linear-gradient(90deg, #fcc419, #ffe066);
}
.billing-prog.is-done .billing-prog-fill {
  background: #69db7c;
}
.billing-prog.is-err .billing-prog-fill {
  background: #ff6b6b;
}
.billing-prog-txt {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 9px;
  line-height: 1;
  color: #ced4da;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding: 0 2px;
  pointer-events: none;
  z-index: 1;
}
.billing-prog.is-run .billing-prog-txt,
.billing-prog.is-done .billing-prog-txt {
  color: #1a1b1e;
  font-weight: 600;
}
.billing-rig-row.is-stale-offline .billing-prog {
  opacity: 0.55;
}
.billing-cpu {
  display: block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text);
  font-size: 12px;
  font-weight: 500;
  line-height: 1.2;
}
.billing-tpl-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
}
.billing-st.is-on { color: #69db7c; font-weight: 600; }
.billing-st.is-off { color: #ff8787; font-weight: 600; }
.billing-st.is-warn { color: #ffa94d; font-weight: 600; }
.billing-charged { color: #fcc419; font-weight: 600; }
.billing-bal {
  color: #69db7c;
  font-weight: 600;
}
.billing-bal.is-low {
  color: #ffa94d;
}
.billing-bal.is-empty {
  color: var(--muted);
  font-weight: 500;
}
.billing-renter,
.billing-wait {
  display: block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.billing-wait { color: #868e96; }
.billing-renter { color: #66d9e8; font-weight: 600; }
.rent-charge-head,
.rent-charge-row {
  grid-template-columns:
    minmax(88px, 1fr)
    minmax(80px, 0.9fr)
    minmax(120px, 1.2fr)
    minmax(120px, 1.2fr)
    minmax(72px, 0.8fr)
    minmax(72px, 0.7fr)
    minmax(88px, 1fr)
    minmax(72px, 0.7fr);
  min-width: 860px;
}
.rent-charge-row.is-active {
  box-shadow: inset 3px 0 0 #22b8cf;
}
.billing-charge-panel .recharge-log-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 12px;
}
.charge-log-filters {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 2px;
}
.charge-log-search {
  width: min(240px, 100%);
  margin-left: auto;
}
.billing-charge-panel .recharge-log-table-wrap {
  max-height: min(70vh, 640px);
}
.billing-pick-hint {
  color: var(--muted);
  font-size: 13px;
  margin-bottom: 4px;
}
.billing-pick-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  gap: 10px;
}
.billing-pick-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 14px 10px;
  border-radius: 12px;
  border: 1px solid rgba(116, 192, 252, 0.22);
  background: rgba(255,255,255,0.03);
  color: var(--text);
  cursor: pointer;
  min-width: 0;
}
.billing-pick-btn:hover {
  border-color: #40c057;
  background: rgba(64, 192, 87, 0.12);
}
.billing-pick-no {
  width: 100%;
  min-height: 36px;
  padding: 8px 10px;
  border-radius: 10px;
  border: 1px solid rgba(64, 192, 87, 0.45);
  color: #69db7c;
  background: rgba(64, 192, 87, 0.14);
  display: flex;
  align-items: center;
  justify-content: center;
  font: 600 13px/1.35 "IBM Plex Sans", var(--font);
  text-align: center;
  word-break: break-all;
}
.billing-pick-meta {
  font-size: 11px;
  color: var(--muted);
}




/* 客户充值 */
.recharge-balance {
  color: #69db7c;
  font-size: 13px;
  font-weight: 600;
  margin: 2px 0 4px;
}
.recharge-recent {
  margin-top: 12px;
  display: grid;
  gap: 6px;
  max-height: 180px;
  overflow: auto;
}
.recharge-recent-item {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 8px;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.06);
  font-size: 12px;
  color: var(--muted);
}
.recharge-recent-item strong { color: var(--text); font-weight: 600; }


.recharge-page {
  padding: 4px 0 28px;
  min-height: 320px;
}
.recharge-layout {
  display: grid;
  grid-template-columns: minmax(300px, 400px) minmax(0, 1fr);
  gap: 18px;
  align-items: start;
}
@media (max-width: 960px) {
  .recharge-layout { grid-template-columns: 1fr; }
}
.recharge-panel {
  min-width: 0;
}
.recharge-panel-form {
  padding: 4px 4px 8px;
}
.recharge-panel-head {
  margin-bottom: 14px;
  padding-bottom: 12px;
  border-bottom: 1px dashed rgba(255,255,255,0.08);
}
.recharge-page-title {
  margin: 0 0 6px;
  font-size: 22px;
  font-weight: 650;
  color: var(--text);
  letter-spacing: 0.02em;
}
.recharge-panel-list {
  background: linear-gradient(165deg, rgba(255,255,255,0.035), rgba(255,255,255,0.012));
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: 14px;
  padding: 16px 16px 12px;
  min-height: 420px;
  display: flex;
  flex-direction: column;
}
.recharge-list-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.recharge-list-title {
  margin: 0;
  font-size: 16px;
  font-weight: 650;
  color: var(--text);
}
.recharge-list-sub {
  margin: 4px 0 0;
  font-size: 12px;
  color: var(--muted);
}
.recharge-list-count {
  flex-shrink: 0;
  min-width: 36px;
  height: 28px;
  padding: 0 10px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font: 650 12px/1 "IBM Plex Sans", var(--font);
  color: #74c0fc;
  background: rgba(116, 192, 252, 0.12);
  border: 1px solid rgba(116, 192, 252, 0.22);
}
.recharge-list-tools { margin-bottom: 10px; }
.recharge-search {
  width: 100%;
  height: 36px;
  border-radius: 10px;
  border: 1px solid rgba(255,255,255,0.1);
  background: rgba(0,0,0,0.25);
  color: var(--text);
  padding: 0 12px;
  font-size: 13px;
  outline: none;
}
.recharge-search:focus {
  border-color: rgba(116, 192, 252, 0.45);
}
.recharge-cust-list {
  flex: 1;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
  align-content: start;
  max-height: min(62vh, 640px);
  overflow: auto;
  padding: 2px 2px 8px;
}
.recharge-cust-card {
  display: grid;
  grid-template-columns: 40px 1fr auto;
  gap: 10px;
  align-items: center;
  padding: 12px 12px;
  border-radius: 12px;
  border: 1px solid rgba(255,255,255,0.07);
  background: rgba(0,0,0,0.22);
  cursor: pointer;
  text-align: left;
  color: inherit;
  transition: border-color .15s ease, background .15s ease, transform .15s ease;
}
.recharge-cust-card:hover {
  border-color: rgba(116, 192, 252, 0.35);
  background: rgba(116, 192, 252, 0.06);
}
.recharge-cust-card.is-on {
  border-color: rgba(64, 192, 87, 0.55);
  background: rgba(64, 192, 87, 0.1);
  box-shadow: 0 0 0 1px rgba(64, 192, 87, 0.18);
}
.recharge-cust-avatar {
  width: 40px;
  height: 40px;
  border-radius: 11px;
  display: grid;
  place-items: center;
  font: 700 15px/1 "IBM Plex Sans", var(--font);
  color: #d0ebff;
  background: linear-gradient(145deg, #3b5bdb, #1c7ed6);
  letter-spacing: 0.02em;
}
.recharge-cust-meta { min-width: 0; }
.recharge-cust-name {
  font-size: 14px;
  font-weight: 650;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.recharge-cust-contact {
  margin-top: 3px;
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.recharge-cust-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
}
.recharge-cust-bal {
  font: 650 12px/1 "IBM Plex Sans", var(--font);
  color: #69db7c;
  white-space: nowrap;
}
.recharge-cust-badge {
  font-size: 10px;
  font-weight: 650;
  letter-spacing: 0.04em;
  padding: 3px 7px;
  border-radius: 999px;
  color: #8ce99a;
  background: rgba(64, 192, 87, 0.14);
  border: 1px solid rgba(64, 192, 87, 0.28);
}
.recharge-cust-empty {
  grid-column: 1 / -1;
  padding: 48px 16px;
  text-align: center;
  color: var(--muted);
  font-size: 13px;
  border: 1px dashed rgba(255,255,255,0.08);
  border-radius: 12px;
}
.crumb.is-on {
  color: var(--text);
  background: var(--panel);
}

.local-console {
  max-width: none;
  width: 100%;
  padding: 4px 0 28px;
}
.local-console-flat {
  max-width: none;
}
.local-console-head {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin-bottom: 10px;
  padding: 0 2px;
}
.local-console h2 {
  margin: 0;
  font-size: 18px;
  font-weight: 600;
}
.local-console-cmd-bar {
  margin-bottom: 14px;
  padding: 0 2px;
}
.local-console-os-label {
  color: var(--muted);
  font-size: 12px;
  font-weight: 600;
  margin-bottom: 6px;
}
.local-console-cmdbox {
  margin: 0 0 8px;
  white-space: pre-wrap;
  word-break: break-all;
  max-width: 100%;
}
.local-console-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.local-console-rigs {
  margin-top: 4px;
}
.lc-rig-head,
.lc-rig-row {
  display: grid;
  width: 100%;
  min-width: 100%;
  box-sizing: border-box;
  grid-template-columns:
    minmax(64px, max-content)
    minmax(100px, 0.7fr)
    minmax(72px, 0.55fr)
    minmax(88px, 0.7fr)
    minmax(88px, 0.7fr)
    minmax(40px, 0.35fr)
    minmax(88px, 0.7fr)
    minmax(88px, 0.7fr)
    minmax(96px, 0.75fr)
    minmax(160px, max-content);
  gap: 8px;
  align-items: center;
  padding: 6px 6px;
}
.lc-rig-row .rig-name {
  font-size: 14px;
}
.lc-rig-row .lc-name {
  cursor: pointer;
}
.lc-rig-row .lc-name:hover {
  text-decoration: underline;
  color: #a5d8ff;
}
.lc-rig-row .rig-metric {
  font-size: 12px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.lc-rig-row .lc-net {
  color: #69db7c;
  font-variant-numeric: tabular-nums;
}
.lc-rig-row .lc-st.is-on { color: #69db7c; font-weight: 600; }
.lc-rig-row .lc-st.is-off { color: var(--muted); }
.lc-rig-row .lc-ip {
  cursor: pointer;
  color: #74c0fc;
}
.lc-rig-row .lc-ip:hover {
  text-decoration: underline;
  color: #a5d8ff;
}
.lc-rig-row .lc-ip.is-custom {
  font-weight: 600;
}
.lc-acts {
  display: inline-flex;
  flex-wrap: nowrap;
  gap: 4px;
  justify-self: start;
}
.lc-act {
  padding: 2px 8px !important;
  font-size: 12px !important;
  line-height: 1.4 !important;
  min-height: 0 !important;
}

.lc-machine-block {
  margin-bottom: 8px;
  border-bottom: 1px solid rgba(255,255,255,0.06);
  padding-bottom: 8px;
}
.lc-edit-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 10px 14px;
  padding: 8px 6px 2px;
}
.lc-edit-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12px;
  color: var(--muted);
  min-width: 160px;
}
.lc-edit-input {
  background: #1a1d24;
  border: 1px solid rgba(255,255,255,0.12);
  color: #e9ecef;
  border-radius: 6px;
  padding: 6px 10px;
  font-size: 13px;
  min-width: 180px;
  outline: none;
}
.lc-edit-input:focus {
  border-color: #4dabf7;
}
.lc-edit-apply {
  padding: 6px 16px !important;
  font-size: 13px !important;
  height: 34px;
}
.lc-edit-hint {
  font-size: 12px;
  color: var(--muted);
  align-self: center;
}
.lc-rig-row .lc-name { cursor: default; }
.lc-rig-row .lc-name:hover { text-decoration: none; color: inherit; }
.lc-rig-row .lc-ip { cursor: default; }
.lc-rig-row .lc-ip:hover { text-decoration: none; }

.lc-rig-row.is-offline,
.lc-rig-row.is-offline .rig-name,
.lc-rig-row.is-offline .rig-name.off,
.lc-rig-row.is-offline .rig-metric,
.lc-rig-row.is-offline .lc-ip,
.lc-rig-row.is-offline .lc-ip.is-custom,
.lc-rig-row.is-offline .lc-net,
.lc-rig-row.is-offline .lc-os,
.lc-rig-row.is-offline .lc-cpu,
.lc-rig-row.is-offline .lc-board,
.lc-rig-row.is-offline .lc-disk,
.lc-rig-row.is-offline .lc-act {
  color: #6c757d !important;
}
.lc-rig-row.is-offline .lc-act {
  opacity: 0.75;
  border-color: rgba(255,255,255,0.08) !important;
}
.lc-machine-block.is-offline .lc-edit-bar {
  opacity: 0.85;
}
.lc-rig-row.is-online .lc-net {
  color: #69db7c;
}
.lc-rig-row.is-online .lc-ip {
  color: #74c0fc;
}




/* hidden must win over display:flex/grid on farm chrome */
#toolbar[hidden],
.filterbar[hidden],
#tabs[hidden],
.menubar[hidden],
#metrics[hidden],
.cards[hidden],
#view-workers[hidden],
.rig-list[hidden],
#view-other[hidden],
#view-recharge[hidden],
.recharge-page[hidden] {
  display: none !important;
}

#farmPage.is-recharge #toolbar,
#farmPage.is-recharge #tabs,
#farmPage.is-recharge #metrics,
#farmPage.is-recharge #view-workers {
  display: none !important;
}

#farmPage.is-billing .rig-body .billing-rig-head,
#farmPage.is-billing .rig-body .billing-rig-row {
  display: grid;
  grid-template-columns: var(--billing-cols);
}


.placeholder .billing-tab-panel {
  margin: 0;
  padding: 0;
}
.placeholder .billing-tab-panel h2 {
  margin: 0 0 8px;
  color: var(--text);
  font-size: 20px;
}
.placeholder .billing-tab-panel .billing-page-hint {
  margin: 0 0 16px;
}
.placeholder .billing-tab-panel .billing-tpl-list {
  max-height: none;
  margin-bottom: 16px;
}


.recharge-cust-card {
  grid-template-columns: 40px 1fr auto;
}
.recharge-cust-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 8px;
}
.recharge-approve-btn {
  height: 28px;
  padding: 0 12px;
  border-radius: 8px;
  border: 1px solid rgba(64, 192, 87, 0.45);
  background: rgba(64, 192, 87, 0.16);
  color: #8ce99a;
  font-size: 12px;
  font-weight: 650;
  cursor: pointer;
  white-space: nowrap;
}
.recharge-approve-btn:hover {
  background: rgba(64, 192, 87, 0.28);
  border-color: #40c057;
  color: #b2f2bb;
}
.recharge-approve-btn:disabled {
  opacity: 0.55;
  cursor: default;
}
.recharge-cust-badge.is-pending {
  color: #ffd43b;
  background: rgba(255, 212, 59, 0.12);
  border-color: rgba(255, 212, 59, 0.28);
}
.recharge-wl-hint {
  margin-top: 8px;
  font-size: 12px;
  color: var(--muted);
}
.recharge-wl-hint strong { color: #74c0fc; font-weight: 650; }


.recharge-panel-list {
  max-height: none;
}
.recharge-approved-head {
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px dashed rgba(255,255,255,0.1);
}
.recharge-approved-table-wrap {
  margin-top: 4px;
}


.recharge-approved-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-height: min(48vh, 520px);
  overflow: auto;
  padding: 8px 0 4px;
}
.recharge-approved-row {
  min-height: 52px;
  border-radius: 10px;
  border: 1px solid rgba(255,255,255,0.07);
  background: rgba(0,0,0,0.22);
}
.recharge-approved-row.is-on {
  border-color: rgba(64, 192, 87, 0.45);
  background: rgba(64, 192, 87, 0.08);
}
.recharge-approved-name {
  font-weight: 650;
  color: var(--text);
  font-size: 13px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.recharge-approved-note {
  width: 100%;
  height: 32px;
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,0.1);
  background: rgba(0,0,0,0.25);
  color: var(--text);
  padding: 0 8px;
  font-size: 12px;
}
.recharge-approved-bal {
  color: #69db7c;
  font-weight: 650;
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.recharge-approved-muted {
  color: var(--muted);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.recharge-approved-actions {
  display: inline-flex;
  gap: 6px;
  justify-content: flex-end;
}
.recharge-approved-actions .btn {
  height: 30px;
  padding: 0 10px;
  font-size: 12px;
}
@media (max-width: 1100px) {
  
  .recharge-approved-row {
    grid-template-columns: 1fr 1fr;
    gap: 8px 12px;
    padding: 12px;
  }
  .recharge-approved-actions { grid-column: 1 / -1; justify-content: flex-start; }
}

.recharge-panel-approved {
  grid-column: 1 / -1;
  background: linear-gradient(165deg, rgba(255,255,255,0.035), rgba(255,255,255,0.012));
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: 14px;
  padding: 16px;
  margin-top: 2px;
}
.recharge-panel-pending {
  background: linear-gradient(165deg, rgba(255,255,255,0.035), rgba(255,255,255,0.012));
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: 14px;
  padding: 16px 16px 12px;
  min-height: 280px;
  display: flex;
  flex-direction: column;
}

.recharge-approved-table-wrap { margin-top: 4px; }
.recharge-approved-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  max-height: min(52vh, 560px);
  overflow: auto;
  padding: 8px 0 4px;
}
.recharge-approved-row {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 12px 14px;
  border-radius: 12px;
  border: 1px solid rgba(255,255,255,0.07);
  background: rgba(0,0,0,0.22);
}
.recharge-approved-row.is-on {
  border-color: rgba(64, 192, 87, 0.45);
  background: rgba(64, 192, 87, 0.08);
}
.recharge-approved-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-width: 0;
}
.recharge-approved-top-left {
  display: flex;
  align-items: baseline;
  gap: 14px;
  min-width: 0;
  flex-wrap: wrap;
}
.recharge-approved-top-right {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}
.recharge-approved-name {
  font-weight: 650;
  color: var(--text);
  font-size: 14px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.recharge-approved-bal {
  color: #69db7c;
  font-weight: 650;
  font-size: 13px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.recharge-approved-bal small {
  color: var(--muted);
  font-weight: 500;
  margin-right: 4px;
}
.recharge-approved-note-row {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
}
.recharge-approved-note-row > label {
  flex-shrink: 0;
  font-size: 12px;
  color: var(--muted);
}
.recharge-approved-note {
  flex: 1;
  width: 100%;
  min-width: 0;
  height: 34px;
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,0.1);
  background: rgba(0,0,0,0.25);
  color: var(--text);
  padding: 0 10px;
  font-size: 12px;
}
.recharge-approved-meta {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  font-size: 12px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.recharge-approved-meta-left,
.recharge-approved-meta-right {
  display: inline-flex;
  gap: 14px;
  flex-wrap: wrap;
}
.recharge-approved-actions {
  display: inline-flex;
  gap: 6px;
}
.recharge-approved-actions .btn {
  height: 30px;
  padding: 0 10px;
  font-size: 12px;
}
@media (max-width: 960px) {
  .recharge-layout { grid-template-columns: 1fr; }
  .recharge-panel-approved { grid-column: auto; }
}

.recharge-detail-lines {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 8px 10px;
  border-radius: 8px;
  background: rgba(255,255,255,0.03);
  border: 1px solid rgba(255,255,255,0.05);
}
.recharge-detail-line {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  font-size: 12px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.recharge-detail-line strong {
  color: #69db7c;
  font-weight: 650;
}
.recharge-detail-empty {
  font-size: 12px;
  color: var(--muted);
  opacity: 0.8;
}
.recharge-approved-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 16px;
  width: 100%;
}
.recharge-approved-stat {
  font-size: 12px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.recharge-approved-stat b {
  color: var(--text);
  font-weight: 650;
  margin-left: 4px;
}
.recharge-approved-stat.bal b { color: #69db7c; }


/* 客户明细：沿用矿机行样式 */
.cust-list {
  background: transparent;
  border: 0;
  overflow-x: auto;
  width: 100%;
}
.cust-head,
.cust-row {
  display: grid;
  width: 100%;
  min-width: 720px;
  box-sizing: border-box;
  grid-template-columns:
    minmax(100px, 1.1fr)   /* 客户 */
    minmax(140px, 1.6fr)   /* 备注 */
    minmax(88px, 0.9fr)    /* 积分余额 */
    minmax(88px, 0.9fr)    /* 累计充值 */
    52px                   /* 次数 */
    minmax(132px, 1.2fr)   /* 最近充值 */
    minmax(132px, 1.2fr)   /* 通过时间 */
    120px;                 /* 操作 */
  gap: 6px;
  align-items: end;
  padding: 8px 8px 10px;
}
.cust-head > span,
.cust-row > span,
.cust-row > input,
.cust-row .cust-actions {
  align-self: end;
}
.cust-head {
  background: #1c1e24;
  border-bottom: 1px solid #2a2d34;
  color: #868e96;
  font-size: 12px;
  font-weight: 600;
  min-height: 34px;
  line-height: 1.2;
  text-align: left;
  border-radius: 8px 8px 0 0;
}
.cust-row {
  background: #23252b;
  border-bottom: 1px solid #1a1c20;
  min-height: 40px;
  box-shadow: inset 3px 0 0 #40c057;
}
.cust-row:hover { background: #2a2d34; }
.cust-row.is-on {
  box-shadow: inset 3px 0 0 #40c057, inset 0 0 0 1px rgba(34, 139, 230, 0.35);
  background: #2a2d34;
}
.cust-name {
  color: #74c0fc;
  font-weight: 650;
  font-size: 13px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.cust-note-input {
  width: 100%;
  min-width: 0;
  height: 28px;
  border-radius: 6px;
  border: 1px solid transparent;
  background: transparent;
  color: var(--text);
  padding: 0 6px;
  font-size: 12px;
}
.cust-note-input:hover,
.cust-note-input:focus {
  border-color: rgba(255,255,255,0.12);
  background: rgba(0,0,0,0.25);
  outline: none;
}
.cust-metric {
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.cust-metric.is-bal { color: #69db7c; font-weight: 650; }
.cust-metric.is-sum { color: #74c0fc; font-weight: 650; }
.cust-metric.is-muted { color: #868e96; }
.cust-actions {
  display: inline-flex;
  gap: 6px;
  justify-content: flex-end;
}
.cust-actions .btn {
  height: 28px;
  padding: 0 10px;
  font-size: 12px;
}
.cust-list .recharge-cust-empty {
  margin-top: 8px;
}
.recharge-panel-approved {
  /* keep full width; drop heavy card padding clash */
}


/* 充值表单：积分/备注/按钮同一行底部对齐 */
.recharge-form-bottom {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto;
  gap: 10px 12px;
  align-items: end;
  width: 100%;
}
.recharge-form-bottom > label {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
  margin: 0;
}
.recharge-form-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
  padding-bottom: 1px;
}
.recharge-form-actions .btn {
  height: 36px;
  white-space: nowrap;
}
@media (max-width: 720px) {
  .recharge-form-bottom {
    grid-template-columns: 1fr;
    align-items: stretch;
  }
  .recharge-form-actions {
    justify-content: flex-start;
  }
}

/* 右侧待确认面板保证占满右栏 */
.recharge-layout {
  display: grid;
  grid-template-columns: minmax(300px, 420px) minmax(0, 1fr);
  gap: 18px;
  align-items: stretch;
}
.recharge-panel-pending {
  grid-column: 2;
  grid-row: 1;
  min-height: 320px;
  height: 100%;
  background: linear-gradient(165deg, rgba(255,255,255,0.035), rgba(255,255,255,0.012));
  border: 1px solid rgba(255,255,255,0.07);
  border-radius: 14px;
  padding: 16px 16px 12px;
  display: flex;
  flex-direction: column;
}
.recharge-panel-form {
  grid-column: 1;
  grid-row: 1;
}
.recharge-panel-approved {
  grid-column: 1 / -1;
  grid-row: 2;
}
@media (max-width: 960px) {
  .recharge-layout { grid-template-columns: 1fr; }
  .recharge-panel-pending,
  .recharge-panel-form,
  .recharge-panel-approved {
    grid-column: auto;
    grid-row: auto;
  }
}


.recharge-title-row {
  display: flex;
  align-items: baseline;
  gap: 14px;
  flex-wrap: wrap;
}
.recharge-page-title {
  margin: 0;
  line-height: 1.2;
}
.recharge-back-link {
  border: 0;
  background: transparent;
  padding: 0;
  margin: 0;
  color: var(--muted);
  font-size: 14px;
  font-weight: 600;
  line-height: 1.2;
  cursor: pointer;
  font-family: inherit;
}
.recharge-back-link:hover {
  color: #74c0fc;
}


.recharge-user-label { position: relative; }
.recharge-combo { position: relative; width: 100%; }
.recharge-combo-input {
  width: 100%;
  box-sizing: border-box;
}
.recharge-combo-menu {
  position: absolute;
  left: 0;
  right: 0;
  top: calc(100% + 4px);
  z-index: 40;
  max-height: 220px;
  overflow: auto;
  border-radius: 10px;
  border: 1px solid rgba(255,255,255,0.12);
  background: #23252b;
  box-shadow: 0 10px 28px rgba(0,0,0,0.45);
  padding: 4px;
}
.recharge-combo-item {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  border: 0;
  background: transparent;
  color: var(--text);
  text-align: left;
  padding: 8px 10px;
  border-radius: 8px;
  cursor: pointer;
  font: inherit;
}
.recharge-combo-item:hover,
.recharge-combo-item.is-on {
  background: #2a2d34;
}
.recharge-combo-item .nm { color: #74c0fc; font-weight: 650; }
.recharge-combo-item .bal { color: #69db7c; font-variant-numeric: tabular-nums; font-size: 12px; }
.recharge-combo-empty {
  padding: 10px;
  color: var(--muted);
  font-size: 12px;
}

.cust-actions .btn.is-disabled,
.cust-actions .btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}


.recharge-log-btn {
  flex-shrink: 0;
  height: 28px;
  padding: 0 12px;
  border-radius: 999px;
  border: 1px solid rgba(116, 192, 252, 0.28);
  background: rgba(116, 192, 252, 0.12);
  color: #74c0fc;
  font: 650 12px/1 "IBM Plex Sans", var(--font);
  cursor: pointer;
}
.recharge-log-btn:hover {
  background: rgba(116, 192, 252, 0.2);
  border-color: #74c0fc;
}
.recharge-log-modal { width: min(860px, calc(100vw - 32px)); }
.recharge-log-toolbar {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.recharge-log-filter {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 12px;
  color: var(--muted);
  min-width: 200px;
}
.recharge-log-filter select {
  height: 34px;
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,0.1);
  background: rgba(0,0,0,0.25);
  color: var(--text);
  padding: 0 10px;
}
.recharge-log-count { color: var(--muted); font-size: 12px; }
.recharge-log-table-wrap { overflow: auto; max-height: min(60vh, 520px); }
.recharge-log-head,
.recharge-log-row {
  display: grid;
  grid-template-columns: 1.3fr 1fr 0.8fr 0.8fr 0.8fr 1.2fr;
  gap: 8px;
  align-items: center;
  padding: 8px 10px;
  min-width: 640px;
}
.recharge-log-head {
  background: #1c1e24;
  color: #868e96;
  font-size: 12px;
  font-weight: 600;
  border-bottom: 1px solid #2a2d34;
  position: sticky;
  top: 0;
  z-index: 1;
}
.recharge-log-row {
  background: #23252b;
  border-bottom: 1px solid #1a1c20;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
}
.recharge-log-row:hover { background: #2a2d34; }
.recharge-log-row .user { color: #74c0fc; font-weight: 650; }
.recharge-log-row .amt { color: #69db7c; font-weight: 650; }
.recharge-log-row .muted { color: #868e96; }
.recharge-log-empty {
  padding: 28px 12px;
  text-align: center;
  color: var(--muted);
  font-size: 13px;
}

button.cust-name {
  border: 0;
  background: transparent;
  padding: 0;
  cursor: pointer;
  color: #74c0fc;
  font-weight: 650;
  font-size: 13px;
  font-family: inherit;
  text-align: left;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
}
button.cust-name:hover { text-decoration: underline; }

.lc-act-del {
  color: #ff6b6b !important;
  border-color: rgba(255,107,107,0.35) !important;
}
.lc-rig-row.is-offline .lc-act-del {
  color: #ff8787 !important;
  opacity: 1 !important;
}


.lc-pxe-panel {
  margin-top: 18px;
  padding: 10px 6px 4px;
  border-top: 1px solid rgba(255,255,255,0.08);
}
.lc-pxe-head {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 8px;
  flex-wrap: wrap;
}
.lc-pxe-title {
  font-size: 13px;
  font-weight: 600;
  color: #ced4da;
}
.lc-pxe-refresh {
  padding: 2px 10px !important;
  font-size: 12px !important;
  margin-left: auto;
}
.lc-pxe-list {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.lc-pxe-row {
  display: grid;
  grid-template-columns: 56px minmax(0, 1fr) 64px;
  gap: 10px;
  align-items: center;
  padding: 4px 6px;
  font-size: 12px;
  border-radius: 4px;
}
.lc-pxe-row:hover {
  background: rgba(255,255,255,0.04);
}
.lc-pxe-kind {
  color: var(--muted);
  font-size: 11px;
}
.lc-pxe-name {
  color: #74c0fc;
  text-decoration: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.lc-pxe-name:hover {
  text-decoration: underline;
  color: #a5d8ff;
}
.lc-pxe-size {
  color: #adb5bd;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.lc-pxe-toggle {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  background: transparent;
  border: 1px solid rgba(255,255,255,0.1);
  border-radius: 6px;
  color: #e9ecef;
  padding: 8px 10px;
  cursor: pointer;
  text-align: left;
}
.lc-pxe-toggle:hover {
  background: rgba(255,255,255,0.04);
  border-color: rgba(255,255,255,0.18);
}
.lc-pxe-caret {
  color: var(--muted);
  font-size: 12px;
  width: 12px;
}
.lc-pxe-toggle.is-open .lc-pxe-caret {
  transform: rotate(90deg);
  display: inline-block;
}
.lc-pxe-softname {
  font-size: 13px;
  font-weight: 600;
  color: #74c0fc;
}
.lc-pxe-drop {
  margin-top: 8px;
  padding: 6px 4px 2px;
  border: 1px solid rgba(255,255,255,0.08);
  border-radius: 6px;
  background: rgba(0,0,0,0.15);
}
.lc-pxe-drop-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 0 6px 6px;
}
.lc-pxe-drop-bar .lc-pxe-refresh {
  margin-left: auto;
}

.lc-soft-field { min-width: 110px; }
.lc-soft-select { min-width: 100px; padding: 6px 8px; }
.lc-soft-install {
  padding: 6px 12px !important;
  font-size: 13px !important;
  height: 34px;
  align-self: center;
}
.lc-soft-prog-wrap {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  gap: 3px;
  margin-left: 6px;
  align-self: center;
  min-width: 120px;
  max-width: 148px;
}
.lc-soft-prog {
  width: 120px;
  height: 8px;
  border-radius: 99px;
  background: rgba(255,255,255,0.08);
  overflow: hidden;
  flex-shrink: 0;
}
.lc-soft-prog-bar {
  height: 100%;
  width: 0;
  background: linear-gradient(90deg, #4dabf7, #69db7c);
  border-radius: 99px;
  transition: width .35s ease;
}
.lc-soft-prog-txt {
  display: block;
  font-size: 10px;
  line-height: 1.2;
  color: var(--muted);
  max-width: 148px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-height: 12px;
}

.lc-fog-ep-field{min-width:200px;flex:1.2}
.lc-fog-ep-field .lc-edit-input{min-width:180px}

.lc-fog-reach {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  min-width: 220px;
  max-width: 420px;
}
.lc-fog-reach-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #888;
  flex: 0 0 auto;
}
.lc-fog-reach-dot.is-up { background: #3ecf8e; box-shadow: 0 0 0 3px rgba(62,207,142,.18); }
.lc-fog-reach-dot.is-down { background: #e85d5d; box-shadow: 0 0 0 3px rgba(232,93,93,.18); }
.lc-fog-reach-dot.is-unknown { background: #8a8a8a; }
.lc-fog-reach-txt { font-size: 12px; color: #c8c8c8; white-space: nowrap; }
.lc-fog-reach-btn { padding: 4px 10px; font-size: 12px; }
.lc-fog-reach-log { font-size: 12px; color: #aaa; }
.lc-fog-reach-log summary { cursor: pointer; user-select: none; }
.lc-fog-reach-log-body {
  margin-top: 6px;
  max-height: 140px;
  overflow: auto;
  padding: 6px 8px;
  background: rgba(255,255,255,.04);
  border-radius: 6px;
  min-width: 260px;
}
.lc-fog-log-row { display: grid; grid-template-columns: 78px 40px 1fr; gap: 6px; line-height: 1.45; }
.lc-fog-log-row .t { color: #888; font-variant-numeric: tabular-nums; }
.lc-fog-log-row .e-down, .lc-fog-log-row .e-fail { color: #e85d5d; }
.lc-fog-log-row .e-up, .lc-fog-log-row .e-ok { color: #3ecf8e; }
.lc-fog-log-row .d { color: #bdbdbd; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.lc-fog-panel{
  margin: 6px 10px 10px;
  padding: 10px 12px;
  border: 1px solid rgba(255,255,255,.08);
  background: rgba(0,0,0,.22);
  border-radius: 6px;
}
.lc-fog-panel-head{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:8px;
}
.lc-fog-panel-head strong{ font-size:13px; letter-spacing:.02em; }
.lc-fog-panel-status{ font-size:12px; color:#aaa; flex:1; min-width:120px; }
.lc-fog-token-row,.lc-fog-actions{
  display:flex; flex-wrap:wrap; gap:8px; align-items:flex-end; margin:8px 0;
}
.lc-fog-token-row .lc-edit-input{ min-width:180px; flex:1; }
.lc-fog-cols{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.lc-fog-cols-3{ grid-template-columns:1fr 1.1fr 1fr; }
@media (max-width:1100px){ .lc-fog-cols-3{ grid-template-columns:1fr 1fr; } }
@media (max-width:900px){ .lc-fog-cols, .lc-fog-cols-3{ grid-template-columns:1fr; } }
.lc-fog-img-row{ grid-template-columns:1.1fr 1fr auto; align-items:center; }
.lc-fog-img-del{ padding:2px 8px; font-size:11px; line-height:1.4; }
.lc-fog-col-title{ font-size:12px; color:#9a9a9a; margin-bottom:4px; }
.lc-fog-list{
  max-height:140px; overflow:auto; font-size:12px;
  border:1px solid rgba(255,255,255,.06); padding:6px 8px; border-radius:4px;
  background:rgba(0,0,0,.18);
}
.lc-fog-row{ display:grid; grid-template-columns:1.2fr 1fr .8fr; gap:6px; line-height:1.45; }
.lc-fog-row .n{ color:#ddd; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.lc-fog-row .m,.lc-fog-row .i{ color:#999; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.lc-fog-actions .lc-edit-field{ min-width:140px; }

.lc-fog-flow{
  margin: 8px 0 10px;
  padding: 10px 12px;
  border: 1px dashed rgba(255,255,255,.14);
  border-radius: 6px;
  background: rgba(255,255,255,.03);
}
.lc-fog-flow-title{ font-size:13px; font-weight:600; margin-bottom:8px; }
.lc-fog-flow-step{ display:flex; gap:10px; margin:8px 0; align-items:flex-start; }
.lc-fog-flow-step .num{
  flex:0 0 22px; height:22px; line-height:22px; text-align:center;
  border-radius:50%; background:#3d7eff; color:#fff; font-size:12px; font-weight:700;
}
.lc-fog-flow-step .lab{ font-size:12px; margin-bottom:6px; color:#ddd; }
.lc-fog-flow-step .row{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.lc-fog-flow-step .hint{ font-size:11px; margin-top:4px; }
.lc-fog-file{ max-width:220px; font-size:12px; color:#bbb; }



.install-panel{ margin-top: 12px; }

.install-copy-mini{
  flex: 0 0 auto;
  padding: 6px 10px !important;
  font-size: 12px !important;
  min-width: 52px;
}

.install-check{ display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: #ddd; cursor: pointer; }
.install-check input{ width: 15px; height: 15px; accent-color: #3b82f6; }


.ver-cell{min-width:7.5rem;max-width:none;white-space:nowrap;}
/* ver-cell-osfix */


/* 接收图片 */
.recvimg-page { padding: 18px 8px 28px; }
.recvimg-head { margin-bottom: 16px; }
.recvimg-title { margin: 0 0 6px; font-size: 20px; font-weight: 650; color: #e8eaed; }
.recvimg-sub { margin: 0; font-size: 13px; }
.recvimg-body {
  min-height: 280px;
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 10px;
  background: rgba(255,255,255,.03);
  padding: 20px;
}
.recvimg-body .placeholder-empty {
  color: rgba(232,234,237,.45);
  font-size: 14px;
  text-align: center;
  padding: 72px 12px;
}


/* recvimg billing clone */
.recvimg-billing-clone { padding: 0 0 24px; }
.recvimg-billing-clone > .billing-menubar {
  margin: 0 0 10px;
}
.recvimg-billing-clone > .billing-toolbar {
  margin-bottom: 10px;
}
.recvimg-billing-clone .rig-list { margin-top: 4px; }


.recvimg-billing-clone .billing-rig-row.is-recv-gone {
  opacity: 0.72;
}
.recvimg-billing-clone .billing-rig-row.is-recv-gone .rig-name small {
  margin-left: 4px;
  font-size: 11px;
}


/* recvimg without hardware/price cols */
.recvimg-billing-clone .recv-rig-head,
.recvimg-billing-clone .recv-rig-row {
  --billing-cols: 22px 120px 100px 100px 90px 128px 56px 56px 44px 44px 72px 44px;
}
.recvimg-billing-clone .recv-id {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12px;
  color: #e8eaed;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.recvimg-billing-clone .recv-id {
  color: #e8eaed;
  font-size: 12px;
}
.recvimg-billing-clone .recv-code {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  letter-spacing: 0.04em;
  color: #e8eaed;
  font-size: 12px;
}

.recvimg-billing-clone .recv-interval-select {
  width: 100%;
  max-width: 104px;
  height: 24px;
  border-radius: 4px;
  border: 1px solid rgba(255,255,255,.12);
  background: #1b1d21;
  color: #e8eaed;
  font-size: 12px;
  padding: 0 4px;
}

.recvimg-billing-clone .recv-act {
  display: flex;
  align-items: center;
}
.recvimg-billing-clone .recv-link-btn {
  appearance: none;
  border: none;
  background: transparent;
  color: #74c0ff;
  font-size: 12px;
  padding: 0;
  cursor: pointer;
  text-decoration: none;
}
.recvimg-billing-clone .recv-link-btn:hover {
  color: #a5d8ff;
  text-decoration: underline;
}

.recvimg-billing-clone .recv-risk {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
.recvimg-billing-clone .recv-risk-dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: none;
  padding: 0;
  cursor: pointer;
  box-shadow: 0 0 0 1px rgba(0,0,0,.35);
}
.recvimg-billing-clone .recv-risk-dot.risk-green { background: #51cf66; }
.recvimg-billing-clone .recv-risk-dot.risk-light_yellow { background: #ffe066; }
.recvimg-billing-clone .recv-risk-dot.risk-deep_yellow { background: #f59f00; }
.recvimg-billing-clone .recv-risk-dot.risk-light_red { background: #ff8787; }
.recvimg-billing-clone .recv-risk-dot.risk-deep_red { background: #e03131; }
.recvimg-billing-clone .recv-risk-dot:disabled { opacity: 0.6; cursor: wait; }

.recvimg-billing-clone .recv-conn {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
.recvimg-billing-clone .recv-conn-dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  box-shadow: 0 0 0 1px rgba(0,0,0,.35);
  display: inline-block;
}
.recvimg-billing-clone .recv-conn-dot.is-on { background: #51cf66; }
.recvimg-billing-clone .recv-conn-dot.is-off { background: #e03131; }

.recvimg-billing-clone .recv-mode-select {
  width: 100%;
  max-width: 80px;
  height: 24px;
  border-radius: 4px;
  border: 1px solid rgba(255,255,255,.12);
  background: #1b1d21;
  color: #e8eaed;
  font-size: 12px;
  padding: 0 2px;
}

.recvimg-billing-clone .recv-interval {
  display: flex;
  align-items: center;
  gap: 6px;
}
.recvimg-billing-clone .recv-screen-sw {
  display: inline-flex;
  align-items: center;
  margin: 0;
  cursor: pointer;
}
.recvimg-billing-clone .recv-screen-sw input {
  width: 14px;
  height: 14px;
  margin: 0;
  accent-color: #51cf66;
  cursor: pointer;
}

.recvimg-billing-clone .recv-bind {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
.recvimg-billing-clone .recv-bind-dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  box-shadow: 0 0 0 1px rgba(0,0,0,.35);
  display: inline-block;
}
.recvimg-billing-clone .recv-bind-dot.is-on { background: #51cf66; }
.recvimg-billing-clone .recv-bind-dot.is-off { background: #e03131; }

/* recv browse player */
.recv-browse-mask { z-index: 12000; }
.recv-browse-mask .recv-browse-modal {
  width: min(720px, 92vw);
  max-height: 78vh;
  display: flex;
  flex-direction: column;
  transition: width .15s ease, max-height .15s ease;
}
.recv-browse-mask.is-fullscreen {
  padding: 0 !important;
  background: #000;
}
.recv-browse-mask .recv-browse-modal.is-maximized,
.recv-browse-mask.is-fullscreen .recv-browse-modal {
  width: 100vw !important;
  max-width: 100vw !important;
  height: 100vh !important;
  max-height: 100vh !important;
  border-radius: 0 !important;
  margin: 0 !important;
}
.recv-browse-mask .recv-browse-modal.is-maximized .recv-browse-body,
.recv-browse-mask.is-fullscreen .recv-browse-modal .recv-browse-body {
  flex: 1;
  min-height: 0;
  height: 100%;
}
.recv-browse-head-actions {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: auto;
}
.recv-browse-mask .recv-browse-modal.is-maximized .recv-browse-main,
.recv-browse-mask.is-fullscreen .recv-browse-modal .recv-browse-main {
  min-height: 0;
  flex: 1;
  display: flex;
  flex-direction: column;
}
.recv-browse-mask .recv-browse-modal.is-maximized .recv-browse-stage,
.recv-browse-mask.is-fullscreen .recv-browse-modal .recv-browse-stage {
  min-height: 0;
  max-height: none !important;
  flex: 1;
  height: auto;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  background: #000;
  border-radius: 0;
}
.recv-browse-mask .recv-browse-modal.is-maximized .recv-browse-stage img,
.recv-browse-mask.is-fullscreen .recv-browse-modal .recv-browse-stage img {
  max-width: 100%;
  max-height: 100%;
  width: auto !important;
  height: auto !important;
  object-fit: contain;
  object-position: center;
}
.recv-browse-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-height: 0;
}
.recv-browse-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 12px;
  align-items: center;
  font-size: 12px;
  color: #ced4da;
}
.recv-browse-filters label {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.recv-browse-filters input[type="datetime-local"],
.recv-browse-filters select {
  height: 28px;
  border-radius: 4px;
  border: 1px solid rgba(255,255,255,.12);
  background: #1b1d21;
  color: #e8eaed;
  font-size: 12px;
  padding: 0 6px;
}
.recv-browse-stage {
  position: relative;
  background: #0f1114;
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 6px;
  min-height: 240px;
  max-height: 42vh;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.recv-browse-stage img {
  max-width: 100%;
  max-height: 42vh;
  object-fit: contain;
  display: block;
}
.recv-browse-mask .recv-browse-modal {
  width: min(980px, 96vw);
}
.recv-browse-mask .recv-browse-modal.is-maximized {
  width: min(1480px, 98vw);
}
.recv-browse-main {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(220px, 280px);
  gap: 10px;
  align-items: stretch;
  min-height: 0;
  flex: 1;
}
.recv-browse-main .recv-browse-stage {
  min-width: 0;
}
.recv-browse-ocr {
  display: flex;
  flex-direction: column;
  min-height: 240px;
  max-height: 42vh;
  background: #12151a;
  border: 1px solid rgba(255,255,255,.10);
  border-radius: 6px;
  overflow: hidden;
}
.recv-browse-mask .recv-browse-modal.is-maximized .recv-browse-ocr {
  max-height: none;
  min-height: 0;
  height: auto;
}
.recv-browse-ocr-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 8px 10px;
  border-bottom: 1px solid rgba(255,255,255,.08);
  color: #ced4da;
  font-size: 12px;
  font-weight: 600;
  background: #171a20;
}
.recv-browse-ocr-btn {
  height: 26px;
  padding: 0 10px;
  font-size: 12px;
  opacity: .55;
  cursor: not-allowed;
}
.recv-browse-ocr-text {
  margin: 0;
  padding: 10px 12px;
  flex: 1;
  min-height: 0;
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-word;
  font-family: "Cascadia Mono", "Sarasa Mono SC", "Microsoft YaHei UI", Consolas, monospace;
  font-size: 12px;
  line-height: 1.55;
  color: #e8eaed;
  background: transparent;
}
@media (max-width: 860px) {
  .recv-browse-main {
    grid-template-columns: 1fr;
  }
  .recv-browse-ocr {
    max-height: 28vh;
    min-height: 140px;
  }
}

.recv-browse-empty {
  color: #868e96;
  font-size: 13px;
}
.recv-browse-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 16px;
  font-size: 12px;
  color: #adb5bd;
}
.recv-browse-renter {
  color: #74c0ff;
  font-weight: 600;
}
.recv-browse-renter.is-idle {
  color: #868e96;
  font-weight: 400;
}
.recv-browse-controls {
  display: flex;
  gap: 8px;
  justify-content: center;
}


/* 文字识别（对比）弹窗：固定尺寸，避免随内容伸缩 */
.recv-ocr-mask { z-index: 12000; }
.recv-ocr-mask:not([hidden]) {
  display: flex !important;
  align-items: center;
  justify-content: center;
  z-index: 12000;
}
.recv-ocr-mask .recv-ocr-modal {
  width: 980px;
  height: 640px;
  max-width: 96vw;
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  box-sizing: border-box;
}
.recv-ocr-mask .recv-ocr-modal.is-maximized {
  width: min(1480px, 98vw);
  height: 96vh;
  max-width: 98vw;
  max-height: 96vh;
}
.recv-ocr-mask .recv-ocr-modal .recv-browse-body {
  flex: 1;
  min-height: 0;
  overflow: hidden;
}
.recv-ocr-layout {
  display: grid;
  grid-template-columns: 340px 1fr;
  gap: 10px;
  align-items: stretch;
  height: 420px;
  min-height: 420px;
  max-height: 420px;
  flex: 0 0 420px;
}
.recv-ocr-mask .recv-ocr-modal.is-maximized .recv-ocr-layout {
  flex: 1 1 auto;
  height: auto;
  min-height: 0;
  max-height: none;
}
.recv-ocr-preview {
  position: relative;
  width: 340px;
  height: 420px;
  box-sizing: border-box;
  background: #0f1114;
  border: 1px solid rgba(255,255,255,.08);
  border-radius: 6px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.recv-ocr-mask .recv-ocr-modal.is-maximized .recv-ocr-preview {
  width: 100%;
  height: 100%;
}
.recv-ocr-preview img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  display: block;
}
.recv-ocr-panel {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 420px;
  box-sizing: border-box;
  background: #12151a;
  border: 1px solid rgba(255,255,255,.10);
  border-radius: 6px;
  overflow: hidden;
}
.recv-ocr-mask .recv-ocr-modal.is-maximized .recv-ocr-panel {
  height: 100%;
  min-height: 0;
}
.recv-ocr-panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex: 0 0 auto;
  padding: 8px 12px;
  border-bottom: 1px solid rgba(255,255,255,.08);
  color: #ced4da;
  font-size: 12px;
  font-weight: 600;
  background: #171a20;
}
.recv-ocr-panel-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.recv-ocr-panel-actions .btn-dark {
  height: 26px;
  padding: 0 10px;
  font-size: 12px;
}
.recv-ocr-panel-hint {
  font-weight: 400;
  color: #868e96;
}
.recv-ocr-text {
  margin: 0;
  padding: 12px 14px;
  flex: 1 1 auto;
  min-height: 0;
  height: auto;
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-word;
  font-family: "Cascadia Mono", "Sarasa Mono SC", "Microsoft YaHei UI", Consolas, monospace;
  font-size: 13px;
  line-height: 1.55;
  color: #e8eaed;
  background: transparent;
}
@media (max-width: 900px) {
  .recv-ocr-mask .recv-ocr-modal {
    width: 96vw;
    height: 90vh;
  }
  .recv-ocr-layout {
    grid-template-columns: 1fr;
    height: auto;
    min-height: 0;
    max-height: none;
    flex: 1 1 auto;
  }
  .recv-ocr-preview,
  .recv-ocr-panel {
    width: 100%;
    height: 280px;
  }
}

.recv-clear-days-wrap {
  display: inline-flex;
  align-items: center;
  margin: 0 2px;
}
.recv-clear-days {
  height: 26px;
  min-width: 78px;
  border-radius: 4px;
  border: 1px solid rgba(255,255,255,.14);
  background: #2a2d33;
  color: #e8eaed;
  padding: 0 6px;
  font-size: 12px;
}

.recv-browse-mask .modal-head {
  display: flex;
  align-items: center;
  gap: 8px;
}
.recv-browse-mask .modal-head h3 {
  margin: 0;
  flex: 1;
}

.recv-clear-captcha-mask { z-index: 13000; }
.recv-clear-captcha-modal {
  width: min(380px, 92vw);
}
.recv-clear-captcha-tip {
  margin: 0 0 12px;
  font-size: 13px;
  color: #ced4da;
  line-height: 1.45;
}
.recv-clear-captcha-row {
  display: flex;
  gap: 10px;
  align-items: center;
  margin-bottom: 14px;
}
.recv-clear-captcha-row img {
  height: 40px;
  width: 120px;
  object-fit: contain;
  background: #fff;
  border-radius: 4px;
  cursor: pointer;
}
.recv-clear-captcha-row input {
  flex: 1;
  height: 36px;
  border-radius: 4px;
  border: 1px solid rgba(255,255,255,.14);
  background: #1b1d21;
  color: #e8eaed;
  padding: 0 10px;
}
.recv-clear-captcha-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

.recv-conn-dot.is-disabled {
  background: #6c757d;
  opacity: 0.55;
}

.recv-ocr-panel-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.recv-ocr-panel-actions .btn-dark {
  height: 26px;
  padding: 0 10px;
  font-size: 12px;
}

.recv-text-filter-label {
  display: inline-flex;
  align-items: center;
  margin-left: 8px;
  color: #ced4da;
  font-size: 12px;
}
.recv-text-filter-input {
  height: 26px;
  min-width: 64px;
  width: 72px;
  margin-left: 6px;
  border-radius: 4px;
  border: 1px solid rgba(255,255,255,.14);
  background: #2a2d33;
  color: #e8eaed;
  padding: 0 8px;
  font-size: 12px;
}
.recv-text-filter-input::placeholder {
  color: #868e96;
}
.recv-text-filter-input:focus {
  outline: none;
  border-color: rgba(116, 192, 255, .55);
}
#recvTextFilterApply {
  margin-left: 6px;
}

.recv-text-filter-result {
  display: inline-flex;
  align-items: center;
  margin-left: 8px;
  color: #94a3b8;
  font-size: 11px;
  line-height: 1.2;
  max-width: 220px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.recv-text-filter-result {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 8px;
  margin-left: 8px;
  max-width: min(520px, 46vw);
}
.recv-text-filter-chip {
  cursor: pointer;
  color: #94a3b8;
  font-size: 11px;
  line-height: 1.2;
  white-space: nowrap;
}

.recv-hit-num {
  display: inline-block;
  font-size: 12px;
  color: #ced4da;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.02em;
  white-space: nowrap;
}
.recv-hit-num .sep {
  color: #868e96;
  margin: 0 3px;
}

.recv-risk-rules-rows {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.recv-risk-rule-row {
  display: grid;
  grid-template-columns: 18px 64px 1fr 72px;
  align-items: center;
  gap: 8px;
  font-size: 13px;
}
.recv-risk-rule-row .dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  box-shadow: 0 0 0 1px rgba(0,0,0,.35);
}
.recv-risk-rule-row .dot.risk-green { background: #51cf66; }
.recv-risk-rule-row .dot.risk-light_yellow { background: #ffe066; }
.recv-risk-rule-row .dot.risk-deep_yellow { background: #f59f00; }
.recv-risk-rule-row .dot.risk-light_red { background: #ff8787; }
.recv-risk-rule-row .dot.risk-deep_red { background: #fa5252; }
.recv-risk-rule-row input[type="number"] {
  width: 72px;
  background: #1a1b1e;
  border: 1px solid #495057;
  color: #e9ecef;
  border-radius: 6px;
  padding: 4px 8px;
}

.recv-browse-hits-only {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  cursor: pointer;
  user-select: none;
}
.recv-browse-hit-kws {
  font-size: 12px;
  color: #ffe066;
  max-width: 280px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.recvimg-billing-clone .recv-rig-head > span {
  position: relative;
  min-width: 0;
}
.recvimg-billing-clone .recv-col-resizer {
  position: absolute;
  top: 0;
  right: -3px;
  width: 7px;
  height: 100%;
  cursor: col-resize;
  z-index: 5;
  user-select: none;
  touch-action: none;
}
.recvimg-billing-clone .recv-col-resizer:hover,
.recvimg-billing-clone .recv-col-resizer.is-dragging {
  background: rgba(100, 180, 255, 0.35);
}
.recvimg-billing-clone.is-col-resizing,
.recvimg-billing-clone.is-col-resizing * {
  cursor: col-resize !important;
  user-select: none !important;
}
.recvimg-billing-clone .recv-id,
.recvimg-billing-clone .recv-rig-head > span:nth-child(4) {
  font-variant-numeric: tabular-nums;
  letter-spacing: 0;
}


/* 接收图片：列宽各自独立，不互相挤压；总宽超出可横向滚动 */
.recvimg-billing-clone .recv-rig-list,
.recvimg-billing-clone #recvImgListWrap,
.recvimg-billing-clone .billing-rig-list {
  overflow-x: auto;
  overflow-y: visible;
}
.recvimg-billing-clone .recv-rig-head,
.recvimg-billing-clone .recv-rig-row {
  width: max-content;
  min-width: 100%;
  max-width: none;
  box-sizing: border-box;
  /* 用 JS 写入的 --billing-cols；每列 minmax(W,W) 禁止被挤压 */
  justify-content: start;
}
.recvimg-billing-clone .recv-rig-head > span,
.recvimg-billing-clone .recv-rig-row > * {
  min-width: 0;
  max-width: none;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}


.recvimg-billing-clone:not(.is-layout-edit) .recv-col-resizer {
  display: none !important;
  pointer-events: none !important;
}
.recvimg-billing-clone.is-layout-edit .recv-col-resizer {
  display: block;
}
.recv-layout-switch {
  margin-right: 4px;
}

/* 布局开关 */
.recvimg-billing-clone .recv-layout-switch {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-right: 10px;
  color: #e8eaed;
  font-weight: 600;
  cursor: pointer;
  user-select: none;
}
.recvimg-billing-clone .recv-layout-switch input {
  width: 16px;
  height: 16px;
  accent-color: #228be6;
  cursor: pointer;
}
.recvimg-billing-clone.is-layout-edit .recv-layout-switch span::after {
  content: "（拖列中）";
  color: #ffe066;
  font-weight: 500;
  font-size: 12px;
  margin-left: 2px;
}


.miner-os-list { display: flex; flex-direction: column; gap: 4px; padding: 0 8px 8px; }
.miner-os-item {
  text-align: left; border: 1px solid transparent; background: transparent;
  color: var(--muted); padding: 6px 10px; border-radius: 6px; cursor: pointer; font: inherit;
}
.miner-os-item:hover { color: #cfd3dc; background: rgba(255,255,255,.04); }
.miner-os-item.is-active {
  color: #fff; background: rgba(59,130,246,.18); border-color: rgba(59,130,246,.35);
}


/* Linux / Windows 独立矿场页 crumb */


.miner-wh-layout-flat {
  display: block;
  grid-template-columns: none;
}
.miner-wh-layout-flat .miner-wh-main { width: 100%; }


.wallet-page-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 18px;
}
.wallet-add-btn {
  width: 40px;
  height: 40px;
  padding: 0;
  font-size: 24px;
  font-weight: 600;
  line-height: 1;
  border-radius: 10px;
  flex: 0 0 auto;
}


.batch-af-wrap { position: relative; display: inline-block; vertical-align: middle; }
.batch-af-menu {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 60;
  min-width: 132px;
  background: #25262b;
  border: 1px solid #3a3d45;
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0,0,0,.45);
  padding: 6px;
}
.batch-af-menu button {
  display: block; width: 100%; text-align: left;
  border: 0; background: transparent; color: #e8eaef;
  font: 500 13px var(--font); cursor: pointer;
  padding: 8px 10px; border-radius: 6px;
}
.batch-af-menu button:hover { background: rgba(255,255,255,.08); }

/* === database page col resize (like recvimg) === */
.database-billing-clone .db-rig-head,
.database-billing-clone .db-rig-row {
  --db-cols: 22px 140px 140px 160px 160px;
  display: grid;
  width: max-content;
  min-width: 100%;
  box-sizing: border-box;
  grid-template-columns: var(--db-cols);
  column-gap: 0;
  align-items: center;
  padding: 6px 8px;
}
.database-billing-clone .db-rig-head > span,
.database-billing-clone .db-rig-row > span {
  position: relative;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  padding: 0 10px;
  box-sizing: border-box;
}
.database-billing-clone .db-col:not(.db-col-check):not(.db-col-first)::before {
  content: "|";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  color: #5c6370;
  font-weight: 600;
  pointer-events: none;
}
.database-billing-clone .db-col-resizer {
  position: absolute;
  top: 0;
  right: -3px;
  width: 7px;
  height: 100%;
  cursor: col-resize;
  z-index: 5;
  user-select: none;
  touch-action: none;
}
.database-billing-clone .db-col-resizer:hover,
.database-billing-clone .db-col-resizer.is-dragging {
  background: rgba(100, 180, 255, 0.35);
}
.database-billing-clone.is-col-resizing,
.database-billing-clone.is-col-resizing * {
  cursor: col-resize !important;
  user-select: none !important;
}
.database-billing-clone .db-rig-list {
  overflow-x: auto;
}


/* === database accounts rows === */
.database-billing-clone .db-rig-row {
  --db-cols: 22px 140px 140px 160px 160px;
  display: grid;
  width: max-content;
  min-width: 100%;
  box-sizing: border-box;
  grid-template-columns: var(--db-cols);
  column-gap: 0;
  align-items: center;
  padding: 8px;
  border-top: 1px solid rgba(255,255,255,0.06);
  color: #c5c9d1;
  font-size: 13px;
}
.database-billing-clone .db-rig-row > span {
  position: relative;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  padding: 0 10px;
  box-sizing: border-box;
}
.database-billing-clone .db-rig-row .db-col:not(.db-col-check):not(.db-col-first)::before {
  content: "|";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  color: #5c6370;
  font-weight: 600;
  pointer-events: none;
}

/* mf-secondary: hide bind-rent-oc */
html.mf-secondary #batchBarLinux [data-action="bind-rent-oc"],

/* mf-secondary: hide batch rent */
html.mf-secondary #batchBarLinux [data-action="rent"],


/* Software pull: inline page panel (not modal popup) */
.software-pull-panel[hidden] { display: none !important; }
.software-pull-panel {
  display: block;
  margin: 0 0 28px;
}
.software-pull-card {
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
}
.software-pull-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  padding: 16px 18px;
  border-bottom: 1px solid var(--line);
  background: #252830;
}
.software-pull-head h2 {
  margin: 0;
  font-size: 18px;
  font-weight: 650;
  color: var(--text);
}
.software-pull-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding: 12px 18px 0;
}
.software-pull-toolbar .btn {
  height: 30px;
  padding: 0 10px;
}
.software-pull-list {
  margin: 12px 18px;
  max-height: min(55vh, 520px);
  overflow: auto;
  border: 1px solid rgba(255,255,255,.1);
  border-radius: 8px;
  padding: 8px;
  background: #1c1e24;
}
.software-pull-panel .spull-bar-wrap {
  height: 14px;
  background: rgba(255,255,255,.08);
  border-radius: 999px;
  overflow: hidden;
  margin: 10px 18px;
  border: 1px solid rgba(255,255,255,.08);
}
.software-pull-panel #softwarePullBar {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, #2563eb, #3b82f6 55%, #60a5fa);
  transition: width .2s linear;
}
.software-pull-meta {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  opacity: .8;
  margin: 0 18px 8px;
}
.software-pull-msg {
  margin: 0 18px 12px !important;
  min-height: 2.5em;
}
.software-pull-foot {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  padding: 12px 18px;
  border-top: 1px solid var(--line);
  background: #252830;
}


.spull-os-group { margin: 0 0 14px; }
.spull-os-head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  opacity: .85;
  margin: 0 0 8px;
  letter-spacing: .02em;
}
.spull-os-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.4em;
  padding: 2px 8px;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .06em;
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.12);
}
.spull-os-win .spull-os-badge {
  background: rgba(59, 130, 246, .18);
  border-color: rgba(59, 130, 246, .35);
  color: #93c5fd;
}
.spull-os-linux .spull-os-badge {
  background: rgba(34, 197, 94, .16);
  border-color: rgba(34, 197, 94, .35);
  color: #86efac;
}
.spull-os-other .spull-os-badge {
  background: rgba(148, 163, 184, .16);
  border-color: rgba(148, 163, 184, .3);
  color: #cbd5e1;
}
.spull-row {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 7px 4px;
  border-bottom: 1px solid rgba(255,255,255,.06);
  cursor: pointer;
  font-size: 13px;
}
.spull-row input { margin-top: 3px; flex-shrink: 0; }
.spull-row-body { flex: 1; min-width: 0; }
.spull-row-top {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.spull-kind {
  font-size: 11px;
  opacity: .55;
  padding: 1px 6px;
  border-radius: 3px;
  background: rgba(255,255,255,.05);
}
.spull-row-meta { display: block; margin: 2px 0 0; }


.software-pull-os-sep {
  display: inline-block;
  width: 1px;
  height: 1.1em;
  margin: 0 4px 0 6px;
  background: rgba(255,255,255,.18);
  vertical-align: middle;
}
.software-pull-toolbar .spull-os-filter.is-on {
  background: rgba(255,255,255,.12);
  border-color: rgba(255,255,255,.28);
  color: #fff;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.06);
}
#softwarePullFilterWin.spull-os-filter.is-on {
  background: rgba(59, 130, 246, .22);
  border-color: rgba(59, 130, 246, .45);
  color: #93c5fd;
}
#softwarePullFilterLin.spull-os-filter.is-on {
  background: rgba(34, 197, 94, .18);
  border-color: rgba(34, 197, 94, .42);
  color: #86efac;
}


/* admin farm filter */
.farm-filter-wrap{display:inline-flex;align-items:center;gap:6px;margin-right:8px}
.farm-filter-label{font-size:12px;opacity:.75}
.farm-filter-select{max-width:220px}






/* 20001 toolbar: readable farm select; allow wrap; keep buttons spaced */
#farmPage .farm-filter-wrap { flex: 0 0 auto; }
#farmPage .farm-filter-select {
  min-width: 160px;
  max-width: 260px;
  height: 30px;
  padding: 0 8px;
  border: 1px solid #454850;
  border-radius: 6px;
  background: #23252b;
  color: var(--text, #e8eaef);
  font: 500 13px var(--font, inherit);
}
#farmPage .batch {
  flex-wrap: wrap;
  row-gap: 8px;
}
#farmPage .batch-select { min-width: 130px; max-width: 180px; }
#farmPage .batch .btn-dark[data-action="push-update"] { margin-left: 0; }


/* 20001: enlarge row fonts until they fill bg top/bottom */
#farmPage .rig-row {
  padding: 0 4px !important;
  min-height: 0 !important;
  gap: 3px !important;
  align-items: center;
}
#farmPage .rig-head {
  min-height: 0 !important;
  padding: 0 4px !important;
  line-height: 1 !important;
  font-size: 13px !important;
}
#farmPage .rig-row .rig-name {
  font-size: 13px !important;
  font-weight: 800 !important;
  line-height: 1 !important;
  padding: 0 !important;
  margin: 0 !important;
}
#farmPage .rig-row .hash-chip {
  line-height: 1 !important;
  align-items: center !important;
  gap: 4px !important;
}
#farmPage .rig-row .hash-val {
  font-size: 15px !important;
  line-height: 1 !important;
}
#farmPage .rig-row .hash-flight {
  font-size: 13px !important;
  line-height: 1 !important;
}
#farmPage .rig-row .rig-metric,
#farmPage .rig-row .rig-shares-cell,
#farmPage .rig-row .gpu-model,
#farmPage .rig-row .pwr-cell,
#farmPage .rig-row .fan-speed,
#farmPage .rig-row .fan-cell {
  font-size: 14px !important;
  line-height: 1 !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}
#farmPage .rig-row .rig-gpu-cell {
  line-height: 1 !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
}
#farmPage .rig-row .gpu-bars {
  height: auto !important;
  transform: none;
}
#farmPage .rig-row .gpu-bars .seg,
#farmPage .rig-row .gpu-bars span {
  width: 12px !important;
  height: 12px !important;
  min-height: 12px !important;
  border-radius: 0 !important;
  flex: 0 0 12px !important;
}
#farmPage .rig-remote svg { width: 18px; height: 18px; }
#farmPage .rig-row .ico-rocket,
#farmPage .rig-row .alert-dot,
#farmPage .rig-row .fan-dot {
  transform: scale(1.15);
}


/* 20001 workers column layout edit */
#farmPage .rig-head > span,
#farmPage .rig-row > * {
  position: relative;
}
/* superseded by even-fill block */
.rig-col-resizer {
  position: absolute;
  top: 0;
  right: -3px;
  width: 7px;
  height: 100%;
  cursor: col-resize;
  z-index: 5;
  user-select: none;
  touch-action: none;
  display: none;
}
#farmPage.is-layout-edit .rig-col-resizer { display: block; }
.rig-col-resizer:hover,
#farmPage .rig-col-resizer.is-dragging {
  background: rgba(100, 180, 255, 0.35);
}
.workers-layout-switch {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-right: 8px;
  color: #e8eaed;
  font-weight: 600;
  cursor: pointer;
  user-select: none;
}
.workers-layout-switch input {
  width: 16px;
  height: 16px;
  accent-color: #228be6;
  cursor: pointer;
}
#farmPage.is-layout-edit .workers-layout-switch span::after {
  content: "（拖列中）";
  color: #ffe066;
  font-weight: 500;
  font-size: 12px;
  margin-left: 2px;
}
#view-workers.rig-list,
#farmPage .rig-body {
  overflow-x: auto;
}


/* 20001: workers table header labels (visible) */
#farmPage #view-workers .rig-head {
  display: grid !important;
  min-height: 34px !important;
  height: auto !important;
  padding: 6px 4px !important;
  line-height: 1.2 !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  color: #adb5bd !important;
  background: #1c1e24 !important;
  border-bottom: 1px solid #2a2d34 !important;
  visibility: visible !important;
  opacity: 1 !important;
  overflow: visible !important;
}
#farmPage #view-workers .rig-head > [data-col-key] {
  visibility: visible !important;
  opacity: 1 !important;
  color: #adb5bd !important;
  font-size: 12px !important;
  line-height: 1.2 !important;
  min-height: 18px !important;
}


/* workers row vertical center */
#farmPage #view-workers .rig-row {
  align-items: center !important;
}
#farmPage #view-workers .rig-row > *,
#farmPage #view-workers .rig-row .rig-identity,
#farmPage #view-workers .rig-row .hash-chip,
#farmPage #view-workers .rig-row .hash-flight-box,
#farmPage #view-workers .rig-row .rig-gpu-cell,
#farmPage #view-workers .rig-row .rig-metric,
#farmPage #view-workers .rig-row .rig-shares-cell,
#farmPage #view-workers .rig-row .fan-cell,
#farmPage #view-workers .rig-row .pwr-cell {
  align-self: center !important;
  display: flex;
  align-items: center !important;
}
#farmPage #view-workers .rig-row .cb,
#farmPage #view-workers .rig-row .star,
#farmPage #view-workers .rig-row .rig-remote {
  align-items: center !important;
  padding-top: 0 !important;
}


/* 20001 layout: drag text to reorder columns */
#farmPage.is-layout-edit #view-workers .rig-row > [data-col-key],
#farmPage.is-layout-edit #view-workers .rig-head > [data-col-key] {
  cursor: grab;
  user-select: none;
}
#farmPage.is-layout-edit #view-workers .rig-row > [data-col-key="cb"],
#farmPage.is-layout-edit #view-workers .rig-row > [data-col-key="star"] {
  cursor: pointer;
}
#farmPage.is-col-reordering,
#farmPage.is-col-reordering * {
  cursor: grabbing !important;
}
#farmPage #view-workers .is-col-dragging {
  outline: 1px dashed rgba(100, 180, 255, 0.7);
  background: rgba(34, 139, 230, 0.12);
  z-index: 2;
}




/* 20001: column pipe resize always on */


/* 20001: fee column keep grid slot (0 width) — do NOT display:none or columns shift/overlap */
#farmPage #view-workers .rig-row > [data-col-key="fee"],
#farmPage #view-workers .rig-head > [data-col-key="fee"] {
  display: block !important;
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  overflow: hidden !important;
  opacity: 0;
  pointer-events: none;
}
#farmPage #view-workers .rig-row > [data-col-key="name"] {
  position: relative;
  z-index: 2;
  overflow: hidden;
}
#farmPage #view-workers .rig-row > [data-col-key="hash"] {
  position: relative;
  z-index: 1;
  min-width: 0;
  overflow: hidden;
}
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-head > [data-col-key] {
  order: unset !important;
}
#farmPage #view-workers .rig-name {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  vertical-align: top;
}


/* 20001: proportional full-width row; name 6ch; cell text centered */
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-row {
  width: 100% !important;
  min-width: max(100%, 1180px) !important;
  max-width: none !important;
  box-sizing: border-box !important;
  justify-content: stretch !important;
  justify-items: start !important;
  align-items: center !important;
  gap: 2px !important;
  grid-template-columns: var(--rig-cols,
    22px 22px minmax(48px, 72px)
    max-content max-content
    max-content max-content
    0px
    max-content max-content
    max-content 20px
    0px
    max-content 28px) !important;
}
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-head > [data-col-key] {
  justify-self: start !important;
  text-align: left !important;
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  min-width: 0 !important;
  overflow: hidden;
}
#farmPage #view-workers .rig-row > [data-col-key="name"],
#farmPage #view-workers .rig-head > [data-col-key="name"] {
  width: auto !important;
  min-width: 0 !important;
  max-width: none !important;
  flex: 1 1 auto !important;
  justify-self: start !important;
  overflow: visible !important;
}
#farmPage #view-workers .rig-name {
  display: inline-block;
  max-width: none !important;
  overflow: visible;
  text-overflow: clip;
  white-space: nowrap;
  text-align: left !important;
}
#farmPage #view-workers .hash-chip,
#farmPage #view-workers .rig-metric,
#farmPage #view-workers .rig-shares-cell {
  width: 100%;
  max-width: 100%;
  justify-content: flex-start;
  text-align: left;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
#view-workers.rig-list {
  overflow-x: auto;
}


/* 20001: shares as single 有效/拒绝 cell */
#farmPage #view-workers .rig-shares-pair {
  display: inline-flex !important;
  align-items: center;
  justify-content: flex-start;
  gap: 0;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
}
#farmPage #view-workers .rig-shares-pair .is-ok { color: #69db7c; }
#farmPage #view-workers .rig-shares-pair .is-rej { color: #ff8787; }
#farmPage #view-workers .rig-shares-pair .shares-sep {
  color: #868e96;
  margin: 0 1px;
  font-weight: 500;
}


/* 20001: GPU short model + bars tight */
#farmPage #view-workers .rig-gpu-cell {
  display: inline-flex !important;
  flex-direction: row !important;
  align-items: center !important;
  justify-content: flex-end !important;
  gap: 4px !important;
  min-width: 0;
  margin-left: auto !important;
  margin-right: 0 !important;
  width: max-content !important;
}
#farmPage #view-workers .gpu-model-short {
  flex: 0 0 auto !important;
  max-width: none !important;
  overflow: visible !important;
  text-overflow: clip !important;
  white-space: nowrap !important;
  font-variant-numeric: tabular-nums;
  text-transform: none !important;
}
#farmPage #view-workers .rig-gpu-cell .gpu-bars {
  flex: 0 0 auto;
}


/* 20001: memory / usage — align slash across rows */
#farmPage #view-workers .rig-mem-pair {
  display: inline-grid !important;
  grid-template-columns: 4.5ch auto auto;
  align-items: center;
  justify-content: start;
  column-gap: 0;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  width: max-content;
  max-width: 100%;
}
#farmPage #view-workers .rig-mem-pair .mem-total {
  text-align: right;
  justify-self: end;
  min-width: 4.5ch;
  color: #e8eaef;
}
#farmPage #view-workers .rig-mem-pair .mem-sep {
  color: #868e96;
  margin: 0 1px;
  justify-self: center;
}
#farmPage #view-workers .rig-mem-pair .mem-use {
  color: #e8eaef;
  text-align: left;
  min-width: 5.5ch;
  font-variant-numeric: tabular-nums;
}


/* 20001: cpu short code / usage — align slash across rows */
#farmPage #view-workers .rig-cpu-pair {
  display: inline-grid !important;
  grid-template-columns: 6ch auto auto;
  align-items: center;
  justify-content: start;
  column-gap: 0;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  width: max-content;
  max-width: 100%;
}
#farmPage #view-workers .rig-cpu-pair .cpu-code {
  color: #e8eaef;
  text-transform: lowercase;
  text-align: left;
  justify-self: start;
  width: 6ch;
  min-width: 6ch;
  max-width: 6ch;
  overflow: hidden;
  text-overflow: clip;
  white-space: nowrap;
}
#farmPage #view-workers .rig-cpu-pair .cpu-sep {
  color: #868e96;
  margin: 0 1px;
  justify-self: center;
}
#farmPage #view-workers .rig-cpu-pair .cpu-use {
  color: #e8eaef;
  text-align: left;
  min-width: 5.5ch;
  font-variant-numeric: tabular-nums;
}


/* 20001: separate hashrate and flight sheet cells */
#farmPage #view-workers .rig-flight-cell {
  display: flex !important;
  align-items: center;
  justify-content: flex-start;
  min-width: 0;
  overflow: hidden;
}
#farmPage #view-workers .rig-flight-cell .hash-flight {
  display: block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #adb5bd;
  font-size: 12px;
}
#farmPage #view-workers .rig-hash-cell .hash-chip {
  gap: 0;
}
#farmPage #view-workers .rig-hash-cell .hash-flight {
  display: inline !important;
  color: #adb5bd;
  font-size: 13px !important;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
#farmPage #view-workers .rig-hash-cell .hash-sep {
  color: #868e96;
  margin: 0 3px;
  font-weight: 500;
  flex: 0 0 auto;
}
#farmPage #view-workers .rig-hash-cell .hash-flight-pair {
  display: inline-flex !important;
  align-items: center;
  max-width: 100%;
  min-width: 0;
}


/* hide last-refresh time */
.rig-metric.refresh-cell,
.rh-m[data-col-key="ref"]{display:none!important;width:0!important;min-width:0!important;padding:0!important;margin:0!important;overflow:hidden;}


/* 20001: anti-clip metric columns */
/* metric max-content locks removed for manual widths */
/* hash/gpu max-content locks removed */
/* hash/gpu hug removed */
/* shares/cpu/mem max-content removed */


/* 20001: visible | column pipes */
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-head > [data-col-key] {
  position: relative !important;
  overflow: visible !important;
}
#farmPage #view-workers .rig-col-pipe {
  position: absolute;
  top: 0;
  right: -1px;
  bottom: 0;
  width: 10px;
  display: flex !important;
  align-items: center;
  justify-content: center;
  color: #6c757d;
  font-size: 13px;
  font-weight: 700;
  line-height: 1;
  cursor: col-resize;
  user-select: none;
  z-index: 6;
  background: transparent;
  text-shadow: 0 0 1px #111;
}
#farmPage #view-workers .rig-col-pipe:hover,
#farmPage #view-workers .rig-col-pipe.is-dragging {
  color: #74c0fc;
  background: rgba(116, 192, 252, 0.12);
}
#farmPage.is-col-resizing {
  cursor: col-resize !important;
  user-select: none !important;
}
#farmPage.is-col-resizing * {
  cursor: col-resize !important;
  user-select: none !important;
}


/* 20001: all workers cells left align */
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-row {
  justify-content: start !important;
  justify-items: start !important;
  text-align: left !important;
}
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-head > [data-col-key] {
  justify-self: start !important;
  justify-content: flex-start !important;
  align-items: center !important;
  text-align: left !important;
}
#farmPage #view-workers .rig-identity,
#farmPage #view-workers .rig-hash-cell,
#farmPage #view-workers .hash-flight-box,
#farmPage #view-workers .rig-shares-cell,
#farmPage #view-workers .rig-shares-pair,
#farmPage #view-workers .rig-cpu-pair,
#farmPage #view-workers .rig-mem-pair,
#farmPage #view-workers .rig-metric,
#farmPage #view-workers .rig-name,
#farmPage #view-workers .hash-chip {
  justify-content: flex-start !important;
  justify-items: start !important;
  text-align: left !important;
  margin-left: 0 !important;
  margin-right: auto !important;
}
#farmPage #view-workers .rig-name {
  text-align: left !important;
}
#farmPage #view-workers .rig-row > [data-col-key="name"],
#farmPage #view-workers .rig-head > [data-col-key="name"] {
  justify-content: flex-start !important;
  justify-self: start !important;
}



/* hide width inputs */
#farmPage #view-workers .rig-width-row,
#farmPage #view-workers .rw-input,
#farmPage #view-workers .rig-col-pipe {
  display: none !important;
}


/* 20001: force hide dead columns */
#farmPage #view-workers .rig-width-row,
#farmPage #view-workers .rw-input,
#farmPage #view-workers .rw-cell,
#farmPage #view-workers .rig-col-pipe,
#farmPage #view-workers .rig-metric.refresh-cell,
#farmPage #view-workers [data-col-key="ref"],
#farmPage #view-workers .rh-m[data-col-key="ref"] {
  display: none !important;
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  overflow: hidden !important;
  opacity: 0 !important;
  pointer-events: none !important;
  font-size: 0 !important;
}





/* 20001: metrics match version style */
#farmPage #view-workers .rig-row,
#farmPage #view-workers .rig-row * {
  font-weight: 400 !important;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row .rig-name.off,
#farmPage #view-workers .rig-row .hash-val,
#farmPage #view-workers .rig-row .hash-flight,
#farmPage #view-workers .rig-row .hash-sep,
#farmPage #view-workers .rig-row .hash-flight-box,
#farmPage #view-workers .rig-row .hash-flight-box.is-idle .hash-val,
#farmPage #view-workers .rig-row .hash-flight-box.is-idle .hash-flight,
#farmPage #view-workers .rig-row .gpu-model,
#farmPage #view-workers .rig-row .gpu-model-short,
#farmPage #view-workers .rig-row .gpu-model.is-manual-oc,
#farmPage #view-workers .rig-row .gpu-oc-flag,
#farmPage #view-workers .rig-row > [data-col-key="acc"],
#farmPage #view-workers .rig-row > [data-col-key="pwr"],
#farmPage #view-workers .rig-row > [data-col-key="cpu"],
#farmPage #view-workers .rig-row > [data-col-key="ram"],
#farmPage #view-workers .rig-row > [data-col-key="fan"],
#farmPage #view-workers .rig-row > [data-col-key="ver"],
#farmPage #view-workers .rig-row > [data-col-key="hash"],
#farmPage #view-workers .rig-row > [data-col-key="gpu"],
#farmPage #view-workers .rig-row > [data-col-key="name"],
#farmPage #view-workers .rig-row .rig-shares-cell,
#farmPage #view-workers .rig-row .rig-shares-pair,
#farmPage #view-workers .rig-row .rig-shares-pair .is-ok,
#farmPage #view-workers .rig-row .rig-shares-pair .is-rej,
#farmPage #view-workers .rig-row .rig-shares-pair .shares-sep,
#farmPage #view-workers .rig-row .pwr-cell,
#farmPage #view-workers .rig-row .rig-cpu-pair,
#farmPage #view-workers .rig-row .rig-cpu-pair .cpu-code,
#farmPage #view-workers .rig-row .rig-cpu-pair .cpu-sep,
#farmPage #view-workers .rig-row .rig-cpu-pair .cpu-use,
#farmPage #view-workers .rig-row .rig-mem-pair,
#farmPage #view-workers .rig-row .rig-mem-pair .mem-total,
#farmPage #view-workers .rig-row .rig-mem-pair .mem-sep,
#farmPage #view-workers .rig-row .rig-mem-pair .mem-use,
#farmPage #view-workers .rig-row .fan-speed,
#farmPage #view-workers .rig-row .fan-speed.has-val,
#farmPage #view-workers .rig-row .fan-cell,
#farmPage #view-workers .rig-row .fan-cell.is-on,
#farmPage #view-workers .rig-row .ver-cell,
#farmPage #view-workers .rig-row .rig-metric,
#farmPage #view-workers .rig-row .star,
#farmPage #view-workers .rig-row .star.on {
  color: #adb5bd !important;
  font-weight: 400 !important;
}
#farmPage #view-workers .rig-row .rig-name:hover {
  color: #ced4da !important;
}
/* keep remote / status dots readable but not loud */
#farmPage #view-workers .rig-row .rig-remote {
  color: #adb5bd !important;
}


/* 20001: unify font-size to version */
#farmPage #view-workers .rig-row,
#farmPage #view-workers .rig-row *,
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row .hash-val,
#farmPage #view-workers .rig-row .hash-flight,
#farmPage #view-workers .rig-row .hash-sep,
#farmPage #view-workers .rig-row .gpu-model,
#farmPage #view-workers .rig-row .gpu-model-short,
#farmPage #view-workers .rig-row .rig-metric,
#farmPage #view-workers .rig-row .rig-shares-cell,
#farmPage #view-workers .rig-row .rig-shares-pair,
#farmPage #view-workers .rig-row .pwr-cell,
#farmPage #view-workers .rig-row .fan-speed,
#farmPage #view-workers .rig-row .fan-cell,
#farmPage #view-workers .rig-row .ver-cell,
#farmPage #view-workers .rig-row .rig-cpu-pair,
#farmPage #view-workers .rig-row .rig-mem-pair,
#farmPage #view-workers .rig-row .cpu-code,
#farmPage #view-workers .rig-row .cpu-use,
#farmPage #view-workers .rig-row .mem-total,
#farmPage #view-workers .rig-row .mem-use,
#farmPage #view-workers .rig-row .hash-chip,
#farmPage #view-workers .rig-row .hash-flight-box {
  font-size: 13px !important;
  line-height: 1.2 !important;
}


/* 20001: workers vertical center */
#farmPage #view-workers .rig-row {
  align-items: center !important;
  min-height: 34px !important;
}
#farmPage #view-workers .rig-row > [data-col-key] {
  align-self: center !important;
  display: flex !important;
  align-items: center !important;
}
#farmPage #view-workers .rig-row .rig-identity,
#farmPage #view-workers .rig-row .rig-hash-cell,
#farmPage #view-workers .rig-row .hash-flight-box,
#farmPage #view-workers .rig-row .rig-gpu-cell,
#farmPage #view-workers .rig-row .rig-shares-pair,
#farmPage #view-workers .rig-row .rig-cpu-pair,
#farmPage #view-workers .rig-row .rig-mem-pair,
#farmPage #view-workers .rig-row .rig-metric,
#farmPage #view-workers .rig-row .rig-remote {
  display: flex !important;
  align-items: center !important;
  align-self: center !important;
  line-height: 1.2 !important;
}
#farmPage #view-workers .rig-row .cb,
#farmPage #view-workers .rig-row .star {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  height: 100%;
}




/* 20001: machine name bold */
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .rig-row .rig-name.off {
  font-weight: 800 !important;
  font-size: 13px !important;
  letter-spacing: 0.02em;
  color: #e8eaef !important;
  -webkit-text-stroke: 0.2px currentColor;
}
#farmPage #view-workers .rig-row .rig-name.off {
  color: #868e96 !important;
}


/* 20001: name full show */
#farmPage #view-workers .rig-row > [data-col-key="name"] {
  overflow: hidden !important;
  min-width: 0 !important;
  max-width: none !important;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name {
  max-width: 100% !important;
  width: auto !important;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 13px !important;
  font-weight: 800 !important;
}


/* 20001: proportional shrink fit viewport */
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-row {
  width: 100% !important;
  min-width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
}
#view-workers.rig-list {
  overflow-x: hidden !important;
}
#farmPage #view-workers .rig-body {
  overflow-x: hidden !important;
  width: 100% !important;
  max-width: 100% !important;
}


/* 20001: tight row height around name */
#farmPage #view-workers .rig-row {
  min-height: 0 !important;
  height: auto !important;
  padding-top: 1px !important;
  padding-bottom: 1px !important;
  align-items: center !important;
}
#farmPage #view-workers .rig-row > [data-col-key] {
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  line-height: 1.15 !important;
  min-height: 0 !important;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name {
  font-size: 13px !important;
  line-height: 1.15 !important;
  padding: 0 !important;
  margin: 0 !important;
}
#farmPage #view-workers .rig-row .rig-identity,
#farmPage #view-workers .rig-row .hash-flight-box,
#farmPage #view-workers .rig-row .rig-hash-cell,
#farmPage #view-workers .rig-row .rig-gpu-cell,
#farmPage #view-workers .rig-row .rig-metric,
#farmPage #view-workers .rig-row .rig-shares-pair,
#farmPage #view-workers .rig-row .rig-cpu-pair,
#farmPage #view-workers .rig-row .rig-mem-pair,
#farmPage #view-workers .rig-row .cb,
#farmPage #view-workers .rig-row .star,
#farmPage #view-workers .rig-row .rig-remote {
  line-height: 1.15 !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  min-height: 0 !important;
}
#farmPage #view-workers .rig-row .gpu-bars span {
  width: 8px !important;
  flex-basis: 8px !important;
}
#farmPage .rig-row {
  min-height: 0 !important;
}


/* hide farm filter toolbar */
#farmFilterWrap,
.farm-filter-wrap {
  display: none !important;
}


/* 20001: name no ellipsis clip */
#farmPage #view-workers .rig-row > [data-col-key="name"] {
  overflow: visible !important;
  min-width: 5.5em !important;
}
#farmPage #view-workers .rig-row .rig-identity {
  overflow: visible !important;
  min-width: 0;
  width: 100%;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .rig-row .rig-name.off {
  max-width: none !important;
  width: auto !important;
  overflow: visible !important;
  text-overflow: clip !important;
  white-space: nowrap !important;
  line-height: 1.35 !important;
  padding-top: 1px !important;
  padding-bottom: 1px !important;
}


/* 20001: machine name size smaller */
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .rig-row .rig-name.off,
#farmPage .rig-row .rig-name {
  font-size: 13px !important;
  font-weight: 700 !important;
  line-height: 1.25 !important;
}


/* 20001: hashrate blue */
#farmPage #view-workers .rig-row .hash-val,
#farmPage #view-workers .hash-flight-box .hash-val,
#farmPage #view-workers .rig-hash-cell .hash-val {
  color: #4dabf7 !important;
}


/* MF-BATCH-BTN-BRIGHT-2026-09-13: batch bar readable (was 30% — looked covered) */
#farmPage .batch .btn-dark,
#farmPage .batch .batch-af-btn,
#farmPage .batch .batch-select,
#farmPage .filterbar .btn-dark {
  color: rgba(232, 234, 239, 0.85) !important;
}
#farmPage .batch .btn-dark:hover:not(:disabled),
#farmPage .batch .batch-af-btn:hover:not(:disabled) {
  color: #ffffff !important;
}
#farmPage .batch .sel {
  color: rgba(232, 234, 239, 0.75) !important;
}
#farmPage .batch .btn-dark:disabled,
#farmPage .batch .batch-af-btn:disabled,
#farmPage .batch .batch-select:disabled {
  color: rgba(232, 234, 239, 0.45) !important;
}


/* 20001: restore green af + remote */
#farmPage #view-workers .rig-row .fan-cell.is-on,
#farmPage #view-workers .rig-row > [data-col-key="af"].fan-cell.is-on,
#farmPage #view-workers .rig-row .rig-metric.fan-cell.is-on {
  color: #69db7c !important;
}
#farmPage #view-workers .rig-row .fan-cell:not(.is-on) {
  color: #868e96 !important;
}
#farmPage #view-workers .rig-row .rig-remote {
  color: #868e96 !important;
  opacity: 1 !important;
}
#farmPage #view-workers .rig-row .rig-remote.is-on {
  color: #69db7c !important;
}
#farmPage #view-workers .rig-row .rig-remote.is-wait {
  color: #fcc419 !important;
}
#farmPage #view-workers .rig-row .rig-remote.is-err {
  color: #ff6b6b !important;
}
#farmPage #view-workers .rig-row .rig-remote:hover:not(:disabled) {
  color: #8ce99a !important;
}
#farmPage #view-workers .rig-row .rig-remote svg {
  fill: currentColor;
  color: inherit;
}






/* 20001: gpu bars fill row height */
#farmPage #view-workers .rig-row > [data-col-key="gpu"] {
  align-self: center !important;
  display: flex !important;
  align-items: center !important;
}
#farmPage #view-workers .rig-row .rig-gpu-cell {
  display: inline-flex !important;
  flex-direction: row !important;
  align-items: center !important;
  align-self: center !important;
  height: auto !important;
  gap: 4px !important;
}
#farmPage #view-workers .rig-row .gpu-model-short {
  align-self: center !important;
  line-height: 1.2 !important;
  font-size: 13px !important;
}
#farmPage #view-workers .rig-row .gpu-bars {
  display: inline-flex !important;
  align-items: center !important;
  align-self: center !important;
  height: 12px !important;
  min-height: 12px !important;
  gap: 2px !important;
}
#farmPage #view-workers .rig-row .gpu-bars span,
#farmPage #view-workers .rig-row .gpu-bars .seg {
  width: 12px !important;
  height: 12px !important;
  min-height: 12px !important;
  max-height: 12px !important;
  flex: 0 0 12px !important;
  border-radius: 0 !important;
  align-self: center !important;
  box-sizing: border-box !important;
}


/* 20001: temp alarm clickable */
#farmPage .tb-temp-alarm,
.tb-temp-alarm {
  cursor: pointer;
  border: 0;
  background: transparent;
  font: inherit;
  color: inherit;
  padding: 0;
}
#farmPage .tb-temp-alarm:hover {
  color: #74c0fc;
}
#farmPage #view-workers .gpu-bars span.crit {
  background: #ff6b6b !important;
}


/* 20001: rig activity list */
#farmPage .rd-activity {
  padding: 8px 0 16px;
}
#farmPage .rd-activity-head h2 {
  margin: 0 0 6px;
  font-size: 16px;
}
#farmPage .rd-activity-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 12px;
}
#farmPage .rd-act-item {
  border: 1px solid #2c3038;
  background: #1c1e24;
  border-radius: 8px;
  padding: 10px 12px;
}
#farmPage .rd-act-item.is-err {
  border-color: rgba(255, 107, 107, 0.45);
  background: rgba(255, 107, 107, 0.06);
}
#farmPage .rd-act-item.is-wait {
  border-color: rgba(252, 196, 25, 0.35);
}
#farmPage .rd-act-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
#farmPage .rd-act-title {
  font-weight: 600;
  color: #e8eaef;
  font-size: 13px;
}
#farmPage .rd-act-status {
  font-size: 12px;
  color: #adb5bd;
}
#farmPage .rd-act-status.is-ok { color: #69db7c; }
#farmPage .rd-act-status.is-err { color: #ff8787; }
#farmPage .rd-act-status.is-wait { color: #fcc419; }
#farmPage .rd-act-time {
  margin-top: 4px;
  font-size: 12px;
  color: #868e96;
  font-variant-numeric: tabular-nums;
}
#farmPage .rd-act-detail {
  margin-top: 6px;
  font-size: 12px;
  color: #adb5bd;
  line-height: 1.45;
  word-break: break-word;
  white-space: pre-wrap;
}
#farmPage .rd-activity-empty {
  padding: 18px 12px;
  color: #868e96;
  font-size: 13px;
  border: 1px dashed #2c3038;
  border-radius: 8px;
}
#farmPage .rd-activity-empty.is-err { color: #ff8787; }


/* 20001: activity title row */
#farmPage .rd-activity-title-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
#farmPage .rd-activity-title-row h2 {
  margin: 0;
}


/* 20001: topbar right spacing */
.topbar-right {
  gap: 10px !important;
}
.topbar-right .tb-ico {
  padding: 6px 8px;
}
.topbar-right .tb-metric.tb-temp-alarm {
  gap: 8px;
  padding: 4px 10px !important;
  margin: 0 2px;
}
.topbar-right .tb-refresh-wrap {
  margin: 0 2px;
}
.topbar-right .tb-ico.tb-clock {
  padding: 5px 12px;
  gap: 8px;
}
.topbar-right .tb-clock-txt {
  margin-left: 2px;
  letter-spacing: 0.02em;
}
.topbar-right .tb-user {
  margin-left: 4px;
  padding: 4px 8px;
}


/* 20001: gpu plane slot align */
#farmPage #view-workers .gpu-model-short {
  display: inline-flex !important;
  align-items: center;
  gap: 4px;
}
#farmPage #view-workers .gpu-oc-flag {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.15em;
  min-width: 1.15em;
  flex: 0 0 1.15em;
  line-height: 1;
  font-size: 12px;
}
#farmPage #view-workers .gpu-oc-flag.is-off {
  visibility: hidden;
}


/* 20001: software pull crumb — same as Linux/Windows */
#softwarePullCrumb.crumb {
  color: var(--muted);
  background: transparent;
}
#softwarePullCrumb.crumb.is-on {
  color: #fff !important;
  background: rgba(255,255,255,.08) !important;
}
#softwarePullCrumb.crumb.is-on:hover {
  color: #fff !important;
  background: rgba(255,255,255,.12) !important;
}
#softwarePullCrumb.crumb.muted {
  color: var(--muted) !important;
  background: transparent !important;
}
.software-pull-panel:not([hidden]) {
  display: block !important;
}


/* 20001: software pull as page */
#farmPage .software-pull-panel {
  margin: 0;
  padding: 0 0 24px;
}
#farmPage .software-pull-panel[hidden] {
  display: none !important;
}
#farmPage .software-pull-card {
  border: 0;
  border-radius: 0;
  background: transparent;
  overflow: visible;
}
#farmPage .software-pull-head {
  padding: 8px 0 12px;
  border-bottom: 1px solid var(--line);
  background: transparent;
}
#farmPage .software-pull-toolbar,
#farmPage .software-pull-list,
#farmPage .software-pull-panel .spull-bar-wrap,
#farmPage .software-pull-meta,
#farmPage .software-pull-msg,
#farmPage .software-pull-foot,
#farmPage .software-pull-source-row {
  margin-left: 0;
  margin-right: 0;
  padding-left: 0;
  padding-right: 0;
}
#farmPage .software-pull-list {
  margin-top: 12px;
  max-height: none;
  min-height: 280px;
}
#farmPage .software-pull-foot {
  display: flex;
  gap: 8px;
  padding-top: 12px;
}


/* 20001: software pull compact table */
#farmPage #softwarePullList.software-pull-list {
  margin: 12px 0 0;
  padding: 0;
  border: 0;
  background: transparent;
  max-height: none;
  overflow: visible;
}
#farmPage .spull-table-panel {
  overflow: auto;
  max-height: min(62vh, 560px);
}
#farmPage .spull-table {
  min-width: 0;
  width: 100%;
}
#farmPage .spull-table th,
#farmPage .spull-table td {
  white-space: nowrap;
}
#farmPage .spull-td-name {
  max-width: 0;
  width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
}
#farmPage .spull-td-name b {
  font-weight: 600;
  color: var(--text);
}
#farmPage .spull-td-check {
  width: 40px;
  text-align: center;
}
#farmPage .spull-row {
  cursor: pointer;
}
#farmPage .spull-row:hover td {
  background: rgba(255,255,255,.03);
}
#farmPage .spull-row.is-on td {
  background: rgba(255,255,255,.06);
}


/* 20001: miner warehouse compact fullwidth */
#farmPage .miner-wh-layout.miner-wh-noside {
  grid-template-columns: minmax(0, 1fr) !important;
}
#farmPage .miner-wh-layout.miner-wh-noside > .miner-wh-main {
  grid-column: 1 / -1;
  min-width: 0;
  width: 100%;
}
#farmPage .miner-wh-table-panel {
  width: 100%;
  overflow: auto;
}
#farmPage .miner-wh-table {
  width: 100%;
  table-layout: fixed;
}
#farmPage .miner-wh-td-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
#farmPage .miner-wh-td-name b {
  font-weight: 600;
  color: var(--text);
}
#farmPage .miner-wh-row:hover td {
  background: rgba(255,255,255,.03);
}
#farmPage .miner-wh-row.is-on td,
#farmPage .miner-wh-row.is-selected td {
  background: rgba(255,255,255,.06);
}
/* upload side when open: overlay/second column */
#farmPage .miner-wh-layout.miner-wh-noside:has(#minerUploadPanel:not([hidden])) {
  grid-template-columns: minmax(0, 1fr) minmax(280px, 380px) !important;
}


/* 20001: software cell grid */
.sw-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
  width: 100%;
}
.sw-grid-empty {
  grid-column: 1 / -1;
  padding: 18px 12px;
  color: #868e96;
  font-size: 13px;
  border: 1px dashed #2c3038;
  border-radius: 8px;
}
.sw-cell {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 6px;
  min-height: 72px;
  padding: 12px 14px;
  border: 1px solid #2c3038;
  border-radius: 8px;
  background: #1c1e24;
  cursor: pointer;
  user-select: none;
  box-sizing: border-box;
}
.sw-cell:hover {
  border-color: #3a3f48;
  background: #22252c;
}
.sw-cell.is-on,
.sw-cell.is-selected {
  border-color: rgba(255,255,255,.22);
  background: rgba(255,255,255,.07);
}
.sw-cell-name {
  display: block;
  color: #e8eaef;
  font-weight: 650;
  font-size: 13px;
  line-height: 1.35;
  word-break: break-all;
}
.sw-cell-tag {
  font-size: 11px;
  color: #868e96;
}
.sw-cell-actions {
  display: flex;
  gap: 6px;
  margin-top: 2px;
}
.sw-cell-btn {
  height: 26px !important;
  padding: 0 8px !important;
  font-size: 12px !important;
}
#farmPage #softwarePullList.software-pull-list {
  margin: 12px 0 0;
  padding: 0;
  border: 0;
  background: transparent;
  max-height: none;
  overflow: visible;
}
#farmPage .miner-wh-grid-wrap {
  width: 100%;
  margin-top: 4px;
}


/* 20001: flight template cards */
#farmPage .fl-card-grid {
  margin: 0 0 8px;
}
#farmPage .sw-cell.sw-cell-row {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  min-height: 48px;
  height: auto;
  padding: 8px 10px 8px 12px;
}
#farmPage .sw-cell-main {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
  cursor: pointer;
}
#farmPage .sw-cell.sw-cell-row .sw-cell-name {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 13px;
  line-height: 1.25;
  word-break: normal;
}
#farmPage .sw-cell.sw-cell-row .sw-cell-tag {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 11px;
  color: #868e96;
}
#farmPage .sw-cell.sw-cell-row .sw-cell-btn {
  flex: 0 0 auto;
  height: 28px !important;
  padding: 0 10px !important;
  font-size: 12px !important;
}
#farmPage .sw-grid {
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 8px;
}
#farmPage .fl-card.is-on,
#farmPage .fl-card.is-selected {
  border-color: rgba(255,255,255,.22);
  background: rgba(255,255,255,.07);
}


/* 20001: miner family card — one software one card */
#farmPage .sw-family-card {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  gap: 8px;
  min-height: 72px;
  height: auto;
  padding: 12px;
  cursor: default;
}
#farmPage .sw-family-title {
  font-weight: 700;
  font-size: 13px;
  color: #e8eaef;
  line-height: 1.3;
  word-break: break-word;
}
#farmPage .sw-family-vers {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
#farmPage .sw-ver-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  min-height: 32px;
  padding: 4px 6px 4px 8px;
  border-radius: 6px;
  background: rgba(0,0,0,.18);
}
#farmPage .sw-ver-name {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 12px;
  color: #ced4da;
  cursor: pointer;
}
#farmPage .sw-ver-name:hover {
  color: #fff;
}

#farmPage .sw-ver-size {
  flex: 0 0 auto;
  min-width: 2.6em;
  text-align: right;
  font-variant-numeric: tabular-nums;
  color: var(--muted, #8b9bb4);
  font-size: 12px;
  margin-right: 6px;
}

#farmPage .sw-family-card.is-on,
#farmPage .sw-family-card.is-selected {
  border-color: rgba(255,255,255,.22);
  background: rgba(255,255,255,.07);
}

#farmPage .sw-family-more {
  font-size: 11px;
  color: #868e96;
}

#farmPage .sw-family-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
}
#farmPage .sw-family-head .sw-family-title {
  flex: 1 1 auto;
  min-width: 0;
}
#farmPage .sw-family-upd.btn-primary,
#farmPage .sw-family-upd {
  flex: 0 0 auto;
  padding: 4px 12px;
  font-size: 12px;
  line-height: 1.3;
  height: auto;
  min-height: 28px;
  min-width: 0;
  border-radius: 6px;
  color: #fff;
  background: #3b82f6;
  border: 1px solid #3b82f6;
  box-shadow: none;
}
#farmPage .sw-family-upd:hover:not(:disabled) {
  background: #2563eb;
  border-color: #2563eb;
  color: #fff;
}
#farmPage .sw-family-upd:disabled {
  opacity: .55;
  cursor: not-allowed;
}
#farmPage .sw-family-card {
  position: relative;
  padding-bottom: 14px;
  overflow: hidden;
}
#farmPage .sw-family-progress {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 10px;
  background: rgba(255,255,255,.08);
  display: flex;
  align-items: center;
}
#farmPage .sw-family-progress[hidden] {
  display: none !important;
}
#farmPage .sw-family-progress-fill {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, #3b82f6, #60a5fa);
  transition: width .2s ease;
}
#farmPage .sw-family-progress-txt {
  position: absolute;
  left: 0;
  right: 0;
  text-align: center;
  font-size: 9px;
  line-height: 10px;
  color: #e8eaef;
  pointer-events: none;
}

#farmPage .miner-wh-grid.sw-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  grid-auto-rows: minmax(min-content, auto);
  gap: 10px;
  align-items: stretch;
}
@media (max-width: 1200px) {
  #farmPage .miner-wh-grid.sw-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media (max-width: 640px) {
  #farmPage .miner-wh-grid.sw-grid {
    grid-template-columns: 1fr;
  }
}
#farmPage .sw-family-empty {
  border-style: dashed;
  opacity: 0.85;
  cursor: pointer;
}
#farmPage .sw-family-empty:hover {
  border-color: rgba(59,130,246,.45);
  background: rgba(59,130,246,.06);
}
#farmPage .sw-family-empty-title {
  color: #868e96;
  font-weight: 600;
}
#farmPage .sw-ver-row-empty {
  background: transparent;
  border: 1px dashed #2c3038;
}
#farmPage .sw-ver-row-empty .sw-ver-name {
  color: #6c757d;
  cursor: default;
}

#farmPage .fl-sheet-grid.sw-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 10px;
  width: 100%;
  margin-top: 8px;
}
@media (max-width: 1200px) {
  #farmPage .fl-sheet-grid.sw-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  #farmPage .fl-sheet-grid.sw-grid { grid-template-columns: 1fr; }
}
#farmPage .fl-sheet-card {
  display: flex; flex-direction: column; gap: 10px;
  min-height: 140px; padding: 12px;
  border: 1px solid #2c3038; border-radius: 8px; background: #1c1e24;
}
#farmPage .fl-sheet-head { display: flex; justify-content: space-between; gap: 8px; align-items: flex-start; }
#farmPage .fl-sheet-title { font-weight: 700; font-size: 14px; color: #e8eaef; }
#farmPage .fl-sheet-body { display: flex; flex-direction: column; gap: 6px; }
#farmPage .fl-sheet-row { display: flex; gap: 8px; font-size: 12px; }
#farmPage .fl-sheet-k { flex: 0 0 42px; color: #868e96; }
#farmPage .fl-sheet-v { flex: 1; color: #ced4da; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#farmPage .fl-sheet-badge { font-size: 11px; color: #69db7c; white-space: nowrap; }
#farmPage .fl-sheet-card.is-active-preset { border-color: rgba(105, 219, 124, 0.35); }
#farmPage .fl-sheet-empty { border-style: dashed; opacity: .85; }
#farmPage .fl-sheet-empty-title { color: #868e96; font-weight: 600; }
#farmPage .fl-sheet-row-empty { padding: 8px; border: 1px dashed #2c3038; border-radius: 6px; color: #6c757d; }


/* —— 矿机行点击下拉详情（类 Hive 展开） —— */
.rig-block {
  display: block;
  border-bottom: 1px solid #1a1c20;
}

/* 相邻机器底色区分（斑马纹），展开面板也跟着 */
.rig-block:nth-child(odd) > .rig-row {
  background: #23252b;
}
.rig-block:nth-child(even) > .rig-row {
  background: #2a2d35;
}
.rig-block:nth-child(odd) > .rig-row:hover {
  background: #2a2d34;
}
.rig-block:nth-child(even) > .rig-row:hover {
  background: #32363f;
}
.rig-block:nth-child(odd) > .rig-drop {
  background: #1a1d24;
  border-top-color: #2a3038;
}
.rig-block:nth-child(even) > .rig-drop {
  background: #22262e;
  border-top-color: #343b46;
}
.rig-block {
  border-bottom: 1px solid #14161a;
}
.rig-block + .rig-block {
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.035);
}
/* 展开时左侧色条保持，底色仍用斑马 */
.rig-block.is-expanded:nth-child(odd) > .rig-row {
  background: #2a2f38;
}
.rig-block.is-expanded:nth-child(even) > .rig-row {
  background: #323844;
}

.rig-block > .rig-row {
  border-bottom: none;
}
.rig-block.is-expanded > .rig-row {
  background: #2a2f38;
  box-shadow: none;
}
.rig-drop {
  display: flex;
  flex-direction: column;
  background: #1c1f26;
  border-top: 1px solid #2c313a;
  padding: 0 8px 10px;
}
.rig-drop.is-anim {
  animation: rigDropIn 0.16s ease-out;
}
@keyframes rigDropIn {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}
.rig-drop-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  align-items: center;
  margin: 0 -8px 10px;
  padding: 6px 12px;
  background: linear-gradient(90deg, #1c4d7a 0%, #163a5c 55%, #13283f 100%);
  color: #d0ebff;
  font-size: 12px;
}
.rig-drop-st {
  font-weight: 700;
  padding: 1px 8px;
  border-radius: 3px;
  background: rgba(0,0,0,0.25);
}
.rig-drop-st.on { color: #8ce99a; }
.rig-drop-st.idle { color: #ffd43b; }
.rig-drop-st.off { color: #ffa8a8; }
.rig-drop-os { opacity: 0.75; }
.rig-drop-main {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  justify-content: space-between;
}
.rig-drop-left {
  flex: 0 1 320px;
  min-width: 200px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding-top: 4px;
}
.rig-drop-line {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  align-items: baseline;
  color: #ced4da;
  font-size: 13px;
}
.rig-drop-line .hash { color: #69db7c; font-size: 15px; }
.rig-drop-miner { color: #adb5bd; font-size: 12px; }
.rig-drop-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.rig-drop-actions .btn { font-size: 12px; padding: 4px 10px; }
.rig-drop-events {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-content: flex-start;
  justify-content: flex-start;
  gap: 4px 28px;
  margin-top: 8px;
  padding: 0 2px;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  /* 两行：先铺满从左到右，再换第二行 */
  max-height: calc(1.35em * 2 + 4px);
  overflow: hidden;
}
.rig-drop-ev {
  display: inline-flex;
  flex: 0 0 auto;
  gap: 6px;
  align-items: baseline;
  font-size: 11px;
  line-height: 1.35;
  color: #adb5bd;
  white-space: nowrap;
}
.rig-drop-ev .ev-t {
  flex: 0 0 auto;
  color: #868e96;
  font-variant-numeric: tabular-nums;
}
.rig-drop-ev .ev-txt { color: #ced4da; }
.rig-drop-ev.is-empty { color: #6c757d; opacity: 0.85; }
.rig-drop-ev.is-click {
  cursor: pointer;
  text-decoration: underline;
  text-decoration-color: rgba(212, 137, 137, 0.45);
  text-underline-offset: 2px;
}
.rig-drop-ev.is-click:hover { color: #ffc9c9; }
.rig-drop-ev.is-click:hover .ev-txt { color: #ffc9c9; }


.rig-drop-right { flex: 1 1 auto; min-width: 0; overflow-x: auto; overflow-y: hidden; }
.rig-drop-gpus {
  display: flex;
  gap: 8px;
  align-items: flex-end;
  min-height: 0;
  padding: 4px 0;
}
.rig-drop-gpus.empty { color: #868e96; font-size: 12px; align-items: center; }
.rig-drop-gpu {
  flex: 0 0 auto;
  width: 52px;
  text-align: center;
}
.rig-drop-gbar {
  width: 28px;
  height: 28px;
  background: #e03131;
  border-radius: 2px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  margin: 0 auto 4px;
  box-sizing: border-box;
}
.rig-drop-gpu.is-ok .rig-drop-gbar { background: #e03131; }
.rig-drop-gpu.is-hot .rig-drop-gbar { background: #fa5252; }
.rig-drop-gpu.is-miss .rig-drop-gbar { background: #495057; }
.rig-drop-gtemp {
  color: #f1f3f5; /* 灰白温度 */
  font-size: 11px;
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.02em;
  text-shadow: 0 1px 1px rgba(0,0,0,0.35);
  user-select: none;
}
.rig-drop-ghash {
  font-size: 11px;
  color: #e9ecef;
  white-space: nowrap;
  line-height: 1.2;
}
.rig-drop-gidx {
  font-size: 10px;
  color: #868e96;
}
.rig-row { cursor: pointer; }
.rig-row .cb,
.rig-row .star,
.rig-row .rig-remote,
.rig-row a.rig-name { cursor: pointer; }

/* 展开行复用详情页显卡磁贴 */
.rig-drop-right .rd-gpu-tiles {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: flex-start;
  justify-content: flex-end;
}
.rig-drop-right .rd-gpu-tile {
  min-width: 52px;
}


.miner-log-modal {
  position: fixed;
  inset: 0;
  z-index: 10050;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(0, 0, 0, 0.62);
  box-sizing: border-box;
}
.miner-log-modal .box {
  width: min(920px, 96vw);
  max-height: min(80vh, 820px);
  display: flex;
  flex-direction: column;
  background: #1e2128;
  border: 1px solid #3a3f4a;
  border-radius: 10px;
  box-shadow: 0 16px 48px rgba(0,0,0,.45);
  overflow: hidden;
}
.miner-log-modal .box h3 {
  margin: 0;
  padding: 14px 16px;
  font-size: 14px;
  font-weight: 600;
  color: #e9ecef;
  border-bottom: 1px solid #2e333c;
  background: #23262e;
}
.miner-log-modal #minerLogBody,
.miner-log-modal pre {
  margin: 0;
  padding: 12px 16px;
  flex: 1 1 auto;
  overflow: auto;
  min-height: 240px;
  max-height: calc(80vh - 110px);
  background: #14161b;
  color: #c5cad3;
  font-size: 12px;
  line-height: 1.45;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  white-space: pre-wrap;
  word-break: break-word;
}
.miner-log-modal .foot {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  padding: 10px 16px;
  border-top: 1px solid #2e333c;
  background: #23262e;
}

.miner-log-live {
  margin-right: auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: #adb5bd;
  font-size: 12px;
  cursor: pointer;
  user-select: none;
}
.miner-log-live input {
  accent-color: #69db7c;
  width: 14px;
  height: 14px;
  cursor: pointer;
}
.miner-log-live:has(input:checked) { color: #8ce99a; }
.miner-log-modal .foot {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
}

.miner-log-stamp {
  margin-left: 8px;
  color: #868e96;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}


.rig-drop-logs {
  margin-top: 10px;
  width: 100%;
  border-top: 1px solid #2c3038;
  padding-top: 8px;
}
.rig-drop-logs[hidden] { display: none !important; }
.rig-drop-logs-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 12px;
  margin-bottom: 6px;
  color: #adb5bd;
  font-size: 12px;
}
.rig-drop-logs-title { margin-right: auto; color: #ced4da; }
.rig-drop-logs-body {
  margin: 0;
  max-height: 280px;
  overflow: auto;
  padding: 10px 12px;
  background: #14161a;
  color: #ced4da;
  border: 1px solid #2c3038;
  border-radius: 6px;
  font-size: 12px;
  line-height: 1.45;
  white-space: pre-wrap;
  word-break: break-all;
}


.install-box.install-box-masked {
  user-select: none;
  -webkit-user-select: none;
  cursor: default;
  filter: none;
  letter-spacing: 0.02em;
}

.crumb.tpl-save-btn {
  border: 1px solid #3d8bfd55;
  background: #1a2740;
  color: #cfe3ff;
  padding: 4px 10px;
  border-radius: 8px;
}
.crumb.tpl-save-btn:hover { border-color: #3d8bfd; color: #fff; }
.crumb.tpl-ver {
  color: #8b9bb4;
  font-size: 12px;
  pointer-events: none;
}

/* 一键存入模板库：默认隐藏，仅源码站 API can_publish 后显示 */
#saveTplBtn[hidden], #tplVerLabel[hidden], #tplSaveSep[hidden] { display: none !important; }


button.crumb.tpl-ver {
  pointer-events: auto;
  cursor: pointer;
  color: #9ec1ff;
  text-decoration: underline;
  text-underline-offset: 3px;
  background: transparent;
  border: none;
  padding: 4px 6px;
}
button.crumb.tpl-ver:hover { color: #fff; }
.tpl-ver-modal { width: min(560px, 94vw); }
.tpl-ver-meta {
  color: #8b9bb4;
  font-size: 13px;
  margin-bottom: 12px;
  word-break: break-all;
}
.tpl-ver-list { display: flex; flex-direction: column; gap: 8px; max-height: 50vh; overflow: auto; }
.tpl-ver-item {
  display: grid;
  grid-template-columns: 72px 1fr;
  gap: 4px 12px;
  padding: 10px 12px;
  border: 1px solid #2a3344;
  border-radius: 10px;
  background: #141a24;
}
.tpl-ver-item.is-current { border-color: #3d8bfd88; }
.tpl-ver-item .ver { font-weight: 650; color: #e8eef8; }
.tpl-ver-item .meta { color: #8b9bb4; font-size: 12px; line-height: 1.45; }
.tpl-ver-item .links { grid-column: 1 / -1; font-size: 12px; }
.tpl-ver-item .links a { color: #9ec1ff; margin-right: 12px; }

.crumb.tpl-pull-btn {
  border: 1px solid #3d8bfd55;
  background: #1a2740;
  color: #cfe3ff;
  padding: 4px 10px;
  border-radius: 8px;
}
.crumb.tpl-pull-btn:hover { border-color: #3d8bfd; color: #fff; }
#pullTplBtn[hidden] { display: none !important; }


/* 20002 batch bar: text brightness ~70% */
#toolbar .batch .sel,
#toolbar .batch .btn-dark,
#toolbar .batch .batch-af-btn,
#toolbar .batch .batch-select,
#toolbar .batch-select,
#batchBarLinux .btn-dark,
#toolbar .batch .btn-dark,
#batchBarLinux .btn-dark,
#toolbar .batch .batch-select,
#batchBarLinux .batch-select,
#toolbar .batch .btn-dark:disabled,
#batchBarLinux .btn-dark:disabled,



.tb-ver {
  font-size: 11px;
  font-weight: 500;
  color: var(--muted, #8b93a7);
  opacity: 0.9;
  letter-spacing: 0.02em;
  margin-left: 2px;
  margin-right: 2px;
  user-select: text;
  white-space: nowrap;
}
.tb-ver:empty { display: none; }


.tb-ver-btn {
  appearance: none;
  border: 0;
  background: transparent;
  padding: 2px 4px;
  margin: 0;
  cursor: pointer;
  border-radius: 6px;
  line-height: 1;
}
.tb-ver-btn:hover {
  background: var(--panel, #151922);
}
.tb-ver-btn:disabled {
  opacity: 0.55;
  cursor: wait;
}
.tb-ver-btn .tb-ver {
  font-size: 11px;
  font-weight: 500;
  color: var(--muted, #8b93a7);
  letter-spacing: 0.02em;
  pointer-events: none;
}
.tb-ver-btn:hover .tb-ver {
  color: var(--text, #e8ecf4);
}


.topbar-left .tb-ver-btn {
  appearance: none;
  border: 0;
  background: transparent;
  padding: 4px 8px;
  margin: 0;
  cursor: pointer;
  border-radius: 8px;
  line-height: 1.2;
}
.topbar-left .tb-ver-btn:hover {
  background: var(--panel, #151922);
}
.topbar-left .tb-ver-btn:disabled {
  opacity: 0.55;
  cursor: wait;
}
.topbar-left .tb-ver-btn .tb-ver {
  font-size: 12px;
  font-weight: 600;
  color: var(--muted, #8b93a7);
  letter-spacing: 0.02em;
  pointer-events: none;
}
.topbar-left .tb-ver-btn:hover .tb-ver {
  color: var(--text, #e8ecf4);
}
.topbar-left .tb-ver-btn.is-admin-upd {
  cursor: pointer;
}
.topbar-left .tb-ver-btn:not(.is-admin-upd) {
  cursor: default;
}
.topbar-left .tb-ver-btn:not(.is-admin-upd):hover {
  background: transparent;
}


.drv-url-form { margin-top: 8px; display: grid; gap: 10px; max-width: 720px; }
.drv-url-label { display: grid; gap: 6px; font-size: 13px; color: #c5cdd8; }
.drv-url-input { width: 100%; padding: 10px 12px; border-radius: 8px; border: 1px solid #2a3140; background: #12151c; color: #f0f2f5; }
.drv-url-row { display: grid; grid-template-columns: 160px 1fr; gap: 10px; }
.drv-url-row label { display: grid; gap: 6px; font-size: 13px; color: #c5cdd8; }
.drv-url-row input, .drv-url-row select { padding: 8px 10px; border-radius: 8px; border: 1px solid #2a3140; background: #12151c; color: #f0f2f5; }
.btn-mini { padding: 4px 10px; font-size: 12px; }
.drv-series.custom { background: rgba(255,212,59,.12); color: #ffe066; }

.drv-ops { display:flex; flex-wrap:wrap; gap:6px; }
.drv-url-row { grid-template-columns: 1fr 1fr; }

.drv-dual { display: grid; gap: 6px; max-width: 520px; }
.drv-dual-item { font-size: 12px; line-height: 1.45; color: #9aa4b2; padding: 6px 8px; border-radius: 8px; background: rgba(255,255,255,.03); border: 1px solid #243044; }
.drv-dual-item.is-on { color: #d7e0ea; border-color: #35507a; }
.drv-dual-item.is-off { opacity: .7; }
.drv-ops { display: flex; flex-wrap: wrap; gap: 6px; align-items: flex-start; }

.drv-local-yes { color: #69db7c; font-size: 13px; }
.drv-local-no { color: #868e96; font-size: 13px; }

.drv-local-size { font-variant-numeric: tabular-nums; color: #c5cdd8; font-size: 13px; }
.drv-progress {
  position: relative;
  width: 120px;
  height: 16px;
  margin-top: 6px;
  border-radius: 999px;
  background: #1b2230;
  border: 1px solid #2a3548;
  overflow: hidden;
}
.drv-progress > i {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, #3d8bfd, #69db7c);
  width: 0;
}
.drv-progress > span {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  color: #e7eef8;
  text-shadow: 0 1px 2px rgba(0,0,0,.55);
}


/* force-show workers header (override min-height:0 collapse) */
#farmPage #view-workers .rig-head {
  display: grid !important;
  min-height: 34px !important;
  padding: 6px 4px !important;
  color: #adb5bd !important;
  background: #1c1e24 !important;
  visibility: visible !important;
  opacity: 1 !important;
}


/* CPU/MEM slash column align (final override) */
#farmPage #view-workers .rig-row .rig-cpu-pair,
#farmPage #view-workers .rig-cpu-pair {
  display: inline-grid !important;
  grid-template-columns: 6ch auto auto !important;
  align-items: center !important;
  justify-content: start !important;
  gap: 0 !important;
  width: max-content !important;
  font-variant-numeric: tabular-nums !important;
}
#farmPage #view-workers .rig-row .rig-cpu-pair .cpu-code,
#farmPage #view-workers .rig-cpu-pair .cpu-code {
  display: block !important;
  box-sizing: border-box !important;
  width: 6ch !important;
  min-width: 6ch !important;
  max-width: 6ch !important;
  text-align: left !important;
  justify-self: start !important;
  overflow: hidden !important;
  text-overflow: clip !important;
  white-space: nowrap !important;
  text-transform: lowercase !important;
}
#farmPage #view-workers .rig-row .rig-cpu-pair .cpu-sep,
#farmPage #view-workers .rig-cpu-pair .cpu-sep {
  display: inline-block !important;
  margin: 0 1px !important;
}
#farmPage #view-workers .rig-row .rig-cpu-pair .cpu-use,
#farmPage #view-workers .rig-cpu-pair .cpu-use {
  display: inline-block !important;
  width: 4ch !important; /* 2 chars + % + 1 breathing room */
  min-width: 4ch !important;
  max-width: 4ch !important;
  overflow: hidden !important;
  text-overflow: clip !important;
  white-space: nowrap !important;
  text-align: left !important;
  font-variant-numeric: tabular-nums !important;
}

/* MEM slash align (final) */
#farmPage #view-workers .rig-row .rig-mem-pair,
#farmPage #view-workers .rig-mem-pair {
  display: inline-grid !important;
  grid-template-columns: 3ch auto auto !important;
  align-items: center !important;
  justify-content: start !important;
  gap: 0 !important;
  width: max-content !important;
  font-variant-numeric: tabular-nums !important;
}
#farmPage #view-workers .rig-row .rig-mem-pair .mem-total,
#farmPage #view-workers .rig-mem-pair .mem-total {
  display: block !important;
  box-sizing: border-box !important;
  width: 3ch !important;
  min-width: 3ch !important;
  max-width: 3ch !important;
  text-align: left !important;
  justify-self: start !important;
  overflow: hidden !important;
  text-overflow: clip !important;
  white-space: nowrap !important;
  color: #e8eaef !important;
}
#farmPage #view-workers .rig-row .rig-mem-pair .mem-sep,
#farmPage #view-workers .rig-mem-pair .mem-sep {
  display: inline-block !important;
  margin: 0 1px !important;
  color: #868e96 !important;
}
#farmPage #view-workers .rig-row .rig-mem-pair .mem-use,
#farmPage #view-workers .rig-mem-pair .mem-use {
  display: inline-block !important;
  width: 4ch !important;
  min-width: 4ch !important;
  max-width: 4ch !important;
  overflow: hidden !important;
  text-overflow: clip !important;
  white-space: nowrap !important;
  text-align: left !important;
  font-variant-numeric: tabular-nums !important;
  color: #e8eaef !important;
}

/* mining left bar force-off */
#farmPage #view-workers .rig-row,
#farmPage #view-workers .rig-row.is-mining,
#farmPage #view-workers .rig-row.is-active {
  box-shadow: none !important;
}

/* rocket only when OC template bound */
#farmPage #view-workers .gpu-oc-flag.is-off {
  display: none !important;
}

/* gpu miss hollow force */
#farmPage #view-workers .gpu-bars span.miss {
  background: transparent !important;
  border: 1.5px solid #ff6b6b !important;
  box-sizing: border-box !important;
}


/* OC rocket: green=hit target, grey=bound but miss */
.rig-gpu-cell .gpu-model .gpu-oc-flag,
#farmPage #view-workers .gpu-oc-flag {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}
.rig-gpu-cell .gpu-model .gpu-oc-flag .gpu-oc-svg,
#farmPage #view-workers .gpu-oc-flag .gpu-oc-svg {
  display: block;
}
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-hit,
#farmPage #view-workers .gpu-oc-flag.is-hit {
  color: #40c057 !important;
  filter: none !important;
  opacity: 1 !important;
}
#farmPage #view-workers .gpu-oc-flag.is-hit .gpu-oc-svg,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-hit .gpu-oc-svg {
  color: #40c057 !important;
  fill: #40c057 !important;
}
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss,
.rig-gpu-cell .gpu-model.is-oc-miss .gpu-oc-flag,
#farmPage #view-workers .gpu-oc-flag.is-miss,
#farmPage #view-workers .gpu-model.is-oc-miss .gpu-oc-flag {
  color: #868e96 !important;
  filter: grayscale(1) brightness(0.85) !important;
  opacity: 0.75 !important;
}
#farmPage #view-workers .gpu-oc-flag.is-miss .gpu-oc-svg,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss .gpu-oc-svg {
  fill: #868e96 !important;
  color: #868e96 !important;
}
.rig-row.is-stale-offline .gpu-oc-flag,
.billing-rig-row.is-stale-offline .gpu-oc-flag {
  color: #495057 !important;
}



/* Original 🚀 emoji: hit=彩色, miss=灰色(去色，图标还在) */
#farmPage #view-workers .gpu-oc-flag,
.rig-gpu-cell .gpu-model .gpu-oc-flag {
  display: inline-flex !important;
  visibility: visible !important;
  font-size: 12px !important;
  line-height: 1 !important;
}
#farmPage #view-workers .gpu-oc-flag.is-hit,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-hit {
  filter: none !important;
  opacity: 1 !important;
  color: inherit !important;
}
#farmPage #view-workers .gpu-oc-flag.is-miss,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss,
#farmPage #view-workers .gpu-model.is-oc-miss .gpu-oc-flag,
.rig-gpu-cell .gpu-model.is-oc-miss .gpu-oc-flag {
  filter: grayscale(1) brightness(0.9) !important;
  opacity: 0.85 !important;
  color: inherit !important;
}


/* 火箭更大 + 未达标红色（灰色看不清） */
#farmPage #view-workers .gpu-oc-flag,
.rig-gpu-cell .gpu-model .gpu-oc-flag {
  display: inline-flex !important;
  visibility: visible !important;
  align-items: center !important;
  justify-content: center !important;
  font-size: 16px !important;
  line-height: 1 !important;
  width: 1.25em !important;
  min-width: 1.25em !important;
  height: 1.25em !important;
  margin-right: 4px !important;
}
#farmPage #view-workers .gpu-oc-flag.is-hit,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-hit {
  filter: none !important;
  opacity: 1 !important;
}
#farmPage #view-workers .gpu-oc-flag.is-miss,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss,
#farmPage #view-workers .gpu-model.is-oc-miss .gpu-oc-flag,
.rig-gpu-cell .gpu-model.is-oc-miss .gpu-oc-flag {
  filter: grayscale(1) sepia(1) hue-rotate(-50deg) saturate(8) brightness(0.95) !important;
  opacity: 1 !important;
}


/* 未达标：整枚大红火箭；达标：原彩色 emoji，都大一点 */
#farmPage #view-workers .gpu-oc-flag,
.rig-gpu-cell .gpu-model .gpu-oc-flag {
  display: inline-flex !important;
  visibility: visible !important;
  align-items: center !important;
  justify-content: center !important;
  font-size: 18px !important;
  line-height: 1 !important;
  width: 20px !important;
  min-width: 20px !important;
  height: 20px !important;
  margin-right: 5px !important;
}
#farmPage #view-workers .gpu-oc-flag.is-hit,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-hit {
  filter: none !important;
  opacity: 1 !important;
  font-size: 18px !important;
}
#farmPage #view-workers .gpu-oc-flag.is-miss,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss,
#farmPage #view-workers .gpu-model.is-oc-miss .gpu-oc-flag,
.rig-gpu-cell .gpu-model.is-oc-miss .gpu-oc-flag {
  filter: none !important;
  opacity: 1 !important;
  color: #ff1a1a !important;
}
#farmPage #view-workers .gpu-oc-flag.is-miss .gpu-oc-svg,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss .gpu-oc-svg {
  display: block !important;
  width: 18px !important;
  height: 18px !important;
}
#farmPage #view-workers .gpu-oc-flag.is-miss .gpu-oc-svg path,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss .gpu-oc-svg path {
  fill: #ff1a1a !important;
}
#farmPage #view-workers .gpu-oc-flag.is-miss .gpu-oc-svg circle,
.rig-gpu-cell .gpu-model .gpu-oc-flag.is-miss .gpu-oc-svg circle {
  fill: #8b0000 !important;
}

/* flight-table-mode */
.flight-table-panel { overflow-x: auto; }
.flight-table {
  width: 100%;
  min-width: 0;
  border-collapse: collapse;
  table-layout: auto;
}
.flight-table thead th {
  background: #1c1e24; color: #9aa0a6; font-size: 11px; font-weight: 600;
  text-align: left; padding: 5px 4px; border-bottom: 1px solid #2a2d34; white-space: nowrap;
}
.flight-table tbody td {
  padding: 4px 4px; border-bottom: 1px solid #1f2228; vertical-align: middle; font-size: 12px; color: #e8eaed;
}
.flight-table tbody tr.flight-row:hover td { background: #2a2d34; }
.flight-table .fl-th-id, .flight-table .fl-td-id { width: 28px; padding-left: 2px; padding-right: 2px; color: #9aa0a6; }
.flight-table .fl-td-name { max-width: 120px; }
.flight-table .fl-td-name b { color: #fff; }
.flight-table .fl-td-coin { width: 48px; padding-left: 2px; padding-right: 2px; }
.flight-table .fl-td-coin b { color: #fff; font-weight: 700; }
.flight-table .fl-td-soft { color: #74c0fc; max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.flight-table .fl-td-algo { color: #69db7c; max-width: 90px; white-space: nowrap; }
.flight-table .fl-td-pool { max-width: 150px; }
.flight-table .fl-td-wallet { max-width: 150px; }
.flight-table .fl-td-os { width: 48px; padding-left: 2px; padding-right: 2px; white-space: nowrap; }
.flight-table .fl-td-used { width: 44px; padding-left: 2px; padding-right: 2px; white-space: nowrap; }
.flight-table .fl-cell-box {
  display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  padding: 2px 6px; border: 1px solid #3a3f48; border-radius: 4px; background: #1a1c21; color: #e8eaed;
}
.flight-table .fl-cell-box.mono { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 11px; }
.flight-table .fl-status { color: #868e96; font-weight: 600; }
.flight-table .fl-status.is-on { color: #69db7c; }
.flight-table .fl-td-ops { white-space: nowrap; width: auto; padding-right: 2px; }

.flight-table .fl-td-ops .btn { margin-right: 2px; padding: 2px 8px; }



/* flight-edit-table modal */
.flight-edit-table-wrap {
  width: 100%;
  overflow-x: auto;
  border: 1px solid #2a2d34;
  border-radius: 8px;
  background: #15171c;
}
.flight-edit-table {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
}
.flight-edit-table th,
.flight-edit-table td {
  border-bottom: 1px solid #1f2228;
  padding: 8px 10px;
  vertical-align: middle;
  text-align: left;
}
.flight-edit-table tr:last-child th,
.flight-edit-table tr:last-child td { border-bottom: 0; }
.flight-edit-table th {
  width: 110px;
  color: #9aa0a6;
  font-size: 12px;
  font-weight: 600;
  background: #1c1e24;
  white-space: nowrap;
}
.flight-edit-table td { background: #181a20; }
.flight-edit-table input,
.flight-edit-table select,
.flight-edit-table textarea {
  width: 100%;
  box-sizing: border-box;
  min-height: 32px;
  padding: 6px 8px;
  border: 1px solid #3a3f48;
  border-radius: 4px;
  background: #12141a;
  color: #e8eaed;
  font-size: 13px;
}
.flight-edit-table textarea {
  min-height: 96px;
  resize: vertical;
  font-family: ui-monospace, Menlo, Consolas, monospace;
  font-size: 12px;
}
.flight-edit-table .flight-edit-worker,
.flight-edit-table .flight-edit-wallet {
  display: grid;
  grid-template-columns: 1fr;
  gap: 8px;
}
.flight-edit-table .flight-edit-wallet {
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
}
@media (max-width: 720px) {
  .flight-edit-table .flight-edit-wallet { grid-template-columns: 1fr; }
  .flight-edit-table th { width: 88px; }
}
.flight-edit-cmd-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  margin-top: 8px;
}
.flight-edit-cmd-actions .hint { margin: 0; }
.flight-modal .modal-body > .hint {
  margin: 0 0 12px;
  padding: 10px 12px;
  background: #1c1e24;
  border: 1px solid #2a2d34;
  border-radius: 6px;
}


/* flight sheet DB pull bar */
.flight-pull-bar {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-bottom: 12px;
  padding: 10px 12px;
  border: 1px solid #2a2d34;
  border-radius: 8px;
  background: #15171c;
}
.flight-pull-bar > .hint { margin: 0; }
.flight-pull-actions {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.flight-pull-date {
  color: #9aa0a6;
  font-size: 12px;
  white-space: nowrap;
}


/* coin + hashrate split in workers hash cell */
#farmPage #view-workers .rig-row .hash-flight-box,
#farmPage #view-workers .rig-hash-cell .hash-flight-box {
  display: inline-flex !important;
  align-items: baseline;
  gap: 14px !important;
}
#farmPage #view-workers .rig-row .hash-coin,
#farmPage #view-workers .hash-flight-box .hash-coin,
#farmPage #view-workers .rig-hash-cell .hash-coin {
  color: #74c0fc !important;
  font-weight: 650;
  font-size: 13px !important;
  letter-spacing: 0.02em;
  white-space: nowrap;
  flex: 0 0 auto;
  margin-right: 0 !important;
}
#farmPage #view-workers .rig-row .hash-val,
#farmPage #view-workers .hash-flight-box .hash-val,
#farmPage #view-workers .rig-hash-cell .hash-val {
  margin-left: 0 !important;
}
#farmPage #view-workers .rig-row .hash-sep,
#farmPage #view-workers .rig-hash-cell .hash-sep {
  display: none !important;
}
#farmPage #view-workers .rig-row .hash-flight-box.is-idle .hash-coin {
  color: #868e96 !important;
}


/* coin | hash as two columns like 有效/拒绝 | 功耗 */
#farmPage #view-workers .rig-head .rh-coin,
#farmPage #view-workers .rig-head > [data-col-key="coin"] {
  font-weight: 600;
  color: #adb5bd !important;
}
#farmPage #view-workers .rig-row .rig-coin-cell,
#farmPage #view-workers .rig-coin-cell {
  display: flex !important;
  align-items: center;
  min-width: 0;
  width: 100%;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
#farmPage #view-workers .rig-coin-cell .coin-val {
  color: #74c0fc !important;
  font-weight: 650;
  font-size: 13px !important;
}
#farmPage #view-workers .rig-row .rig-hash-cell,
#farmPage #view-workers .rig-hash-cell {
  display: flex !important;
  align-items: center;
  min-width: 0;
  width: 100%;
  white-space: nowrap;
}
#farmPage #view-workers .rig-hash-cell .hash-val {
  color: #4dabf7 !important;
  font-weight: 650;
  font-size: 13px !important;
  font-variant-numeric: tabular-nums;
}
#farmPage #view-workers .rig-row .hash-sep,
#farmPage #view-workers .rig-hash-cell .hash-sep {
  display: none !important;
}


/* tighten name → coin gap */
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-row > [data-col-key="name"] {
  flex: 0 1 auto !important;
  max-width: 6.5em !important;
  min-width: 3.5em !important;
  width: auto !important;
  padding-right: 0 !important;
  margin-right: -3ch !important;
}
#farmPage #view-workers .rig-head > [data-col-key="coin"],
#farmPage #view-workers .rig-row > [data-col-key="coin"] {
  padding-left: 0 !important;
  margin-left: 0 !important;
  justify-self: start !important;
}
#farmPage #view-workers .rig-row .rig-identity {
  max-width: 100% !important;
  overflow: hidden !important;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name {
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}







/* GPU_COL_RIGHT_ALIGN_1789192501: defeat left-pin; whole cell to green-line (before 有效) */
#farmPage #view-workers .rig-head > [data-col-key="gpu"],
#farmPage #view-workers .rig-row > [data-col-key="gpu"] {
  display: flex !important;
  justify-content: flex-end !important;
  justify-self: stretch !important;
  align-items: center !important;
  text-align: right !important;
  width: 100% !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  padding-right: 2px !important;
}
#farmPage #view-workers .rig-row > [data-col-key="gpu"] > .rig-gpu-cell,
#farmPage #view-workers .rig-gpu-cell {
  display: inline-flex !important;
  flex-direction: row !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 4px !important;
  width: max-content !important;
  max-width: 100% !important;
  margin-left: auto !important;
  margin-right: 0 !important;
  overflow: visible !important;
}
#farmPage #view-workers .rig-gpu-cell .gpu-model,
#farmPage #view-workers .rig-gpu-cell .gpu-model-short {
  flex: 0 0 auto !important;
  min-width: 0 !important;
  max-width: none !important;
}


/* GPU_HEADER_CENTER_1789192598: 显卡表头居中 */
#farmPage #view-workers .rig-head > [data-col-key="gpu"],
#farmPage #view-workers .rig-head .rh-gpu {
  display: flex !important;
  justify-content: center !important;
  justify-self: stretch !important;
  align-items: center !important;
  text-align: center !important;
  width: 100% !important;
}


/* FLIGHT_COL_1789192783: after 算力, show bound flight name */
#farmPage #view-workers .rig-head > [data-col-key="flight"],
#farmPage #view-workers .rig-head .rh-flight {
  display: flex !important;
  justify-content: flex-start !important;
  text-align: left !important;
  font-weight: 600;
  color: #adb5bd !important;
  visibility: visible !important;
  opacity: 1 !important;
  width: 100% !important;
  max-width: none !important;
  overflow: visible !important;
}
#farmPage #view-workers .rig-row > [data-col-key="flight"],
#farmPage #view-workers .rig-flight-cell {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  min-width: 0 !important;
  width: 100% !important;
  max-width: none !important;
  overflow: hidden !important;
  visibility: visible !important;
  opacity: 1 !important;
}
#farmPage #view-workers .rig-flight-cell .flight-name {
  font-size: 13px !important;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}
/* WHITE: bound warehouse flight (name resolved) */
#farmPage #view-workers .rig-flight-cell .flight-name.is-warehouse {
  color: #ffffff !important;
  font-weight: 600;
}
/* unbound */
#farmPage #view-workers .rig-flight-cell .flight-name.is-idle {
  color: #868e96 !important;
  font-weight: 500;
}
/* bound id but name missing ? 2nd color TBD */
#farmPage #view-workers .rig-flight-cell .flight-name.is-bound-unknown {
  color: #adb5bd !important;
  font-weight: 500;
}
/* legacy class aliases -> warehouse white */
#farmPage #view-workers .rig-flight-cell .flight-name.is-bound,
#farmPage #view-workers .rig-flight-cell .flight-name.is-mining {
  color: #ffffff !important;
  font-weight: 600;
}

#farmPage .miner-wh-page-head {
  align-items: center;
}
#farmPage .miner-wh-flight-pull {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-shrink: 0;
}
#farmPage .miner-wh-flight-pull .flight-pull-date {
  color: #9aa0a6;
  font-size: 12px;
  white-space: nowrap;
}


#farmPage .sw-flight-coin {
  display: inline-block;
  margin-left: 8px;
  padding: 1px 7px;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 650;
  vertical-align: middle;
  color: #74c0fc;
  background: rgba(34, 139, 230, 0.16);
}
#farmPage .sw-flight-meta {
  padding: 0 12px 6px;
  color: #868e96;
  font-size: 12px;
}
#farmPage .sw-family-card.has-db-flight {
  border-color: #3a5f8a;
}


/* flight save feedback above modal */
.toast, #toast, .app-toast {
  z-index: 99999 !important;
}


/* HASH_FLIGHT_GAP: pull ??? closer to ?? */
#farmPage #view-workers .rig-head > [data-col-key="hash"],
#farmPage #view-workers .rig-row > [data-col-key="hash"] {
  padding-right: 0 !important;
  margin-right: 0 !important;
  max-width: 7.5em !important;
}
#farmPage #view-workers .rig-head > [data-col-key="flight"],
#farmPage #view-workers .rig-row > [data-col-key="flight"],
#farmPage #view-workers .rig-flight-cell {
  padding-left: 0 !important;
  margin-left: 0 !important;
  justify-content: flex-start !important;
}
#farmPage #view-workers .rig-hash-cell {
  padding-right: 0 !important;
  max-width: 100% !important;
}


/* saved flight latest save button */
.fl-save-latest.is-newer {
  background: #2f9e44 !important;
  border-color: #2f9e44 !important;
  color: #fff !important;
}
.fl-save-latest.is-newer:hover {
  background: #37b24d !important;
  border-color: #37b24d !important;
}
.fl-save-latest.is-latest {
  background: #2a2d34 !important;
  border-color: #3a3f48 !important;
  color: #868e96 !important;
  cursor: default;
}
.fl-newer-tag {
  display: inline-block;
  margin-left: 6px;
  padding: 0 5px;
  border-radius: 3px;
  background: rgba(47,158,68,.18);
  color: #69db7c;
  font-size: 11px;
  font-weight: 600;
  vertical-align: middle;
}

/* progressive metrics skeleton */
.card .v.is-skel,
.card .side.is-skel {
  min-width: 2.2em;
  min-height: 1.1em;
  border-radius: 4px;
  color: transparent !important;
  background: linear-gradient(90deg, #2a2e33 20%, #3d4450 50%, #2a2e33 80%);
  background-size: 200% 100%;
  animation: mf-skel 1.15s ease-in-out infinite;
}
@keyframes mf-skel {
  0% { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}


/* MF-REMOTE-BLOCK-OFFLINE-2026-09-13 */
.rig-row.is-offline-muted .rig-remote,
.rig-row.is-stale-offline .rig-remote,
button.rig-remote:disabled {
  pointer-events: none !important;
  cursor: not-allowed !important;
  opacity: 0.55;
}

/* MF-GPU-BARS-NO-EMPTY-2026-09-13 */
.gpu-bars span.empty {
  display: none !important;
  width: 0 !important;
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
}

/* MF-GPU-CELL-LEFT-2026-09-13: GPU column left-align; variable bar width must not shift label */
#farmPage #view-workers .rig-row .rig-gpu-cell,
#farmPage #view-workers .rig-gpu-cell,
.rig-gpu-cell {
  display: flex !important;
  flex-direction: row !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 6px !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  overflow: hidden !important;
  box-sizing: border-box !important;
}
#farmPage #view-workers .rig-gpu-cell .gpu-model,
#farmPage #view-workers .rig-gpu-cell .gpu-model-short,
.rig-gpu-cell .gpu-model,
.rig-gpu-cell .gpu-model-short {
  flex: 0 0 auto !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  text-align: left !important;
}
#farmPage #view-workers .rig-gpu-cell .gpu-bars,
.rig-gpu-cell .gpu-bars {
  flex: 0 0 auto !important;
  justify-content: flex-start !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* MF-FLIGHT-PWR-TONE-2026-09-13: flight text same tone as power numbers; power left-aligned */
#farmPage #view-workers .rig-flight-cell .flight-name.is-warehouse,
#farmPage #view-workers .rig-flight-cell .flight-name.is-bound,
#farmPage #view-workers .rig-flight-cell .flight-name.is-mining,
.rig-flight-cell .flight-name.is-warehouse,
.rig-flight-cell .flight-name.is-bound,
.rig-flight-cell .flight-name.is-mining {
  color: #adb5bd !important;
  font-weight: 400 !important;
}
#farmPage #view-workers .rig-row .pwr-cell,
#farmPage #view-workers .rig-row > [data-col-key="pwr"],
#farmPage #view-workers .rig-metric.pwr-cell,
.rig-metric.pwr-cell,
.pwr-cell {
  color: #adb5bd !important;
  font-weight: 400 !important;
  justify-content: flex-start !important;
  text-align: left !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* MF-FLIGHT-FONT-MIN-2026-09-13: flight sheet text readable (12px) */
#farmPage #view-workers .rig-flight-cell .flight-name,
#farmPage #view-workers .rig-flight-cell .flight-name.is-warehouse,
#farmPage #view-workers .rig-flight-cell .flight-name.is-bound,
#farmPage #view-workers .rig-flight-cell .flight-name.is-mining,
#farmPage #view-workers .rig-flight-cell .flight-name.is-idle,
#farmPage #view-workers .rig-flight-cell .flight-name.is-bound-unknown,
.rig-flight-cell .flight-name {
  font-size: 12px !important;
  line-height: 1.2 !important;
}



/* MF-PURGE-RENT-2026-09-13: hide leftover rent UI */
#rentPickModal,
#billingAssignModal,
[data-action="rent"],
[data-action="unrent"],
[data-action="stop-rent"],
[data-action="bind-rent-oc"],
[data-billing-unrent],
[data-billing-stop-rent],
.rig-fee-cell,
.rig-fee-money,
.billing-rent-row,
.billing-renter {
  display: none !important;
}


/* MF-OC-BOUND-GREY-ICON-2026-09-13: local OC bind grey rocket */
.gpu-oc-flag.is-bound-grey {
  display: inline-flex !important;
  visibility: visible !important;
  opacity: 0.85 !important;
  filter: none !important;
  color: #868e96 !important;
}
.gpu-oc-flag.is-bound-grey .gpu-oc-svg-bound {
  display: block;
}
#farmPage #view-workers .gpu-oc-flag.is-bound-grey {
  display: inline-flex !important;
  visibility: visible !important;
}


/* MF-THIN-RIG-NAME-2026-09-13 */
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .rig-row .rig-name:hover,
#farmPage .rig-row .rig-name,
#farmPage .rig-row a.rig-name {
  font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei UI", system-ui, sans-serif !important;
  font-weight: 300 !important;
  font-size: 14px !important;
  color: #ffffff !important;
  text-decoration: underline !important;
  text-underline-offset: 2px !important;
  text-decoration-thickness: 1px !important;
  letter-spacing: 0.01em !important;
  -webkit-font-smoothing: antialiased !important;
  -moz-osx-font-smoothing: grayscale !important;
  opacity: 1 !important;
}
#farmPage #view-workers .rig-row .rig-name.off,
#farmPage #view-workers .rig-row a.rig-name.off {
  font-weight: 300 !important;
  color: #ced4da !important;
  text-decoration: underline !important;
  opacity: 0.92 !important;
}


/* MF-TALLER-RIG-ROW-2026-09-13 */
#farmPage #view-workers .rig-row {
  min-height: 40px !important;
  height: auto !important;
  padding-top: 5px !important;
  padding-bottom: 5px !important;
  align-items: center !important;
}
#farmPage #view-workers .rig-head {
  min-height: 36px !important;
  padding-top: 4px !important;
  padding-bottom: 4px !important;
  align-items: center !important;
}


/* MF-COIN-HASH-BLUE-2026-09-13 */
#farmPage #view-workers .rig-row .coin-val,
#farmPage #view-workers .rig-coin-cell .coin-val,
#farmPage #view-workers .rig-row .hash-coin,
#farmPage #view-workers .hash-flight-box .hash-coin,
#farmPage #view-workers .rig-hash-cell .hash-coin,
#farmPage #view-workers .rig-row .hash-val,
#farmPage #view-workers .hash-flight-box .hash-val,
#farmPage #view-workers .rig-hash-cell .hash-val,
#farmPage #view-workers .hash-chip .hash-val {
  color: #3498db !important;
  font-weight: 400 !important;
  -webkit-font-smoothing: antialiased !important;
  opacity: 1 !important;
}
#farmPage #view-workers .rig-row .hash-flight-box.is-idle .hash-coin,
#farmPage #view-workers .rig-row.is-offline-muted .coin-val,
#farmPage #view-workers .rig-row.is-offline-muted .hash-val,
#farmPage #view-workers .rig-row.is-stale-offline .coin-val,
#farmPage #view-workers .rig-row.is-stale-offline .hash-val {
  color: #5dade2 !important;
  opacity: 0.75 !important;
  font-weight: 400 !important;
}


/* MF-RIG-NAME-SIZE-14-2026-09-13 */
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .rig-row .rig-name.off,
#farmPage .rig-row .rig-name,
#farmPage .rig-row a.rig-name {
  font-size: 14px !important;
}
#farmPage #view-workers .rig-row .rig-ev-count {
  font-size: 13px !important;
}


/* MF-MUTED-TEXT-8391A2-2026-09-13 */
/* 取样自参考图 RTX/次要文字：#8391A2，L≈27% */
#farmPage #view-workers .rig-row .gpu-model,
#farmPage #view-workers .rig-row .gpu-model-short,
#farmPage #view-workers .rig-gpu-cell .gpu-model,
#farmPage #view-workers .rig-gpu-cell .gpu-model-short,
#farmPage #view-workers .rig-row .hash-flight,
#farmPage #view-workers .rig-hash-cell .hash-flight,
#farmPage #view-workers .rig-flight-cell .hash-flight,
#farmPage #view-workers .rig-row .pwr-cell,
#farmPage #view-workers .rig-row .fan-cell,
#farmPage #view-workers .rig-row .fan-speed,
#farmPage #view-workers .rig-row .rig-metric,
#farmPage #view-workers .rig-row .rig-shares-cell,
#farmPage #view-workers .rig-row .rig-shares-pair,
#farmPage #view-workers .rig-row .rig-cpu-pair,
#farmPage #view-workers .rig-row .rig-mem-pair,
#farmPage #view-workers .rig-row .agent-ver,
#farmPage #view-workers .rig-row .ver-cell {
  color: #8391A2 !important;
  font-weight: 400 !important;
  opacity: 1 !important;
  -webkit-font-smoothing: antialiased !important;
}
/* 手工超频名保持原色 */
#farmPage #view-workers .rig-gpu-cell .gpu-model.is-manual-oc {
  color: #c9a87c !important;
}


/* MF-HEAD-STYLE-REF-2026-09-13 */
#farmPage #view-workers .rig-head,
#farmPage .rig-head {
  background: #1F1F23 !important;
  color: #9E9EA6 !important;
  font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei UI", system-ui, sans-serif !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 0 !important;
  line-height: 1.2 !important;
  -webkit-font-smoothing: antialiased !important;
}
#farmPage #view-workers .rig-head > [data-col-key],
#farmPage #view-workers .rig-head .rh-name,
#farmPage #view-workers .rig-head .rh-coin,
#farmPage #view-workers .rig-head .rh-hash,
#farmPage #view-workers .rig-head .rh-flight,
#farmPage #view-workers .rig-head .rh-gpu,
#farmPage #view-workers .rig-head .rh-shares,
#farmPage #view-workers .rig-head .rh-m,
#farmPage #view-workers .rig-head .rh-fee,
#farmPage #view-workers .rig-head span {
  color: #9E9EA6 !important;
  font-size: 12px !important;
  font-weight: 600 !important;
  letter-spacing: 0 !important;
  opacity: 1 !important;
}


/* MF-BATCH-ROW-BELOW-2026-09-13: batch actions on second row under filters */
#farmPage .filterbar {
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
}
#farmPage .filterbar .fb-left {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  width: 100%;
}
#farmPage .filterbar .fb-left > .batch,
#farmPage .filterbar .batch.batch-os {
  flex: 1 1 100%;
  width: 100%;
  margin-left: 0 !important;
  margin-top: 2px;
  padding-top: 6px;
  border-top: 1px solid #2a2d34;
  row-gap: 8px;
}


/* MF-COLVIS-2026-09-13 */
.batch-colvis-wrap { position: relative; display: inline-block; vertical-align: middle; }
.batch-colvis-menu {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 80;
  min-width: 200px;
  background: #25262b;
  border: 1px solid #3a3d45;
  border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0,0,0,.45);
  padding: 8px;
}
.batch-colvis-list {
  display: flex;
  flex-direction: column;
  gap: 2px;
  max-height: 360px;
  overflow: auto;
}
.batch-colvis-list label {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 10px;
  border-radius: 6px;
  color: #e8eaef;
  font: 500 13px var(--font, inherit);
  cursor: pointer;
  user-select: none;
}
.batch-colvis-list label:hover { background: rgba(255,255,255,.08); }
.batch-colvis-list input[type="checkbox"] {
  width: 14px;
  height: 14px;
  accent-color: #228be6;
  cursor: pointer;
}
.batch-colvis-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid #3a3d45;
}
.batch-colvis-actions .btn-dark {
  min-width: 72px;
}
#view-workers .rig-head > [data-col-key].is-col-hidden,
#view-workers .rig-row > [data-col-key].is-col-hidden {
  display: none !important;
}




/* MF-TABLE-LAYOUT-2026-09-13 */
#farmPage #view-workers.rig-list,
#farmPage #view-workers .rig-body {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  overflow-x: auto !important;
}
#farmPage #view-workers .rig-block {
  display: block !important;
  width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  box-shadow: none !important;
  border-bottom: none !important;
}
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-row {
  display: grid !important;
  grid-template-columns: var(--rig-cols) !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  column-gap: 0 !important;
  row-gap: 0 !important;
  align-items: stretch !important;
  justify-items: stretch !important;
  padding: 0 !important;
  margin: 0 !important;
  position: static !important;
  overflow: hidden !important;
  border: none !important;
  background-clip: padding-box !important;
}
/* 整表外框 */
#farmPage #view-workers .rig-head {
  border-top: 1px solid #5c6575 !important;
  border-left: 1px solid #5c6575 !important;
  border-right: 1px solid #5c6575 !important;
}
#farmPage #view-workers .rig-block > .rig-row {
  border-left: 1px solid #5c6575 !important;
  border-right: 1px solid #5c6575 !important;
}
#farmPage #view-workers .rig-block:last-child > .rig-row {
  border-bottom: 1px solid #5c6575 !important;
}
/*
  单元格只画右边线 + 下边线，避免双边框错位，
  竖线才能上下一条直线贯通。
*/
#farmPage #view-workers .rig-head > [data-col-key],
#farmPage #view-workers .rig-row > [data-col-key] {
  position: static !important;
  right: auto !important;
  left: auto !important;
  top: auto !important;
  transform: none !important;
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  justify-self: stretch !important;
  align-self: stretch !important;
  width: auto !important;
  min-width: 0 !important;
  max-width: none !important;
  height: auto !important;
  min-height: 32px !important;
  margin: 0 !important;
  padding: 4px 6px !important;
  box-sizing: border-box !important;
  overflow: hidden !important;
  outline: none !important;
  border: none !important;
  border-right: 1px solid #5c6575 !important;
  border-bottom: 1px solid #5c6575 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  text-align: left !important;
  white-space: nowrap !important;
}
/* 最后一列不再画右边线（外框已有） */
#farmPage #view-workers .rig-head > [data-col-key="remote"],
#farmPage #view-workers .rig-row > [data-col-key="remote"] {
  border-right: none !important;
}
#farmPage #view-workers .rig-head > [data-col-key] {
  background: #1c1e24 !important;
  color: #adb5bd !important;
  font-weight: 600 !important;
  font-size: 12px !important;
}
#farmPage #view-workers .rig-head > [data-col-key].is-col-hidden,
#farmPage #view-workers .rig-row > [data-col-key].is-col-hidden,
#farmPage #view-workers .rig-head > [data-col-key="fee"],
#farmPage #view-workers .rig-row > [data-col-key="fee"] {
  display: none !important;
  border: 0 !important;
  padding: 0 !important;
  width: 0 !important;
  min-width: 0 !important;
}
#farmPage #view-workers .rig-block:nth-child(odd) > .rig-row {
  background: #23252b !important;
}
#farmPage #view-workers .rig-block:nth-child(even) > .rig-row {
  background: #2a2d35 !important;
}
#farmPage #view-workers .rig-block:nth-child(odd) > .rig-row:hover,
#farmPage #view-workers .rig-block:nth-child(even) > .rig-row:hover {
  background: #30343e !important;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .flight-name,
#farmPage #view-workers .coin-val,
#farmPage #view-workers .hash-val,
#farmPage #view-workers .gpu-model,
#farmPage #view-workers .ver-cell,
#farmPage #view-workers .pwr-cell,
#farmPage #view-workers .rig-shares-cell {
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}
#farmPage #view-workers .rig-gpu-cell {
  display: flex !important;
  align-items: center !important;
  gap: 4px !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  margin: 0 !important;
  overflow: hidden !important;
}
#farmPage #view-workers .rig-gpu-cell .gpu-oc-zone { flex: 0 0 auto !important; }
#farmPage #view-workers .rig-gpu-cell .gpu-model { flex: 0 1 auto !important; }
#farmPage #view-workers .rig-gpu-cell .gpu-bars-zone {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  overflow: hidden !important;
}
#farmPage #view-workers .rig-head > [data-col-key="remote"],
#farmPage #view-workers .rig-row > [data-col-key="remote"],
#farmPage #view-workers .rig-row .rig-remote {
  justify-content: center !important;
  position: static !important;
  transform: none !important;
}
#farmPage #view-workers .rig-row > button.rig-remote[data-col-key="remote"] {
  width: auto !important;
  min-width: 0 !important;
  max-width: none !important;
  height: auto !important;
  min-height: 32px !important;
  margin: 0 !important;
  padding: 4px 6px !important;
  border: none !important;
  border-bottom: 1px solid #5c6575 !important;
  border-right: none !important;
  background: transparent !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  box-sizing: border-box !important;
}
#farmPage #view-workers .rig-row .rig-remote svg {
  width: 16px !important;
  height: 16px !important;
  flex: 0 0 auto !important;
}
#farmPage #view-workers .rig-row .rig-remote svg {
  width: 16px !important;
  height: 16px !important;
}
#farmPage #view-workers .rig-head > [data-col-key="cb"],
#farmPage #view-workers .rig-row > [data-col-key="cb"],
#farmPage #view-workers .rig-head > [data-col-key="star"],
#farmPage #view-workers .rig-row > [data-col-key="star"],
#farmPage #view-workers .rig-head > [data-col-key="af"],
#farmPage #view-workers .rig-row > [data-col-key="af"] {
  justify-content: center !important;
  padding-left: 2px !important;
  padding-right: 2px !important;
}

/* MF-NAME-COL-SHRINK-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-row > [data-col-key="name"] {
  max-width: none !important;
  width: auto !important;
  flex: none !important;
  padding-left: 6px !important;
  padding-right: 6px !important;
}
#farmPage #view-workers .rig-row .rig-identity {
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  overflow: hidden !important;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name {
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}


/* MF-TABLE-COLS-TUNE-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="coin"],
#farmPage #view-workers .rig-row > [data-col-key="coin"],
#farmPage #view-workers .rig-head > [data-col-key="fan"],
#farmPage #view-workers .rig-row > [data-col-key="fan"],
#farmPage #view-workers .rig-head > [data-col-key="acc"],
#farmPage #view-workers .rig-row > [data-col-key="acc"],
#farmPage #view-workers .rig-head > [data-col-key="hash"],
#farmPage #view-workers .rig-row > [data-col-key="hash"],
#farmPage #view-workers .rig-head > [data-col-key="pwr"],
#farmPage #view-workers .rig-row > [data-col-key="pwr"],
#farmPage #view-workers .rig-head > [data-col-key="ver"],
#farmPage #view-workers .rig-row > [data-col-key="ver"] {
  padding-left: 4px !important;
  padding-right: 4px !important;
}
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-row > [data-col-key="name"] {
  max-width: none !important;
  width: auto !important;
}
#farmPage #view-workers .rig-head > [data-col-key="remote"],
#farmPage #view-workers .rig-row > [data-col-key="remote"] {
  justify-content: center !important;
  padding: 2px !important;
}


/* MF-TABLE-COLS-ALIGN-2026-09-13 */
/* head/row same metrics so vertical lines are one straight line */
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-row {
  font-size: 13px !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  box-sizing: border-box !important;
  grid-template-columns: var(--rig-cols) !important;
  column-gap: 0 !important;
}
#farmPage #view-workers .rig-head > [data-col-key],
#farmPage #view-workers .rig-row > [data-col-key] {
  width: auto !important;
  max-width: none !important;
  min-width: 0 !important;
  box-sizing: border-box !important;
  padding: 4px 6px !important;
}
/* kill leftover em-based width clamps */
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-row > [data-col-key="name"],
#farmPage #view-workers .rig-head > [data-col-key="coin"],
#farmPage #view-workers .rig-row > [data-col-key="coin"] {
  width: auto !important;
  max-width: none !important;
  flex: unset !important;
}


/* MF-GPU-SPLIT-COLS-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="oc"],
#farmPage #view-workers .rig-row > [data-col-key="oc"] {
  justify-content: center !important;
}
#farmPage #view-workers .rig-head > [data-col-key="model"],
#farmPage #view-workers .rig-row > [data-col-key="model"] {
  justify-content: flex-start !important;
}
#farmPage #view-workers .rig-head > [data-col-key="gbars"],
#farmPage #view-workers .rig-row > [data-col-key="gbars"] {
  justify-content: flex-start !important;
}
#farmPage #view-workers .rig-oc-cell,
#farmPage #view-workers .rig-model-cell,
#farmPage #view-workers .rig-gbars-cell {
  display: flex !important;
  align-items: center !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  margin: 0 !important;
}
#farmPage #view-workers .rig-oc-cell { justify-content: center !important; }
#farmPage #view-workers .rig-model-cell { justify-content: flex-start !important; }
#farmPage #view-workers .rig-gbars-cell { justify-content: flex-start !important; }
#farmPage #view-workers .rig-model-cell .gpu-model,
#farmPage #view-workers .rig-model-cell .gpu-model-short {
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}
#farmPage #view-workers .rig-gbars-cell .gpu-bars-zone,
#farmPage #view-workers .rig-gbars-cell .gpu-bars {
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  display: inline-flex !important;
  flex-wrap: nowrap !important;
}


/* MF-GBARS-WIDER-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="gbars"],
#farmPage #view-workers .rig-row > [data-col-key="gbars"],
#farmPage #view-workers .rig-gbars-cell {
  min-width: 0 !important;
}
#farmPage #view-workers .rig-gbars-cell .gpu-bars-zone,
#farmPage #view-workers .rig-gbars-cell .gpu-bars {
  max-width: none !important;
  overflow: visible !important;
  flex-wrap: nowrap !important;
}
#farmPage #view-workers .gpu-bars span,
#farmPage #view-workers .rig-gbars-cell .gpu-bars span {
  flex: 0 0 auto !important;
}


/* MF-AR-LETTER-SPACING-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="acc"],
#farmPage #view-workers .rig-head > [data-col-key="acc"].rh-shares {
  letter-spacing: 0.55em !important;
  justify-content: center !important;
  text-align: center !important;
  padding-right: calc(6px + 0.55em) !important; /* optical balance for letter-spacing */
}


/* MF-PWR-LETTER-SPACING-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="pwr"] {
  letter-spacing: 0.55em !important;
  justify-content: center !important;
  text-align: center !important;
  padding-right: calc(6px + 0.55em) !important;
}




/* MF-FAN-CLEAN-2026-09-13: strip redundant fan overrides; tabular align */
#farmPage #view-workers .rig-head > [data-col-key="fan"],
#farmPage #view-workers .rig-row > [data-col-key="fan"] {
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  padding: 0 2px !important;
  justify-content: center !important;
  text-align: center !important;
  box-sizing: border-box !important;
}
#farmPage #view-workers .rig-row > [data-col-key="fan"].fan-speed,
#farmPage #view-workers .rig-row .fan-speed,
#farmPage #view-workers .rig-row .fan-speed.has-val {
  /* keep flex from row metrics; do NOT force display:block */
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
  white-space: nowrap !important;
  font-variant-numeric: tabular-nums !important;
  font-weight: 400 !important;
  letter-spacing: normal !important;
  text-align: center !important;
}


/* MF-RAM-USE-ONLY-2026-09-13 */
#farmPage #view-workers .rig-row > [data-col-key="ram"] .mem-total,
#farmPage #view-workers .rig-row > [data-col-key="ram"] .mem-sep {
  display: none !important;
}
#farmPage #view-workers .rig-row > [data-col-key="ram"] .rig-mem-pair,
#farmPage #view-workers .rig-row > [data-col-key="ram"] .mem-use {
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}


/* MF-RAM-FEE-CLEAN-2026-09-13 */
/* kill fee ghost column completely */
#farmPage #view-workers .rig-head > [data-col-key="fee"],
#farmPage #view-workers .rig-row > [data-col-key="fee"],
#farmPage #view-workers .rh-fee,
#farmPage #view-workers .rig-fee-cell {
  display: none !important;
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  overflow: hidden !important;
}
/* ram: only usage text, no ghost sub-cells */
#farmPage #view-workers .rig-row > [data-col-key="ram"] .mem-total,
#farmPage #view-workers .rig-row > [data-col-key="ram"] .mem-sep,
#farmPage #view-workers .rig-mem-pair .mem-total,
#farmPage #view-workers .rig-mem-pair .mem-sep {
  display: none !important;
  width: 0 !important;
  max-width: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  border: 0 !important;
  font-size: 0 !important;
  overflow: hidden !important;
}
#farmPage #view-workers .rig-head > [data-col-key="ram"],
#farmPage #view-workers .rig-row > [data-col-key="ram"] {
  min-width: 0 !important;
  justify-content: center !important;
  text-align: center !important;
  overflow: hidden !important;
  padding-left: 4px !important;
  padding-right: 4px !important;
}
#farmPage #view-workers .rig-row > [data-col-key="ram"] .rig-mem-pair,
#farmPage #view-workers .rig-row > [data-col-key="ram"] .mem-use {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  text-align: center !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  background: transparent !important;
}


/* MF-CPU-LOAD-SPLIT-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="cpu"],
#farmPage #view-workers .rig-row > [data-col-key="cpu"] {
  justify-content: flex-start !important;
  min-width: 0 !important;
  overflow: hidden !important;
}
#farmPage #view-workers .rig-head > [data-col-key="load"],
#farmPage #view-workers .rig-row > [data-col-key="load"] {
  justify-content: center !important;
  text-align: center !important;
  min-width: 0 !important;
  overflow: hidden !important;
}
#farmPage #view-workers .rig-cpu-cell,
#farmPage #view-workers .rig-load-cell {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
}
#farmPage #view-workers .rig-load-cell,
#farmPage #view-workers .rig-load-cell .cpu-use {
  text-align: center !important;
}
#farmPage #view-workers .rig-cpu-cell .cpu-code {
  display: block !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}




/* MF-REMOTE-BOOT-FLUSH-2026-09-13 */
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-row {
  padding-right: 0 !important;
}
/* remote: one tight cell */
#farmPage #view-workers .rig-head > [data-col-key="remote"],
#farmPage #view-workers .rig-row > [data-col-key="remote"],
#farmPage #view-workers .rig-row > button.rig-remote[data-col-key="remote"] {
  min-width: 0 !important;
  overflow: hidden !important;
  padding: 2px 1px !important;
  justify-content: center !important;
  text-align: center !important;
  box-sizing: border-box !important;
  border-right: 1px solid #5c6575 !important; /* keep divider before boot */
}
#farmPage #view-workers .rig-head > [data-col-key="remote"] {
  font-size: 12px !important;
  white-space: nowrap !important;
}
#farmPage #view-workers .rig-row > button.rig-remote[data-col-key="remote"] {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 32px !important;
  height: auto !important;
  margin: 0 !important;
  border-bottom: 1px solid #5c6575 !important;
  background: transparent !important;
}
#farmPage #view-workers .rig-row .rig-remote svg {
  width: 20px !important;
  height: 20px !important;
}
/* boot: last cell, flush to right edge */
#farmPage #view-workers .rig-head > [data-col-key="boot"],
#farmPage #view-workers .rig-row > [data-col-key="boot"] {
  justify-content: flex-end !important;
  text-align: right !important;
  min-width: 0 !important;
  overflow: hidden !important;
  padding-left: 4px !important;
  padding-right: 2px !important; /* tight to table right edge */
  border-right: none !important; /* outer frame already has right border */
  box-sizing: border-box !important;
}
#farmPage #view-workers .rig-row > [data-col-key="boot"] .boot-cell,
#farmPage #view-workers .boot-cell {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  text-align: right !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  font-variant-numeric: tabular-nums !important;
}
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-block > .rig-row {
  border-right: 1px solid #5c6575 !important;
}


/* MF-REMOTE-ICON-BIG-2026-09-13 */
#farmPage #view-workers .rig-row .rig-remote svg,
#farmPage #view-workers .rig-row > button.rig-remote svg,
#farmPage #view-workers button.rig-remote svg {
  width: 20px !important;
  height: 20px !important;
}
#farmPage #view-workers .rig-remote {
  width: 22px !important;
  height: 22px !important;
  min-width: 22px !important;
}
#farmPage #view-workers .rig-row > button.rig-remote[data-col-key="remote"] {
  width: auto !important;
  min-width: 0 !important;
  height: auto !important;
  min-height: 32px !important;
}


/* MF-RAM-FMT-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="ram"] {
  justify-content: center !important;
  text-align: center !important;
  font-size: 11px !important;
  letter-spacing: 0 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  padding-left: 2px !important;
  padding-right: 2px !important;
}
#farmPage #view-workers .rig-row > [data-col-key="ram"] {
  justify-content: center !important;
  min-width: 0 !important;
  overflow: hidden !important;
  padding-left: 2px !important;
  padding-right: 2px !important;
}
#farmPage #view-workers .rig-row > [data-col-key="ram"] .rig-mem-pair,
#farmPage #view-workers .rig-row > [data-col-key="ram"] .mem-line {
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: clip !important;
  white-space: pre !important; /* keep padded spaces */
  text-align: center !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  font-variant-numeric: tabular-nums !important;
  font-family: ui-monospace, "Cascadia Mono", "Consolas", monospace !important;
}
#farmPage #view-workers .rig-mem-pair .mem-total,
#farmPage #view-workers .rig-mem-pair .mem-sep,
#farmPage #view-workers .rig-mem-pair .mem-use {
  display: none !important;
}

/* MF-FLIGHT-BOOT-FIXED-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="flight"],
#farmPage #view-workers .rig-row > [data-col-key="flight"],
#farmPage #view-workers .rig-flight-cell {
  min-width: 0 !important;
  max-width: 100% !important;
  width: 100% !important;
  overflow: hidden !important;
  box-sizing: border-box !important;
}
#farmPage #view-workers .rig-head > [data-col-key="flight"],
#farmPage #view-workers .rig-head .rh-flight {
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  max-width: 100% !important;
}
#farmPage #view-workers .rig-flight-cell .flight-name {
  display: block !important;
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}
#farmPage #view-workers .rig-head > [data-col-key="boot"],
#farmPage #view-workers .rig-row > [data-col-key="boot"],
#farmPage #view-workers .boot-cell {
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  box-sizing: border-box !important;
}

/* MF-OFFLINE-WIFI-COL-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="offline"],
#farmPage #view-workers .rig-row > [data-col-key="offline"] {
  min-width: 0 !important;
  max-width: 100% !important;
  overflow: hidden !important;
  justify-content: center !important;
  align-items: center !important;
  text-align: center !important;
  padding: 0 2px !important;
  box-sizing: border-box !important;
}
#farmPage #view-workers .rig-row .offline-cell {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100% !important;
  height: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
}
#farmPage #view-workers .rig-row .offline-cell.is-offline {
  color: #e03131 !important;
}
#farmPage #view-workers .rig-row .offline-cell.is-online {
  color: transparent !important;
}
#farmPage #view-workers .rig-row .offline-wifi {
  display: block !important;
  width: 18px !important;
  height: 18px !important;
  flex: 0 0 18px !important;
}

/* MF-FAN-AUTOFAN-BLUE-2026-09-13: same as hashrate #4dabf7 */
#farmPage #view-workers .rig-row .fan-speed.is-autofan,
#farmPage #view-workers .rig-row .fan-speed.has-val.is-autofan,
#farmPage #view-workers .rig-row > [data-col-key="fan"].fan-speed.is-autofan {
  color: #4dabf7 !important;
  font-weight: 400 !important;
}

/* MF-BOOT-LAST-OFFLINE-2026-09-13 */
#farmPage #view-workers .rig-row .boot-cell.is-last-offline {
  color: #e03131 !important;
  font-variant-numeric: tabular-nums !important;
}

/* MF-COLVIS-REMOVE-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key].is-col-hidden,
#farmPage #view-workers .rig-row > [data-col-key].is-col-hidden,
#farmPage #view-workers .rig-head > [data-col-key][hidden],
#farmPage #view-workers .rig-row > [data-col-key][hidden] {
  display: none !important;
  border: 0 !important;
  padding: 0 !important;
  margin: 0 !important;
  width: 0 !important;
  min-width: 0 !important;
  max-width: 0 !important;
  overflow: hidden !important;
  pointer-events: none !important;
}

/* MF-HEAD-CENTER-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key],
#farmPage #view-workers .rig-head > span,
#farmPage #view-workers .rig-head .rh-m,
#farmPage #view-workers .rig-head .rh-name,
#farmPage #view-workers .rig-head .rh-coin,
#farmPage #view-workers .rig-head .rh-hash,
#farmPage #view-workers .rig-head .rh-flight,
#farmPage #view-workers .rig-head .rh-oc,
#farmPage #view-workers .rig-head .rh-model,
#farmPage #view-workers .rig-head .rh-gbars,
#farmPage #view-workers .rig-head .rh-shares,
#farmPage #view-workers .rig-head .rh-remote {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  text-align: center !important;
}

/* MF-ROW-CENTER-2026-09-13 */
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-row > [data-col-key] > * {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  text-align: center !important;
}
/* keep checkbox/star naturally centered too */
#farmPage #view-workers .rig-row > [data-col-key="cb"],
#farmPage #view-workers .rig-row > [data-col-key="star"],
#farmPage #view-workers .rig-row > [data-col-key="remote"],
#farmPage #view-workers .rig-row > [data-col-key="oc"],
#farmPage #view-workers .rig-row > [data-col-key="gbars"],
#farmPage #view-workers .rig-row > [data-col-key="offline"] {
  justify-content: center !important;
}
/* name link: center but allow ellipsis */
#farmPage #view-workers .rig-row > [data-col-key="name"] .rig-name,
#farmPage #view-workers .rig-row > [data-col-key="name"] a.rig-name {
  text-align: center !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
/* nested metric blocks fill and center */
#farmPage #view-workers .rig-row .rig-hash-cell,
#farmPage #view-workers .rig-row .rig-flight-cell,
#farmPage #view-workers .rig-row .rig-gpu-cell,
#farmPage #view-workers .rig-row .rig-shares-pair,
#farmPage #view-workers .rig-row .pwr-cell,
#farmPage #view-workers .rig-row .rig-cpu-pair,
#farmPage #view-workers .rig-row .rig-mem-pair,
#farmPage #view-workers .rig-row .fan-speed,
#farmPage #view-workers .rig-row .ver-cell,
#farmPage #view-workers .rig-row .boot-cell,
#farmPage #view-workers .rig-row .offline-cell,
#farmPage #view-workers .rig-row .coin-cell,
#farmPage #view-workers .rig-row .hash-val,
#farmPage #view-workers .rig-row .flight-name,
#farmPage #view-workers .rig-row .gpu-model,
#farmPage #view-workers .rig-row .gpu-bars {
  width: 100% !important;
  max-width: 100% !important;
  justify-content: center !important;
  text-align: center !important;
}
#farmPage #view-workers .rig-row .gpu-bars {
  display: flex !important;
  justify-content: center !important;
}


/* MF-NAME-GBARS-LEFT-2026-09-13: 矿机 + 显卡 keep left align */
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-row > [data-col-key="name"],
#farmPage #view-workers .rig-head > [data-col-key="gbars"],
#farmPage #view-workers .rig-row > [data-col-key="gbars"] {
  justify-content: flex-start !important;
  justify-self: stretch !important;
  text-align: left !important;
}
#farmPage #view-workers .rig-row .rig-identity {
  justify-content: flex-start !important;
  text-align: left !important;
  width: 100% !important;
}
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .rig-row .rig-name.off {
  text-align: left !important;
  margin-left: 0 !important;
  margin-right: auto !important;
}
#farmPage #view-workers .rig-row > [data-col-key="gbars"] .gpu-bars,
#farmPage #view-workers .rig-row .gpu-bars {
  justify-content: flex-start !important;
  width: 100% !important;
}
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-head > [data-col-key="gbars"],
#farmPage #view-workers .rig-head .rh-name,
#farmPage #view-workers .rig-head .rh-gbars {
  justify-content: flex-start !important;
  text-align: left !important;
}

/* MF-NAME-CONTENT-LEFT-2026-09-13 */
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-row > [data-col-key="name"],
#farmPage #view-workers .rig-row > [data-col-key="name"].rig-identity,
#farmPage #view-workers .rig-row .rig-identity[data-col-key="name"] {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  justify-self: stretch !important;
  text-align: left !important;
  margin: 0 !important;
  padding-left: 4px !important;
  padding-right: 2px !important;
}
#farmPage #view-workers .rig-row > [data-col-key="name"] > *,
#farmPage #view-workers .rig-row .rig-identity,
#farmPage #view-workers .rig-row .rig-identity > * {
  justify-content: flex-start !important;
  text-align: left !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}
#farmPage #view-workers .rig-row > [data-col-key="name"] .rig-name,
#farmPage #view-workers .rig-row > [data-col-key="name"] a.rig-name,
#farmPage #view-workers .rig-row a.rig-name,
#farmPage #view-workers .rig-row .rig-name,
#farmPage #view-workers .rig-row .rig-name.off {
  display: inline-block !important;
  text-align: left !important;
  margin: 0 !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
  width: auto !important;
  max-width: 100% !important;
}
#farmPage #view-workers .rig-head > [data-col-key="name"],
#farmPage #view-workers .rig-head .rh-name {
  justify-content: flex-start !important;
  text-align: left !important;
  padding-left: 4px !important;
}
/* event badge: after name, not overlay that fights left layout */
#farmPage #view-workers .rig-row .rig-ev-count:empty {
  display: none !important;
}
#farmPage #view-workers .rig-row .rig-ev-count:not(:empty) {
  position: static !important;
  transform: none !important;
  right: auto !important;
  top: auto !important;
  margin-left: 2px !important;
  flex: 0 0 auto !important;
}

/* MF-TABLE-BORDERS-HIDE-2026-09-13: hide table grid lines */
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-block > .rig-row,
#farmPage #view-workers .rig-body,
#farmPage #view-workers.rig-list {
  border: none !important;
  border-top: none !important;
  border-left: none !important;
  border-right: none !important;
  border-bottom: none !important;
  outline: none !important;
  box-shadow: none !important;
}
#farmPage #view-workers .rig-head > [data-col-key],
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-head > span,
#farmPage #view-workers .rig-row > * {
  border: none !important;
  border-right: none !important;
  border-bottom: none !important;
  border-left: none !important;
  border-top: none !important;
  outline: none !important;
  box-shadow: none !important;
}

/* MF-TABLE-LASTLINE-HIDE-2026-09-13: kill leftover bottom/right frame */
#farmPage #view-workers .rig-block,
#farmPage #view-workers .rig-block + .rig-block,
#farmPage #view-workers .rig-block:last-child,
#farmPage #view-workers .rig-block:last-child > .rig-row,
#farmPage #view-workers .rig-block > .rig-row,
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-body,
#farmPage #view-workers.rig-list,
#farmPage #view-workers .rig-head > [data-col-key],
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-head > [data-col-key]:last-child,
#farmPage #view-workers .rig-row > [data-col-key]:last-child,
#farmPage #view-workers .rig-head > [data-col-key="boot"],
#farmPage #view-workers .rig-row > [data-col-key="boot"],
#farmPage #view-workers .rig-head > [data-col-key="remote"],
#farmPage #view-workers .rig-row > [data-col-key="remote"] {
  border: none !important;
  border-top: none !important;
  border-right: none !important;
  border-bottom: none !important;
  border-left: none !important;
  outline: none !important;
  box-shadow: none !important;
}

/* MF-REMOTE-CELL-BORDER-KILL-2026-09-13: remote is a button with its own grid borders */
#farmPage #view-workers .rig-row > button.rig-remote[data-col-key="remote"],
#farmPage #view-workers .rig-row > button.rig-remote,
#farmPage #view-workers .rig-head > [data-col-key="remote"],
#farmPage #view-workers .rig-row > [data-col-key="remote"],
#farmPage #view-workers .rig-head > [data-col-key],
#farmPage #view-workers .rig-row > [data-col-key],
#farmPage #view-workers .rig-head,
#farmPage #view-workers .rig-block > .rig-row,
#farmPage #view-workers .rig-block:last-child > .rig-row {
  border: 0 !important;
  border-top: 0 !important;
  border-right: 0 !important;
  border-bottom: 0 !important;
  border-left: 0 !important;
  outline: 0 !important;
  box-shadow: none !important;
}
