/* ==========================================================================
   GlobalPost · CTA и выдача тарифов
   Один файл на всё: карточки тарифов, четыре механики заявки, полоса
   в оформлении. Подключается на страницах калькуляторов и обоих confirm.

   Ничего из существующих классов не переопределяет: все селекторы
   начинаются с gp- или gpt-. Старые .tc / .cta-* остаются нетронутыми,
   чтобы откат сводился к возврату одного файла шаблона.
   ========================================================================== */

/* Токены объявляем и для .gp-bar: полоса использует те же атомы (.gp-btn,
   .gp-field, .gp-ok), а они собраны на переменных. Без этого объявления
   внутри полосы var() не разрешается, и правило целиком отбрасывается —
   кнопка остаётся без фона и рамки, поля без скругления.
   Цвет и шрифт здесь не задаём: у полосы свои, тёмные. */
.gp-cta,
.gp-bar{
  --gp-ink:#0B111F;   --gp-ink-2:#2B3446; --gp-ink-3:#5A6478;
  --gp-ink-4:#7C8698; --gp-ink-5:#A6AEBD;
  --gp-line:#E6E9F0;  --gp-line-2:#D4D9E4; --gp-line-3:#F0F2F7;
  --gp-srf:#FFFFFF;   --gp-srf-2:#F7F8FB;  --gp-srf-3:#EFF2F7;
  --gp-go:#16A34A;    --gp-go-2:#12833C;   --gp-go-bg:#ECFDF3; --gp-go-tx:#067647;
  --gp-info:#2563EB;  --gp-info-bg:#EFF4FF; --gp-info-tx:#1D4ED8;
  --gp-bad:#DC2626;   --gp-bad-bg:#FEF2F2;
  --gp-r:16px; --gp-r-ctl:12px;
}
.gp-cta{
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  color:var(--gp-ink);
  line-height:1.5;
  font-size:15px;
}
.gp-cta *{box-sizing:border-box}
.gp-num{font-variant-numeric:tabular-nums;letter-spacing:-.02em}

/* --------------------------------------------------------------------------
   Атомы
   -------------------------------------------------------------------------- */
