/* Стили серверных страниц админки. ОДИН файл на все страницы — раньше CSS жил внутри
   layout.templ и дублировал admin.html; две копии стилей неизбежно разъезжаются.

   Дизайн-система: СВЕТЛАЯ спокойная тема на токенах (CSS-переменных). Все компоненты
   пишутся ТОЛЬКО через токены — кабинет трейдера (body.cab-body) переопределяет их
   старыми тёмными значениями и потому выглядит как раньше. Меняешь цвет — меняй токен,
   а не литерал в компоненте. */

:root{
  color-scheme:light;
  /* поверхности */
  --bg:#f4f5f7;            /* фон страницы */
  --panel:#ffffff;         /* карточки и панели */
  --panel2:#f7f8fa;        /* вложенные области: шапки таблиц, формы, раскрытые строки */
  --line:#e6e9ee;          /* обычная граница */
  --line2:#c3ccd7;         /* граница контролов */
  /* текст */
  --text:#20262e;
  --dim:#5b6672;           /* вторичный */
  --muted:#6e7a88;         /* подписи, третичный (≥4.3:1 на белом — ревью тем) */
  /* акцент — спокойная зелень (наследник лайма, но без неона) */
  --acc:#4d7c0f;           /* основной: кнопки, активные пункты, суммы */
  --acc-hover:#3f6212;
  --acc-ink:#ffffff;       /* текст на акцентной заливке */
  --tint:rgba(77,124,15,.07);   /* мягкая подложка */
  --tint2:rgba(77,124,15,.14);  /* подложка сильнее / бордеры акцента */
  /* смысловые цвета */
  --pos:#3f6f0e; --neg:#c92a2a; --danger:#c92a2a; --warn:#b45309; --info:#1971c2;
  --neg-bg:rgba(201,42,42,.07); --warn-bg:rgba(180,83,9,.08); --info-bg:rgba(25,113,194,.08);
  --gold:#7d640e;          /* бейджи BP/lead (бывший #f5c542; затемнён до AA) */
  --shadow:0 1px 2px rgba(16,24,40,.05);
  --mono:ui-monospace,SFMono-Regular,Menlo,monospace;
  --font-sans:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --font:var(--font-sans);
}

/* ── Темы админки: наборы токенов на html[data-theme=…] ─────────────────────
   Выбор — селектором в подвале сайдбара, хранится в localStorage (msd0_theme),
   применяется ранним скриптом в <head> до отрисовки (без вспышки).
   Кабинет трейдера темы НЕ видит: body.cab-body переопределяет токены ниже. */

[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0e1114;--panel:#151a1f;--panel2:#11151a;--line:#232a32;--line2:#404c59;
  --text:#dce3ea;--dim:#9aa5b1;--muted:#8a95a1;
  --acc:#7cb428;--acc-hover:#8cc73a;--acc-ink:#0b1204;
  --tint:rgba(140,199,58,.10);--tint2:rgba(140,199,58,.22);
  --pos:#93ce4d;--neg:#ff7070;--danger:#ff7070;--warn:#e3a94f;--info:#6cb0ec;
  --neg-bg:rgba(255,112,112,.09);--warn-bg:rgba(227,169,79,.10);--info-bg:rgba(108,176,236,.10);
  --gold:#d9b64a;
  --shadow:0 1px 2px rgba(0,0,0,.4);
  --font:var(--mono); /* ночная смена — терминальный моно, как в старой админке; цифры у моно табличные сами по себе */
}

[data-theme="hellokitty"]{
  color-scheme:light;
  --bg:#fff1f6;--panel:#ffffff;--panel2:#fff6fa;--line:#ffd9e8;--line2:#eba7c6;
  --text:#4d2635;--dim:#8f5c72;--muted:#9a6a80;
  --acc:#e94d8b;--acc-hover:#d6377a;--acc-ink:#ffffff;
  --tint:rgba(233,77,139,.08);--tint2:rgba(233,77,139,.20);
  --pos:#2b9348;--neg:#e4002b;--danger:#e4002b;--warn:#c77e0c;--info:#4d94e8;
  --neg-bg:rgba(228,0,43,.06);--warn-bg:rgba(199,126,12,.09);--info-bg:rgba(77,148,232,.09);
  --gold:#a06a00;
  --shadow:0 2px 6px rgba(233,77,139,.10);
  --font:"Trebuchet MS","Segoe UI",Verdana,sans-serif; /* округлый и дружелюбный */
}

[data-theme="67"]{
  color-scheme:dark;
  --bg:#14102b;--panel:#1d1740;--panel2:#171233;--line:#2f2760;--line2:#5a4da3;
  --text:#eee9ff;--dim:#a89fd6;--muted:#968ec4;
  --acc:#00c2d1;--acc-hover:#21d3e2;--acc-ink:#001417;
  --tint:rgba(0,194,209,.12);--tint2:rgba(0,194,209,.26);
  --pos:#3ddc84;--neg:#ff5d7a;--danger:#ff5d7a;--warn:#ff8c3a;--info:#7aa2ff;
  --neg-bg:rgba(255,93,122,.10);--warn-bg:rgba(255,140,58,.11);--info-bg:rgba(122,162,255,.11);
  --gold:#ffc24d;
  --shadow:0 2px 8px rgba(0,0,0,.45);
  --font:"Comic Sans MS","Comic Sans","Chalkboard SE",cursive; /* six seveeen */
}

[data-theme="welcometotheinternet"]{
  color-scheme:dark;
  --bg:#0b0817;--panel:#141026;--panel2:#0f0b1e;--line:#251d45;--line2:#4c3f8f;
  --text:#e8e3f6;--dim:#a99cd4;--muted:#8a7fb2;
  --acc:#e14fd8;--acc-hover:#ef6ce4;--acc-ink:#1a0520;
  --tint:rgba(225,79,216,.12);--tint2:rgba(225,79,216,.26);
  --pos:#7ce38b;--neg:#ff5470;--danger:#ff5470;--warn:#ffb14e;--info:#43d6e8;
  --neg-bg:rgba(255,84,112,.10);--warn-bg:rgba(255,177,78,.11);--info-bg:rgba(67,214,232,.10);
  --gold:#c9b458;
  --shadow:0 2px 10px rgba(0,0,0,.5);
  --font:Futura,"Century Gothic","Apple SD Gothic Neo","Trebuchet MS",sans-serif; /* геометрия ретро-футуризма */
}
[data-theme="win95"]{
  color-scheme:light;
  --bg:#008080;             /* teal рабочего стола */
  --panel:#c0c0c0;--panel2:#b4b8bc;--line:#9a9e9e;--line2:#7b7f83;
  --text:#000000;--dim:#1f2428;--muted:#4e5257;
  --acc:#000080;--acc-hover:#1084d0;--acc-ink:#ffffff;
  --tint:rgba(0,0,128,.10);--tint2:rgba(0,0,128,.22);
  --pos:#005f00;--neg:#b40000;--danger:#b40000;--warn:#5f4700;--info:#1414c8;
  --neg-bg:rgba(180,0,0,.08);--warn-bg:rgba(122,92,0,.10);--info-bg:rgba(20,20,200,.08);
  --gold:#7a5c05;
  --shadow:none;
  --font:Tahoma,"MS Sans Serif","Segoe UI",Geneva,Verdana,sans-serif; /* у Tahoma цифры равноширинные */
}

[data-theme="matrix"]{
  color-scheme:dark;
  --bg:#000300;--panel:#050d06;--panel2:#030803;--line:#0f2913;--line2:#1e4a26;
  --text:#c8facc;--dim:#7bcf8a;--muted:#4e9c5f;
  --acc:#00e13f;--acc-hover:#3dff70;--acc-ink:#001a05;
  --tint:rgba(0,225,63,.09);--tint2:rgba(0,225,63,.22);
  --pos:#39ff6e;--neg:#ff5544;--danger:#ff5544;--warn:#e8c33d;--info:#35d6c8;
  --neg-bg:rgba(255,85,68,.09);--warn-bg:rgba(232,195,61,.09);--info-bg:rgba(53,214,200,.09);
  --gold:#b8a52e;
  --shadow:0 0 14px rgba(0,225,63,.05);
  --font:var(--mono); /* зелёный код и должен быть кодом */
}

