/* ============================================================
   Турниры: список, страница турнира, личная страница участника
   (/t/<токен>), закреп «турнир идёт» на главной, итоги.
   Перенесено из style.css дословно (1.22, фундамент). Подключается
   ключом PageCSS: /tournaments, турнир, участник, главная при идущем
   турнире. Правит волна «билет и турнир» (4.1c).
   ============================================================ */

/* ---- Турниры ------------------------------------------------ */

.tournament-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 34px; padding-top: 22px; }
.tournament-cols .col { border-top: 1px solid var(--rule); padding-top: 12px; }
.tournament-cols p { font-size: 0.95rem; color: var(--muted); margin: 8px 0 0; }
.tournament-cols dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 16px; margin: 8px 0 0; font-size: 0.95rem; }
.tournament-cols dt { font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--service); padding-top: 3px; }
.tournament-cols dd { margin: 0; }

/* Запись на турнир: счётчик мест, список участников, личная страница. */
.seats {
  font-family: var(--grotesk); font-size: 12px; letter-spacing: 0.1em;
  text-transform: uppercase; margin: 14px 0 0; opacity: 0.8;
}
.entry-list { list-style: none; margin: 0; padding: 0; counter-reset: entry; }
.entry-list li {
  display: flex; align-items: baseline; gap: 14px;
  padding: 11px 0; border-top: 1px solid var(--rule);
}
.entry-list li::before {
  counter-increment: entry; content: counter(entry);
  flex: 0 0 26px; font-family: var(--grotesk); font-size: 11px; color: var(--service);
}
.entry-list .who { font-family: var(--display); font-size: 1.15rem; }
.entry-list .club { font-size: 0.9rem; color: var(--muted); }
.entry-card { display: grid; grid-template-columns: 1.3fr auto; gap: 40px; align-items: start; margin-top: 22px; }
.entry-card .status-line { font-size: 1.05rem; line-height: 1.6; margin: 0 0 18px; }
.entry-qr { margin: 0; text-align: center; border: 1px solid var(--rule); background: var(--inset); padding: 18px; }
.entry-qr img { display: block; width: 220px; height: 220px; }
.entry-qr figcaption { font-size: 12px; color: var(--muted); margin-top: 10px; max-width: 220px; line-height: 1.5; }
.entry-qr figcaption .muted { word-break: break-all; font-size: 11px; }

.past-list { list-style: none; margin: 0; padding: 0; }
.past-list li { display: flex; align-items: baseline; gap: 18px; padding: 14px 0; border-top: 1px solid var(--rule); }
.past-list .when { flex: 0 0 120px; font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--service); }
.past-list .what { flex: 1; font-family: var(--display); font-size: 1.3rem; }
.past-list .links { font-family: var(--grotesk); font-size: 11.5px; letter-spacing: 0.06em; }
.past-list .links a { margin-left: 14px; }

/* Личная страница участника: заглушка до начала турнира и правка
   своих данных. */
.await { border-left: 2px solid var(--rule); padding: 2px 0 2px 14px; margin: 4px 0 16px; }
.await p { margin: 6px 0 10px; }
.entry-edit { margin: 6px 0 14px; }
.entry-edit summary { cursor: pointer; font-family: var(--grotesk); font-size: 11.5px; letter-spacing: 0.06em; color: var(--gold); }
.entry-edit summary::marker { color: var(--gold); }
.entry-edit label { display: block; margin: 12px 0 5px; font-family: var(--grotesk); font-size: 10.5px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--service); }
.entry-edit input {
  width: 100%; max-width: 26rem; padding: 9px 11px; border: 1px solid var(--service);
  background: var(--paper); font-family: var(--book); font-size: 0.95rem; color: var(--ink);
}
.entry-edit .btn { margin-top: 14px; }

@media (max-width: 720px) {
  .entry-card { grid-template-columns: 1fr; gap: 24px; }
  .entry-qr { justify-self: start; }
  .tournament-cols { grid-template-columns: 1fr; gap: 20px; }
  /* Прошедшие турниры — столбцом: дата, под ней название, под ним
     протокол и фотоотчёт. В строку с датой на 120 px название получало
     ~70 px и шло по слову в строке. На широком экране — строка, как было. */
  .past-list li { flex-direction: column; align-items: flex-start; gap: 2px; }
  .past-list .when { flex: none; }
  .past-list .what { flex: none; line-height: 1.25; }
  .past-list .links { margin-top: 4px; }
  .past-list .links a { margin: 0 18px 0 0; }
}

