/* Чё Почём - дизайн-система.
   Метафора: рыночный ценник и табло уценки. Цена падает - это буквально суть аукциона.
   Палитра: синяя рабочая спецовка + сигнальный красный маркер уценки + зелёный чек.
   Шрифты: Oswald (трафаретный дисплей, как надпись на ценнике), Golos Text (текст),
   JetBrains Mono (цены, таймеры, id). */

:root {
  --paper:      #FAFAF7;
  --card:       #FFFFFF;
  --ink:        #10151C;
  --ink-soft:   #55606E;
  --line:       #E2E5EA;
  --robe:       #1B3A6B;   /* синяя спецовка - основной */
  --robe-dark:  #12294C;
  --mark:       #E8362A;   /* красный маркер уценки - сигнал, только на цене и срочном */
  --mark-soft:  #FDECEA;
  --check:      #0E8A5F;   /* деньги пришли */
  --check-soft: #E7F4EE;
  --warn:       #B4700A;
  --warn-soft:  #FDF3E0;
  --tag:        #FFD84D;   /* бумага ценника */
  --radius: 4px;
  --shadow: 0 1px 2px rgba(16,21,28,.06), 0 8px 24px rgba(16,21,28,.06);
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font: 400 16px/1.55 'Golos Text', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
}
img { max-width: 100%; display: block; }
a { color: var(--robe); text-decoration-thickness: 1px; text-underline-offset: 2px; }

h1, h2, h3, .display {
  font-family: 'Oswald', 'Golos Text', system-ui, sans-serif;
  font-weight: 600;
  letter-spacing: .01em;
  line-height: 1.05;
  margin: 0 0 .5em;
  text-transform: uppercase;
}
h1 { font-size: clamp(34px, 7vw, 68px); }
h2 { font-size: clamp(24px, 4vw, 38px); }
h3 { font-size: 19px; letter-spacing: .03em; }
p { margin: 0 0 1em; }
.lead { font-size: clamp(17px, 2.2vw, 21px); color: var(--ink-soft); max-width: 54ch; }
.num { font-family: 'JetBrains Mono', ui-monospace, Menlo, Consolas, monospace; font-variant-numeric: tabular-nums; }

.wrap { max-width: 1120px; margin: 0 auto; padding: 0 20px; }
.stack > * + * { margin-top: 14px; }
.muted { color: var(--ink-soft); }
.small { font-size: 13.5px; }
.center { text-align: center; }

