@font-face {
  font-family: Inter;
  src: url("/static/fonts/InterVariable.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

:root {
  --bg: #14161c;
  --bg-2: #1a1d24;
  --sidebar: #171a21;
  --card: #22262f;
  --card-2: #2a2f3a;
  --line: rgba(255, 255, 255, 0.06);
  --text: #e8edf4;
  --muted: #8b95a8;
  --green: #3ecf8e;
  --amber: #ffb020;
  --orange: #ff8a3d;
  --red: #ff5d73;
  --blue: #4da3ff;
  --cyan: #5ad0ff;
  --gold: #e7b008;
  --shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
  --mono: Inter, "Segoe UI", sans-serif;
  --sans: Inter, "Segoe UI", "Noto Sans", sans-serif;
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html, body { margin: 0; min-height: 100%; }
body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--sans);
  font-size: 13px;
  font-feature-settings: "cv11", "ss01";
  letter-spacing: -0.01em;
}
a { color: var(--blue); text-decoration: none; }
a:hover { color: #fff; }
h1, h2, h3 { margin: 0 0 8px; font-weight: 650; letter-spacing: -0.03em; }
h1 { font-size: 22px; }
h2 { font-size: 16px; }
.lead { margin: 0 0 14px; color: var(--muted); max-width: 70ch; }
.muted { color: var(--muted); }
.mono, code { font-family: var(--sans); font-variant-numeric: tabular-nums; }
.num { font-variant-numeric: tabular-nums; }

.shell { display: flex; min-height: 100vh; }
.sidebar {
  width: 196px;
  flex: none;
  background: var(--sidebar);
  border-right: 1px solid var(--line);
  padding: 14px 10px;
  display: flex;
  flex-direction: column;
  position: sticky;
  top: 0;
  height: 100vh;
}
.brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
  margin: 2px 4px 18px;
  color: inherit;
  text-decoration: none;
}
.brand:hover { color: #fff; }
.brand img { width: 168px; max-width: 100%; height: auto; display: block; }
.brand span { display: block; color: var(--muted); font-size: 11px; padding-left: 2px; }
.nav { display: flex; flex-direction: column; gap: 2px; }
.nav a {
  color: #b7c0d0;
  padding: 8px 12px;
  border-radius: 8px;
  border: 1px solid transparent;
  font-size: 13px;
  font-weight: 500;
}
.nav a:hover { background: rgba(255,255,255,.04); color: #fff; }
.nav a.is-active {
  background: rgba(77, 163, 255, .12);
  color: var(--blue);
}
.logout { margin-top: auto; }
.logout button, .btn, button.btn {
  font: inherit;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--card-2);
  color: var(--text);
  padding: 7px 11px;
  cursor: pointer;
}
.btn:hover, .logout button:hover { border-color: rgba(255,255,255,.18); }
.btn-primary, button.btn-primary { background: #1d5fad; border-color: #4da3ff; color: white; }
.btn-danger, button.btn-danger { background: #6d2433; border-color: #c44b62; color: white; }
.btn-ghost { background: transparent; }
.workspace { flex: 1; min-width: 0; }
.topbar {
  display: flex;
  gap: 12px;
  align-items: stretch;
  padding: 8px 14px;
  border-bottom: 1px solid var(--line);
  background: #12141a;
  position: sticky;
  top: 0;
  z-index: 5;
}
.public-link {
  align-self: center;
  color: var(--cyan);
  font-size: 12px;
  font-family: var(--mono);
  max-width: 42vw;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.burger { display: none; align-items: center; padding: 0 10px; border: 1px solid var(--line); border-radius: 8px; }
.metrics { display: flex; gap: 0; width: 100%; justify-content: flex-end; }
.metric {
  background: transparent;
  border: none;
  border-left: 1px solid var(--line);
  border-radius: 0;
  padding: 4px 16px;
  min-width: 88px;
  text-align: center;
}
.metric span { display: block; color: var(--muted); font-size: 10px; letter-spacing: .06em; text-transform: uppercase; }
.metric b { font-size: 18px; font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: -0.03em; }
.metric small { color: var(--muted); font-size: 11px; font-weight: 500; }
.metric-main { border-color: var(--line); }
.metric-bad b { color: var(--red); }
.page { padding: 12px 14px 40px; }
.page-split {
  display: grid;
  grid-template-columns: minmax(420px, 1fr) 260px;
  gap: 14px;
  align-items: start;
}
.page-split-main { min-width: 0; }
/* Без боковой колонки подсказок — основная часть на всю ширину. */
.page-split > .page-split-main:only-child { grid-column: 1 / -1; }
.page-aside {
  position: sticky;
  top: 64px;
  background: #171b22;
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 12px 14px 14px;
  max-height: calc(100vh - 80px);
  overflow: auto;
}
.reconnect-box { margin: 10px 0 0; }
.reconnect-box p { margin: 6px 0; }
.reconnect-cmd {
  margin: 8px 0;
  padding: 10px 12px;
  border-radius: 8px;
  background: #0b1220;
  border: 1px solid var(--line);
  color: #d7e8ff;
  font-size: 12px;
  line-height: 1.45;
  overflow-x: auto;
  white-space: pre-wrap;
}
.page-aside h2 {
  margin: 0 0 10px;
  font-size: 14px;
  color: var(--text);
}
.faq-item {
  border-top: 1px solid var(--line);
  padding: 8px 0 2px;
}
.faq-item:first-of-type { border-top: none; padding-top: 0; }
.faq-item summary {
  cursor: pointer;
  color: #c5d0e0;
  font-weight: 650;
  font-size: 13px;
  list-style: none;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::before {
  content: "▸";
  display: inline-block;
  width: 1em;
  color: var(--muted);
  transition: transform .15s ease;
}
.faq-item[open] summary::before { transform: rotate(90deg); }
.faq-item p {
  margin: 6px 0 8px 1em;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.45;
}
.faq-item code {
  font-size: 11px;
  color: #9ecbff;
  background: #10151d;
  border-radius: 4px;
  padding: 1px 5px;
}
.banner {
  margin: 10px 14px 0;
  padding: 8px 12px;
  border-radius: 8px;
  background: rgba(77, 163, 255, .12);
  border: 1px solid rgba(77, 163, 255, .28);
  font-size: 13px;
}
.banner-warn { background: rgba(255, 176, 32, .12); border-color: rgba(255, 176, 32, .4); }
.banner-bad { background: rgba(255, 93, 115, .12); border-color: rgba(255, 93, 115, .45); }
pre.banner-cmd {
  margin: 8px 14px 12px;
  padding: 10px 12px;
  border-radius: 8px;
  background: #0b1220;
  border: 1px solid var(--line);
  color: #d7e8ff;
  font-size: 12px;
  line-height: 1.45;
  overflow-x: auto;
  white-space: pre-wrap;
}
.hub-shell .banner { margin: 10px 0 0; }
.hub-shell pre.banner-cmd { margin: 8px 0 0; }

.page-head, .toolbar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; justify-content: space-between; }
.page-head { margin-bottom: 4px; }
.toolbar { margin-bottom: 10px; }
.toolbar input, .rig-miner-form select, .rig-miner-form input, .toolbar select, .stack-form input, .stack-form select, .stack-form textarea, .oc-form input, .inline-form input {
  font: inherit;
  color: var(--text);
  background: #12141a;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 7px 10px;
}
.chips, .view-switch { display: flex; gap: 4px; flex-wrap: wrap; }
.chip, .view-switch a {
  color: var(--muted);
  border: 1px solid transparent;
  border-radius: 6px;
  padding: 5px 10px;
  background: transparent;
  font-weight: 600;
  font-size: 12px;
}
.chip.is-on, .view-switch a.is-on { color: var(--blue); background: rgba(77, 163, 255, .12); }

.hex-row { display: flex; gap: 8px; flex-wrap: wrap; margin: 8px 0 16px; }
.hex {
  min-width: 120px;
  height: auto;
  clip-path: none;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 12px 14px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  text-align: left;
}
.hex b { font-size: 22px; font-weight: 700; font-variant-numeric: tabular-nums; }
.hex span { color: var(--muted); font-size: 11px; max-width: none; text-transform: uppercase; letter-spacing: .04em; }
.hex-bad { background: rgba(255, 93, 115, .12); border-color: rgba(255, 93, 115, .35); }

.split { display: grid; grid-template-columns: 1.4fr .8fr; gap: 12px; margin-bottom: 12px; }
.wallets-page { grid-template-columns: 1fr 1fr; align-items: start; }
.stack { display: flex; flex-direction: column; gap: 12px; }
.card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 12px;
  box-shadow: none;
}
.card-head { display: flex; justify-content: space-between; gap: 8px; align-items: baseline; margin-bottom: 10px; }
.hub-term-head {
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.hub-term-head h2 { margin: 0; flex: none; }
.hub-term-head .hub-term-input {
  flex: 1 1 280px;
  margin: 0;
  min-width: 220px;
}
.empty { color: var(--muted); }

.rig-list { display: flex; flex-direction: column; gap: 6px; }
/* Карточка воркера: без цветной полосы слева — контрастная рамка, состояние видно по меткам. */
.rig-card {
  background: #1e222a;
  border: 1px solid #3a4455;
  border-radius: 8px;
  padding: 0;
  overflow: hidden;
  position: relative;
}
.rig-card:hover { border-color: #56637a; }
.rig-card.is-offline { opacity: .78; }
.rig-card.is-lost { opacity: 1; }
.rig-row {
  display: grid;
  grid-template-columns: 140px 160px 110px minmax(170px, 230px) minmax(0, 1fr);
  gap: 8px 10px;
  align-items: center;
  padding: 8px 10px 8px 12px;
}
.rig-id, .miner-box, .rig-total, .gpu-row { color: inherit; }
.rig-id { display: flex; gap: 8px; align-items: flex-start; }
.rig-id strong, .miner-box b, .rig-total b { display: block; color: var(--text); }
.rig-id strong { font-size: 14px; font-weight: 700; }
.rig-id small, .miner-box span, .rig-total span { display: block; color: var(--muted); font-size: 11px; }
.lnk-on { color: var(--green); font-size: 10px; font-weight: 700; letter-spacing: .08em; }
.lnk-lost { color: var(--amber); font-size: 10px; font-weight: 700; letter-spacing: .08em; }
.lnk-off { color: var(--red); font-size: 10px; font-weight: 700; letter-spacing: .08em; }
.lnk-up { color: var(--cyan); font-size: 11px; font-variant-numeric: tabular-nums; }
.status-dot {
  width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-top: 5px; flex: none;
  background: var(--muted);
}
.status-dot.is-on { background: var(--green); box-shadow: 0 0 0 3px rgba(62, 207, 142, .18); }
.status-dot.is-lost { background: var(--amber); box-shadow: 0 0 0 3px rgba(255, 176, 32, .18); }
.status-dot.is-off { background: var(--red); }
.gpu-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 10px;
  align-items: flex-end;
  overflow: visible;
  padding-bottom: 0;
}
.gpu-cell {
  min-width: 44px;
  background: transparent;
  border: none;
  border-radius: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0;
  align-items: center;
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.gpu-top { display: none; }
.hex-idx { display: none; }
.gpu-util {
  font-size: 10px;
  font-weight: 700;
  color: var(--orange);
  line-height: 1.2;
}
.gpu-hs {
  font-size: 12px;
  font-weight: 600;
  color: #9ecbff;
  line-height: 1.25;
  font-family: var(--sans);
}
.gpu-temp {
  font-size: 11px;
  font-weight: 700;
  line-height: 1.2;
}
.gpu-sub { display: none; }
.gpu-model {
  flex-basis: 100%;
  color: var(--muted);
  font-size: 10px;
  margin-top: -2px;
}
.t-cool .gpu-temp, .t-cool { color: var(--green); }
.t-ok .gpu-temp, td.t-ok { color: #b6e38a; }
.t-warm .gpu-temp, td.t-warm { color: var(--amber); }
.t-hot .gpu-temp, td.t-hot { color: var(--red); }
.gpu-cell.is-dead .gpu-hs { color: var(--red); }
.rig-total { text-align: left; }
.rig-total b { font-size: 26px; line-height: 1; font-weight: 500; letter-spacing: -0.02em; }
.rig-total small { color: var(--muted); font-size: 11px; font-weight: 600; }
.rig-meta {
  display: flex;
  flex-direction: column;
  gap: 2px;
  align-items: flex-end;
  color: var(--muted);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
.rig-flags { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 12px 8px 14px; }
.flag {
  font-style: normal;
  font-size: 11px;
  border-radius: 4px;
  padding: 1px 6px;
  background: #2c3544;
  color: var(--muted);
}
.flag-hot, .flag-zero { background: rgba(255, 93, 115, .16); color: #ffb3c0; }
.flag-offline, .flag-stale, .flag-reject, .flag-miner, .flag-noflight, .flag-la { background: rgba(255, 193, 77, .14); color: var(--amber); }
.flag-ok { background: rgba(62, 224, 162, .14); color: var(--green); }
.flag-igpu {
  background: rgba(255, 138, 61, .18);
  color: #ff9a4d;
  border: 1px solid rgba(255, 138, 61, .45);
}
.flag-board {
  background: rgba(77, 163, 255, .14);
  color: #8ec5ff;
  border: 1px solid rgba(77, 163, 255, .35);
}
.gpu-idline {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 3px;
}
.gpu-idline .gpu-mem { color: var(--text); font-weight: 650; }
.gpu-idline .gpu-dot {
  font-weight: 800;
  font-size: 18px;
  line-height: 1;
  color: var(--text);
  margin: 0 1px;
}
.health-notes ul {
  margin: 6px 0 0;
  padding-left: 18px;
}
.health-notes li { margin: 4px 0; }
tr.is-idle td.muted { color: #8b97a8; }
.num.is-fan-zero { color: #ff9a4d; }
tr.is-igpu td:first-child { color: #ff9a4d; }
.gpu-cell.is-igpu { outline: 1px solid rgba(255, 138, 61, .55); }
.hub-gpu-tile.is-igpu .hub-gpu-tile-util { color: #ff9a4d; }
.hub-gpu-tile.is-igpu { outline: 1px solid rgba(255, 138, 61, .55); padding: 2px 4px; }
.bulk-bar {
  position: sticky;
  top: 74px;
  z-index: 4;
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  background: #1a2430;
  border: 1px solid rgba(62, 224, 162, .35);
  border-radius: 12px;
  padding: 8px;
  margin-bottom: 10px;
}
.check-inline { display: flex; gap: 6px; align-items: center; color: var(--muted); font-size: 13px; }

.table-scroll { overflow-x: auto; }
table.grid { width: 100%; border-collapse: collapse; }
table.grid th, table.grid td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--line); white-space: nowrap; }
table.grid th { color: var(--muted); font-size: 12px; font-weight: 600; }
tr.is-offline { opacity: .65; }
tr.is-lost { opacity: 1; }
.telemetry-note { margin: 0 0 8px; font-size: 12px; }
tr.row-dead td:nth-child(9), tr.row-dead { background: rgba(255, 93, 115, .06); }

.worker-head { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; flex-wrap: wrap; }
.hero-actions, .row-actions, .inline-form { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.hero-line { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.hero-nums { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 6px; }
.hero-nums b { font-family: var(--mono); font-size: 28px; display: block; }
.hero-nums span { color: var(--muted); font-size: 12px; }
.tabs { display: flex; gap: 6px; flex-wrap: wrap; margin: 16px 0; }
.tabs a { color: var(--text); padding: 8px 12px; border-radius: 999px; background: var(--card); border: 1px solid var(--line); }
.tabs a.is-on { color: var(--green); border-color: var(--green); }
.back { margin-top: 0; }
.log {
  background: #10141b;
  border-radius: 12px;
  padding: 12px;
  overflow: auto;
  max-height: 320px;
  font-family: var(--mono);
  font-size: 12px;
  line-height: 1.45;
  white-space: pre-wrap;
}
.cmd-list, .journal, .issue-list, .token-list, .flight-apply { list-style: none; padding: 0; margin: 0; }
.cmd-list li, .journal li, .issue-list li, .token-list li, .flight-apply li {
  padding: 8px 0;
  border-bottom: 1px solid var(--line);
}
.journal { display: flex; flex-direction: column; }
.journal li { display: grid; grid-template-columns: 96px 140px minmax(0, 1fr); gap: 10px; }
.journal li > b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.journal li > span { min-width: 0; overflow-wrap: anywhere; }
.ev-code {
  font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace; font-size: 12px;
  padding: 1px 5px; border-radius: 5px; background: rgba(127, 140, 160, .16); color: var(--text);
}
.ev-st { font-style: normal; font-size: 12px; color: var(--muted); }
.ev-st-выполнено { color: var(--green); }
.ev-st-ошибка { color: var(--red); }
.ev-cmd { white-space: pre-line; }
.ev-cmd .ev-pre { white-space: pre-wrap; }
.ev-pre {
  margin: 6px 0 0; padding: 7px 9px; border-radius: 8px; background: rgba(127, 140, 160, .12);
  font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", monospace; font-size: 12px;
  line-height: 1.45; white-space: pre-wrap; word-break: break-all; max-height: 9.5em; overflow: auto;
}
.journal time, .journal b { font-size: 13px; }
.lvl-warn span { color: var(--amber); }
.lvl-crit span { color: #ffb3c0; }
.issue-list li { display: flex; justify-content: space-between; gap: 8px; align-items: center; }
.kv { display: grid; gap: 10px; }
.kv > div { display: flex; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--line); padding-bottom: 8px; }
.kv-mini { display: grid; gap: 6px; margin: 0 0 10px; }
.kv-mini div { display: grid; grid-template-columns: 110px 1fr; gap: 8px; }
.kv-mini dt { color: var(--muted); }
.kv-mini dd { margin: 0; }
.flight-card details { margin-bottom: 8px; }
.flight-server { margin: 0 0 12px; }
.flight-apply li, .token-list li { display: flex; justify-content: space-between; gap: 12px; align-items: center; }
.flight-apply li.is-current { outline: 1px solid rgba(62, 224, 162, .4); border-radius: 10px; padding: 8px; }
.flight-apply span, .token-list code { display: block; color: var(--muted); font-size: 13px; }
.pill { border: 1px solid var(--line); border-radius: 999px; padding: 2px 8px; color: var(--muted); font-size: 12px; }
.steps { margin: 0 0 14px 18px; color: var(--muted); line-height: 1.45; }
.steps li { margin-bottom: 6px; }
.steps b { color: var(--text); }

/* Карточка воркера */
.hub-shell {
  background: #1a1f28;
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 12px 14px;
  margin-bottom: 10px;
}
.hub-top {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}
.hub-top-left, .hub-top-right {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
}
.hub-top-right { color: var(--muted); font-family: var(--mono); font-size: 13px; }
.hub-miner {
  display: grid;
  grid-template-columns: minmax(200px, 320px) minmax(0, 1fr);
  gap: 16px;
  align-items: center;
  background: #12171f;
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 12px 14px;
  min-height: 88px;
}
.hub-miner-meta { min-width: 0; }
.hub-miner-name {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: baseline;
  margin-bottom: 6px;
}
.hub-miner-name b { color: #9fd0ff; }
.hub-uptime {
  color: var(--green);
  font-family: var(--mono);
  font-size: 12px;
}
.hub-uptime.is-off { color: var(--red); }
.hub-miner-coin { display: flex; gap: 8px; flex-wrap: wrap; color: var(--muted); font-size: 13px; }
.hub-coin, .hub-algo {
  color: #f0d27a;
  font-weight: 650;
  letter-spacing: .04em;
}
.hub-pool { text-transform: lowercase; }
.hub-hash {
  text-align: right;
  padding: 0 4px;
}
.hub-hash b {
  display: block;
  font-family: var(--sans);
  font-size: 28px;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.04em;
  color: #fff;
}
.hub-hash span { color: var(--muted); font-size: 12px; }
.hub-gpu-tiles {
  display: flex;
  gap: 10px;
  justify-content: flex-start;
  align-items: stretch;
  overflow-x: auto;
  width: 100%;
  min-height: 72px;
  padding: 2px 4px;
}
.hub-gpu-tile {
  flex: 0 0 auto;
  width: 74px;
  min-height: 72px;
  background: #1a2030;
  border: 1px solid rgba(255, 255, 255, .08);
  border-radius: 10px;
  padding: 10px 8px 9px;
  text-align: center;
  font-variant-numeric: tabular-nums;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2px;
}
.hub-gpu-tile-temp {
  font-size: 13px;
  font-weight: 650;
  color: var(--muted);
  line-height: 1.2;
}
.hub-gpu-tile-temp.t-ok,
.hub-gpu-tile-temp.t-cool { color: #9fb0c7; }
.hub-gpu-tile-temp.t-warm { color: var(--amber); }
.hub-gpu-tile-temp.t-hot { color: var(--red); }
.hub-gpu-tile-fan {
  display: block;
  margin: 4px auto;
  width: fit-content;
  min-width: 46px;
  padding: 4px 9px;
  border-radius: 7px;
  font-size: 13px;
  font-weight: 750;
  line-height: 1.2;
  background: var(--blue);
  color: #0c1420;
}
.hub-gpu-tile-fan.t-ok { background: var(--blue); color: #0c1420; }
.hub-gpu-tile-fan.t-warm { background: var(--amber); color: #1a1204; }
.hub-gpu-tile-fan.t-hot { background: var(--red); color: #fff; }
.hub-gpu-tile-fan.t-na { background: #2a3342; color: var(--muted); }
.hub-gpu-tile-hs {
  font-size: 13px;
  font-weight: 650;
  color: var(--text);
  line-height: 1.2;
}
.hub-gpu-tile.is-dead {
  border-color: rgba(255, 93, 115, .55);
}
.hub-gpu-tile.is-offline .hub-gpu-tile-hs,
.hub-gpu-tile.is-offline .hub-gpu-tile-temp {
  color: var(--muted);
}
.hub-meta-line {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
  margin-top: 10px;
  color: var(--muted);
  font-size: 12px;
}
.hub-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  margin: 12px 0 8px;
  position: relative;
  z-index: 3;
}
.chart-wrap {
  max-height: 140px;
  overflow: hidden;
}
.chart-wrap svg {
  max-height: 110px;
}
.hub-actions-main {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
}
.hub-actions form,
.hub-term-actions form {
  margin: 0;
  display: inline-flex;
  align-items: center;
}
.hub-actions .btn,
.hub-term-actions .btn {
  min-height: 36px;
  padding: 8px 14px;
  white-space: nowrap;
}
.power-menus { display: flex; gap: 8px; align-items: flex-start; flex-wrap: wrap; }
.power-drop { position: relative; }
.power-drop > summary {
  list-style: none;
  cursor: pointer;
}
.power-drop > summary::-webkit-details-marker { display: none; }
.power-drop-list {
  position: absolute;
  right: 0;
  top: calc(100% + 6px);
  z-index: 8;
  min-width: 240px;
  padding: 6px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #171a21;
  box-shadow: var(--shadow);
}
.power-drop-list form { display: block; width: 100%; }
.power-drop-item {
  display: block;
  width: 100%;
  text-align: left;
  font: inherit;
  color: var(--text);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 8px;
  padding: 8px 10px;
  cursor: pointer;
}
.power-drop-item:hover { background: rgba(255,255,255,.06); }
.power-drop-item.is-danger { color: #ff8a9a; }
.reboot-form {
  display: inline-flex;
  gap: 8px;
  align-items: center;
  flex-wrap: nowrap;
  margin: 0;
  padding: 4px 8px 4px 10px;
  border: 1px dashed rgba(255, 93, 115, .45);
  border-radius: 12px;
  background: rgba(109, 36, 51, .18);
}
.reboot-check {
  display: inline-flex;
  gap: 6px;
  align-items: center;
  color: var(--muted);
  font-size: 12px;
  white-space: nowrap;
  margin: 0;
  cursor: pointer;
}
.reboot-check input { margin: 0; }
.hub-term { background: #0d1117; border-color: #243041; }
.hub-term .card-head h2 { font-family: var(--mono); letter-spacing: .02em; }
.hub-term-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
  margin-bottom: 10px;
}
.hub-term-body {
  border: 1px solid #243041;
  border-radius: 10px;
  background: #080b10;
  padding: 10px;
  min-height: 280px;
  max-height: min(62vh, 640px);
  overflow-x: hidden;
  overflow-y: auto;
}
.hub-term-meta {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  font-family: var(--mono);
  font-size: 12px;
  color: var(--muted);
  margin-bottom: 8px;
}
.hub-term-meta .ok { color: var(--green); }
.hub-term-meta .lost { color: var(--amber); }
.hub-term-meta .bad { color: #ff8fa3; }
.hub-term-actions .check-inline {
  margin-left: auto;
  color: var(--muted);
  font-size: 12px;
}
.hub-term-log {
  margin: 0;
  max-height: min(56vh, 520px);
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-word;
  font-family: ui-monospace, "Cascadia Mono", Consolas, monospace;
  font-size: 12px;
  line-height: 1.45;
  color: #d7e8ff;
  scroll-behavior: auto;
}
.reconnect-steps {
  margin: 8px 0 12px 1.2em;
  padding: 0;
  color: var(--text);
  line-height: 1.45;
}
.reconnect-steps li { margin: 4px 0; }
.hub-term-history { margin-top: 12px; display: grid; gap: 8px; }
.hub-term-cmd {
  border-top: 1px solid #243041;
  padding-top: 8px;
}
.hub-term-cmd-head {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: baseline;
  font-family: var(--mono);
  font-size: 12px;
  margin-bottom: 4px;
}
.hub-term-mark {
  flex: none;
  width: 1.1em;
  font-weight: 700;
  line-height: 1;
}
.hub-term-mark.ok { color: var(--green); }
.hub-term-mark.bad { color: var(--red); }
.hub-term-mark.wait { color: var(--amber); }
.hub-term-cmd pre {
  margin: 0;
  white-space: pre-wrap;
  word-break: break-word;
  font-family: var(--mono);
  font-size: 12px;
  color: #b7c7da;
  overflow: visible;
}
.hub-term-cmd.is-bad pre { color: #ffb3c0; }
.hub-term-cmd.is-wait pre { color: #c9b38a; }
.hub-term-input {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 8px;
  align-items: center;
  margin-top: 12px;
}
.hub-term-input .prompt {
  font-family: var(--mono);
  color: var(--green);
  font-weight: 700;
}
.hub-term-input input[type="text"], .hub-term-input textarea {
  width: 100%;
  font: inherit;
  font-family: var(--mono);
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid #243041;
  background: #080b10;
  color: var(--text);
}
@media (max-width: 700px) {
  .hub-term-input { grid-template-columns: auto 1fr; }
  .hub-term-input button { grid-column: 1 / -1; }
}
.hub-tabs {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.hub-tabs-links { display: flex; flex-wrap: wrap; align-items: center; }
.hub-tabs a { border-radius: 0; background: transparent; border: none; border-bottom: 2px solid transparent; }
.hub-tabs a.is-on { border-radius: 0; background: transparent; border-bottom-color: var(--blue); color: var(--blue); }
.gpu-view-switch { display: flex; gap: 4px; margin-left: auto; }
.icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  padding: 0;
  border-radius: 8px;
  border: 1px solid transparent;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
}
.icon-btn:hover { color: #fff; background: rgba(255,255,255,.06); }
.icon-btn.is-on { color: var(--blue); border-color: rgba(77, 163, 255, .35); background: rgba(77, 163, 255, .12); }
.gpu-view-cards { display: none; }
body.gpu-view-cards .gpu-view-cards { display: grid; }
body.gpu-view-cards .gpu-view-rows { display: none; }
.gpu-edit { width: 36px; text-align: right; }
.gpu-edit-cell {
  white-space: nowrap;
}
.gpu-edit-cell .icon-btn {
  margin-left: 6px;
  vertical-align: middle;
}
.hub-gpu-card header .icon-btn { margin-left: auto; }
.gpu-oc-dialog {
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--card);
  color: var(--text);
  padding: 16px 18px;
  width: min(560px, 96vw);
  max-height: 92vh;
  overflow: auto;
}
.gpu-oc-dialog::backdrop { background: rgba(0,0,0,.55); }
.gpu-oc-dialog form { display: grid; gap: 10px; }
.gpu-oc-hint { margin: 0; font-size: 12px; }
.gpu-oc-dialog label { display: grid; gap: 4px; color: var(--muted); font-size: 12px; }
.gpu-oc-dialog input[type="number"],
.gpu-oc-dialog input[type="text"] { padding: 8px 10px; border-radius: 8px; border: 1px solid #243041; background: #121821; color: var(--text); }
.gpu-oc-fan {
  border: 1px solid #243041;
  border-radius: 8px;
  padding: 10px;
}
.gpu-oc-fan legend { color: var(--text); font-size: 13px; padding: 0 6px; }
.gpu-oc-flags {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px 14px;
}
.gpu-oc-flags label {
  display: flex;
  align-items: center;
  gap: 8px;
  grid-template-columns: none;
}
.gpu-oc-actions { display: flex; gap: 8px; justify-content: flex-end; }
.hub-panel { margin-bottom: 12px; }
.hub-gpu-table .hash-cell { color: #d7e8ff; font-weight: 650; }
.hub-gpu-table .gpu-status-col {
  width: 52px;
  text-align: center;
  color: var(--muted);
  font-weight: 600;
  text-transform: lowercase;
}
.gpu-status-cell {
  text-align: center;
  vertical-align: middle;
  width: 52px;
}
.link-lost-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--amber);
  line-height: 0;
}
.link-lost-icon .link-lost-wave { color: var(--amber); }
.link-lost-icon .link-lost-x { color: var(--text); }
.link-lost-icon:hover { color: #ffc14d; }
.link-dead-icon {
  display: inline-grid;
  place-items: center;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: rgba(255, 93, 115, .16);
  color: var(--red);
  font-weight: 800;
  font-size: 12px;
}
.hub-gpu-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
  margin: 0 0 14px;
}
.hub-gpu-card {
  background: #121821;
  border: 1px solid #243041;
  border-left-width: 4px;
  border-radius: 10px;
  padding: 10px 12px 8px;
}
.hub-gpu-card.t-cool, .hub-gpu-card.t-ok { border-left-color: #3ee0a2; }
.hub-gpu-card.t-warm { border-left-color: #ffc14d; }
.hub-gpu-card.t-hot, .hub-gpu-card.is-dead { border-left-color: #ff5d73; }
.hub-gpu-card.is-igpu { border-left-color: #ff9a4d; }
.hub-gpu-card header {
  display: flex;
  gap: 6px;
  align-items: center;
  flex-wrap: wrap;
  font-size: 13px;
}
.hub-gpu-card-hash {
  font-size: 28px;
  font-weight: 800;
  letter-spacing: -0.04em;
  line-height: 1.1;
  margin: 8px 0 6px;
}
.hub-gpu-card-hash small {
  margin-left: 6px;
  font-size: 12px;
  font-weight: 600;
  color: var(--muted);
}
.hub-gpu-card dl {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 6px;
  margin: 0 0 6px;
}
.hub-gpu-card dt {
  font-size: 10px;
  color: var(--muted);
}
.hub-gpu-card dd {
  margin: 0;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
  font-size: 13px;
}
.hub-gpu-card.is-igpu dd, .hub-gpu-card.is-igpu .hub-gpu-card-hash { color: #8b97a8; }
@media (max-width: 700px) {
  .hub-gpu-card dl { grid-template-columns: repeat(3, 1fr); }
}
.hub-footer {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  padding: 10px 4px 0;
  color: var(--muted);
  font-size: 12px;
  font-family: var(--mono);
  border-top: 1px solid var(--line);
  margin-top: 4px;
}
@media (max-width: 1100px) {
  .hub-miner { grid-template-columns: 1fr; min-height: 0; }
  .hub-gpu-tiles { justify-content: flex-start; width: 100%; }
  .hub-hash { border: none; text-align: left; padding: 0; }
}
.stack-form, .oc-form { display: flex; flex-direction: column; gap: 10px; }
.stack-form label { display: flex; flex-direction: column; gap: 4px; color: var(--muted); font-size: 13px; }
.wallet-form input, .wallet-form select { width: 100%; }
.wallet-form > .btn {
  align-self: flex-start;
  width: auto;
  margin-top: 2px;
}
.wallet-del { margin-top: 8px; }
.stat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.chart-wrap svg { width: 100%; height: auto; display: block; }
.chart-area { fill: rgba(77, 163, 255, .16); }
.chart-line { fill: none; stroke: var(--blue); stroke-width: 2.5; }
.chart-scale { display: flex; justify-content: space-between; color: var(--muted); font-size: 12px; font-family: var(--mono); }
.modal {
  border: 1px solid var(--line);
  border-radius: 16px;
  background: var(--card);
  color: var(--text);
  padding: 16px;
  width: min(420px, calc(100% - 24px));
}
.modal::backdrop { background: rgba(0,0,0,.55); }
.modal select { width: 100%; margin: 8px 0 12px; }

.login-body {
  min-height: 100vh;
  display: grid;
  place-items: center;
  background: #12141a;
  font-family: var(--sans);
}
.login-card {
  position: relative;
  width: min(420px, calc(100% - 28px));
  background: rgba(22, 28, 36, .94);
  border: 1px solid var(--line);
  border-radius: 20px;
  padding: 22px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  box-shadow: var(--shadow);
}
.login-card img { width: min(240px, 100%); height: auto; display: block; margin: 0 auto 2px; }
.login-title { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
.login-card label { display: flex; flex-direction: column; gap: 6px; color: var(--muted); }
.login-card input { font: inherit; padding: 10px; border-radius: 10px; border: 1px solid var(--line); background: #10141b; color: var(--text); }

@media (max-width: 1280px) {
  .page-split { grid-template-columns: minmax(0, 1fr) 240px; gap: 12px; }
}
@media (max-width: 1100px) {
  .page-split { grid-template-columns: 1fr; }
  .page-aside { position: static; }
  .rig-row { grid-template-columns: 1fr; }
  .miner-box, .gpu-row, .rig-total, .rig-meta, .rig-tiles { grid-column: 1; }
  .rig-total, .rig-meta { text-align: left; align-items: flex-start; }
  .split, .stat-grid, .journal li { grid-template-columns: 1fr; }
}
@media (max-width: 800px) {
  .burger { display: inline-flex; }
  .sidebar {
    position: fixed;
    z-index: 20;
    transform: translateX(-105%);
    transition: transform .2s ease;
  }
  .nav-toggle:checked ~ .shell .sidebar { transform: none; }
  .metric b, .hero-nums b, .rig-total b { font-size: 20px; }
  .page { padding: 14px 12px 36px; }
}

/* Автообновление страницы (часики в шапке) */
.refresh { position: relative; display: flex; align-items: center; gap: 2px; order: 2; flex: none; }
.refresh button { display: flex; align-items: center; gap: 5px; background: transparent; border: 0; color: var(--blue); font: 600 13px var(--sans); padding: 6px 8px; border-radius: 6px; cursor: pointer; }
.refresh button:hover { background: var(--card-2); }
.refresh-now.is-spin svg { animation: refresh-spin .6s linear; }
@keyframes refresh-spin { to { transform: rotate(360deg); } }
.refresh-menu { position: absolute; top: 100%; right: 0; z-index: 20; margin: 4px 0 0; padding: 4px 0; list-style: none; min-width: 150px; background: var(--card); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); }
.refresh-menu li { padding: 9px 16px; color: var(--text); font-size: 14px; cursor: pointer; white-space: nowrap; }
.refresh-menu li:hover { background: var(--card-2); }
.refresh-menu li.is-active { color: var(--blue); }

/* Цвет карты по производителю: AMD — красные, NVIDIA — зелёные */
.gpu-brand { font-weight: 650; }
.brand-amd { color: #f0544a; }
.brand-nvidia { color: #76b900; }
.brand-intel { color: #4da3ff; }

/* Номер карты — мелко и приглушённо, главное — модель */
.gpu-idx { font-size: 11px; font-weight: 600; color: var(--muted); margin-right: 2px; letter-spacing: .02em; }

/* Кнопка «Копировать» у каждого вывода Shell */
.hub-term-cmd-head { display: flex; align-items: center; gap: 8px; }
.hub-term-cmd-head .btn-copy { margin-left: auto; padding: 2px 9px; font-size: 12px; }

/* Монета в шапке рига: значок + название, тикер и алгоритм мелко */
.hub-coin { display: inline-flex; align-items: center; gap: 6px; }
.coin-icon { width: 18px; height: 18px; flex: none; }
.hub-algo-small { color: var(--muted); font-size: 11px; letter-spacing: .02em; align-self: center; }
/* Плитки карт компактнее */
.hub-gpu-tiles { gap: 6px; min-height: 0; }
.hub-gpu-tile { width: 58px; min-height: 0; padding: 6px 4px; border-radius: 8px; gap: 1px; }
.hub-gpu-tile-temp { font-size: 12px; }
.hub-gpu-tile-fan { margin: 2px auto; min-width: 38px; padding: 2px 6px; font-size: 12px; border-radius: 5px; }
.hub-gpu-tile-hs { font-size: 12px; }

/* Меню управления в правом верхнем углу шапки воркера */
.topbar-actions { display: flex; align-items: center; order: 1; padding-left: 8px; border-left: 1px solid var(--line); }
.rig-menu { position: relative; z-index: 9; }
.rig-menu-btn {
  display: flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 8px;
  color: var(--blue); background: transparent; border: 1px solid transparent;
}
.rig-menu-btn:hover, .rig-menu[open] .rig-menu-btn { background: var(--card-2); border-color: var(--line); }
.power-drop-head { padding: 6px 10px 2px; color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .06em; }
.power-drop-head ~ .power-drop-head { margin-top: 4px; border-top: 1px solid var(--line); padding-top: 8px; }

.rig-miner-form { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 0 0 14px; padding-bottom: 14px; border-bottom: 1px solid var(--line); }
.rig-miner-form select { min-width: 260px; }

/* Сводка: ферма */
.hex b small { font-size: 13px; color: var(--muted); font-weight: 600; }
.hex-power b i { color: var(--blue); font-style: normal; margin-right: 4px; }
.hex-coin { display: inline-flex; align-items: center; gap: 5px; }
.hex-coin .coin-icon { width: 14px; height: 14px; }
.farm-list { margin: 0 0 16px; }
.farm-list-title { font-size: 15px; margin: 0 0 8px; }
.farm-row {
  display: flex; flex-wrap: wrap; align-items: center; gap: 12px 28px;
  padding: 14px 16px; border: 1px solid var(--line); border-radius: 12px;
  background: var(--card); color: var(--text); text-decoration: none;
}
.farm-row:hover { border-color: var(--blue); }
.farm-row.is-static:hover { border-color: var(--line); }
#farm-top > .farm-row { margin-bottom: 12px; }
#farm-events { margin-top: 12px; }
.farm-row-name { flex: 0 0 100%; font-size: 15px; }
.farm-row-stats { display: flex; flex-wrap: wrap; gap: 12px 24px; }
.farm-row-right { margin-left: auto; }
.farm-stat { display: flex; flex-direction: column; gap: 2px; }
.farm-stat b { font-size: 20px; font-variant-numeric: tabular-nums; }
.farm-stat b small { font-size: 12px; color: var(--muted); font-weight: 600; }
.farm-stat > span { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .05em; }
.farm-stat.is-bad b { color: var(--red); }
.farm-power b { color: var(--blue); }
.farm-dots { display: flex; gap: 3px; margin-top: 3px; }
.farm-dots em { width: 8px; height: 8px; border-radius: 2px; background: #3a4352; }
.farm-dots em.is-on { background: var(--green, #3ecf6e); }
/* Строка рига в списке: плитки карт справа */
.rig-coin { display: inline-flex; align-items: center; gap: 5px; }
.rig-coin b, .rig-watts { color: var(--text); }
.rig-tiles { display: flex; gap: 4px; flex-wrap: wrap; text-decoration: none; }
.rig-tiles .hub-gpu-tile { width: 46px; padding: 4px 2px; }
/* Полоса хешрейта на странице рига */
.hash-band { display: flex; align-items: stretch; gap: 14px; margin: 0 0 10px; padding: 10px 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--card); }
.hash-band-chart { flex: 1; min-width: 0; height: 56px; display: flex; align-items: center; }
.hash-band-chart svg { width: 100%; height: 100%; display: block; }
.hash-band-now { display: flex; flex-direction: column; justify-content: center; align-items: flex-end; min-width: 130px; }
.hash-band-now span { color: var(--green, #3ecf6e); font-size: 11px; text-transform: uppercase; letter-spacing: .08em; }
.hash-band-now b { color: var(--green, #3ecf6e); font-size: 22px; font-variant-numeric: tabular-nums; }
.hash-band-now b small { font-size: 12px; }

/* Точка связи: по центру строки, онлайн — мигает */
.hub-top-left .status-dot, .status-dot.is-on { margin-top: 0; align-self: center; }
.rig-id .status-dot { align-self: center; }
.status-dot.is-on { animation: dot-pulse 1.6s ease-in-out infinite; }
@keyframes dot-pulse {
  0%, 100% { box-shadow: 0 0 0 2px rgba(62, 207, 142, .35); opacity: 1; }
  50% { box-shadow: 0 0 0 6px rgba(62, 207, 142, 0); opacity: .55; }
}
@media (prefers-reduced-motion: reduce) { .status-dot.is-on { animation: none; } }

/* Полётные листы */
.fs-note { display: inline-block; margin: 0 0 12px; padding: 8px 12px; border-radius: 8px; background: var(--card); border: 1px solid var(--line); color: var(--muted); font-size: 13px; }
.fs-card { background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; margin-bottom: 20px; }
.fs-card-head h2 { font-size: 15px; margin: 0 0 12px; }
.fs-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; padding-bottom: 14px; border-bottom: 1px solid var(--line); }
.fs-field { display: flex; flex-direction: column; gap: 4px; padding: 8px 10px; border-radius: 8px; background: #12141a; border: 1px solid var(--line); }
.fs-field > span { color: var(--muted); font-size: 12px; }
.fs-field select, .fs-field input { background: transparent; border: 0; color: var(--text); font: inherit; padding: 2px 0; outline: none; width: 100%; }
.fs-field select option { background: #12141a; }
.fs-field:focus-within { border-color: var(--blue); }
.fs-bottom { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: flex-start; margin-top: 14px; }
.fs-name { flex: 0 1 460px; min-width: 240px; }
.fs-more { margin-left: auto; }
.fs-more summary { cursor: pointer; color: var(--blue); font-size: 13px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 8px; list-style: none; }
.fs-more summary::-webkit-details-marker { display: none; }
.fs-more-body { display: grid; gap: 8px; margin-top: 8px; min-width: 280px; }
.fs-hint { margin: 10px 0 0; font-size: 12px; }
.fs-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; }
.fs-title { font-size: 15px; margin: 0 0 10px; }
.fs-chips { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
.fs-chip-row { display: flex; flex-wrap: wrap; gap: 6px; }
.fs-chip-row:empty { display: none; }
.fs-chip { display: inline-flex; align-items: center; gap: 6px; padding: 4px 9px; border-radius: 6px; border: 1px solid var(--line); background: var(--card); color: var(--text); font: 12px var(--sans); cursor: pointer; }
.fs-chip:hover { border-color: var(--blue); }
.fs-chip.is-on { background: rgba(77, 163, 255, .16); border-color: var(--blue); color: var(--blue); }
.fs-chip .coin-icon { width: 14px; height: 14px; }
.fs-ico { font-style: normal; color: var(--muted); }
.fs-list { display: flex; flex-direction: column; gap: 6px; }
.fs-row { background: var(--card); border: 1px solid var(--line); border-radius: 10px; }
.fs-row[hidden] { display: none; }
.fs-row > summary { display: grid; grid-template-columns: minmax(160px, 1.2fr) minmax(120px, 1fr) minmax(120px, 1fr) minmax(150px, 1fr) 70px 36px; gap: 10px; align-items: center; padding: 10px 12px; cursor: pointer; list-style: none; }
.fs-row > summary::-webkit-details-marker { display: none; }
.fs-row[open] { border-color: var(--blue); }
.fs-coin { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.fs-coin b { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; }
.fs-coin small { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fs-cell { font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fs-miner { display: inline-flex; align-items: center; gap: 5px; }
.fs-vendor { font-style: normal; font-size: 10px; font-weight: 700; }
.fs-vendor-N { color: #76b900; }
.fs-vendor-A { color: #ed1c24; }
.fs-rigs { display: flex; align-items: center; justify-content: center; align-self: stretch; }
.fs-applied { display: inline-flex; align-items: center; gap: 5px; color: #8dc63f; font-weight: 600; font-size: 13px; }
.fs-dots { justify-self: end; color: var(--muted); letter-spacing: 1px; padding: 2px 8px; border-radius: 6px; background: #12141a; }
.fs-row-body { border-top: 1px solid var(--line); padding: 12px; display: grid; gap: 12px; }
.fs-row-info { display: grid; gap: 4px; font-size: 13px; }
.fs-row-info code { word-break: break-all; }
.fs-apply, .fs-row-actions, .fs-server { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.fs-row-actions { justify-content: space-between; }
.fs-server select { font: inherit; color: var(--text); background: #12141a; border: 1px solid var(--line); border-radius: 8px; padding: 7px 10px; }
@media (max-width: 900px) {
  .fs-grid { grid-template-columns: 1fr 1fr; }
  .fs-row > summary { grid-template-columns: 1fr auto; }
  .fs-row > summary .fs-cell { display: none; }
  .fs-row > summary .fs-miner { display: inline-flex; grid-column: 1; }
}

/* Потребление ↔ оплата за сутки (наведение или касание), розетка вместо молнии */
.hex-power { cursor: default; outline: none; }
.hex-power .plug-ico { color: var(--blue); margin-right: 4px; vertical-align: -2px; }
/* Обе стороны лежат друг на друге: ширина плитки — по большей, при наведении не прыгает. */
.hex-power { display: grid; }
.hex-face { grid-area: 1 / 1; display: flex; flex-direction: column; gap: 2px; }
.hex-power .face-cost { visibility: hidden; }
.hex-power:hover .face-power, .hex-power:focus .face-power { visibility: hidden; }
.hex-power:hover .face-cost, .hex-power:focus .face-cost { visibility: visible; }
.hex-power:hover, .hex-power:focus { border-color: var(--blue); }
.hex-gear { cursor: pointer; align-items: center; justify-content: center; color: var(--muted); font: inherit; min-width: 96px; }
.hex-gear:hover { color: var(--blue); border-color: var(--blue); }
.farm-dialog form { display: grid; gap: 10px; min-width: min(380px, 80vw); }
.farm-dialog label { display: grid; gap: 4px; font-size: 13px; color: var(--muted); }
.farm-dialog input { font: inherit; color: var(--text); background: #12141a; border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; }
.farm-dialog p { margin: 0; font-size: 12px; }

/* Воркеры, вид «Таблица»: рамка, ровные колонки, точка не липнет к имени */
.rig-table-wrap { border: 1px solid var(--line); border-radius: 12px; background: var(--card); }
table.rig-table { table-layout: fixed; }
table.rig-table th { background: #12141a; padding: 10px 12px; }
table.rig-table td { padding: 10px 12px; vertical-align: middle; overflow: hidden; text-overflow: ellipsis; }
table.rig-table tbody tr:last-child td { border-bottom: 0; }
table.rig-table tbody tr:hover td { background: rgba(255, 255, 255, .03); }
table.rig-table .c { text-align: center; }
.rig-table-name { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; }
.rig-table-name .status-dot { margin: 0; }
.rig-table-name + .muted { padding-left: 16px; font-size: 12px; }

/* Шестерёнка настроек фермы — рядом с автообновлением */
.topbar { justify-content: flex-end; }
.topbar-gear { order: 3; display: flex; align-items: center; justify-content: center; width: 34px; align-self: center; height: 34px; border-radius: 8px; border: 0; background: transparent; color: var(--blue); cursor: pointer; }
.topbar-gear:hover { background: var(--card-2); }
/* Плитки карт: всё строго по центру, хешрейт с одним знаком */
.hub-gpu-tile { width: 62px; padding: 6px 5px; align-items: stretch; }
.hub-gpu-tile > * { text-align: center; white-space: nowrap; }
.hub-gpu-tile-fan { margin: 3px 0; width: auto; min-width: 0; }
.rig-tiles .hub-gpu-tile { width: 50px; }

/* CORE/MEM: смещение сверху, фикс. частота мелко снизу */
.oc-cell { line-height: 1.25; }
.oc-lock { display: block; color: var(--muted); font-size: 11px; }

/* Плитки Сводки компактнее; в плитке потребления — содержимое по центру */
.hex { min-width: 0; padding: 10px 14px; }
.hex-power { min-width: 150px; justify-items: center; text-align: center; padding: 10px 18px; }
.hex-power .hex-face { align-items: center; }

/* Подсказки в стиле панели вместо системных (title) */
.mh-tip { position: fixed; z-index: 1000; max-width: 320px; padding: 6px 10px; border-radius: 8px; background: #232a36; border: 1px solid var(--line); color: var(--text); font: 12px/1.35 var(--sans); box-shadow: 0 6px 20px rgba(0,0,0,.35); pointer-events: none; opacity: 0; transform: translateY(2px); transition: opacity .12s, transform .12s; }
.mh-tip.is-on { opacity: 1; transform: none; }
/* Подтверждение действия — окно панели вместо системного confirm */
.mh-confirm { border: 1px solid var(--line); border-radius: 14px; background: var(--card); color: var(--text); padding: 18px 20px; max-width: min(420px, 90vw); box-shadow: 0 12px 40px rgba(0,0,0,.5); }
.mh-confirm::backdrop { background: rgba(5, 8, 12, .6); }
.mh-confirm p { margin: 0 0 16px; font-size: 14px; line-height: 1.45; }
.mh-confirm .row-actions { display: flex; justify-content: flex-end; gap: 8px; }

/* Фитиль автообновления вокруг «30s» */
.refresh-pick { position: relative; }
.refresh-fuse { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; display: none; }
.refresh-pick.has-fuse .refresh-fuse { display: block; }
.refresh-fuse rect { width: calc(100% - 2px); height: calc(100% - 2px); fill: none; stroke: var(--blue); stroke-width: 1.5; stroke-dasharray: 100 100; stroke-dashoffset: 0; opacity: .85; }
@keyframes fuse-burn { from { stroke-dashoffset: 0; } to { stroke-dashoffset: 100; } }
@media (prefers-reduced-motion: reduce) { .refresh-fuse rect { animation: none !important; } }
/* Кнопка интервала одной ширины при любом значении (30s, 1m, Выкл) — рамка не прыгает; часики ближе к цифрам */
.refresh .refresh-pick { width: 72px; justify-content: center; gap: 3px; padding: 6px 4px; }

/* Строки майнеров в форме листа: номер слева, у второй — крестик */
.fs-miner-row { position: relative; padding: 0 0 14px 28px; margin-bottom: 14px; border-bottom: 1px solid var(--line); }
.fs-miner-row[hidden] { display: none; }
.fs-miner-row .fs-grid { padding-bottom: 0; border-bottom: 0; }
.fs-row-num { position: absolute; left: 0; top: 4px; min-width: 18px; height: 18px; border-radius: 4px; background: #12141a; border: 1px solid var(--line); color: var(--muted); font-size: 11px; display: flex; align-items: center; justify-content: center; }
.fs-args { margin-top: 10px; }
.fs-args-hint { color: var(--muted); font-size: 11px; }
.fs-row-del { position: absolute; right: -6px; top: -6px; border: 0; background: transparent; color: var(--muted); cursor: pointer; font-size: 14px; padding: 4px; }
.fs-row-del:hover { color: var(--red); }
.fs-add { margin-left: auto; display: flex; align-items: center; gap: 10px; font-size: 12px; }
.fs-more { margin-top: 10px; }

/* Выпадающие списки панели: майнер со значками карт, локации пула галочками */
.mh-dd { position: relative; width: 100%; }
.mh-dd-btn { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 8px; background: transparent; border: 0; color: var(--text); font: inherit; padding: 2px 0; cursor: pointer; text-align: left; }
.mh-dd-label { display: inline-flex; align-items: center; gap: 6px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mh-dd-label b { font-weight: 500; }
.mh-dd-caret { width: 8px; height: 8px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg) translateY(-3px); flex: none; opacity: .8; }
.mh-dd.is-open .mh-dd-caret { transform: rotate(-135deg) translateY(-1px); }
.mh-dd-list { position: absolute; left: -11px; right: -11px; top: calc(100% + 10px); z-index: 30; padding: 6px; border: 1px solid var(--line); border-radius: 10px; background: #171a21; box-shadow: var(--shadow); max-height: 320px; overflow: auto; }
.mh-dd-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 8px; cursor: pointer; color: var(--text); font-size: 14px; }
.mh-dd-item:hover { background: rgba(255,255,255,.06); }
.mh-dd-item input[type=radio] { display: none; }
.mh-dd-item:has(input[type=radio]:checked) { background: rgba(77,163,255,.14); }
.mh-dd-text { display: inline-flex; align-items: center; gap: 6px; }
.mh-dd-text b { font-weight: 500; }
.mh-dd-item input[type=checkbox] { position: absolute; opacity: 0; pointer-events: none; }
.mh-dd-check { width: 16px; height: 16px; border-radius: 4px; border: 1.5px solid #4a5568; flex: none; display: inline-flex; align-items: center; justify-content: center; }
.mh-dd-item input:checked + .mh-dd-check { background: var(--blue); border-color: var(--blue); }
.mh-dd-item input:checked + .mh-dd-check::after { content: ""; width: 4px; height: 8px; border: solid #0c1420; border-width: 0 2px 2px 0; transform: rotate(45deg) translate(-1px, -1px); }
.mh-dd-note { margin: 6px 10px 4px; color: var(--muted); font-size: 11px; }
.vbadge { font-style: normal; font-size: 10px; font-weight: 700; letter-spacing: .03em; padding: 1px 5px; border-radius: 4px; }
.vbadge-nvidia { color: #76b900; background: rgba(118,185,0,.12); }
.vbadge-amd { color: #ed1c24; background: rgba(237,28,36,.12); }
.fs-field-dd { position: relative; }
.fs-server .mh-dd { width: 260px; padding: 7px 10px; border: 1px solid var(--line); border-radius: 8px; background: #12141a; }

.fs-miner { gap: 6px; flex-wrap: wrap; }
.fs-miner-part { display: inline-flex; align-items: center; gap: 4px; }
.fs-plus { color: var(--muted); }

/* Валюта цены в настройках фермы: переключатель ₽ / $ */
.farm-price-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: 13px; color: var(--muted); }
.seg { display: inline-flex; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; }
.seg label { display: block; margin: 0; cursor: pointer; }
.seg input { position: absolute; opacity: 0; pointer-events: none; }
.seg span { display: block; padding: 4px 10px; font-size: 12px; color: var(--muted); }
.seg input:checked + span { background: var(--blue); color: #0c1420; font-weight: 600; }
.farm-dialog .farm-price { display: block; }
.farm-dialog .farm-price input { width: 100%; }

/* «Редактировать» в меню листа: та же форма, что и при создании */
.fs-edit { border-top: 1px solid var(--line); padding-top: 12px; }
.fs-edit > summary { display: inline-flex; list-style: none; cursor: pointer; }
.fs-edit > summary::-webkit-details-marker { display: none; }
.fs-edit[open] > summary { margin-bottom: 12px; }
.fs-edit .fs-form { padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: rgba(0,0,0,.12); }

/* Таблица карт: TH/s, TEMP, FAN, PWR, CORE, MEM — заголовок и значение по одной оси (по центру). */
.hub-gpu-table th:nth-child(n+2):nth-child(-n+7),
.hub-gpu-table td:nth-child(n+2):nth-child(-n+7) { text-align: center; }

/* Наведение на график хешрейта */
.chart-hover { position: relative; width: 100%; height: 100%; cursor: crosshair; }
.chart-cursor, .chart-dot, .chart-tip { position: absolute; pointer-events: none; display: none; }
.chart-hover.is-hover .chart-cursor, .chart-hover.is-hover .chart-dot, .chart-hover.is-hover .chart-tip { display: block; }
.chart-cursor { top: 0; bottom: 0; width: 1px; background: rgba(255,255,255,.55); }
.chart-dot { width: 9px; height: 9px; margin: -5px 0 0 -5px; border-radius: 50%; background: var(--card); border: 2px solid #ff9a4d; }
.chart-tip { top: 2px; margin-left: 10px; padding: 6px 9px; border-radius: 6px; background: #1b1f27; border: 1px solid var(--line);
  box-shadow: 0 6px 18px rgba(0,0,0,.35); font-size: 12px; line-height: 1.35; white-space: nowrap; z-index: 5; }
.chart-tip.is-left { transform: translateX(calc(-100% - 20px)); }
.chart-tip-day { color: var(--muted); font-size: 11px; }
.chart-tip-time { font-weight: 700; }
.chart-tip-eff { color: var(--muted); font-size: 11px; }
.chart-tip-delta { font-size: 11px; font-weight: 700; color: var(--muted); }
.chart-tip-delta.is-up { color: #3fb950; }
.chart-tip-delta.is-down { color: #ff5d73; }
/* Момент смены разгона на графике — тонкая пунктирная черта */
.chart-oc-mark { position: absolute; top: 0; height: 100%; width: 0; border-left: 1.5px dashed rgba(255, 176, 32, .8); pointer-events: none; z-index: 1; }

/* Риг не в сети: красный счётчик, красные квадратики, последний хешрейт приглушён */
.farm-stat b small.farm-off { color: var(--red); font-size: 13px; font-weight: 700; }
.farm-dots em.is-off { background: transparent; border: 1.5px solid var(--red); }
.lnk-span { font-weight: 700; }
.hash-band-now.is-stale span, .hash-band-now.is-stale b { color: #c8743f; }

/* ===== Телефон: компактнее ===== */
@media (max-width: 700px) {
  .page { padding: 10px 10px 28px; }
  .card { padding: 10px; }
  .card-head { margin-bottom: 6px; }
  .card-head h2 { font-size: 15px; }

  /* Плитки сводки — ровная сетка в 3 колонки, потребление на две */
  .hex-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-auto-flow: dense; gap: 6px; margin: 4px 0 12px; }
  .hex { min-width: 0; padding: 8px 9px; }
  .hex b { font-size: 17px; white-space: nowrap; }
  .hex b small { font-size: 10px; }
  .hex span { font-size: 9.5px; }
  .hex-power { grid-column: span 2; min-width: 0; padding: 8px 9px; }
  .hex .plug-ico { width: 15px; height: 15px; }

  /* Карточка фермы */
  .farm-row { padding: 10px; gap: 8px; }
  .farm-row-stats { gap: 8px 16px; }
  .farm-stat b { font-size: 17px; }

  /* События: время и риг в одну строку, текст ниже */
  .journal li { grid-template-columns: auto 1fr; gap: 2px 10px; padding: 7px 0; }
  .journal li > span { grid-column: 1 / -1; font-size: 13px; }
  .journal time, .journal b { font-size: 12px; }

  /* Воркер в списке: имя слева, хешрейт справа, остальное — короткими строками */
  .rig-list { gap: 8px; }
  .rig-row { grid-template-columns: minmax(0, 1fr) auto; gap: 3px 10px; padding: 9px 11px; }
  .rig-row .rig-id { grid-column: 1; grid-row: 1; }
  .rig-row .rig-total { grid-column: 2; grid-row: 1; display: flex; align-items: baseline; gap: 4px; text-align: right; }
  .rig-row .rig-total b { font-size: 19px; }
  .rig-row .miner-box, .rig-row .rig-meta, .rig-row .rig-tiles { grid-column: 1 / -1; }
  .rig-id strong { display: inline; margin-right: 6px; }
  .miner-box b { display: inline; margin-right: 6px; font-size: 13px; }
  .miner-box span { display: inline; }
  .miner-box span + span::before { content: " · "; }
  .rig-meta { display: flex; flex-wrap: wrap; gap: 2px 10px; font-size: 11px; }
  .rig-meta .rig-coin-main { display: none; }
  .rig-tiles { margin-top: 4px; }
  .rig-tiles .hub-gpu-tile { width: 42px; }
  .rig-flags { padding: 0 11px 8px; }

  /* Страница воркера: вкладки одной строкой с прокруткой */
  .hub-tabs-links { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .hub-tabs-links::-webkit-scrollbar { display: none; }
  .hub-tabs a { white-space: nowrap; padding: 8px 10px; }
  /* Shell на телефоне: поле команды и только нужные кнопки (диагностика, обновить, clinfo, status) */
  .hub-term-head { flex-direction: column; align-items: stretch; gap: 8px; }
  .hub-term-head .hub-term-input { flex: none; min-width: 0; width: 100%; grid-template-columns: auto 1fr auto; margin-top: 0; }
  .hub-term-input button { grid-column: auto; }
  .hub-term-actions { display: flex; flex-wrap: wrap; gap: 6px; }
  .hub-term-input input[type="text"] { min-width: 0; font-size: 16px; }
  .hub-shell { padding: 10px; }
  .hub-miner { padding: 10px; gap: 10px; }
  .hub-meta-line { gap: 4px 12px; font-size: 11px; }
  .hash-band { padding: 8px 10px; }
  .hash-band-now { min-width: 0; }
  .hash-band-now b { font-size: 18px; }
  /* Таблица карт: без второй строки и колонок разгона — влезает в экран */
  .hub-gpu-table .gpu-idline { display: none; }
  .hub-gpu-table th:nth-child(5), .hub-gpu-table td:nth-child(5),
  .hub-gpu-table th:nth-child(6), .hub-gpu-table td:nth-child(6),
  .hub-gpu-table th:nth-child(7), .hub-gpu-table td:nth-child(7),
  .hub-gpu-table .gpu-status-col, .hub-gpu-table .gpu-status-cell { display: none; }
  .hub-gpu-table { min-width: 0; width: 100%; }
  .hub-gpu-table th, .hub-gpu-table td { padding: 6px 4px; font-size: 12px; }
  .hub-gpu-table .gpu-idx { font-size: 10px; }
  .hub-gpu-table .gpu-brand { font-size: 12px; }
  .hub-gpu-table .flag-board { font-size: 9px; padding: 0 3px; }
  .hub-gpu-table td.gpu-edit-cell, .hub-gpu-table th.gpu-edit-cell { width: 30px; padding: 0 2px; }
  .hub-gpu-table td:first-child { white-space: nowrap; }

  /* Полётный лист: поля в одну колонку, без вылезания за экран */
  .fs-grid { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .fs-miner-row { padding-left: 22px; }
  .fs-card, .fs-edit .fs-form { padding: 10px; }
}

/* Телефон: лог и полётные листы рига */
@media (max-width: 700px) {
  .hub-term-body, .hub-term-body pre, .hub-term-body code { font-size: 10.5px; line-height: 1.35; }
  .hub-term-body { padding: 6px; }
  .hub-term-actions { gap: 6px; flex-wrap: wrap; }
  .hub-term-actions .btn { padding: 5px 10px; font-size: 12px; }
  .rig-miner-form select { min-width: 0; width: 100%; }
  .flight-apply li { flex-direction: column; align-items: stretch; gap: 8px; }
  .flight-apply li > div { min-width: 0; }
  .flight-apply span { font-size: 11.5px; overflow-wrap: anywhere; word-break: break-all; }
  .flight-apply form .btn { width: 100%; }
  .card-head { flex-wrap: wrap; }
}

/* Разгон: поля одинаковые и короткие — там 4–5 цифр, не нужна вся ширина */
table.grid.oc-table { width: auto; }
.oc-table th, .oc-table td { padding: 6px 6px; text-align: center; }
.oc-table th:nth-child(2), .oc-table td:nth-child(2) { text-align: left; }
.oc-form .oc-table input[type=number] { width: 76px; padding: 6px 8px; text-align: center; -moz-appearance: textfield; }
.oc-table input[type=number]::-webkit-outer-spin-button,
.oc-table input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.oc-form > .btn { align-self: flex-start; min-width: 200px; }
@media (max-width: 700px) {
  .oc-table th:first-child, .oc-table td:first-child, .oc-table .oc-gpu-name { display: none; }
  .oc-table th, .oc-table td { padding: 5px 3px; font-size: 12px; }
  .oc-form .oc-table input[type=number] { width: 58px; padding: 5px 4px; font-size: 13px; }
  .oc-form > .btn { align-self: stretch; }
}

/* Плитка монеты: монета ↔ алгоритм, как розетка ↔ оплата */
.hex-flip { display: grid; cursor: default; outline: none; }
.hex-flip .face-b { visibility: hidden; }
.hex-flip:hover .face-a, .hex-flip:focus .face-a { visibility: hidden; }
.hex-flip:hover .face-b, .hex-flip:focus .face-b { visibility: visible; }
.hex-flip:hover, .hex-flip:focus { border-color: var(--blue); }
@media (max-width: 700px) {
  /* Четыре плитки в ряд: воркеры и GPU узкие, монета и потребление — остальное */
  .hex-row { display: flex; flex-wrap: wrap; gap: 5px; }
  .hex { flex: 0 0 auto; padding: 7px 8px; }
  .hex-coin-tile, .hex-power { flex: 1 1 0; min-width: 0; grid-column: auto; }
  .hex b { font-size: 15px; }
  .hex b small { font-size: 9px; }
  .hex span { font-size: 8.5px; letter-spacing: .02em; }
  .hex .plug-ico { width: 13px; height: 13px; margin-right: 2px; }
  .hex-power { padding: 7px 8px; }
}
.m-hide { font-style: normal; }
@media (max-width: 700px) {
  .m-hide { display: none; }
  .hex span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .hex-power { min-width: 96px; }
  .hex-coin-tile { min-width: 84px; }
}
.hex-flip { justify-items: start; justify-content: start; align-content: center; text-align: left; }
.hex-flip .hex-face { align-items: flex-start; }

/* Проблемная карта: маленький «!» в кружке на углу плитки вместо текста «GPU1 без хеша» */
.hub-gpu-tile { position: relative; overflow: visible; }
.gpu-warn {
  position: absolute; top: -6px; right: -6px; z-index: 1;
  width: 14px; height: 14px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--red); color: #fff;
  font: 800 10px/1 var(--font, inherit); font-style: normal;
  box-shadow: 0 0 0 2px #1e222a, 0 0 8px rgba(255, 93, 115, .55);
  animation: gpu-warn-pulse 2s ease-in-out infinite;
}
@keyframes gpu-warn-pulse { 50% { box-shadow: 0 0 0 2px #1e222a, 0 0 2px rgba(255, 93, 115, .2); } }
@media (prefers-reduced-motion: reduce) { .gpu-warn { animation: none; } }
/* Строка воркера по центру по вертикали, даже без меток снизу */
.rig-row { align-items: center; min-height: 64px; }
.rig-tiles { padding-top: 6px; }
@media (max-width: 700px) {
  /* Все плитки одной ширины: четыре равные колонки (вторая монета переносится в следующий ряд) */
  .hex-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 5px; }
  .hex, .hex-coin-tile, .hex-power { min-width: 0; padding: 7px 7px; }
  .hex b { font-size: 14px; white-space: nowrap; }
  .hex b small { font-size: 8.5px; }
  .hex .plug-ico { width: 12px; height: 12px; margin-right: 1px; }
}
@media (max-width: 700px) {
  /* Плитки: число и подпись по центру, числа во всех плитках на одной линии */
  .hex, .hex-flip, .hex-power { align-items: center; justify-items: center; justify-content: center; text-align: center; }
  .hex-flip .hex-face, .hex-power .hex-face { align-items: center; }
  .hex b { display: flex; align-items: baseline; justify-content: center; gap: 1px; line-height: 1.15; }
  .hex b .plug-ico { align-self: center; }
  .hex > span, .hex-face > span { display: block; margin-top: 2px; }
  .hex-coin { justify-content: center; }

  /* Карточка фермы: два ряда равных колонок, всё по центру */
  .farm-row { flex-direction: column; align-items: stretch; }
  .farm-row-name { text-align: center; }
  .farm-row-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; margin: 0; }
  .farm-row-right { grid-template-columns: repeat(3, minmax(0, 1fr)); padding-top: 8px; border-top: 1px solid var(--line); }
  .farm-stat { align-items: center; text-align: center; min-width: 0; }
  .farm-stat b { font-size: 16px; white-space: nowrap; }
  .farm-stat > span { font-size: 9px; letter-spacing: .02em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
  .farm-stat .hex-coin { justify-content: center; }
  .farm-dots { justify-content: center; }
}
@media (max-width: 700px) {
  .hex { justify-content: flex-start; }
  .hex-flip, .hex-power { align-content: start; }
  .hex b { height: 18px; }
  .hex .coin-icon { width: 11px; height: 11px; }
  .hex-coin { line-height: 1.1; }
}
@media (max-width: 700px) {
  .hex .hex-coin { display: flex; align-items: center; gap: 3px; height: 12px; margin-top: 2px; }
}

/* Шапка: «Меню» слева, остальные кнопки справа, все одной высоты и по центру */
.topbar { align-items: center; }
.burger { margin-right: auto; height: 34px; }
.topbar-actions, .refresh, .topbar-gear { height: 34px; }
.rig-menu-btn { display: flex; align-items: center; justify-content: center; height: 34px; }
/* «30s» уже: меньше воздуха от рамки до часиков и цифр */
.refresh .refresh-pick { width: 58px; height: 30px; gap: 3px; padding: 0 5px; }
/* «!» на плитке не обрезается краем прокручиваемого ряда */
.hub-gpu-tiles { padding: 8px 8px 2px 4px; }
.rig-tiles { padding-top: 7px; padding-right: 7px; }
/* Окно подтверждения: кнопки одинаковой ширины и всегда внутри окна */
.mh-confirm { width: min(360px, 92vw); box-sizing: border-box; }
.mh-confirm .row-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.mh-confirm .row-actions .btn { width: 100%; min-width: 0; justify-content: center; text-align: center; }
@media (min-width: 701px) {
  /* ПК: все плитки сводки одной фиксированной ширины — как «потребление в час», содержимое по центру */
  .hex, .hex-flip, .hex-power { flex: 0 0 172px; width: 172px; min-width: 0; box-sizing: border-box; padding: 10px 12px;
    align-items: center; justify-items: center; justify-content: center; text-align: center; }
  .hex-flip .hex-face, .hex-power .hex-face { align-items: center; }
  .hex b { white-space: nowrap; }
  .hex .hex-coin { display: inline-flex; align-items: center; gap: 4px; }
}

.oc-amd-only[hidden] { display: none !important; }
.oc-volt { display: block; color: #c79bff; font-size: 10.5px; letter-spacing: .02em; }

/* Кнопка разгона карты — спидометр вместо карандаша */
.gauge-ico { display: block; opacity: .85; transition: opacity .15s, transform .15s; }
.icon-btn:hover .gauge-ico, .icon-btn:focus-visible .gauge-ico { opacity: 1; transform: scale(1.08); }
.hub-gpu-table .gpu-edit-cell .icon-btn { width: 34px; }
/* Шапка столбца разгона: спидометр «все» — один разгон на все карты рига. */
.hub-gpu-table .icon-btn.oc-all-btn { flex-direction: column; height: auto; padding: 2px 0; gap: 1px; border-color: rgba(77, 163, 255, .35); }
.oc-all-label { font-size: 9px; line-height: 1; font-weight: 700; color: var(--blue); text-transform: uppercase; letter-spacing: .04em; }

/* Окно разгона карты: два поля в строке, без стрелок у чисел, «!» с подсказкой у названия */
.gpu-oc-dialog { width: min(560px, 94vw); }
.gpu-oc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 12px; }
.gpu-oc-grid label { position: relative; min-width: 0; }
.gpu-oc-dialog input[type=number] { -moz-appearance: textfield; appearance: textfield; }
.gpu-oc-dialog input[type=number]::-webkit-outer-spin-button,
.gpu-oc-dialog input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.fld-name { display: flex; align-items: center; gap: 5px; min-width: 0; white-space: nowrap; }
.fld-tip {
  flex: none; display: inline-grid; place-items: center; width: 1.15em; height: 1.15em; border-radius: 50%;
  background: rgba(77, 163, 255, .14); color: var(--blue); border: 1px solid rgba(77, 163, 255, .55);
  font: 800 10px/1 var(--sans, inherit); font-style: normal; cursor: help; outline: none; margin-left: 4px;
}
.fld-tip:hover, .fld-tip:focus-visible, .fld-tip.is-open { background: var(--blue); color: #fff; }
.fld-tip::after {
  content: attr(data-tip); position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 30;
  padding: 8px 10px; border-radius: 8px; background: #1b1f27; border: 1px solid rgba(77, 163, 255, .45);
  color: var(--text); font: 400 12px/1.4 var(--sans, inherit); white-space: normal; text-align: left;
  box-shadow: 0 8px 22px rgba(0,0,0,.45); display: none; pointer-events: none;
}
.fld-tip:hover::after, .fld-tip:focus-visible::after, .fld-tip.is-open::after { display: block; }
.gpu-oc-flags label { position: relative; }
.gpu-oc-flags label.is-off > input, .gpu-oc-flags label.is-off > .flag-text { opacity: .5; }
@media (max-width: 480px) {
  .gpu-oc-grid { gap: 8px 8px; }
  .fld-name { white-space: normal; font-size: 11px; }
}
.gpu-oc-grid input { width: 100%; min-width: 0; box-sizing: border-box; }
.gpu-oc-flags label { min-width: 0; }

/* Дуальный лист в шапке рига: лёгкая сетка майнер — монета — пул — хешрейт */
.hub-flight-name { margin-bottom: 6px; }
.hub-flight-name b { color: var(--cyan, #7fd4ff); }
.miner-grid { display: grid; grid-template-columns: auto auto auto auto; gap: 0 18px; align-items: center; justify-content: start; font-size: 13px; }
.miner-grid > span { padding: 5px 0; border-bottom: 1px solid rgba(255,255,255,.07); white-space: nowrap; }
.miner-grid .mg-head { padding-top: 0; color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .06em; }
.mg-miner { color: var(--green, #3ecf6e); font-weight: 600; }
.mg-miner small, .mg-coin small, .mg-num small { color: var(--muted); font-weight: 400; font-size: 11px; }
.mg-coin { display: inline-flex; align-items: center; gap: 5px; }
.mg-coin b { color: #f5c518; }
.mg-pool { color: var(--muted); }
.mg-num { text-align: right; }
.mg-num b { color: var(--text); font-variant-numeric: tabular-nums; }
.mg-shares { margin-top: 6px; color: var(--muted); font-size: 12px; }
@media (max-width: 700px) {
  .miner-grid { gap: 0 10px; font-size: 12px; }
  .miner-grid .mg-pool, .miner-grid .mg-head:nth-child(3) { display: none; }
  .miner-grid { grid-template-columns: auto auto auto; }
}
@media (min-width: 1101px) {
  /* Сетка дуал-листа шире, плитки карт — справа от неё, без наложения */
  .hub-miner:has(.miner-grid) { grid-template-columns: max-content minmax(0, 1fr); }
}

/* Подсказка «!» всегда непрозрачная и поверх соседних строк */
.fld-tip::after { background: #1b1f27; opacity: 1; z-index: 60; }
.gpu-oc-flags label:has(.fld-tip.is-open), .gpu-oc-flags label:has(.fld-tip:hover),
.gpu-oc-grid label:has(.fld-tip.is-open), .gpu-oc-grid label:has(.fld-tip:hover) { z-index: 60; }

/* Автовентилятор: кнопка в шапке и окно настроек */
.autofan-btn { background: transparent; border: 0; color: var(--blue); cursor: pointer; padding: 0 6px; }
.autofan-btn:hover { color: #9fd0ff; }
.autofan-btn.is-on { color: var(--green, #3ecf6e); }
.autofan-btn.is-on svg g { transform-origin: 12px 12px; animation: af-spin 3s linear infinite; }
@keyframes af-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .autofan-btn.is-on svg g { animation: none; } }
.autofan-dialog { width: min(480px, 94vw); border: 1px solid var(--line); border-radius: 14px; background: var(--card); color: var(--text); padding: 18px 20px; box-shadow: 0 12px 40px rgba(0,0,0,.5); }
.autofan-dialog::backdrop { background: rgba(5, 8, 12, .6); }
.autofan-dialog h3 { margin: 0 0 14px; }
.af-switch-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 0 12px; margin-bottom: 12px; border-bottom: 1px solid var(--line); font-weight: 600; }
.af-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 12px; }
.af-grid label { display: grid; gap: 4px; color: var(--muted); font-size: 12px; min-width: 0; }
.af-grid input, .af-grid select { width: 100%; min-width: 0; box-sizing: border-box; padding: 8px 10px; border-radius: 8px; border: 1px solid #243041; background: #121821; color: var(--text); font: inherit; }
.af-grid input[type=number] { -moz-appearance: textfield; appearance: textfield; }
.af-grid input[type=number]::-webkit-outer-spin-button, .af-grid input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.af-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 16px; }
/* Переключатель панели: прямоугольный, квадратный бегунок, синий когда включён */
.mh-switch { appearance: none; -webkit-appearance: none; flex: none; position: relative; width: 44px; height: 24px; margin: 0; cursor: pointer;
  border-radius: 7px; background: #1a212c; border: 1px solid #2c3646; transition: background .15s, border-color .15s; }
.mh-switch::before { content: ""; position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 4px; background: #6b7689; transition: transform .15s, background .15s; }
.mh-switch:checked { background: rgba(77, 163, 255, .22); border-color: var(--blue); box-shadow: 0 0 10px rgba(77, 163, 255, .25); }
.mh-switch:checked::before { transform: translateX(20px); background: var(--blue); }
.mh-switch:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }
.af-grid { align-items: end; }

.af-state { color: var(--muted); }
.af-switch-row:has(.mh-switch:checked) .af-state { color: var(--blue); }
/* Шапка: иконки одного размера и с одинаковым шагом */
.topbar { gap: 6px; }
.topbar-actions { gap: 6px; padding-left: 10px; margin-right: 2px; }
.topbar-actions .rig-menu-btn, .topbar-actions .autofan-btn { width: 36px; height: 34px; padding: 0; justify-content: center; }
.autofan-btn svg { width: 25px; height: 25px; }
.rig-menu-btn svg { width: 22px; height: 22px; }
.refresh { gap: 6px; }
.refresh .refresh-now { width: 34px; height: 34px; justify-content: center; padding: 0; }
.topbar-gear { width: 34px; }

/* Всплывающее уведомление (вместо полосы сверху) */
.mh-toast {
  position: fixed; right: 22px; bottom: 22px; z-index: 200; display: flex; align-items: center; gap: 10px;
  max-width: min(420px, calc(100vw - 32px)); padding: 12px 12px 12px 14px; overflow: hidden;
  background: #1b2029; color: var(--text); border: 1px solid #2f3a4b; border-radius: 12px;
  box-shadow: 0 14px 40px rgba(0, 0, 0, .5); font-size: 14px; line-height: 1.35;
  opacity: 0; transform: translateY(18px) scale(.97); transition: opacity .28s ease, transform .32s cubic-bezier(.2, .9, .3, 1.2);
}
.mh-toast.is-shown { opacity: 1; transform: none; }
.mh-toast.is-leaving { opacity: 0; transform: translateY(12px) scale(.98); transition: opacity .25s ease, transform .25s ease; }
.mh-toast-ico { flex: none; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center;
  background: rgba(62, 207, 110, .16); border: 1px solid rgba(62, 207, 110, .6); }
.mh-toast-ico::before { content: ""; width: 9px; height: 5px; margin-top: -2px; border: solid #3ecf6e; border-width: 0 0 2px 2px; transform: rotate(-45deg); }
.mh-toast.is-bad .mh-toast-ico { background: rgba(255, 93, 115, .16); border-color: rgba(255, 93, 115, .6); }
.mh-toast.is-bad .mh-toast-ico::before { content: "!"; width: auto; height: auto; margin: 0; border: 0; transform: none; color: #ff5d73; font: 800 12px/1 var(--sans, inherit); }
.mh-toast-text { flex: 1; min-width: 0; }
.mh-toast-close { flex: none; width: 26px; height: 26px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); font-size: 18px; line-height: 1; cursor: pointer; }
.mh-toast-close:hover { background: #262d38; color: var(--text); }
.mh-toast-bar { position: absolute; left: 0; bottom: 0; height: 2px; width: 100%; background: #3ecf6e; transform-origin: left; opacity: .7; }
.mh-toast.is-bad .mh-toast-bar { background: #ff5d73; }
.mh-toast.is-shown .mh-toast-bar { animation: mh-toast-time 4.2s linear forwards; }
.mh-toast.is-paused .mh-toast-bar { animation-play-state: paused; }
@keyframes mh-toast-time { from { transform: scaleX(1); } to { transform: scaleX(0); } }
@media (max-width: 700px) {
  .mh-toast { left: 12px; right: 12px; bottom: 14px; max-width: none; }
}
@media (prefers-reduced-motion: reduce) {
  .mh-toast, .mh-toast.is-leaving { transition: opacity .2s; transform: none; }
  .mh-toast.is-shown .mh-toast-bar { animation: none; }
}

/* Кошельки: компактная таблица, */
.wl-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.wl-head h1 { margin: 0; }
.wl-chips { margin-bottom: 10px; }
.fs-chip.is-on { border-color: var(--blue); color: var(--blue); }
.wl-table { background: var(--card); border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.wl-row { display: grid; grid-template-columns: 110px minmax(140px, 1.1fr) minmax(0, 2.4fr) 120px 76px; gap: 12px; align-items: center;
  padding: 9px 14px; border-top: 1px solid var(--line); font-size: 13px; }
.wl-row[hidden] { display: none; }
.wl-row-head { border-top: 0; color: var(--muted); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .05em; padding-top: 10px; padding-bottom: 8px; }
.wl-row:not(.wl-row-head):hover { background: rgba(255, 255, 255, .025); }
.wl-coin { display: inline-flex; align-items: center; gap: 7px; }
.wl-coin b { font-weight: 700; }
.wl-name { color: var(--text); font-weight: 500; }
.wl-addr { color: var(--muted); font-size: 12px; overflow-wrap: anywhere; word-break: break-all; background: none; padding: 0; }
.wl-c { text-align: center; justify-self: center; }
.wl-actions { display: flex; justify-content: flex-end; gap: 2px; }
.wl-actions form { margin: 0; }
.wl-actions .icon-btn:hover { color: var(--text); background: var(--card-2); }
.wallet-dialog .wl-addr-field { display: grid; gap: 4px; margin-top: 10px; color: var(--muted); font-size: 12px; }
.wallet-dialog .wl-addr-field input { width: 100%; box-sizing: border-box; padding: 8px 10px; border-radius: 8px; border: 1px solid #243041; background: #121821; color: var(--text); font: 13px var(--mono); }
@media (max-width: 700px) {
  .wl-row-head { display: none; }
  .wl-row { grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "coin name use" "addr addr act"; gap: 4px 10px; }
  .wl-coin { grid-area: coin; } .wl-name { grid-area: name; } .wl-c { grid-area: use; justify-self: end; }
  .wl-addr { grid-area: addr; } .wl-actions { grid-area: act; align-self: start; }
}

/* Настройки: блоки, по три поля в строке, «!» с подсказкой */
.st-layout { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(320px, 1fr); gap: 14px; align-items: start; }
.st-card h2 { margin: 18px 0 10px; font-size: 15px; }
.st-card h2:first-child { margin-top: 0; }
.st-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px 12px; align-items: end; }
.st-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.st-field { position: relative; display: grid; gap: 4px; color: var(--muted); font-size: 12px; min-width: 0; }
.st-field input, .st-field select { width: 100%; min-width: 0; box-sizing: border-box; padding: 8px 10px; border-radius: 8px; border: 1px solid #243041; background: #121821; color: var(--text); font: inherit; font-size: 13px; }
.st-field input[type=number] { -moz-appearance: textfield; appearance: textfield; }
.st-field input[type=number]::-webkit-outer-spin-button, .st-field input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.st-token { display: flex; gap: 8px; }
.st-token input { flex: 1; }
.st-actions { margin-top: 18px; display: flex; justify-content: flex-end; }
.st-actions .btn { min-width: 180px; }
.st-image { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; position: relative; }
.st-image .muted { display: inline-flex; align-items: center; gap: 2px; font-size: 12px; position: relative; }
.st-image .fld-tip::after { left: auto; right: 0; width: 260px; }
.st-image-note { margin: 0 0 10px; padding: 8px 10px; border-radius: 8px; font-size: 13px; color: var(--amber, #f0b429); background: rgba(240, 180, 41, .1); border: 1px solid rgba(240, 180, 41, .35); }
.st-add { display: flex; gap: 8px; margin-bottom: 10px; }
.st-add input { flex: 1; min-width: 0; padding: 8px 10px; border-radius: 8px; border: 1px solid #243041; background: #121821; color: var(--text); font: inherit; }
.st-rigs { border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.st-rig { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-top: 1px solid var(--line); }
.st-rig:first-child { border-top: 0; }
.st-rig .status-dot { margin-top: 0; }
.st-rig-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.st-rig-main .muted { font-size: 12px; }
.st-rig-actions { display: flex; align-items: center; gap: 6px; }
.st-rig-actions form { margin: 0; }
.st-rig-actions .btn { padding: 5px 10px; font-size: 12px; }
@media (max-width: 1100px) { .st-layout { grid-template-columns: 1fr; } }
@media (max-width: 700px) {
  .st-grid, .st-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .st-actions .btn { width: 100%; }
}

/* Воркеры: переключатель вида иконками и компактные виды */
.view-icons a { display: inline-grid; place-items: center; width: 34px; height: 32px; padding: 0; color: var(--muted); }
.view-icons a.is-on { color: #fff; background: var(--blue); }
.rw-list { display: flex; flex-direction: column; gap: 4px; }
.rw-row { display: grid; grid-template-columns: 10px minmax(120px, 1.4fr) auto 18px minmax(90px, 1fr) minmax(90px, auto) 44px; gap: 10px; align-items: center;
  padding: 8px 12px; background: #1e222a; border: 1px solid #3a4455; border-radius: 8px; color: inherit; text-decoration: none; }
.rw-row:hover, .rw-tile:hover { border-color: #56637a; }
.rw-row .status-dot, .rw-tile .status-dot { margin-top: 0; }
.rw-name { color: var(--text); font-weight: 700; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rw-count { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 5px; background: #12141a; border: 1px solid var(--line); color: var(--text); font-size: 11px; font-weight: 700; }
.rw-warn { position: static; width: 15px; height: 15px; animation: none; box-shadow: none; }
.rw-hash { text-align: right; font-variant-numeric: tabular-nums; }
.rw-hash small, .rw-tile-hash small { color: var(--muted); }
.rw-up { color: var(--cyan, #7fd4ff); font-size: 12px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.rw-off { color: var(--red); font-size: 12px; white-space: nowrap; }
.rw-vs { display: inline-flex; gap: 4px; justify-content: flex-end; }
.rw-v { font-style: normal; font-weight: 800; font-size: 12px; }
.rw-v-N { color: #8dc63f; }
.rw-v-A { color: #ff5d5d; }
.rw-row.is-off, .rw-tile.is-off { opacity: .85; }
.rw-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px; }
.rw-tile { display: grid; gap: 6px; padding: 10px 12px; background: #1e222a; border: 1px solid #3a4455; border-radius: 8px; color: inherit; text-decoration: none; }
.rw-tile-top { display: flex; align-items: center; gap: 8px; min-width: 0; }
.rw-tile-hash b { font-size: 18px; font-variant-numeric: tabular-nums; }
.rw-tile-bottom { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
@media (max-width: 700px) {
  .rw-row { grid-template-columns: 10px minmax(0, 1fr) auto 16px auto; }
  .rw-row .rw-hash { display: none; }
  .rw-row .rw-vs { grid-column: 5; }
  .rw-row > .rw-up, .rw-row > .rw-off { grid-column: 2 / 5; grid-row: 2; padding-left: 0; }
  .rw-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.rw-hash { white-space: nowrap; }
.rw-row > .rw-up, .rw-row > .rw-off { text-align: right; }
@media (max-width: 700px) { .rw-row .rw-w { grid-column: 4; grid-row: 1; } }
.rw-row { grid-template-columns: 10px minmax(0, max-content) auto 18px minmax(90px, 1fr) minmax(90px, auto) 44px; }
@media (max-width: 700px) {
  .rw-row { grid-template-columns: 10px minmax(0, max-content) auto 16px 1fr auto; }
  .rw-row .rw-vs { grid-column: 6; }
  .rw-row > .rw-up, .rw-row > .rw-off { grid-column: 2 / 6; text-align: left; }
}

/* Подробный список воркеров: хешрейт по монетам вместо одного большого числа */
.rig-coins { display: grid; grid-template-columns: 20px auto minmax(0, max-content); gap: 4px 8px; align-items: center; color: inherit; text-decoration: none; justify-content: start; }
.rc-ico { display: inline-grid; place-items: center; }
.rc-ico .coin-icon { width: 17px; height: 17px; }
.rc-name { font-weight: 700; color: var(--text); font-size: 14px; }
.rc-hash { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; padding-left: 10px; }
.rc-hash b { font-size: 17px; color: var(--text); }
.rc-hash small { color: var(--muted); font-size: 11px; }
/* Плитки карт в строке рига — выше */
.rig-tiles .hub-gpu-tile { min-height: 58px; padding: 9px 3px; justify-content: center; gap: 5px; }
@media (max-width: 700px) {
  .rig-row .rig-coins { grid-column: 1 / -1; grid-row: auto; }
}
@media (min-width: 1101px) {
  .rig-row { grid-template-columns: 140px 160px minmax(210px, 250px) minmax(150px, 210px) minmax(0, 1fr); }
}

/* Полётные листы рига: галочка у текущего, наведение — бледная галочка, нажатие — поставить */
.fa-list { display: flex; flex-direction: column; gap: 6px; }
.fa-list form { margin: 0; }
.fa-row { display: flex; align-items: center; gap: 12px; width: 100%; padding: 10px 12px; text-align: left; font: inherit; color: inherit;
  background: #1a1f28; border: 1px solid var(--line); border-radius: 10px; }
button.fa-row { cursor: pointer; transition: border-color .15s, background .15s; }
button.fa-row:hover { border-color: #3d4a5e; background: #1d2330; }
.fa-row.is-current { border-color: rgba(141, 198, 63, .45); }
.fa-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.fa-info b { color: var(--text); }
.fa-info span { color: var(--muted); font-size: 12.5px; overflow-wrap: anywhere; }
.fa-check { flex: none; display: grid; place-items: center; width: 32px; height: 32px; color: #8dc63f; }
button.fa-row .fa-check { opacity: 0; color: #8b97a8; transition: opacity .15s; }
button.fa-row:hover .fa-check, button.fa-row:focus-visible .fa-check { opacity: .55; }

/* Листы на вкладке рига — та же сетка, что в общем списке листов */
.fa-pick { display: grid; grid-template-columns: minmax(160px, 1.2fr) minmax(120px, 1fr) minmax(120px, 1fr) minmax(150px, 1fr) 44px;
  gap: 10px; align-items: center; width: 100%; padding: 10px 12px; text-align: left; font: inherit; color: inherit; }
button.fa-pick { cursor: pointer; transition: border-color .15s, background .15s, box-shadow .15s; }
button.fa-pick:hover, button.fa-pick:focus-visible { border-color: #3d4a5e; background: #1d2330; box-shadow: 0 4px 14px rgba(0, 0, 0, .35); outline: none; }
.fa-pick.is-current { border-color: rgba(141, 198, 63, .45); }
.fa-pick .fa-check { justify-self: end; }
@media (max-width: 900px) {
  .fa-pick { grid-template-columns: 1fr auto; }
  .fa-pick .fs-cell { display: none; }
  .fa-pick .fs-miner { display: inline-flex; grid-column: 1; }
  .fa-pick .fa-check { grid-column: 2; grid-row: 1 / span 2; }
}
.fa-pick .fa-check { display: grid; place-items: center; width: 32px; height: 32px; color: #8dc63f; }
button.fa-pick .fa-check { opacity: 0; color: #8b97a8; transition: opacity .15s; }
button.fa-pick:hover .fa-check, button.fa-pick:focus-visible .fa-check { opacity: .6; }

/* Процессор рига в таблице карт и в списке монет */
.brand-cpu { color: #6aa9ff; }
.cpu-row td { border-top: 1px dashed var(--line); }
.rc-cpu { color: var(--muted); font-size: 10px; font-weight: 600; margin-left: 2px; }
/* Процессор в полётном листе */
.fs-cpu { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 16px; margin: 10px 0 4px; padding: 10px 12px; border: 1px solid var(--line, #263042); border-radius: 8px; }
.fs-cpu-toggle { display: flex; align-items: center; gap: 10px; cursor: pointer; }
.fs-cpu-toggle small { white-space: nowrap; }
.fs-cpu-wallet { min-width: 220px; max-width: 100%; background: #12141a; color: var(--text); border: 1px solid var(--line, #263042); border-radius: 6px; padding: 6px 8px; font: inherit; }
.fs-cpu-wallet option { background: #12141a; }
@media (max-width: 640px) { .fs-cpu-wallet { flex: 1 1 100%; min-width: 0; } .fs-cpu-toggle small { display: block; } }
.fs-cpu-none { font-size: 12px; }
.fs-cpu-tag { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--muted, #8b96a8); }
/* Плитки карт в списке воркеров: «100%» помещается в плашку на любой ширине */
.rig-tiles .hub-gpu-tile { width: 50px; }
.rig-tiles .hub-gpu-tile-fan { min-width: 0; width: auto; margin: 0 2px; padding: 2px 3px; font-size: 12px; letter-spacing: -.2px; }
@media (max-width: 640px) {
  .rig-tiles .hub-gpu-tile { width: 48px; }
  .rig-tiles .hub-gpu-tile-fan { font-size: 11px; }
}
/* Пустые слоты: карта пропала из рига */
.hub-gpu-tile.is-missing { display: grid; place-items: center; color: var(--red); border-color: rgba(232, 69, 60, .55); background: rgba(232, 69, 60, .08); }
.hub-gpu-tile.is-missing svg { width: 18px; height: 18px; }
.row-missing td { opacity: .75; }
.row-missing .gpu-missing-x { display: inline-flex; vertical-align: -3px; color: var(--red); }
.flag-missing { color: var(--red); border-color: rgba(232, 69, 60, .45); }
.hex-missing, .rw-missing { font-style: normal; color: var(--red); font-size: .7em; margin-left: 4px; font-weight: 700; }
.rig-gpus-form { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 10px; }
.rig-gpus-form label { display: flex; align-items: center; gap: 8px; }
.rig-gpus-form input { width: 72px; background: #12141a; color: var(--text); border: 1px solid var(--line, #263042); border-radius: 6px; padding: 7px 8px; font: inherit; }
.rig-gpus-list { margin: 8px 0 0; padding: 0; list-style: none; display: grid; gap: 4px; }
.rig-gpus-list li { display: flex; gap: 8px; align-items: center; }
.rig-gpus-list .x { color: var(--red); font-weight: 700; }
/* Страница воркеров: фиксированная ширина, компактная панель */
/* Во всю ширину: вид и «Добавить» прижаты к правому краю. */
.wk-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.wk-left, .wk-right { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.wk-search { display: inline-flex; align-items: center; height: 32px; border: 1px solid var(--line); border-radius: 8px; background: #121821; overflow: hidden; }
.wk-search-btn { display: grid; place-items: center; width: 32px; height: 30px; padding: 0; border: 0; background: transparent; color: var(--muted); cursor: pointer; }
.wk-search-btn:hover { color: var(--text); }
.toolbar .wk-search input { width: 0; min-width: 0; padding: 0; border: 0; background: transparent; outline: none; transition: width .18s, padding .18s; }
.toolbar .wk-search.is-open input { width: 190px; padding: 0 10px 0 0; }
.wk-search.is-open { border-color: var(--blue); }
.toolbar .wk-sort { height: 32px; padding: 0 8px; }
.rig-add-btn { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 12px; }
@media (max-width: 640px) {
  .wk-toolbar { gap: 8px; }
  .toolbar .wk-search.is-open input { width: 130px; }
}

/* Современное окно: поле с подписью сверху, шаги списком, компактные кнопки по центру */
.mh-dialog { width: min(400px, calc(100vw - 32px)); border: 1px solid var(--line); border-radius: 14px; background: var(--card); color: var(--text); padding: 20px 22px 18px; box-shadow: 0 16px 48px rgba(0,0,0,.55); }
.mh-dialog::backdrop { background: rgba(5, 8, 12, .62); }
.mh-dialog h3 { margin: 0 0 16px; text-align: center; font-size: 17px; }
.mh-field { display: grid; gap: 6px; }
.mh-field > span { font-size: 12px; color: var(--muted); }
.mh-field input { width: 100%; box-sizing: border-box; height: 40px; padding: 0 12px; border: 1px solid #2a3546; border-radius: 10px; background: #10151d; color: var(--text); font: 14px inherit; font-family: inherit; outline: none; transition: border-color .15s, box-shadow .15s; }
.mh-field input::placeholder { color: #5d6878; }
.mh-field input:focus { border-color: var(--blue); box-shadow: 0 0 0 3px rgba(77, 163, 255, .18); }
.mh-steps { margin: 14px 0 0; padding: 0 0 0 20px; display: grid; gap: 5px; color: var(--muted); font-size: 12.5px; line-height: 1.4; }
.mh-dialog-actions { display: flex; justify-content: center; gap: 10px; margin-top: 18px; }
.mh-dialog-actions .btn { min-width: 104px; height: 34px; padding: 0 16px; }
/* Карточки воркеров одной высоты: ряд не ниже плиток карт, строка флагов всегда на месте */
.rig-list .rig-card .rig-row { box-sizing: border-box; }
.rig-list .rig-card .rig-flags { height: 22px; overflow: hidden; align-items: center; }
@media (max-width: 640px) { .rig-list .rig-card .rig-flags.is-empty { display: none; } .rig-list .rig-card .rig-row { min-height: 0; } }

/* Поле Shell — многострочное: растёт по мере ввода, Enter выполняет */
.hub-term-input textarea { resize: none; min-height: 42px; max-height: 180px; line-height: 1.4; box-sizing: border-box; overflow-y: auto; }
@media (max-width: 640px) { .hub-term-input textarea { min-width: 0; font-size: 16px; } }
.flag-wait { color: #f5c518; border-color: rgba(245, 197, 24, .45); }
.flag-restart { color: #4da3ff; border-color: rgba(77, 163, 255, .45); }
/* Shell: лента команд — по строке на команду, вывод раскрывается */
.sh-list { display: grid; grid-template-columns: minmax(0, 1fr); gap: 6px; }
.sh-row { min-width: 0; border: 1px solid #222c3b; border-left: 3px solid #2d3a4d; border-radius: 9px; background: #10151d; box-shadow: 0 1px 0 rgba(0,0,0,.35), 0 3px 10px rgba(0,0,0,.28); }
.sh-row.is-ok { border-left-color: #3fb950; }
.sh-row.is-bad { border-left-color: #f0506e; }
.sh-row.is-wait { border-left-color: #d4a94f; }
.sh-row > summary { display: flex; align-items: center; gap: 10px; padding: 6px 8px 6px 10px; cursor: pointer; list-style: none; min-width: 0; }
.sh-row > summary::-webkit-details-marker { display: none; }
.sh-row > summary::marker { content: ""; }
.sh-mark { flex: none; display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; font-size: 12px; font-weight: 800; color: #0b0f15; background: #3fb950; }
.sh-row.is-bad .sh-mark { background: #f0506e; color: #fff; }
.sh-row.is-wait .sh-mark { background: #d4a94f; }
.sh-when { flex: none; color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.sh-cmd { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--mono); font-size: 12.5px; color: var(--text); background: none; padding: 0; }
.sh-btns { flex: none; display: flex; align-items: center; gap: 6px; }
.sh-toggle, .sh-copy { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; color: #9aa6b8; border: 1px solid #263142; background: #151c27; transition: color .15s, border-color .15s, background .15s, transform .12s; }
.sh-copy { cursor: pointer; padding: 0; position: relative; }
.sh-copy:hover, .sh-row > summary:hover .sh-toggle { color: var(--text); border-color: var(--blue); background: rgba(77, 163, 255, .1); }
.sh-copy:active { transform: scale(.88); }
.sh-copy .ico-done { display: none; }
.sh-copy.is-copied { color: #3fb950; border-color: #3fb950; background: rgba(63, 185, 80, .12); animation: sh-pop .35s ease-out; }
.sh-copy.is-copied .ico-copy { display: none; }
.sh-copy.is-copied .ico-done { display: block; }
@keyframes sh-pop { 0% { transform: scale(.8); } 55% { transform: scale(1.15); } 100% { transform: scale(1); } }
.sh-chev { transition: transform .15s; }
.sh-row[open] .sh-chev { transform: rotate(180deg); }
.sh-row[open] { border-color: #2c3a50; }
.sh-row > pre { margin: 0; padding: 9px 12px 11px 40px; border-top: 1px solid #1f2836; white-space: pre-wrap; word-break: break-word; font-size: 12px; max-height: 420px; overflow: auto; color: #c9d4e3; }
.sh-row.is-bad > pre { color: #ffb3c0; }
.sh-empty { margin: 4px 2px; }
@media (max-width: 640px) { .sh-when { display: none; } .sh-row > pre { padding-left: 12px; } }

/* Shell: служебные команды — в меню «⋯» справа от поля */
.hub-term-head { position: relative; }
.sh-menu { flex: none; position: relative; }
.sh-menu-btn { display: grid; place-items: center; width: 40px; height: 40px; border-radius: 10px; border: 1px solid #263142; background: #151c27; color: #9aa6b8; cursor: pointer; list-style: none; transition: color .15s, border-color .15s, background .15s; }
.sh-menu-btn::-webkit-details-marker { display: none; }
.sh-menu-btn::marker { content: ""; }
.sh-menu-btn:hover, .sh-menu[open] .sh-menu-btn { color: var(--text); border-color: var(--blue); background: rgba(77, 163, 255, .1); }
.sh-menu-list { position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; min-width: 220px; max-height: 60vh; overflow-y: auto; padding: 6px; display: grid; gap: 2px;
  border: 1px solid #263142; border-radius: 12px; background: #121821; box-shadow: 0 14px 40px rgba(0,0,0,.55); }
.sh-menu-list form { margin: 0; }
.sh-menu-list .btn { display: block; width: 100%; text-align: left; height: auto; padding: 9px 12px; border: 0; border-radius: 8px; background: transparent; color: var(--text); font-weight: 500; box-shadow: none; }
.sh-menu-list .btn:hover { background: rgba(77, 163, 255, .12); }
@media (max-width: 640px) {
  .hub-term-head { flex-direction: row; flex-wrap: wrap; align-items: center; }
  .hub-term-head h2 { flex: 1 1 auto; }
  .hub-term-head .hub-term-input { order: 3; flex: 1 1 100%; }
  .sh-menu { order: 2; }
  .sh-menu-btn { width: 36px; height: 36px; }
}
/* Карта в таблице — по невидимой сетке: номер (GPU0/GPU10/CPU) кончается в одной точке,
   модель — колонкой ширины самого длинного названия в риге, производитель — с одной вертикали. */
.hub-gpu-table .gpu-idx { display: inline-block; width: 4.6ch; text-align: right; font-variant-numeric: tabular-nums; margin-right: 8px; vertical-align: baseline; }
.hub-gpu-table .gpu-idx.gpu-missing-x { text-align: right; }
.hub-gpu-table .gpu-brand { display: inline-block; min-width: calc(var(--gname, 7) * 0.72em); margin-right: 6px; white-space: nowrap; vertical-align: baseline; }
.hub-gpu-table .brand-cpu { min-width: 0; }
.hub-gpu-table .gpu-idline { padding-left: calc(4.6ch + 8px); }
/* Колонка «Статус»: один размер значков, строго по центру */
.hub-gpu-table th.gpu-status-col, .hub-gpu-table td.gpu-status-cell { width: 64px; text-align: center; padding-left: 0; padding-right: 0; }
.hub-gpu-table th.gpu-status-col { text-transform: none; cursor: help; }
.gpu-st { display: inline-grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; font-weight: 800; font-size: 13px; line-height: 1; vertical-align: middle; }
.gpu-st-ok { color: #3fb950; background: rgba(63, 185, 80, .15); }
.gpu-st-bad { color: #ff5d73; background: rgba(255, 93, 115, .16); }
.gpu-st-wait { color: #4da3ff; background: rgba(77, 163, 255, .15); }
.gpu-st-none { color: var(--muted); }
.hub-gpu-table td.gpu-status-cell .link-lost-icon { vertical-align: middle; }
/* Крестик пропавшей карты — крупный и по центру колонки номера */
.hub-gpu-table .gpu-idx.gpu-missing-x { display: inline-grid; place-items: center end; height: 22px; vertical-align: middle; }
.hub-gpu-table .gpu-idx.gpu-missing-x svg { width: 26px; height: 26px; }
/* Производитель карты — «стикером»: ближе к модели и чуть выше строки */
.hub-gpu-table .gpu-brand { min-width: calc(var(--gname, 7) * 0.6em); margin-right: 2px; }
.hub-gpu-table .flag-board { position: relative; top: -7px; margin-left: 0; padding: 1px 6px; font-size: 10px; line-height: 1.3; border-radius: 6px; vertical-align: baseline; }
/* Шапка: автофан → автообновление → кирка → обновить → настройки. Всё одной высоты, по центру. */
.topbar { align-items: center; }
.topbar .refresh, .topbar .topbar-actions { display: contents; }
.topbar .autofan-btn { order: 1; }
.topbar .refresh-pick { order: 2; }
.topbar .rig-menu { order: 3; }
.topbar .refresh-now { order: 4; }
.topbar .topbar-gear { order: 5; }
.topbar .autofan-btn, .topbar .rig-menu > summary, .topbar .refresh-now, .topbar .topbar-gear { width: 38px; height: 38px; display: grid; place-items: center; padding: 0; align-self: center; }
/* Таймер — почти квадрат со скруглёнными углами, ширина под «30с». */
.refresh .refresh-pick, .topbar .refresh-pick { width: 46px; height: 36px; padding: 0; gap: 0; display: grid; place-items: center; border-radius: 10px; font: 700 14px var(--sans); color: var(--blue); }
.refresh-pick .refresh-clock { display: none; }
.refresh-pick:not(.is-on) .refresh-clock { display: block; }
.refresh-pick:not(.is-on) #refresh-label { display: none; }
.refresh-pick.is-on { color: #3fb950; }
.refresh-pick.is-on .refresh-fuse rect { stroke: #3fb950; }
.refresh-fuse rect { rx: 10px; ry: 10px; }
.refresh-menu { position: fixed; top: 60px; right: auto; left: auto; }
/* Имя воркера + статус — слева в верхней строке (места 1–3 на скрине). */
.topbar .burger { margin-right: 0; }
.topbar-rig { order: 0; margin-right: auto; display: flex; align-items: center; gap: 8px; min-width: 0; flex-wrap: wrap; font-size: 14px; }
.topbar-rig .status-dot { margin: 0; align-self: center; }
.topbar-rig-name { font-size: 16px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 260px; }
.topbar:not(:has(.topbar-rig)) .burger { margin-right: auto; }
.hub-shell > .hub-miner:first-child { margin-top: 0; }
/* Ватты: маленькая синяя молния */
.foot-power { display: inline-flex; align-items: center; gap: 3px; }
.foot-power svg { color: var(--blue); flex: none; }
.hub-footer { gap: 6px 16px; }
@media (max-width: 700px) {
  .topbar { flex-wrap: wrap; row-gap: 6px; }
  .topbar-rig { order: 10; flex-basis: 100%; margin-right: 0; font-size: 13px; }
  .topbar-rig-name { font-size: 15px; max-width: 60vw; }
  .topbar .burger { margin-right: auto; }
}
/* Таймер ещё компактнее: рамка впритык к «30с». */
.refresh .refresh-pick.is-on, .topbar .refresh-pick.is-on { width: 36px; height: 26px; border-radius: 7px; font-size: 13px; letter-spacing: -.2px; }
.refresh-pick.is-on .refresh-fuse rect { rx: 7px; ry: 7px; }
/* Иконки справа: одинаковый видимый зазор между значками (а не между кнопками).
   Каждая кнопка = значок + 4px с боков, таймер — с полями 4px, промежуток 4px → ровно 12px между значками. */
.topbar { column-gap: 4px; }
.topbar .autofan-btn, .topbar .rig-menu > summary, .topbar .refresh-now, .topbar .topbar-gear { width: auto; height: 34px; padding: 0 4px; }
.topbar .autofan-btn svg, .topbar .rig-menu-btn svg { width: 22px; height: 22px; }
.topbar .refresh-now svg, .topbar .topbar-gear svg { width: 21px; height: 21px; }
.topbar .refresh-pick { margin: 0 4px; }
.topbar .refresh-pick:not(.is-on) { width: 22px; height: 34px; }
.topbar .refresh-pick:not(.is-on) .refresh-clock { width: 22px; height: 22px; }
.topbar-actions { padding-left: 0; margin-right: 0; border-left: 0; }
@media (max-width: 700px) {
  .topbar { column-gap: 2px; }
  .topbar-rig { gap: 5px; }
}
.topbar .rig-menu > summary, .topbar .autofan-btn { border: 0; }
/* Список воркеров: содержимое строки по центру по вертикали, плитки карт прижаты к правому краю
   единой колонкой (ширина — по ригу с наибольшим числом карт), LA/модели — справа перед ними. */
.rig-list .rig-card { display: flex; flex-direction: column; }
.rig-list .rig-card .rig-row { flex: 1; min-height: 68px; padding-top: 5px; padding-bottom: 5px; }
.rig-list .rig-card .rig-flags.is-empty { display: none; }
.rig-list .rig-card .rig-flags { margin-top: -4px; }
@media (min-width: 1101px) { .rig-meta { text-align: right; } }
@media (min-width: 1101px) {
  .rig-row { grid-template-columns: 140px 170px minmax(210px, 260px) minmax(0, 1fr) calc(var(--tiles, 4) * 54px + 8px); }
  .rig-row .rig-tiles { justify-self: start; }
}
@media (max-width: 640px) { .rig-list .rig-card { min-height: 0; } }
/* Ферма: цифры слева и справа на одной линии (точки «в сети» не сдвигают ряд) */
.farm-row { align-items: flex-start; }
.farm-row-stats { align-items: flex-start; }
/* График растянут на всю ширину карточки, толщина линии не искажается */
.chart-line { vector-effect: non-scaling-stroke; }
/* Ферма: имя фермы — заголовок раздела; цифры в карточке по центру по обеим осям */
.farm-list-title { font-size: 15px; }
.farm-row { align-items: center; justify-content: space-between; }
.farm-row-stats { align-items: center; }
.farm-row .farm-stat { align-items: center; text-align: center; }
.farm-row .farm-dots { justify-content: center; }
.issue-list .status-dot { margin: 0; width: 10px; height: 10px; }
/* Ватты рига — справа в строке вкладок, по центру строки */
.tab-power { display: inline-flex; align-items: center; gap: 4px; align-self: center; margin-left: auto; padding: 0 4px; font-variant-numeric: tabular-nums; white-space: nowrap; color: var(--text); font-size: 15px; }
.tab-power svg { color: var(--blue); }
.tab-power b { font-weight: 700; }
/* Ферма: монета перед хешрейтом */
.farm-coin-tag { display: inline-flex; align-items: center; gap: 4px; margin-right: 7px; font-size: 14px; font-weight: 700; color: var(--muted); }
.farm-coin-tag .coin-icon { width: 16px; height: 16px; }
.farm-coin b { display: inline-flex; align-items: baseline; }
.farm-coin-tag { align-self: center; }
/* Риги фермы значками после «нет хешрейта» */
.farm-rigs { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; max-width: 360px; }
.farm-rig { display: grid; place-items: center; width: 30px; height: 26px; border-radius: 7px; font-style: normal; border: 1px solid transparent; }
.farm-rig .farm-rig-x { display: none; }
.farm-rig.is-on { color: #3ecf8e; background: rgba(62, 207, 142, .12); border-color: rgba(62, 207, 142, .45); box-shadow: 0 0 8px rgba(62, 207, 142, .25); }
.farm-rig.is-lost { color: #f5a524; background: rgba(245, 165, 36, .1); border-color: rgba(245, 165, 36, .4); }
.farm-rig.is-off { color: #5d6878; background: #161a21; border-color: #2c3442; }
.farm-rig.is-off .farm-rig-x { display: inline; color: #e5534b; }
@media (max-width: 700px) { .tab-power { font-size: 13px; } .farm-rigs { max-width: none; } }
.farm-coin b small { margin-left: 3px; }
@media (max-width: 700px) {
  .farm-rigs { grid-column: 1 / -1; justify-content: center; gap: 5px; }
  .farm-rig { width: 26px; height: 22px; }
  .farm-rig svg { width: 15px; height: 15px; }
  .farm-row-right { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 10px; }
  .farm-coin-tag { font-size: 12px; margin-right: 5px; }
  .farm-coin-tag .coin-icon { width: 13px; height: 13px; }
}
/* Монета: значок+тикер слева, по центру высоты блока «цифра + подпись» */
.farm-coin { display: flex; align-items: center; gap: 8px; }
.farm-coin-tag { margin-right: 0; align-self: center; }
.farm-coin .farm-stat { align-items: center; text-align: center; }
.farm-coin b { display: block; }
.farm-coin b small { margin-left: 0; }
/* «Нет связи» — красный, офлайн — погасший перечёркнутый */
.farm-rig.is-lost { color: #ff5d5d; background: rgba(255, 93, 93, .12); border-color: rgba(255, 93, 93, .5); }
@media (max-width: 700px) { .farm-coin { justify-content: center; gap: 6px; } }
/* Монета в карточке фермы — крупнее: значок 22px, тикер 17px */
.farm-coin-tag { font-size: 17px; gap: 6px; color: var(--text); }
.farm-coin-tag .coin-icon { width: 22px; height: 22px; }
@media (max-width: 700px) { .farm-coin-tag { font-size: 14px; gap: 4px; } .farm-coin-tag .coin-icon { width: 17px; height: 17px; } }
/* Лог майнера — как на мониторе: строки не переносятся, листается пальцем в обе стороны */
.hub-term-log { white-space: pre; word-break: normal; overflow-wrap: normal; overflow: auto; -webkit-overflow-scrolling: touch; touch-action: pan-x pan-y; overscroll-behavior: contain; }
@media (max-width: 700px) { .hub-term-log { font-size: 10px; line-height: 1.4; max-height: 62vh; } }
@media (max-width: 700px) {
  /* Ферма на телефоне — одна невидимая сетка: монеты по центру во всю ширину,
     эффективность и потребление — две равные половины под парами цифр сверху. */
  .farm-row-right { grid-template-columns: repeat(2, minmax(0, 1fr)); justify-items: center; }
  .farm-row-right .farm-coin { grid-column: 1 / -1; }
  /* Верхние плитки: ничего не вылезает за край — число и подпись ужимаются по ширине плитки */
  .hex-row > .hex { overflow: hidden; }
  .hex-power .plug-ico { display: none; }
  .hex-power b { font-size: 13px; }
  .hex > span, .hex-face > span { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
}
@media (max-width: 700px) {
  .farm-row { align-items: stretch; }
  .farm-row-stats { width: 100%; }
}
/* Меню: значок по смыслу перед каждой строкой, всё в одну строку */
.nav a { display: flex; align-items: center; gap: 11px; white-space: nowrap; }
.nav a svg { flex: none; color: #7c8aa0; transition: color .15s; }
.nav a:hover svg { color: #c9d4e3; }
.nav a.is-active svg { color: var(--blue); }
.logout button { display: inline-flex; align-items: center; gap: 8px; }
/* Скорость анимации (Настройки → Ферма → Анимация): быстрая по умолчанию, плавная — мягче */
:root { --mh-t: .14s; --mh-ease: cubic-bezier(.2, .7, .2, 1); --mh-shift: 3px; }
html[data-anim="smooth"] { --mh-t: .34s; --mh-shift: 8px; }
@keyframes mh-page-in { from { opacity: 0; transform: translateY(var(--mh-shift)); } to { opacity: 1; transform: none; } }
@keyframes mh-pop-in { from { opacity: 0; transform: translateY(-4px) scale(.98); } to { opacity: 1; transform: none; } }
/* Страница и вкладки появляются мягко; живые обновления (каждые 3 с) не анимируются */
.page { animation: mh-page-in var(--mh-t) var(--mh-ease) backwards; }
/* Окна и выпадающие меню */
dialog[open] { animation: mh-pop-in var(--mh-t) var(--mh-ease) both; }
.refresh-menu:not([hidden]), details[open] > .power-drop-list, details[open] > .sh-menu-list { animation: mh-pop-in var(--mh-t) var(--mh-ease) both; }
/* Шторка меню на телефоне и затемнение за ней */
@media (max-width: 800px) {
  .sidebar { transition: transform calc(var(--mh-t) * 1.6) var(--mh-ease); }
}
.nav a, .hub-tabs a, .btn, .rig-card, .rw-row, .rw-tile { transition-duration: var(--mh-t); }
@media (prefers-reduced-motion: reduce) {
  .page, dialog[open], .refresh-menu, .power-drop-list, .sh-menu-list { animation: none !important; }
  .sidebar { transition: none !important; }
}
/* Переключатель «Анимация» в настройках — одной высоты и ширины с полями рядом */
.st-field .seg { display: flex; width: 100%; height: 34px; box-sizing: border-box; border-radius: 8px; margin-top: auto; }
.st-field .seg label { flex: 1; display: flex; }
.st-field .seg label span { flex: 1; display: grid; place-items: center; font-size: 14px; }
/* Лёгкое нажатие: кнопка чуть «проседает» и темнеет, пока её держат (мышь или палец) */
html { -webkit-tap-highlight-color: transparent; }
button, .btn, .nav a, .hub-tabs a, .tabs a, summary.rig-menu-btn, .rig-menu-btn, .refresh-pick, .refresh-now, .topbar-gear,
.icon-btn, .seg span, .fs-chip, .wk-chip, .wk-toolbar a, .wk-toolbar button, .burger, .power-drop-list button, .sh-menu-list button,
.refresh-menu li, .farm-rig, .hex-flip, .rw-row, .rw-tile, .rig-card, .farm-row {
  transition-property: transform, background-color, border-color, color, filter, box-shadow, opacity;
  transition-duration: var(--mh-t, .14s);
  transition-timing-function: var(--mh-ease, ease);
}
button:active:not(:disabled), .btn:active, .nav a:active, .hub-tabs a:active, .tabs a:active, summary.rig-menu-btn:active,
.rig-menu-btn:active, .refresh-pick:active, .refresh-now:active, .topbar-gear:active, .icon-btn:active, .seg label:active span,
.fs-chip:active, .wk-chip:active, .wk-toolbar a:active, .burger:active, .refresh-menu li:active, .farm-rig:active {
  transform: scale(.95);
  filter: brightness(.88);
  transition-duration: .06s;
}
/* Большие блоки (строки воркеров, карточки) — нажатие едва заметное */
.rw-row:active, .rw-tile:active, .rig-card:active, .farm-row:active { transform: scale(.992); filter: brightness(.95); transition-duration: .06s; }
@media (prefers-reduced-motion: reduce) {
  button:active, .btn:active, .nav a:active, .hub-tabs a:active, .rw-row:active, .rig-card:active, .farm-row:active { transform: none; }
}
/* Анимация: четыре режима — нет / лёгкая (по умолчанию) / плавная / сильная */
:root { --mh-press: .95; --mh-pop: .98; }
html[data-anim="smooth"] { --mh-press: .94; --mh-pop: .96; }
html[data-anim="strong"] { --mh-t: .5s; --mh-shift: 18px; --mh-press: .9; --mh-pop: .9; --mh-ease: cubic-bezier(.34, 1.4, .5, 1); }
@keyframes mh-pop-in { from { opacity: 0; transform: translateY(-6px) scale(var(--mh-pop)); } to { opacity: 1; transform: none; } }
button:active:not(:disabled), .btn:active, .nav a:active, .hub-tabs a:active, .tabs a:active, summary.rig-menu-btn:active,
.rig-menu-btn:active, .refresh-pick:active, .refresh-now:active, .topbar-gear:active, .icon-btn:active, .seg label:active span,
.fs-chip:active, .wk-chip:active, .wk-toolbar a:active, .burger:active, .refresh-menu li:active, .farm-rig:active { transform: scale(var(--mh-press)); }
/* «Нет»: никакого движения — всё появляется сразу, нажатие только чуть темнит кнопку */
/* Индикаторы (фитиль таймера, полоска уведомления, вентилятор автофана) — это не украшение, они работают всегда. */
html[data-anim="none"] { --mh-t: 0s; }
html[data-anim="none"] .sidebar { transition: none !important; }
html[data-anim="none"] .page, html[data-anim="none"] dialog[open], html[data-anim="none"] .refresh-menu, html[data-anim="none"] .power-drop-list, html[data-anim="none"] .sh-menu-list { animation: none !important; }
html[data-anim="none"] :active { transform: none !important; }
/* Четыре режима анимации — отдельной строкой, чтобы надписи помещались */
.st-anim { grid-column: 1 / -1; max-width: 460px; }
.st-anim .seg label span { padding: 0 6px; white-space: nowrap; }
/* «Анимация» — в свободных ячейках сетки порогов (две колонки справа от «Доли реджектов») */
.st-anim { grid-column: span 2; max-width: none; align-self: end; }
@media (max-width: 700px) { .st-anim { grid-column: 1 / -1; } }
/* Режимы заметнее отличаются: лёгкая — мгновенно, плавная — мягко, сильная — долго и с отскоком */
html[data-anim="smooth"] { --mh-t: .45s; --mh-shift: 12px; --mh-pop: .94; }
html[data-anim="strong"] { --mh-t: .85s; --mh-shift: 34px; --mh-press: .88; --mh-pop: .82; --mh-ease: cubic-bezier(.34, 1.56, .5, 1); }
html[data-anim="strong"] .page { animation-name: mh-page-in-strong; }
@keyframes mh-page-in-strong { from { opacity: 0; transform: translateY(var(--mh-shift)) scale(.97); } to { opacity: 1; transform: none; } }
/* Шапка рига: крупный хешрейт по монетам справа от плиток */
.hub-miner { grid-template-columns: minmax(200px, 320px) auto minmax(0, 1fr); }
.hub-big-hash { justify-self: end; display: grid; gap: 4px; padding-right: 8px; }
.hbh-row { display: grid; grid-template-columns: 26px auto auto auto; align-items: center; column-gap: 8px; justify-content: end; }
.hbh-row .coin-icon { width: 24px; height: 24px; }
.hbh-coin { font-size: 16px; font-weight: 700; color: var(--muted); }
.hbh-coin em { font-style: normal; font-size: 11px; }
.hbh-row b { font-size: 30px; font-weight: 800; color: #3ecf8e; font-variant-numeric: tabular-nums; text-align: right; line-height: 1.1; }
.hbh-row small { font-size: 13px; color: #3ecf8e; font-weight: 700; }
@media (max-width: 900px) {
  .hub-miner { grid-template-columns: 1fr; }
  .hub-big-hash { justify-self: start; padding-right: 0; }
  .hbh-row b { font-size: 24px; }
}
/* Заголовок таблицы карт убран — справа остаётся только «график →» */
.hub-panel > .card-head { justify-content: flex-end; min-height: 0; }
@media (min-width: 901px) {
  .hub-miner:has(.miner-grid) { grid-template-columns: max-content auto minmax(0, 1fr); }
}
/* Без белой полосы справа и без дёрганья экрана при загрузке:
   тёмная тема для полос прокрутки, место под полосу зарезервировано всегда,
   анимация появления страницы не вызывает лишнюю прокрутку. */
html { color-scheme: dark; background: var(--bg); overflow-y: scroll; scrollbar-gutter: stable; scrollbar-color: #3a4455 var(--bg); }
.workspace { overflow-x: clip; }
.page { overflow-anchor: none; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: #3a4455; border-radius: 6px; border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: #56637a; }
@media (max-width: 700px) {
  /* Ферма на телефоне — без «пирамидки»: нижний ряд такой же, как верхний.
     Все показатели в одну строку равными колонками: цифра сверху, подпись снизу;
     у хешрейта подписью служит монета (значок + тикер). */
  .farm-row-right { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); grid-template-columns: none; justify-items: center; align-items: start; }
  .farm-row-right .farm-coin { grid-column: auto; display: flex; flex-direction: column; align-items: center; gap: 0; }
  .farm-coin .farm-stat { display: contents; }
  .farm-coin .farm-stat > b { order: 1; }
  .farm-coin .farm-stat > span { display: none; }
  .farm-coin .farm-coin-tag { order: 2; margin: 2px 0 0; font-size: 9px; font-weight: 600; letter-spacing: .02em; text-transform: uppercase; color: var(--muted); gap: 3px; }
  .farm-coin .farm-coin-tag .coin-icon { width: 11px; height: 11px; }
  .farm-row-right .farm-stat b, .farm-coin > .farm-stat > b { font-size: 16px; }
  .farm-row-right .farm-stat > span { margin-top: 2px; }
}
.brand .logo-light { display: none; }
/* Боковое меню — отдельная скруглённая панель с тенью, одинаково в тёмной и светлой теме */
.sidebar { border: 1px solid rgba(255, 255, 255, 0.07); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25), 0 18px 40px rgba(0, 0, 0, 0.35); }
@media (min-width: 801px) {
  .sidebar { margin: 10px 0 10px 10px; height: calc(100vh - 20px); top: 10px; border-radius: 18px; }
}
@media (max-width: 800px) {
  .sidebar { border-radius: 0 18px 18px 0; }
}
/* Галочка в настройках рига — рядом с подписью */
.rig-gpus-form .switch-row { display: inline-flex; align-items: center; gap: 8px; }
.rig-gpus-form .switch-row input { width: auto; height: auto; margin: 0; }
/* Кнопка «скопировать лог» — справа в строке статуса лога, как в Shell */
.hub-term-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px; }
.hub-term-meta .log-copy { margin-left: auto; }
/* Поломки рига, найденные агентом (флешка, драйвер, зависание карты) — красные, с подсказкой при наведении */
.flag-health { color: var(--red); border-color: rgba(255, 93, 115, .5); background: rgba(255, 93, 115, .1); cursor: help; }
/* Верхние плитки на узком телефоне: число, единица и подпись ужимаются по ширине экрана,
   чтобы «0.409 кВт·ч» и «ПОТРЕБЛЕНИЕ» не вылезали за плитку. */
@media (max-width: 700px) {
  .hex-row > .hex b { font-size: clamp(12px, 3.9vw, 20px); white-space: nowrap; }
  .hex-row > .hex b small { font-size: clamp(7px, 2.2vw, 12px); }
  .hex-row > .hex b em { font-size: clamp(9px, 2.8vw, 13px); }
  .hex-row > .hex span, .hex-row .hex-face > span { font-size: clamp(7px, 2.3vw, 11px); letter-spacing: 0; white-space: nowrap; }
  .hex-row > .hex { padding-left: 4px; padding-right: 4px; }
}
/* Телефон: «1660S» вместо «1660 SUPER»; колонка модели — по длине коротких имён,
   чтобы производитель (MSI…) стоял сразу за моделью, а не уезжал вправо. */
.m-only { display: none; }
.sup-s { font-size: .72em; font-weight: 700; }
@media (max-width: 700px) {
  .m-only { display: inline; }
  .hub-gpu-table .gpu-brand { min-width: calc(var(--gname-m, var(--gname, 7)) * 0.6em); }
}
/* Встройка: метка «встройка · выкл» — сразу за коротким именем (Intel / Vega), без колонки модели. */
.hub-gpu-table tr.is-igpu .gpu-brand { min-width: 0; margin-right: 6px; }
/* Окно «Автофан»: что он реально делает на риге */
.af-live { margin: 4px 0 2px; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--line); font-size: 12px; line-height: 1.45; }
.af-live b { display: block; margin-bottom: 2px; }
.af-live-ok b { color: #3fb950; }
.af-live-warn b { color: var(--amber, #ffb020); }
.af-live-bad b, .af-live-bad { color: #ff5d73; }
/* Плитки карт в шапке рига: много карт — переносятся на следующую строку, без прокрутки вбок. */
.hub-miner .hub-gpu-tiles { flex-wrap: wrap; overflow: visible; }
@media (max-width: 700px) {
  .hub-miner .hub-gpu-tiles { gap: 3px; padding: 6px 0 2px; }
  .hub-miner .hub-gpu-tile { width: 47px; padding: 4px 2px; border-radius: 7px; gap: 1px; }
  .hub-miner .hub-gpu-tile-temp, .hub-miner .hub-gpu-tile-hs { font-size: 11px; }
  .hub-miner .hub-gpu-tile-fan { width: auto; min-width: 0; margin: 1px 2px; padding: 1px 3px; font-size: 11px; }
}
/* Тайминги памяти AMD в окне разгона: поле во всю ширину и готовые варианты-«чипы» */
.oc-tweak { display: grid; gap: 6px; }
.oc-tweak input { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.oc-tweak-presets { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.oc-tweak-chip { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; min-width: 0; padding: 6px 8px; border-radius: 8px;
  border: 1px solid var(--line); background: rgba(255,255,255,.03); color: var(--muted); font: inherit; font-size: 11px; text-align: left; cursor: pointer; }
.oc-tweak-chip b { color: var(--text); font-weight: 700; }
.oc-tweak-chip code { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--blue); font-size: 11px; }
.oc-tweak-chip:hover { border-color: var(--blue); }
.oc-tweak-chip.is-fit { border-color: rgba(63, 185, 80, .6); background: rgba(63, 185, 80, .08); }
@media (max-width: 480px) { .oc-tweak-presets { grid-template-columns: 1fr; } }
/* Воркеры «компактно» — тонкие строки одна под другой: имя с числом карт, автофан, время работы,
   производители карт; справа хешрейт и шары. */
.rw-list { gap: 2px; }
.rw-list .rw-row { grid-template-columns: 10px minmax(150px, 280px) 100px minmax(0, 1fr) 170px; gap: 10px;
  padding: 5px 12px; min-height: 32px; border: 0; border-radius: 4px; background: var(--card); }
.rw-list .rw-row:nth-child(even) { background: var(--card-2); }
/* Наведение — лёгкий голубой (в обеих темах), а не тёмная дымка */
.rw-list .rw-row:hover, .rw-tile:hover { background: rgba(77, 163, 255, .1); }
.rw-id { display: inline-flex; align-items: center; gap: 7px; min-width: 0; }
.rw-fan { display: inline-grid; place-items: center; color: var(--blue); }
.rw-list .rw-row > .rw-up, .rw-list .rw-row > .rw-off { text-align: left; }
.rw-list .rw-vs { justify-content: flex-start; }
/* Шары: A принятые, R отклонённые, мелко — доля принятых */
.rw-sh { display: inline-flex; align-items: baseline; gap: 3px; justify-content: flex-end; font-size: 12px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.rw-sh i { font-style: normal; font-weight: 700; color: var(--muted); }
.rw-sh i + b { margin-right: 4px; }
.rw-sh b { color: var(--text); font-weight: 600; }
.rw-sh b.is-bad { color: var(--red); }
.rw-sh small { color: var(--muted); font-size: 10px; margin-left: 2px; }
.miner-box .rw-sh { justify-content: flex-start; margin-top: 2px; }
@media (max-width: 700px) {
  .rw-list .rw-row { grid-template-columns: 10px minmax(0, 1fr) auto; grid-template-rows: auto auto; row-gap: 2px; padding: 6px 10px; }
  .rw-list .rw-row > .rw-up, .rw-list .rw-row > .rw-off { grid-column: 3; grid-row: 1; text-align: right; }
  .rw-list .rw-row .rw-hash { display: block; grid-column: 2; grid-row: 2; text-align: left; }
  .rw-list .rw-row .rw-sh { grid-column: 3; grid-row: 2; }
  .rw-list .rw-row .rw-hash b { font-size: 13px; }
}

.miner-box .rw-sh { display: inline-flex; }
.miner-box .rw-sh > * { display: inline; }
.miner-box .rw-sh::before, .miner-box .rw-sh *::before { content: none; }
@media (max-width: 700px) { .miner-box .rw-sh { display: flex; } }
.rw-hash b { color: var(--text); }

/* Питание фермы: все риги, статус и одна кнопка включить/выключить. */
.farm-power-dialog { width: min(460px, calc(100% - 24px)); }
.farm-power-dialog h3 { margin: 0 0 10px; }
.fp-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; max-height: min(60vh, 520px); overflow-y: auto; }
.fp-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto; align-items: center; gap: 10px; padding: 8px 10px; border: 1px solid var(--line); border-radius: 10px; background: var(--card-2); }
.fp-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-state { font-size: 13px; color: var(--muted); white-space: nowrap; }
.fp-row.is-on .fp-state { color: var(--green); }
.fp-row.is-waking .fp-state { color: var(--amber); }
.fp-row.is-failed .fp-state { color: var(--red); }
.fp-act form { margin: 0; }
.fp-act .btn { padding: 5px 12px; font-size: 13px; min-width: 96px; }
.fp-act .btn:disabled { opacity: .45; cursor: not-allowed; }
.fp-hint { grid-column: 2 / -1; font-size: 12px; color: var(--muted); }
.fp-note { margin: 0 0 10px; padding: 8px 10px; border-radius: 8px; font-size: 13px; background: var(--card-2); border: 1px solid var(--line); }
.fp-note.is-bad { border-color: var(--red); }
.fp-foot { margin: 10px 0 0; font-size: 12px; }
@media (max-width: 520px) {
  .fp-row { grid-template-columns: auto minmax(0, 1fr) auto; }
  .fp-state { grid-column: 2; grid-row: 2; }
  .fp-act { grid-column: 3; grid-row: 1 / span 2; }
}
.farm-power-dialog .row-actions { margin-top: 12px; }
.fp-id { display: grid; min-width: 0; }
.fp-seen { font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fp-act .fp-timer:disabled { opacity: 1; cursor: default; color: var(--amber); border-color: var(--amber); font-variant-numeric: tabular-nums; }

/* Настройки рига: имя/описание, работа рига, «Переслать всё». */
.rig-set h2 { margin: 0 0 10px; }
.rig-set-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 14px; margin: 0 0 8px; }
.rig-set-form label { display: grid; gap: 4px; font-size: 13px; color: var(--muted); }
.rig-set-form input, .rig-set-form select, .rig-set-form textarea { font: inherit; color: var(--text); background: #12141a; border: 1px solid var(--line); border-radius: 8px; padding: 7px 10px; }
.rig-set-form input[type=number] { width: 120px; }
.rig-set-form input[name=name] { width: min(260px, 100%); }
.rig-set-wide { flex: 1 1 320px; }
.rig-set-wide textarea { width: 100%; resize: vertical; min-height: 40px; }
.kv .inline-form { display: inline-flex; margin: 0; }
.rig-note { display: block; font-size: 12px; color: var(--muted); font-weight: 400; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 220px; }
.kv-token { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }

/* Ватты рига с молнией (как на странице рига) и тоньше цифры ватт и хешрейта в списке воркеров. */
.rig-la { display: inline-flex; align-items: center; gap: 4px; }
.rig-bolt { color: var(--blue); flex: none; }
.rig-la .rig-watts { font-weight: 500; }
.rc-hash b { font-weight: 500; }
.tab-power b { font-weight: 500; }

/* Бейджи состояния рига: «стикер», срезанный верхней рамкой карточки — ровный верх вплотную к рамке,
   скруглённый низ (видна нижняя половина пилюли, чуть больше). Внутри карточки: на соседние не залезает.
   Вместо строки подписей внизу карточки (её больше нет, все карточки одной высоты и симметричны). */
.rig-list { gap: 8px; }
.rig-list .rig-tiles { padding-top: 0; align-self: center; }
.rig-list .rig-card .rig-row { padding-top: 8px; padding-bottom: 8px; }
.hub-miner { position: relative; }
.rig-badges {
  position: absolute; top: 0; left: 50%; transform: translateX(-50%); z-index: 2;
  display: flex; gap: 6px; max-width: calc(100% - 24px); overflow: hidden; pointer-events: auto;
}
.rig-badge {
  display: inline-flex; align-items: center; justify-content: center; height: 18px; padding: 0 12px 1px;
  border: 1px solid var(--line); border-top: 0; border-radius: 0 0 11px 11px;
  font-size: 11px; font-weight: 600; line-height: 1; white-space: nowrap; color: var(--muted);
  background: var(--card-2);
}
.rig-badge.is-bad { color: var(--red); border-color: var(--red); background: linear-gradient(rgba(255, 77, 109, .18), rgba(255, 77, 109, .18)), var(--card); }
.rig-badge.is-warn { color: var(--amber); border-color: var(--amber); background: linear-gradient(rgba(255, 176, 32, .16), rgba(255, 176, 32, .16)), var(--card); }
.hub-miner:has(.rig-badges) { padding-top: 24px; padding-bottom: 24px; }
/* Телефон: ватты рига — в правом верхнем углу карточки, на линии имени; отступы сверху и снизу равные,
   бейдж на рамке по центру и не касается имени. */
@media (max-width: 700px) {
  .rig-list .rig-card .rig-row { padding: 14px 12px; }
  .rig-list .rig-card .rig-row .rig-meta { position: absolute; top: 14px; right: 12px; margin: 0; font-size: 13px; line-height: 20px; }
  .rig-list .rig-card .rig-row .rig-id { padding-right: 84px; }
  /* Со стикером — строка имени и ватты ниже стикера, чтобы он их не касался. */
  .rig-list .rig-card:has(.rig-badges) .rig-row { padding-top: 26px; }
  .rig-list .rig-card:has(.rig-badges) .rig-row .rig-meta { top: 26px; }
}

/* Шапка рига: хешрейт тоньше и чуть меньше; доля принятых шар рядом с A/R. */
.hbh-row b { font-size: 26px; font-weight: 500; }
.hbh-row small { font-weight: 500; }
@media (max-width: 700px) { .hbh-row b { font-size: 22px; } }
.hero-share-pct { margin-left: 4px; font-weight: 600; color: var(--muted); }
.hero-share-pct.is-ok { color: var(--green); }
.hero-share-pct.is-warn { color: var(--amber); }
.hero-share-pct.is-bad { color: var(--red); }

/* Полоса фермы на сводке: хешрейт сразу за значками ригов, без подписи, тонким шрифтом. */
.farm-coin-hash { font-size: 20px; font-weight: 500; font-variant-numeric: tabular-nums; color: var(--text); white-space: nowrap; }
.farm-coin-hash small { font-size: 12px; color: var(--muted); font-weight: 500; }
.farm-row-stats .farm-coin { margin-left: 4px; }
@media (max-width: 700px) { .farm-coin-hash { font-size: 17px; } }
/* Очистка журнала (метла) рядом со ссылкой «журнал» и в шапке журнала. */
.card-head-actions { display: inline-flex; align-items: center; gap: 8px; }
.journal-clear { margin: 0; }
.journal-clear .icon-btn:hover { color: var(--red); }
@media (max-width: 700px) {
  /* Хешрейт фермы за значками ригов — своей строкой по центру: монета, затем цифра. */
  .farm-row-stats > .farm-coin { grid-column: 1 / -1; display: flex; flex-direction: row; justify-content: center; align-items: center; gap: 6px; margin: 2px 0 0; }
  .farm-row-stats > .farm-coin .farm-coin-tag { order: 0; margin: 0; font-size: 14px; text-transform: none; color: var(--text); gap: 4px; }
  .farm-row-stats > .farm-coin .farm-coin-tag .coin-icon { width: 17px; height: 17px; }
  .farm-row-stats > .farm-coin .farm-coin-hash { order: 1; font-size: 18px; }
}

/* Компактнее по вертикали (ПК): шапка рига, вкладки, полоса графика, таблица карт и главное меню —
   строка карты в одну линию (название + модель/шина мелко, разгон «+100 1250 975/—» в строку). */
@media (min-width: 701px) {
  .nav { gap: 0; }
  .nav a { padding: 5px 12px; }
  .brand { margin-bottom: 10px; }
  .back { margin: 0 0 6px; }
  .hub-shell { padding: 6px 8px; margin-bottom: 4px; }
  .hub-miner { padding: 6px 12px; min-height: 0; gap: 12px; }
  .hub-miner:has(.rig-badges) { padding-top: 22px; padding-bottom: 22px; }
  .hub-miner .hub-gpu-tile { padding-top: 4px; padding-bottom: 4px; }
  .tabs.hub-tabs { margin: 2px 0 4px; }
  .hub-tabs a { padding: 5px 12px; }
  .hash-band { padding: 4px 12px; margin-bottom: 4px; }
  .hash-band-chart { height: 30px; }
  .hash-band-now { flex-direction: row; align-items: baseline; gap: 8px; }
  .hash-band-now span { font-size: 10px; }
  .hash-band-now b { font-size: 18px; line-height: 1.05; }
  .hub-panel { padding-top: 2px; padding-bottom: 2px; }
  table.grid.hub-gpu-table th { padding: 4px 10px; }
  table.grid.hub-gpu-table td { padding: 3px 10px; line-height: 1.2; }
  .hub-gpu-table .gpu-idline { display: inline; padding-left: 6px; font-size: 12px; }
  .hub-gpu-table .gpu-idline > * { display: inline; }
  .hub-gpu-table .flag-board { top: -1px; }
  .hub-gpu-table .oc-lock, .hub-gpu-table .oc-volt { display: inline; margin-left: 4px; }
  .hub-gpu-table .icon-btn.oc-all-btn { padding: 0; }
  .hub-gpu-table .gpu-edit-cell .icon-btn { height: 26px; }
}
.hash-band-link { font-size: 11px; color: var(--muted); text-decoration: none; margin-top: 1px; }
.hash-band-link:hover { color: var(--blue); }

/* Телефон: страница рига плотнее, — шапка, вкладки с ваттами в одной строке, полоса графика, таблица карт. */
@media (max-width: 700px) {
  .back { margin: 0 0 4px; font-size: 13px; }
  .hub-shell { padding: 6px; margin-bottom: 6px; border-radius: 12px; }
  .hub-miner { padding: 8px 10px; gap: 8px; min-height: 0; }
  .hub-miner:has(.rig-badges) { padding-top: 22px; padding-bottom: 22px; }
  .hub-miner .hub-gpu-tile { padding-top: 3px; padding-bottom: 3px; }
  .hbh-row b { font-size: 20px; }
  .hbh-row .coin-icon { width: 18px; height: 18px; }
  .tabs.hub-tabs { flex-wrap: nowrap; margin: 4px 0 6px; gap: 6px; }
  .hub-tabs-links { flex-wrap: nowrap; overflow-x: auto; flex: 1; min-width: 0; scrollbar-width: none; }
  .hub-tabs-links::-webkit-scrollbar { display: none; }
  .hub-tabs a { padding: 5px 9px; font-size: 13px; white-space: nowrap; }
  .tab-power { flex: none; margin-left: 0; font-size: 13px; }
  .hash-band { padding: 5px 10px; margin-bottom: 6px; gap: 8px; align-items: center; }
  .hash-band-chart { height: 34px; font-size: 12px; }
  .hash-band-now { flex-direction: row; align-items: baseline; gap: 6px; min-width: 0; }
  .hash-band-now span { display: none; }
  .hash-band-now b { font-size: 16px; }
  .hub-panel { padding: 2px 8px; }
  .hub-gpu-table th, .hub-gpu-table td { padding: 4px; }
  .hub-gpu-table .flag-board { top: -1px; }
  .hub-gpu-table .gpu-edit-cell .icon-btn { height: 24px; width: 28px; }
  .hub-gpu-table .icon-btn.oc-all-btn { padding: 0; }
}
.rig-miner-form input[name=miner_args] { min-width: 260px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 13px; }
@media (max-width: 700px) { .rig-miner-form input[name=miner_args] { min-width: 0; width: 100%; } }

/* Изменить лист на странице рига + выбор «Все воркеры / Создать новый лист». */
.rig-fs-edit { margin: 0 0 12px; }
.rig-fs-edit > summary { list-style: none; display: inline-flex; gap: 6px; align-items: baseline; cursor: pointer; }
.rig-fs-edit > summary::-webkit-details-marker { display: none; }
.rig-fs-edit[open] > summary { margin-bottom: 10px; }
.rig-fs-scope { width: min(560px, calc(100% - 24px)); }
.rig-fs-scope h3 { margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }
.rig-fs-count { display: inline-grid; place-items: center; min-width: 22px; height: 22px; padding: 0 6px; border-radius: 999px; background: var(--card-2); font-size: 12px; }
.rig-fs-choices { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.rig-fs-choice { display: flex; flex-direction: column; justify-content: space-between; gap: 10px; padding: 12px; border: 1px solid var(--line); border-radius: 10px; }
.rig-fs-choice p { margin: 0; color: var(--muted); font-size: 13px; }
@media (max-width: 520px) { .rig-fs-choices { grid-template-columns: 1fr; } }
.rig-fs-scope .row-actions { justify-content: flex-end; margin-top: 12px; }

/* Украшение шапки рига: полупрозрачный каркас из вложенных прямоугольников и треугольных граней
   справа за хешрейтом — фон, цифрам не мешает. */
.hub-shell { position: relative; overflow: hidden; isolation: isolate; }
.hub-shell::before {
  content: ""; position: absolute; z-index: -1; pointer-events: none;
  right: 7%; top: 50%; width: 250px; height: 175px; transform: translateY(-50%);
  background: url("/static/img/deco-prism.svg?v=3") no-repeat center / contain;
  opacity: .95;
}
.hub-shell .hub-miner { background: linear-gradient(90deg, #12171f 0%, #12171f 40%, rgba(18, 23, 31, .2) 75%, rgba(18, 23, 31, .35) 100%); }
html[data-theme="light"] .hub-shell::before { opacity: .55; }
html[data-theme="light"] .hub-shell .hub-miner { background: linear-gradient(90deg, #f5f7fa 0%, #f5f7fa 40%, rgba(245, 247, 250, .3) 75%, rgba(245, 247, 250, .45) 100%); }
@media (max-width: 700px) { .hub-shell::before { width: 300px; height: 210px; right: -50px; top: auto; bottom: -30px; transform: none; opacity: .7; } }

/* Плитки карт: цифра ровно по центру, «°» и «%» висят справа и не сдвигают её. */
.hub-gpu-tile .tu { display: inline-block; width: 0; overflow: visible; font-style: normal; white-space: nowrap; }
/* Полоса графика: вместо «график →» — значок «развернуть» в правом верхнем углу. */
.hash-band { position: relative; }
.hash-band-expand { position: absolute; top: 4px; right: 6px; display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 6px; color: var(--muted); text-decoration: none; }
.hash-band-expand:hover { color: var(--blue); background: var(--card-2); }
.hash-band-now { padding-right: 22px; }

/* Плашка вентилятора на плитке — почти до краёв плитки, знак «%» мельче. */
/* Плашка — от рамки до рамки плитки: у плитки нет боковых отступов, у плашки — полей. */
.hub-gpu-tile, .rig-tiles .hub-gpu-tile, .hub-miner .hub-gpu-tile { padding-left: 0; padding-right: 0; }
.hub-gpu-tile .hub-gpu-tile-fan, .rig-tiles .hub-gpu-tile .hub-gpu-tile-fan, .hub-miner .hub-gpu-tile .hub-gpu-tile-fan {
  align-self: stretch; width: auto; min-width: 0; margin-left: 0; margin-right: 0; border-radius: 4px; text-align: center;
}
.hub-gpu-tile .tu { font-size: .72em; }
/* Кнопка «назад»: изогнутая стрелка + подпись, на всех экранах. */
.back-link { display: inline-flex; align-items: center; gap: 6px; text-decoration: none; }
.back-link .back-ico { flex: none; }
.back .back-link { color: var(--blue); font-weight: 500; }
.back .back-link:hover { color: #fff; }
/* Текст в плашке — ровно по центру по вертикали (одинаковые отступы сверху и снизу);
   «%» чуть левее, чтобы «°» и «%» начинались на одной линии. */
.hub-gpu-tile .hub-gpu-tile-fan, .rig-tiles .hub-gpu-tile .hub-gpu-tile-fan, .hub-miner .hub-gpu-tile .hub-gpu-tile-fan {
  display: flex; align-items: center; justify-content: center; height: 18px; padding: 0; line-height: 1;
}
.hub-gpu-tile .hub-gpu-tile-fan .tu { margin-left: -1px; align-self: center; }
.hub-gpu-tile .hub-gpu-tile-temp .tu { margin-left: 1px; vertical-align: top; }
/* Плитки в списке воркеров — три строки, как в шапке рига: температура, вентилятор, хешрейт карты. */
.rig-tiles .hub-gpu-tile { min-height: 0; padding-top: 5px; padding-bottom: 5px; gap: 3px; }
.rig-tiles .hub-gpu-tile-hs { font-size: 12px; font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; }
@media (min-width: 701px) { .hub-gpu-tile .hub-gpu-tile-fan, .rig-tiles .hub-gpu-tile .hub-gpu-tile-fan, .hub-miner .hub-gpu-tile .hub-gpu-tile-fan { height: 19px; } }

/* Телефон и планшет: ничего не вылезает за экран — и при крупном шрифте в настройках телефона */
.st-layout { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); }
@media (max-width: 1100px) { .st-layout { grid-template-columns: minmax(0, 1fr); } }
.st-card { min-width: 0; }
.st-field .seg, .st-field .seg label, .st-field .seg label span { min-width: 0; }
.st-field .seg label span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 4px; }
.st-rig-main b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 560px) {
  .st-theme { grid-column: 1 / -1; }
  .st-rig { flex-wrap: wrap; row-gap: 6px; }
  .st-rig-main { flex: 1 1 120px; }
  .st-rig-actions { margin-left: auto; }
  .st-add { flex-wrap: wrap; }
  .st-add input { flex: 1 1 160px; }
}
@media (max-width: 700px) {
  /* Плитки сводки: подпись переносится во вторую строку, число ужимается под ширину плитки */
  /* Длинное число (1195.30 MH/s) — мельче, чтобы единица не обрезалась */
  .hex b.is-long { font-size: 11.5px; }
  .hex b.is-long small { font-size: 7.5px; }
  .hex span, .hex-face > span, .farm-stat > span { white-space: normal; overflow: visible; text-overflow: clip; line-height: 1.15; }
}
@media (max-width: 1279px) {
  /* Вкладки рига — одной строкой и листаются вбок: край затухает, видно, что дальше есть ещё */
  .hub-tabs-links { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; min-width: 0; padding-right: 24px; -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent);
    mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); }
  .hub-tabs-links::-webkit-scrollbar { display: none; }
  .hub-tabs { flex-wrap: nowrap; }
  .hub-tabs a { white-space: nowrap; }
  .hub-tabs > :not(.hub-tabs-links) { flex: none; }
}
@media (max-width: 480px) {
  /* Таблица карт: значки (MSI, «нет карты», «встройка») уходят под имя, а не раздвигают таблицу */
  table.grid.hub-gpu-table th, table.grid.hub-gpu-table td { padding-left: 5px; padding-right: 5px; }
  .hub-gpu-table td:first-child .flag:not(.flag-board) { display: block; width: max-content; margin: 1px 0 0 calc(4.6ch + 6px); }
}
@media (min-width: 701px) and (max-width: 1279px) {
  /* Планшет: подробности карты (память, шина) — второй строкой под именем, чтобы таблица влезала целиком */
  .hub-gpu-table .gpu-idline { display: block; padding-left: calc(4.6ch + 8px); font-size: 11px; }
}
@media (max-width: 360px) {
  table.grid.hub-gpu-table th, table.grid.hub-gpu-table td { padding-left: 3px; padding-right: 3px; }
}
/* Таблица карт в узком месте (планшет с открытым меню): без колонок разгона и статуса — разгон под карандашом */
.table-scroll:has(> .hub-gpu-table) { container: gputable / inline-size; }
@container gputable (max-width: 720px) {
  .hub-gpu-table th:nth-child(6), .hub-gpu-table td:nth-child(6),
  .hub-gpu-table th:nth-child(7), .hub-gpu-table td:nth-child(7),
  .hub-gpu-table .gpu-status-col, .hub-gpu-table .gpu-status-cell { display: none; }
}
@media (max-width: 340px) { .hex b.is-long { font-size: 10.5px; } .hex b.is-long small { font-size: 7px; } }
/* Настройки рига: галочки «что показывать» */
.rig-set-form label.rig-check { display: inline-flex; align-items: center; gap: 8px; color: var(--text); font-size: 14px; min-height: 34px; cursor: pointer; }
.rig-set-form label.rig-check input { width: 18px; height: 18px; margin: 0; accent-color: var(--blue); }
/* Настройки рига: все блоки одинаково — подпись над полем, поля и кнопки одной высоты, кнопка по низу полей */
.rig-set { padding: 14px 12px; }
.rig-set + .card, .card + .rig-set { margin-top: 10px; }
.rig-set h2 { font-size: 15px; margin: 0 0 10px; }
.rig-set-form { align-items: flex-end; gap: 10px 14px; margin: 0 0 6px; }
.rig-set-form label:not(.rig-check) { display: grid; gap: 4px; font-size: 12px; color: var(--muted); }
.rig-set-form input:not([type=checkbox]), .rig-set-form select { height: 34px; box-sizing: border-box; padding: 0 10px; font-size: 14px; border-radius: 8px; }
.rig-set-form input[type=number] { width: 140px; }
.rig-set-form input[name=name] { width: min(280px, 100%); }
.rig-set-form select { min-width: 160px; }
.rig-set-form .btn { height: 34px; box-sizing: border-box; padding: 0 16px; display: inline-flex; align-items: center; }
.rig-set > p.muted { margin: 6px 0 0; font-size: 12px; line-height: 1.45; }
.rig-set > h2 + p.muted { margin: -4px 0 10px; }
@media (max-width: 700px) {
  .rig-set-form label:not(.rig-check) { flex: 1 1 140px; }
  .rig-set-form input[type=number], .rig-set-form select, .rig-set-form input[name=name] { width: 100%; min-width: 0; }
}
/* Плитки карт: число вместе со знаком «°» / «%» — по центру плитки по видимой ширине, как хешрейт под ним
   (знак своей ширины: пустой ячейки справа нет, поэтому строка не кажется сдвинутой влево). */
.hub-gpu-tile .hub-gpu-tile-temp .tu, .hub-gpu-tile .hub-gpu-tile-fan .tu { width: auto; margin-left: 0; text-align: left; }
.hub-gpu-tile .hub-gpu-tile-temp .tu { margin-left: 1px; }
/* Ячейка производителя (MSI, PowerColor…) — по самому длинному в риге: данные после неё начинаются на одной линии. */
.hub-gpu-table .gpu-board-slot { display: inline-block; font-size: 10px; min-width: calc(var(--gboard, 0) * 0.6em + 16px); vertical-align: baseline; }
@media (max-width: 700px) { .hub-gpu-table .gpu-board-slot { min-width: 0; font-size: inherit; } }
/* Подсказки «!» синие (в цвет сайта); значок сразу после текста подписи, а не у правого края. */
.st-field .fld-name, .rig-set-form .fld-name { display: block; white-space: normal; }
.st-field .fld-name .fld-tip, .rig-set-form .fld-name .fld-tip { vertical-align: -2px; margin-left: 5px; }
.st-image .muted { display: block; flex: 1 1 220px; }
.st-image .muted .fld-tip { vertical-align: -2px; }
/* Окна: основная кнопка у левого края, «Отмена» / «Закрыть» — у правого (под правую руку). */
dialog :is(.row-actions, .gpu-oc-actions, .mh-dialog-actions) { justify-content: flex-start; }
dialog :is(.row-actions, .gpu-oc-actions, .mh-dialog-actions) > .btn:last-child:not(.btn-primary):not(.btn-danger) { margin-left: auto; }
@media (max-width: 400px) {
  /* Узкий телефон: производитель справа от модели, но мельче — таблица влезает без прокрутки */
  .hub-gpu-table .gpu-board-slot { font-size: 8px; min-width: calc(var(--gboard, 0) * 0.62em + 8px); }
  .hub-gpu-table .flag-board { font-size: 8px; padding: 0 2px; }
  .hub-gpu-table .gpu-brand { margin-right: 3px; }
}
@media (max-width: 350px) { .hub-gpu-table .gpu-board-slot { display: block; margin-left: calc(4.6ch + 6px); } }
@media (max-width: 560px) {
  /* Воркеры в настройках: всё в одну строку — имя с многоточием слева, кнопки справа */
  .st-rig { flex-wrap: nowrap; gap: 8px; padding: 8px 10px; }
  .st-rig-main { flex: 1 1 auto; min-width: 0; }
  .st-rig-main b { display: block; }
  .st-rig-actions { flex: none; gap: 4px; margin-left: 0; }
  .st-rig-actions .btn { padding: 4px 8px; font-size: 12px; }
}
/* Нажатие не уменьшает кнопки и строки: у широкой строки (лист на вкладке рига, пункт меню, кнопка на всю ширину)
   край уезжал из-под курсора, браузер не засчитывал нажатие — строка «мигала», лист не ставился.
   Нажатие видно по затемнению; лёгкое сжатие осталось только у маленьких значков. */
button:active:not(:disabled), .btn:active, .nav a:active, .hub-tabs a:active, .tabs a:active, summary.rig-menu-btn:active,
.rig-menu-btn:active, .wk-toolbar a:active, .refresh-menu li:active,
.rw-row:active, .rw-tile:active, .rig-card:active, .farm-row:active { transform: none; }
html .icon-btn:active:not(:disabled), html .topbar-gear:active, html .refresh-pick:active, html .refresh-now:active,
html .burger:active, html .fs-chip:active, html .wk-chip:active, html .farm-rig:active { transform: scale(var(--mh-press)); }
/* Окно разгона «Все карты»: переключатель режима и таблица «своя строка на каждую карту» */
.oc-mode { margin: 0 0 12px; }
.oc-mode .seg { display: flex; width: 100%; }
.oc-mode .seg label { flex: 1; }
.oc-mode .seg span { text-align: center; padding: 7px 10px; font-size: 13px; }
.gpu-oc-grid .oc-common.is-per-card { display: none; }
.oc-per-card { margin: 0 0 12px; }
.oc-card-table { width: 100%; border-collapse: collapse; }
.oc-card-table th, .oc-card-table td { padding: 4px 4px; font-size: 12px; white-space: nowrap; }
.oc-card-table thead th { color: var(--muted); font-weight: 600; text-align: center; }
.oc-card-table tbody th { text-align: left; font-weight: 400; padding-right: 10px; }
.oc-card-table input { width: 70px; height: 30px; box-sizing: border-box; padding: 0 6px; text-align: center; font: inherit; font-size: 13px;
  color: var(--text); background: #12141a; border: 1px solid var(--line); border-radius: 6px; -moz-appearance: textfield; appearance: textfield; }
.oc-card-table input::-webkit-outer-spin-button, .oc-card-table input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.oc-card-table input:disabled { opacity: .35; }
.oc-card-table .gpu-idx { font-size: 11px; color: var(--muted); margin-right: 4px; }
.oc-card-table .flag-board { font-size: 10px; padding: 0 4px; }
.oc-copy-first { margin-top: 8px; height: 30px; padding: 0 12px; font-size: 12px; }
.oc-per-card-note { margin: 6px 0 0; font-size: 12px; }
@media (max-width: 700px) {
  /* Телефон: столбец карт закреплён слева, значения листаются вбок */
  .oc-card-table tbody th { position: sticky; left: 0; z-index: 1; background: var(--card, #22262f); }
  .oc-card-table input { width: 60px; }
}
.gpu-oc-dialog:has(form.is-per-card) { width: min(990px, 96vw); }
.oc-per-card, .oc-per-card .table-scroll { max-width: 100%; min-width: 0; }
.oc-per-card .table-scroll { overflow-x: auto; }
.gpu-oc-dialog form { min-width: 0; max-width: 100%; }
.oc-card-table input { width: 64px; }
@media (max-width: 700px) {
  /* Телефон: у каждой карты своя карточка — имя сверху, поля с подписями по три в ряд, без прокрутки вбок */
  .oc-per-card .table-scroll { overflow: visible; }
  .oc-card-table, .oc-card-table tbody { display: block; width: 100%; }
  .oc-card-table thead { display: none; }
  .oc-card-table tr { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px 8px; padding: 8px 0 10px; border-bottom: 1px solid var(--line); }
  .oc-card-table tbody th { grid-column: 1 / -1; position: static; padding: 0; background: none; }
  .oc-card-table td { display: grid; gap: 2px; padding: 0; border: 0; }
  .oc-card-table td::before { content: attr(data-l); font-size: 11px; color: var(--muted); }
  .oc-card-table input { width: 100%; height: 34px; font-size: 14px; }
  .oc-card-table td:has(input:disabled) { display: none; }
}
@media (max-width: 700px) { table.grid.oc-card-table td, table.grid.oc-card-table tbody th { border: 0; } }
.oc-same { display: flex; align-items: center; gap: 8px; margin: 2px 0 4px; font-size: 13px; color: var(--text); cursor: pointer; }
.oc-same input { width: 16px; height: 16px; margin: 0; accent-color: var(--blue); }
.gpu-oc-dialog form label.oc-same { display: flex; flex-direction: row; align-items: center; gap: 8px; }
.gpu-oc-dialog form label.oc-same[hidden], .oc-mode[hidden], .oc-per-card[hidden] { display: none; }
/* Память карты (Samsung, Hynix, Micron…) — маленькая бирюзовая плашка перед моделью, не мешает имени карты */
.hub-gpu-table .flag-mem { color: #5fd3c6; border: 1px solid rgba(95, 211, 198, .45); background: rgba(95, 211, 198, .08);
  font-size: 10px; font-style: normal; font-weight: 600; line-height: 1.3; padding: 0 5px; border-radius: 5px; margin-right: 6px; vertical-align: 1px; }
html[data-theme="light"] .hub-gpu-table .flag-mem { color: #0e7f74; border-color: rgba(14, 127, 116, .45); background: rgba(14, 127, 116, .07); }
/* Полётные листы: новый лист — в окне по кнопке; версия майнера — рядом с доп. аргументами */
.fs-title-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 0 10px; }
.fs-title-row .fs-title { margin: 0; }
.fs-new-dialog { width: min(920px, 96vw); max-height: 92vh; overflow: auto; box-sizing: border-box; padding: 14px 16px;
  border: 1px solid var(--line); border-radius: 12px; background: var(--card); color: var(--text); }
.fs-new-dialog::backdrop { background: rgba(0, 0, 0, .55); }
.fs-new-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.fs-new-head h2 { margin: 0; }
.fs-ver-args { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 10px; align-items: start; }
.fs-ver select { width: 100%; }
@media (max-width: 700px) {
  .fs-ver-args { grid-template-columns: 1fr; }
  .fs-title-row .btn { padding: 0 10px; }
}
.fs-ver-args { margin-top: 10px; }
.fs-ver-args .fs-args { margin-top: 0; }
.fs-mver { color: var(--muted); font-size: 11px; font-weight: 500; }
/* Форма листа: все поля одной высоты — подсказка доп. аргументов внутри поля, а не строкой под ним */
.fs-form .fs-args-hint { display: none; }
.fs-form .fs-field, .fs-form .fs-field-dd { min-height: 54px; box-sizing: border-box; }
.fs-form .fs-args input::placeholder { color: var(--muted); opacity: .8; font-size: 12px; }
.vbadge-cpu { color: #f5c518; background: rgba(245, 197, 24, .12); }
html[data-theme="light"] .vbadge-cpu { color: #a87f00; background: rgba(168, 127, 0, .1); }
.fs-edit-open { margin: 4px 0 8px; width: auto; justify-self: start; align-self: flex-start; }
/* Список майнеров — по ширине содержимого (название и значки в одну строку), у правого края поля */
.fs-form .mh-dd[data-dd=radio] .mh-dd-list { width: max-content; min-width: 100%; left: auto; right: 0; }
.fs-form .mh-dd[data-dd=radio] .mh-dd-text { white-space: nowrap; }

/* Сводка: «Мои фермы» — строкой или плиткой. */
.farm-list-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 0 8px; }
.farm-list-head .farm-list-title { margin: 0; }
.farm-row-name-line { font-size: 13px; font-weight: 700; color: var(--muted); margin: 0 0 6px; }
.farm-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.farm-tile {
  display: flex; flex-direction: column; gap: 12px; padding: 14px 16px; border: 1px solid var(--line); border-radius: 12px;
  background: var(--card); color: var(--text); text-decoration: none; max-width: 420px;
}
.farm-tile:hover { border-color: var(--blue); }
.ft-head { display: flex; align-items: center; gap: 8px; }
.ft-head svg { color: var(--blue); flex: none; }
.ft-head b { font-size: 15px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ft-state { margin-left: auto; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
.ft-state.is-ok { color: var(--green); background: rgba(62, 207, 142, .12); }
.ft-state.is-part { color: #f5a524; background: rgba(245, 165, 36, .12); }
.ft-state.is-off { color: var(--red); background: rgba(255, 93, 115, .12); }
.ft-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.ft-foot { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; padding-top: 10px; border-top: 1px solid var(--line); }
.ft-stat { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.ft-stat b { font-size: 20px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ft-foot .ft-stat b { font-size: 16px; }
.ft-stat b small { font-size: 12px; color: var(--muted); font-weight: 600; }
.ft-stat > span { color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .05em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ft-stat.is-bad b { color: var(--red); }
.ft-blue { color: var(--blue); }
.ft-green { color: var(--green); }
.ft-meter { display: block; height: 4px; border-radius: 4px; background: rgba(255, 93, 115, .35); overflow: hidden; }
.ft-meter > i { display: block; height: 100%; border-radius: 4px; background: var(--green); box-shadow: 0 0 6px rgba(62, 207, 142, .5); }
.ft-meter.is-plain { background: rgba(127, 140, 160, .18); }
.ft-coins { display: flex; flex-wrap: wrap; gap: 6px; }
.ft-coin { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; padding: 3px 8px; border-radius: 8px; background: rgba(127, 140, 160, .12); color: var(--muted); }
.ft-coin b { color: var(--text); }
@media (max-width: 640px) {
  .farm-tile { max-width: none; padding: 12px; }
  .ft-stat b { font-size: 17px; }
  .ft-stat > span { font-size: 9px; }
}
.farm-stat .ft-meter { width: 100%; min-width: 44px; }
/* Шары в «компактно»: A, R и % — в своих колонках постоянной ширины, у всех ригов строго друг под другом. */
.rw-list .rw-sh { display: grid; grid-template-columns: auto 6ch auto 4ch 5.5ch; column-gap: 4px; align-items: baseline; justify-self: end; }
.rw-list .rw-sh b { text-align: right; margin: 0; }
.rw-list .rw-sh i + b { margin-right: 6px; }
.rw-list .rw-sh small { text-align: right; margin: 0; }
@media (max-width: 700px) {
  /* Телефон: 1 строка — имя, шары, время работы; 2 строка — хешрейт. */
  .rw-list .rw-row { grid-template-columns: 10px minmax(0, 1fr) auto 64px; column-gap: 8px; }
  .rw-list .rw-row .rw-sh { grid-column: 3; grid-row: 1; }
  .rw-list .rw-row > .rw-up { grid-column: 4; grid-row: 1; }
  .rw-list .rw-row > .rw-off { grid-column: 3 / 5; grid-row: 1; }
  .rw-list .rw-row .rw-hash { grid-column: 2 / 5; }
}
@media (max-width: 700px) { .rw-list .rw-sh-none { display: none; } }
@media (max-width: 700px) {
  .rw-list .rw-row { grid-template-columns: 10px minmax(0, 1fr) auto 52px; column-gap: 6px; }
  .rw-list .rw-sh { grid-template-columns: auto 5ch auto 3ch 5ch; column-gap: 3px; font-size: 11px; }
  .rw-list .rw-sh i + b { margin-right: 3px; }
}
/* Плитки воркеров: ничего не вылезает за край — имя с многоточием, шары переносятся, а не обрезаются. */
.rw-tile { min-width: 0; overflow: hidden; }
.rw-tile-top .rw-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rw-tile-top .rw-count { flex: none; }
.rw-tile-hash { display: flex; align-items: baseline; justify-content: space-between; gap: 6px; min-width: 0; white-space: nowrap; }
.rw-tile-bottom { flex-wrap: wrap; row-gap: 2px; min-width: 0; }
.rw-tile-bottom .rw-sh { margin-left: auto; }
@media (max-width: 700px) {
  .rw-tile { padding: 8px 10px; }
  .rw-tile-hash b { font-size: 16px; }
  .rw-tile-bottom .rw-sh { font-size: 11px; gap: 2px; }
  .rw-tile-bottom .rw-sh i + b { margin-right: 3px; }
}
/* Сортировка ригов: кнопка-значок и выпадающее меню. */
.wk-sort-menu { position: relative; }
.wk-sort-menu > summary { list-style: none; }
.wk-sort-menu > summary::-webkit-details-marker { display: none; }
.wk-sort-btn { display: inline-grid; place-items: center; width: 34px; height: 32px; border-radius: 8px; color: var(--muted); cursor: pointer; }
.wk-sort-btn:hover, .wk-sort-menu[open] > .wk-sort-btn { color: var(--blue); background: rgba(77, 163, 255, .12); }
.wk-sort-list {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; min-width: 200px; padding: 6px;
  display: flex; flex-direction: column; gap: 2px; background: var(--card); border: 1px solid var(--line);
  border-radius: 10px; box-shadow: 0 10px 30px rgba(0, 0, 0, .35);
}
.wk-sort-list a { padding: 7px 10px; border-radius: 7px; color: var(--text); text-decoration: none; font-size: 13px; white-space: nowrap; }
.wk-sort-list a:hover { background: rgba(77, 163, 255, .1); }
.wk-sort-list a.is-on { color: var(--blue); background: rgba(77, 163, 255, .12); font-weight: 700; }
/* Настройки рига: карточки плотно в две колонки, на телефоне — одна. */
.rig-settings { columns: 2 380px; column-gap: 12px; }
.rig-settings > .rig-set { break-inside: avoid; display: block; margin: 0 0 12px; padding: 14px 16px; }
.rig-settings .rig-set h2 { font-size: 15px; margin: 0 0 10px; }
.rig-settings .rig-set-form { margin: 0 0 6px; }
.rig-settings .rig-set-note { font-size: 12px; margin: 8px 0 0; line-height: 1.4; }
.rig-kv { gap: 6px; margin: 8px 0 0; font-size: 13px; }
.rig-kv > div { padding-bottom: 6px; align-items: baseline; }
.rig-kv > div > span:first-child { color: var(--muted); white-space: nowrap; }
.rig-kv > div > b { text-align: right; min-width: 0; overflow-wrap: anywhere; }
.rig-kv .kv-col { flex-direction: column; align-items: stretch; gap: 6px; }
.rig-kv .kv-col .kv-token { justify-content: space-between; }
.rig-kv .kv-token b { font-size: 12px; overflow-wrap: anywhere; }
.kv-token-btns { display: inline-flex; gap: 6px; }
.rig-service-row { display: flex; flex-wrap: wrap; gap: 8px; }
.rig-service-row .rig-set-form { margin: 0; }
@media (max-width: 700px) { .rig-settings { columns: 1; } }
/* Шары: число сразу за буквой (A 8, R 0), запас ширины — после числа; блок прижат к правому краю. */
.rw-list .rw-sh b { text-align: left; }
.rw-list .rw-sh i + b { margin-right: 0; padding-left: 3px; }
.rw-list .rw-sh small { text-align: right; }
@media (max-width: 700px) {
  .rw-list .rw-sh { grid-template-columns: auto 5.5ch auto 3.5ch 4.5ch; column-gap: 4px; }
  .rw-list .rw-row > .rw-up, .rw-list .rw-row > .rw-off { text-align: right; }
}
/* Шары как в майнере: принятые — салатовым, отклонённые — красным. */
.hub-term-log .log-ok { color: #9be15d; }
.hub-term-log .log-bad { color: #ff5d73; }
.sh-a { color: #9be15d; font-weight: 600; }
.sh-r { color: var(--red); font-weight: 600; }
.rw-sh i:first-child, .rw-sh i:first-child + b { color: #9be15d; }
html[data-theme="light"] .sh-a, html[data-theme="light"] .rw-sh i:first-child, html[data-theme="light"] .rw-sh i:first-child + b { color: #3c8f1a; }
/* Сведения о риге под таблицей карт — табличка «название — значение», на ПК в две колонки. */
.rig-info { display: block; }
.rig-info dl { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 24px; margin: 0; }
.rig-info dl > div { display: flex; justify-content: space-between; gap: 12px; padding: 5px 0; border-bottom: 1px solid var(--line); min-width: 0; }
.rig-info dt { color: var(--muted); white-space: nowrap; font-family: var(--font, inherit); }
.rig-info dd { margin: 0; color: var(--text); text-align: right; min-width: 0; overflow-wrap: anywhere; }
.rig-info dd small { color: var(--muted); }
@media (max-width: 700px) { .rig-info dl { grid-template-columns: 1fr; } }
/* Шары: колонки A и R шириной по самому длинному числу в списке (--sh-a, --sh-r), процент — вплотную ко времени работы. */
.rw-list .rw-sh { grid-template-columns: auto var(--sh-a, 4ch) auto var(--sh-r, 2ch) 4.6ch; column-gap: 4px; }
.rw-list .rw-sh i + b { padding-left: 2px; margin-right: 6px; }
@media (max-width: 700px) {
  .rw-list .rw-sh { grid-template-columns: auto var(--sh-a, 4ch) auto var(--sh-r, 2ch) 4.6ch; column-gap: 3px; }
  .rw-list .rw-sh i + b { margin-right: 5px; }
  /* Время работы — сразу за процентом, слева в своей колонке. */
  .rw-list .rw-row { grid-template-columns: 10px minmax(0, 1fr) auto 58px; }
  .rw-list .rw-row > .rw-up { text-align: left; }
}
.rw-list .rw-sh, .rw-list .rw-row .rw-sh { grid-template-columns: auto calc(var(--sh-a, 4ch) + 8px) auto calc(var(--sh-r, 2ch) + 6px) 4.6ch; }
.rw-list .rw-sh i + b { margin-right: 0; }
/* Шары v3: буква вплотную к числу (A142 R0), ячейка A — ширина по самому длинному числу списка, без лишних пустот. */
.rw-sh .sh-acc, .rw-sh .sh-rej { display: inline-flex; align-items: baseline; gap: 1px; }
.rw-sh .sh-acc i, .rw-sh .sh-acc b { color: #9be15d; }
html[data-theme="light"] .rw-sh .sh-acc i, html[data-theme="light"] .rw-sh .sh-acc b { color: #3c8f1a; }
.rw-sh .sh-rej i { color: var(--muted); }
.rw-sh i:first-child, .rw-sh i:first-child + b { color: inherit; }
.rw-sh .sh-acc i, .rw-sh .sh-acc b, .rw-sh .sh-rej b { margin: 0; padding: 0; }
.rw-list .rw-sh, .rw-list .rw-row .rw-sh {
  grid-template-columns: calc(var(--sh-a, 4ch) + 1.1ch) calc(var(--sh-r, 2ch) + 1.1ch) 4.6ch;
  column-gap: 6px;
}
.rw-list .rw-sh .sh-rej b.is-bad { color: var(--red); }
/* Число карт — у всех строк на одной вертикали: имя занимает колонку, бейдж прижат к её правому краю. */
.rw-list .rw-id .rw-name { flex: 1 1 auto; min-width: 0; }
.rw-list .rw-id .rw-count { flex: none; margin-left: auto; }
/* v3 правки: цвета A после общих правил, буква без отступа, ширина блока шар одинаковая во всех строках
   (и у офлайн-ригов — пустая «распорка»), чтобы бейджи числа карт стояли на одной вертикали. */
.rw-list .rw-sh i + b, .rw-list .rw-sh .sh-acc b, .rw-list .rw-sh .sh-rej b { padding-left: 1px; margin: 0; }
.rw-sh .sh-acc i, .rw-sh .sh-acc b { color: #9be15d; }
html[data-theme="light"] .rw-sh .sh-acc i, html[data-theme="light"] .rw-sh .sh-acc b { color: #3c8f1a; }
.rw-sh .sh-rej b { color: var(--text); }
.rw-sh .sh-rej b.is-bad { color: var(--red); }
.rw-list .rw-sh, .rw-list .rw-row .rw-sh, .rw-list .rw-sh-none {
  font-size: 12px;
  grid-template-columns: calc(var(--sh-a, 4ch) + 1.6ch) calc(var(--sh-r, 2ch) + 1.6ch) 4.6ch;
  width: calc(var(--sh-a, 4ch) + var(--sh-r, 2ch) + 3.2ch + 4.6ch + 12px);
}
@media (max-width: 700px) {
  .rw-list .rw-sh, .rw-list .rw-row .rw-sh, .rw-list .rw-sh-none { font-size: 11px; }
  .rw-list .rw-sh-none { display: block; grid-column: 3; grid-row: 2; height: 0; }
}
/* «!» у рига с проблемой — перед бейджем, чтобы бейдж числа карт не сдвигался. */
.rw-list .rw-id .rw-warn { order: 1; margin-left: auto; }
.rw-list .rw-id .rw-count { order: 2; }
.rw-list .rw-id .rw-warn ~ .rw-count, .rw-list .rw-id:has(.rw-warn) .rw-count { margin-left: 0; }
