/* ============================================================
   ПДА-Сеть · base.css — ПОЛНАЯ ВЕРСИЯ S10 (пакет B)
   Состав: базовый набор (S5) + воронка (nb-r2) + админ (nb-r3)
   + реестр/анонсы (P2.1) + файлы (P2.2) + гроссбух (P3.1)
   + S10: карточки Выходов с обложкой (J-388), ростер в карточке (J-407),
   «Персонажи» списком с аккордеоном (J-405).
   Блок мульти-темы сохранён для возврата (J-251) — не используется.
   ============================================================ */

* { box-sizing: border-box; }
html, body { margin: 0; }
body {
  background: var(--bg); color: var(--ink);
  font: 14px/1.55 var(--font-body); min-height: 100vh;
}
a { color: var(--accent); }

h1, h2, h3 {
  font-family: var(--font-head); font-weight: 700;
  text-transform: var(--head-transform, none);
  letter-spacing: var(--head-spacing, .05em);
}
h1 { font-size: 22px; margin: 0 0 12px; }
h2 { font-size: 17px; margin: 0 0 8px; }
p  { margin: 6px 0; }

/* --- каркас страницы --- */
.app-shell { max-width: 1060px; margin: 0 auto; padding: 18px 16px 70px; }
.foot { margin-top: 40px; font-size: 11px; text-align: center; }
.auth-panel { max-width: 430px; margin: 7vh auto; }

/* --- верхняя навигация (КПП) --- */
nav.top {
  display: flex; flex-wrap: wrap; gap: 6px 16px; align-items: center;
  border-bottom: 2px solid var(--line); padding: 8px 0 10px; margin-bottom: 22px;
}
nav.top .brand {
  font: 700 16px var(--font-head); letter-spacing: .14em; text-transform: uppercase;
  color: var(--accent); text-decoration: none; margin-right: auto;
}
nav.top a { color: var(--ink); text-decoration: none; padding: 2px 0; }
nav.top a:hover { color: var(--accent); }
nav.top a.active { color: var(--accent); box-shadow: inset 0 -2px 0 var(--accent); }
.linklike {
  background: none; border: none; padding: 2px 0; color: var(--muted);
  cursor: pointer; font: inherit;
}
.linklike:hover { color: var(--accent); }

/* --- панели --- */
.panel {
  background-color: var(--panel); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 16px; margin: 0 0 var(--gap);
}
.panel-head {
  font-family: var(--font-head); font-size: 17px; font-weight: 700; margin: 0 0 8px;
}
.muted { color: var(--muted); }
.error { color: var(--danger); }
.ok-text { color: var(--ok); }

/* --- формы --- */
.field {
  display: block; margin: 0 0 12px; font-family: var(--font-head);
}
input, select, textarea {
  width: 100%; background: var(--panel-2); border: 1px solid var(--line);
  color: var(--ink); font: inherit; padding: 8px 10px; border-radius: var(--radius);
}
input:focus, select:focus, textarea:focus { outline: 1px solid var(--accent); }
textarea { resize: vertical; }
.check { display: flex; gap: 8px; align-items: center; }
.check input { width: auto; }