/* Закреп «турнир идёт»: тёмная полоса над полосой главной. С 1.22 стоит
   соседом <main> во всю ширину (partials/live-pin.html), поля по бокам
   даёт .wrap внутри. Счёт площадок рисует live.js (макет LiveHomePinPhone). */
.live-pin { background: var(--vitrine); color: var(--on-vitrine); padding: 22px 0; box-shadow: inset 0 1px 0 var(--vitrine-rule), inset 0 -1px 0 var(--vitrine-rule); }
.live-pin .rubric { color: var(--gold-lit); }
.live-pin h2 { font-family: var(--display); font-size: 2rem; font-weight: 400; margin: 8px 0 8px; line-height: 1.15; }
.live-pin h2 a { color: var(--on-vitrine); text-decoration: none; }
.live-pin .actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 18px; margin-top: 16px; }
.live-pin .quiet-link { color: var(--on-vitrine); opacity: 0.85; }
/* На тёмной полосе приглашают прозрачностью, а не цветом: --muted
   рассчитан на бумагу и здесь ушёл бы в фон. */
.live-pin .muted { color: inherit; opacity: 0.6; }

/* Строка «сыграно N из M · обновлено N с назад» и «не обновляется» —
   общие у закрепа, полосы турнира и билета. */
.live-status, .live-strip { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; margin: 0 0 10px; font-family: var(--grotesk); font-size: 12px; letter-spacing: 0.06em; }
.live-status [data-live-progress] { text-transform: uppercase; letter-spacing: 0.12em; }
.fresh:not(:empty)::before { content: ""; display: inline-block; width: 8px; height: 8px; margin-right: 6px; background: var(--yes); vertical-align: 0; }
.live-pin .fresh::before, .board .fresh::before { background: #86c08a; }
.fresh.late::before { background: var(--alarm); }
.live-silent { font-family: var(--grotesk); font-size: 13px; letter-spacing: 0.04em; margin: 4px 0 10px; }
.live-pin .live-silent, .board .live-silent { color: var(--on-vitrine-dim); }

/* Счёт площадок: «Площадка 1 · бой 27», слева и справа бойцы, счёт
   крупно посередине. */
.mats { display: grid; gap: 0; }
.mat { display: grid; grid-template-columns: 1fr auto 1fr; grid-template-areas: "label label label" "a score b"; align-items: baseline; gap: 2px 12px; padding: 10px 0; border-top: 1px solid var(--vitrine-rule, rgba(255,255,255,.14)); }
.live-pin .mat, .board .mat { border-top-color: rgba(231, 230, 226, 0.18); }
.mat-label { grid-area: label; font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; opacity: 0.75; }
.mat-a { grid-area: a; }
.mat-b { grid-area: b; text-align: right; }
.mat-score { grid-area: score; font-family: var(--display); font-size: 2rem; line-height: 1; font-variant-numeric: tabular-nums lining-nums; white-space: nowrap; }

/* Полоса турнира, пока он идёт. */
.band .board { margin: 18px 0 20px; max-width: 34rem; }
.band .board p { margin: 0 0 8px; color: var(--on-vitrine-dim); }
.band .board .mat { color: var(--on-vitrine); }

/* Итоги турнира на его странице. */
.results { width: 100%; border-collapse: collapse; font-size: 0.95rem; }
.results th { text-align: left; font-family: var(--grotesk); font-size: 10.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--service); font-weight: 400; border-bottom: 1px solid var(--rule-strong); padding: 7px 8px; }
.results td { padding: 8px; border-bottom: 1px solid var(--rule); }
.results .num { text-align: right; font-variant-numeric: tabular-nums lining-nums; }
.results tr.pool td { font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--service); border-bottom: none; padding-top: 16px; }
.results tr.advances td { font-weight: 600; }
.results tr.dsq td { color: var(--service); text-decoration: line-through; }
.live-now { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin: 0 0 18px; }

