  /* Таблица кампаний. Пузырь шире обычного: это сводка, а не реплика в диалоге. */
  /* ── Экран «Все кампании»: полноширинная страница, а не реплика в ленте ──
     Шапка и панель фильтров прибиты сверху, таблица скроллится под ними: список
     на сотню кампаний иначе уносит фильтры за верхний край экрана. */
  .camp-page { position:absolute; inset:0; display:flex; flex-direction:column;
    background:var(--bg); z-index:3; overflow:hidden }
  .camp-hd { padding:18px 28px 14px; border-bottom:1px solid var(--faint);
    display:flex; align-items:flex-start; gap:16px; flex:0 0 auto }
  .camp-eyebrow { font-family:var(--mono); font-size:11.5px; color:var(--muted); margin-bottom:4px }
  .camp-hd h3 { margin:0; font-family:var(--font-display); font-size:26px; font-weight:700; letter-spacing:.1px }
  .camp-sum { margin-top:6px; font-size:12.5px; color:var(--muted) }
  .camp-sum b { color:var(--text); font-family:var(--mono); font-weight:400 }
  .camp-bar { padding:14px 28px; border-bottom:1px solid var(--faint); flex:0 0 auto;
    display:flex; flex-direction:column; gap:12px }
  .camp-row1 { display:flex; gap:10px; align-items:center }
  .camp-search { flex:1; max-width:460px; display:flex; align-items:center; gap:8px;
    padding:9px 15px; background:var(--paper); box-shadow:var(--shadow-chip); border:0; border-radius:var(--radius-mark) }
  .camp-search input { flex:1; border:0; outline:0; background:none; font:inherit; font-size:13px }
  .camp-search input::placeholder { color:var(--muted) }
  .camp-kbd { font-family:var(--mono); font-size:10.5px; color:var(--muted);
    padding:1px 6px; border:1px solid var(--faint); border-radius:4px }
  .camp-sort { margin-left:auto; display:flex; align-items:center; gap:6px; padding:6px 12px;
    background:var(--paper); box-shadow:var(--shadow-chip); border:0; border-radius:var(--radius-mark); font-size:12.5px; color:var(--ink-muted) }
  .camp-sort select { border:0; outline:0; background:none; font:inherit; font-size:12.5px;
    font-weight:500; color:var(--text); cursor:pointer }
  .camp-chips { display:flex; gap:8px; align-items:center; flex-wrap:wrap }
  .camp-chip { padding:6px 16px 9px; border-radius:var(--radius-mark); cursor:pointer;
               background:var(--paper); box-shadow:var(--shadow-chip);
    color:var(--ink-strong); border:1px solid var(--line); font:inherit; font-size:12.5px;
    display:inline-flex; align-items:center; gap:6px; white-space:nowrap }
  .camp-chip i { font-style:normal; font-family:var(--mono); font-size:11px; color:var(--muted) }
  .camp-chip.on { background:var(--ink); border-color:transparent; box-shadow:none;
                  color:var(--paper); font-variation-settings:var(--axis-active) }
  .camp-chip.on i { color:var(--paper); opacity:.7 }
  .camp-scroll { flex:1; overflow:auto; padding:0 28px 24px }
  .camp-r { display:grid; grid-template-columns:1fr 110px 130px 160px 110px 70px 80px 40px;
    align-items:center; gap:14px; padding:12px 14px; border-bottom:1px solid var(--faint);
    font-size:13px; cursor:pointer }
  .camp-r:not(.camp-th):hover { background:var(--panel) }
  .camp-th { position:sticky; top:0; z-index:2; background:var(--bg); cursor:default;
    font-size:10.5px; color:var(--muted); text-transform:uppercase; letter-spacing:.6px; font-weight:600 }
  .camp-r .r { text-align:right }
  .camp-name b { display:block; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
  .camp-name small { display:block; font-size:11.5px; color:var(--muted); margin-top:2px;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
  .camp-name small i { font-style:normal; font-family:var(--mono) }
  .camp-per { font-family:var(--mono); font-size:11.5px; color:var(--ink-strong); line-height:1.4 }
  .camp-per small { display:block; color:var(--muted); font-size:11.5px }
  .camp-per small.live { color:var(--ink-strong) }
  .camp-mono { font-family:var(--mono); font-size:12.5px; color:var(--ink-strong) }
  .camp-bud { font-family:var(--mono); font-size:12.5px; color:var(--text); text-align:right }
  .camp-bud span { color:var(--muted) }
  /* Дорожка бюджета видна всегда: пустая полоса читается как «не оплачено»,
     а её отсутствие — как «данных нет». Это разные вещи. */
  .camp-track { margin-top:4px; height:3px; background:var(--faint); border-radius:2px; overflow:hidden }
  .camp-fill { height:100%; background:var(--ink-strong) }
  .camp-fill.done { background:var(--muted) }
  .camp-b { display:inline-flex; align-items:center; gap:6px; padding:3px 9px; border-radius:999px;
    font-size:11px; font-weight:500; color:var(--ink-strong); background:#ece8de; font-style:normal }
  .camp-b s { width:6px; height:6px; border-radius:3px; background:var(--muted); text-decoration:none }
  .camp-b.ok { background:#dcecdf } .camp-b.ok s { background:var(--ink-strong) }
  .camp-b.wait { background:#fbf0d4 } .camp-b.wait s { background:var(--ink-strong) }
  .camp-b.bad { background:#f6e2de } .camp-b.bad s { background:#a5432f }
  .camp-more { color:var(--muted); font-size:14px; text-align:right }
  .camp-foot { margin-top:18px; font-size:12px; color:var(--muted) }
  .camp-none { padding:40px 14px; text-align:center; color:var(--muted); font-size:12.5px }
  @media(max-width:1000px){
    .camp-r { grid-template-columns:1fr 104px 118px 150px }
    .camp-r > :nth-child(n+5) { display:none }
  }
  /* Плитки статистики: числа крупные и с засечками — как суммы в счёте, чтобы экран
     читался одной семьёй с остальным кабинетом. */
  .st-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(165px,1fr)); gap:10px; margin-top:14px }
  .st-tile { border:0; border-radius:var(--radius-card); padding:14px 15px; background:var(--ink-faint) }
  .st-cap { font-size:9.5px; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--muted) }
  .st-val { font-family:var(--font-script); font-weight:300; font-size:30px; line-height:1.05; margin:5px 0 3px; font-variant-numeric:tabular-nums }
  .st-val.none { color:var(--muted); font-weight:400 }
  .st-sub { font-size:11px; color:var(--muted); line-height:1.45 }
  .st-fresh { color:var(--muted); font-size:11.5px }
  .st-chart { margin-top:16px; border:0; border-radius:var(--radius-card); padding:16px 16px 12px; background:var(--ink-faint) }
  .st-chart h5 { margin:0 0 2px; font-size:13px; font-weight:700 }
  .st-chart .rng { font-size:11px; color:var(--muted) }
  .st-plot { width:100%; height:auto; display:block; margin-top:10px }
  /* Наведение подсвечивает столбец: это единственный способ прочитать конкретный день,
     не подписывая каждый — подписи на всех столбцах шумят и прячут форму. */
  .st-plot .bar { fill:#1f1e1c; transition:opacity .12s }
  .st-plot .bar:hover { opacity:.62 }
  .st-plot .dot { fill:var(--paper); stroke:var(--ink); stroke-width:2 }
  .st-plot .ln { fill:none; stroke:var(--accent); stroke-width:2 }
  .st-plot .gl { stroke:var(--border); stroke-dasharray:2 3 }
  .st-plot .ax { fill:var(--muted); font-size:9px }
  .st-blank { display:flex; align-items:center; justify-content:center; height:120px; margin-top:10px;
    border:1px dashed var(--border); border-radius:9px; color:var(--muted); font-size:11.5px;
    text-align:center; padding:0 18px; line-height:1.5 }
  /* компактная строка «подпись слева — контрол справа», всё на одной линии */
  .fldrow { display:flex; align-items:center; gap:12px; margin-top:11px }
  .fldrow > .n { flex:0 0 120px; font-size:13px; font-weight:600 }
  .fldrow > .v { flex:0 0 auto; min-width:82px; text-align:right; font-variant-numeric:tabular-nums; font-size:12px; color:var(--muted) }
  .fldrow .seg { flex:1 }
  .seg { display:flex; border:1px solid var(--border); border-radius:9px; overflow:hidden }
  .seg button { flex:1; border:0; background:transparent; padding:7px; font:inherit; font-size:12.5px; cursor:pointer; color:var(--ink-strong) }
  .seg button + button { border-left:1px solid var(--border) }
  .seg button.sel { background:var(--ink); color:var(--paper) }
  .seg button small { display:block; opacity:.6; font-size:10px }
  .calc-calc { margin-top:12px; padding-top:10px; border-top:1px solid var(--border) }
  .priceline { display:flex; justify-content:space-between; gap:12px; font-size:12.5px; padding:4px 0; color:var(--muted) }
  .priceline .rub { color:var(--text); font-variant-numeric:tabular-nums; flex:0 0 auto }
  .pricetot { display:flex; justify-content:space-between; align-items:baseline; margin-top:8px; padding-top:10px; border-top:1px solid var(--border) }
  .pricetot .n { font-weight:700; font-size:15px }
  .pricetot .rub { font-family:var(--font-script); font-weight:300; font-size:26px; font-variant-numeric:tabular-nums }
  .fldrow .dtin { flex:1; border:0; border-radius:var(--radius-mark); background:var(--paper); box-shadow:var(--shadow-chip); padding:7px 13px;
                  font:inherit; font-size:12.5px; color:var(--text) }
  .fldrow .dayin { flex:0 0 92px; width:92px; text-align:center;
                   font-variant-numeric:tabular-nums; -moz-appearance:textfield }
  .fldrow .dayin::-webkit-outer-spin-button,
  .fldrow .dayin::-webkit-inner-spin-button { -webkit-appearance:none; margin:0 }