/* --- кнопки --- */
.btn {
  display: inline-block; background: var(--accent); color: var(--accent-ink);
  border: 1px solid var(--line); font: 700 14px var(--font-head); letter-spacing: .04em;
  padding: 8px 16px; cursor: pointer; border-radius: var(--radius); text-decoration: none;
}
.btn:disabled { opacity: .45; cursor: default; }
.btn.ghost { background: transparent; color: var(--accent); }
.btn.danger { background: var(--danger); color: #fff; }

/* --- чипы статусов --- */
.chip {
  display: inline-block; padding: 1px 8px; border: 1px solid var(--line);
  border-radius: 2px; font-size: 12px; font-family: var(--font-head);
}
.chip.ok     { color: var(--ok);     border-color: var(--ok); }
.chip.warn   { color: var(--warn);   border-color: var(--warn); }
.chip.danger { color: var(--danger); border-color: var(--danger); }
.chip.accent { color: var(--accent); border-color: var(--accent); }

/* --- штамп --- */
.stamp {
  display: inline-block; border: 2px solid var(--accent); color: var(--accent);
  padding: 2px 12px; font-family: var(--font-head); font-weight: 700;
  letter-spacing: .14em; text-transform: uppercase;
}

/* --- таблицы --- */
table.data { width: 100%; border-collapse: collapse; font-size: 13px; }
table.data th, table.data td {
  border: 1px solid var(--line); padding: 6px 8px;
  text-align: left; vertical-align: top;
}
table.data th { color: var(--muted); font-family: var(--font-head); }

/* --- выбор темы (блок мульти-темы; сохранён для возврата, J-251) --- */
.theme-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px;
}
.theme-card {
  text-align: left; background: var(--panel-2); color: var(--ink);
  border: 1px solid var(--line); padding: 10px; cursor: pointer; font: inherit;
  border-radius: var(--radius);
}
.theme-card.active { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
.swatch { display: inline-flex; gap: 3px; margin-right: 8px; vertical-align: -2px; }
.swatch i {
  width: 13px; height: 13px; display: inline-block;
  border: 1px solid rgba(0,0,0,.25);
}

/* --- воронка (nb-r2) --- */
.steps { display:flex; flex-wrap:wrap; margin:8px 0 12px;
  font-family:var(--font-head); font-size:12px; }
.step { padding:2px 10px; border:1px solid var(--line); border-right:none;
  color:var(--muted); white-space:nowrap; }
.step:first-child { border-radius:var(--radius) 0 0 var(--radius); }
.step:last-child  { border-right:1px solid var(--line);
  border-radius:0 var(--radius) var(--radius) 0; }
.step.done { color:var(--ok); border-color:var(--ok); }
.step.now  { color:var(--accent-ink); background:var(--accent); border-color:var(--accent); }

.q-card { margin:0 0 var(--gap); }
.opt { display:flex; gap:8px; align-items:flex-start; padding:6px 8px;
  border:1px solid var(--line); border-radius:var(--radius); margin:4px 0; cursor:pointer; }
.opt:hover   { border-color:var(--accent); }
.opt.active  { border-color:var(--accent); box-shadow:0 0 0 1px var(--accent); }
.opt input   { width:auto; margin-top:3px; }

.timer { font:700 16px var(--font-head); letter-spacing:.06em; }
.timer.warn { color:var(--danger); }

.quest { white-space:pre-wrap; font:12px var(--font-mono); margin:6px 0; }
.kv { margin:2px 0; } .kv b { font-family:var(--font-head); }
details { margin:6px 0; }
details summary { cursor:pointer; font-family:var(--font-head); color:var(--muted); }
.danger-stamp { border-color:var(--danger); color:var(--danger); }

/* --- админ-раздел и создание Выхода (nb-r3) --- */
nav.tabs { display:flex; gap:4px; margin:0 0 14px; }
.tab { background:var(--panel-2); color:var(--ink); border:1px solid var(--line);
  border-bottom:none; font:700 13px var(--font-head); letter-spacing:.04em;
  padding:6px 14px; cursor:pointer; border-radius:var(--radius) var(--radius) 0 0; }
.tab.active { background:var(--accent); color:var(--accent-ink); border-color:var(--accent); }

.faction-row { display:flex; align-items:center; gap:10px; padding:7px 0;
  border-bottom:1px solid var(--line); flex-wrap:wrap; }
.faction-row:last-of-type { border-bottom:none; }
.row-actions { display:flex; gap:8px; margin-left:auto; }

.dates { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.dates input { width:auto; min-width:150px; }
input[type="color"] { padding:2px; height:38px; width:64px; }
input[type="file"] { padding:6px; }
.mini { font-size:11px; }

/* --- реестр и анонсы (P2.1) --- */
.registry-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:10px; }
.char-card { margin:0; padding:12px; }
.char-head { margin:0 0 4px; font-size:15px; }
.char-head b { font-family:var(--font-head); }
.char-bio { font-size:12.5px; margin:6px 0 0; white-space:pre-wrap; }
.ann-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; padding:5px 0;
  border-bottom:1px solid var(--line); }
