/* dev.0xbandit panel — layout v2 (2026-09-17)
 *
 * Layout contract (делает вёрстку устойчивой):
 *   1. Ничего не позиционируется абсолютно; всё в потоке.
 *   2. Колонки — flex-стеки (.col), поэтому карточки не растягиваются и не
 *      оставляют дыр из-за разной высоты соседей.
 *   3. Все таблицы — table-layout:fixed с явными ширинами колонок, тексты
 *      обрезаются ellipsis. Таблица физически не может вылезти за карточку.
 *   4. .card{min-width:0;overflow:hidden} — страховка от «наезда» на соседа.
 */
:root{
  --bg:#0a0a12;
  --card:rgba(20,20,34,.72);
  --line:rgba(91,140,255,.14);
  --green:#00ff9d;
  --red:#ff4d6a;
  --blue:#5b8cff;
  --purple:#b794ff;
  --orange:#ffa23a;
  --yellow:#ffd23a;
  --txt:#e8ecf4;
  --dim:#7b8598;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:radial-gradient(1200px 600px at 18% -12%,#15152b,transparent 60%) no-repeat,var(--bg);
  color:var(--txt);
  font:14px/1.45 -apple-system,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
}
#app,#loginWrap{max-width:1460px;margin:0 auto;padding:16px 18px 40px}

/* ---------- header ---------- */
.head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px;flex-wrap:wrap}
.head h1{font-size:17px;margin:0;font-weight:650;letter-spacing:.2px;display:flex;align-items:center;gap:9px}
.head-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dot{width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green);flex:0 0 auto}
.dim{color:var(--dim)}

/* ---------- buttons ---------- */
.btn{border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--txt);
     padding:7px 13px;border-radius:9px;cursor:pointer;font-size:13px;font-weight:550;
     transition:background .12s,border-color .12s,transform .06s;line-height:1.1}
.btn:hover{background:rgba(255,255,255,.09)}
.btn:active{transform:translateY(1px)}
.btn.green{background:rgba(0,255,157,.15);border-color:rgba(0,255,157,.45);color:var(--green)}
.btn.green:hover{background:rgba(0,255,157,.24)}
.btn.red{background:rgba(255,77,106,.15);border-color:rgba(255,77,106,.45);color:var(--red)}
.btn.red:hover{background:rgba(255,77,106,.24)}
.btn.ghost{background:transparent;color:var(--dim)}
.btn.ghost:hover{color:var(--txt)}

/* ---------- stat cards ---------- */
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
#stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-bottom:16px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:11px 14px;min-width:0;overflow:hidden}
.stat-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stat-value{font-size:21px;font-weight:650;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stat-value.green{color:var(--green)}

/* ---------- columns + cards ---------- */
.grid2{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);gap:14px;align-items:start}
.col{display:flex;flex-direction:column;gap:14px;min-width:0}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 15px;
      min-width:0;overflow:hidden;margin-bottom:14px}
.col > .card{margin-bottom:0}
.grid2 + .card{margin-top:14px}
.sec-title{font-size:11.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--dim);
           margin-bottom:11px;font-weight:650}

/* ---------- forms ---------- */
.addrow{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:end;margin-bottom:6px}
.addrow3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;align-items:end;margin-bottom:6px}
.addrow .f.addr{grid-column:1 / -1}
.addrow > .btn{grid-column:1 / -1;justify-self:start}
.f{display:flex;flex-direction:column;gap:4px;min-width:0}
.f label{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);
         white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
input{background:rgba(0,0,0,.35);border:1px solid var(--line);border-radius:8px;color:var(--txt);
      padding:7px 9px;font-size:13px;width:100%;min-width:0;font-family:inherit}
input:focus{outline:none;border-color:rgba(91,140,255,.6)}
#settings .set{display:grid;grid-template-columns:1fr 130px;gap:8px 12px;align-items:center}
#settings .set span{font-size:12.5px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#settings .set input[type=checkbox]{width:auto;justify-self:start}
#tp-list>div,#sl-list>div{display:flex;gap:8px;align-items:center;margin-bottom:7px}
#tp-list label,#sl-list label{font-size:11px;color:var(--dim);white-space:nowrap}
#tp-list input,#sl-list input{width:78px}

/* ---------- tables: fixed layout, ничего не вылезает ---------- */
.tblwrap{width:100%;max-width:100%;overflow:auto;overscroll-behavior:contain;max-height:600px}
table{width:100%;border-collapse:collapse;font-size:12.5px;table-layout:fixed}
th{position:sticky;top:0;z-index:1;background:#12121f;color:var(--dim);font-size:10px;
   text-transform:uppercase;letter-spacing:.6px;font-weight:650;text-align:left;
   padding:7px 8px;border-bottom:1px solid var(--line)}