/* ---------- шапка ---------- */
.top {
  position: sticky; top: 0; z-index: 40;
  background: rgba(250,250,247,.92);
  backdrop-filter: saturate(1.4) blur(8px);
  border-bottom: 1px solid var(--line);
}
.top-in { display: flex; align-items: center; gap: 16px; height: 60px; }
.logo {
  font-family: 'Oswald', sans-serif; font-weight: 700; font-size: 21px;
  letter-spacing: .06em; text-transform: uppercase; color: var(--ink);
  text-decoration: none; display: inline-flex; align-items: center; gap: 8px;
}
.logo b { color: var(--mark); font-weight: 700; }
.top nav { margin-left: auto; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.top nav a { color: var(--ink-soft); text-decoration: none; padding: 8px 10px; border-radius: var(--radius); font-size: 15px; }
.top nav a:hover { background: #EEF0F4; color: var(--ink); }
.top nav a.on { color: var(--ink); background: #EAEEF5; font-weight: 500; }

/* ---------- кнопки ---------- */
/* Кнопки. Форма скруглённая, как на лендинге и в оболочке: раньше здесь были прямые
   углы старой вёрстки, и половина сайта выглядела из другой эпохи. */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  font: 600 15px/1 'Golos Text', sans-serif;
  min-height: 44px; padding: 0 20px; border-radius: 999px; border: 1.5px solid transparent;
  background: var(--ink); color: #fff; cursor: pointer; text-decoration: none;
  white-space: nowrap;
  transition: transform .14s ease, background .16s ease, box-shadow .16s ease,
              border-color .16s ease, color .16s ease;
}
.btn:hover { background: #232C38; transform: translateY(-1px);
             box-shadow: 0 8px 20px rgba(16, 21, 28, .22); }
.btn:active { transform: translateY(0); box-shadow: none; }
.btn:focus-visible { outline: 3px solid rgba(16, 21, 28, .3); outline-offset: 2px; }

/* Правило на весь сервис, чтобы кнопки не спорили цветами:
   тёмная - обычное действие, жёлтая - действие с деньгами (одна на экран),
   красная - только то, что ломает или отменяет, контурная - второстепенное. */

.btn.ghost { background: transparent; color: var(--ink); border-color: var(--line); }
.btn.ghost:hover { background: #fff; border-color: var(--ink); color: var(--ink);
                   box-shadow: 0 6px 16px rgba(16, 21, 28, .1); }

.btn.mark { background: var(--mark); }
.btn.mark:hover { background: #C82A20; box-shadow: 0 8px 20px rgba(232, 54, 42, .28); }

/* Жёлтая: для главного денежного действия, той же бумаги, что ценник */
.btn.tag { background: var(--tag); color: var(--ink); }
.btn.tag:hover { background: #FFD01F; box-shadow: 0 8px 20px rgba(255, 216, 77, .4); }

.btn.big { min-height: 52px; padding: 0 28px; font-size: 16.5px; }
.btn.sm { min-height: 36px; padding: 0 14px; font-size: 13.5px; border-radius: 999px; }
.btn[disabled], .btn.off { opacity: .45; pointer-events: none; box-shadow: none; }

@media (prefers-reduced-motion: reduce) {
  .btn, .btn:hover { transform: none; transition: background .16s ease; }
}
:focus-visible { outline: 3px solid var(--robe); outline-offset: 2px; }

/* ---------- ценник: сигнатурный элемент ---------- */
.tag {
  position: relative;
  background: var(--tag);
  border: 1px solid #E0B920;
  border-radius: 6px 6px 6px 22px;
  padding: 18px 20px 16px 20px;
  box-shadow: var(--shadow);
}
.tag::before { /* дырка под шнурок */
  content: ''; position: absolute; left: 14px; bottom: 12px;
  width: 12px; height: 12px; border-radius: 50%;
  background: var(--paper); border: 1px solid #E0B920;
}
.tag .tag-cat { font: 500 12px/1 'Golos Text', sans-serif; letter-spacing: .14em; text-transform: uppercase; color: #7A5E00; }
.tag .tag-price { font-family: 'JetBrains Mono', monospace; font-weight: 700; font-size: clamp(40px, 9vw, 64px); line-height: 1; color: var(--ink); font-variant-numeric: tabular-nums; }
.tag .tag-price small { font-size: .38em; font-weight: 500; margin-left: 6px; }
.tag .tag-was { font-family: 'JetBrains Mono', monospace; font-size: 15px; color: #8A6E12; text-decoration: line-through; }
.tag .tag-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; padding-left: 34px; font-size: 13px; color: #6A5200; }
.ticking { animation: nudge .5s ease; }
@keyframes nudge { 0% { transform: translateY(-3px); } 100% { transform: none; } }

/* ---------- карточки, таблицы ---------- */
.card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 18px;
        box-shadow: 0 1px 2px rgba(16,21,28,.04), 0 8px 20px -14px rgba(16,21,28,.12); }
/* Запасная раскладка для .kpis без явного .g2-.g6 - определена раньше них в каскаде,
   поэтому там, где .kpis используется вместе с .g4/.g5, побеждают их колонки. */
.kpis { display: grid; gap: 16px; grid-template-columns: repeat(3, minmax(0,1fr)); }
@media (max-width: 860px) { .kpis { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 560px) { .kpis { grid-template-columns: 1fr; } }
.grid { display: grid; gap: 16px; }
.g2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.g3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
.g4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
.g5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
.g6 { grid-template-columns: repeat(6, minmax(0,1fr)); }

.kpi { background: var(--card); border: 1px solid var(--line); border-left: 3px solid var(--line);
       border-radius: var(--radius); padding: 16px 18px;
       box-shadow: 0 1px 2px rgba(16,21,28,.04), 0 8px 20px -14px rgba(16,21,28,.12);
       transition: transform .12s ease, box-shadow .12s ease; }
.kpi:hover { transform: translateY(-1px); box-shadow: 0 4px 8px rgba(16,21,28,.06), 0 14px 28px -16px rgba(16,21,28,.18); }
.kpi .k { font-size: 12.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft); }
.kpi .v { font-family: 'JetBrains Mono', monospace; font-size: 30px; font-weight: 700; line-height: 1.2; margin-top: 4px; }
/* Смысловой цвет по краю плитки - не для декора, а чтобы дашборд читался с одного взгляда,
   без перечитывания подписей: синий - объём, зелёный - деньги/успех, красный - потери. */
.kpi.ac-blue { border-left-color: var(--robe); }
.kpi.ac-green { border-left-color: var(--check); }
.kpi.ac-red { border-left-color: var(--mark); }
.kpi.ac-gold { border-left-color: var(--tag); }

table.t { width: 100%; border-collapse: collapse; font-size: 15px; background: var(--card); }
table.t th { text-align: left; font: 500 12.5px/1 'Golos Text', sans-serif; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft); padding: 12px 14px; border-bottom: 1px solid var(--line); white-space: nowrap; }
table.t td { padding: 13px 14px; border-bottom: 1px solid var(--line); vertical-align: top; }
table.t tr:hover td { background: #FBFBF9; }
.tscroll { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); }

.pill { display: inline-block; font: 500 12px/1 'Golos Text', sans-serif; letter-spacing: .06em; text-transform: uppercase; padding: 5px 9px; border-radius: 99px; background: #EEF0F4; color: var(--ink-soft); }
.pill.now { background: var(--mark-soft); color: var(--mark); }
.pill.ok { background: var(--check-soft); color: var(--check); }
.pill.warn { background: var(--warn-soft); color: var(--warn); }

/* ---------- «Где есть деньги» - карта готовности городов ---------- */
.mm-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px; }
.mm-card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
           padding: 14px 16px; box-shadow: 0 1px 2px rgba(16,21,28,.04), 0 8px 20px -14px rgba(16,21,28,.12); }
.mm-card.mm-dim { opacity: .6; }
.mm-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.mm-top b { font-size: 15.5px; }
.mm-nums { font-family: 'JetBrains Mono', monospace; font-weight: 700; font-size: 15px; white-space: nowrap; }
.mm-ready-n { color: var(--check); }
.mm-not-n { color: var(--ink-soft); font-weight: 500; font-size: 13px; margin-left: 3px; }
.mm-bar { margin-top: 8px; height: 6px; border-radius: 99px; background: var(--line); overflow: hidden; }
.mm-fill { display: block; height: 100%; background: var(--check); border-radius: 99px; }
.mm-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }

/* ---------- формы ---------- */
label { display: block; font-size: 13.5px; font-weight: 500; margin-bottom: 5px; }
input[type=text], input[type=tel], input[type=number], input[type=datetime-local], select, textarea {
  width: 100%; padding: 11px 12px; font: 400 16px/1.4 'Golos Text', sans-serif;
  border: 1px solid #CFD5DE; border-radius: var(--radius); background: #fff; color: var(--ink);
}
textarea { min-height: 96px; resize: vertical; }
input:focus, select:focus, textarea:focus { border-color: var(--robe); outline: 2px solid rgba(27,58,107,.15); outline-offset: 0; }
.field + .field { margin-top: 14px; }
.hint { font-size: 13px; color: var(--ink-soft); margin-top: 5px; }
.code-input { font-family: 'JetBrains Mono', monospace; font-size: 30px; letter-spacing: .3em; text-align: center; }

.msg { padding: 12px 14px; border-radius: var(--radius); font-size: 15px; margin-bottom: 16px; }
.msg.err { background: var(--mark-soft); color: #9A2118; border: 1px solid #F5C4BF; }
.msg.ok { background: var(--check-soft); color: #0A6647; border: 1px solid #BFE3D3; }
.msg.info { background: #EEF2F8; color: var(--robe-dark); border: 1px solid #D3DEEE; }
.msg.warn { background: var(--warn-soft); color: #7A4C06; border: 1px solid #EFD79A; }

/* ---------- лендинг ---------- */
.hero { padding: 56px 0 40px; }
.hero-grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: 44px; align-items: center; }
.eyebrow { font: 500 12.5px/1 'Golos Text', sans-serif; letter-spacing: .16em; text-transform: uppercase; color: var(--mark); margin-bottom: 14px; }
.hero h1 span { color: var(--mark); }
.hero-cta { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 26px; }

.ticker { border-block: 1px solid var(--line); background: var(--robe); color: #fff; overflow: hidden; }
.ticker-in { display: flex; gap: 40px; white-space: nowrap; padding: 11px 0; animation: slide 38s linear infinite; font-size: 14px; letter-spacing: .04em; }
.ticker-in span b { color: var(--tag); font-weight: 600; }
@keyframes slide { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) {
  .ticker-in { animation: none; }
  .ticking { animation: none; }
}

.sec { padding: 56px 0; border-top: 1px solid var(--line); }
.sec-head { max-width: 62ch; margin-bottom: 30px; }
.step { border-left: 3px solid var(--robe); padding-left: 18px; }
.step .n { font-family: 'JetBrains Mono', monospace; font-size: 13px; color: var(--mark); font-weight: 700; letter-spacing: .1em; }

.plan { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 22px; display: flex; flex-direction: column; }
.plan.pick { border-color: var(--robe); box-shadow: 0 0 0 3px rgba(27,58,107,.08); }
.plan .p-name { font-family: 'Oswald', sans-serif; text-transform: uppercase; font-size: 20px; letter-spacing: .04em; }
.plan .p-price { font-family: 'JetBrains Mono', monospace; font-size: 30px; font-weight: 700; margin: 6px 0 14px; }
.plan ul { list-style: none; margin: 0 0 18px; padding: 0; font-size: 15px; }
.plan li { padding: 7px 0 7px 22px; position: relative; border-top: 1px solid var(--line); }
.plan li::before { content: ''; position: absolute; left: 2px; top: 15px; width: 8px; height: 8px; background: var(--robe); border-radius: 50%; }
.plan li.no { color: var(--ink-soft); }
.plan li.no::before { background: #C9CFD8; }
.plan .p-foot { margin-top: auto; }

.foot { padding: 34px 0; border-top: 1px solid var(--line); color: var(--ink-soft); font-size: 14px; }

/* ---------- кабинет ---------- */
/* Только вертикальные отступы: горизонтальные приходят от .wrap, а сокращённая
   запись padding их обнуляла и контент лип к краям экрана. */
.page { padding-top: 26px; padding-bottom: 60px; }
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 22px; }
.page-head h1 { font-size: clamp(26px, 4vw, 36px); margin: 0; }
.wallet { display: inline-flex; align-items: baseline; gap: 8px; font-family: 'JetBrains Mono', monospace; }
.wallet b { font-size: 22px; }

.order { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px 18px; display: grid; grid-template-columns: 1fr auto; gap: 16px; align-items: center; }
.order.urgent { border-left: 4px solid var(--mark); }
.order h3 { margin: 0 0 4px; text-transform: none; font-family: 'Golos Text', sans-serif; font-weight: 600; font-size: 17px; letter-spacing: 0; }
.order .meta { font-size: 14px; color: var(--ink-soft); }
.order .price { text-align: right; }
.order .price .p { font-family: 'JetBrains Mono', monospace; font-size: 26px; font-weight: 700; }
.order .price .drop { font-size: 12px; color: var(--mark); }

.empty { text-align: center; padding: 60px 20px; border: 1px dashed #CFD5DE; border-radius: var(--radius); color: var(--ink-soft); }
.empty h3 { color: var(--ink); }

/* Тонкая настройка цены: обычно не нужна, поэтому свёрнута */
.tune { border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; background: #FBFBF9;
        box-shadow: 0 1px 2px rgba(16,21,28,.03); }
.tune summary { cursor: pointer; font-size: 14px; font-weight: 500; color: var(--robe);
                display: flex; align-items: center; gap: 8px; list-style: none; }
.tune summary::-webkit-details-marker { display: none; }
.tune summary::after {
  content: ''; width: 8px; height: 8px; margin-left: auto;
  border-right: 1.6px solid var(--robe); border-bottom: 1.6px solid var(--robe);
  transform: rotate(45deg); transition: transform .15s ease; flex: none;
}
.tune[open] summary::after { transform: rotate(-135deg); }
.tune[open] summary { margin-bottom: 4px; }
.tune:hover { border-color: #C9D0DA; }

/* Настраиваемые колонки таблицы заказов: скрытая колонка не рвёт вёрстку заголовка,
   просто пропадает из потока - и в <th>, и в <td> одинаково, по общему атрибуту. */
[data-col].hidden-col { display: none; }
select option:disabled { color: #A6AEBA; }

/* ---------- звёзды и плашки ---------- */
.stars { display: inline-flex; gap: 1px; vertical-align: -1px; }
.stars i { font-style: normal; color: #D8DDE4; font-size: 15px; line-height: 1; }
.stars i.on { color: #E8A317; }
.who-badge { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

/* Выбор оценки: пять звёзд, закрашиваются слева направо при наведении.
   Порядок в разметке обратный, чтобы работал соседний селектор. */
.rate { display: inline-flex; flex-direction: row-reverse; gap: 2px; }
.rate input { position: absolute; opacity: 0; width: 0; height: 0; }
.rate label {
  font-size: 30px; line-height: 1; color: #D8DDE4; cursor: pointer; margin: 0;
  transition: color .12s ease, transform .12s ease;
}
.rate label:hover, .rate label:hover ~ label,
.rate input:checked ~ label { color: #E8A317; }
.rate label:hover { transform: scale(1.12); }
.rate input:focus-visible + label { outline: 2px solid var(--robe); outline-offset: 2px; }

/* ---------- запечатанная гарантия ---------- */
/* Прилетает сверху и мягко пульсирует, пока её не открыли: содержимое скрыто,
   мастер должен сознательно нажать, а не пробежать глазами. */
.sealed {
  display: grid; grid-template-columns: 1fr auto; gap: 4px 16px; align-items: center;
  text-decoration: none; color: #fff; padding: 18px 20px; border-radius: var(--radius);
  background: linear-gradient(135deg, var(--mark) 0%, #B4271D 100%);
  box-shadow: 0 6px 22px rgba(232, 54, 42, .28);
  animation: seal-in .45s cubic-bezier(.2, .9, .3, 1.2) both, seal-pulse 2.6s ease-in-out .6s infinite;
  position: relative; overflow: hidden;
}
.sealed::after { /* блик, пробегающий по карточке */
  content: ''; position: absolute; inset: 0 auto 0 -60%; width: 45%;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.22), transparent);
  animation: seal-shine 3.2s ease-in-out 1s infinite;
}
.sealed:hover { box-shadow: 0 8px 26px rgba(232, 54, 42, .38); }
.sealed.opened {
  background: var(--card); color: var(--ink);
  border: 1px solid var(--line); box-shadow: none; animation: seal-in .35s ease both;
}
.sealed.opened::after { display: none; }
.seal-badge {
  grid-column: 1; font: 600 11px/1 'Golos Text', sans-serif; letter-spacing: .16em;
  text-transform: uppercase; opacity: .85;
}
.sealed.opened .seal-badge { color: var(--mark); opacity: 1; }
.seal-title {
  grid-column: 1; font-family: 'Oswald', sans-serif; font-size: 21px; letter-spacing: .02em;
  text-transform: uppercase; line-height: 1.15;
}
.seal-sub { grid-column: 1; font-size: 13.5px; opacity: .85; }
.seal-cta {
  grid-column: 2; grid-row: 1 / span 3; align-self: center;
  border: 1px solid currentColor; border-radius: 99px; padding: 9px 18px;
  font-size: 14px; font-weight: 500; white-space: nowrap;
}
.sealed.opened .seal-cta { border-color: var(--line); color: var(--robe); }

@keyframes seal-in { from { opacity: 0; transform: translateY(-14px) scale(.98); } to { opacity: 1; transform: none; } }
@keyframes seal-pulse {
  0%, 100% { box-shadow: 0 6px 22px rgba(232, 54, 42, .28); }
  50% { box-shadow: 0 6px 30px rgba(232, 54, 42, .5); }
}
@keyframes seal-shine { 0% { left: -60%; } 55%, 100% { left: 130%; } }
@media (prefers-reduced-motion: reduce) {
  .sealed, .sealed::after { animation: none; }
}
@media (max-width: 560px) {
  .sealed { grid-template-columns: 1fr; }
  .seal-cta { grid-column: 1; grid-row: auto; justify-self: start; margin-top: 8px; }
}

/* ---------- чат поддержки ---------- */
.chat {
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 16px; max-height: 52vh; min-height: 220px; overflow-y: auto;
  display: flex; flex-direction: column; gap: 10px;
}
.chat-empty { color: var(--ink-soft); text-align: center; margin: auto; font-size: 15px; }
.bubble {
  max-width: 76%; padding: 10px 13px; border-radius: 12px 12px 12px 3px;
  background: #EFF2F6; font-size: 15px; line-height: 1.45; align-self: flex-start;
  overflow-wrap: anywhere;
}
.bubble.own {
  align-self: flex-end; background: var(--robe); color: #fff;
  border-radius: 12px 12px 3px 12px;
}
.bubble .who { font-size: 12px; opacity: .7; margin-bottom: 3px; }
.bubble-img {
  display: block; max-width: 260px; max-height: 260px; width: auto; height: auto;
  border-radius: 8px; margin: 4px 0; object-fit: cover;
}
.bubble.own .bubble-img { border: 1px solid rgba(255,255,255,.25); }
.bubble { animation: pop .18s ease-out; }
@keyframes pop { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .bubble { animation: none; } }

.chat-form { display: flex; gap: 10px; align-items: flex-end; margin-top: 12px; }
.chat-form textarea { flex: 1; min-height: 46px; }
.chat-actions { display: flex; gap: 8px; align-items: center; }
.clip {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  border: 1px solid var(--line); border-radius: var(--radius); background: #fff;
  padding: 12px 14px; font-size: 14px; color: var(--ink-soft); white-space: nowrap; margin: 0;
}
.clip:hover { border-color: #C9CFD8; color: var(--ink); }
.clip span::before { content: '+ '; font-weight: 600; }

.support-grid { display: grid; grid-template-columns: 320px 1fr; gap: 18px; }
@media (max-width: 860px) { .support-grid { grid-template-columns: 1fr; } }

.thread {
  display: block; padding: 12px 13px; border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--card); color: var(--ink); text-decoration: none;
  box-shadow: 0 1px 2px rgba(16,21,28,.03); transition: border-color .12s ease, transform .12s ease;
}
.thread:hover { border-color: #C9CFD8; transform: translateY(-1px); }
.thread.on { border-color: var(--robe); box-shadow: 0 0 0 3px rgba(27,58,107,.08); }
.thread-top { display: flex; align-items: center; gap: 10px; }
.thread-ava {
  flex: none; width: 34px; height: 34px; border-radius: 50%; display: flex; align-items: center;
  justify-content: center; background: var(--robe); color: #fff; font-weight: 600; font-size: 14px;
  text-transform: uppercase;
}
.thread.on .thread-ava { background: var(--tag); color: var(--ink); }
.thread-info { flex: 1; min-width: 0; }
.thread-info b { display: block; font-size: 14.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.thread-prev { margin: 6px 0 0 44px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.thread-time { margin: 3px 0 0 44px; }

@media (max-width: 780px) {
  .chat { max-height: 60vh; }
  .bubble { max-width: 92%; }
}

/* ---------- дашборд и графики ---------- */
.dash-filter { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; }
.dash-filter .btn { padding: 9px 14px; font-size: 14px; }

.hero-kpi {
  display: grid; grid-template-columns: 1.4fr 1fr; gap: 18px;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 22px;
}
.hero-kpi .k { font-size: 12.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft); }
.hero-num {
  font-family: 'JetBrains Mono', monospace; font-weight: 700;
  font-size: clamp(30px, 5.5vw, 46px); line-height: 1.1; margin: 4px 0 6px;
}
.hero-side { border-left: 1px solid var(--line); padding-left: 18px; }

/* ---------- «Что мешает продавать больше» на дашборде ---------- */
.health-list { display: flex; flex-direction: column; gap: 2px; }
.health-row {
  display: flex; align-items: center; gap: 14px; padding: 10px 12px; border-radius: 10px;
  text-decoration: none; color: inherit; border-left: 3px solid var(--line);
}
.health-row:hover { background: #F4F6F9; }
.health-row.bad { border-left-color: var(--mark); }
.health-n {
  font-family: 'JetBrains Mono', monospace; font-weight: 700; font-size: 16px;
  flex: none; min-width: 62px;
}
.health-row.bad .health-n { color: var(--mark); }
.health-t { flex: 1; font-size: 14px; color: var(--ink); }
.health-go { flex: none; font-size: 12.5px; color: var(--ink-soft); white-space: nowrap; }
.health-row:hover .health-go { color: var(--robe); }
@media (max-width: 640px) {
  .health-row { flex-wrap: wrap; }
  .health-go { width: 100%; padding-left: 76px; margin-top: -4px; }
}

.chart { margin: 10px 0 0; padding: 0; }
.chart svg { width: 100%; height: auto; display: block; overflow: visible; }
.chart .grid { stroke: var(--line); stroke-width: 1; }
.chart .ax { font-family: 'Golos Text', sans-serif; font-size: 11px; fill: var(--ink-soft); }
.chart .ax.lbl { font-size: 13px; fill: var(--ink); }
.chart .ax.val { font-size: 12px; fill: var(--ink-soft); font-family: 'JetBrains Mono', monospace; }
.chart .hit { cursor: default; }
.chart .hit:hover { fill: rgba(27, 58, 107, .05); }

.chart-legend { display: flex; gap: 16px; flex-wrap: wrap; font-size: 13px; color: var(--ink-soft); margin-bottom: 4px; }
.chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-right: 6px; vertical-align: baseline; }

.chart-table { margin-top: 10px; }
.chart-table summary { cursor: pointer; font-size: 13.5px; color: var(--ink-soft); }
.chart-table summary:hover { color: var(--ink); }

.chart-tip {
  position: absolute; z-index: 60; pointer-events: none;
  background: var(--ink); color: #fff; font-size: 13px; line-height: 1.35;
  padding: 7px 10px; border-radius: var(--radius); max-width: 260px;
  box-shadow: 0 6px 20px rgba(16, 21, 28, .25);
}

@media (max-width: 860px) {
  .hero-kpi { grid-template-columns: 1fr; }
  .hero-side { border-left: 0; border-top: 1px solid var(--line); padding-left: 0; padding-top: 16px; }
}
/* Шапка на телефоне: пунктов много, в одну строку они не влезают и при переносе
   наезжали на заголовок страницы. Логотип сверху, меню отдельной строкой с прокруткой вбок. */
@media (max-width: 780px) {
  .top-in { height: auto; min-height: 56px; padding: 10px 0; flex-wrap: wrap; row-gap: 6px; }
  .top nav {
    width: 100%; margin-left: 0; flex-wrap: nowrap; overflow-x: auto;
    -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .top nav::-webkit-scrollbar { display: none; }
  .top nav a { white-space: nowrap; flex: 0 0 auto; }
  .page-head { margin-top: 4px; }
}

/* На узком экране график, ужатый до ширины телефона, превращается в полоску высотой
   120px, где столбиков не разглядеть. Даём ему прокрутку вбок, как таблицам. */
@media (max-width: 700px) {
  .chart { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .chart svg { min-width: 560px; }
  .chart-legend { position: sticky; left: 0; }
}

/* На тач-устройствах кнопки крупнее: пальцем в 40px попадать неудобно */
@media (pointer: coarse) {
  .btn { min-height: 44px; }
  .top nav a { padding: 11px 12px; }
}

@media (max-width: 860px) {
  .hero-grid { grid-template-columns: 1fr; gap: 30px; }
  .g3, .g4, .g5, .g6 { grid-template-columns: repeat(3, minmax(0,1fr)); }
  .order { grid-template-columns: 1fr; }
  .order .price { text-align: left; }
}
@media (max-width: 560px) {
  .g2, .g3, .g4, .g5, .g6 { grid-template-columns: 1fr; }
  .hero { padding: 34px 0 26px; }
  .sec { padding: 40px 0; }
}

/* ---------- юридические документы и FAQ ---------- */
.foot-links { display: flex; flex-wrap: wrap; gap: 18px; margin-bottom: 12px; }
.foot-links a { color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--line); }
.foot-links a:hover { border-bottom-color: var(--robe); }
.foot p { margin: 0; }

.doc-switch { display: flex; gap: 8px; flex-wrap: wrap; }

.legal-wrap { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 34px; align-items: start; }
.legal-toc .toc-in { position: sticky; top: 78px; border-left: 2px solid var(--line); padding-left: 14px; }
.toc-title { font-family: Oswald, sans-serif; text-transform: uppercase; letter-spacing: .06em;
             font-size: 12px; color: var(--ink-soft); margin-bottom: 10px; }
.legal-toc a { display: block; padding: 4px 0; font-size: 14px; color: var(--ink-soft); text-decoration: none; }
.legal-toc a:hover { color: var(--robe); }

.legal.doc { max-width: 74ch; }
.legal.doc h2 { font-family: Oswald, sans-serif; font-size: 20px; margin: 30px 0 10px;
                scroll-margin-top: 78px; }
.legal.doc h2:first-child { margin-top: 0; }
.legal.doc h3 { font-size: 16px; margin: 20px 0 8px; }
.legal.doc p { margin: 0 0 10px; line-height: 1.62; }
.legal.doc ul { margin: 0 0 12px; padding-left: 20px; }
.legal.doc li { margin-bottom: 6px; line-height: 1.6; }
.legal.doc pre.req { background: var(--paper-2, #f6f5f2); border: 1px solid var(--line);
                     border-radius: 10px; padding: 14px 16px; white-space: pre-wrap;
                     font-family: 'JetBrains Mono', monospace; font-size: 13px; line-height: 1.7; }
.todo { font-style: normal; background: #fff3cd; border-bottom: 1px dashed #b8860b;
        padding: 0 4px; border-radius: 3px; color: #7a5c00; }

/* FAQ: аккордеон с поиском */
.faq-search { position: relative; margin-bottom: 22px; max-width: 520px; }
.faq-search input { width: 100%; padding: 13px 16px; font: inherit; border: 1px solid var(--line);
                    border-radius: 12px; background: #fff; transition: border-color .15s, box-shadow .15s; }
.faq-search input:focus { outline: none; border-color: var(--robe);
                          box-shadow: 0 0 0 3px rgba(27, 58, 107, .12); }
.faq-count { position: absolute; right: 14px; top: 50%; transform: translateY(-50%);
             font-size: 12px; color: var(--ink-soft); pointer-events: none; }

.faq-group { margin-bottom: 30px; }
.faq-group h2 { font-family: Oswald, sans-serif; font-size: 15px; text-transform: uppercase;
                letter-spacing: .08em; color: var(--ink-soft); margin: 0 0 12px; }
.qa { border: 1px solid var(--line); border-radius: 12px; background: #fff; margin-bottom: 8px;
      transition: border-color .15s, box-shadow .15s; }
.qa[open] { border-color: var(--robe); box-shadow: 0 6px 22px rgba(20, 30, 50, .07); }
.qa summary { display: flex; align-items: center; justify-content: space-between; gap: 14px;
              padding: 15px 18px; cursor: pointer; font-weight: 500; list-style: none; }
.qa summary::-webkit-details-marker { display: none; }
.qa summary:focus-visible { outline: 2px solid var(--robe); outline-offset: 2px; border-radius: 12px; }
.chev { width: 9px; height: 9px; flex: none; border-right: 2px solid var(--ink-soft);
        border-bottom: 2px solid var(--ink-soft); transform: rotate(45deg) translateY(-2px);
        transition: transform .2s ease; }
.qa[open] .chev { transform: rotate(225deg) translateY(-2px); border-color: var(--robe); }
.qa-body { padding: 0 18px 16px; animation: qa-in .22s ease both; }
.qa-body p { margin: 0 0 10px; line-height: 1.62; }
.qa-body p:last-child { margin-bottom: 0; }
.qa-body table.t { margin: 4px 0 10px; }
@keyframes qa-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
.faq-empty { color: var(--ink-soft); }

@media (prefers-reduced-motion: reduce) {
  .qa-body { animation: none; }
  .chev { transition: none; }
}
@media (max-width: 860px) {
  .legal-wrap { grid-template-columns: 1fr; gap: 20px; }
  .legal-toc .toc-in { position: static; }
}

.agree { display: flex; gap: 10px; align-items: flex-start; margin-top: 16px;
         font-size: 13px; line-height: 1.5; color: var(--ink-soft); cursor: pointer; }
.agree input { margin-top: 2px; width: 18px; height: 18px; flex: none; accent-color: var(--robe); }
.agree a { color: var(--ink); }

/* ---------- репутация под замком, демо, отметка мёртвого лида ---------- */
.lock { display: inline-flex; align-items: center; gap: 6px; font-size: 13px;
        color: var(--ink-soft); text-decoration: none; border-bottom: 1px dashed var(--line); }
.lock:hover { color: var(--robe); border-bottom-color: var(--robe); }
.lock-i { width: 9px; height: 8px; border: 1.5px solid currentColor; border-radius: 2px;
          position: relative; flex: none; }
.lock-i::before { content: ""; position: absolute; left: 1px; right: 1px; bottom: 100%;
                  height: 5px; border: 1.5px solid currentColor; border-bottom: 0;
                  border-radius: 4px 4px 0 0; }
.pill.demo { background: #ede9fe; color: #5b21b6; }

.dead-box { border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; }
.dead-box summary { cursor: pointer; font-size: 14px; color: var(--ink-soft); }
.dead-box[open] { border-color: var(--mark); }
.dead-box[open] summary { color: var(--mark); font-weight: 500; }

/* ---------- лента событий ---------- */
.feed { border: 1px solid var(--line); border-radius: 14px; background: #fff; overflow: hidden; }
.feed-head { display: flex; align-items: center; justify-content: space-between; gap: 10px;
             padding: 12px 16px; border-bottom: 1px solid var(--line); }
.feed-head h3 { margin: 0; font-size: 14px; text-transform: uppercase; letter-spacing: .07em; }
.live { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-soft); }
.live i { width: 7px; height: 7px; border-radius: 50%; background: var(--check);
          animation: live-pulse 2s infinite; }
@keyframes live-pulse { 0%,100% { opacity: 1; transform: scale(1); }
                        50% { opacity: .35; transform: scale(.8); } }
.feed-list { max-height: 340px; overflow-y: auto; margin: 0; padding: 0; list-style: none; }
.feed-list li { display: flex; gap: 10px; align-items: baseline; padding: 9px 16px;
                border-bottom: 1px solid var(--line); font-size: 13px;
                animation: feed-in .3s ease both; }
.feed-list li:last-child { border-bottom: 0; }
.feed-dot { width: 6px; height: 6px; border-radius: 50%; flex: none; background: var(--robe);
            transform: translateY(-1px); }
.feed-dot.taken { background: var(--check); }
.feed-dot.done { background: var(--tag); }
.feed-when { margin-left: auto; color: var(--ink-soft); font-size: 12px; white-space: nowrap; }
@keyframes feed-in { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .feed-list li { animation: none; }
  .live i { animation: none; }
}

/* ---------- правила: будильник и автопокупка ---------- */
.rule { border-left: 3px solid var(--line); }
.rule.on { border-left-color: var(--check); }
.rule-head { display: flex; gap: 12px; align-items: flex-start; justify-content: space-between;
             flex-wrap: wrap; margin-bottom: 6px; }
@media (max-width: 560px) {
  .rule-head { flex-direction: column; }
  .rule-head form { flex: 1; }
  .rule-head .btn { width: 100%; }
}

/* ---------- сравнительная сетка тарифов ---------- */
.tgrid-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.tgrid { width: 100%; min-width: 720px; border-collapse: separate; border-spacing: 0; }
.tgrid th, .tgrid td { padding: 12px 14px; text-align: center; vertical-align: middle;
                       border-bottom: 1px solid var(--line); background: #fff; }
.tgrid thead th { vertical-align: bottom; padding-top: 26px; position: relative;
                  border-bottom: 2px solid var(--ink); }
.tgrid .tg-what { text-align: left; width: 34%; background: transparent; }
.tgrid tbody .tg-what { padding-left: 0; }
.tg-label { display: block; font-weight: 500; }
.tg-hint { display: block; font-size: 12px; color: var(--ink-soft); line-height: 1.4; margin-top: 2px; }
.tg-name { font-family: Oswald, sans-serif; font-size: 20px; text-transform: uppercase;
           letter-spacing: .03em; }
.tg-sub { font-size: 12px; color: var(--ink-soft); margin-bottom: 8px; }
.tg-price { font-family: 'JetBrains Mono', monospace; font-weight: 700; font-size: 22px; }
.tg-price small { font-family: 'Golos Text', sans-serif; font-weight: 400; font-size: 12px;
                  color: var(--ink-soft); }
.tgrid .tg-pick { background: #FFFBEB; }
.tgrid thead .tg-pick { box-shadow: inset 0 0 0 2px var(--tag); border-radius: 14px 14px 0 0; }
.tgrid tbody .tg-pick { box-shadow: inset 2px 0 0 var(--tag), inset -2px 0 0 var(--tag); }
.tgrid tfoot .tg-pick { box-shadow: inset 2px 0 0 var(--tag), inset -2px 0 0 var(--tag),
                        inset 0 -2px 0 var(--tag); border-radius: 0 0 14px 14px; }
.tg-flag { position: absolute; top: 6px; left: 50%; transform: translateX(-50%);
           background: var(--tag); color: var(--ink); font-size: 10px; text-transform: uppercase;
           letter-spacing: .08em; padding: 3px 10px; border-radius: 999px; white-space: nowrap; }
.tgrid .yes { display: inline-block; width: 24px; height: 24px; line-height: 24px; border-radius: 50%;
              background: var(--check); color: #fff; font-size: 14px; }
.tgrid .no { color: #c8c8c8; font-size: 18px; }
.tgrid .val { font-size: 14px; }
.tgrid tfoot td { padding-top: 18px; border-bottom: 0; }
.tgrid tfoot .btn { width: 100%; }
.tg-note { margin-top: 14px; font-size: 14px; color: var(--ink-soft); }

@media (max-width: 620px) {
  .tgrid { min-width: 620px; font-size: 13px; }
  .tgrid th, .tgrid td { padding: 10px 8px; }
  .tg-name { font-size: 16px; }
  .tg-price { font-size: 17px; }
  .tg-hint { display: none; }
}

/* ---------- честный блок «чего мы не обещаем» ---------- */
.honest { border: 2px solid var(--ink); border-radius: 18px; padding: 28px 30px; background: #fff; }
.honest h2 { margin: 0 0 6px; }
.honest > p { color: var(--ink-soft); margin: 0 0 16px; }
.honest ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 14px; }
.honest li { padding-left: 26px; position: relative; line-height: 1.6; }
.honest li::before { content: ""; position: absolute; left: 0; top: 9px; width: 12px; height: 2px;
                     background: var(--mark); }
.honest li:last-child::before { background: var(--check); height: 12px; top: 6px; width: 3px; }
.honest .small { margin: 18px 0 0; color: var(--ink-soft); }
@media (max-width: 560px) { .honest { padding: 22px 18px; border-radius: 14px; } }

/* =========================================================
   ОБОЛОЧКА КАБИНЕТА: слева навигация, снизу панель на телефоне.
   Метафора та же, что у ценника: боковина - это корешок ценника,
   активный пункт помечен красным штрихом уценщика.
   ========================================================= */
.skip { position: absolute; left: -9999px; }
.skip:focus { left: 12px; top: 12px; z-index: 100; background: #fff; padding: 10px 14px;
              border: 2px solid var(--ink); border-radius: 8px; }

.app { display: grid; grid-template-columns: 248px minmax(0, 1fr); min-height: 100vh; }
.app-body { background: var(--paper); }

.side {
  position: sticky; top: 0; align-self: start; height: 100vh;
  display: flex; flex-direction: column; gap: 6px;
  background: var(--ink); color: #E8ECF2;
  padding: 20px 14px 16px;
}
.side-logo { display: block; margin: 0 6px 18px; color: #fff; font-family: Oswald, sans-serif;
             font-weight: 700; font-size: 19px; letter-spacing: .06em; text-decoration: none; }
.side-logo b { color: var(--tag); }
.side-nav { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 2px;
            scrollbar-width: thin; }
.nav-cap { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: .14em;
           text-transform: uppercase; color: #6D7A8C; margin: 14px 8px 6px; }
.nav-cap:first-child { margin-top: 0; }

.side-nav a, .tabbar a, .tab-more {
  display: flex; align-items: center; gap: 11px; padding: 9px 10px; border-radius: 9px;
  color: #C3CCD9; text-decoration: none; font-size: 14.5px; position: relative;
  transition: background .16s ease, color .16s ease, transform .16s ease;
}
.side-nav a:hover { background: rgba(255,255,255,.07); color: #fff; }
.side-nav a.on { background: rgba(255,255,255,.1); color: #fff; }
.side-nav a.on::before {
  content: ""; position: absolute; left: -14px; top: 50%; transform: translateY(-50%);
  width: 4px; height: 22px; background: var(--mark); border-radius: 0 3px 3px 0;
}
/* Документация API и ключи. Код читают глазами построчно, поэтому моно-шрифт,
   горизонтальная прокрутка вместо переносов и спокойный фон. */
.doc { max-width: 820px; }
.doc h2 { font-size: 20px; margin: 30px 0 10px; text-transform: none;
          font-family: 'Golos Text', sans-serif; letter-spacing: 0; }
.doc h3 { font-size: 16px; margin: 22px 0 8px; text-transform: none;
          font-family: 'Golos Text', sans-serif; letter-spacing: 0; }
.doc p, .doc li { line-height: 1.55; }
.doc ul { padding-left: 20px; }
.doc li { margin-bottom: 6px; }
.doc code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px;
            background: #EEF1F5; padding: 2px 5px; border-radius: 4px; }
.doc .verb { background: var(--robe); color: #fff; font-weight: 700; }
.apicode { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; line-height: 1.5;
           background: #10151C; color: #D7DEEA; padding: 14px 16px; border-radius: 10px;
           overflow-x: auto; white-space: pre; margin: 10px 0; }
.apicode.out { background: #F4F6F8; color: var(--ink); border: 1px solid var(--line); }
.apikey { display: block; font-family: 'JetBrains Mono', monospace; font-size: 13px;
          background: #10151C; color: #8FE3B0; padding: 12px 14px; border-radius: 8px;
          overflow-x: auto; white-space: nowrap; }
.lp .apicode { max-width: 680px; }

/* Кто сейчас смотрит заявку. Спокойное состояние - серая строка, когда рядом есть
   другие мастера - живая точка и тёмный текст. Красный тут не нужен: это факт,
   а не сигнал тревоги, и краснотой на бирже помечена срочность. */
.viewers { display: flex; align-items: center; gap: 9px; padding: 10px 12px;
           border: 1px solid var(--line); border-radius: 10px; font-size: 13.5px;
           color: var(--ink-soft); background: var(--card); }
.viewers-dot { width: 8px; height: 8px; border-radius: 50%; background: #C7CCD4; flex: none; }
.viewers.hot { color: var(--ink); border-color: #CBD8EC; background: #F4F7FC; }
.viewers.hot .viewers-dot { background: var(--robe); animation: viewers-pulse 1.8s ease-in-out infinite; }
@keyframes viewers-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(27,58,107,.45); }
  50% { box-shadow: 0 0 0 6px rgba(27,58,107,0); }
}
@media (prefers-reduced-motion: reduce) { .viewers.hot .viewers-dot { animation: none; } }

/* Полоса прогресса рассылки: видно, что процесс идёт, а не завис */
.bcast-bar { height: 10px; border-radius: 99px; background: var(--line); overflow: hidden; }
.bcast-bar i { display: block; height: 100%; background: var(--robe); border-radius: 99px;
               transition: width .3s ease; }

/* Индивидуальные условия партнёра: подписанные поля в строке таблицы.
   Без подписей владелец не помнит, какое из четырёх окошек - комиссия. */
.pterms { display: grid; grid-template-columns: repeat(4, minmax(88px, 1fr)); gap: 8px 10px;
          align-items: end; min-width: 420px; }
.pterms label { display: block; font-size: 10.5px; letter-spacing: .04em; text-transform: uppercase;
                color: var(--ink-soft); }
.pterms label.wide { grid-column: 1 / -1; text-transform: none; letter-spacing: 0; font-size: 11.5px; }
.pterms input, .pterms select { width: 100%; margin-top: 3px; }
.pterms .btn { grid-column: 1 / -1; justify-self: start; }

/* Подпункты настроек в админке: это поля, а не равноправные разделы кабинета,
   поэтому мельче, с отступом и без иконки. */
.side-nav a.nav-sub { padding: 6px 10px 6px 18px; font-size: 13px; color: #9AA7B8; }
.side-nav a.nav-sub:hover { color: #fff; }
.side-nav a.nav-sub.on { color: #fff; }

.ic { width: 19px; height: 19px; flex: none; }
.nav-badge { margin-left: auto; font-style: normal; font-size: 11px; font-weight: 600;
             background: var(--mark); color: #fff; min-width: 18px; height: 18px; line-height: 18px;
             text-align: center; border-radius: 9px; padding: 0 5px; }

.side-foot { border-top: 1px solid rgba(255,255,255,.12); padding-top: 12px; }
.side-bal { display: block; background: var(--tag); color: var(--ink); border-radius: 10px;
            padding: 10px 12px; text-decoration: none; transition: transform .16s ease; }
.side-bal:hover { transform: translateY(-1px); }
.side-bal .k { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: .08em; }
.side-bal .v { display: block; font-size: 20px; font-weight: 700; }
.side-bal .h { display: block; font-size: 11px; opacity: .7; }
.side-me { display: flex; align-items: center; gap: 8px; margin-top: 10px; padding: 0 4px; }
.side-me .who { font-size: 13px; color: #97A3B4; overflow: hidden; text-overflow: ellipsis;
                white-space: nowrap; }
.side-me .pill { font-style: normal; background: rgba(255,255,255,.12); color: #C3CCD9; }
.side-me .out { margin-left: auto; color: #97A3B4; display: flex; }
.side-me .out:hover { color: var(--mark); }

.main { min-width: 0; display: flex; flex-direction: column; }
.page { max-width: 1040px; width: 100%; margin: 0 auto; padding: 30px 26px 40px;
        animation: page-in .24s ease both; }
/* Админка - рабочий инструмент с таблицами и дашбордами, не текст для чтения:
   ей нужна вся ширина широкого монитора, а не колонка в 1040px с пустотой по бокам. */
.page-wide { max-width: 1680px; }
@keyframes page-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

.mbar { display: none; }
.tabbar { display: none; }
.side-veil { display: none; }

.page-foot { max-width: 1040px; width: 100%; margin: 0 auto; padding: 24px 26px 40px;
             border-top: 1px solid var(--line); }
.page-foot .foot-links { margin-bottom: 8px; }

/* ---------- оверлей загрузки: пока ждём ответ от банка ---------- */
.load-veil { position: fixed; inset: 0; z-index: 80; display: none;
             background: rgba(16,21,28,.5); backdrop-filter: blur(2px);
             align-items: center; justify-content: center; }
.load-veil.on { display: flex; animation: load-veil-in .18s ease both; }
@keyframes load-veil-in { from { opacity: 0; } to { opacity: 1; } }
.load-card { background: var(--card); border-radius: 16px; padding: 30px 34px;
             text-align: center; max-width: 300px;
             box-shadow: 0 24px 70px rgba(16,21,28,.28); animation: modal-in .18s ease both; }
.load-card .spinner { margin: 0 auto 16px; }
.load-card p { margin: 0; color: var(--ink); font-weight: 600; }
.load-card .small { margin-top: 6px; }

/* ---------- модалка ---------- */
.modal { border: 0; padding: 0; border-radius: 16px; max-width: 420px; width: calc(100% - 32px);
         box-shadow: 0 24px 70px rgba(16,21,28,.28); }
.modal::backdrop { background: rgba(16,21,28,.45); backdrop-filter: blur(2px); }
.modal[open] { animation: modal-in .18s ease both; }
@keyframes modal-in { from { opacity: 0; transform: translateY(8px) scale(.98); }
                      to { opacity: 1; transform: none; } }
.modal-in { padding: 22px 24px; }
.modal-in h3 { margin: 0 0 8px; }
.modal-btns { display: flex; gap: 10px; margin-top: 18px; }
.modal-btns .btn { flex: 1; }

/* ---------- телефон: боковина уезжает, снизу появляется панель ---------- */
@media (max-width: 900px) {
  .app { grid-template-columns: 1fr; }
  .side {
    position: fixed; inset: 0 auto 0 0; width: 270px; z-index: 60;
    transform: translateX(-100%); transition: transform .22s ease;
    padding-top: calc(16px + env(safe-area-inset-top));
  }
  .menu-on .side { transform: none; box-shadow: 0 0 60px rgba(0,0,0,.4); }
  /* Подложку показываем только при открытом меню: display:block в медиазапросе
     перебивал атрибут hidden и серая пелена висела поверх всей страницы. */
  .menu-on .side-veil:not([hidden]) { display: block; position: fixed; inset: 0; z-index: 55;
               background: rgba(16,21,28,.5); animation: veil-in .18s ease both; }
  @keyframes veil-in { from { opacity: 0; } to { opacity: 1; } }

  .mbar { display: flex; align-items: center; gap: 12px; position: sticky; top: 0; z-index: 50;
          background: rgba(250,250,247,.92); backdrop-filter: blur(8px);
          border-bottom: 1px solid var(--line); padding: 10px 14px;
          padding-top: calc(10px + env(safe-area-inset-top)); }
  .burger { background: none; border: 0; padding: 6px; color: var(--ink); cursor: pointer;
            display: flex; border-radius: 8px; }
  .burger:active { background: var(--line); }
  .mbar-title { font-family: Oswald, sans-serif; text-transform: uppercase; font-size: 15px;
                letter-spacing: .04em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .mbar-bal { margin-left: auto; font-weight: 700; font-size: 14px; color: var(--ink);
              background: var(--tag); padding: 5px 10px; border-radius: 8px; text-decoration: none; }

  .page { padding: 18px 14px 22px; }
  .page-foot { padding: 18px 14px 26px; }

  .tabbar { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0;
            position: sticky; bottom: 0; z-index: 50; background: #fff;
            border-top: 1px solid var(--line);
            padding-bottom: env(safe-area-inset-bottom); }
  .tabbar a, .tab-more { flex-direction: column; gap: 3px; padding: 8px 2px; border-radius: 0;
                         color: var(--ink-soft); font-size: 10.5px; background: none; border: 0;
                         cursor: pointer; font-family: inherit; }
  .tabbar a.on { color: var(--ink); background: none; }
  .tabbar a.on::after { content: ""; position: absolute; top: 0; left: 22%; right: 22%; height: 2px;
                        background: var(--mark); }
  .tabbar .ic { width: 21px; height: 21px; }
  .tabbar .nav-badge { position: absolute; top: 4px; right: 50%; margin-right: -20px; margin-left: 0; }

  /* панель снизу не должна перекрывать последнюю кнопку страницы */
  .main { padding-bottom: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .page, .modal[open], .side-veil { animation: none; }
  .side { transition: none; }
  .load-veil.on, .load-card { animation: none; }
}

/* ---------- заставка мини-приложения ---------- */
.splash { min-height: 100vh; display: grid; place-items: center; padding: 24px; }
.splash-in { text-align: center; max-width: 340px; }
.logo.big { font-family: Oswald, sans-serif; font-weight: 700; font-size: 30px;
            letter-spacing: .06em; margin-bottom: 14px; }
.logo.big b { color: var(--mark); }
.spinner { width: 26px; height: 26px; margin: 18px auto 0; border-radius: 50%;
           border: 3px solid var(--line); border-top-color: var(--robe);
           animation: spin .8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .spinner { animation-duration: 3s; } }

/* Внутри мессенджера свои отступы сверху и снизу */
body.in-app .mbar { padding-top: calc(10px + env(safe-area-inset-top)); }
body.in-app .tabbar { padding-bottom: calc(env(safe-area-inset-bottom) + 4px); }

/* =========================================================
   ПУЛЬС БИРЖИ: одна строка событий, перекат раз в 20 секунд
   ========================================================= */
.pulse { display: flex; align-items: center; gap: 14px; margin: 0 0 20px;
         background: var(--ink, #10151C); color: #E8ECF2; border-radius: 12px;
         padding: 0 14px; height: 46px; overflow: hidden; }
.pulse-cap { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: .16em;
             text-transform: uppercase; color: #7C8797; flex: none; }
.pulse-win { position: relative; flex: 1; height: 46px; overflow: hidden; min-width: 0; }
.pulse-row { position: absolute; inset: 0; display: flex; align-items: center; gap: 9px;
             font-size: 13.5px; white-space: nowrap; opacity: 0; transform: translateY(100%);
             pointer-events: none; }
.pulse-row.on { opacity: 1; transform: none; pointer-events: auto;
                transition: opacity .35s ease, transform .45s cubic-bezier(.2,.8,.3,1); }
.pulse-row.out { opacity: 0; transform: translateY(-100%);
                 transition: opacity .35s ease, transform .45s cubic-bezier(.2,.8,.3,1); }
.pulse-row span { overflow: hidden; text-overflow: ellipsis; }
.pulse-row em { font-style: normal; color: #6D7A8C; font-size: 12px; margin-left: auto; flex: none; }
.pulse-dot { width: 6px; height: 6px; border-radius: 50%; background: #3F7BD8; flex: none; }
.pulse-dot.taken { background: var(--check); }
.pulse-dot.done { background: var(--tag); }
.pulse-all { flex: none; font-size: 12px; color: #97A3B4; text-decoration: none;
             border-bottom: 1px dashed rgba(255,255,255,.25); }
.pulse-all:hover { color: #fff; }
@media (max-width: 620px) {
  .pulse-cap, .pulse-all { display: none; }
  .pulse { padding: 0 12px; }
  .pulse-row em { font-size: 11px; }
}
@media (prefers-reduced-motion: reduce) { .pulse-row.on, .pulse-row.out { transition: none; } }

/* =========================================================
   КАРТОЧКА ЗАЯВКИ
   ========================================================= */
.lead-card { display: grid; grid-template-columns: minmax(0,1fr) 176px; gap: 18px;
             background: var(--card); border: 1px solid var(--line); border-radius: 16px;
             padding: 16px 18px; align-items: center; position: relative; overflow: hidden;
             transition: border-color .16s ease, box-shadow .16s ease, transform .16s ease; }
.lead-card:hover { border-color: #C9D0DA; box-shadow: 0 10px 30px rgba(16,21,28,.07);
                   transform: translateY(-1px); }
.lead-card.hot::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
                         background: var(--mark); }
.lead-card.locked { opacity: .72; }

.lead-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 9px; }
.chip { font-size: 11.5px; line-height: 1; padding: 5px 9px; border-radius: 999px;
        background: #F1F3F6; color: var(--ink-soft); white-space: nowrap; }
.chip.city { background: var(--ink); color: #fff; }
.chip.hot { background: var(--mark-soft); color: var(--mark); font-weight: 600; }
.chip.warn { background: var(--warn-soft); color: var(--warn); }
.chip.demo { background: #ede9fe; color: #5b21b6; }
/* Квалификация заявки: покупатель должен видеть её раньше цены.
   «Клиент ждёт» - спокойный зелёный, «не квал» - предупреждающий, но не красный:
   красный на бирже занят срочностью и уценкой. */
/* «Надёжный партнёр» - поручительство владельца, а не вычисленная метрика.
   Поэтому и выглядит иначе, чем остальные значки: тёмно-синий как подпись, с галочкой.
   Зелёный тут занят статусом «клиент ждёт», жёлтый - деньгами. */
.chip.trust, .pill.trust { background: var(--robe); color: #fff; font-weight: 600; }
.chip.trust::before, .pill.trust::before { content: "✓ "; font-weight: 700; }

.chip.isqual { background: var(--check-soft); color: var(--check); font-weight: 600; }
.chip.noqual { background: #EAE6FA; color: #4B3F9E; font-weight: 600; }

.lead-title { font-family: 'Golos Text', sans-serif; text-transform: none; letter-spacing: 0;
              font-size: 17px; font-weight: 600; line-height: 1.3; margin: 0 0 9px; }
.lead-who { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; font-size: 13px; }
.alive { width: 54px; height: 5px; border-radius: 3px; background: #ECEFF3; overflow: hidden;
         flex: none; }
.alive i { display: block; height: 100%; background: var(--check); border-radius: 3px; }

.lead-price { text-align: right; display: flex; flex-direction: column; align-items: stretch; gap: 4px; }
.lead-sum { font-size: 30px; font-weight: 700; line-height: 1; letter-spacing: -.02em;
            position: relative; font-variant-numeric: tabular-nums; }
.lead-drop { font-size: 11.5px; color: var(--mark); }
.lead-go { margin-top: 8px; width: 100%; justify-content: center; }
.lp-lock { color: var(--ink-soft); font-size: 12px; }
.lp-lock .num { font-size: 20px; font-weight: 700; color: var(--ink); }
.lp-lock .lock-i { display: inline-block; margin-bottom: 8px; }

@media (max-width: 620px) {
  .lead-card { grid-template-columns: 1fr; gap: 12px; padding: 14px; }
  .lead-price { flex-direction: row; align-items: center; justify-content: space-between;
                text-align: left; border-top: 1px solid var(--line); padding-top: 12px; gap: 10px; }
  .lead-sum { font-size: 26px; }
  .lead-drop { display: none; }
  .lead-go { margin-top: 0; width: auto; padding: 0 20px; }
  .lp-lock { display: flex; align-items: center; gap: 8px; }
  .lp-lock .lock-i { margin: 0; }
}

/* =========================================================
   ПОДПИСКА В КОШЕЛЬКЕ
   ========================================================= */
.sub { margin-top: 30px; }
.sub-now { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1.1fr); gap: 22px;
           background: var(--card); border: 1px solid var(--line); border-radius: 16px;
           padding: 22px 24px; align-items: center; }
.cap-line { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: .16em;
            text-transform: uppercase; color: var(--ink-soft); }
.sub-name { font-family: Oswald, sans-serif; font-size: 30px; text-transform: uppercase;
            letter-spacing: .02em; line-height: 1.1; margin-top: 4px; }
.sub-pay { display: flex; flex-direction: column; gap: 10px; }
.sub-btn { display: flex; flex-direction: column; gap: 4px; }
.sub-btn .btn { width: 100%; justify-content: space-between; gap: 14px; }
.sub-hint { font-size: 12px; color: var(--ink-soft); }
.sub-cmp { margin-top: 14px; border: 1px solid var(--line); border-radius: 14px;
           background: var(--card); padding: 14px 18px; }
.sub-cmp summary { display: flex; align-items: center; justify-content: space-between;
                   cursor: pointer; font-weight: 500; list-style: none; }
.sub-cmp summary::-webkit-details-marker { display: none; }
@media (max-width: 780px) { .sub-now { grid-template-columns: 1fr; } }

/* =========================================================
   СРОЧНАЯ И ГОРЯЩАЯ ЗАЯВКА
   Срочная - про клиента: мастер нужен прямо сейчас, красный радар.
   Горящая - про заявку: у неё кончается время на бирже, янтарный фитиль.
   Оба состояния могут совпасть, поэтому они не спорят за одни и те же места:
   срочность живёт на левой кромке и в чипе, горение - на рамке и внизу карточки.
   ========================================================= */

/* --- срочная --- */
.lead-card.hot::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
                         background: var(--mark); animation: hot-bar 2.2s ease-in-out infinite; }
/* ---------- падение цены ----------
   Аукцион на понижение продаёт ощущение уходящей цены. Раз в минуту число просто
   подменялось, и падения не было видно вовсе. Теперь цифры доезжают до нового
   значения, число коротко подсвечивается уценкой и роняется на пару пикселей,
   а рядом всплывает, на сколько именно упало. */
.pv { display: inline-block; }
.pdrop .pv { animation: price-drop .55s cubic-bezier(.22,.61,.36,1) both; }
@keyframes price-drop {
  0%   { transform: translateY(-5px); color: var(--mark); }
  55%  { color: var(--mark); }
  100% { transform: none; color: inherit; }
}
/* Всплывающая сумма падения. Ставится СЛЕВА от числа, а не под ним: карточка
   на бирже обрезает всё, что выходит за её края, а снизу уже занято подписью
   «−180 ₽ каждую минуту». Слева от цены пусто, и там ничего не обрежется. */
.pd { position: absolute; right: 100%; top: 1px; margin-right: 9px;
      font: 700 12.5px/1 'JetBrains Mono', monospace; font-style: normal;
      color: var(--mark); white-space: nowrap; pointer-events: none;
      animation: price-pd 1.05s ease-out both; }
@keyframes price-pd {
  0%   { opacity: 0; transform: translateY(4px); }
  20%  { opacity: 1; transform: translateY(0); }
  70%  { opacity: 1; transform: translateY(-6px); }
  100% { opacity: 0; transform: translateY(-12px); }
}
/* На ценнике заявки подпись ставим в правый верхний угол самого ценника.
   Слева от числа тесно, а «правее числа» на практике оказывается уже за жёлтым
   полем: строка цены занимает всю ширину ценника. */
.tag-price { position: relative; }
.tag-price .pd { right: 2px; left: auto; top: -16px; margin: 0; font-size: 14px; }
@media (prefers-reduced-motion: reduce) {
  .pdrop { animation: none; }
  .pd { display: none; }
}

@keyframes hot-bar { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.chip.hot { display: inline-flex; align-items: center; gap: 7px; }
.radar { position: relative; width: 7px; height: 7px; border-radius: 50%; background: var(--mark);
         flex: none; }
.radar::after { content: ""; position: absolute; inset: 0; border-radius: 50%;
                box-shadow: 0 0 0 0 rgba(232, 54, 42, .55);
                animation: radar 2s cubic-bezier(.2,.8,.3,1) infinite; }
@keyframes radar { to { box-shadow: 0 0 0 9px rgba(232, 54, 42, 0); } }

/* --- горящая --- */
.lead-card.burn { border-color: #F0B429; background:
  linear-gradient(var(--card), var(--card)) padding-box,
  linear-gradient(120deg, #F0B429, #FFE79A 42%, #F0B429) border-box;
  border: 1px solid transparent; }
/* Блик идёт ПОД содержимым: иначе он красит кнопку и текст, и карточка выглядит залитой */
.lead-card.burn::after { content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: linear-gradient(115deg, transparent 38%, rgba(255,216,77,.16) 50%, transparent 62%);
  background-size: 300% 100%; animation: sheen 4.2s linear infinite; }
@keyframes sheen { from { background-position: 160% 0; } to { background-position: -60% 0; } }
.lead-card > .lead-body, .lead-card > .lead-price { position: relative; z-index: 1; }

/* Срочность не должна тонуть в янтарной рамке, когда заявка ещё и горит */
.lead-card.hot.burn::before { z-index: 2; width: 4px; border-radius: 16px 0 0 16px; }

.chip.burn { background: #FFF3D6; color: #8A5A00; display: inline-flex; align-items: center; gap: 6px; }
.chip.burn b { font-weight: 700; }
.flame { width: 8px; height: 11px; flex: none; border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%;
         background: linear-gradient(#FFB020, #E8362A); transform-origin: 50% 90%;
         animation: flick .9s ease-in-out infinite alternate; }
@keyframes flick { from { transform: scale(1) rotate(-4deg); opacity: .9; }
                   to   { transform: scale(1.12) rotate(4deg); opacity: 1; } }

/* фитиль: полоска внизу карточки, которая тает вместе со временем жизни */
.wick { position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: #F4E7C4; }
.wick i { display: block; height: 100%; background: linear-gradient(90deg, #E8362A, #F0B429);
          transition: width 1s linear; }

/* последняя минута: заявка начинает нервничать, но карточка не прыгает */
.lead-card.last .chip.burn { animation: last-blink 1s steps(2, start) infinite; }
@keyframes last-blink { 50% { background: #FFE0A3; } }
.lead-card.last .wick i { background: var(--mark); }

/* время вышло: гаснет и уезжает, а не висит мёртвой */
.lead-card.gone { opacity: 0; transform: translateY(-6px) scale(.99);
                  transition: opacity .4s ease, transform .4s ease; }

@media (prefers-reduced-motion: reduce) {
  .lead-card.hot::before, .radar::after, .lead-card.burn::after,
  .flame, .lead-card.last .chip.burn { animation: none; }
  .wick i { transition: none; }
}

/* =========================================================
   ТУПИКИ И УВЕДОМЛЕНИЯ
   ========================================================= */
.stop { max-width: 46ch; margin: 40px auto; text-align: center; }
.stop-num { font-size: 64px; font-weight: 700; color: var(--line); line-height: 1; }
.stop h1 { font-size: clamp(24px, 4vw, 34px); margin: 10px 0 12px; }
.stop p { color: var(--ink-soft); margin: 0 0 22px; }
.stop-act { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }

.toast-wrap { position: fixed; z-index: 80; top: 16px; right: 16px; display: flex;
              flex-direction: column; gap: 10px; width: min(380px, calc(100vw - 32px));
              pointer-events: none; }
.toast { display: flex; gap: 12px; align-items: flex-start; pointer-events: auto;
         background: var(--card); border: 1px solid var(--line); border-radius: 14px;
         padding: 14px 16px; box-shadow: 0 16px 40px rgba(16,21,28,.16);
         animation: toast-in .32s cubic-bezier(.2,.9,.3,1) both; position: relative; overflow: hidden; }
.toast.hide { animation: toast-out .28s ease forwards; }
@keyframes toast-in { from { opacity: 0; transform: translateX(24px) scale(.98); }
                      to { opacity: 1; transform: none; } }
@keyframes toast-out { to { opacity: 0; transform: translateX(24px) scale(.98); } }
.toast-ic { width: 22px; height: 22px; border-radius: 50%; flex: none; display: grid;
            place-items: center; color: #fff; font-size: 13px; font-weight: 700; }
.toast.ok .toast-ic { background: var(--check); }
.toast.err .toast-ic { background: var(--mark); }
.toast.info .toast-ic { background: var(--robe); }
.toast-txt { font-size: 14.5px; line-height: 1.45; }
.toast-x { margin-left: auto; background: none; border: 0; color: var(--ink-soft); cursor: pointer;
           font-size: 18px; line-height: 1; padding: 0 2px; }
.toast-x:hover { color: var(--ink); }
.toast-bar { position: absolute; left: 0; bottom: 0; height: 2px; background: var(--line);
             animation: toast-bar 7s linear forwards; }
.toast.ok .toast-bar { background: var(--check); }
.toast.err .toast-bar { background: var(--mark); }
.toast.info .toast-bar { background: var(--robe); }
@keyframes toast-bar { from { width: 100%; } to { width: 0; } }

@media (max-width: 620px) {
  .toast-wrap { top: auto; bottom: calc(64px + env(safe-area-inset-bottom)); right: 12px; left: 12px;
                width: auto; }
  @keyframes toast-in { from { opacity: 0; transform: translateY(18px) scale(.98); }
                        to { opacity: 1; transform: none; } }
  @keyframes toast-out { to { opacity: 0; transform: translateY(18px) scale(.98); } }
}
@media (prefers-reduced-motion: reduce) {
  .toast, .toast.hide { animation: none; }
  .toast-bar { animation-duration: 12s; }
}

/* =========================================================
   МОИ ЗАКАЗЫ И ЗАЯВКИ
   Тот же язык, что и на бирже: карточка, чипы, цифра справа.
   Отличие одно - здесь заявка уже своя, поэтому вместо падающей цены
   стоит статус и итоговая сумма. Ценник тут не рисуем: торга больше нет.
   ========================================================= */
.my-filter { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 16px; }
.my-filter button {
  font: 500 13px/1 'Golos Text', sans-serif; cursor: pointer;
  padding: 8px 13px; border-radius: 999px; border: 1px solid var(--line);
  background: var(--card); color: var(--ink-soft);
}
.my-filter button:hover { border-color: #C9D0DA; color: var(--ink); }
.my-filter button.on { background: var(--ink); border-color: var(--ink); color: #fff; }
.my-filter button b { font-weight: 600; font-family: 'JetBrains Mono', monospace; margin-left: 6px;
                      opacity: .7; }

.my-list { display: flex; flex-direction: column; gap: 12px; }
.my-card {
  display: grid; grid-template-columns: minmax(0,1fr) 168px; gap: 18px; align-items: center;
  background: var(--card); border: 1px solid var(--line); border-radius: 16px;
  padding: 15px 18px; position: relative;
  transition: border-color .16s ease, box-shadow .16s ease;
}
/* display:grid из класса перебивает браузерное [hidden], поэтому гасим руками */
.my-card[hidden] { display: none; }
.my-card:hover { border-color: #C9D0DA; box-shadow: 0 8px 26px rgba(16,21,28,.06); }
.my-card.live::before { content: ""; position: absolute; left: 0; top: 14px; bottom: 14px; width: 3px;
                        background: var(--robe); border-radius: 0 3px 3px 0; }
.my-card.bad::before { content: ""; position: absolute; left: 0; top: 14px; bottom: 14px; width: 3px;
                       background: var(--mark); border-radius: 0 3px 3px 0; }
.my-card.off { opacity: .72; }

.my-meta { font-size: 13px; color: var(--ink-soft); display: flex; flex-wrap: wrap;
           gap: 4px 10px; margin-top: 8px; }
.my-meta .num { color: var(--ink); }
.my-side { text-align: right; display: flex; flex-direction: column; gap: 3px; }
.my-sum { font-family: 'JetBrains Mono', monospace; font-size: 24px; font-weight: 700;
          line-height: 1.1; letter-spacing: -.01em; }
.my-sum.wait { color: var(--ink-soft); }
.my-sum.got { color: var(--check); }
/* Живая цена в списке своих заявок: всплывающая подпись «−180 ₽» позиционируется
   от самого числа, поэтому ему нужна точка отсчёта. Только там, где цена тикает. */
.my-sum[data-price] { position: relative; }
.my-k { font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft); }
.my-go { margin-top: 9px; width: 100%; justify-content: center; }

/* Статус - тот же чип, что на бирже, только цвет говорит, что дальше делать */
.chip.st-live { background: #E7EDF7; color: var(--robe); font-weight: 600; }
.chip.st-work { background: var(--warn-soft); color: var(--warn); font-weight: 600; }
.chip.st-done { background: var(--check-soft); color: var(--check); font-weight: 600; }
.chip.st-off { background: #EEF0F4; color: var(--ink-soft); }
.chip.st-bad { background: var(--mark-soft); color: var(--mark); font-weight: 600; }

.empty .empty-act { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;
                    margin-top: 18px; }
.empty p { max-width: 46ch; margin-left: auto; margin-right: auto; }

@media (max-width: 620px) {
  .my-card { grid-template-columns: 1fr; gap: 12px; padding: 14px; }
  .my-side { flex-direction: row; align-items: center; justify-content: space-between;
             text-align: left; gap: 10px; border-top: 1px solid var(--line); padding-top: 12px; }
  .my-side .my-k { order: -1; }
  .my-sum { font-size: 21px; }
  .my-go { margin-top: 0; width: auto; padding: 0 18px; }
  .my-filter { overflow-x: auto; flex-wrap: nowrap; scrollbar-width: none; margin-inline: -14px;
               padding-inline: 14px; }
  .my-filter::-webkit-scrollbar { display: none; }
  .my-filter button { flex: 0 0 auto; }
}

/* =========================================================
   ЧАТ ПОДДЕРЖКИ: отдельная панель, ввод всегда на виду
   ========================================================= */
.chatwrap {
  display: flex; flex-direction: column; overflow: hidden;
  background: var(--card); border: 1px solid var(--line); border-radius: 16px;
  height: min(64vh, 620px);
}
.chatwrap .chat { flex: 1; min-height: 0; max-height: none; border: 0; border-radius: 0;
                  padding: 16px 16px 10px; gap: 4px; background: transparent; }
.chatwrap .bubble { max-width: 78%; margin-top: 8px; }
/* Подряд идущие сообщения одного человека жмутся ближе и теряют хвостик */
.bubble.same { margin-top: 2px; border-top-left-radius: 4px; }
.bubble.own.same { border-top-left-radius: 12px; border-top-right-radius: 4px; }

.chat-day { align-self: center; margin: 14px 0 4px; padding: 4px 12px; border-radius: 999px;
            background: #EEF0F4; color: var(--ink-soft); font-size: 12px; }
.chat-day:first-child { margin-top: 0; }
.bubble-time { display: block; text-align: right; font-family: 'JetBrains Mono', monospace;
               font-size: 10.5px; opacity: .55; margin-top: 3px; }

.chat-bar { display: flex; align-items: flex-end; gap: 8px; padding: 10px 12px;
            border-top: 1px solid var(--line); background: var(--card); }
.chat-bar textarea {
  flex: 1; min-height: 44px; max-height: 140px; resize: none; padding: 11px 14px;
  border-radius: 22px; border-color: var(--line); background: var(--paper);
}
.chat-bar textarea:focus { background: #fff; }
.ic-btn {
  flex: none; width: 44px; height: 44px; display: grid; place-items: center; cursor: pointer;
  border: 1px solid var(--line); border-radius: 50%; background: #fff; color: var(--ink-soft);
  margin: 0; padding: 0;
}
.ic-btn:hover { border-color: #C9D0DA; color: var(--ink); }
.ic-btn.send { background: var(--robe); border-color: var(--robe); color: #fff; }
.ic-btn.send:hover { background: var(--robe-dark); border-color: var(--robe-dark); }
.ic-btn svg { width: 20px; height: 20px; }
.chat-file { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ink-soft);
             padding: 0 14px 10px; }
.chat-file[hidden] { display: none; }
.chat-file button { background: none; border: 0; color: var(--mark); cursor: pointer;
                    font: inherit; padding: 0; }

@media (max-width: 780px) {
  .chatwrap { height: calc(100dvh - 300px); min-height: 340px; }
  .chatwrap .bubble { max-width: 88%; }
  /* Правило выше по файлу разворачивало старую форму в столбец, здесь она не нужна */
  .chatwrap .chat-bar { flex-direction: row; }
}

/* =========================================================
   ФОРМА ЗАЯВКИ: шаги вместо простыни полей
   ========================================================= */
.steps { max-width: 660px; display: flex; flex-direction: column; gap: 14px; }
.stepc { background: var(--card); border: 1px solid var(--line); border-radius: 16px;
         padding: 20px 22px; }
.stepc-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 4px; }
.stepc-n { flex: none; font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 700;
           color: var(--mark); letter-spacing: .1em; }
.stepc-head h3 { margin: 0; text-transform: none; font-family: 'Golos Text', sans-serif;
                 font-weight: 600; font-size: 17px; letter-spacing: 0; }
.stepc-sub { font-size: 13px; color: var(--ink-soft); margin: 0 0 14px; }
.stepc .field + .field { margin-top: 16px; }
.stepc label { font-size: 14px; margin-bottom: 6px; }
.stepc input[type=text], .stepc input[type=tel], .stepc input[type=number],
.stepc input[type=datetime-local], .stepc select, .stepc textarea {
  padding: 13px 14px; font-size: 16px; border-radius: 10px;
}
.stepc textarea { min-height: 110px; }

/* Выбор квалификации: два варианта карточками, а не выпадающим списком.
   Это решение про деньги и про то, кто звонит клиенту - его нельзя спрятать в select. */
.qual-pick { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.qual-opt { display: block; margin: 0; padding: 14px 16px; border: 1px solid var(--line);
            border-radius: 12px; cursor: pointer; transition: border-color .16s ease, background .16s ease; }
.qual-opt:hover { border-color: var(--robe); }
.qual-opt.on { border-color: var(--robe); background: #F4F7FC; box-shadow: inset 0 0 0 1px var(--robe); }
.qual-opt input { position: absolute; opacity: 0; width: 0; height: 0; }
.qual-opt b { display: block; font-size: 15px; margin-bottom: 6px; }
.qual-opt span { display: block; font-size: 13px; color: var(--ink-soft); line-height: 1.45; }
.qual-opt i { display: block; margin-top: 10px; font-style: normal;
              font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--robe); }
@media (max-width: 560px) { .qual-pick { grid-template-columns: 1fr; } }

.frow { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.frow .field { margin: 0; }
@media (max-width: 560px) { .frow { grid-template-columns: 1fr; } }
/* .frow идёт в каскаде позже .g2-.g6, поэтому при совместном использовании
   (например class="frow g6") её grid-template-columns перебивала бы их -
   составной селектор ниже побеждает по специфичности на любой ширине. */
.frow.g2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.frow.g3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
.frow.g4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
.frow.g5 { grid-template-columns: repeat(5, minmax(0,1fr)); }
.frow.g6 { grid-template-columns: repeat(6, minmax(0,1fr)); }
@media (max-width: 860px) {
  .frow.g3, .frow.g4, .frow.g5, .frow.g6 { grid-template-columns: repeat(3, minmax(0,1fr)); }
}
@media (max-width: 560px) {
  .frow.g2, .frow.g3, .frow.g4, .frow.g5, .frow.g6 { grid-template-columns: 1fr; }
}

/* Итог цены: единственное место на странице, где уместен ценник */
.price-sum { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
             background: #FFFBEB; border: 1px solid #F3E2A8; border-radius: 12px;
             padding: 13px 16px; margin-bottom: 14px; }
.price-sum .p { font-family: 'JetBrains Mono', monospace; font-size: 26px; font-weight: 700;
                line-height: 1; }
.price-sum .h { font-size: 13px; color: #7A5E00; }

/* Кнопка отправки: последний блок формы, во всю ширину колонки шагов */
.form-foot { padding: 2px 0 4px; }
.steps .form-foot .btn { width: 100%; }
@media (max-width: 620px) { .form-foot .btn { width: 100%; } }

/* =========================================================
   ЧИСЛОВЫЕ БЛОКИ СТАТИСТИКИ
   ========================================================= */
.statgrid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(168px, 1fr)); }
.stat { background: var(--card); border: 1px solid var(--line); border-radius: 14px;
        padding: 14px 16px; }
.stat .k { font-size: 11.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft); }
.stat .v { font-family: 'JetBrains Mono', monospace; font-size: 28px; font-weight: 700;
           line-height: 1.15; margin: 4px 0 2px; letter-spacing: -.02em; }
.stat .v.sm { font-size: 21px; }
.stat .h { font-size: 12px; color: var(--ink-soft); line-height: 1.4; }
.stat.good .v { color: var(--check); }
.stat.bad .v { color: var(--mark); }
@media (max-width: 420px) { .statgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
                            .stat { padding: 12px 13px; }
                            .stat .v { font-size: 23px; } }

/* Числа в таблицах прижимаем вправо: колонку цифр так читать легче */
table.t td.n, table.t th.n { text-align: right; }
table.t td.n { font-family: 'JetBrains Mono', monospace; font-variant-numeric: tabular-nums; }
.covers { display: flex; flex-wrap: wrap; gap: 4px; }
.covers .chip { font-size: 11px; padding: 4px 8px; }
.covers .chip b { font-family: 'JetBrains Mono', monospace; font-weight: 700; margin-left: 4px; }
.sec-h { margin: 32px 0 4px; }
.sec-h + .small { margin-top: 0; }

/* =========================================================
   НАСТРОЙКИ: секции с внятными заголовками
   ========================================================= */
.sect { background: var(--card); border: 1px solid var(--line); border-radius: 16px;
        margin-bottom: 14px; }
.sect-head { padding: 16px 20px 0; }
.sect-head h3 { margin: 0 0 2px; text-transform: none; font-family: 'Golos Text', sans-serif;
                font-weight: 600; font-size: 17px; letter-spacing: 0; }
.sect-head p { font-size: 13px; color: var(--ink-soft); margin: 0; }
.sect-body { padding: 16px 20px 20px; }
.sect-line { border-top: 1px solid var(--line); margin-top: 16px; padding-top: 16px; }

/* Специализации: чекбокс превращается в кликабельную плашку, пальцем попасть легко */
.checks { display: flex; flex-wrap: wrap; gap: 8px; }
.check { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; margin: 0;
         font-weight: 400; font-size: 14px; padding: 9px 14px; border-radius: 999px;
         border: 1px solid var(--line); background: #fff; color: var(--ink-soft); }
.check input { width: 16px; height: 16px; margin: 0; accent-color: var(--robe); flex: none; }
.check:hover { border-color: #C9D0DA; }
.check:has(input:checked) { border-color: var(--robe); background: #EEF2F8; color: var(--ink);
                            font-weight: 500; }
.switch { display: flex; align-items: flex-start; gap: 10px; cursor: pointer; margin: 0;
          font-weight: 400; font-size: 15px; padding: 12px 14px; border-radius: 12px;
          border: 1px solid var(--line); background: #fff; }
.switch + .switch { margin-top: 8px; }
.switch input { width: 18px; height: 18px; margin-top: 1px; accent-color: var(--robe); flex: none; }
.switch .h { display: block; font-size: 12.5px; color: var(--ink-soft); margin-top: 2px; }
.switch:has(input:checked) { border-color: var(--robe); background: #F7F9FC; }

.copy-row { display: flex; gap: 8px; align-items: stretch; }
.copy-row input { font-size: 13px; }
.copy-row .btn { flex: none; }

/* =========================================================
   ПРОВЕРКА ДОКУМЕНТОВ
   ========================================================= */
.vhead { display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
         background: var(--card); border: 1px solid var(--line); border-radius: 16px;
         padding: 16px 20px; margin-bottom: 16px; }
.vhead.wait { border-color: #EBD9AE; background: var(--warn-soft); }
.vhead.no { border-color: #F5C4BF; background: var(--mark-soft); }
.vhead.yes { border-color: #BFE3D3; background: var(--check-soft); }
.vhead-t { font-weight: 600; }
.vhead p { margin: 2px 0 0; font-size: 13.5px; color: var(--ink-soft); }

.drop { display: block; border: 1px dashed #C3CBD7; border-radius: 14px; background: #FBFBF9;
        padding: 16px; cursor: pointer; transition: border-color .15s ease, background .15s ease; }
.drop:hover { border-color: var(--robe); background: #F7F9FC; }
.drop.filled { border-style: solid; border-color: #BFE3D3; background: var(--check-soft); }
.drop-t { display: block; font-weight: 500; font-size: 15px; }
.drop-h { display: block; font-size: 13px; color: var(--ink-soft); margin-top: 3px; }
.drop input[type=file] { display: block; margin-top: 10px; font-size: 13px; width: 100%; }
.drop + .drop { margin-top: 12px; }

/* Сканы в админке: сетка превью, не портянка на всю ширину */
.docs { display: flex; flex-wrap: wrap; gap: 12px; }
.docs a { display: block; width: 200px; text-decoration: none; }
.docs img { width: 200px; height: 150px; object-fit: cover; border: 1px solid var(--line);
            border-radius: 10px; background: #fff; }
.docs a:hover img { border-color: var(--robe); }
.docs span { display: block; margin-top: 5px; }
@media (max-width: 480px) { .docs a, .docs img { width: 100%; } .docs img { height: 190px; } }

/* =========================================================
   ВХОД: первый экран после лендинга
   ========================================================= */
.auth { max-width: 440px; margin: 6px auto 0; }
.auth h1 { font-size: clamp(28px, 7vw, 40px); margin-bottom: 8px; }
.auth-lead { color: var(--ink-soft); font-size: 15px; margin-bottom: 20px; }
.role-tabs { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; padding: 4px;
             background: #EDEFF3; border-radius: 12px; margin-bottom: 18px; }
.role-tabs a { display: block; text-align: center; padding: 10px 8px; border-radius: 9px;
               font-size: 14.5px; color: var(--ink-soft); text-decoration: none; }
.role-tabs a.on { background: #fff; color: var(--ink); font-weight: 600;
                  box-shadow: 0 1px 2px rgba(16,21,28,.08); }

.auth-card { background: var(--card); border: 1px solid var(--line); border-radius: 16px;
             overflow: hidden; }
.auth-step { padding: 20px 22px; }
.auth-step + .auth-step { border-top: 1px solid var(--line); }
.auth-n { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; }
.auth-n i { font-style: normal; width: 22px; height: 22px; border-radius: 50%; flex: none;
            background: var(--ink); color: #fff; font-family: 'JetBrains Mono', monospace;
            font-size: 12px; font-weight: 700; display: grid; place-items: center; }
.auth-n span { font-weight: 600; font-size: 15px; }
.auth-bots { display: flex; gap: 10px; flex-wrap: wrap; }
.auth-bots .btn { flex: 1; min-width: 150px; }
.auth-step .code-input { border-radius: 12px; padding: 14px 12px; }
.auth-foot { text-align: center; font-size: 13.5px; color: var(--ink-soft); margin-top: 16px; }
@media (max-width: 480px) {
  .auth-step { padding: 18px 16px; }
  .auth-step .code-input { font-size: 26px; letter-spacing: .22em; }
}

/* =========================================================
   ВКЛАДКИ АДМИНКИ: подчёркивание вместо частокола кнопок
   ========================================================= */
.tabs { display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none;
        border-bottom: 1px solid var(--line); margin-bottom: 20px; }
.tabs::-webkit-scrollbar { display: none; }
.tabs a { flex: 0 0 auto; padding: 11px 14px; font-size: 14.5px; color: var(--ink-soft);
          text-decoration: none; white-space: nowrap; border-bottom: 2px solid transparent;
          margin-bottom: -1px; }
.tabs a:hover { color: var(--ink); background: #F3F5F8; border-radius: 8px 8px 0 0; }
.tabs a.on { color: var(--ink); font-weight: 600; border-bottom-color: var(--mark); }
.tabs a i { font-style: normal; font-family: 'JetBrains Mono', monospace; font-size: 11px;
            font-weight: 700; background: var(--mark); color: #fff; border-radius: 9px;
            padding: 1px 6px; margin-left: 6px; vertical-align: 1px; }

/* =========================================================
   ДЛИННЫЕ ТЕКСТЫ: FAQ и документы
   ========================================================= */
.legal.doc { font-size: 16px; }
.legal.doc h2 { letter-spacing: .03em; }
.legal.doc p, .legal.doc li { max-width: 72ch; }
.legal.doc table.t { margin: 6px 0 14px; }
.legal.doc ol { margin: 0 0 12px; padding-left: 20px; }
.legal.doc ol li { margin-bottom: 6px; line-height: 1.6; }
.qa summary { font-size: 15.5px; line-height: 1.4; }
.qa-body { font-size: 15px; color: #263040; }
.qa-body ul { margin: 0 0 10px; padding-left: 20px; }
.qa-body li { margin-bottom: 5px; line-height: 1.6; }
.qa-body .tscroll { margin: 4px 0 10px; }
@media (max-width: 560px) {
  .qa summary { padding: 14px 15px; font-size: 15px; }
  .qa-body { padding: 0 15px 14px; }
  .legal.doc { font-size: 15.5px; }
}

/* =========================================================
   АДМИНКА: плотные таблицы, компактные поля и кнопки
   Раньше в строку таблицы попадали полноразмерные поля и кнопки из форм,
   строка распухала, а действие уезжало за край экрана.
   ========================================================= */
.t { border-collapse: separate; border-spacing: 0; width: 100%; }
.t th, .t td { padding: 11px 12px; border-bottom: 1px solid var(--line); vertical-align: middle; }
.t thead th, .t tr:first-child th { position: sticky; top: 0; z-index: 2; background: var(--card);
  font-family: 'JetBrains Mono', monospace; font-size: 10.5px; letter-spacing: .12em;
  text-transform: uppercase; color: var(--ink-soft); font-weight: 500; text-align: left;
  border-bottom: 2px solid var(--ink); white-space: nowrap; }
.t tbody tr:hover td { background: #FBFBF9; }
.t td.n, .t th.n { text-align: right; font-family: 'JetBrains Mono', monospace;
                   font-variant-numeric: tabular-nums; }

/* поля и кнопки внутри таблиц - компактные */
.t .btn { min-height: 34px; padding: 0 13px; font-size: 13px; border-width: 1px; }
.t input[type="text"], .t input[type="number"], .t input[type="date"], .t select {
  min-height: 34px; padding: 6px 10px; font-size: 13.5px; border-radius: 9px;
  border: 1px solid var(--line); background: #fff; width: auto; }
/* Числовые поля узкие и в одну строку с кнопкой: на всю ширину они разваливали строку */
.t input[type="number"] { width: 84px; }
.t input[type="text"] { min-width: 150px; }
.t td form { flex-wrap: nowrap; }
.t .field { margin: 0; }
.t form { display: inline-flex; gap: 6px; align-items: center; margin: 0; flex-wrap: wrap; }

/* горизонтальная прокрутка с намёком, что справа ещё есть содержимое */
.tscroll { position: relative; overflow-x: auto; -webkit-overflow-scrolling: touch;
           border: 1px solid var(--line); border-radius: 14px; background: var(--card); }
.tscroll .t { min-width: 640px; }
.tscroll .t td:first-child, .tscroll .t th:first-child { padding-left: 16px; }
.tscroll .t td:last-child, .tscroll .t th:last-child { padding-right: 16px; }
.tscroll .t tr:last-child td { border-bottom: 0; }

/* заголовок раздела внутри вкладки */
.adm-h { display: flex; align-items: baseline; justify-content: space-between; gap: 14px;
         flex-wrap: wrap; margin: 26px 0 12px; }
.adm-h h3 { margin: 0; }
.adm-h p { margin: 0; color: var(--ink-soft); font-size: 13.5px; }

@media (max-width: 620px) {
  .t th, .t td { padding: 9px 10px; font-size: 13.5px; }
  .t .btn { min-height: 32px; padding: 0 11px; font-size: 12.5px; }
}

/* ---------- панель режимов владельца ---------- */
.ownbox { border-top: 1px solid rgba(255,255,255,.12); padding-top: 12px; margin-top: 10px; }
.ownrow { display: flex; gap: 4px; flex-wrap: wrap; }
.ownrow button { flex: 1 1 auto; min-width: 62px; padding: 6px 8px; font: 500 11.5px/1.2 inherit;
                 color: #AEB7C4; background: rgba(255,255,255,.06); border: 1px solid transparent;
                 border-radius: 8px; cursor: pointer; transition: background .15s, color .15s; }
.ownrow button:hover { background: rgba(255,255,255,.13); color: #fff; }
.ownrow button.on { background: var(--tag); color: var(--ink); font-weight: 600; }

/* ---------- быстрый выбор дня и времени ---------- */
.when-pick { display: grid; gap: 8px; margin-bottom: 10px; }
.when-row { display: flex; gap: 6px; flex-wrap: wrap; }
.when-row button { display: inline-flex; flex-direction: column; align-items: center; gap: 2px;
  min-height: 42px; padding: 6px 14px; border-radius: 12px; cursor: pointer;
  border: 1.5px solid var(--line); background: #fff; color: var(--ink);
  font: 500 14px/1.15 'Golos Text', sans-serif;
  transition: border-color .15s, background .15s, color .15s; }
.when-row button i { font-style: normal; font-size: 11px; color: var(--ink-soft);
                     font-family: 'JetBrains Mono', monospace; }
.when-row button:hover { border-color: var(--ink); }
.when-row button.on { background: var(--ink); color: #fff; border-color: var(--ink); }
.when-row button.on i { color: rgba(255,255,255,.65); }
.when-out { font-size: 13.5px; color: var(--check); font-weight: 500; }
@media (max-width: 480px) {
  .when-row button { flex: 1 1 30%; padding: 6px 8px; font-size: 13px; }
}

/* ---------- репутация партнёра в карточке заказа ---------- */
.who-box { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--line);
           display: grid; gap: 8px; }
.who-row { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; font-size: 14px; }

/* ---------- два пути открыть раздел ---------- */
.ways { display: grid; gap: 10px; max-width: 480px; margin: 16px auto; text-align: left; }
.way { border: 1.5px solid var(--line); border-radius: 12px; padding: 12px 14px;
       display: grid; gap: 3px; background: #fff; }
.way b { font-size: 14.5px; }
.way span { font-size: 13px; color: var(--ink-soft); }
.way.done { border-color: var(--check); background: var(--check-soft); }
.way.done b::after { content: " ✓"; color: var(--check); }

/* ---------- арбитраж ---------- */
.disp { border-left: 3px solid var(--warn); }
.disp.agreed, .disp.won_master { border-left-color: var(--mark); }
.disp.won_partner { border-left-color: var(--check); }
.disp-head { display: flex; align-items: center; gap: 12px; justify-content: space-between;
             flex-wrap: wrap; }
.disp-head h3 { margin: 0; }
.disp-side { border-left: 2px solid var(--line); padding-left: 12px; }
.disp-side.partner { border-left-color: var(--robe); }
.disp textarea { width: 100%; padding: 10px 12px; border: 1px solid var(--line);
                 border-radius: 10px; font: inherit; resize: vertical; }
.own-note { font-size: 10.5px; line-height: 1.35; color: #6D7A8C; margin-top: 6px; }
.disp.mine { box-shadow: 0 0 0 2px var(--warn) inset; }

/* ---------- полоса объявления над шапкой ---------- */
/* Висит над всем и на лендинге, и в кабинете. Не липкая намеренно: объявление читают
   один раз, а полоса, которая едет за тобой по всей странице, через минуту начинает
   мешать, и её закрывают не прочитав. */
.nbar { background: var(--robe); color: #fff; font-size: 14px; line-height: 1.45; }
.nbar.warn  { background: var(--warn); }
.nbar.alert { background: var(--mark); }
.nbar-in {
  max-width: 1160px; margin: 0 auto; padding: 9px 20px;
  display: flex; align-items: center; gap: 14px;
}
.nbar-body { flex: 1; min-width: 0; }
.nbar-txt { display: block; }
.nbar-more { display: none; background: none; border: 0; padding: 3px 0 0;
             color: #fff; opacity: .85; font: inherit; font-size: 12.5px;
             text-decoration: underline; cursor: pointer; }
.nbar-more:hover { opacity: 1; }
.nbar-go {
  color: #fff; text-decoration: none; white-space: nowrap; font-weight: 600;
  border-bottom: 1px solid rgba(255,255,255,.55); padding-bottom: 1px;
}
.nbar-go:hover { border-bottom-color: #fff; }
.nbar-x {
  flex: none; background: none; border: 0; color: rgba(255,255,255,.75);
  font-size: 22px; line-height: 1; cursor: pointer; padding: 0 2px;
}
.nbar-x:hover { color: #fff; }
@media (max-width: 720px) {
  .nbar-in { padding: 8px 14px; gap: 10px; align-items: flex-start; }
  .nbar { font-size: 13.5px; }
  /* Длинное объявление на телефоне съедает весь первый экран, и человек попадает
     не в кабинет, а в стену текста. Сворачиваем до четырёх строк, остальное
     разворачивается нажатием - текст не теряется, но и не заслоняет собой сервис.
     Кнопка живёт ПОД текстом, внутри .nbar-body, а не рядом с ним в общем ряду. */
  .nbar-txt.clamp {
    display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical;
    overflow: hidden; cursor: pointer;
  }
  .nbar-more.on { display: block; }
}

/* ---------- всплывающее окно при заходе ---------- */
.modal-ov {
  position: fixed; inset: 0; z-index: 10000; background: rgba(16,21,28,.55);
  display: flex; align-items: center; justify-content: center; padding: 16px;
}
.modal-box {
  position: relative; background: var(--card); border-radius: var(--radius);
  max-width: 440px; width: 100%; padding: 28px 24px 24px; box-shadow: 0 20px 60px -20px rgba(16,21,28,.4);
}
.modal-x {
  position: absolute; top: 10px; right: 10px; background: none; border: 0; color: var(--ink-soft);
  font-size: 24px; line-height: 1; cursor: pointer; padding: 4px 8px;
}
.modal-x:hover { color: var(--ink); }

/* ---------- города перекупа: сколько у него мастеров где ---------- */
/* Шестьдесят с лишним городов списком в столбик не читаются. Сетка узких строк
   помещает их на экран целиком, а заполненные подсвечены, чтобы взгляд сразу
   находил те города, где мастера есть. */
.rescity { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
           gap: 6px 14px; margin-bottom: 14px; }
.rescity-i { display: flex; align-items: center; gap: 10px; padding: 5px 8px;
             border-radius: var(--radius); border: 1px solid transparent; font-size: 14px; }
.rescity-i.on { background: var(--check-soft); border-color: #BFE3D3; }
.rescity-i span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis;
                  white-space: nowrap; color: var(--ink-soft); }
.rescity-i.on span { color: var(--ink); font-weight: 500; }
.rescity-i input { width: 62px; padding: 4px 6px; text-align: right;
                   font-family: 'JetBrains Mono', monospace; font-size: 13px; }

/* ---------- карточка «Перекуп PRO» под сеткой тарифов ---------- */
/* Тёмная, чтобы не читалась как четвёртая колонка той же таблицы: это не «тариф
   подороже», а другая роль на бирже, и выглядеть она должна иначе. */
.rcard { margin-top: 26px; background: var(--ink); color: #E8ECF2; border-radius: 10px;
         padding: 24px 26px; }
.rcard-head { display: flex; align-items: flex-start; justify-content: space-between;
              gap: 20px; flex-wrap: wrap; margin-bottom: 12px; }
.rcard-cap { font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: .14em;
             text-transform: uppercase; color: var(--tag); margin-bottom: 6px; }
.rcard-name { font-family: Oswald, sans-serif; font-weight: 700; font-size: 26px;
              letter-spacing: .02em; color: #fff; }
.rcard-price { font-family: 'JetBrains Mono', monospace; font-size: 26px; color: #fff;
               white-space: nowrap; }
.rcard-price small { font-size: 13px; color: #8B97A8; margin-left: 4px; }
.rcard-lead { color: #C3CCD9; max-width: 62ch; margin: 0 0 16px; }
.rcard-list { list-style: none; padding: 0; margin: 0 0 20px;
              display: grid; gap: 10px; }
.rcard-list li { padding-left: 22px; position: relative; color: #C3CCD9; font-size: 14.5px;
                 line-height: 1.5; }
.rcard-list li::before { content: "→"; position: absolute; left: 0; color: var(--tag); }
.rcard-list b { color: #fff; font-weight: 600; }
@media (max-width: 640px) {
  .rcard { padding: 20px 18px; }
  .rcard-name { font-size: 22px; }
  .rcard-price { font-size: 22px; }
}

/* ---------- окно «выберите город» ---------- */
/* Шире обычной модалки: внутри не вопрос «да/нет», а список из шестидесяти с лишним
   городов, и названию нужно место, чтобы не ломаться посередине. */
.modal.gate { max-width: 470px; }
.modal.gate .field { margin: 0; }
.modal.gate select { width: 100%; }
.modal.gate .hint { margin-top: 8px; }
/* «Сохранить город» в строку с «Выберу потом» на узком экране не влезает и вылезает
   за край окна. Ставим их столбиком, главное действие сверху: две кнопки во всю
   ширину читаются лучше, чем две обрезанные. */
@media (max-width: 420px) {
  .modal.gate .modal-btns { flex-direction: column-reverse; }
  .modal.gate .modal-btns .btn { flex: none; width: 100%; }
}

/* ---------- справочники: офферы и города ---------- */
/* Главное требование к этим двум страницам - не ездить вбок. Всё строится на сетках
   с auto-fit: сколько влезло в ширину окна, столько и встало в ряд. */
.ref-head { display: flex; align-items: flex-start; justify-content: space-between;
            gap: 20px; flex-wrap: wrap; margin-bottom: 18px; }
.ref-sum { display: flex; gap: 16px; flex-wrap: wrap; font-size: 13px; color: var(--ink-soft); }
.ref-sum b { font-family: 'JetBrains Mono', monospace; font-size: 16px; color: var(--ink);
             display: block; }
.ref-sum .warn b { color: var(--warn); }

.reffilter { display: flex; gap: 10px; flex-wrap: wrap; align-items: center;
             margin-bottom: 18px; }
.reffilter input[type="search"] { flex: 1 1 220px; min-width: 0; }
.reffilter select { flex: 0 1 200px; }

/* Карточка оффера */
.refgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
           gap: 16px; margin-bottom: 26px; }
.refcard { background: var(--card); border: 1px solid var(--line); border-radius: 10px;
           padding: 18px; display: flex; flex-direction: column; }
.refcard.off { background: #F6F7F9; border-style: dashed; }
.refcard-top { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; }
.refcard-name { flex: 1; min-width: 0; font-weight: 600; font-size: 16px; }
.refcard-meta { display: flex; gap: 14px; flex-wrap: wrap; font-size: 12px;
                color: var(--ink-soft); margin-bottom: 16px; }
.refcard-meta code { background: #EEF1F5; padding: 1px 6px; border-radius: 4px;
                     font-family: 'JetBrains Mono', monospace; font-size: 11px; }
.refcard-meta b { color: var(--ink); }
.refcard-foot { display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
                margin-top: auto; padding-top: 16px; }
.btn.danger { color: var(--mark); border-color: var(--mark); }

/* Поля с подписями: два в ряд, на узком - одно */
.reffields { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
             gap: 12px 16px; }
.reffields .field { margin: 0; min-width: 0; }
.reffields .hint { font-size: 11.5px; line-height: 1.35; }

/* Переключатель поменьше, для шапки карточки */
.switch.tiny { margin: 0; font-size: 13px; }

/* Список городов: свёрнутая строка - это сводка, развёрнутая - форма правки */
.citylist { display: flex; flex-direction: column; gap: 6px; margin-bottom: 26px; }
.cityrow { background: var(--card); border: 1px solid var(--line); border-radius: 8px; }
.cityrow.off { background: #F6F7F9; }
.cityrow > summary { display: flex; align-items: center; justify-content: space-between;
                     gap: 16px; padding: 11px 14px; cursor: pointer; list-style: none;
                     flex-wrap: wrap; }
.cityrow > summary::-webkit-details-marker { display: none; }
.cityrow > summary:hover { background: #F4F6F9; border-radius: 8px; }
.cityrow[open] > summary { border-bottom: 1px solid var(--line); border-radius: 8px 8px 0 0; }
.cityname { font-weight: 600; min-width: 0; }
.cityname em { font-style: normal; font-weight: 400; color: var(--ink-soft);
               font-size: 12.5px; margin-left: 8px; }
.citynums { display: flex; gap: 8px; flex-wrap: wrap; font-size: 12px; }
.citynums i { font-style: normal; color: var(--ink-soft); background: #F1F3F7;
              padding: 3px 9px; border-radius: 20px; white-space: nowrap; }
.citynums i.on { background: var(--check-soft); color: #0B6B4A; }
.citynums b { font-family: 'JetBrains Mono', monospace; }
.cityedit { padding: 16px 14px 14px; }

.refnew { margin-bottom: 8px; }

@media (max-width: 560px) {
  .cityrow > summary { align-items: flex-start; gap: 8px; }
  .cityname { flex: 1 1 100%; }
  .cityname em { display: block; margin: 2px 0 0; }
}