/* Таблица пула (партиал pool-table): черта выхода, строка «вы». */
.pool-table caption { caption-side: top; text-align: right; padding: 0 0 6px; font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--service); }
.pool-table th:nth-child(2), .pool-table td.who { width: 60%; text-align: left; }
.pool-table td.who .club { display: block; font-size: 12px; color: var(--muted); }
.pool-table tr.cut td { padding: 2px 0; border-bottom: none; text-align: center; }
.pool-table tr.cut span { display: flex; align-items: center; gap: 10px; font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.06em; color: var(--gold); }
.pool-table tr.cut span::before, .pool-table tr.cut span::after { content: ""; flex: 1; border-top: 1px dashed var(--gold); }
.pool-table tr.me td { background: var(--inset); }
.pool-table tr.me td:first-child { box-shadow: inset 3px 0 0 var(--gold); }
.me-tag { font-family: var(--grotesk); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--gold); }
.table-wrap { overflow-x: auto; margin: 0 0 18px; }

/* «Найти себя» и свёрнутые разделы прошедшего турнира. */
.findme input { width: 100%; max-width: 26rem; min-height: 48px; padding: 9px 12px; border: 1px solid var(--service); background: var(--inset); font-family: var(--book); font-size: 16px; color: var(--ink); display: block; margin: 6px 0 10px; }
.findme .lab, .resend .lab, .ticket .lab { font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--service); }
.findme-result { border-left: 3px solid var(--gold); background: var(--inset); padding: 10px 14px; margin: 0 0 8px; max-width: 26rem; }
.findme-actions { display: flex; gap: 18px; margin: 0 0 6px; }
.link-button { background: none; border: none; padding: 0; min-height: 44px; font-family: var(--grotesk); font-size: 13px; letter-spacing: 0.04em; color: var(--gold); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.link-button:hover { color: var(--ink); }
.fold-toggle { display: flex; justify-content: space-between; align-items: center; width: 100%; min-height: 48px; padding: 0; background: none; border: none; border-bottom: 1px solid var(--rule); font-family: var(--grotesk); font-size: 14px; letter-spacing: 0.04em; color: var(--ink); cursor: pointer; text-align: left; }
.fold-toggle::after { content: ""; width: 8px; height: 8px; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg); margin: 0 6px 4px 0; }
.fold-toggle[aria-expanded="true"]::after { transform: rotate(-135deg); margin-bottom: -4px; }
[data-fold].folding .section-head { display: none; }
[data-fold].folding:not(.open) [data-fold-body] { display: none; }

/* «Пришлите ссылку». */
.resend-form { max-width: 30rem; }
.resend-row { display: flex; flex-wrap: wrap; gap: 10px; margin: 6px 0 8px; }
.resend-row input { flex: 1 1 14rem; min-height: 48px; padding: 9px 12px; border: 1px solid var(--service); background: var(--inset); font-family: var(--book); font-size: 16px; color: var(--ink); }
.resend-row .btn { min-height: 48px; }

/* ---- Билет участника (1.22) --------------------------------------- */
.ticket { max-width: 44rem; }
.ticket-head { padding: 22px 0 16px; border-bottom: 1px solid var(--rule-strong); }
.ticket-head h1 { font-size: 2.6rem; margin: 8px 0 6px; line-height: 1.1; }
.ticket-tournament { font-family: var(--display); font-size: 1.3rem; margin: 0 0 8px; }
.ticket-tournament a { color: var(--ink); text-decoration-color: var(--rule); }
.ticket-when { font-family: var(--grotesk); font-size: 13px; letter-spacing: 0.04em; color: var(--service); margin: 0; }
/* Турнир в черновиках (1.29): вместо ссылки на его страницу — строка. */
.ticket-closed { margin: 8px 0 0; }
.ticket .lead { font-size: 1.1rem; line-height: 1.55; margin: 8px 0 14px; }
.ticket-status { padding: 18px 0 8px; }
.status-badge { display: inline-block; margin: 0 0 6px; padding: 6px 12px; border: 1px solid var(--service); font-family: var(--grotesk); font-size: 11.5px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--service); }
.status-badge.ok { border-color: var(--yes); color: var(--yes); }
.status-badge.ok::before { content: "✓ "; }
.status-badge.off { border-color: var(--alarm); color: var(--alarm); }
.ticket-facts { display: grid; grid-template-columns: 6.5rem 1fr; margin: 12px 0 16px; border-top: 1px solid var(--rule); }
.ticket-facts dt, .ticket-facts dd { padding: 12px 0; border-bottom: 1px solid var(--rule); margin: 0; }
.ticket-facts dt { font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--service); padding-top: 15px; }
.ticket-facts dd { font-size: 1.05rem; min-width: 0; overflow-wrap: anywhere; }
.ticket-facts .quiet-link { display: inline-flex; align-items: center; min-height: 44px; }
.btn.wide { display: flex; justify-content: center; width: 100%; min-height: 48px; align-items: center; }
.ticket-block { padding: 20px 0 8px; border-top: 1px solid var(--rule-strong); margin-top: 18px; }
.ticket-block > .rubric { display: block; margin-bottom: 8px; }
.bring-list ul { list-style: none; padding: 0; margin: 6px 0 10px; }
.bring-list li { position: relative; padding: 9px 0 9px 28px; border-bottom: 1px solid var(--rule); }
.bring-list li::before { content: ""; position: absolute; left: 2px; top: 15px; width: 11px; height: 11px; border: 1.5px solid var(--ink); }
.bring-list p { margin: 6px 0; }
.code-row { display: flex; align-items: flex-start; gap: 18px; }
.code-row p { margin: 0; font-size: 1.02rem; line-height: 1.55; }
/* Код — всегда на светлой вклейке: тёмный QR на тёмной бумаге камера
   секретаря не прочтёт. */
