/* Админка — та же типографика, но плотнее: здесь работают, а не любуются. */

/* Логотип и вкладки в две строки: в одну они не помещаются на узком экране,
   и «Вход» уезжал за край. */
.topbar{
  display:flex;flex-direction:column;gap:12px;
  padding:calc(14px + var(--top-inset)) var(--pad) 0;border-bottom:1px solid var(--line);
  position:sticky;top:0;background:var(--ink);z-index:10;
}
.topbar .logo--sm{font-size:15px}

.tabs{display:flex;width:100%}
.tab{
  flex:1;background:transparent;border:0;color:var(--muted);
  font-family:var(--font);font-size:11px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;padding:10px 4px;cursor:pointer;
  border-bottom:1px solid transparent;white-space:nowrap;
  display:flex;align-items:center;justify-content:center;gap:6px;
}
.tab.active{color:var(--paper);border-bottom-color:var(--paper)}

.badge{
  min-width:17px;padding:1px 5px;
  background:var(--paper);color:var(--ink);border-radius:9px;
  font-size:10px;font-weight:700;letter-spacing:0;
}
/* Без !important браузерное правило для [hidden] проигрывает display выше. */
.badge[hidden]{display:none !important}

.pane{display:none;padding:var(--pad);padding-bottom:calc(60px + var(--bottom-inset))}
.pane.active{display:block}

.empty{color:var(--muted);text-align:center;padding:70px 0;font-size:14px}

/* ─── карточка заявки ────────────────────────────────────────────────────── */

.card{border:1px solid var(--line);border-radius:2px;margin-bottom:16px;overflow:hidden}
.card__photo{width:100%;aspect-ratio:3/4;max-height:52dvh;object-fit:cover;display:block;background:var(--field)}
.card__body{padding:16px}
.card__name{font-size:21px;font-weight:500;letter-spacing:-.01em;text-transform:uppercase}
.card__meta{color:var(--muted);font-size:12px;margin-top:6px;line-height:1.6}
.card__meta a{color:var(--muted)}
.card__actions{display:flex;gap:8px;padding:0 16px 16px}
.card__actions .btn{min-height:46px;font-size:11px;margin:0}
.btn--no{background:transparent;color:var(--paper);border:1px solid var(--line)}

/* ─── строки базы ────────────────────────────────────────────────────────── */

.row{
  display:flex;align-items:center;gap:12px;
  padding:13px 0;border-bottom:1px solid var(--line);
}
.row__name{flex:1;min-width:0}
.row__name b{display:block;font-weight:500;font-size:15px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row__name span{color:var(--muted);font-size:12px}
.pill{
  font-size:9px;letter-spacing:.12em;text-transform:uppercase;
  padding:4px 7px;border:1px solid var(--line);border-radius:2px;color:var(--muted);
}
.pill--approved{border-color:var(--paper);color:var(--paper)}
.pill--pending{border-color:rgba(255,255,255,.5);color:rgba(255,255,255,.8)}

.search{
  width:100%;padding:13px 0;margin-bottom:8px;background:transparent;
  border:0;border-bottom:1px solid var(--line);color:var(--paper);
  font-family:var(--font);font-size:17px;font-weight:300;border-radius:0;
}
.search:focus{outline:0;border-bottom-color:var(--paper)}

/* ─── статистика ─────────────────────────────────────────────────────────── */

/* Три плитки в ряд: на телефоне и в мини-апе шесть цифр ложатся в две строки
   ровной сеткой, а не в четыре колонки, где подписи не помещаются */
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--line);border:1px solid var(--line);margin-bottom:26px}
.stat{background:var(--ink);padding:18px 16px}
.stat b{display:block;font-size:29px;font-weight:500;letter-spacing:-.02em}
.stat{min-width:0}
.stat span{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}

/* ─── сканер ─────────────────────────────────────────────────────────────── */

.scan-result{
  min-height:46dvh;display:flex;flex-direction:column;
  align-items:center;justify-content:center;text-align:center;
  border:1px solid var(--line);border-radius:2px;padding:26px;margin-bottom:18px;
}
.scan-result.ok{background:var(--ok);color:var(--ink);border-color:var(--ok)}
.scan-result.no{background:var(--danger);color:var(--paper);border-color:var(--danger)}
.scan-result__msg{
  font-size:clamp(22px,6.5vw,30px);font-weight:500;
  text-transform:uppercase;letter-spacing:-.01em;line-height:1.08;
  max-width:14ch;overflow-wrap:break-word;
}
.scan-result__name{font-size:17px;margin-top:12px;opacity:.85}
.scan-result__idle{color:var(--muted);font-size:13px}
.scan-photo{width:120px;height:160px;object-fit:cover;margin-bottom:18px;border-radius:2px}