td{padding:7px 8px;border-bottom:1px solid rgba(255,255,255,.045);vertical-align:middle;
   overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
tbody tr:hover{background:rgba(91,140,255,.06)}

/* dev table column widths */
/* Дев-таблица: сумма ширин подобрана под карточку, чтобы последняя колонка
   (кнопки ✎/💾/✕) НЕ обрезалась .card{overflow:hidden}.
   Кнопки теперь иконочные, поэтому 78px хватает на две штуки. */
#devTable{table-layout:fixed;width:100%}
/* ---------- 27.09 (владелец) ----------
   (1) вертикальные РАЗДЕЛИТЕЛИ между столбцами — чтобы колонки не сливались;
   (2) заметки (3-й столбец) читаемые: перенос строк вместо обрезки;
   (3) .colgrip — ручка на правой границе заголовка: тянем мышью, ширины запоминаются. */
#devTable th, #devTable td { border-right: 1px solid #2a2f3a; }
#devTable tbody td { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#devTable tbody td:nth-child(3) { white-space: normal; word-break: break-word; line-height: 1.25; }
#devTable th { position: relative; user-select: none; }
.colgrip { position: absolute; top: 0; right: -4px; width: 8px; height: 100%; cursor: col-resize; z-index: 5; }
.colgrip:hover { background: rgba(120,180,255,.35); }
#devTable th:nth-child(1),#devTable td:nth-child(1){width:44px;overflow:hidden;text-overflow:ellipsis}
/* 27.09 (владелец): столбец ДЕЙСТВ. — три кнопки должны помещаться целиком. */
#devTable th:nth-child(12),#devTable td:nth-child(12){width:116px;white-space:nowrap;overflow:visible}
#devTable td:nth-child(12) button{padding:1px 4px;margin:0 1px;font-size:12px;line-height:16px}
#devTable th:nth-child(2),#devTable td:nth-child(2){width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 27.09 (владелец): ПРИМЕЧАНИЕ — забирает всё свободное место и переносится, чтобы читалось */
#devTable th:nth-child(3),#devTable td:nth-child(3){width:auto}
#devTable th:nth-child(4),#devTable td:nth-child(4){width:60px}
#devTable th:nth-child(5),#devTable td:nth-child(5){width:62px}
#devTable th:nth-child(6),#devTable td:nth-child(6){width:66px;text-align:right;overflow:visible;white-space:nowrap}
#devTable td{padding:5px 4px}
#devTable td input{width:100%;min-width:0;padding:4px 5px;font-size:12px}
#devTable .btn{padding:2px 6px !important;font-size:13px !important;line-height:1.1;min-width:0}
#devTable td .deldev{padding:2px 6px;font-size:13px;line-height:1;cursor:pointer}
#devTable td input{width:100%;padding:5px 7px;font-size:12px}
tr.editing{background:rgba(91,140,255,.07)}
tr.devrow{background:rgba(183,148,255,.06)}

/* events table column widths */
#recsTable th:nth-child(1),#recsTable td:nth-child(1){width:74px}
#recsTable th:nth-child(2),#recsTable td:nth-child(2){width:150px}
#recsTable th:nth-child(3),#recsTable td:nth-child(3){width:96px}
#recsTable th:nth-child(4),#recsTable td:nth-child(4){width:90px}
#recsTable th:nth-child(5),#recsTable td:nth-child(5){width:104px}
#recsTable th:nth-child(6),#recsTable td:nth-child(6){width:126px}

/* source badge (which process delivered the token) */
.srcb{display:inline-block;padding:2px 8px;border-radius:6px;font-size:10.5px;font-weight:700;
      letter-spacing:.3px;border:1px solid transparent}
.srcb-preconf{background:rgba(183,148,255,.18);color:#cbb2ff;border-color:rgba(183,148,255,.5)}
.srcb-preproc{background:rgba(91,140,255,.18);color:#9dbaff;border-color:rgba(91,140,255,.5)}
.srcb-ws{background:rgba(255,210,58,.16);color:#ffe27a;border-color:rgba(255,210,58,.45)}
.srcb-shred{background:rgba(255,162,58,.18);color:#ffc07a;border-color:rgba(255,162,58,.5)}
.srcb-postpack{background:rgba(255,122,26,.18);color:#ffa14a;border-color:rgba(255,122,26,.5)}

/* ---------- chips / pills ---------- */
.chip{border:1px solid var(--line);background:transparent;color:var(--dim);padding:4px 12px;
      border-radius:999px;cursor:pointer;font-size:11.5px;font-weight:600}
.chip:hover{color:var(--txt)}
.chip.active{background:rgba(91,140,255,.22);border-color:rgba(91,140,255,.6);color:#cfe0ff}
.pill{display:inline-block;padding:2.5px 9px;border-radius:999px;font-size:10.5px;font-weight:700;
      letter-spacing:.3px;border:1px solid transparent}
.pill.okb{background:rgba(0,255,157,.18);color:var(--green);border-color:rgba(0,255,157,.45)}
.pill.oksb{background:rgba(91,140,255,.16);color:#9dbaff;border-color:rgba(91,140,255,.4)}
.pill.skipb{background:rgba(255,77,106,.16);color:var(--red);border-color:rgba(255,77,106,.4)}
.pill.nob{background:rgba(255,162,58,.16);color:var(--orange);border-color:rgba(255,162,58,.4)}
.pill.devb{background:rgba(183,148,255,.2);color:var(--purple);border-color:rgba(183,148,255,.5)}
.pill small{opacity:.75;font-weight:600;margin-left:3px}
.err{color:var(--red);font-size:11.5px}
.err-ok{color:var(--dim);font-size:11.5px}

/* source dot before the token */
.dot-src{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:middle}
.src-pc{background:var(--purple);box-shadow:0 0 7px var(--purple)}
.src-pp{background:var(--blue);box-shadow:0 0 7px var(--blue)}
.src-ws{background:var(--yellow);box-shadow:0 0 7px var(--yellow)}
.src-sh{background:var(--orange);box-shadow:0 0 7px var(--orange)}

/* ---------- login ---------- */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:26px;
            width:100%;max-width:380px;text-align:center}
.login-card h1{font-size:17px;margin:0 0 16px}
.login-msg{color:var(--red);font-size:12.5px;min-height:18px;margin-top:8px}

/* ---------- toast ---------- */
#toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%) translateY(14px);
       background:#141428;border:1px solid var(--line);border-radius:10px;padding:9px 16px;
       font-size:12.5px;opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;z-index:50}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ---------- TP/SL: две ровные подколонки на всю ширину ---------- */
.tpsl{display:grid;grid-template-columns:1fr 1fr;gap:24px}
@media(max-width:900px){.tpsl{grid-template-columns:1fr}}

/* ---------- responsive: одна колонка ---------- */
@media(max-width:1180px){
  .grid2{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:900px){
  #stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .addrow,.addrow3{grid-template-columns:1fr}
}
/** shred: данные до исполнения — токен может не существовать в сети */
.err-note{color:var(--orange,#ffa23a);font-size:11px;font-weight:600;letter-spacing:.2px}
/* dev.0xbandit panel — tabbed layout style additions (2026-09-24) */
.tab-bar { display: flex; gap: 8px; margin: 16px 0 20px; }
.tab-btn {
  background: transparent; border: 1px solid var(--border); color: var(--dim);
  padding: 8px 16px; border-radius: 10px; font-size: 13px; font-weight: 700;
  cursor: pointer; transition: all .15s;
}
.tab-btn:hover { border-color: var(--blue); color: var(--text); transform: translateY(-1px); }
.tab-btn.active {
  background: linear-gradient(135deg, var(--blue), #3b5bd6); color: #fff;
  border-color: transparent; box-shadow: 0 4px 20px rgba(91,140,255,0.3);
}
.blword { font-weight: 600; letter-spacing: .3px; }
/* devs table: fixed layout + compact inputs (2026-09-25) */
#devTable th, #devTable td { padding: 6px 6px; font-size: 12px; overflow: hidden; }
#devTable td input { width: 100%; min-width: 0; box-sizing: border-box; padding: 4px 6px; font-size: 12px; }
#devTable td { word-break: break-all; }
/* История + флаги + подсветка девов (2026-09-25) */
.devflag { cursor: pointer; font-size: 14px; user-select: none; }
.devflag-none { opacity: 0.35; }
tr.devrow-capped > td { background: #5a1216 !important; color: #fff; }
tr.devrow-capped > td .dim, tr.devrow-capped > td span.dim { color: #e9b8bc !important; }
tr.devrow-active > td { background: #123a1c !important; color: #eafbe9; }
tr.devrow-active > td .dim, tr.devrow-active > td span.dim { color: #b9e7b5 !important; }
tr.devrow-capped .btn, tr.devrow-active .btn { background: rgba(255,255,255,0.14); }
#histTable th, #histTable td { padding: 6px 8px; font-size: 12px; }
/* 25.09: бейдж платформы токена (колонка «Платформа» в последних событиях) */
.platb { display:inline-block; padding:1px 7px; border-radius:9px; font-size:10.5px; font-weight:600; white-space:nowrap; }
.platb-pump   { background:#3a2d55; color:#c9a6ff; }
.platb-stonk  { background:#1f3d2b; color:#7fe0a7; }
.platb-mayhem { background:#4d2410; color:#ffb066; }
.platb-custom { background:#1d3a4d; color:#7fd0ff; }

/* 28.09: DevDB tab — читаемость (владелец: слишком мелко) */
#devdbTable th, #devdbTable td, #devdb-tokens-card th, #devdb-tokens-card td {
  padding: 6px 8px;
  font-size: 15px;
  vertical-align: middle;
}
#devdbTable th, #devdb-tokens-card th { font-size: 13.5px; color:#9a9ab0; }

#devdbTable td{padding:5px 7px}#devdbTable th{padding:6px 7px}

/* ================= v18.92 (владелец 01.10): КОМПАКТНЫЕ ТАБЛИЦЫ =================
   Было: table-layout:fixed + width:100% ⇒ «auto»-колонка (кошелёк в копировании,
   примечание в списке девов) растягивалась на всю карточку, между текстом и
   остальными колонками висела пустая полоса, а примечание ужималось.
   Стало: колонки по содержимому, примечание — ограниченная ширина с переносом. */
/* 02.10 (владелец): обе таблицы девов — ВСЕГДА на всю ширину карточки, чтобы
   раскрытие списка токенов не меняло ширину и не прыгало. table-layout:auto
   оставляем, чтобы длинные примечания переносились, а не обрезались. */
#devTable, #cpDevTable { table-layout: auto; width: 100%; max-width: 100%; }
#devTable th, #devTable td { padding: 5px 7px; }
/* Кошелёк: хватает на «6Lk7…LbW1» моноширинным */
#devTable th:nth-child(2), #devTable td:nth-child(2) { width: 92px; }
/* Примечание: читаемое, но не бесконечно широкое */
#devTable th:nth-child(3), #devTable td:nth-child(3) {
  width: auto; min-width: 140px; max-width: 340px;
  white-space: normal; word-break: break-word; line-height: 1.25; }
/* ДЕЙСТВ.: три иконочные кнопки */
#devTable th:nth-child(12), #devTable td:nth-child(12) { width: 96px; }

/* --- таблица копирования создания --- */
#cpDevTable th, #cpDevTable td { padding: 5px 7px; }
#cpDevTable th:nth-child(1), #cpDevTable td:nth-child(1) { width: 104px; white-space: nowrap; }
#cpDevTable th:nth-child(2), #cpDevTable td:nth-child(2) {
  width: auto; min-width: 150px; max-width: 360px;
  white-space: normal; word-break: break-word; line-height: 1.25; }
#cpDevTable th:nth-child(3), #cpDevTable td:nth-child(3) { width: 78px; }  /* сумма SOL */
#cpDevTable th:nth-child(4), #cpDevTable td:nth-child(4) { width: 72px; }  /* priority */
#cpDevTable th:nth-child(5), #cpDevTable td:nth-child(5) { width: 66px; }  /* tip */
#cpDevTable th:nth-child(6), #cpDevTable td:nth-child(6) { width: 58px; }  /* копий */
#cpDevTable th:nth-child(7), #cpDevTable td:nth-child(7) { width: 44px; text-align: center; } /* вкл */
#cpDevTable th:nth-child(8), #cpDevTable td:nth-child(8) { width: 88px; white-space: nowrap; }

/* --- 06.10 p18.137 (владелец): ПАУЗА — тумблер в шапке рядом с «выйти»/«Стоп» --- */
.switch { display:inline-flex; align-items:center; gap:7px; cursor:pointer; user-select:none; }
.switch input { position:absolute; opacity:0; width:0; height:0; }
.switch .slider { width:38px; height:20px; border-radius:20px; background:#3a3a3a;
  position:relative; transition:background .15s; flex:0 0 auto; border:1px solid #4a4a4a; }
.switch .slider:before { content:""; position:absolute; width:16px; height:16px; border-radius:50%;
  background:#bbb; left:1px; top:1px; transition:transform .15s, background .15s; }
.switch input:checked + .slider { background:#a38033; border-color:#c39a43; }
.switch input:checked + .slider:before { transform:translateX(18px); background:#fff; }
.switch .sw-label { font-size:13px; color:#9a9a9a; }
.switch.on .sw-label { color:#ffb454; font-weight:600; }
.switch input:focus-visible + .slider { outline:2px solid #5aa9ff; outline-offset:2px; }
