/* shelfy // trade — моноширинный терминал, мягкая палитра, крупный кегль.
   Всё в rem: кнопки A−/A+ меняют html font-size, масштабируется вся сетка. */

:root{
  --bg:#121413;
  --bg-deep:#0e100f;
  --panel:#181b19;
  --panel-hi:#1d211e;
  --row:#1f2421;
  --line:#252a27;
  --line-soft:#1e2321;
  --line-hi:#333a36;

  --fg:#dde2de;
  --fg2:#b3bab5;
  --dim:#868f89;
  --dim2:#5f6863;

  --up:#82c592;
  --dn:#d98a8a;
  --warn:#cfab73;
  --info:#95abc1;

  --up-soft:rgba(130,197,146,.10);
  --dn-soft:rgba(217,138,138,.10);
  --warn-soft:rgba(207,171,115,.10);

  --r:2px;
}

*{box-sizing:border-box}
html{font-size:16.5px}
@media (max-width:640px){html{font-size:15px}}

html,body{margin:0;padding:0}
/* горизонтальный «хвост» не должен рождать скроллбар; clip не ломает sticky */
body{overflow-x:clip}
body{
  background:var(--bg);
  color:var(--fg);
  font-family:"Berkeley Mono","JetBrains Mono","IBM Plex Mono","SF Mono",Menlo,Consolas,"DejaVu Sans Mono",monospace;
  font-size:.875rem;
  line-height:1.5;
  font-variant-numeric:tabular-nums;
  font-feature-settings:"zero" 1,"tnum" 1;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
::selection{background:#2b4438;color:#f2fff6}
button{font:inherit;color:inherit}

.up{color:var(--up)} .dn{color:var(--dn)} .warn{color:var(--warn)}
.dim{color:var(--dim)} .dim2{color:var(--dim2)} .flat{color:var(--fg2)}

/* ============================================================== topbar */
.head{
  position:sticky;top:0;z-index:30;
  background:var(--bg-deep);
  border-bottom:1px solid var(--line-soft);
}
.topbar{
  display:flex;align-items:center;gap:1.1rem;
  padding:.55rem clamp(.9rem,1.6vw,2.2rem) .5rem;
}
.brand{
  font-size:.8rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--fg2);white-space:nowrap;margin-right:auto;
}
.brand .sl{color:var(--dim2);margin:0 .1em}
.tb-right{display:flex;align-items:center;gap:.9rem;white-space:nowrap;flex:0 0 auto}

.chip{display:flex;align-items:baseline;gap:.4rem}
.chip i{
  font-style:normal;font-size:.62rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--dim2);
}
.chip b{font-weight:400;font-size:.86rem;color:var(--fg)}
@media (max-width:820px){.chip{display:none}}

.clock{color:var(--dim);font-size:.72rem;letter-spacing:.06em}
@media (max-width:560px){.clock{display:none}}

