.copy-name-btn {
  position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px;
  background: none; border: none; padding: 0;
  color: var(--eve-text-dim); cursor: pointer;
  flex-shrink: 0;
}
.copy-name-btn:hover { color: var(--eve-accent); }
.copy-name-btn::after {
  content: attr(data-tooltip);
  position: absolute; bottom: calc(100% + 6px); left: 50%;
  transform: translateX(-50%);
  background: #050810; border: 1px solid var(--eve-border);
  color: var(--eve-text); font-size: 0.72rem; white-space: nowrap;
  padding: 4px 8px; border-radius: 3px;
  opacity: 0; pointer-events: none;
  transition: opacity 0.12s;
}
.copy-name-btn:hover::after { opacity: 1; }
.copy-name-btn .icon-check { display: none; color: var(--eve-green); }
.copy-name-btn.copied .icon-copy { display: none; }
.copy-name-btn.copied .icon-check { display: inline-flex; }

.chart-box {
  position: relative;
  width: 100%;
  height: 320px;
}
.chart-toolbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 14px;
}
.chart-metric-switch {
  display: inline-flex;
  background: var(--eve-bg);
  border: 1px solid var(--eve-border);
  border-radius: 3px;
  overflow: hidden;
}
.metric-btn {
  background: transparent;
  color: var(--eve-text-dim);
  border: none;
  padding: 5px 14px;
  font-family: var(--font-main);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 1px;
  text-transform: uppercase;
  cursor: pointer;
  transition: all 0.15s;
  border-right: 1px solid var(--eve-border);
}
.metric-btn:last-child { border-right: none; }
.metric-btn:hover { color: var(--eve-accent); background: var(--eve-highlight); }
.metric-btn.active {
  background: var(--eve-accent-dim);
  color: var(--eve-accent);
}
.chart-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  font-family: var(--font-mono);
  font-size: 0.75rem;
}
.chart-legend .leg {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  user-select: none;
  padding: 3px 6px;
  border-radius: 2px;
  transition: all 0.15s;
}
.chart-legend .leg:hover { background: var(--eve-highlight); }
.chart-legend .leg.hidden { opacity: 0.35; }
.chart-legend .dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  display: inline-block;
}

/* ─── Technical analysis toolbar (SMA / RSI / S-R / spikes) ─── */
.ta-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 8px 0 14px 0;
  padding: 8px 10px;
  background: var(--eve-bg);
  border: 1px solid var(--eve-border);
  border-radius: 3px;
  align-items: center;
}
.ta-toolbar-label {
  font-family: var(--font-main);
  font-size: 0.7rem;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--eve-text-dim);
  margin-right: 6px;
}
.ta-toggle {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  background: transparent;
  border: 1px solid var(--eve-border);
  border-radius: 3px;
  color: var(--eve-text-dim);
  font-family: var(--font-mono);
  font-size: 0.78rem;
  cursor: pointer;
  user-select: none;
  transition: all 0.15s;
}
.ta-toggle:hover { border-color: var(--eve-accent); color: var(--eve-text); }
.ta-toggle.active {
  background: var(--eve-accent-dim);
  border-color: var(--eve-accent);
  color: var(--eve-accent);
}
.ta-toggle.locked { cursor: not-allowed; opacity: 0.55; }
.ta-toggle.locked:hover { border-color: var(--eve-border); color: var(--eve-text-dim); }
.ta-toggle .lock-icon { font-size: 0.72rem; }
.ta-help-link {
  margin-left: auto;
  padding: 4px 10px;
  color: var(--eve-text-dim);
  font-family: var(--font-mono);
  font-size: 0.76rem;
  text-decoration: none;
  border: 1px dashed var(--eve-border);
  border-radius: 3px;
  transition: all 0.15s;
}
.ta-help-link:hover {
  color: var(--eve-accent);
  border-color: var(--eve-accent);
}
.ta-toggle.loading {
  position: relative;
  padding-right: 24px;
}
.ta-toggle.loading::after {
  content: "";
  position: absolute;
  right: 8px;
  top: 50%;
  margin-top: -4px;
  width: 8px; height: 8px;
  border: 2px solid var(--eve-accent);
  border-top-color: transparent;
  border-radius: 50%;
  animation: ta-spin 0.8s linear infinite;
}
@keyframes ta-spin { to { transform: rotate(360deg); } }

/* RSI sub-chart с пунктирами на 30/70 */
.rsi-box {
  position: relative;
  width: 100%;
  height: 140px;
  margin-top: 10px;
  display: none;
}
.rsi-box.visible { display: block; }
.rsi-caption {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  color: var(--eve-text-dim);
  margin: 6px 0 4px;
}

/* форма создания ценового алерта */

.alert-input { width:100%;box-sizing:border-box;margin-top:5px;background:#06090f;
  border:1px solid var(--eve-border);border-radius:3px;color:var(--eve-text);
  padding:8px 10px;font-family:var(--font-mono);font-size:0.9rem;outline:none; }
.alert-input:focus { border-color:var(--eve-accent); }

/* ─── Переключатель периода графика ──────────────────────────────────────
   Ссылки, а не кнопки: за пределами горячего окна данные лежат в Postgres,
   и смена периода — это запрос на сервер, а не пересборка уже отданного
   пейлоада. Вид повторяет .metric-btn, чтобы две группы в одной панели
   не выглядели из разных эпох. */