.ann-row:last-of-type { border-bottom:none; }

/* --- P2.2: файлы квент --- */
.file-list { list-style:none; padding:0; margin:4px 0 8px; }
.file-list li { padding:2px 0; }

/* --- P3.1: гроссбух --- */
.eco-form { border-top:1px solid var(--line); margin-top:10px; padding-top:10px; }
.amount-pos { color:var(--ok); font-weight:700; }
.amount-neg { color:var(--danger); font-weight:700; }
.wallet-balance { font:700 18px var(--font-head); }

/* --- J-372: миниатюры изображений заявки --- */
.thumbs { display:flex; gap:8px; flex-wrap:wrap; margin:4px 0 8px; }
.thumb { width:120px; height:90px; object-fit:cover; cursor:zoom-in;
  border:1px solid var(--line); border-radius:var(--radius); }
.thumb:hover { border-color:var(--accent); }

/* --- S10 (J-388): вертикальные карточки Выходов --- */
.game-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(215px,1fr)); gap:12px; }
.game-card { background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  display:flex; flex-direction:column; overflow:hidden; margin:0; }
.game-cover-link { display:block; text-decoration:none; color:inherit; }
.game-cover { display:block; width:100%; aspect-ratio:3/4; object-fit:cover;
  background:var(--panel-2); border-bottom:1px solid var(--line); }
.game-cover-empty { display:flex; flex-direction:column; justify-content:center; align-items:center;
  gap:4px; padding:10px; text-align:center; color:var(--muted); font-family:var(--font-head);
  border-bottom:1px dashed var(--line); }
.game-cover-empty span:first-child { max-width:100%; overflow:hidden; text-overflow:ellipsis;
  white-space:nowrap; }
.game-body { padding:10px 12px 12px; display:flex; flex-direction:column; gap:4px; }
.game-title { font-size:15px; margin:0; line-height:1.3; }
.game-title a { color:var(--ink); text-decoration:none; }
.game-title a:hover { color:var(--accent); }
.game-meta { margin:0; }
.game-desc { margin:0; font-size:12.5px; display:-webkit-box; -webkit-line-clamp:3;
  -webkit-box-orient:vertical; overflow:hidden; }

/* обложка-баннер на странице Выхода */
.game-banner { display:block; width:100%; height:220px; object-fit:cover;
  border:1px solid var(--line); border-radius:var(--radius); margin:0 0 var(--gap); }

/* --- S10 (J-407): ростер в карточке (свёрнут, ленивая загрузка) --- */
.roster-fold { border-top:1px solid var(--line); margin-top:6px; padding-top:6px; }
.roster-toggle { display:block; width:100%; text-align:left; }
.roster-mini { display:flex; flex-direction:column; gap:3px; margin-top:4px; }
.roster-row { padding:2px 0; }
.roster-row-main { display:flex; justify-content:space-between; gap:6px; align-items:center; }
.roster-row-faction { display:flex; gap:4px; align-items:center; margin-top:1px; }

/* --- S10 (J-405): «Персонажи» — секции по группировкам, аккордеон строк --- */
.char-groups { display:flex; flex-direction:column; gap:14px; }
.char-group-head { font-family:var(--font-head); font-weight:700; font-size:14px; margin:0 0 4px;
  padding-bottom:3px; border-bottom:1px solid var(--line);
  display:flex; align-items:center; gap:8px; }
.char-group-head .count { color:var(--muted); font-weight:400; font-size:12px; margin-left:auto; }
.char-row { border-bottom:1px solid var(--line); }
.char-row:last-child { border-bottom:none; }
.char-row-head { display:flex; align-items:center; gap:8px; padding:7px 2px; width:100%;
  background:none; border:none; color:var(--ink); font:inherit; text-align:left; cursor:pointer; }
.char-row-head:hover { color:var(--accent); }
.char-row-head .arrow { color:var(--muted); font-size:11px; }
.char-row-body { padding:2px 2px 10px 24px; }