.ticket .entry-qr { flex: none; padding: 10px; background: var(--plate); border: 1px solid var(--rule); }
.ticket .entry-qr img { width: 160px; height: 160px; }
.saved-line { font-size: 1.1rem; margin: 4px 0 6px; }
.saved-line::before { content: "✓ "; color: var(--yes); }
.withdraw-form { margin: 16px 0 0; }
.withdraw-form .hint { margin-top: 6px; }
.ticket-link { word-break: break-all; font-family: var(--grotesk); font-size: 13px; }

/* «Нет связи» — сверху билета. */
.net-alarm { margin: 16px 0 0; padding: 14px 16px; border-left: 3px solid var(--alarm); background: var(--inset); }
.net-alarm-title { font-family: var(--display); font-size: 1.5rem; color: var(--alarm); margin: 0 0 4px; }
.net-alarm p { margin: 0 0 10px; }

/* День турнира: бой крупно, пул. */
.ticket-live { padding: 18px 0 8px; }
.live-strip { border-bottom: 1px solid var(--rule); padding-bottom: 8px; }
.live-progress { font-family: var(--grotesk); font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--service); margin: 0 0 12px; }
.bout-card { background: var(--vitrine); color: var(--on-vitrine); padding: 18px 18px 16px; margin: 0 0 14px; box-shadow: inset 0 0 0 1px var(--vitrine-rule); }
.bout-card .rubric { color: var(--gold-lit); }
.bout-mat { font-family: var(--display); font-size: 2.6rem; line-height: 1.1; margin: 6px 0 4px; color: var(--on-vitrine-head); }
.bout-seq { font-family: var(--grotesk); font-size: 12px; letter-spacing: 0.06em; color: var(--on-vitrine-dim); margin: 0 0 12px; }
.bout-sides { display: grid; grid-template-columns: 1fr auto 1fr; align-items: baseline; gap: 10px; margin: 0; padding-top: 12px; border-top: 1px solid rgba(231, 230, 226, 0.18); font-size: 1.15rem; }
.bout-sides .b { text-align: right; }
.bout-score { font-family: var(--display); font-size: 1.8rem; white-space: nowrap; }
.ticket-actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); gap: 10px; margin: 0 0 18px; }
.ticket-actions .btn { display: flex; align-items: center; justify-content: center; min-height: 48px; }
.section-line { display: flex; justify-content: space-between; align-items: baseline; margin: 0 0 8px; }
.tiles { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); margin: 0 0 14px; }
.tiles > div { padding: 10px 12px 12px 0; }
.tiles > div + div { border-left: 1px solid var(--rule); padding-left: 12px; }
.tiles b { display: block; font-family: var(--display); font-weight: 400; font-size: 1.9rem; line-height: 1.2; font-variant-numeric: tabular-nums lining-nums; }