.chart-periods {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
  font-size: 0.78rem;
}
.chart-periods a {
  padding: 3px 10px;
  border: 1px solid var(--eve-border);
  border-radius: 3px;
  color: var(--eve-text-dim);
  text-decoration: none;
  letter-spacing: 1px;
  text-transform: uppercase;
  font-weight: 600;
  transition: all 0.15s;
}
.chart-periods a:hover { color: var(--eve-accent); background: var(--eve-highlight); }
.chart-periods a.active {
  background: var(--eve-accent-dim);
  color: var(--eve-accent);
  border-color: var(--eve-accent-dim);
}

/* ─── Историческая позиция цены (колонка «Год») ─── */
/* Полосы-индикатора намеренно нет: она потребовала бы инлайнового
   style="width:N%", а инлайновые стили — то единственное, что держит
   'unsafe-inline' в style-src CSP (481 атрибут на весь проект, счётчик и
   так растёт сам собой). Числа с цветом читаются в плотной таблице не
   хуже, а диапазон за год отдаёт title. */
.pp-th { text-align: right; padding: 6px 8px; color: var(--eve-text-dim);
         font-size: 0.7rem; letter-spacing: 1px;
         border-bottom: 1px solid var(--eve-border); white-space: nowrap; }
.pp-cell { padding: 6px 8px; text-align: right; font-family: var(--font-mono); }
.pp-num { cursor: help; border-bottom: 1px dotted currentColor; }
/* Дёшево относительно года — зелёный: сигнал «покупать». Дорого — красный.
   Те же цвета, что у прибыли и убытка в остальных таблицах, чтобы
   значение читалось без легенды. */
.pp-low  { color: var(--eve-green); }
.pp-mid  { color: var(--eve-text-dim); }
.pp-high { color: var(--eve-red); }

/* ─── Обёртка таблицы лучших цен ─── */
/* Раньше здесь стоял инлайновый overflow-x:auto, и он ОБРЕЗАЛ ПОДСКАЗКУ «?»
   в заголовке. Причина неочевидная: `overflow-x: auto` при `overflow-y:
   visible` по спецификации превращает и вертикальную ось в `auto` — одну
   ось оставить видимой нельзя. Обёртка становится скролл-контейнером и
   режет всё, что вылезает вниз.
   
   Почему видно только здесь, а на station trading нет: там таблица длинная,
   и выпадающая подсказка ложится поверх строк, оставаясь внутри контейнера.
   Эта таблица короткая — четыре хаба, — и подсказке падать некуда.

   Лечим не увеличением высоты (это оставило бы постоянную дыру под короткой
   таблицей), а тем, что на широком экране обрезки просто нет: шесть колонок
   спокойно помещаются в контейнер карточки на 900px. Скролл включается
   только там, где он действительно нужен, и туда же добавлен запас снизу —
   иначе на узком экране подсказка обрезалась бы снова. */
.bp-wrap { overflow: visible; }

@media (max-width: 720px) {
  .bp-wrap { overflow-x: auto; padding-bottom: 90px; }
}

/* ─── Глубина стакана в цифрах ─── */
.ob-depth {
  border: 1px solid var(--eve-border);
  border-radius: 6px;
  padding: 9px 12px;
  margin-bottom: 14px;
  font-size: 0.78rem;
}
.obd-row {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 6px 14px;
  margin-bottom: 5px;
}
.obd-label {
  font-size: 0.7rem;
  letter-spacing: 1px;
  text-transform: uppercase;
  min-width: 108px;
}
/* Цвета по стороне книги, из которой берут: покупаешь из asks (красные),
   продаёшь в bids (зелёные) — так же, как раскрашены сами лестницы ниже,
   иначе строки читались бы вразрез с таблицами под ними. */
.obd-buy  { color: var(--eve-red); }
.obd-sell { color: var(--eve-green); }
.obd-band { display: inline-flex; gap: 5px; align-items: baseline; cursor: help; }
.obd-pct {
  font-family: var(--font-mono);
  color: var(--eve-text-dim);
  font-size: 0.72rem;
}
.obd-units { font-family: var(--font-mono); color: var(--eve-text); }
.obd-note {
  color: var(--eve-text-dim);
  font-size: 0.7rem;
  margin-top: 6px;
  line-height: 1.35;
}
@media (max-width: 600px) {
  .obd-label { min-width: 100%; }
}

/* ─── Кнопка «следить» ─── */
.watch-wrap { display: inline-flex; align-items: center; }
/* Скрытая форма нужна только ради csrf-токена — места занимать не должна. */
.watch-csrf { display: none; }
.watch-btn.is-watching { color: var(--eve-gold); border-color: var(--eve-gold); }
.watch-btn.is-watching svg { fill: currentColor; }
.watch-btn.watch-error { color: var(--eve-red); border-color: var(--eve-red); }
.watch-btn[disabled] { opacity: 0.5; cursor: default; }
/* В шапке кнопка стоит рядом с копированием имени, а не в панели графика:
   там она была бы скрыта у предметов без истории. Поэтому свой размер, а не
   .ta-help-link из панели теханализа. */
.watch-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: transparent;
  border: 1px solid var(--eve-border);
  border-radius: 3px;
  padding: 3px 9px;
  color: var(--eve-text-dim);
  font-family: var(--font-main);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  cursor: pointer;
  transition: all 0.15s;
}
.watch-btn:hover { color: var(--eve-gold); border-color: var(--eve-gold); }