select.field-select{
  width:100%;padding:13px 0;background:transparent;color:var(--paper);
  border:0;border-bottom:1px solid var(--line);font-family:var(--font);
  font-size:16px;margin-bottom:18px;border-radius:0;
}
select.field-select option{background:var(--ink)}

/* ─── карточка человека ──────────────────────────────────────────────────── */

.sheet{
  position:fixed;inset:0;background:var(--ink);z-index:50;
  display:flex;flex-direction:column;
  animation:rise .3s cubic-bezier(.16,1,.3,1) both;
}
.sheet[hidden]{display:none !important}

.sheet__bar{
  display:flex;align-items:center;gap:14px;flex:none;
  padding:14px var(--pad);border-bottom:1px solid var(--line);
  padding-top:calc(14px + var(--top-inset));
}
.sheet__back{
  background:transparent;border:0;color:var(--paper);cursor:pointer;
  font-family:var(--font);font-size:22px;line-height:1;padding:0;
}
.sheet__title{
  font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);
}
.sheet__body{
  flex:1;overflow-y:auto;padding:var(--pad);
  padding-bottom:calc(var(--pad) + var(--bottom-inset));
}

.sheet__photo{
  width:100%;aspect-ratio:3/4;max-height:44dvh;object-fit:cover;
  display:block;background:var(--field);margin-bottom:22px;border-radius:2px;
}
.sheet__nophoto{
  width:100%;aspect-ratio:3/2;background:var(--field);border:1px dashed var(--line);
  display:flex;align-items:center;justify-content:center;margin-bottom:22px;
  color:var(--muted);font-size:12px;letter-spacing:.14em;text-transform:uppercase;
}

.statuses{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:26px}
.status-btn{
  background:transparent;border:1px solid var(--line);border-radius:2px;
  color:var(--muted);font-family:var(--font);font-size:10px;font-weight:500;
  letter-spacing:.12em;text-transform:uppercase;padding:8px 11px;cursor:pointer;
  transition:.15s;
}
.status-btn.on{background:var(--paper);border-color:var(--paper);color:var(--ink)}

.facts{border-top:1px solid var(--line);margin-top:8px;padding-top:16px;margin-bottom:26px}
.fact{display:flex;justify-content:space-between;gap:16px;padding:7px 0;font-size:13px}
.fact dt{color:var(--muted);flex:none}
.fact dd{margin:0;text-align:right;word-break:break-word}

.field textarea{
  width:100%;padding:12px 0;background:transparent;border:0;
  border-bottom:1px solid var(--line);color:var(--paper);
  font-family:var(--font);font-weight:300;font-size:16px;resize:vertical;
  min-height:64px;border-radius:0;
}
.field textarea:focus{outline:0;border-bottom-color:var(--paper)}

.danger-zone{border-top:1px solid var(--line);margin-top:30px;padding-top:20px}
.btn--danger{background:transparent;color:var(--danger);border:1px solid var(--danger)}

.saved{
  text-align:center;font-size:11px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);min-height:16px;margin-top:12px;
}
.row{cursor:pointer}
.row:active{opacity:.6}

/* ─── список мероприятий ─────────────────────────────────────────────────── */

.event-row{
  border:1px solid var(--line);border-radius:2px;padding:16px;margin-bottom:12px;
  cursor:pointer;
}
.event-row:active{opacity:.6}
.event-row__title{font-size:18px;font-weight:500;text-transform:uppercase;letter-spacing:-.01em}
.event-row__meta{color:var(--muted);font-size:12px;margin-top:6px;line-height:1.6}
.event-row.off{opacity:.4}
.event-row__stat{
  font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin-top:10px;
}


/* ─── сколько может пригласить ───────────────────────────────────────────── */

.counter{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-top:10px}
.counter__btn{
  aspect-ratio:1;padding:0;background:transparent;border:1px solid var(--line);
  border-radius:2px;color:var(--muted);font-family:var(--font);font-size:17px;
  font-weight:500;cursor:pointer;transition:.15s;
}
.counter__btn.on{background:var(--paper);border-color:var(--paper);color:var(--ink)}
.counter__btn--inf{font-size:24px;font-weight:400}

/* ─── новые и отклонённые ────────────────────────────────────────────────── */

.seg{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:18px}
.seg__btn{
  display:flex;align-items:center;justify-content:center;gap:8px;
  background:transparent;border:1px solid var(--line);border-radius:2px;
  color:var(--muted);font-family:var(--font);font-size:10px;font-weight:500;
  letter-spacing:.12em;text-transform:uppercase;padding:11px 8px;cursor:pointer;
  transition:.15s;
}
.seg__btn span{letter-spacing:0;font-size:11px}
.seg__btn span:empty{display:none}
.seg__btn.on{background:var(--paper);border-color:var(--paper);color:var(--ink)}