/* Декоративные шрифты тем (Comic Sans, Trebuchet, Futura) не имеют табличных цифр —
   данные (ленты/сетки/суммы) в таких темах идут системным шрифтом с tabular-nums;
   шрифт темы остаётся навигации, заголовкам, кнопкам и бейджам — вайб без вреда цифрам.
   Тёмной теме override не нужен: у моно цифры равноширинные сами по себе. */
:is([data-theme="67"],[data-theme="hellokitty"],[data-theme="welcometotheinternet"]) :is(.tbl,.tokhead,.tokrow,.speed-grid,.stat-grid,.token-stat-grid,.referral-grid,.node-grid,.errlive-grid,.errpen-grid,.ol-grid,.card-v,.statbar,.totals,.tacts,.uedit){font-family:var(--font-sans)}

/* «всего понемногу и всё время» — лёгкое неоновое свечение по углам.
   :not(.cab-body) — кабинет свой фон не отдаёт ни одной теме. */
[data-theme="welcometotheinternet"] body:not(.cab-body){background:
  radial-gradient(circle at 85% -10%,rgba(225,79,216,.14),transparent 30rem),
  radial-gradient(circle at 0% 100%,rgba(67,214,232,.10),transparent 26rem),var(--bg)}
[data-theme="67"] body:not(.cab-body){background:
  radial-gradient(circle at 90% -15%,rgba(0,194,209,.12),transparent 28rem),
  radial-gradient(circle at 5% 105%,rgba(255,140,58,.09),transparent 24rem),var(--bg)}
[data-theme="matrix"] body:not(.cab-body){background:
  radial-gradient(circle at 50% -25%,rgba(0,225,63,.06),transparent 44rem),var(--bg)}

*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 var(--font)}
:where(a,button,input,select,textarea,summary):focus-visible{outline:2px solid var(--tint2);outline-offset:1px}
::placeholder{color:var(--muted)}
.mono{font-family:var(--mono);font-size:.92em}
.alink{color:var(--acc);font-weight:600}
.shmark{color:var(--gold);font-size:13px;cursor:help}

/* каркас */
.layout{display:flex;min-height:100vh}
.side{width:224px;flex:0 0 224px;background:var(--panel);border-right:1px solid var(--line);
      display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
      transition:margin-left .15s ease}
/* Скрытие меню (☰ в шапке / × в меню, html[data-nav=hidden], localStorage msd0_nav) */
[data-nav="hidden"] .side{margin-left:-224px;visibility:hidden}
.side .top{padding:18px 16px 14px;position:relative}
.nav-close{position:absolute;top:14px;right:8px;border:0;background:transparent;color:var(--muted);
           font-size:18px;line-height:1;cursor:pointer;padding:3px 7px;border-radius:6px}
.nav-close:hover{background:var(--panel2);color:var(--text)}
.nav-toggle{padding:6px 10px;font-size:14px;line-height:1}
.brand{display:flex;align-items:center;gap:8px;font-size:15px;letter-spacing:-.2px}
.brand-logo{width:20px;height:20px;border-radius:5px;flex:0 0 auto}
.side .sub{font-size:11px;margin-top:3px;color:var(--muted)}
.nav{flex:1;overflow:auto;padding:6px 0}
.nav a{display:flex;align-items:center;gap:9px;margin:1px 10px;padding:7px 10px;color:var(--dim);
       text-decoration:none;font-size:13px;border-radius:7px}
.nav a:hover{background:var(--panel2);color:var(--text)}
.nav a.act{color:var(--acc);background:var(--tint);font-weight:600}
.nav a.todo{color:var(--muted);opacity:.55}          /* ещё не перенесена */
.side .foot{padding:12px 16px;border-top:1px solid var(--line);font-size:12px}
.side .foot .ver{color:var(--muted);font-size:11px;margin-bottom:6px}
.theme-row{display:flex;flex-direction:column;gap:5px;margin-bottom:10px;font-size:11px;color:var(--muted)}
.theme-sel{width:100%;padding:5px 8px;font-size:12px}

/* Страница входа (без сайдбара) */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login-box{width:300px;background:var(--panel);border:1px solid var(--line);border-radius:12px;
           padding:26px 24px;display:flex;flex-direction:column;gap:12px;box-shadow:var(--shadow)}
.login-box .brand{font-size:17px}
.login-sub{font-size:12px;color:var(--muted);margin-bottom:8px}
/* .login-box .in — иначе побеждает более поздний .in{width:150px} (равная специфичность,
   порядок в файле): поля входа были уже кнопки во ВСЕХ темах */
.login-box .in{width:100%}
.login-btn{width:100%;margin-top:4px;padding:11px}
.login-err{color:var(--danger);font-size:12px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--neg) 30%,transparent);
           border-radius:7px;background:var(--neg-bg)}
.mut{color:var(--muted);text-decoration:none}
.mut:hover{color:var(--dim)}
main{flex:1;padding:22px 26px;min-width:0}
.hd{display:flex;align-items:center;gap:14px;margin-bottom:18px}
.hd h1{font-size:19px;margin:0;font-weight:650;letter-spacing:-.3px}
.sp{flex:1}
.ws{font-size:12px;color:var(--muted)}
.ws.on{color:var(--pos)} .ws.conn{color:var(--warn)} .ws.off{color:var(--danger)}
.btn{background:var(--acc);color:var(--acc-ink);border:0;border-radius:7px;padding:8px 14px;
     font:inherit;font-size:13px;font-weight:600;cursor:pointer;text-decoration:none;display:inline-block}
.btn:hover{background:var(--acc-hover)}
.btn.ghost{background:var(--panel);border:1px solid var(--line2);color:var(--dim);font-weight:500;padding:7px 12px}
.btn.ghost:hover{background:var(--panel2);color:var(--text)}

/* панели и таблицы */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;overflow:hidden;box-shadow:var(--shadow)}
.panel-h{padding:12px 16px;border-bottom:1px solid var(--line);font-size:12px;font-weight:600;color:var(--dim)}
.panel.warn{border-color:color-mix(in srgb,var(--warn) 45%,transparent)}
.panel.warn .panel-h{color:var(--warn)}
.tbl{width:100%;border-collapse:collapse}
.tbl th{padding:9px 16px;text-align:left;font-size:11px;font-weight:600;color:var(--muted);
        border-bottom:1px solid var(--line)}
.tbl td{padding:10px 16px;border-bottom:1px solid var(--line);font-size:13px}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr:hover{background:var(--panel2)}
.tbl tfoot td{border-top:1px solid var(--line);border-bottom:none;background:var(--panel2);font-weight:600}
.num{text-align:right;font-variant-numeric:tabular-nums}
.neg{color:var(--neg)} .zero{color:var(--muted)} .pos{color:var(--pos)}

/* формы и метки */
.frm{display:flex;gap:10px;padding:12px 16px;align-items:center;flex-wrap:wrap}
.in{background:var(--panel);border:1px solid var(--line2);color:var(--text);
    border-radius:7px;padding:8px 10px;font:inherit;font-size:13px;width:150px}
.in:focus{border-color:var(--acc);outline:none;box-shadow:0 0 0 3px var(--tint)}
.tag{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:500;
     background:var(--panel2);border:1px solid var(--line);color:var(--dim)}
.tag.auto{background:var(--tint);border-color:var(--tint2);color:var(--acc)}
.tag.gold{background:var(--warn-bg);border-color:rgba(154,123,18,.35);color:var(--gold)}

@media(max-width:900px){
  .layout{flex-direction:column}
  .side{width:auto;flex:none;height:auto;position:static;flex-direction:row;overflow-x:auto;margin-left:0}
  .side .top,.side .foot{display:none}
  .nav{display:flex;padding:4px}
  .nav a{white-space:nowrap}
  [data-nav="hidden"] .side{display:none}
}

/* раскрывающиеся карточки (нативный <details> — серверному рендеру не нужен JS) */
.trader{border-bottom:1px solid var(--line)}
.trader:last-child{border-bottom:none}
.trader>summary{display:flex;align-items:center;gap:12px;padding:10px 16px;cursor:pointer;
                list-style:none;font-variant-numeric:tabular-nums}
.trader>summary::-webkit-details-marker{display:none}
.trader>summary:hover{background:var(--panel2)}
.trader[open]>summary{background:var(--panel2)}
.trader .tname{font-weight:600;min-width:130px}
.trader .ref{font-size:10px;font-weight:700;padding:2px 7px;border-radius:5px;
             color:var(--gold);background:var(--warn-bg);border:1px solid color-mix(in srgb,var(--gold) 35%,transparent)}