/* После турнира: место крупно. */
.ticket-after { padding: 18px 0 8px; }
.place-row { display: flex; align-items: center; gap: 22px; padding: 12px 0 16px; border-bottom: 1px solid var(--rule-strong); margin-bottom: 16px; }
.place-big { margin: 0; text-align: center; flex: none; }
.place-big b { display: block; font-family: var(--display); font-weight: 400; font-size: 5.5rem; line-height: 1; color: var(--gold); }
.place-line { margin: 0; font-size: 1.05rem; color: var(--muted); }
.ticket-links { display: flex; flex-wrap: wrap; gap: 4px 22px; margin: 10px 0 16px; }
.ticket-links .quiet-link { display: inline-flex; align-items: center; min-height: 44px; }

@media (max-width: 720px) {
  .ticket-head h1 { font-size: 2.1rem; }
  .code-row .entry-qr img { width: 140px; height: 140px; }
  .mat-score { font-size: 1.7rem; }
  .pool-table { font-size: 0.9rem; }
  .pool-table th, .pool-table td { padding: 8px 5px; }
  .live-pin h2 { font-size: 1.6rem; }
}

/* ---- Живая страница участника ---------------------------------- */
/* Блок «турнир идёт» на личной странице: текущий бой, ход турнира,
   место в пуле. Строится как заглушка .await (линейка слева, отбивка),
   но линейка золотая — это то, что происходит сейчас, как у закрепа
   «турнир идёт» на главной. Показывает и прячет его site.js атрибутом
   hidden; display здесь не задаётся, чтобы hidden работал сам. */
.entry-live { border-left: 2px solid var(--gold); padding: 2px 0 2px 14px; margin: 4px 0 16px; }
.entry-live [data-entry-progress] {
  display: block; margin: 0 0 6px;
  font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.12em;
  text-transform: uppercase; color: var(--service);
}
.entry-live .bout, .entry-live [data-entry-bout] { font-family: var(--display); font-size: 1.25rem; line-height: 1.35; margin: 4px 0; }
.entry-live .place, .entry-live [data-entry-place] { font-family: var(--grotesk); font-size: 13px; letter-spacing: 0.04em; color: var(--muted); margin: 4px 0 12px; }
.entry-live .btn { margin-top: 6px; }
/* Итог турнира — та же заглушка, но линейка чернилами: всё кончилось. */
[data-entry-done] { border-left-color: var(--ink); }
.entry-live[hidden], [data-entry-done][hidden], [data-entry-await][hidden], .ticket-live[hidden] { display: none; }

/* ============================================================
   Данные турнира (1.23): ближайшие бои, «ваш следующий бой»,
   «мои бои» и номинации. Макеты LiveTournamentPhone, TicketDay,
   TicketAfter, LiveResultsPhone.
   ============================================================ */

/* «Ближайшие бои» на странице турнира и «Впереди» на билете — один
   список: номер, пара, площадка, «≈ HH:MM». Сетка, чтобы номера и
   время стояли в столбик; на телефоне время уходит под пару. */
.next-list, .ahead-list { list-style: none; margin: 8px 0 0; padding: 0; }
.next-list li, .ahead-list li {
  display: grid; grid-template-columns: 4.2rem 1fr auto auto;
  gap: 4px 14px; align-items: baseline;
  padding: 10px 0; border-top: 1px solid var(--rule);
}
.next-list li:first-child, .ahead-list li:first-child { border-top: none; }
.next-list .empty-hint { display: block; border: none; }
.next-seq {
  font-family: var(--grotesk); font-size: 12px; letter-spacing: 0.08em;
  color: var(--service); font-variant-numeric: tabular-nums lining-nums;
}
.next-pair { font-family: var(--display); font-size: 1.05rem; line-height: 1.3; min-width: 0; }
.next-mat, .next-at {
  font-family: var(--grotesk); font-size: 11.5px; letter-spacing: 0.06em;
  color: var(--muted); font-variant-numeric: tabular-nums lining-nums;
}

/* «Ваш следующий бой» — главная карточка билета в день турнира:
   площадка крупно, номер и время, соперник с цветом угла. */