/* ─── кто пригласил ──────────────────────────────────────────────────────── */

.ref-btn{
  display:flex;align-items:center;gap:10px;width:100%;margin-top:14px;
  padding:12px 14px;background:transparent;border:1px solid var(--line);border-radius:2px;
  color:var(--paper);font-family:var(--font);font-size:14px;text-align:left;cursor:pointer;
}
.ref-btn span{flex:none;color:var(--muted);font-size:12px}
.ref-btn b{flex:1;min-width:0;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ref-btn::after{content:"→";flex:none;color:var(--muted)}
.ref-btn:active{opacity:.6}
.sheet__body > .ref-btn{margin:0 0 22px}

/* Заявка, открытая из уведомления */
.card--focus{border-color:var(--paper)}


/* ─── вход ───────────────────────────────────────────────────────────────── */

.login{
  position:fixed;inset:0;z-index:60;background:var(--ink);
  display:flex;flex-direction:column;justify-content:center;gap:16px;
  padding:calc(24px + var(--top-inset)) var(--pad) calc(24px + var(--bottom-inset));
}
.login[hidden]{display:none !important}
.login .btn{margin:0}
.login .dim{min-height:3em}


/* ─── журнал согласий ────────────────────────────────────────────────────── */

.sheet--top{z-index:55}
#c-journal{margin-bottom:26px}
.journal-who{margin:0 0 6px}
.jrow{display:grid;gap:4px;padding:14px 0;border-bottom:1px solid var(--line)}
.jrow__when{font-size:12px;letter-spacing:.04em;color:var(--muted);font-variant-numeric:tabular-nums}
.jrow__what{font-size:15px;font-weight:500}
.jrow__what span{font-size:13px;font-weight:400;color:var(--muted)}
.jrow__act{font-size:14px;color:var(--muted)}
.jrow__act b{color:var(--paper);font-weight:600}
.jrow__text{font-size:14px;line-height:1.45}
.jrow__text--none{color:var(--muted);font-style:italic}
.jrow__device{font-size:12px;color:var(--muted);overflow-wrap:anywhere}
.jrow__more summary{margin-top:4px;font-size:12px;color:var(--muted);cursor:pointer}
.jrow__more dl{display:grid;gap:2px;margin:8px 0 0}
.jrow__more dt{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.jrow__more dd{margin:0 0 8px;font-size:12px;overflow-wrap:anywhere}
.jrow__more .mono{font-family:ui-monospace,Menlo,monospace}


/* ─── браузер ────────────────────────────────────────────────────────────── */

a.btn{text-decoration:none}

.topbar__row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.topbar__exit{
  background:transparent;border:0;padding:4px 0;cursor:pointer;
  color:var(--muted);font-family:var(--font);font-size:11px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;
}
.topbar__exit:hover{color:var(--paper)}

/* С компьютера админка та же, что в Telegram, — колонкой по центру. Фон и
   прокрутка остаются во всю ширину, сужаются только поля по бокам.
   Фото — в своих пропорциях: растянутое на всю колонку, оно обрезало бы лица. */
@media (min-width:800px){
  .topbar, .pane, .sheet__bar, .sheet__body{
    padding-left:max(var(--pad), calc((100% - 720px) / 2));
    padding-right:max(var(--pad), calc((100% - 720px) / 2));
  }
  .login{
    padding-left:max(var(--pad), calc((100% - 420px) / 2));
    padding-right:max(var(--pad), calc((100% - 420px) / 2));
  }
  .stats{grid-template-columns:repeat(auto-fit,minmax(110px,1fr))}
  .card__photo{width:auto;height:min(52dvh,540px);max-height:none;margin-inline:auto}
  .sheet__photo{width:auto;height:min(44dvh,480px);max-height:none;margin-inline:auto}
}

/* ─── долгие открытия приложения ─────────────────────────────────────────── */

/* Список тех, у кого мини-ап открывался секундами: с ними стоит поговорить */
.slow-opens{margin:-14px 0 26px}
.slow-opens:empty{display:none}

/* Подвал списка участников: сколько показано из скольких и кнопка догрузки */
.base__more{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:14px 0 4px;color:var(--muted);font-size:13px;
}
.base__more .btn{width:auto;padding:6px 14px;font-size:13px}

/* Открыто из приложения: своя кнопка возврата видна всегда, а шапка не уезжает
   под плавающие кнопки Telegram */
body.from-app .topbar__exit{
  display:inline-flex;align-items:center;gap:6px;
  background:transparent;border:0;color:var(--muted);
  font:inherit;font-size:13px;padding:4px 0;cursor:pointer;
}
body.from-app .topbar__exit:active{opacity:.6}