.pill{
  font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;
  border:1px solid var(--line-hi);color:var(--dim);
  padding:.15rem .45rem;border-radius:var(--r);
}
.pill.ok{color:var(--up);border-color:#2f4a39}
.pill.warn{color:var(--warn);border-color:#4c3f27}
.pill.bad{color:var(--dn);border-color:#513232}

.fsz{display:flex;gap:.2rem}
.fsz button{
  background:transparent;border:1px solid var(--line);border-radius:var(--r);
  color:var(--dim);cursor:pointer;
  font-size:.7rem;line-height:1;padding:.2rem .4rem;
}
.fsz button:hover{color:var(--fg);border-color:var(--line-hi)}

.barline{height:2px;background:#161a18;overflow:hidden}
.barline-fill{height:2px;background:#3c6b52;width:0%;transition:width .9s linear}

/* ================================================================ tabs */
.tabs{
  display:flex;gap:.25rem;flex-wrap:wrap;
  padding:.35rem clamp(.9rem,1.6vw,2.2rem) 0;
}
.tabs button{
  background:transparent;border:0;border-bottom:2px solid transparent;
  padding:.5rem .85rem .55rem;
  color:var(--dim);cursor:pointer;
  font-size:.78rem;letter-spacing:.06em;
  white-space:nowrap;
  display:flex;align-items:baseline;gap:.4rem;
}
.tabs button:hover{color:var(--fg2)}
.tabs button.on{color:var(--fg);border-bottom-color:var(--up)}
.tabs em{
  font-style:normal;font-size:.62rem;color:var(--dim2);
  letter-spacing:.04em;
}
.tabs button.on em{color:var(--dim)}

/* ================================================================ layout */
/* контент на всю ширину экрана; поля только по краям */
.wrap{
  width:100%;max-width:none;margin:0;
  padding:1.25rem clamp(.9rem,1.6vw,2.2rem) 3rem;
}
@media (min-width:2000px){
  /* на очень широких мониторах не растягиваем до бесконечности, но и не центруем */
  .wrap{padding-right:4vw;padding-left:4vw}
}
.tab[hidden]{display:none}
.grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:1rem;align-items:start;
  margin-bottom:1rem}
.grid2.solo{grid-template-columns:1fr}
/* панели внутри сетки разведены gap'ом; внешний отступ даёт сама сетка,
   иначе следующий .panel прилипает к ней вплотную */
.grid2 > .panel{margin-bottom:0}
@media (max-width:1020px){.grid2{grid-template-columns:1fr}}

/* ================================================================ hero */
.hero{
  border:1px solid var(--line);
  border-left:2px solid var(--dim2);
  background:var(--panel);
  padding:1.1rem 1.15rem 1.15rem;
  margin-bottom:1rem;
}
.hero .kicker{
  font-size:.64rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--dim2);
  display:flex;gap:.75rem;flex-wrap:wrap;
}
.hero .kicker span{color:var(--dim)}
.hero .kicker span::before{content:'\00b7';margin:0 .5rem 0 .05rem;color:#3a4340}
.hero .title{
  font-size:1.42rem;line-height:1.25;letter-spacing:.01em;
  margin:.45rem 0 .35rem;
  color:var(--fg);
}
.hero .note{font-size:.82rem;color:var(--fg2);line-height:1.55;max-width:62ch}
.hero.in_position{border-left-color:var(--info)}
.hero.in_position .title{color:var(--info)}
.hero.waiting{border-left-color:var(--warn)}
.hero.waiting .title{color:var(--warn)}
.hero.idle .title{color:var(--fg2)}

/* ================================================================= kpis */
.kpis{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:1px;background:var(--line-soft);
  border:1px solid var(--line);
  margin-bottom:1rem;
}
@media (max-width:720px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* внутри панели — квадрат 2x2: четыре KPI в двух столбцах и двух строках
   читаются спокойнее строки из четырёх (2026-10-26). Сетка/рамку панели
   не дублируем: панель уже даёт border, здесь только линии между ячейками. */
.panel .kpis,
.kpis.inpanel{
  grid-template-columns:repeat(2,minmax(0,1fr));
  margin-bottom:0;border:0;border-top:1px solid var(--line-soft);
}
@media (min-width:1021px){
  .panel .kpis,
  .kpis.inpanel{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.kpi{background:var(--panel);padding:.8rem 1rem .85rem}
.kpi .k{
  font-size:.62rem;letter-spacing:.15em;text-transform:uppercase;
  color:var(--dim2);
}
.kpi .v{
  font-size:1.55rem;line-height:1.15;margin-top:.3rem;color:var(--fg);
  letter-spacing:-.01em;
}
.kpi .s{font-size:.72rem;color:var(--dim);margin-top:.15rem}
.kq{font-size:.62em;color:var(--dim2);margin-left:.1em}

/* =============================================================== panels */
.panel{border:1px solid var(--line);background:var(--panel);margin-bottom:1rem}
.sect{
  display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;
  padding:.6rem 1rem;border-bottom:1px solid var(--line-soft);
}
.sect-t{
  font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--fg2);white-space:nowrap;
}
.sect-n{font-size:.7rem;color:var(--dim2);min-width:0}
.sect-r{flex:1;height:1px;min-width:1rem;background:var(--line-soft)}
.sect-ctl{display:flex;gap:.3rem;align-items:center;flex-wrap:wrap}
.ctl{
  background:transparent;border:1px solid var(--line);border-radius:var(--r);
  color:var(--dim);cursor:pointer;
  font-size:.68rem;letter-spacing:.06em;padding:.2rem .55rem;
}
.ctl:hover{color:var(--fg);border-color:var(--line-hi)}
.ctl.on{color:var(--fg);border-color:#3d5a49;background:var(--up-soft)}
/* сегмент глубины графика денег: 1 / 2 / 7 / 30 суток в углу панели */
.dseg{display:inline-flex;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.dseg-b{
  background:transparent;border:0;border-left:1px solid var(--line);
  color:var(--dim);cursor:pointer;font-family:inherit;font-size:.68rem;
  letter-spacing:.04em;padding:.2rem .5rem;min-width:2.1rem;
}
.dseg-b:first-child{border-left:0}
.dseg-b:hover{color:var(--fg);background:var(--bg-deep)}
.dseg-b.on{color:var(--fg);background:var(--up-soft);box-shadow:inset 0 -1px 0 #3d5a49}
.dseg-b.wait{color:var(--dim2);animation:dsegWait 1s linear infinite alternate}
@keyframes dsegWait{from{opacity:.45}to{opacity:1}}
.body{padding:.85rem 1rem 1rem}
.empty{
  padding:1.4rem 1rem;color:var(--dim);font-size:.82rem;line-height:1.6;
}
.empty b{color:var(--fg2);font-weight:400}

/* ================================================================ tables */
.tw{overflow-x:auto;overflow-y:hidden;min-width:0}
table.t{width:100%;border-collapse:collapse;font-size:.8rem}
table.t th{
  font-weight:400;font-size:.62rem;letter-spacing:.13em;text-transform:uppercase;
  color:var(--dim2);text-align:left;
  padding:.5rem .7rem;border-bottom:1px solid var(--line);
  white-space:nowrap;
}
table.t td{
  padding:.55rem .7rem;border-bottom:1px solid var(--line-soft);
  white-space:nowrap;vertical-align:middle;
}
table.t tbody tr:last-child td{border-bottom:0}
table.t tbody tr[data-jump]{cursor:pointer}
table.t tbody tr:hover td{background:var(--row)}
table.t .num{text-align:right}
table.t tfoot td{
  border-top:1px solid var(--line);border-bottom:0;
  padding:.55rem .7rem;color:var(--fg2);font-size:.78rem;
}
.sym{color:var(--fg);letter-spacing:.02em}
.sub{display:block;font-size:.66rem;color:var(--dim2);margin-top:.1rem}
.side-long{color:var(--up)} .side-short{color:var(--dn)}
.tag{
  display:inline-block;font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;
  border:1px solid var(--line-hi);border-radius:var(--r);
  padding:.05rem .34rem;color:var(--dim);
}
.tag.sig{color:var(--warn);border-color:#4c3f27;background:var(--warn-soft)}
.tag.pos{color:var(--info);border-color:#2f4356;background:rgba(149,171,193,.09)}
/* нога сделки в ленте «открытые сделки»: пробой / моментум / вне книг */
.legtag.brk{color:var(--info);border-color:#2f4356;background:rgba(149,171,193,.09)}
.legtag.xsec{color:var(--dim);border-color:var(--line-hi);background:transparent}
.legtag.other{color:var(--warn);border-color:#4c3f27;background:var(--warn-soft)}

/* ================================================================ signals */
.sigc{
  display:grid;grid-template-columns:minmax(0,1fr) auto;
  gap:.6rem 1rem;align-items:start;
  padding:.9rem 1rem;border-bottom:1px solid var(--line-soft);
}
.sigc:last-child{border-bottom:0}
.sig-l{min-width:0}
.sig-h{display:flex;align-items:baseline;gap:.55rem;flex-wrap:wrap}
.sig-sym{font-size:1rem;letter-spacing:.02em}
.sig-side{font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}
.sig-why{
  font-size:.74rem;color:var(--dim);margin-top:.35rem;line-height:1.55;
  display:flex;gap:.9rem;flex-wrap:wrap;
}
.sig-why b{font-weight:400;color:var(--fg2)}
.sig-r{text-align:right;white-space:nowrap}
.sig-r .big{font-size:1.15rem;line-height:1.2}
.sig-r .lbl{font-size:.6rem;letter-spacing:.13em;text-transform:uppercase;color:var(--dim2)}
@media (max-width:560px){.sigc{grid-template-columns:1fr}}

/* ============================================================== positions */
/* ВАЖНО: :not(.tag) — иначе правило карточки одевает бейдж <span class="tag pos">
   и он распухает до 55x46 px (паддинг .9rem/1rem). Ровно та же грабля, что
   .sig-карточка и .tag.sig (2026-10-22): имя класса карточки не должно
   совпадать с модификатором бейджа. */
.pos:not(.tag){
  padding:.9rem 1rem;border-bottom:1px solid var(--line-soft);
}
.pos:last-child{border-bottom:0}
.pos-h{display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap}
.pos-h .sym{font-size:1rem}
.pos-h .r{margin-left:auto;font-size:.9rem}
.pos-m{
  display:flex;gap:1.1rem;flex-wrap:wrap;
  font-size:.72rem;color:var(--dim);margin-top:.4rem;
}
.pos-m b{font-weight:400;color:var(--fg2)}
/* шкала SL .. TP с маркером текущего R */
.rbar{position:relative;height:6px;margin:.8rem 0 .35rem;background:var(--bg-deep);border:1px solid var(--line-soft)}
.rbar .fill{position:absolute;left:0;top:0;bottom:0;background:#2f5241}
.rbar .fill.dn{background:#5c3535}
.rbar .ent{position:absolute;top:-2px;bottom:-2px;width:1px;background:#3d4844}
.rbar .mk{position:absolute;top:-4px;width:2px;height:14px;background:var(--fg)}
.rbar-l{position:relative;display:flex;justify-content:space-between;font-size:.6rem;color:var(--dim2);letter-spacing:.06em}
.rbar-l .mid{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap;color:var(--dim)}

/* ================================================================== near */
.gap{display:flex;flex-direction:column;gap:.22rem;min-width:5.5rem}
.gap-v{font-size:.82rem}
.gap-v u{text-decoration:none;font-size:.62rem;color:var(--dim2);margin-left:.2rem}
.gapb{height:5px;background:#141816;border:1px solid var(--line-soft);position:relative}
.gapb i{position:absolute;left:0;top:0;bottom:0;background:#3c6b52}
.gapb i.dn{background:#6e3f3f}
.gapb i.hot{background:#8a6a33}
svg.spark{display:block;opacity:.95}
table.t th.fl,table.t td.fl{width:1%;text-align:right}
table.t th.colspark,table.t td.colspark{text-align:right}

/* --- на всю ширину: колонки жмутся влево, правый край — пустой «хвост» --- */
table.t.wide{table-layout:fixed}
table.t.wide th.fill,table.t.wide td.fill{width:auto;border-bottom-color:transparent}
table.t.wide th,table.t.wide td{overflow:hidden;text-overflow:ellipsis}

/* список «ближе к пробою»: 6 строк; в полноширинной панели — двумя колонками */
.near2{display:grid;grid-template-columns:1fr 1fr;gap:0 1.2rem}
.near2 table.t.wide{table-layout:auto}
.near2 table.t.wide th.fill,.near2 table.t.wide td.fill{display:none}
@media (max-width:1400px){.near2{grid-template-columns:1fr}}
#p-near table.t.wide th:nth-child(1),#p-near table.t.wide td:nth-child(1){width:8.5rem}
#p-near table.t.wide th:nth-child(2),#p-near table.t.wide td:nth-child(2){width:7.5rem}
#p-near table.t.wide th:nth-child(3),#p-near table.t.wide td:nth-child(3){width:11rem}
#p-near table.t.wide th:nth-child(4),#p-near table.t.wide td:nth-child(4){width:6.2rem}
#p-trades table.t.wide th:nth-child(1),#p-trades table.t.wide td:nth-child(1){width:8rem}
#p-trades table.t.wide th:nth-child(2),#p-trades table.t.wide td:nth-child(2){width:6rem}
#p-trades table.t.wide th:nth-child(3),#p-trades table.t.wide td:nth-child(3){width:12rem}
#p-trades table.t.wide th:nth-child(4),#p-trades table.t.wide td:nth-child(4){width:10rem}
#p-trades table.t.wide th:nth-child(5),#p-trades table.t.wide td:nth-child(5){width:10rem}
#p-trades table.t.wide th:nth-child(6),#p-trades table.t.wide td:nth-child(6){width:10rem}
#p-trades table.t.wide th:nth-child(7),#p-trades table.t.wide td:nth-child(7){width:6rem}
@media (max-width:1100px){
  table.t.wide{table-layout:auto}
  table.t.wide th,table.t.wide td{width:auto!important}
  table.t.wide th.fill,table.t.wide td.fill{display:none}
}

/* --- карточки в несколько колонок на широком экране --- */
.siglist,.mulist{display:block}
.siglist>*,.mulist>*{min-width:0}
@media (min-width:1180px){
  .siglist{display:grid;grid-template-columns:repeat(auto-fill,minmax(26rem,1fr))}
  .mulist{display:grid;grid-template-columns:repeat(auto-fill,minmax(22rem,1fr))}
  .siglist .sigc,.mulist .pos{border-right:1px solid var(--line-soft)}
}
@media (max-width:600px){
  .colspark{display:none}
  /* «ближе к пробою» на телефоне: вместо колонки цены — мини-график 24 баров */
  #p-near .colspark{display:table-cell;text-align:right}
  #p-near table.t.wide th:nth-child(2),#p-near table.t.wide td:nth-child(2){display:none}
  #p-near table.t.wide th:nth-child(4),#p-near table.t.wide td:nth-child(4){width:4.6rem}
  #p-near svg.spark{width:4.6rem;height:1.9rem}
  #p-near .gap{min-width:3.6rem}
  #p-near .gap-v u{display:none}
  .sect-n{display:none}
  .hero .kicker .opt{display:none}
  table.t th,table.t td{padding:.45rem .5rem}
  .hero .title{font-size:1.2rem}
}

/* =============================================================== breadth */
.bh{display:flex;justify-content:space-between;gap:1rem;align-items:baseline;flex-wrap:wrap;max-width:64rem}
.bh-v{font-size:.84rem}
.bh-v b{font-weight:400}
.meter{display:flex;gap:3px;margin-top:.45rem;max-width:60rem}
.meter i{
  flex:0 0 1.1rem;height:8px;background:var(--bg-deep);
  border:1px solid var(--line-soft);
}
.meter i.on{background:#4a7a5d;border-color:#3d5f4b}
.meter i.need{border-color:#6b5836}
.bnote{font-size:.74rem;color:var(--dim);margin-top:.6rem;line-height:1.65;max-width:78ch}

/* ================================================================ charts */
.charts{display:grid;grid-template-columns:repeat(auto-fill,minmax(26rem,1fr));gap:.9rem}
@media (max-width:820px){.charts{grid-template-columns:1fr}}
.chart{border:1px solid var(--line);background:var(--panel)}
.chart-h{
  display:flex;align-items:center;gap:.55rem;
  padding:.55rem .7rem;cursor:pointer;user-select:none;
  background:var(--panel-hi);
}
.chart-h:hover{background:var(--row)}
.chart-h .cv{color:var(--dim2);width:.7em;font-size:.7rem}
.chart-h .csym{font-size:.86rem;color:var(--fg);letter-spacing:.02em}
.chart-h .cgap{margin-left:auto;font-size:.72rem;color:var(--dim)}
.chart-b{padding:.35rem .5rem .5rem}
.chart.collapsed .chart-b{display:none}
.chart-meta{
  display:flex;gap:.9rem;flex-wrap:wrap;
  padding:.15rem .35rem 0;font-size:.66rem;color:var(--dim2);
}
.legend{display:flex;gap:.9rem;flex-wrap:wrap;font-size:.66rem;padding:.25rem .35rem 0;color:var(--dim2)}
.legend s{text-decoration:none;color:var(--up)}
.legend u{text-decoration:none;color:var(--dn)}
svg.chart-svg{display:block;width:100%;height:auto;overflow:visible}
svg.chart-svg text{fill:var(--dim2);font-size:8.5px;font-family:inherit}

/* ================================================================= week */
.wkbody{padding:.75rem 1rem .85rem}
.wksum{
  display:flex;gap:1.4rem;flex-wrap:wrap;
  font-size:.74rem;color:var(--dim);margin-bottom:.55rem;
}
.wksum b{font-weight:400;color:var(--fg)}
.wksum u{text-decoration:none;color:var(--dim2);font-size:.94em}
svg.chart-svg.wk{max-height:230px}
/* график «сигналы за 4 недели»: высота считается в пиксель от ширины панели
   (sigDayChart), поэтому потолок не нужен — max-height обрезал бы svg и
   возвращал ту самую «рамку» с пустыми полями по краям */
svg.chart-svg.sig{max-height:none}
/* 30 дней = 360 столбиков: подсветка не должна раздувать тонкие столбики */
svg.chart-svg.sig.dense{max-height:190px}
svg.chart-svg.sig g:hover rect{stroke:var(--line-hi);stroke-width:1}
.sigplot{position:relative;cursor:crosshair}
/* маркеры сделок на кривой денег: вход — info, закрытие — up/dn */
svg.chart-svg.wk .mev{pointer-events:none}
.mplot{position:relative;cursor:crosshair}
.mguide{position:absolute;top:0;bottom:0;width:1px;background:var(--line-hi);
  pointer-events:none;display:none}
.legend .lg-cl{color:var(--fg2)}
.legend .lg-op{color:var(--info)}

/* ---- таблица сделок под графиком денег (2026-10-28) --------------------
   Владелец: под кривой нужен компактный список сделок, которые на ней
   видны (закрытые + открытые), с пагинацией. Стили СКОУПНУТЫ под .wkbody
   и .mtbl: без скоупа правило вроде `td.num` одел бы любую таблицу на
   странице (это уже ловили на форме настроек 2026-10-23). */
.wkbody .mtbl{margin-top:.55rem;border-top:1px solid var(--line-soft)}
.wkbody .mtbl-h{
  display:flex;justify-content:space-between;align-items:center;gap:.6rem;
  padding:.45rem .35rem .3rem;font-size:.64rem;letter-spacing:.09em;
  text-transform:uppercase;color:var(--dim2);
}
.wkbody .mtbl-pg{display:inline-flex;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.wkbody .mtbl-b{
  background:transparent;border:0;border-left:1px solid var(--line);
  color:var(--dim);cursor:pointer;font-family:inherit;font-size:.68rem;
  letter-spacing:.04em;padding:.12rem .42rem;min-width:1.7rem;
  font-variant-numeric:tabular-nums;
}
.wkbody .mtbl-b:first-child{border-left:0}
.wkbody .mtbl-b:hover{color:var(--fg);background:var(--bg-deep)}
.wkbody .mtbl-b[disabled]{color:var(--dim2);opacity:.45;cursor:default}
.wkbody .mtbl-b[disabled]:hover{background:transparent;color:var(--dim2)}
.wkbody .mtbl-num{min-width:3.1rem;color:var(--fg2);cursor:default}
.wkbody .mtbl-num:hover{background:transparent;color:var(--fg2)}
.wkbody .mtbl-cnt{color:var(--dim2)}
.wkbody .mtbl-t{
  width:100%;border-collapse:collapse;table-layout:auto;
  font-size:.74rem;font-variant-numeric:tabular-nums;
}
.wkbody .mtbl-t th{
  font-weight:400;font-size:.6rem;letter-spacing:.07em;text-transform:uppercase;
  color:var(--dim2);text-align:left;padding:.12rem .35rem;
  border-bottom:1px solid var(--line-soft);white-space:nowrap;
}
.wkbody .mtbl-t th.num{text-align:right}
.wkbody .mtbl-t td{
  padding:.2rem .35rem;border-bottom:1px solid var(--line-soft);color:var(--fg2);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.wkbody .mtbl-t tr:last-child td{border-bottom:0}
.wkbody .mtbl-t tr.live td{background:var(--up-soft)}
.wkbody .mtbl-t tr.live td.t{color:var(--up)}
.wkbody .mtbl-t td.num{text-align:right}
.wkbody .mtbl-t td.t{color:var(--dim)}
.wkbody .mtbl-t td.s{color:var(--fg)}
.wkbody .mtbl-t td.side{color:var(--dim)}
.wkbody .mtbl-t td.lg{color:var(--dim2);font-size:.68rem}
.wkbody .mtbl-t td.w{color:var(--dim);font-size:.7rem}
.wkbody .mtbl-t td.none{text-align:center;color:var(--dim2);padding:.55rem}
/* ⚠️ Плюс/минус в R и PnL красим отдельными правилами С ЭТИМ ЖЕ скоупом:
   общее `td{color:var(--fg2)}` выше по специфичности, чем глобальный `.up`,
   и без этих строк ячейки оставались серыми (проверено в живом Chrome:
   цвет был rgb(179,186,181) при классе `num up`). */
.wkbody .mtbl-t td.up{color:var(--up)}
.wkbody .mtbl-t td.dn{color:var(--dn)}
.wkbody .mtbl-t td.flat{color:var(--dim2)}
/* Ширины колонок НЕ фиксируем: при `table-layout:fixed` свободное место
   целиком уезжало в последнюю колонку (581 px из 1195) и таблица выглядела
   прижатой к левому краю. `auto` + width:100% раздаёт остаток по содержимому. */
@media (max-width:760px){
  .wkbody .mtbl-t{font-size:.7rem}
  .wkbody .mtbl-t th.c-why,.wkbody .mtbl-t td.w{display:none}
  .wkbody .mtbl-t th,.wkbody .mtbl-t td{padding:.2rem .25rem}
}
@media (max-width:520px){
  .wkbody .mtbl-t th.c-leg,.wkbody .mtbl-t td.lg{display:none}
}
/* ---- узкий экран (≤560px): сделка = ДВЕ строки, данные не выбрасываем.
   Замер в живом Chrome (2026-10-28, эмуляция 320px): таблица в 8 колонок
   требует 407px при доступных 255px — вылезала на 135px и рвала вёрстку.
   Урезать колонки было бы враньём: на телефоне нет hover, тултип графика
   недоступен, и цена входа/выхода есть ТОЛЬКО в этой таблице. Поэтому
   строки становятся grid'ом: сверху время · монета · сторона · нога,
   снизу цена входа→выхода · R · PnL. Заголовки скрываем — R узнаётся по
   суффиксу, «лонг/шорт» и «пробой/моментум» — по словам.
   ⚠️ Порог именно 560, а не 480: при 520px таблица занимает 455px из 455
   (нулевой запас — длинный тикер или пятизначная цена сразу вылезают). */
@media (max-width:560px){
  .wkbody .mtbl-t{display:block;width:100%;font-size:.68rem}
  .wkbody .mtbl-t thead{display:none}
  .wkbody .mtbl-t tbody{display:block}
  .wkbody .mtbl-t tr{
    display:grid;grid-template-columns:max-content max-content max-content minmax(0,1fr) max-content;
    grid-template-areas:"t s side lg ex" "p p r pnl ex";
    gap:0 .5rem;padding:.32rem .05rem;
    border-bottom:1px solid var(--line-soft);
  }
  .wkbody .mtbl-t tr:last-child{border-bottom:0}
  .wkbody .mtbl-t td{
    display:block;border-bottom:0;padding:0;min-width:0;align-self:center;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  }
  .wkbody .mtbl-t td.t{grid-area:t}
  .wkbody .mtbl-t td.s{grid-area:s}
  .wkbody .mtbl-t td.side{grid-area:side}
  /* «нога» переезжает в первую строку (второго ряда у неё нет) */
  .wkbody .mtbl-t td.lg{grid-area:lg;display:block}
  .wkbody .mtbl-t td.p{grid-area:p;color:var(--dim)}
  .wkbody .mtbl-t td:nth-child(6){grid-area:r;text-align:left}
  .wkbody .mtbl-t td:nth-child(7){grid-area:pnl;text-align:right}
  /* причина остаётся за бортом: на телефоне это лишняя третья строка */
  .wkbody .mtbl-t td.w{display:none}
  /* глазик — в правом краю обеих строк (одна кнопка на всю высоту строки).
     На 320px кнопка и зазоры ужимаются: с прежними размерами «моментум.»
     в колонке ноги обрезался многоточием (ловит mob_check). */
  .wkbody .mtbl-t td.ex{grid-area:ex;display:flex;align-items:center;
    justify-content:flex-end;padding:0 0 0 .2rem}
  .wkbody .mtbl-t tr{gap:0 .35rem}
  .wkbody .mtbl-t .eye{width:1.25rem;height:1.25rem}
  .wkbody .mtbl-t .eye svg{width:11px;height:11px}
  /* пустое состояние: одна строка на всю ширину */
  .wkbody .mtbl-t td.none{grid-area:1/1/3/6;text-align:center;padding:.5rem 0}
}

/* ---- тултип к графику денег: на body, чтобы пережить перерисовку панели */
.mtip{
  position:fixed;z-index:80;display:none;
  min-width:16rem;max-width:42rem;
  background:var(--bg-deep);border:1px solid var(--line-hi);border-radius:var(--r);
  box-shadow:0 8px 24px rgba(0,0,0,.55);
  padding:.5rem .6rem;font-size:.72rem;color:var(--fg2);
  pointer-events:none;
}
.mtip .mt-h{
  display:flex;justify-content:space-between;gap:1rem;align-items:baseline;
  padding-bottom:.3rem;margin-bottom:.3rem;border-bottom:1px solid var(--line-soft);
  color:var(--fg);font-size:.76rem;
}
.mtip .mt-eq{color:var(--dim);font-variant-numeric:tabular-nums}
.mtip .mt-none{color:var(--dim2);font-size:.72rem}
.mtip .mt-sec{color:var(--dim2);font-size:.64rem;text-transform:uppercase;
  letter-spacing:.06em;margin:.35rem 0 .2rem}
.mtip .mt-r{
  display:grid;grid-template-columns:4.6rem 2.6rem 5.4rem 1fr auto;gap:.45rem;
  align-items:baseline;white-space:nowrap;line-height:1.35;
}
.mtip .mt-s{color:var(--fg)}
.mtip .mt-d{color:var(--dim)}
.mtip .mt-l{color:var(--dim2);font-size:.68rem}
.mtip .mt-p{color:var(--fg2);font-variant-numeric:tabular-nums}
.mtip .mt-t{color:var(--fg2);font-variant-numeric:tabular-nums;text-align:right}
.mtip .mt-t u{text-decoration:none;color:var(--dim2)}
.mtip .mt-t i{font-style:normal;color:var(--dim2);font-size:.68rem}
.mtip .mt-flow{margin-top:.35rem;padding-top:.3rem;border-top:1px solid var(--line-soft);
  color:var(--dim);font-size:.7rem}

/* ============================================================== warnings */.warnings{display:flex;flex-direction:column;gap:.45rem}
.warnings:empty{display:none}
.wn,.er{
  border:1px solid #463b22;border-left:2px solid var(--warn);
  background:#191710;color:var(--warn);
  font-size:.76rem;padding:.45rem .75rem;
}
.er{
  border-color:#4b3030;border-left-color:var(--dn);
  background:#181312;color:var(--dn);white-space:pre-wrap;
}

/* ================================================= верхняя пара (KPI + куратор)
   Две панели должны читаться как один блок: тянем их по одной высоте и
   отдаём тело куратора на растяжение (иначе правая панель короче левой). */
.grid2.eq{align-items:stretch}
.grid2.eq > .panel{display:flex;flex-direction:column;min-width:0;margin-bottom:0}
.grid2.eq > .panel > .curbody{flex:1}
/* KPI-ячейки делят высоту панели поровну — пустого «хвоста» под сеткой нет */
.grid2.eq > #p-kpi{display:flex;flex-direction:column}
.grid2.eq > #p-kpi > .kpis{flex:1;grid-auto-rows:1fr}
.grid2.eq > #p-kpi > .kpis > .kpi{display:flex;flex-direction:column;justify-content:center}
/* у KPI-панели нет шапки, поэтому верхняя линия сетки не нужна (иначе она
   дублирует рамку панели) */
.grid2.eq > #p-kpi > .kpis.nohead{border-top:0}

/* последний вердикт куратора на «Сейчас» (полная история — вкладка «Куратор») */
#p-cur .curbody{
  padding:.7rem 1rem .85rem;
  border-left:2px solid var(--line-hi);
  display:flex;flex-direction:column;gap:.45rem;
  min-width:0;
}
#p-cur .cur-ok{border-left-color:#3b5a46}
#p-cur .cur-warn{border-left-color:#6b5636;background:rgba(207,171,115,.035)}
#p-cur .cur-bad{border-left-color:#6e3d3d;background:rgba(217,138,138,.05)}
#p-cur .cur-top{display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap}
#p-cur .cur-top .sp{flex:1;min-width:.5rem;height:1px;background:var(--line-soft)}
#p-cur .rev-v{
  font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;
  border:1px solid var(--line-hi);border-radius:var(--r);
  padding:.06rem .38rem;color:var(--dim);
}
#p-cur .cur-ok .rev-v{color:var(--up);border-color:#33503d;background:var(--up-soft)}
#p-cur .cur-warn .rev-v{color:var(--warn);border-color:#4c3f27;background:var(--warn-soft)}
#p-cur .cur-bad .rev-v{color:var(--dn);border-color:#5a3535;background:var(--dn-soft)}
#p-cur .rev-chg{
  font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;
  color:var(--info);border:1px solid #2f4356;border-radius:var(--r);
  padding:.06rem .38rem;background:rgba(149,171,193,.09);
}
#p-cur .rev-t{font-size:.7rem;color:var(--dim2)}
#p-cur .cur-txt{
  font-size:.82rem;line-height:1.62;color:var(--fg2);max-width:118ch;
}
/* вердикт куратора на «Сейчас»: те же правила, что на вкладке «Куратор» —
   абзацы (revFmt склеивает переносы строки), воздух между ними ≈ полстроки */
#p-cur .cur-txt p{margin:.6rem 0}
#p-cur .cur-txt p:first-child{margin-top:0}
#p-cur .cur-txt p:last-child{margin-bottom:0}
#p-cur .cur-txt ul{margin:.5rem 0;padding-left:1.05rem}
#p-cur .cur-txt li{margin:.2rem 0}
#p-cur .cur-txt li:first-child{margin-top:0}
#p-cur .cur-txt li:last-child{margin-bottom:0}
#p-cur .cur-txt code{
  font-size:.9em;color:var(--fg);background:var(--bg-deep);
  padding:0 .25em;border:1px solid var(--line-soft);
}
/* Длинный URL в вердикте (например текст ошибки провайдера вида
   https://polza.ai/api/v1/chat/completions) не должен вылезать за панель:
   на 320px он раздвигал документ до 369px и рвал вёрстку «Сейчас». */
#p-cur .cur-txt,
#p-cur .cur-txt p,
#p-cur .cur-txt li,
#p-cur .cur-txt code{overflow-wrap:anywhere;word-wrap:break-word}
#p-cur .cur-foot{border-top:1px solid var(--line-soft);padding:.45rem 1rem .5rem}

/* ================================================= график сделки (клик по ней)
   Карточка открытой сделки стала кнопкой: клик разворачивает под списком
   свечной график (панель #p-candle), повторный клик — сворачивает.
   Классы кнопок СВОИ (.cseg-b), а не .dseg-b: чужие контролы переиспользовать
   нельзя — тесты считают кнопки глубины графика денег по .dseg-b. */
.pos[data-sym]{cursor:pointer}
.pos[data-sym]:hover{background:var(--panel-hi)}
.pos.on{background:var(--panel-hi);box-shadow:inset 2px 0 0 #3d5a49}
.pos-caret{display:inline-block;width:.8rem;color:var(--dim2);font-size:.7rem}
.pos.on .pos-caret{color:var(--up)}
.cseg{display:inline-flex;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.cseg-b{
  background:transparent;border:0;border-left:1px solid var(--line);
  color:var(--dim);cursor:pointer;font-family:inherit;font-size:.68rem;
  letter-spacing:.04em;padding:.2rem .5rem;min-width:2.1rem;
}
.cseg-b:first-child{border-left:0}
.cseg-b:hover{color:var(--fg);background:var(--bg-deep)}
.cseg-b.on{color:var(--fg);background:var(--up-soft);box-shadow:inset 0 -1px 0 #3d5a49}
.cseg-b.wait{color:var(--dim2);animation:dsegWait 1s linear infinite alternate}
.candbody{padding:0 0 .1rem}
/* блок свечей стоит ПРЯМО ПОД карточкой сделки: отбиваем его линией и
   чуть уводим фон в глубину, чтобы читалось как «раскрытая» карточка */
.cposchart{padding:.1rem .9rem .75rem;background:#151817;border-bottom:1px solid var(--line-soft)}
.cand-head{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;padding:.45rem 0 .4rem}
.cand-t{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim2)}
.cand-n{font-size:.72rem;color:var(--fg2)}
.candsum{
  display:flex;gap:1.4rem;flex-wrap:wrap;
  font-size:.74rem;color:var(--dim);margin-bottom:.5rem;
}
.candsum b{font-weight:400;color:var(--fg)}
.candplot{position:relative;cursor:crosshair}
svg.chart-svg.cand{max-height:none}

::-webkit-scrollbar{height:9px;width:9px}
::-webkit-scrollbar-thumb{background:#242a27}
::-webkit-scrollbar-track{background:var(--bg-deep)}

/* ============================== глазик «свечи сделки» (в таблице под кривой)
   Владелец (2026-10-30): у закрытых сделок в таблице — кнопка с глазиком,
   клик открывает поп-ап со свечами этой сделки (вход + выход).
   Колонка ПОСЛЕДНЯЯ (девятая): индексы остальных ячеек держат chrome-тесты
   (deals_check считает PnL по td[6], причину по td[7]) — двигать нельзя. */
.wkbody .mtbl-t th.c-ex{width:1.9rem}
.wkbody .mtbl-t td.ex{padding:.1rem 0 .1rem .2rem;text-align:right}
.wkbody .mtbl-t .eye{
  display:inline-flex;align-items:center;justify-content:center;
  width:1.55rem;height:1.55rem;padding:0;line-height:1;
  border:1px solid var(--line);border-radius:var(--r);background:transparent;
  color:var(--dim2);cursor:pointer;font-family:inherit;
}
.wkbody .mtbl-t .eye:hover{
  color:var(--fg);border-color:var(--line-hi);background:var(--bg-deep);
}
.wkbody .mtbl-t .eye:active{background:var(--panel-hi)}
.wkbody .mtbl-t .eye svg{display:block}

/* ================================= поп-ап «свечи сделки» (вход → выход)
   Окно поверх страницы: затемнение + карточка по центру. График рисуется в
   пиксель от ширины .dlg-plot (как и остальные svg), поэтому «письма в
   рамке» тут быть не может. */
.dlg{position:fixed;inset:0;z-index:90;display:flex;align-items:center;
  justify-content:center;padding:1rem}
.dlg[hidden]{display:none}
.dlg-mask{position:absolute;inset:0;background:rgba(8,10,9,.74)}
.dlg-box{
  position:relative;width:min(1180px,96vw);max-height:92vh;overflow:auto;
  background:var(--panel);border:1px solid var(--line-hi);border-radius:var(--r);
  box-shadow:0 18px 48px rgba(0,0,0,.62);padding:.7rem .9rem .85rem;
}
.dlg-h{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;
  padding-bottom:.4rem;border-bottom:1px solid var(--line-soft)}
.dlg-t{font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim2)}
.dlg-n{font-size:.74rem;color:var(--fg2)}
.dlg-sum{display:flex;gap:1.3rem;flex-wrap:wrap;font-size:.74rem;color:var(--dim);
  padding:.45rem 0 .5rem}
.dlg-sum b{font-weight:400;color:var(--fg)}
.dlg-sum b.up{color:var(--up)}
.dlg-sum b.dn{color:var(--dn)}
.dlg-plot{position:relative;cursor:crosshair;min-height:120px}
.dlg-plot .empty{padding:2.4rem 0;text-align:center;color:var(--dim2);font-size:.76rem}
svg.chart-svg.cand.deal{max-height:none}
@media (max-width:560px){
  .dlg{padding:.4rem}
  .dlg-box{width:100%;max-height:94vh;padding:.5rem .6rem .7rem}
  .dlg-sum{gap:.8rem;font-size:.7rem}
  /* на телефоне крестик уезжает в правый верхний угол: иначе он падал
     отдельной третьей строкой и съедал высоту у графика */
  .dlg-box{position:relative;padding-right:2.1rem}
  .dlg-h{padding-right:0;flex-wrap:wrap}
  .dlg-h .sect-r{display:none}
  .dlg-h .dlg-t{display:none}
  .dlg-h [data-dlg="close"]{position:absolute;top:.45rem;right:.45rem}
}

/* ============================================================= дисклеймер */
/* Юридическая сноска внизу «Сейчас»: БЕЗ подписи и плашки — просто мелкий
   серый текст во всю ширину, по центру (владелец, 01.11.2026). Узел
   статический (index.html), поллинг его не перерисовывает. */
.discl{margin:1.6rem 0 .2rem;padding:0}
.discl p{
  margin:0;font-size:.72rem;line-height:1.6;color:var(--dim);
  text-align:center;
}
/* Та же сноска ВНУТРИ блока сигналов (#p-signals, собирается в app.js).
   Отделена волосяной линией от карточек — иначе читается как ещё один
   сигнал; сама подпись так же: мелкий серый по центру, без ярлыка. */
.discl-in{
  margin:0;padding:.75rem 1rem .8rem;
  border-top:1px solid var(--line-soft);
  font-size:.7rem;line-height:1.6;color:var(--dim);
  text-align:center;
}
@media (max-width:560px){
  .discl{margin-top:1.2rem}
  .discl p,.discl-in{font-size:.7rem;line-height:1.55}
  .discl-in{padding:.6rem .75rem .65rem}
}