.next-card {
  border: 1px solid var(--rule-strong); background: var(--inset);
  padding: 14px 16px 16px; margin: 12px 0 16px;
}
.next-card[hidden] { display: none; }
.next-card .next-mat {
  font-family: var(--display); font-size: 2.1rem; line-height: 1.1;
  margin: 4px 0 2px; color: var(--ink);
}
.next-card .next-when {
  display: flex; flex-wrap: wrap; gap: 4px 12px; margin: 0 0 10px;
  font-family: var(--grotesk); font-size: 11.5px; letter-spacing: 0.06em;
  color: var(--service);
}
.next-card .next-when .next-at { color: var(--ink); }
.next-card .next-vs {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; margin: 0 0 8px;
}
.next-card .next-me, .next-card .next-opp { font-family: var(--display); font-size: 1.3rem; }
.next-card .next-x { font-family: var(--grotesk); font-size: 11px; color: var(--service); }
/* Цвет угла — словом и рамкой: «красный»/«синий» читает и тот, кто
   цвета не различает, и тот, у кого страница печатается серым. Синий в
   светлой теме взят темнее (#246496, 1.23): и #2C7BB6, и #276DA3 давали
   на бумажном фоне меньше 4,5:1 — у 11-пиксельной подписи это уже не
   придирка, а нечитаемая строка. Теперь 5,04:1. В тёмной оба светлее — там тот же
   расчёт наоборот. Значения через light-dark, как вся палитра сайта;
   без его поддержки остаются светлые. */