.tacts{padding:12px 16px 14px;background:var(--panel2);border-top:1px solid var(--line);
       display:flex;flex-direction:column;gap:10px}
.tacts .frm{gap:8px;padding:0}
.tbl.ops td,.tbl.ops th{padding:6px 10px;font-size:12px}
.totals{display:flex;gap:16px;padding:11px 16px;border-top:1px solid var(--line);
        background:var(--panel2);font-variant-numeric:tabular-nums;font-weight:600}

/* ── Балансы: верхняя панель итогов ── */
.cards{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.card{flex:1 1 118px;min-width:108px;padding:10px 13px;border-radius:9px;
      background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow)}
.card-l{font-size:11px;color:var(--muted);margin-bottom:3px}
.card-v{font-size:17px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.3px}

/* ── Балансы: блок трейдера с вложенными токенами ── */
.tblock{background:var(--panel);border:1px solid var(--line);border-radius:10px;overflow:hidden;
        margin-bottom:14px;box-shadow:var(--shadow)}
.thead{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--panel2);flex-wrap:wrap}
.tacts-d>summary{list-style:none;cursor:pointer;padding:8px 14px;font-size:12px;color:var(--dim);
                 border-top:1px solid var(--line)}
.tacts-d>summary::-webkit-details-marker{display:none}
.tacts-d>summary:hover{color:var(--text)}
.tacts-d[open]>summary{color:var(--text);background:var(--panel2)}

/* сетка колонок токенов: Токен | Взятий | Начислено | Пополнено | Баланс | действие */
.tokhead,.tokrow{display:grid;grid-template-columns:1fr 60px 96px 96px 108px 92px;gap:10px;
                 align-items:center;padding:7px 14px;border-top:1px solid var(--line);font-size:13px}
.tokhead{font-size:11px;font-weight:600;color:var(--muted);background:var(--panel2)}
.tok{border-top:0}
.tok>summary{list-style:none;cursor:pointer}
.tok>summary::-webkit-details-marker{display:none}
.tok>summary:hover{background:var(--panel2)}
.tok[open]>summary{background:var(--panel2)}
.rcol{text-align:right;font-variant-numeric:tabular-nums}

/* ── Юзеры: аккуратный инлайн-редактор строки ── */
.uedit{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;padding:14px 16px;
       background:var(--panel2);border-top:1px solid var(--line)}
.uform{display:contents}                 /* поля формы участвуют в общей раскладке .uedit */
.ufield{display:flex;flex-direction:column;gap:6px}
.ufield.grow{flex:1 1 160px;min-width:140px}
.ufield-l{font-size:11px;color:var(--muted)}
.uedit .in{margin:0;height:34px}
.uedit select.in{min-width:112px}
.upct{display:flex;align-items:stretch}
.upct .in{width:74px;text-align:right;border-radius:7px 0 0 7px;border-right:0}
.upct .suf{display:flex;align-items:center;padding:0 11px;border:1px solid var(--line2);
           border-radius:0 7px 7px 0;background:var(--panel2);color:var(--muted);font-size:12px}
.uedit .btn{height:34px;padding:0 16px}
.u-rolebox{display:flex;align-items:center;gap:8px;height:34px}
.u-note{font-size:11px;color:var(--muted)}
.u-danger{margin-left:auto;display:flex;align-items:flex-end}
.btn.danger{background:var(--panel);border:1px solid color-mix(in srgb,var(--neg) 40%,transparent);color:var(--danger);
            font-weight:600;height:34px;padding:0 16px}