.gp-btn{
  min-height:46px;padding:0 20px;border:0;border-radius:var(--gp-r-ctl);
  font-family:inherit;font-size:15px;font-weight:600;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  text-decoration:none;white-space:nowrap;
  transition:background .14s,border-color .14s,color .14s;
}
.gp-btn:focus-visible{outline:2px solid var(--gp-info);outline-offset:2px}
.gp-btn[disabled]{opacity:.5;cursor:default}
.gp-btn--go{background:var(--gp-go);color:#fff}
.gp-btn--go:hover:not([disabled]){background:var(--gp-go-2)}
.gp-btn--ink{background:var(--gp-ink);color:#fff}
.gp-btn--ink:hover:not([disabled]){background:#000}
.gp-btn--out{background:var(--gp-srf);color:var(--gp-ink);border:1px solid var(--gp-line-2)}
.gp-btn--out:hover{border-color:var(--gp-ink-4)}
.gp-btn--sm{min-height:44px;padding:0 16px;font-size:14px}
.gp-btn--wide{width:100%}

.gp-pill{
  display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;
  padding:4px 10px;border-radius:999px;white-space:nowrap;line-height:1.35;
}
.gp-pill--go{background:var(--gp-go-bg);color:var(--gp-go-tx)}
.gp-pill--info{background:var(--gp-info-bg);color:var(--gp-info-tx)}
.gp-pill--out{background:none;border:1px solid var(--gp-line-2);color:var(--gp-ink-3)}

.gp-field{display:flex;flex-direction:column}
.gp-field label{font-size:13px;font-weight:500;color:var(--gp-ink-2);margin-bottom:6px}
.gp-field input{
  height:48px;padding:0 14px;font-size:16px;font-family:inherit;color:var(--gp-ink);
  background:var(--gp-srf);border:1px solid var(--gp-line-2);border-radius:var(--gp-r-ctl);
  width:100%;
}
.gp-field input:hover{border-color:var(--gp-ink-4)}
.gp-field input:focus{outline:none;border-color:var(--gp-info);box-shadow:0 0 0 3px rgba(37,99,235,.13)}
.gp-field input[aria-invalid="true"]{border-color:var(--gp-bad);background:var(--gp-bad-bg)}

.gp-err{display:none;font-size:13px;color:var(--gp-bad);margin:7px 0 0}
.gp-err.is-on{display:block}
.gp-fine{font-size:11.5px;color:var(--gp-ink-5);line-height:1.5;margin:10px 0 0}
.gp-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}
.gp-ok{
  display:none;background:var(--gp-go-bg);border:1px solid #A7E6BF;border-radius:var(--gp-r-ctl);
  padding:14px 16px;font-size:14.5px;color:var(--gp-go-tx);font-weight:500;margin-top:14px;line-height:1.55;
}
.gp-ok.is-on{display:block}
/* flex:1 без базиса даёт basis:0 — поле сжимается до нуля, если кнопка
   рядом с nowrap. В узкой колонке (карточка менеджера на планшете) от поля
   оставалось 52px и «+380» не помещалось. Базис держит минимум, wrap
   переносит кнопку, когда места действительно нет. */
.gp-row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.gp-row .gp-field{flex:1 1 180px;min-width:0}
.gp-hidden{display:none !important}

/* Определять устройство по User-Agent ненадёжно, поэтому обе версии
   пустого состояния рендерятся на сервере и переключаются стилями. */
.gp-only-narrow{display:none}
.gp-only-wide{display:block}

/* --------------------------------------------------------------------------
   Карточка тарифа
   -------------------------------------------------------------------------- */
.gpt{
  background:var(--gp-srf);border:1px solid var(--gp-line);border-radius:var(--gp-r);
  padding:18px 20px;display:grid;grid-template-columns:1fr auto;gap:14px 24px;align-items:start;
}
.gpt + .gpt{margin-top:10px}
.gpt__main{min-width:0}
.gpt__top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gpt__logo{
  height:30px;min-width:64px;padding:0 8px;border-radius:6px;background:var(--gp-srf-3);
  display:inline-flex;align-items:center;justify-content:center;flex:none;
  font-size:11.5px;font-weight:600;color:var(--gp-ink-3);letter-spacing:.02em;
}
.gpt__logo img{max-width:56px;max-height:24px;display:block}
.gpt__name{font-size:16.5px;font-weight:600;letter-spacing:-.01em}
/* Срок: дата — главное, диапазон — уточнение. Графика здесь не нужна. */
.gpt__when{display:flex;align-items:baseline;gap:9px;margin-top:11px;flex-wrap:wrap}
.gpt__when .gpt__date{font-size:16px;font-weight:600;letter-spacing:-.01em}
.gpt__when .gpt__days{font-size:13.5px;color:var(--gp-ink-4)}
.gpt__meta{font-size:13px;color:var(--gp-ink-4);margin-top:7px;line-height:1.5}
.gpt__dot{display:inline-block;width:3px;height:3px;border-radius:50%;background:var(--gp-ink-5);
          margin:0 7px;vertical-align:middle}

.gpt__side{text-align:right;display:flex;flex-direction:column;align-items:flex-end}
.gpt__price{font-size:26px;font-weight:600;letter-spacing:-.03em;line-height:1;white-space:nowrap}
.gpt__price small{font-size:15px;font-weight:500;margin-left:2px}
.gpt__alt{font-size:12.5px;color:var(--gp-ink-5);margin-top:5px}
.gpt__duty{font-size:12px;color:var(--gp-ink-5);margin-top:4px;line-height:1.4}
/* Разница считается только между тарифами с бейджами. */
.gpt__delta{font-size:12.5px;color:var(--gp-ink-3);margin-top:9px;line-height:1.45;max-width:170px}
.gpt__delta b{color:var(--gp-ink-2);font-weight:600}

.gpt--pick{border-color:#B7CDFF;box-shadow:0 0 0 3px rgba(37,99,235,.07);padding:22px}

/* Выбранная и ошибочная карточка. Классы вешает confirm-fast_v3.js
   на .mob-card — без этих правил выбор тарифа не виден. */
.gpt.active{border-color:var(--gp-go);box-shadow:0 0 0 3px rgba(22,163,74,.12)}
.gpt.active .gp-btn--out{background:var(--gp-go);border-color:var(--gp-go);color:#fff}
.gpt.error{border-color:var(--gp-bad);box-shadow:0 0 0 3px rgba(220,38,38,.1)}
.gpt--pick .gpt__name{font-size:19px}
.gpt--pick .gpt__when .gpt__date{font-size:17px}
.gpt--pick .gpt__price{font-size:31px}

.gpt__act{
  grid-column:1/-1;display:flex;justify-content:flex-end;gap:10px;
  padding-top:15px;border-top:1px solid var(--gp-line-3);
}
.gpt--row{padding:15px 18px;grid-template-columns:1fr auto auto;align-items:center;gap:16px}
.gpt--row .gpt__name{font-size:15px}
.gpt--row .gpt__price{font-size:20px}
.gpt--row .gpt__when{margin-top:7px}
.gpt--row .gpt__when .gpt__date{font-size:14px}
.gpt--row .gpt__when .gpt__days{font-size:13px}
.gpt--row .gpt__act{grid-column:auto;padding:0;border:0}

.gp-more{
  width:100%;margin-top:10px;background:none;border:1px dashed var(--gp-line-2);
  border-radius:var(--gp-r-ctl);min-height:46px;font-family:inherit;font-size:14px;
  color:var(--gp-ink-3);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px;
}
.gp-more:hover{border-color:var(--gp-ink-4);color:var(--gp-ink-2)}
.gp-more svg{width:15px;height:15px;transition:transform .18s}
.gp-more[aria-expanded="true"] svg{transform:rotate(180deg)}

/* --------------------------------------------------------------------------
   Механика 1 · строка в списке вместо цены
   -------------------------------------------------------------------------- */
.gpt--slot{border-style:dashed;border-color:var(--gp-line-2)}
.gpt--slot .gpt__logo{background:var(--gp-info-bg);color:var(--gp-info-tx)}
.gp-slot{display:flex;gap:8px;align-items:center}
.gp-slot input{
  height:46px;width:168px;padding:0 13px;font-size:15.5px;font-family:inherit;
  border:1px solid var(--gp-line-2);border-radius:var(--gp-r-ctl);background:var(--gp-srf);
  color:var(--gp-ink);
}
.gp-slot input:focus{outline:none;border-color:var(--gp-info);box-shadow:0 0 0 3px rgba(37,99,235,.13)}
.gp-slot input[aria-invalid="true"]{border-color:var(--gp-bad);background:var(--gp-bad-bg)}
.gp-slot__go{
  width:46px;height:46px;flex:none;border:0;border-radius:var(--gp-r-ctl);
  background:var(--gp-ink);color:#fff;cursor:pointer;display:flex;
  align-items:center;justify-content:center;
}
.gp-slot__go:hover:not([disabled]){background:#000}
.gp-slot__go[disabled]{opacity:.5;cursor:default}
.gp-slot__go svg{width:19px;height:19px}
.gp-slot__cap{font-size:12.5px;color:var(--gp-ink-5);margin-top:7px;text-align:right}

/* --------------------------------------------------------------------------
   Механика 2 · выбор канала
   -------------------------------------------------------------------------- */
.gp-ch{background:var(--gp-srf);border:1px solid var(--gp-line);border-radius:var(--gp-r);padding:20px}
.gp-ch__q{font-size:16.5px;font-weight:600;letter-spacing:-.01em;margin:0 0 3px}
.gp-ch__s{font-size:13.5px;color:var(--gp-ink-4);margin:0 0 16px}
.gp-ch__opts{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.gp-ch__opt{
  background:var(--gp-srf);border:1px solid var(--gp-line-2);border-radius:var(--gp-r-ctl);
  min-height:74px;cursor:pointer;font-family:inherit;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:7px;color:var(--gp-ink);
  font-size:14.5px;font-weight:500;text-decoration:none;
  transition:border-color .14s,background .14s;
}
.gp-ch__opt:hover{border-color:var(--gp-ink-4);background:var(--gp-srf-2)}
.gp-ch__opt[aria-pressed="true"]{border-color:var(--gp-ink);box-shadow:0 0 0 1px var(--gp-ink) inset}
.gp-ch__opt svg{width:22px;height:22px}
.gp-ch__opt .gp-tg{color:#229ED9}
.gp-ch__opt .gp-vb{color:#7360F2}
.gp-ch__opt .gp-ph{color:var(--gp-ink-3)}
.gp-ch__form{display:none;margin-top:14px}
.gp-ch__form.is-on{display:block}

/* --------------------------------------------------------------------------
   Механика 3 · карточка менеджера
   -------------------------------------------------------------------------- */
.gp-mg{
  background:var(--gp-srf);border:1px solid var(--gp-line);border-radius:var(--gp-r);
  padding:20px;display:flex;gap:16px;align-items:flex-start;
}
.gp-mg__av{
  width:52px;height:52px;flex:none;border-radius:50%;background:var(--gp-ink);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:600;
  overflow:hidden;position:relative;
}
/* Фото поверх инициалов: не грузится — onerror убирает img, остаются буквы. */
.gp-mg__av img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.gp-mg__b{flex:1;min-width:0}
.gp-mg__n{font-size:16px;font-weight:600}
.gp-mg__r{font-size:13px;color:var(--gp-ink-4);margin-top:1px}
.gp-mg__t{font-size:14.5px;color:var(--gp-ink-2);line-height:1.6;margin:11px 0 0}
.gp-mg__live{
  display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--gp-go-tx);
  background:var(--gp-go-bg);padding:4px 10px;border-radius:999px;margin-top:11px;
}
.gp-mg__live i{width:6px;height:6px;border-radius:50%;background:var(--gp-go);display:block}
.gp-mg__live--off{color:var(--gp-ink-3);background:var(--gp-srf-3)}
.gp-mg__live--off i{background:var(--gp-ink-5)}
.gp-mg__act{margin-top:14px}

/* --------------------------------------------------------------------------
   Механика 4 · продолжение калькулятора
   -------------------------------------------------------------------------- */
.gp-cx{background:var(--gp-srf-3);border:1px solid var(--gp-line);border-radius:var(--gp-r);padding:20px}
/* Жёсткие четыре колонки в узкой колонке резали значения до «60…» и «Ук…».
   auto-fit держит минимум 128px и сам решает, сколько колонок влезло. */
.gp-cx__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:10px}
.gp-cx__cell{background:var(--gp-srf);border:1px solid var(--gp-line);border-radius:10px;
             padding:11px 13px;min-width:0}
.gp-cx__cell dt{font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
                color:var(--gp-ink-5);margin:0 0 4px}
.gp-cx__cell dd{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;
                white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gp-cx__cell--done dd{color:var(--gp-ink-4);font-weight:500}
.gp-cx__cell--now{border-color:var(--gp-ink);box-shadow:0 0 0 2px rgba(11,17,31,.06);
                  grid-column:span 2;padding-bottom:0}
.gp-cx__cell--now dt{color:var(--gp-ink)}
/* Поле без рамки внутри ячейки было высотой 18px — мишень для мыши,
   не для пальца. Тянем на 44px за счёт нижнего padding самой ячейки. */
.gp-cx__cell--now input{
  width:100%;height:44px;border:0;padding:0;font-family:inherit;font-size:16px;font-weight:600;
  letter-spacing:-.01em;background:none;color:var(--gp-ink);
}
.gp-cx__cell--now input:focus{outline:none}
.gp-cx__act{display:flex;gap:12px;align-items:center;margin-top:14px}
.gp-cx__hint{font-size:13px;color:var(--gp-ink-4);line-height:1.5}

/* --------------------------------------------------------------------------
   Тихая полоса · замена regular_shipper
   -------------------------------------------------------------------------- */
.gp-quiet{
  display:flex;align-items:center;gap:14px;margin-top:16px;padding:15px 18px;
  border:1px solid var(--gp-line);border-radius:var(--gp-r-ctl);background:var(--gp-srf);
}
.gp-quiet__ic{
  width:34px;height:34px;border-radius:9px;background:var(--gp-srf-3);color:var(--gp-ink-3);
  display:flex;align-items:center;justify-content:center;flex:none;
}
.gp-quiet__ic svg{width:18px;height:18px}
.gp-quiet__tx{flex:1;min-width:0;font-size:14px;color:var(--gp-ink-3);line-height:1.5}
.gp-quiet__tx b{display:block;color:var(--gp-ink);font-weight:600;font-size:14.5px;margin-bottom:1px}
.gp-quiet a{
  font-size:14px;font-weight:500;color:var(--gp-info-tx);text-decoration:none;
  white-space:nowrap;min-height:44px;display:inline-flex;align-items:center;
}
.gp-quiet a:hover{text-decoration:underline;text-underline-offset:3px}

/* --------------------------------------------------------------------------
   Пустое состояние
   -------------------------------------------------------------------------- */
.gp-blank{
  background:var(--gp-srf);border:1px solid var(--gp-line);border-radius:20px;overflow:hidden;
  display:grid;grid-template-columns:1.05fr .95fr;
}
/* Обе колонки начинаются с одной линии. Пробовал центрировать левую по
   высоте — заголовок съезжал ниже карточки менеджера и читалось как сбой. */
.gp-blank__l{padding:26px 28px}
.gp-blank__r{
  padding:26px 28px;background:var(--gp-srf-2);border-left:1px solid var(--gp-line);
  display:flex;flex-direction:column;justify-content:flex-start;
}
/* Без манифеста слева остаётся один заголовок, и половина карточки пустует.
   Клетки калькулятора и так занимают всю ширину — ставим их под объяснение,
   а не рядом. Карточка менеджера остаётся в двух колонках: там текста больше. */
.gp-blank--calc{grid-template-columns:1fr}
.gp-blank--calc .gp-blank__r{border-left:0;border-top:1px solid var(--gp-line)}
.gp-blank__t{font-size:20px;font-weight:600;letter-spacing:-.02em;margin:0 0 10px;line-height:1.35}
.gp-blank__p{font-size:14.5px;color:var(--gp-ink-3);line-height:1.7;margin:0 0 16px}
/* Сетка на auto-fit оставляла в последнем ряду пустые ячейки, и сквозь них
   светился цвет разделителя — выглядело как обрезанный блок. На flex ячейки
   последнего ряда растягиваются и дырок не остаётся. */
.gp-spec{
  display:flex;flex-wrap:wrap;gap:1px;
  background:var(--gp-line);border:1px solid var(--gp-line);border-radius:var(--gp-r-ctl);overflow:hidden;
  margin:0;
}
.gp-spec > div{background:var(--gp-srf);padding:10px 12px;min-width:0;flex:1 1 84px}
/* Продолжение калькулятора уже показывает эти же параметры своими клетками.
   Оставляем манифест только там, где справа его нет: на телефоне (выбор
   канала) и в карточке менеджера. */
.gp-blank--calc .gp-spec{display:none}
.gp-spec dt{font-size:10.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
            color:var(--gp-ink-5);margin:0 0 3px}
.gp-spec dd{margin:0;font-size:14px;font-weight:600;letter-spacing:-.01em;
            white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.gp-msg{display:flex;gap:10px}
.gp-msg a{
  flex:1;min-height:48px;border:1px solid var(--gp-line-2);border-radius:var(--gp-r-ctl);
  background:var(--gp-srf);display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-size:14.5px;font-weight:500;color:var(--gp-ink);text-decoration:none;
}
.gp-msg a:hover{border-color:var(--gp-ink-4)}
.gp-msg svg{width:19px;height:19px;flex:none}
.gp-msg .gp-tg{color:#229ED9}
.gp-msg .gp-vb{color:#7360F2}
.gp-split{display:flex;align-items:center;gap:12px;margin:16px 0;color:var(--gp-ink-5);font-size:12.5px}
.gp-split::before,.gp-split::after{content:'';flex:1;height:1px;background:var(--gp-line)}

/* --------------------------------------------------------------------------
   Сбой API
   -------------------------------------------------------------------------- */
.gp-fail{
  background:var(--gp-srf);border:1px solid var(--gp-line);border-radius:20px;
  padding:30px 28px;text-align:center;
}
.gp-fail__ic{
  width:44px;height:44px;border-radius:12px;display:flex;align-items:center;
  justify-content:center;margin:0 auto 14px;background:var(--gp-info-bg);color:var(--gp-info-tx);
}
.gp-fail__ic svg{width:24px;height:24px}
.gp-fail--stop .gp-fail__ic{background:#FFF7E6;color:#B45309}
.gp-fail h3{font-size:19px;font-weight:600;margin:0 0 8px;letter-spacing:-.01em}
.gp-fail p{font-size:14.5px;line-height:1.65;color:var(--gp-ink-3);margin:0 auto 18px;max-width:460px}
.gp-fail__act{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.gp-spin{
  width:20px;height:20px;border:2px solid currentColor;border-right-color:transparent;
  border-radius:50%;animation:gp-spin .7s linear infinite;
}
@keyframes gp-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.gp-spin{animation-duration:2s}}

/* --------------------------------------------------------------------------
   Таможня в аккордеоне
   -------------------------------------------------------------------------- */
.gp-acc{
  background:var(--gp-srf);border:1px solid var(--gp-line);border-radius:14px;
  margin-top:12px;overflow:hidden;
}
.gp-acc > summary{
  list-style:none;cursor:pointer;padding:15px 18px;font-size:14.5px;font-weight:500;
  display:flex;align-items:center;gap:10px;min-height:52px;
}
.gp-acc > summary::-webkit-details-marker{display:none}
.gp-acc > summary:hover{background:var(--gp-srf-2)}
.gp-acc__chev{margin-left:auto;color:var(--gp-ink-5);transition:transform .18s;width:18px;height:18px}
.gp-acc[open] .gp-acc__chev{transform:rotate(180deg)}
.gp-acc__body{
  padding:14px 18px 18px;font-size:13.5px;line-height:1.65;color:var(--gp-ink-3);
  border-top:1px solid var(--gp-line-3);
}

/* --------------------------------------------------------------------------
   Полоса быстрой заявки · оба confirm, видна всегда
   -------------------------------------------------------------------------- */
.gp-bar{
  position:fixed;left:0;right:0;bottom:0;z-index:9000;background:#0B111F;color:#fff;
  padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -8px 28px rgba(11,17,31,.2);
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:15px;line-height:1.5;
}
.gp-bar *{box-sizing:border-box}
.gp-bar__in{max-width:1180px;margin:0 auto;padding:0 20px}
.gp-bar__line{display:flex;gap:4px;padding-top:12px}
.gp-bar__line span{flex:1;height:3px;border-radius:2px;background:rgba(255,255,255,.16)}
.gp-bar__line span.is-done{background:rgba(255,255,255,.55)}
.gp-bar__line span.is-now{background:#fff}
.gp-bar__head{display:flex;align-items:center;gap:14px;padding:11px 0 13px}
.gp-bar__tx{flex:1;min-width:0}
.gp-bar__tx b{display:block;font-size:14.5px;font-weight:500}
.gp-bar__tx span{font-size:13px;color:rgba(255,255,255,.6);display:block;margin-top:1px}
.gp-bar__btn{
  flex:none;background:#fff;color:#0B111F;border:0;border-radius:10px;min-height:44px;
  padding:0 18px;font-family:inherit;font-size:14.5px;font-weight:600;cursor:pointer;
}
.gp-bar__btn:hover{background:#E9ECF2}
.gp-bar__body{display:none;padding:0 0 16px}
.gp-bar.is-open .gp-bar__body{display:block}
.gp-bar .gp-field label{color:rgba(255,255,255,.62)}
.gp-bar .gp-field input{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.2);color:#fff}
.gp-bar .gp-field input:focus{background:rgba(255,255,255,.12);border-color:#fff;box-shadow:none}
.gp-bar .gp-err{color:#FCA5A5}
.gp-bar .gp-ok{background:rgba(22,163,74,.16);border-color:rgba(167,230,191,.4);color:#BBF7D0}
.gp-bar__tg{
  display:inline-flex;align-items:center;gap:8px;margin-top:12px;font-family:inherit;
  font-size:13.5px;color:rgba(255,255,255,.78);background:none;border:0;cursor:pointer;
  min-height:44px;padding:10px 0;text-decoration:underline;text-underline-offset:3px;
}
.gp-bar__tg:hover{color:#fff}
.gp-bar__tg svg{width:17px;height:17px;color:#7FC6EC}
/* Чтобы полоса не перекрывала кнопку «Далі» в конце формы. */
body.gp-bar-on{padding-bottom:96px}

/* ==========================================================================
   Планшет и узкий ноутбук
   Две колонки пустого состояния требуют примерно 480px на каждую. Ниже
   960px правая колонка становится такой узкой, что клетки калькулятора
   режут значения, а поле телефона схлопывается. Механику при этом не
   меняем — до 680px это по-прежнему десктопный сценарий с клавиатурой.
   ========================================================================== */
@media (max-width:960px){
  .gp-blank{grid-template-columns:1fr}
  .gp-blank__r{border-left:0;border-top:1px solid var(--gp-line)}
  .gp-blank__t{font-size:18px}
}

/* ==========================================================================
   Мобильный
   ========================================================================== */
@media (max-width:680px){
  .gpt{grid-template-columns:1fr;padding:16px;gap:0}
  .gpt__side{
    order:-1;flex-direction:row;align-items:baseline;justify-content:space-between;
    width:100%;text-align:left;margin-bottom:12px;gap:12px;flex-wrap:wrap;
  }
  /* Уходит на вторую строку под цену и читается как пояснение к ней. */
  .gpt__delta{margin:0;text-align:left;max-width:none;flex:1 1 100%}
  .gpt__alt,.gpt__duty{display:none}
  .gpt__price{font-size:24px}
  .gpt--pick .gpt__price{font-size:26px}
  .gpt__act{justify-content:stretch;margin-top:14px}
  .gpt__act .gp-btn{flex:1}
  .gpt--row{grid-template-columns:1fr;padding:16px}
  .gpt--row .gpt__act{grid-column:1/-1;margin-top:12px;padding-top:12px;border-top:1px solid var(--gp-line-3)}

  /* У обычной карточки цена уходит наверх — на телефоне это первое, что ищут.
     У грузовой строки в этом месте поле телефона, и наверху оно оказывается
     раньше названия тарифа: человек видит пустой инпут без объяснения.
     Поэтому порядок здесь возвращаем обычный. */
  .gpt--slot .gpt__side{order:0;flex-direction:column;align-items:stretch;
                        text-align:left;margin-bottom:0;margin-top:14px}
  .gp-slot{width:100%}
  .gp-slot input{flex:1;width:auto}
  .gp-slot__cap{text-align:left}

  .gp-ch__opts{grid-template-columns:1fr}
  .gp-ch__opt{flex-direction:row;justify-content:flex-start;gap:12px;padding:0 16px;min-height:56px}

  .gp-mg{flex-direction:column;gap:12px}
  .gp-mg__act .gp-btn{width:100%}

  .gp-cx__grid{grid-template-columns:1fr 1fr}
  .gp-cx__cell--now{grid-column:1/-1}
  .gp-cx__act{flex-direction:column;align-items:stretch}
  .gp-cx__act .gp-btn{width:100%}

  .gp-quiet{flex-wrap:wrap;gap:10px}
  .gp-quiet__tx{flex:1 1 100%;order:2}
  .gp-quiet a{order:3;flex:1 1 100%;justify-content:center;border:1px solid var(--gp-line-2);
              border-radius:var(--gp-r-ctl);min-height:46px}

  /* Пустое состояние: объяснение сверху, мессенджеры перед полем.
     В тяжёлом сегменте 61% заходов с телефона и 82% из них холодные —
     такой человек скорее тапнет мессенджер, чем наберёт номер. */
  .gp-blank{grid-template-columns:1fr}
  .gp-blank__l{padding:20px}
  .gp-blank__r{padding:20px;border-left:0;border-top:1px solid var(--gp-line)}
  .gp-blank__t{font-size:17px}
  /* Второй абзац объяснения отодвигает действие ниже сгиба — убираем. */
  .gp-blank__p{display:none}
  .gp-only-narrow{display:block}
  .gp-only-wide{display:none}
  /* Справа теперь выбор канала, параметров там нет — манифест возвращаем. */
  .gp-blank--calc .gp-spec{display:flex}
  .gp-msg{flex-direction:column}

  .gp-row{flex-direction:column;align-items:stretch}
  /* Базис 180px задан для строки. В колонке он становится высотой —
     между полем и кнопкой появлялся провал в полтораста пикселей. */
  .gp-row .gp-field{flex:0 0 auto}
  .gp-row .gp-btn{width:100%}
  .gp-fail{padding:24px 18px}
  .gp-fail__act .gp-btn{width:100%}

  /* Полоса: один ряд, подзаголовок прячется */
  .gp-bar__in{padding:0 14px}
  .gp-bar__line{padding-top:9px;gap:3px}
  .gp-bar__head{padding:9px 0 11px;gap:10px}
  .gp-bar__tx b{font-size:13.5px}
  .gp-bar__tx span{display:none}
  .gp-bar__btn{font-size:13.5px;padding:0 15px}
  .gp-bar__body{padding-bottom:14px}
  .gp-bar__body .gp-row{flex-direction:column;align-items:stretch}
  .gp-bar__body .gp-row .gp-btn{width:100%}
  body.gp-bar-on{padding-bottom:82px}
}