.corner {
  font-family: var(--grotesk); font-size: 10.5px; letter-spacing: 0.14em;
  text-transform: uppercase; padding: 2px 7px; border: 1px solid currentColor;
}
.corner.red { color: #9b2b26; }
.corner.blue { color: #246496; }
@supports (color: light-dark(#000, #fff)) {
  .corner.red { color: light-dark(#9b2b26, #e8968d); }
  .corner.blue { color: light-dark(#246496, #8fc0e4); }
}
.corner:empty { display: none; }
.next-card .next-judge, .next-card .next-now {
  margin: 4px 0 0; font-size: 0.92rem; color: var(--muted);
}
.next-card .next-judge:empty, .next-card .next-now:empty { display: none; }

/* «Мои бои N из M»: номер, соперник с отметками, счёт, очки, итог. */
.my-bouts, .my-ahead { margin: 16px 0 0; }
.my-bouts[hidden], .my-ahead[hidden] { display: none; }
.mine-list { list-style: none; margin: 8px 0 0; padding: 0; }
.mine-row {
  display: grid; grid-template-columns: 3.6rem 1fr auto auto 1.6rem;
  gap: 2px 12px; align-items: baseline;
  padding: 10px 0; border-top: 1px solid var(--rule);
}
.mine-row:first-child { border-top: none; }
.mine-seq {
  font-family: var(--grotesk); font-size: 12px; color: var(--service);
  font-variant-numeric: tabular-nums lining-nums;
}
.mine-opp { font-family: var(--display); font-size: 1.05rem; line-height: 1.3; min-width: 0; }
.mine-marks {
  display: block; font-family: var(--grotesk); font-size: 10.5px;
  letter-spacing: 0.1em; color: var(--gold);
}
.mine-score, .mine-total {
  font-variant-numeric: tabular-nums lining-nums;
  font-family: var(--grotesk); font-size: 13px;
}
.mine-total { color: var(--muted); }
.mine-res {
  font-family: var(--grotesk); font-size: 13px; text-align: right;
}
.mine-row.res-win .mine-res { color: var(--gold); }
.mine-row.res-loss .mine-res { color: var(--service); }

/* Номинации: приз и кто его взял. */
.nominations { margin: 8px 0 0; }
.nomination {
  display: grid; grid-template-columns: 1fr 1.4fr; gap: 6px 18px;
  padding: 10px 0; border-top: 1px solid var(--rule);
}
.nomination:first-child { border-top: none; }
.nomination dt {
  font-family: var(--grotesk); font-size: 11px; letter-spacing: 0.12em;
  text-transform: uppercase; color: var(--service);
}
.nomination dd { margin: 0; font-family: var(--display); font-size: 1.1rem; }
/* Свой приз на билете — строкой под местом. */
.prize {
  font-family: var(--display); font-size: 1.25rem; color: var(--gold);
  margin: 0 0 12px;
}

@media (max-width: 520px) {
  .next-list li, .ahead-list li { grid-template-columns: 3.6rem 1fr; }
  .next-list .next-mat, .next-list .next-at,
  .ahead-list .next-mat, .ahead-list .next-at { grid-column: 2; }
  .mine-row { grid-template-columns: 3.2rem 1fr auto; }
  .mine-total { grid-column: 2; }
  .next-card .next-mat { font-size: 1.8rem; }
  .nomination { grid-template-columns: 1fr; }
}

/* ============================================================
   «Всё расписание» турнира (1.24) — /tournaments/<slug>/raspisanie
   ============================================================ */

.schedule-page { padding-top: 26px; }
.schedule-head h1 { font-family: var(--display); font-size: 2.2rem; font-weight: 400; margin: 8px 0 6px; }
.schedule-of { margin: 0 0 4px; font-size: 1.05rem; }
.schedule-of a { color: var(--ink); }
.schedule-page .findme { margin: 18px 0 8px; }
.schedule-foot { max-width: 34rem; }

.schedule { font-variant-numeric: tabular-nums lining-nums; }
.schedule td, .schedule th { padding: 7px 8px; vertical-align: baseline; }
.schedule .pair { font-family: var(--display); font-size: 1.05rem; }
.schedule .pair .vs { color: var(--service); margin: 0 6px; }
.schedule .judge, .schedule .state { font-size: 0.9rem; color: var(--muted); }
/* Идущий бой видно издалека: его ищут глазами с другого конца зала. */
.schedule tr.bout-live td { background: var(--inset); }
.schedule tr.bout-live .state { color: var(--gold); }
/* «Найти себя» подсвечивает все свои бои, не только первый. */
.schedule tr.me td { background: var(--inset); }
.schedule tr.me td:first-child { box-shadow: inset 3px 0 0 var(--gold); }

/* Именно screen: на бумаге лист узкий (A4 — около 700 px), но все восемь
   колонок там нужны — по ним расписание и читают у стены.
   А на телефоне таблица из восьми колонок не помещается никак: восемь
   узких столбцов ломают имена по слогам, а боковая прокрутка прячет
   счёт. Поэтому строка разворачивается в карточку в три строки:
   служебное · пара · судья и счёт. Приём тот же, что у .mine-row. */
@media screen and (max-width: 720px) {
  .schedule, .schedule tbody, .schedule tr, .schedule td { display: block; }
  .schedule thead { display: none; }
  .table-wrap { overflow-x: visible; }
  .schedule tr { padding: 11px 0; border-top: 1px solid var(--rule); }
  .schedule tr:first-child { border-top: none; }
  .schedule td { border: none; padding: 0; text-align: left; }
  .schedule td.seq, .schedule td.at, .schedule td.mat, .schedule td.pool,
  .schedule td.judge, .schedule td.score, .schedule td.state {
    display: inline; font-family: var(--grotesk); font-size: 12px; color: var(--muted);
  }
  .schedule td.seq::before { content: "№ "; }
  .schedule td.at::before, .schedule td.mat::before, .schedule td.pool::before { content: " · "; }
  .schedule td.mat::before { content: " · площадка "; }
  .schedule td.pool::before { content: " · пул "; }
  .schedule td.pair { font-size: 1.05rem; margin: 3px 0; }
  .schedule td.judge::before { content: "судья "; }
  .schedule td.score::before { content: " · счёт "; }
  .schedule td.state::before { content: " · "; }
  .schedule td.state { color: var(--ink); }
}

/* Печать: лист на стену. Ни шапки страницы, ни поиска, ни ссылок —
   только таблица; строки не рвутся между листами, заголовок таблицы
   повторяется на каждом (thead в @page). Общие правила печати (шапка
   сайта, меню, подвал) уже стоят в style.css. */
@media print {
  .schedule-page .findme, .schedule-page .actions,
  .schedule-foot { display: none !important; }
  .schedule-page { padding-top: 0; }
  .schedule-head h1 { font-size: 1.6rem; margin: 0 0 2px; }
  .table-wrap { overflow: visible; }
  .schedule { font-size: 9.5pt; }
  .schedule td, .schedule th { padding: 5px 6px; }
  /* «1 · тур 3» в две строки читается как две колонки. */
  .schedule td:nth-child(2), .schedule td:nth-child(4) { white-space: nowrap; }
  .schedule .pair { font-size: 1em; }
  .schedule thead { display: table-header-group; }
  .schedule tr { break-inside: avoid; page-break-inside: avoid; }
  .schedule tr.bout-live td, .schedule tr.me td { background: none; }
  .schedule tr.me td:first-child { box-shadow: none; }
}