.btn.danger:hover{background:var(--neg-bg);border-color:var(--danger)}
.tlabel{display:inline-flex;align-items:center;gap:6px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.src{font-size:9px;font-weight:700;letter-spacing:.4px;padding:1px 5px;border-radius:4px;flex-shrink:0}
.src.cb{color:var(--info);background:var(--info-bg);border:1px solid color-mix(in srgb,var(--info) 40%,transparent)}
.src.bitp{color:var(--gold);background:var(--warn-bg);border:1px solid color-mix(in srgb,var(--gold) 40%,transparent)}
.warnmark{font-size:10px;color:var(--gold);flex-shrink:0}

/* ── Токены: широкая таблица скроллит по горизонтали, а не клипается ── */
.hscroll{overflow-x:auto}
.tgrid{grid-template-columns:56px minmax(150px,1.4fr) 72px minmax(100px,1fr) 92px 170px minmax(100px,1fr) 52px minmax(120px,1fr);min-width:940px}

/* ── Takes OK: широкая лента, тоже в .hscroll ── */
.takegrid{grid-template-columns:108px 40px minmax(130px,1.2fr) 72px 80px 110px minmax(190px,1.6fr) 132px 88px 88px;min-width:1120px}
/* ── Счета: # | трейдер | сумма | статус | создан | оплачен | ссылка ── */
.invgrid{grid-template-columns:56px minmax(120px,1fr) 110px 92px 96px 96px 72px;min-width:700px}
.invgrid a{color:var(--acc)}
.tk-time{font-variant-numeric:tabular-nums;white-space:nowrap}
.tk-date{color:var(--muted);font-size:11px;margin-left:6px}      /* дата — вторична, время важнее */
.amt{font-weight:650;color:var(--pos);font-variant-numeric:tabular-nums} /* сумма — единый цвет */
.mid{color:var(--gold)}                                          /* пограничная скорость оплаты 11–16с */

/* ── Распределение: доска нод (слева блок, справа сетка токенов), drag&drop ── */
/* Переключатель CB / BP */
.dist-tabs{display:flex;gap:8px;margin-bottom:12px}
.dtab{padding:7px 16px;border:1px solid var(--line2);border-radius:7px;color:var(--dim);
      background:var(--panel);text-decoration:none;font-size:13px;font-weight:600}
.dtab:hover{color:var(--text)}
.dtab.act{color:var(--acc);border-color:var(--tint2);background:var(--tint)}
/* Тулбар-сводка */
.dbar{margin-bottom:8px;font-size:12px;color:var(--dim)}
.dbar .dsep{color:var(--line2);margin:0 5px}
.dbar .dwarn{color:var(--warn)}
/* Доска: строка на ноду — слева блок (210px), справа токены выровненной сеткой */
.dboard{display:flex;flex-direction:column}
.drow{display:grid;grid-template-columns:210px 1fr;gap:12px;padding:10px 0;
      border-top:1px solid var(--line);align-items:start}
.drow.off{opacity:.5}
.drow.drop{background:var(--tint);outline:1px dashed var(--acc);outline-offset:-1px}
.dlabel{padding-top:2px;min-width:0}
.dlname{display:flex;align-items:center;gap:7px;font-size:13px;min-width:0}
.dlname b{font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.dkid{color:var(--muted);font-size:11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}
.dlmeta{margin-top:3px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.dtokens{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:7px;min-width:0}
.dempty{color:var(--muted);font-size:12px;padding:5px 2px}
.bcount{min-width:22px;padding:1px 7px;border-radius:10px;text-align:center;
        color:var(--dim);background:var(--panel2);border:1px solid var(--line);font-size:11px;flex:0 0 auto}
/* Индикатор ноды */
.dot{display:inline-block;vertical-align:middle;width:8px;height:8px;flex:0 0 8px;border-radius:50%;background:var(--muted)}
.dot.trouble{background:var(--warn)}
.dot.online{background:var(--acc)}
/* Чип токена (перетаскиваемый) */
.dchip{display:flex;align-items:center;gap:6px;padding:6px 9px;border:1px solid var(--line);
       border-radius:7px;background:var(--panel);cursor:grab;font-size:12px;min-width:0;box-shadow:var(--shadow)}
.dchip:hover{border-color:var(--line2)}
.dchip.dragging{opacity:.4}
.tdot{width:7px;height:7px;flex:0 0 7px;border-radius:50%;background:var(--muted)}
.tdot.on{background:var(--acc)}
.tid{color:var(--muted);font-variant-numeric:tabular-nums;flex:0 0 auto}
.tlbl{font-weight:600;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}
.towner{margin-left:auto;color:var(--muted);font-size:11px;max-width:78px;overflow:hidden;
        white-space:nowrap;text-overflow:ellipsis;flex:0 0 auto}
.thandle{color:var(--muted);flex:0 0 auto}
.src.both{color:var(--dim);background:var(--panel2);border:1px solid var(--line2)}

/* ── Speed: гонка уникальных заявок, плотная read-only лента ── */
.speed-cards .card{min-width:145px}
.card-v small{font-size:11px;font-weight:600;color:var(--muted)}
.speed-layout{display:grid;grid-template-columns:minmax(190px,240px) minmax(0,1fr);gap:14px;margin-bottom:14px}
.speed-top ol{list-style:none;margin:0;padding:5px 0}
.speed-top li{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--line);
              color:var(--muted);font-variant-numeric:tabular-nums;font-size:13px}
.speed-top li:last-child{border-bottom:none}
.speed-place{width:18px;color:var(--muted)}
.speed-rank{color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.speed-top li b{margin-left:auto;color:var(--pos)}
/* колонки ужаты, чтобы «Причина» была видна без скролла даже на 1280px */
.speed-grid{display:grid;grid-template-columns:66px 98px minmax(90px,1fr) minmax(130px,1.2fr) 60px 64px 54px minmax(80px,1fr);
            gap:8px;align-items:center;min-width:740px;padding:9px 14px;font-variant-numeric:tabular-nums;font-size:13px}
/* длинные значения (Причина, Бренд, Исход) режем многоточием, полный текст — в title */
.speed-grid>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.speed-head{font-size:11px;font-weight:600;color:var(--muted);border-bottom:1px solid var(--line);background:var(--panel2)}
.speed-order{border-bottom:1px solid var(--line)}
.speed-order>summary{list-style:none;cursor:pointer}
.speed-order>summary::-webkit-details-marker{display:none}
.speed-order.taken>summary{box-shadow:inset 3px 0 0 var(--acc)}
.speed-order.missed>summary{box-shadow:inset 3px 0 0 color-mix(in srgb,var(--neg) 45%,transparent)}
.speed-order>summary:hover,.speed-order[open]>summary{background-color:var(--panel2)}
.speed-amount{color:var(--gold);font-weight:650}
.speed-shots{display:flex;gap:7px;flex-wrap:wrap;padding:10px 14px 13px 24px;background:var(--panel2)}
.speed-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;border:1px solid var(--line2);
            border-radius:6px;color:var(--dim);font-size:11px;background:var(--panel)}
.speed-chip.won{border-color:var(--tint2);background:var(--tint)}
.speed-chip b{color:var(--text)}
.speed-nodes{margin-bottom:18px}
.node-grid{display:grid;grid-template-columns:minmax(220px,1.4fr) 80px 70px 80px 80px 90px 80px;
           gap:12px;align-items:center;min-width:800px;padding:9px 14px;border-bottom:1px solid var(--line);
           font-variant-numeric:tabular-nums;font-size:13px}
.node-grid small{color:var(--muted);margin-left:6px}
@media(max-width:1050px){.speed-layout{grid-template-columns:1fr}.speed-top ol{columns:2}}
@media(max-width:600px){.speed-top ol{columns:1}}

/* ── Stat: плотный финансовый разрез неделя → день → группа ── */
.statbar{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin:0 0 10px;
         padding:10px 14px;border:1px solid var(--line);border-radius:9px;background:var(--panel);
         color:var(--dim);font-size:12px;font-variant-numeric:tabular-nums;box-shadow:var(--shadow)}
.statbar b{color:var(--text)}
.statbar .dsep{color:var(--line2);margin:0 2px}
.stat-grid{display:grid;grid-template-columns:170px minmax(130px,1fr) 60px 72px 112px 132px 132px 112px 112px 112px;
           gap:10px;align-items:center;min-width:1180px;padding:9px 14px;
           border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;font-size:13px}
.stat-head{font-size:11px;font-weight:600;color:var(--muted);background:var(--panel2)}
.stat-row:hover{background:var(--panel2)}
.stat-day{color:var(--dim)}
.stat-usdt{color:var(--info)}
.stat-grid small{color:var(--muted);font-size:11px}
.stat-total{font-weight:700;background:var(--tint)}
/* «Итого за день · дата» длиннее колонки; соседняя ячейка (группа) в итогах пуста — пусть заезжает */
.stat-total>span:first-child,.stat-day-total>span:first-child{white-space:nowrap}
.stat-week{border-bottom:1px solid var(--tint2);box-shadow:inset 3px 0 0 var(--acc)}
.stat-day-total{background:var(--panel2);border-bottom:1px solid var(--line)}

/* ── Token Stat: широкий read-only финансовый разрез по токенам ── */
.token-stat-bar{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.token-stat-bar .dist-tabs{margin-bottom:0}
.token-stat-period{color:var(--dim);font-size:12px;font-variant-numeric:tabular-nums}
.token-stat-cards .card{min-width:150px}
.token-stat-accent{border-color:color-mix(in srgb,var(--info) 40%,transparent);background:var(--info-bg)}
.token-stat-accent .card-v{color:var(--info)}
.token-stat-panel{margin-bottom:18px}
.token-stat-grid{display:grid;
  grid-template-columns:minmax(170px,1.25fr) 58px minmax(120px,.9fr) 70px 118px 104px 66px 118px 118px 108px 88px 76px;
  gap:10px;align-items:center;min-width:1320px;padding:9px 14px;
  border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;font-size:13px}
.token-stat-head{font-size:11px;font-weight:600;color:var(--muted);background:var(--panel2)}
.token-stat-head span:nth-child(n+4){text-align:right}
.token-stat-row:hover{background:var(--panel2)}
.token-stat-label{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.token-stat-usdt{color:var(--info)}

/* ── Рефералы: ролл-ап выплат + редактируемая широкая таблица ── */
.referral-periods{flex-wrap:wrap}
.referral-cards .card{min-width:145px}
.referral-total{border-color:var(--tint2);background:var(--tint)}
.referral-add{margin-bottom:18px}
.ref-short{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:11px}
.ref-short .in{width:86px}
.referral-grid{display:grid;
  grid-template-columns:minmax(130px,1fr) minmax(130px,1fr) 72px 84px 112px 112px 260px 50px 36px;
  gap:10px;align-items:center;min-width:1100px;padding:9px 14px;
  border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;font-size:13px}
.referral-head{font-size:11px;font-weight:600;color:var(--muted);background:var(--panel2)}
.referral-head span:nth-child(n+3):nth-child(-n+6){text-align:right}
.referral-row:hover{background:var(--panel2)}
.referral-row.off{opacity:.45}
.ref-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ref-payout{color:var(--info)}
.ref-update{display:flex;align-items:center;gap:5px}
.ref-update .in{width:73px;padding:6px 7px;text-align:right}
.ref-update .btn{padding:5px 8px}
.ref-action{display:flex;justify-content:center}
.ref-toggle{width:34px;height:19px;padding:2px;border:1px solid var(--line2);border-radius:12px;background:var(--panel2);cursor:pointer}
.ref-toggle span{display:block;width:13px;height:13px;border-radius:50%;background:var(--line2);transition:.15s}
.ref-toggle.on{border-color:var(--acc);background:var(--tint)}
.ref-toggle.on span{margin-left:14px;background:var(--acc)}
.ref-delete{border:0;background:transparent;color:var(--danger);font:inherit;font-size:22px;line-height:1;cursor:pointer}

/* ── Errors: read-only разбор штрафов и fail за UTC-день ── */
.errday{display:flex;align-items:center;gap:7px;margin-bottom:12px}
.errday-arrow{display:inline-flex;align-items:center;justify-content:center;width:34px;height:32px;
  border:1px solid var(--line2);border-radius:7px;background:var(--panel);color:var(--text);
  text-decoration:none;font-size:20px}
.errday-arrow:hover{border-color:var(--dim)}
.errday-arrow.disabled{color:var(--muted);opacity:.4;cursor:not-allowed}
.errday-date{min-width:74px;text-align:center;font-weight:700;font-variant-numeric:tabular-nums}
.errtoday{margin-left:4px}
.err-live,.err-penalties{margin-bottom:18px}
.err-live{border-color:color-mix(in srgb,var(--warn) 35%,transparent)}
.err-live .panel-h{color:var(--warn)}
.err-cards .card{min-width:145px}
.err-empty{padding:18px;color:var(--muted)}
.err-head{font-size:11px;font-weight:600;color:var(--muted);background:var(--panel2)}
.errlive-grid,.errpen-grid{display:grid;gap:10px;align-items:center;padding:9px 14px;
  border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;font-size:13px}
.errlive-grid{grid-template-columns:minmax(160px,1.1fr) minmax(120px,.8fr) minmax(190px,1.4fr) 70px 110px;min-width:760px}
.errpen-grid{grid-template-columns:minmax(150px,1fr) 52px minmax(110px,.8fr) minmax(160px,1.1fr) minmax(220px,1.5fr) 90px 140px;min-width:1040px}
.err-row:hover{background:var(--panel2)}
.err-token{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.err-ptype{color:var(--dim);overflow-wrap:anywhere}
.err-countdown{font-weight:700;white-space:nowrap;color:var(--warn)}
.errsplit{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px}
.errcat-row{display:flex;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line)}
.errcat-row:hover{background:var(--panel2)}
.errcat-label{min-width:0;overflow-wrap:anywhere}
.errcat-label small{color:var(--muted);font-size:11px}
.errcat-row b{margin-left:auto;font-variant-numeric:tabular-nums}
@media(max-width:760px){.errsplit{grid-template-columns:1fr}}

/* ── Online: суточная лента присутствия, взятий и штрафов ── */
.ol-nav{display:flex;align-items:center;gap:7px;margin-bottom:12px}
.ol-summary{color:var(--dim);font-size:12px;font-variant-numeric:tabular-nums}
.ol-legend{display:flex;align-items:center;gap:18px;margin:0 0 10px;color:var(--dim);font-size:11px}
.ol-legend span{display:inline-flex;align-items:center;gap:7px}
.ol-legend i{display:inline-block;flex:0 0 auto}
.ol-take-key{width:2px;height:12px;background:var(--acc)}
.ol-pen-key{width:9px;height:9px;border-radius:2px;background:color-mix(in srgb,var(--neg) 80%,transparent)}
.ol-online-key{width:16px;height:8px;border-radius:3px;background:color-mix(in srgb,var(--info) 55%,transparent)}
.ol-online-key-bp{background:color-mix(in srgb,var(--gold) 55%,transparent)}
.ol-panel{min-width:430px}
.ol-grid{display:grid;grid-template-columns:150px minmax(240px,1fr) 66px;gap:12px;align-items:center;
  padding:8px 14px;border-bottom:1px solid var(--line)}
.ol-head{padding-top:9px;padding-bottom:7px;background:var(--panel2);color:var(--muted);
  font-size:11px;font-weight:600}
.ol-axis{display:flex;justify-content:space-between;font-variant-numeric:tabular-nums}
.ol-row:hover{background:var(--panel2)}
.ol-name{display:flex;align-items:center;gap:7px;min-width:0}
.ol-name>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.ol-name small{color:var(--muted);font-size:11px;font-weight:400}
.ol-source{width:7px;height:7px;border-radius:50%;flex:0 0 7px}
.ol-source.ol-cb{background:var(--info)}
.ol-source.ol-bp{background:var(--gold)}
.ol-track{position:relative;height:28px;overflow:hidden;border-radius:6px;background:var(--panel2);
  border:1px solid var(--line)}
.ol-line{position:absolute;top:0;bottom:0;width:1px;background:var(--line)}
.ol-line-25{left:25%}.ol-line-50{left:50%}.ol-line-75{left:75%}
.ol-seg,.ol-pen,.ol-take,.ol-now{position:absolute;display:block}
.ol-seg{top:4px;bottom:4px;border-radius:4px;opacity:.35}
.ol-seg.ol-cb{background:var(--info)}
.ol-seg.ol-bp{background:var(--gold)}
.ol-pen{top:4px;bottom:4px;border-radius:2px;background:color-mix(in srgb,var(--neg) 80%,transparent)}
.ol-take{top:3px;bottom:3px;width:2px;margin-left:-1px;background:var(--acc);z-index:3}
.ol-now{top:-2px;bottom:-2px;width:2px;background:var(--warn);opacity:.7;z-index:4}
.ol-metrics{display:flex;flex-direction:column;align-items:flex-end;line-height:1.25;
  font-size:11px;font-variant-numeric:tabular-nums}
.ol-metrics b{font-size:12px}
.ol-empty{padding:22px 18px;color:var(--muted)}
@media(max-width:650px){
  .ol-nav{flex-wrap:wrap}.ol-nav .sp{display:none}.ol-summary{width:100%;margin-top:3px}
  .ol-grid{grid-template-columns:115px minmax(240px,1fr) 58px;gap:8px;padding-left:10px;padding-right:10px}
  .ol-panel{overflow-x:auto}.ol-grid{min-width:445px}
}

/* ── Тема win95 — СКИН поверх токенов (по мотивам win95.css / канона Windows 95).
   Единственная тема, которой мало токенов: фирменные бевелы, нулевые радиусы и
   неви-тайтлбары задаются здесь. Блок стоит ПОСЛЕ компонентов, чтобы перекрывать
   их радиусы/границы специфичностью и порядком. Кабинета не касается (атрибут
   data-theme ставит только скрипт админ-layout). ── */
[data-theme="win95"] *{border-radius:0}
[data-theme="win95"] :is(.panel,.card,.tblock,.login-box,.statbar,.dchip,.gear-pop){border:none;
  box-shadow:inset -1px -1px #0a0a0a,inset 1px 1px #fff,inset -2px -2px #808080,inset 2px 2px #dfdfdf}
/* Контент не должен красить фон ПОВЕРХ граней бевела (рваная рамка) — внутренний отступ */
[data-theme="win95"] :is(.panel,.tblock){padding:2px}
[data-theme="win95"] .side{border-right:none;
  box-shadow:inset -1px -1px #0a0a0a,inset 1px 1px #fff,inset -2px -2px #808080,inset 2px 2px #dfdfdf}
/* Тайтлбар — только у заголовка ОКНА (прямой потомок panel/tblock): одиночные .panel-h
   (подписи вроде «По трейдерам…» на Балансах) остаются текстом, а не парящей полосой */
[data-theme="win95"] :is(.panel,.tblock)>.panel-h{margin:1px 1px 0;border-bottom:none;padding:5px 10px;
  background:linear-gradient(90deg,#000080,#1084d0);color:#fff;font-weight:700}
[data-theme="win95"] .panel.warn>.panel-h{background:linear-gradient(90deg,#7a5c00,#b08a10);color:#fff}
[data-theme="win95"] .btn{background:var(--panel);color:#000;font-weight:400;
  box-shadow:inset -1px -1px #0a0a0a,inset 1px 1px #fff,inset -2px -2px #808080,inset 2px 2px #dfdfdf}
[data-theme="win95"] .btn:hover{background:var(--panel)}
[data-theme="win95"] .btn:active{transform:translate(1px,1px);
  box-shadow:inset -1px -1px #fff,inset 1px 1px #0a0a0a,inset -2px -2px #dfdfdf,inset 2px 2px #808080}
[data-theme="win95"] .btn.danger{border:none;color:var(--danger);height:auto}
[data-theme="win95"] :is(.in,.theme-sel){background:#fff;border:none;
  box-shadow:inset -1px -1px #fff,inset 1px 1px #0a0a0a,inset -2px -2px #dfdfdf,inset 2px 2px #808080}
[data-theme="win95"] .in:focus{outline:1px dotted #000;outline-offset:-5px;box-shadow:inset -1px -1px #fff,
  inset 1px 1px #0a0a0a,inset -2px -2px #dfdfdf,inset 2px 2px #808080}
[data-theme="win95"] :is(.nav a:hover,.nav a.act){background:#000080;color:#fff;font-weight:400}
[data-theme="win95"] .hd h1{font-weight:700}
[data-theme="win95"] .alink{color:#1414c8;text-decoration:underline;font-weight:400}
[data-theme="win95"] .mut:hover{color:#000}
/* main — одно серебряное «окно» на тил-столе: без этого текст, лежащий прямо на body
   (легенды, сводки, ws-статус), нечитаем — токены настроены под серебро */
[data-theme="win95"] main{background:var(--panel);margin:10px 12px;padding:16px 20px;
  box-shadow:inset -1px -1px #0a0a0a,inset 1px 1px #fff,inset -2px -2px #808080,inset 2px 2px #dfdfdf}
[data-theme="win95"] .dtab.act{background:#000080;color:#fff;border-color:#000080}

/* ═══════════════════════════════════════════════════════════════════════════
   КАБИНЕТ ТРЕЙДЕРА (body.cab-body) — Linear-style: прохладные нейтралы,
   hairline-границы, воздух, один сдержанный акцент (индиго) на активной вкладке/
   фокусе; СЕМАНТИКА только на действиях (зелёный=включить/применить/оплатить,
   красный=стоп/выключить/отмена). Две темы: светлая (по умолчанию) и тёмная —
   переключатель в шапке ставит класс .cabdark на <html> (localStorage cq_theme).
   Кабинет НЕ участвует в admin-темах ([data-theme]) — свой изолированный набор.
   ═══════════════════════════════════════════════════════════════════════════ */
.cab-body{
  color-scheme:light;
  --bg:#fbfbfc;--panel:#ffffff;--panel2:#f5f6f8;--hover:#f0f1f4;--line:#eceef1;--line2:#dfe1e6;
  --text:#191b1f;--dim:#5c626c;--muted:#8b909a;
  --acc:#5b5bd6;--acc-hover:#4a4ac4;--acc-ink:#ffffff;--tint:rgba(91,91,214,.08);--tint2:rgba(91,91,214,.2);
  --go:#178048;--go-h:#136b3c;--go-ink:#ffffff;--go-soft:rgba(23,128,72,.10);--go-line:rgba(23,128,72,.28);
  --stop:#cf3b40;--stop-h:#b73337;--stop-ink:#ffffff;--stop-soft:rgba(207,59,64,.10);--stop-line:rgba(207,59,64,.28);
  --pos:#178048;--neg:#cf3b40;--danger:#cf3b40;--warn:#b45309;--info:#2563eb;
  --neg-bg:rgba(207,59,64,.08);--warn-bg:rgba(180,83,9,.10);--info-bg:rgba(37,99,235,.10);
  --gold:#8a6d1a;--shadow:0 1px 2px rgba(18,20,26,.05);
}
:root.cabdark .cab-body{
  color-scheme:dark;
  --bg:#0b0c0e;--panel:#141519;--panel2:#0f1013;--hover:#1a1c20;--line:#22242a;--line2:#2c2f36;
  --text:#e7e9ec;--dim:#969ca6;--muted:#697079;
  --acc:#8b8bf6;--acc-hover:#9d9dff;--acc-ink:#0a0a1a;--tint:rgba(139,139,246,.14);--tint2:rgba(139,139,246,.26);
  --go:#33c06e;--go-h:#43cd7c;--go-ink:#05140b;--go-soft:rgba(51,192,110,.14);--go-line:rgba(51,192,110,.30);
  --stop:#e5565b;--stop-h:#ef666b;--stop-ink:#160405;--stop-soft:rgba(229,86,91,.14);--stop-line:rgba(229,86,91,.32);
  --pos:#33c06e;--neg:#e5565b;--danger:#e5565b;--warn:#e3a94f;--info:#6cb0ec;
  --neg-bg:rgba(229,86,91,.10);--warn-bg:rgba(227,169,79,.12);--info-bg:rgba(108,176,236,.12);
  --gold:#d9b64a;--shadow:none;
}
.cab-body{background:var(--bg);color:var(--text);
  font:14px/1.5 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",system-ui,sans-serif;
  -webkit-font-smoothing:antialiased}
.cab-body .num,.cab-body .oamt,.cab-body .cab-count,.cab-body .limit-input,.cab-body .cab-token-id,
.cab-body .acc-token,.cab-body .rate-pill b{font-variant-numeric:tabular-nums}
.cab-body .acc-token,.cab-body .cab-token-id{font-family:ui-monospace,"SF Mono",Menlo,monospace}
.cab-body .panel{box-shadow:var(--shadow)}
.cab-body .in{background:var(--panel);border:1px solid var(--line2);border-radius:8px;height:38px;color:var(--text)}
.cab-body .in::placeholder{color:var(--muted)}
.cab-body .in:focus{outline:none;border-color:var(--acc);box-shadow:0 0 0 3px var(--tint)}

/* ── Каркас «Док-нав»: телефон — нижняя панель, десктоп (≥900px) — левый сайдбар ── */
.cab-head{height:56px;display:flex;align-items:center;justify-content:space-between;gap:12px;
          padding:0 18px;border-bottom:1px solid var(--line);background:var(--panel);position:sticky;top:0;z-index:20}
.cab-brand{color:var(--text);text-decoration:none;font-size:15px;font-weight:650;letter-spacing:-.01em;white-space:nowrap}
.cab-brand:first-letter{color:var(--acc)}
.cab-head-r{display:flex;align-items:center;gap:8px;min-width:0}
.cab-logout{color:var(--dim);text-decoration:none;white-space:nowrap;font-size:13px}
.cab-logout:hover{color:var(--text)}
/* компактные контролы шапки (тема/звук/⚙) — hairline, нейтральные */
.cab-theme,.gear-btn,.snd-toggle{height:32px;min-width:32px;padding:0 9px;display:inline-flex;align-items:center;
  justify-content:center;gap:6px;border:1px solid var(--line2);border-radius:8px;background:var(--panel);
  color:var(--dim);cursor:pointer;font:inherit;font-size:14px;line-height:1}
.cab-theme:hover,.gear-btn:hover,.snd-toggle:hover{background:var(--hover);color:var(--text)}
.snd-toggle.off{color:var(--muted)}
/* «Тест» — присылает себе заявку. Нейтральная (не зелёная/красная): это не включение и не
   остановка, а проверка. Во время запроса блокируется, чтобы не устроить шторм. */
.cab-test{height:32px;padding:0 11px;border:1px solid var(--line2);border-radius:8px;background:var(--panel);
  color:var(--dim);cursor:pointer;font:inherit;font-size:12.5px;font-weight:600;line-height:1}
.cab-test:hover:not(:disabled){background:var(--hover);color:var(--text)}
.cab-test:disabled{opacity:.5;cursor:default}
/* Нав — только текст (без иконок). Нижняя фикс-панель на телефоне. */
/* Нижняя панель: пункты заполняют ширину, но НЕ сжимаются ниже текста (5 табов растянутся,
   6 у лида — панель прокрутится по горизонтали, а не обрежет метки). */
.cab-nav{position:fixed;left:0;right:0;bottom:0;z-index:20;display:flex;gap:2px;overflow-x:auto;
         padding:6px 8px calc(6px + env(safe-area-inset-bottom,0px));scrollbar-width:none;
         background:var(--panel);border-top:1px solid var(--line)}
.cab-nav::-webkit-scrollbar{display:none}
.cab-nav-i{flex:1 0 auto;min-width:54px;min-height:46px;position:relative;display:flex;align-items:center;justify-content:center;
           padding:0 5px;border-radius:8px;color:var(--dim);text-decoration:none;
           font-size:12.5px;font-weight:550;letter-spacing:-.005em;text-align:center;white-space:nowrap}
.cab-nav-i:hover{background:var(--hover);color:var(--text)}
.cab-nav-i.act{color:var(--acc);background:var(--tint);font-weight:600}
.cab-nav-i .nav-lb{white-space:nowrap}
.nav-badge{position:absolute;top:5px;right:8px;min-width:18px;height:18px;padding:0 5px;
           display:grid;place-items:center;border-radius:99px;background:var(--acc);color:var(--acc-ink);
           font-size:10px;font-weight:700;line-height:1;box-shadow:0 0 0 3px var(--panel)}
.cab-main{max-width:1180px;margin:0 auto;padding:22px 16px calc(78px + env(safe-area-inset-bottom,0px))}
@media(min-width:900px){
  .cab-nav{top:56px;bottom:0;right:auto;width:210px;flex-direction:column;gap:2px;padding:14px 12px;
           border-top:0;border-right:1px solid var(--line)}
  .cab-nav-i{flex:none;justify-content:flex-start;min-height:38px;padding:0 12px;font-size:14px;font-weight:500}
  .cab-nav-i.act{background:var(--tint);box-shadow:none}
  .nav-badge{position:static;margin-left:auto;box-shadow:none}
  .cab-nav-i:not(.act) .nav-badge{background:var(--line2);color:var(--dim)}
  .cab-main{margin:0 0 0 210px;max-width:1160px;padding:28px 28px 44px}
}

/* ── заголовки секций ── */
.cab-title{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;margin-bottom:16px}
.cab-title h1{margin:6px 0 0;font-size:26px;line-height:1.15;font-weight:680;letter-spacing:-.02em}
.cab-kicker{color:var(--muted);font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase}
.cab-count{font-size:12px;color:var(--dim);border:1px solid var(--line2);border-radius:99px;padding:4px 10px;background:var(--panel2)}

/* ── панели/формы ── */
.cab-body .panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px}
.cab-body .panel-h{font-size:13px;color:var(--dim);margin-bottom:12px}
.cab-body .frm{display:flex;flex-wrap:wrap;gap:10px}
.cab-body .frm .in{flex:1 1 200px;min-width:0}

/* ── кнопки: семантика ── */
.cab-body .btn{height:38px;padding:0 15px;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  border:1px solid transparent;border-radius:8px;font:inherit;font-size:13.5px;font-weight:600;letter-spacing:-.005em;
  cursor:pointer;white-space:nowrap;text-decoration:none;background:var(--go);color:var(--go-ink)}
.cab-body .btn:hover{background:var(--go-h)}
.cab-body .btn.ghost{background:transparent;border-color:var(--go-line);color:var(--go)}
.cab-body .btn.ghost:hover{background:var(--go-soft)}
.cab-body .acc-start{background:var(--go);color:var(--go-ink);border-color:transparent}
.cab-body .acc-start:hover{background:var(--go-h)}
.cab-body .acc-stop{background:var(--stop);color:var(--stop-ink);border-color:transparent}
.cab-body .acc-stop:hover{background:var(--stop-h)}
.cab-body .btn.ocancel{background:transparent;border-color:var(--stop-line);color:var(--stop)}
.cab-body .btn.ocancel:hover{background:var(--stop-soft)}

/* ── массовые действия ── */
.cab-bulk{display:grid;grid-template-columns:minmax(150px,.8fr) minmax(360px,1.4fr) auto;gap:16px;
          align-items:center;padding:16px 18px;margin-bottom:18px;border:1px solid var(--line);
          border-radius:12px;background:var(--panel);box-shadow:var(--shadow)}
.cab-bulk-title{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.cab-bulk-title strong{font-size:14px;font-weight:650}.cab-bulk-title span{font-size:12px;color:var(--dim)}
.cab-bulk-title .cab-locked{color:var(--gold)}
.cab-bulk-title .cab-dead{color:var(--warn);font-weight:650}
.cab-bulk-limits,.cab-bulk-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cab-bulk-actions{justify-content:flex-end}.cab-bulk-actions form{display:inline-flex}
.limit-input{width:96px;text-align:right}
.limit-rub{color:var(--muted);font-size:11px;letter-spacing:.4px}
.limit-btn{padding:0 13px;font-size:13px;white-space:nowrap}

/* ── карточки токенов ── */
.acc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.acc-card{position:relative;padding:16px;border:1px solid var(--line);border-radius:12px;
          background:var(--panel);box-shadow:var(--shadow)}
.acc-card:hover{border-color:var(--line2)}
.acc-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:5px}
.acc-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex:0 0 auto}
.acc-dot-armed{background:var(--go)}
.acc-dot-invalid{background:var(--danger)}
.acc-dot-dead{background:var(--warn)}
.acc-name{display:flex;align-items:center;gap:7px;min-width:0;flex:1}
.acc-label{font-size:15px;font-weight:650;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Замок лимитов — состояние ЦВЕТОМ: закреплён = золотая «таблетка», открыт = приглушённый (🔒/🔓 похожи). */
.acc-lock{display:inline-flex;align-items:center;gap:4px;border:1px solid transparent;background:transparent;
  padding:3px 9px;border-radius:99px;cursor:pointer;font:inherit;font-size:11px;font-weight:600;
  white-space:nowrap;line-height:1.4;color:var(--muted)}
.acc-lock.locked{color:var(--gold);background:var(--warn-bg);border-color:var(--gold)}
.acc-lock.unlocked:hover{color:var(--text);background:var(--hover)}
.acc-status-badge{margin-left:auto;padding:2px 9px;border-radius:99px;font-size:11px;font-weight:600;
                  color:var(--dim);background:var(--panel2);border:1px solid var(--line2)}
.acc-status-armed{color:var(--go);background:var(--go-soft);border-color:var(--go-line)}
.acc-status-invalid{color:var(--danger);background:var(--neg-bg);border-color:var(--stop-line)}
.acc-status-dead{color:var(--warn);background:var(--warn-bg);border-color:var(--warn)}
.acc-token{margin-bottom:14px;color:var(--muted);font-size:12px;letter-spacing:.02em}
/* ВНИМАНИЕ: у карточки класс собирается как "acc-"+status (acc-invalid / acc-dead), поэтому
   ПЛАШКИ внутри неё называются -note. Раньше плашка звалась .acc-invalid и тем же правилом
   красила саму карточку: у отбитого токена padding становился 10px вместо 16px, а шрифт 11px —
   карточка «схлопывалась» непохоже на соседние. Модификатор карточки теперь только подсветка. */
.acc-card.acc-invalid{border-color:var(--stop-line);background:var(--neg-bg)}
.acc-card.acc-dead{border-color:var(--warn);background:var(--warn-bg)}
.acc-invalid-note,.acc-dead-note{display:flex;flex-direction:column;gap:3px;margin:-2px 0 14px;
             padding:10px 11px;border-radius:8px;font-size:11px}
.acc-invalid-note{border:1px solid var(--stop-line);background:var(--neg-bg);color:var(--danger)}
.acc-invalid-note span,.acc-invalid-note time{color:var(--danger);opacity:.85}
/* «Нет связи с нодой» — тревога ЯНТАРНАЯ, не красная: токен исправен, проблема на нашей стороне
   (красный в кабинете означает «чини токен»). */
.acc-dead-note{border:1px solid var(--warn);background:var(--warn-bg);color:var(--warn)}
.acc-dead-note span{color:var(--warn);opacity:.85}
/* Лимиты — ОДНА ЛИНИЯ на десктопе: nowrap + гибкие инпуты (сжимаются), кнопка справа. */
.acc-limits{display:flex;align-items:flex-end;flex-wrap:nowrap;gap:8px}
.acc-limits label{display:flex;flex-direction:column;gap:5px;flex:1 1 84px;min-width:80px}
.acc-limits .limit-input{width:100%;padding:0 8px}
/* Стрелки-спиннеры у number-инпутов лимитов не нужны (большие суммы) и съедают ширину — убираем. */
.limit-input{appearance:textfield;-moz-appearance:textfield}
.limit-input::-webkit-outer-spin-button,.limit-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.acc-limits label>span{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
/* «Установить» — на всю ширину под Мин/Макс: в узкой карточке (≥320) в один ряд не влезает. */
/* Мин — Макс — Установить в ОДНУ линию (кнопка прижата вправо). На мобильном — на всю ширину. */
.acc-limits .limit-btn{flex:0 0 auto;margin-left:auto}
.limit-dash{flex:0 0 auto;padding-bottom:9px;color:var(--muted)}
/* Уведомление о закреплении — callout ПРЯМО ПОД шапкой карточки (под кнопкой замка). */
.acc-lock-note{margin:0 0 12px;color:var(--gold);font-size:11px;line-height:1.4;
  background:var(--warn-bg);border:1px solid var(--gold);border-radius:8px;padding:7px 10px}
.acc-blacklist{display:flex;gap:8px;margin-top:12px}
.acc-blacklist .in{flex:1;width:auto;min-width:0}
/* Переименование — нативный <details>, свёрнут по умолчанию (карточка остаётся компактной). */
.acc-edit{margin-top:12px}
.acc-edit summary{cursor:pointer;color:var(--dim);font-size:12px;font-weight:500;list-style:none;user-select:none;padding:2px 0}
.acc-edit summary::-webkit-details-marker{display:none}
.acc-edit summary:hover{color:var(--text)}
.acc-rename{display:flex;gap:8px;margin-top:8px}
.acc-rename .in{flex:1;width:auto;min-width:0}
/* Смена реквизита: инпуты в столбик (длинные), кнопка компактно слева. */
.acc-creds{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.acc-creds .in{width:100%}
.acc-creds .btn{align-self:flex-start}

/* ── Стата: плитки + почасовой бар-график ── */
.stat-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.stat-tile{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;box-shadow:var(--shadow)}
.stat-k{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.stat-v{margin-top:6px;font-size:24px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.stat-v.pos{color:var(--go)}
.stat-chart .chart-wrap{margin-top:8px}
.chart{width:100%;height:140px;display:block}
.chart .bar{fill:var(--acc)}
.chart-x{position:relative;height:14px;margin-top:6px;color:var(--muted);font-size:10px}
.chart-x span{position:absolute;white-space:nowrap;font-variant-numeric:tabular-nums}

/* ── Команда (лид) ── */
.team-list{display:flex;flex-direction:column;gap:10px}
.team-member{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:13px 16px;
  box-shadow:var(--shadow);display:flex;flex-direction:column;gap:9px}
.tm-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tm-dot{width:8px;height:8px;border-radius:50%;flex:none}
.tm-dot.on{background:var(--go)}
.tm-dot.off{background:var(--muted)}
.tm-name{font-weight:650;font-size:15px;letter-spacing:-.01em}
.tm-lead{height:19px;padding:0 7px;display:inline-flex;align-items:center;border-radius:5px;font-size:10.5px;
  font-weight:600;color:var(--acc);background:var(--tint);border:1px solid var(--tint2)}
.tm-status{margin-left:auto;font-size:12px;font-weight:600}
.tm-status.tm-on{color:var(--go)}
.tm-status.tm-off{color:var(--muted)}
.tm-metrics{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--dim);font-variant-numeric:tabular-nums}
.tm-metrics b{color:var(--text)}
.tm-fee{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:9px;border-top:1px solid var(--line)}
.tm-fee label{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.tm-fee .in{width:78px;text-align:right;appearance:textfield;-moz-appearance:textfield}
.tm-fee .in::-webkit-outer-spin-button,.tm-fee .in::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.tm-fee .tm-pct{color:var(--muted);font-size:13px;margin-left:-2px}
.tm-fee .btn{margin-left:auto}
/* Комиссия лида — только чтение (свою fee лид не меняет). */
.tm-fee-ro .tm-feeval{margin-left:2px;font-weight:650;font-size:14px;color:var(--text)}
.tm-fee-ro .tm-pct{color:var(--muted);font-weight:400;margin-left:1px}
.acc-actions{display:flex;justify-content:flex-start;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.cab-empty{grid-column:1/-1;padding:48px;text-align:center;color:var(--muted);border:1px dashed var(--line2);border-radius:12px}

/* ── таблицы (Мои QR / Скорость) ── */
.cab-title.cab-table-title{margin-bottom:16px}
.cab-table-grid{display:grid;gap:12px;align-items:center;padding:10px 16px}
.qr-grid{grid-template-columns:112px 90px 120px minmax(150px,1fr) 110px;min-width:680px}
.cab-speed-grid{grid-template-columns:110px 90px minmax(170px,1fr) minmax(160px,1fr);min-width:600px}
.cab-table-head{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);background:var(--panel2)}
.cab-table-row{border-top:1px solid var(--line)}
.cab-table-row:hover{background:var(--hover)}
.cab-table-empty{padding:20px 16px;color:var(--muted)}
.cab-status-tag{display:inline-block;padding:2px 8px;border:1px solid currentColor;border-radius:99px;font-size:10px;font-weight:600}

/* ── Online Orders ── */
.conn-pill{font-size:12px;font-weight:550;padding:4px 10px;border-radius:999px;white-space:nowrap;border:1px solid var(--line2);color:var(--dim)}
.conn-online{color:var(--go);border-color:var(--go-line);background:var(--go-soft)}
.conn-connecting{color:var(--warn);border-color:var(--warn-bg);background:var(--warn-bg)}
.conn-offline{color:var(--stop);border-color:var(--stop-line);background:var(--stop-soft)}
.conn-banner{margin:0 0 16px;padding:11px 15px;border-radius:10px;font-weight:600;font-size:13px;
  color:var(--warn);background:var(--warn-bg);border:1px solid var(--warn)}
.hidden{display:none!important}
.ord-head{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.ord-head h1{margin:0;font-size:22px;font-weight:680;letter-spacing:-.02em}
.ord-hint{font-size:13px;color:var(--dim)}
.orders-wrap{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.orders-empty{padding:56px 20px;text-align:center;color:var(--muted);font-size:14px;line-height:1.7}
.ocard{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;
  display:flex;flex-direction:column;align-items:center;gap:11px;box-shadow:var(--shadow);animation:opop .2s ease}
@keyframes opop{from{transform:scale(.98);opacity:.5}to{transform:none;opacity:1}}
.ocard .qrbox{background:#fff;padding:8px;border-radius:10px;line-height:0;border:1px solid var(--line2)}
.ocard .qrbox img{width:200px;height:200px;display:block}
.ocard .oamt{font-size:27px;font-weight:700;letter-spacing:-.02em}
.ocard .obrand{color:var(--dim);font-size:13px;text-align:center}
.ocard .obrand .oprov{text-transform:uppercase;letter-spacing:.04em;font-size:11px;color:var(--muted)}
.ocard .opay{width:100%}
.ocard .oacts{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}
/* Тестовая заявка — видно с первого взгляда, что платить по ней нечего (пунктир + ярлык). */
.ocard.otest{border-style:dashed;border-color:var(--warn)}
.ocard .otest-badge{align-self:stretch;text-align:center;padding:3px 8px;border-radius:99px;
  background:var(--warn-bg);color:var(--warn);font-size:11px;font-weight:700;letter-spacing:.02em}
.ocard .ook{background:transparent;border-color:var(--go-line);color:var(--go)}
.ocard .ook:hover{background:var(--go-soft)}
.orders-toast{position:fixed;right:16px;bottom:16px;z-index:40;display:flex;flex-direction:column;gap:8px}
.orders-toast div{background:var(--panel);border:1px solid var(--line2);border-radius:10px;
  padding:10px 14px;font-size:12px;box-shadow:0 10px 30px rgba(0,0,0,.18)}
.ord-notokens{color:var(--text);background:var(--info-bg);border:1px solid var(--info);box-shadow:none}
.ord-notokens a{color:var(--info);text-decoration:underline}

/* ── контролы приёма: курс + ⚙ поповер + размер QR ── */
.rate-pill{font-size:12px;color:var(--dim);padding:4px 10px;border-radius:999px;border:1px solid var(--line2);white-space:nowrap}
.rate-pill b{color:var(--text)}
.gear-wrap{position:relative}
.gear-pop{position:absolute;right:0;top:40px;z-index:30;width:264px;background:var(--panel);
  border:1px solid var(--line2);border-radius:12px;padding:14px;box-shadow:0 16px 40px rgba(0,0,0,.18)}
.gear-h{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin-bottom:12px;font-weight:600}
.gear-row{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.gear-l{width:52px;font-size:12px;color:var(--dim)}
.gear-sel{flex:1;width:auto;padding:0 10px}
.snd-play{background:transparent;border:1px solid var(--line2);color:var(--info);border-radius:8px;
  width:32px;height:32px;cursor:pointer;font-size:11px}
.snd-play:hover{border-color:var(--info)}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.seg button{background:transparent;border:0;color:var(--dim);padding:6px 13px;cursor:pointer;font:inherit;font-size:12px}
.seg button+button{border-left:1px solid var(--line2)}
.seg button.on{background:var(--acc);color:var(--acc-ink);font-weight:600}
.gear-hint{font-size:11px;color:var(--warn);margin-top:6px}
#orders-wrap[data-qr="s"] .qrbox img{width:150px;height:150px}
#orders-wrap[data-qr="l"] .qrbox img{width:260px;height:260px}

/* ── адаптив ── */
@media(max-width:900px){
  .cab-bulk{grid-template-columns:1fr}.cab-bulk-actions{justify-content:flex-start}
}
@media(max-width:620px){
  .cab-head{gap:8px;padding:0 14px}.acc-grid{grid-template-columns:1fr}
  /* Мобильный: карточка узкая — переносим, «Установить» на всю ширину. */
  .acc-limits{flex-wrap:wrap}
  .acc-limits .limit-btn{flex:1 1 100%;margin-left:0}
}
@media(max-width:560px){.rate-pill{display:none}}
@media(max-width:720px){.orders-wrap{grid-template-columns:1fr}.ocard .qrbox img{width:220px;height:220px}}
