/* =========================================================================
   ВсеНаТеннис · Брендовый скин кабинета главного судьи
   Натяжка нового дизайна поверх существующей вёрстки (Bootstrap 3 и 5)
   без изменения функционала. Светлая тема по умолчанию,
   тёмная — автоматически с 23:00 до 06:00 (управляется brand-vnt.js).
   ========================================================================= */

/* Boot-щит: страница скрыта до применения скина (класс снимает brand-vnt.js;
   инлайн-страховка в header_load снимает его через 3 с при любой ошибке).
   Фон задан прямо на html, чтобы даже до отрисовки body не было белой вспышки. */
html.vnt-boot{background:#F4F4F6}
html.vnt-boot[data-theme="dark"]{background:#0C0C0F}
html.vnt-boot body{visibility:hidden !important}
html.vnt-boot .vnt-loader{visibility:visible !important}

:root{
  /* Светлая тема (по умолчанию) */
  --vnt-bg:#F4F4F6;
  --vnt-surface:#FFFFFF;
  --vnt-surface-2:#EDEEF1;
  --vnt-line:#E3E4E9;
  --vnt-ink:#0C0C0F;
  --vnt-muted:rgba(12,12,15,.48);
  --vnt-dim:rgba(12,12,15,.68);
  --vnt-yellow:#F5C518;
  --vnt-yellow-ink:#A8820A;
  --vnt-onyellow:#0C0C0F;
  --vnt-yellow-soft:rgba(245,197,24,.16);
  --vnt-red:#FF3B30;
  --vnt-green:#1FA05C;
  --vnt-green-soft:rgba(31,160,92,.12);
  --vnt-orange-ink:#C06A00;
  --vnt-orange-soft:rgba(255,138,0,.15);
  --vnt-nav:#0C0C0F;
  --vnt-r:12px;
  --vnt-r-lg:16px;
  --vnt-shadow:0 1px 2px rgba(12,12,15,.04),0 4px 14px rgba(12,12,15,.05);
  --vnt-head:'Unbounded',system-ui,sans-serif;
  --vnt-body:'Manrope',-apple-system,system-ui,sans-serif;
  --vnt-mono:'JetBrains Mono',ui-monospace,monospace;
}
/* Тёмная тема.
   Значения подобраны по контрасту (WCAG AA, отношение к фону карточки):
   ink 15.4:1, dim 10.4:1, muted 6.9:1. Прежние .52/.72 давали 5.2 и 8.9
   на мелком тексте (заголовки таблиц — 9.5px в разрядку), и в зале это
   не читалось. Поверхность подняли с #16161C до #1A1A22, а линию — до
   #34343F: раньше карточка отличалась от фона в 1.08 раза, то есть
   границы блоков на глаз не находились. */
html[data-theme="dark"]{
  --vnt-bg:#0C0C0F;
  --vnt-surface:#1A1A22;
  --vnt-surface-2:#23232D;
  --vnt-line:#34343F;
  --vnt-ink:#F4F4F6;
  --vnt-muted:rgba(244,244,246,.62);
  --vnt-dim:rgba(244,244,246,.80);
  --vnt-yellow-ink:#F5C518;
  --vnt-red:#FF6B61;
  --vnt-green:#37D67A;
  --vnt-green-soft:rgba(55,214,122,.14);
  --vnt-orange-ink:#FFA53D;
  --vnt-orange-soft:rgba(255,165,61,.16);
  --vnt-yellow-soft:rgba(245,197,24,.18);
  --vnt-shadow:none;
  color-scheme:dark;
}

/* ---------- База ---------- */
html.vnt body{
  background:var(--vnt-bg) !important;
  color:var(--vnt-ink);
  font-family:var(--vnt-body);
  font-size:14.5px;
  line-height:1.5;
  transition:background .3s ease,color .3s ease;
}
html.vnt h1,html.vnt h2,html.vnt h3,html.vnt h4,html.vnt .navbar-brand{
  font-family:var(--vnt-head);
  font-weight:800;
  letter-spacing:0;
  color:var(--vnt-ink);
}
html.vnt h1{font-size:24px;text-transform:uppercase}
html.vnt h2{font-size:20px;text-transform:uppercase}
html.vnt h3{font-size:16px}
html.vnt h4,html.vnt h5{font-family:var(--vnt-body);font-weight:800;color:var(--vnt-ink)}
html.vnt a{color:var(--vnt-yellow-ink)}
html.vnt a:hover{color:var(--vnt-ink);text-decoration:none}

/* ---------- Навигация (Bootstrap 3: navbar-inverse/default, Bootstrap 5: bg-dark) ---------- */
html.vnt .navbar-inverse,
html.vnt .navbar-default,
html.vnt .navbar.bg-dark,
html.vnt nav.navbar{
  background:var(--vnt-nav) !important;
  border:none !important;
  border-bottom:1px solid #2A2A33 !important;
  border-radius:0;
}
html.vnt .navbar .navbar-brand{color:#F4F4F6 !important;font-size:13px;text-transform:uppercase}
html.vnt .navbar-nav>li>a,
html.vnt .navbar-nav .nav-link{
  color:rgba(244,244,246,.72) !important;
  font-weight:600;font-size:13.5px;
  transition:.15s;
}
html.vnt .navbar-nav>li>a:hover,
html.vnt .navbar-nav .nav-link:hover{color:#F4F4F6 !important;background:transparent !important}
html.vnt .navbar-nav>.active>a,
html.vnt .navbar-nav>li>a.vnt-active,
html.vnt .navbar-nav .nav-link.active,
html.vnt .navbar-nav .nav-link.vnt-active{
  color:#F5C518 !important;
  background:rgba(245,197,24,.12) !important;
  border-radius:10px;
  box-shadow:inset 0 -2px 0 #F5C518;
}
html.vnt .navbar-toggle,html.vnt .navbar-toggler{border-color:#2A2A33}
html.vnt .navbar-toggle .icon-bar{background:#F4F4F6}

/* ---------- Кнопки ---------- */
html.vnt .btn{
  font-family:var(--vnt-body);
  font-weight:700;font-size:13.5px;
  border-radius:var(--vnt-r);
  padding:8px 16px;
  transition:.15s;
  box-shadow:none !important;
  text-shadow:none;
}
html.vnt .btn-default,
html.vnt .btn-secondary,
html.vnt .btn-outline-secondary,
html.vnt .btn-light{
  background:var(--vnt-surface);
  border:1px solid var(--vnt-line);
  color:var(--vnt-ink);
}
html.vnt .btn-default:hover,
html.vnt .btn-secondary:hover,
html.vnt .btn-outline-secondary:hover,
html.vnt .btn-light:hover{background:var(--vnt-surface);border-color:var(--vnt-muted);color:var(--vnt-ink)}
html.vnt .btn-primary,
html.vnt .btn-success,
html.vnt .btn-info{
  background:var(--vnt-yellow) !important;
  border:1px solid var(--vnt-yellow) !important;
  color:var(--vnt-onyellow) !important;
}
html.vnt .btn-primary:hover,
html.vnt .btn-success:hover,
html.vnt .btn-info:hover{background:#ffd23c !important;border-color:#ffd23c !important}
html.vnt .btn-danger{
  background:transparent;
  border:1px solid var(--vnt-line);
  color:var(--vnt-red);
}
html.vnt .btn-danger:hover{background:rgba(255,59,48,.08);border-color:var(--vnt-red);color:var(--vnt-red)}

/* ---------- Формы ---------- */
html.vnt .form-control,html.vnt select,html.vnt input[type="text"],
html.vnt input[type="date"],html.vnt input[type="time"],html.vnt input[type="email"],
html.vnt input[type="password"],html.vnt textarea{
  background:var(--vnt-surface);
  border:1px solid var(--vnt-line);
  border-radius:var(--vnt-r);
  color:var(--vnt-ink);
  box-shadow:none !important;
  min-height:38px;
  padding:7px 13px;
  font-size:13.5px;
  transition:.15s;
}
html.vnt .form-control:focus,html.vnt select:focus,html.vnt input:focus,html.vnt textarea:focus{
  border-color:var(--vnt-yellow);
  outline:none;
  box-shadow:0 0 0 3px var(--vnt-yellow-soft) !important;
}
html.vnt label{font-weight:600;color:var(--vnt-dim);font-size:12.5px}
html.vnt ::placeholder{color:var(--vnt-muted)}
html.vnt .input-group-addon{background:var(--vnt-surface-2);border:1px solid var(--vnt-line);border-radius:var(--vnt-r) 0 0 var(--vnt-r);color:var(--vnt-muted)}

/* ---------- Таблицы ---------- */
html.vnt .table,html.vnt table{color:var(--vnt-ink)}
html.vnt .table>thead>tr>th,html.vnt table thead th{
  font-family:var(--vnt-head);
  font-weight:800;font-size:9.5px;
  letter-spacing:.1em;text-transform:uppercase;
  color:var(--vnt-muted);
  background:var(--vnt-surface-2);
  border-bottom:1px solid var(--vnt-line) !important;
  border-top:none !important;
  padding:11px 14px;
}
html.vnt .table>tbody>tr>td,html.vnt table tbody td{
  border-top:1px solid var(--vnt-line) !important;
  padding:11px 14px;
  vertical-align:middle !important;
  background:var(--vnt-surface);
}
html.vnt .table-striped>tbody>tr:nth-of-type(odd)>td{background:var(--vnt-surface)}
html.vnt .table>tbody>tr:hover>td{background:var(--vnt-surface-2)}
html.vnt .table-bordered,html.vnt .table-bordered td,html.vnt .table-bordered th{border-color:var(--vnt-line) !important}
html.vnt table{border-radius:var(--vnt-r-lg);overflow:hidden;box-shadow:var(--vnt-shadow)}

/* ---------- Карточки и панели ---------- */
html.vnt .panel,html.vnt .well,html.vnt .card,
html.vnt .list-group-item,html.vnt .border.rounded,
html.vnt .border{
  background:var(--vnt-surface) !important;
  border:1px solid var(--vnt-line) !important;
  color:var(--vnt-ink);
}
html.vnt .panel,html.vnt .well,html.vnt .card,html.vnt .border.rounded{
  border-radius:var(--vnt-r-lg) !important;
  box-shadow:var(--vnt-shadow) !important;
}
html.vnt .list-group-item:first-child{border-radius:var(--vnt-r-lg) var(--vnt-r-lg) 0 0}
html.vnt .list-group-item:last-child{border-radius:0 0 var(--vnt-r-lg) var(--vnt-r-lg)}
html.vnt .panel-heading{background:var(--vnt-surface-2) !important;border-bottom:1px solid var(--vnt-line) !important;font-family:var(--vnt-head);font-weight:800;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vnt-muted) !important}
html.vnt .alert{border-radius:var(--vnt-r-lg);border:1px solid var(--vnt-line);background:var(--vnt-surface);color:var(--vnt-ink)}
html.vnt .alert-danger{border-left:3px solid var(--vnt-red)}
html.vnt .alert-success{border-left:3px solid var(--vnt-green)}
html.vnt .alert-info,html.vnt .alert-warning{border-left:3px solid var(--vnt-yellow)}

/* ---------- Лейблы режимов: live — зелёный, G-B-G — жёлтый, Player — оранжевый ---------- */
.vnt-tag{
  display:inline-flex;align-items:center;
  font-family:var(--vnt-body);
  font-size:11px;font-weight:700;
  border-radius:8px;padding:3px 9px;
  white-space:nowrap;line-height:1.4;
}
.vnt-tag--live{background:var(--vnt-green-soft);color:var(--vnt-green)}
.vnt-tag--gbg{background:var(--vnt-yellow-soft);color:var(--vnt-yellow-ink)}
.vnt-tag--player{background:var(--vnt-orange-soft);color:var(--vnt-orange-ink)}
.vnt-tag--onair{background:var(--vnt-red);color:#fff}

/* ---------- Моноширинные данные ---------- */
html.vnt .vnt-mono{font-family:var(--vnt-mono);font-size:12.5px}

/* ---------- Переключатель темы ---------- */
.vnt-theme-btn{
  position:fixed;right:18px;bottom:18px;z-index:9000;
  width:46px;height:46px;border-radius:50%;
  background:var(--vnt-surface);border:1px solid var(--vnt-line);
  color:var(--vnt-ink);cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 18px rgba(0,0,0,.18);
  font-size:17px;transition:.15s;
}
.vnt-theme-btn:hover{border-color:var(--vnt-yellow)}
.vnt-theme-btn svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

/* =========================================================================
   ЛОАДЕРЫ · 10 вариантов на теннисную тематику
   Показываются при переходах между страницами (brand-vnt.js)
   ========================================================================= */
.vnt-loader{
  position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:99999;
  background:var(--vnt-bg);
  display:none;align-items:center;justify-content:center;
  opacity:1;transition:opacity .28s ease;
}
.vnt-loader.show{display:flex !important}/* !important обязателен: в bootstrap.min.css есть своё .show{display:block !important}, и без него лоадер терял flex, а вместе с ним и вертикальное центрирование */
.vnt-loader.hide{opacity:0}
.vnt-loader-box{display:flex;flex-direction:column;align-items:center;gap:20px;margin:auto}
.vnt-loader-stage{height:86px;width:180px;display:flex;align-items:center;justify-content:center;position:relative}
.vnt-loader-text{font-family:var(--vnt-mono);font-size:12px;color:var(--vnt-muted);letter-spacing:1.5px;text-transform:lowercase}

/* Мяч со швами */
.vnt-ball{width:26px;height:26px;border-radius:50%;background:#F5C518;position:relative;overflow:hidden;flex-shrink:0}
.vnt-ball::before,.vnt-ball::after{content:"";position:absolute;width:100%;height:100%;border:2.5px solid var(--vnt-bg);border-radius:50%}
.vnt-ball::before{left:-55%;top:-55%}
.vnt-ball::after{right:-55%;bottom:-55%}
.vnt-ball--s{width:16px;height:16px}
.vnt-ball--s::before,.vnt-ball--s::after{border-width:2px}

/* 1 · Отскок мяча */
.vnt-ld1{display:flex;flex-direction:column;align-items:center}
.vnt-ld1 .vnt-ball{animation:vntB .55s cubic-bezier(.4,0,.7,1) infinite alternate}
.vnt-ld1 i{width:34px;height:7px;border-radius:50%;background:rgba(0,0,0,.22);margin-top:9px;animation:vntBS .55s infinite alternate}
@keyframes vntB{from{transform:translateY(-32px)}to{transform:translateY(4px) scale(1.06,.9)}}
@keyframes vntBS{from{transform:scale(.5);opacity:.35}to{transform:scale(1);opacity:.85}}

/* 2 · Ралли между ракетками */
.vnt-ld2{width:160px;height:44px;position:relative;display:flex;align-items:center;justify-content:space-between}
.vnt-ld2 i{width:5px;height:40px;border-radius:3px;background:var(--vnt-ink)}
.vnt-ld2 .vnt-ball--s{position:absolute;top:14px;animation:vntRally .75s ease-in-out infinite alternate}
@keyframes vntRally{from{left:12px;transform:rotate(0)}to{left:132px;transform:rotate(360deg)}}

/* 3 · Вращение мяча */
.vnt-ld3 .vnt-ball{width:34px;height:34px;animation:vntSpin .9s linear infinite}
@keyframes vntSpin{to{transform:rotate(360deg)}}

/* 4 · Знак 3×3 (фирменная сетка мячей) */
.vnt-ld4{display:grid;grid-template-columns:repeat(3,14px);gap:7px}
.vnt-ld4 span{width:14px;height:14px;border-radius:50%;background:#F5C518;animation:vntGrid 1.2s infinite}
.vnt-ld4 span:nth-child(5){background:var(--vnt-ink)}
.vnt-ld4 span:nth-child(1){animation-delay:0s}.vnt-ld4 span:nth-child(2){animation-delay:.1s}
.vnt-ld4 span:nth-child(3){animation-delay:.2s}.vnt-ld4 span:nth-child(4){animation-delay:.3s}
.vnt-ld4 span:nth-child(5){animation-delay:.4s}.vnt-ld4 span:nth-child(6){animation-delay:.5s}
.vnt-ld4 span:nth-child(7){animation-delay:.6s}.vnt-ld4 span:nth-child(8){animation-delay:.7s}
.vnt-ld4 span:nth-child(9){animation-delay:.8s}
@keyframes vntGrid{0%,60%,100%{opacity:.22;transform:scale(.8)}30%{opacity:1;transform:scale(1)}}

/* 5 · Ракетка */
.vnt-ld5{animation:vntSpin 1.1s cubic-bezier(.55,.1,.45,.9) infinite;transform-origin:50% 70%}
.vnt-ld5 .rk{width:32px;height:42px;border:3px solid var(--vnt-ink);border-radius:50% 50% 46% 46%;position:relative;
  background:repeating-linear-gradient(0deg,transparent 0 5px,var(--vnt-line) 5px 6px),repeating-linear-gradient(90deg,transparent 0 5px,var(--vnt-line) 5px 6px)}
.vnt-ld5 .rk::after{content:"";position:absolute;left:50%;bottom:-21px;width:4px;height:20px;margin-left:-2px;border-radius:2px;background:var(--vnt-ink)}

/* 6 · Перелёт через сетку */
.vnt-ld6{width:150px;height:60px;position:relative}
.vnt-ld6 .net{position:absolute;left:50%;bottom:6px;width:3px;height:26px;margin-left:-1.5px;border-radius:2px;background:var(--vnt-ink);opacity:.85}
.vnt-ld6 .net::before{content:"";position:absolute;left:-6px;top:0;width:15px;height:3px;background:var(--vnt-ink);border-radius:2px}
.vnt-ld6 .vnt-ball--s{position:absolute;bottom:8px;animation:vntFly 1.1s ease-in-out infinite alternate}
@keyframes vntFly{0%{left:6px;bottom:8px}50%{left:66px;bottom:44px}100%{left:128px;bottom:8px}}

/* 7 · Счёт гейма */
.vnt-ld7{position:relative;width:120px;height:40px;font-family:var(--vnt-mono);font-weight:700;font-size:26px;color:var(--vnt-yellow-ink);text-align:center}
.vnt-ld7 span{position:absolute;inset:0;opacity:0;animation:vntScore 1.6s infinite}
.vnt-ld7 span:nth-child(1){animation-delay:0s}
.vnt-ld7 span:nth-child(2){animation-delay:.4s}
.vnt-ld7 span:nth-child(3){animation-delay:.8s}
.vnt-ld7 span:nth-child(4){animation-delay:1.2s}
@keyframes vntScore{0%{opacity:0}6%,22%{opacity:1}30%,100%{opacity:0}}

/* 8 · Разметка корта */
.vnt-ld8{width:96px;height:58px}
.vnt-ld8 rect,.vnt-ld8 line{fill:none;stroke:#F5C518;stroke-width:3;stroke-linecap:round;
  stroke-dasharray:250;stroke-dashoffset:250;animation:vntCourt 1.5s linear infinite}
@keyframes vntCourt{55%{stroke-dashoffset:0}80%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:0}}

/* 9 · Три мяча волной */
.vnt-ld9{display:flex;gap:12px;align-items:flex-end;height:50px}
.vnt-ld9 .vnt-ball--s{animation:vntWave .6s ease-in-out infinite alternate}
.vnt-ld9 .vnt-ball--s:nth-child(2){animation-delay:.15s}
.vnt-ld9 .vnt-ball--s:nth-child(3){animation-delay:.3s}
@keyframes vntWave{from{transform:translateY(0)}to{transform:translateY(-26px)}}

/* 10 · Подброс на подаче */
.vnt-ld10{display:flex;flex-direction:column;align-items:center;height:70px;justify-content:flex-end}
.vnt-ld10 .vnt-ball--s{animation:vntToss 1s cubic-bezier(.4,0,.6,1) infinite alternate}
.vnt-ld10 b{width:34px;height:5px;border-radius:3px;background:var(--vnt-ink);margin-top:10px;animation:vntRacketSwing 1s ease-in-out infinite alternate;transform-origin:right center}
@keyframes vntToss{from{transform:translateY(0)}to{transform:translateY(-42px)}}
@keyframes vntRacketSwing{from{transform:rotate(-14deg)}to{transform:rotate(10deg)}}

/* ---------- Мелочи ---------- */
html.vnt ::-webkit-scrollbar{width:10px;height:10px}
html.vnt ::-webkit-scrollbar-thumb{background:var(--vnt-line);border-radius:6px}
html.vnt ::-webkit-scrollbar-track{background:transparent}
html.vnt .pagination>li>a{border-color:var(--vnt-line);color:var(--vnt-dim);background:var(--vnt-surface)}
html.vnt .pagination>.active>a{background:var(--vnt-yellow);border-color:var(--vnt-yellow);color:var(--vnt-onyellow)}

/* =========================================================================
   Совместимость с существующей вёрсткой шаблонов зоны
   (перекрываем инлайн-стили и самодельные попапы без правки шаблонов)
   ========================================================================= */

/* Синие акценты в заголовках списков (registration_players*) -> фирменный янтарный */
html.vnt .page-header span[style*="color:blue"],
html.vnt h2 span[style*="color:blue"]{color:var(--vnt-yellow-ink) !important}
html.vnt .page-header{border-bottom:1px solid var(--vnt-line)}

/* Жёстко прописанный серый (#777) в head_judge_info -> приглушённый из темы */
html.vnt [style*="color: #777"],html.vnt [style*="color:#777"]{color:var(--vnt-muted) !important}

/* Самодельные попапы (.overlay/.popap в расписании и рассылке) */
html.vnt .overlay{background:rgba(0,0,0,.55) !important}
html.vnt .overlay .flex-popap .popap{
  background:var(--vnt-surface) !important;
  color:var(--vnt-ink);
  border:1px solid var(--vnt-line);
  border-radius:var(--vnt-r-lg);
  box-shadow:0 20px 60px rgba(0,0,0,.3);
}
html.vnt .popap span{color:var(--vnt-muted)}
html.vnt .popap span:hover{color:var(--vnt-ink)}

/* Цветные инлайн-статусы в тёмной теме: читаемые оттенки вместо чистых цветов */
html[data-theme="dark"].vnt [style*="color:red"],
html[data-theme="dark"].vnt [style*="color: red"]{color:#FF6B61 !important}
html[data-theme="dark"].vnt [style*="color:blue"],
html[data-theme="dark"].vnt [style*="color: blue"]{color:#7FB2FF !important}
html[data-theme="dark"].vnt [style*="color:green"],
html[data-theme="dark"].vnt [style*="color: green"]{color:#37D67A !important}

/* Сетки турнира (cell/*.tpl.php + cell.css): ячейки в тонах темы */
html.vnt table td[bgcolor],html.vnt table th[bgcolor]{background:var(--vnt-surface) !important}
html.vnt .cell table,html.vnt table.cell{background:var(--vnt-surface)}

/* Липкая шапка таблиц расписания на длинных страницах */
html.vnt .table-responsive{border:none}

/* =========================================================================
   Уровень 2: раскладка как в макете — левое меню вместо верхней навигации
   (трансформация выполняется brand-vnt.js, PHP-шаблоны не меняются)
   ========================================================================= */
body.vnt-sidebar{padding-left:252px;padding-right:16px;transition:padding-left .25s ease}
body.vnt-sidebar.vnt-nav-collapsed{padding-left:0}
.vnt-side{
  box-sizing:border-box;
  position:fixed;top:0;left:0;bottom:0;width:236px;z-index:1000;
  overflow-y:auto;overflow-x:hidden;
  background:var(--vnt-nav) !important;
  border:none !important;border-right:1px solid #2A2A33 !important;
  border-radius:0;margin:0;padding:14px 10px 70px;
  transition:transform .25s ease;min-height:0 !important;
}
body.vnt-nav-collapsed .vnt-side{transform:translateX(-105%)}
.vnt-side .container-fluid,.vnt-side .container,.vnt-side .navbar-header{display:block;float:none;padding:0;margin:0;width:auto}
.vnt-side .navbar-brand{display:none !important}
.vnt-side .navbar-toggle,.vnt-side .navbar-toggler{display:none !important}
.vnt-side .navbar-collapse{display:block !important;height:auto !important;padding:0;margin:0;border:none;box-shadow:none;overflow:visible;float:none;width:auto}
.vnt-side .navbar-nav,.vnt-side ul.nav{display:block;float:none;margin:0;width:100%}
.vnt-side .navbar-nav>li,.vnt-side .nav-item{display:block;float:none;width:100%}
.vnt-side *{box-sizing:border-box}
.vnt-side .navbar-nav>li>a,.vnt-side .nav-link{
  display:block;padding:10px 14px !important;margin:2px 2px;border-radius:10px;
  font-size:14px !important;
}
html.vnt .vnt-side .navbar-nav>li>a.vnt-active,
html.vnt .vnt-side .nav-link.vnt-active,
html.vnt .vnt-side .navbar-nav>.active>a,
html.vnt .vnt-side .nav-link.active{
  background:#16161C !important;color:#F4F4F6 !important;
  box-shadow:inset 3px 0 0 #F5C518;border-radius:10px;
}
/* Бренд-блок в меню */
.vnt-brand{display:flex;align-items:center;gap:11px;padding:6px 12px 16px;border-bottom:1px solid #2A2A33;margin-bottom:10px}
.vnt-brand svg{width:34px;height:34px;flex-shrink:0}
.vnt-brand b{display:block;font-family:var(--vnt-head);font-weight:800;font-size:11.5px;color:#F4F4F6;line-height:1.35}
.vnt-brand span{display:block;font-size:10.5px;color:rgba(244,244,246,.55)}
/* Кнопка скрытия меню */
.vnt-burger{
  position:fixed;left:18px;bottom:18px;z-index:9001;
  width:46px;height:46px;border-radius:50%;
  background:var(--vnt-nav);border:1px solid #2A2A33;color:#F4F4F6;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 4px 18px rgba(0,0,0,.25);transition:.15s;
}
.vnt-burger:hover{border-color:#F5C518}
.vnt-burger svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}
/* Контент: воздух и ограничение ширины как в макете */
body.vnt-sidebar>.container,body.vnt-sidebar>.container-fluid{max-width:1280px}
@media (max-width:880px){
  body.vnt-sidebar{padding-left:0}
  .vnt-side{box-shadow:30px 0 80px rgba(0,0,0,.45)}
}
/* Блок «шапка турнира» (head_judge_info): карточкой */
html.vnt .vnt-tourhead{background:var(--vnt-surface);border:1px solid var(--vnt-line);border-radius:var(--vnt-r-lg);box-shadow:var(--vnt-shadow);padding:14px 18px;margin:14px}

/* Ссылки меню без подчёркивания в любом окружении */
html.vnt .vnt-side a{text-decoration:none !important}

/* =========================================================================
   Уровень 3: точечный перенос макета
   ========================================================================= */

/* Меню всегда колонкой (Bootstrap 5 делает navbar флексом — ломало раскладку) */
.vnt-side{display:block !important}
.vnt-side>.container-fluid,.vnt-side>.container{display:block !important}

/* Лоадер — строго по центру экрана.
   Раньше здесь стоял padding-left:252px, чтобы он вставал по центру рабочей
   зоны: из-за этого слева до него было 252 px, а справа 0. */
body.vnt-sidebar .vnt-loader{padding-left:0}

/* Вторичные списки навигации (категории сеток и т.п.) — компактные чипы со своей прокруткой */
.vnt-side .vnt-subnav{
  display:flex !important;flex-wrap:wrap;gap:6px;
  padding:12px 6px 6px;margin:12px 2px 0;
  border-top:1px solid #2A2A33;
  max-height:38vh;overflow-y:auto;
}
.vnt-side .vnt-subnav>li{display:inline-block;float:none;width:auto !important}
.vnt-side .vnt-subnav>li>a{
  display:inline-block;padding:5px 10px !important;margin:0;
  font-size:11.5px !important;border:1px solid #2A2A33;border-radius:8px;
  color:rgba(244,244,246,.72) !important;box-shadow:none !important;background:transparent !important;
}
.vnt-side .vnt-subnav>li>a:hover{border-color:#F5C518;color:#F5C518 !important}
.vnt-side .vnt-subnav>.active>a,
.vnt-side .vnt-subnav>li>a.vnt-active{background:rgba(245,197,24,.12) !important;border-color:#F5C518;color:#F5C518 !important}

/* Шапка турнира (название + переключатель) — закреплённая светлая панель, как в макете */
html.vnt .vnt-tophead{
  position:sticky;top:0;z-index:900;
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  background:var(--vnt-surface);border-bottom:1px solid var(--vnt-line);
  box-shadow:var(--vnt-shadow);
  padding:12px 20px;margin:0 -16px 18px 0 !important;
}
html.vnt .vnt-tophead h4{font-family:var(--vnt-head);font-weight:800;text-transform:uppercase;font-size:13px;margin:0 0 2px}
html.vnt .vnt-tophead [class*="col-"]{float:none;padding:0;width:auto}
html.vnt .vnt-tophead [class*="col-"]:last-child{margin-left:auto;min-width:300px}
@media (max-width:880px){html.vnt .vnt-tophead [class*="col-"]:last-child{min-width:0;width:100%;margin-left:0}}

/* Кнопки отправки форм — фирменное действие */
html.vnt input[type="submit"],html.vnt button[type="submit"]{
  background:var(--vnt-yellow) !important;border:1px solid var(--vnt-yellow) !important;
  color:var(--vnt-onyellow) !important;border-radius:var(--vnt-r);font-weight:700;padding:8px 18px;
}
html.vnt input[type="submit"]:hover,html.vnt button[type="submit"]:hover{background:#ffd23c !important;border-color:#ffd23c !important}

/* =========================================================================
   Компоненты прототипа для контента страниц (используются в шаблонах)
   ========================================================================= */
.vnt-pagehead{margin:6px 0 20px}
.vnt-kicker{font-family:var(--vnt-head);font-weight:800;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--vnt-yellow-ink);margin-bottom:6px}
.vnt-page-title{font-family:var(--vnt-head);font-weight:900;font-size:24px;text-transform:uppercase;margin:0;color:var(--vnt-ink)}
.vnt-card{background:var(--vnt-surface);border:1px solid var(--vnt-line);border-radius:var(--vnt-r-lg);box-shadow:var(--vnt-shadow);padding:18px 20px;margin-bottom:14px}
.vnt-card-title{font-family:var(--vnt-head);font-weight:800;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--vnt-muted);margin:0 0 14px}
.vnt-card .table,.vnt-card table{box-shadow:none;margin-bottom:0}
.vnt-card .list-group-item{border-left:none;border-right:none;background:transparent !important}
.vnt-card .list-group-item:first-child{border-top:none}
.vnt-card .list-group-item:last-child{border-bottom:none}
.vnt-grid2{display:grid;grid-template-columns:1.2fr 1fr;gap:14px;align-items:start}
@media (max-width:1100px){.vnt-grid2{grid-template-columns:1fr}}
/* Плитки статистики */
.vnt-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:16px}
@media (max-width:1100px){.vnt-stats{grid-template-columns:repeat(3,1fr)}}
@media (max-width:640px){.vnt-stats{grid-template-columns:repeat(2,1fr)}}
.vnt-stat{background:var(--vnt-surface);border:1px solid var(--vnt-line);border-radius:var(--vnt-r-lg);box-shadow:var(--vnt-shadow);padding:16px 18px}
.vnt-stat-num{font-family:var(--vnt-mono);font-weight:700;font-size:28px;line-height:1.1;color:var(--vnt-ink)}
.vnt-stat-num small{font-size:12px;color:var(--vnt-muted);font-weight:500}
.vnt-stat-lbl{font-size:12px;color:var(--vnt-muted);font-weight:600;margin-top:6px}
.vnt-stat--accent .vnt-stat-num{color:var(--vnt-yellow-ink)}
.vnt-stat--warn .vnt-stat-num{color:var(--vnt-red)}
/* Заголовок карточки с действием справа */
.vnt-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.vnt-card-head .vnt-card-title{margin:0}

/* Прототип-карточки: вспомогательные правила */
html.vnt h4.page-header{font-family:var(--vnt-body);font-weight:600;font-size:12.5px;color:var(--vnt-muted);text-transform:none;border:none;margin:-6px 0 12px;padding:0}
html.vnt .vnt-card .row{margin-left:0;margin-right:0}
html.vnt .vnt-card [class*="col-"]{padding-left:0}
html.vnt .vnt-card .table-responsive{border:none;margin:0}

/* =========================================================================
   Прототип расписания: сетка запусков, drag-and-drop, диалог вставки
   ========================================================================= */
/* Единый хедер на всех страницах (перенесён под меню скриптом) */
html.vnt .vnt-tophead{margin:0 0 18px !important;border-radius:0}

/* Таблица расписания */
html.vnt table.oopGrid{width:100%;border-collapse:separate;border-spacing:0;border-radius:var(--vnt-r-lg);overflow:hidden;box-shadow:var(--vnt-shadow);background:var(--vnt-surface)}
html.vnt .oopGrid th{font-family:var(--vnt-head);font-weight:800;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--vnt-muted);background:var(--vnt-surface-2);border:1px solid var(--vnt-line) !important;padding:11px 12px}
html.vnt .oopGrid td{background:var(--vnt-surface);border:1px solid var(--vnt-line) !important;padding:10px 12px;vertical-align:top;font-size:12.5px}
html.vnt .oopGrid td b{font-weight:600}
html.vnt .oopGrid select,html.vnt .oopGrid input[type="time"]{
  width:100% !important;max-width:150px;height:30px !important;min-height:30px;
  padding:2px 8px !important;font-size:11.5px !important;margin:3px 0;border-radius:8px;
}
html.vnt .oopGrid .btn-xs{padding:4px 10px;font-size:11.5px;border-radius:8px}

/* Нераспределённые матчи — перетаскиваемые карточки */
html.vnt .vnt-draggable-match{
  display:inline-block;border:1px solid var(--vnt-line);border-left:3px solid var(--vnt-yellow);
  border-radius:10px;padding:8px 13px;margin:4px 6px 4px 0;background:var(--vnt-surface);
  cursor:grab;font-weight:600;font-size:12.5px;box-shadow:var(--vnt-shadow);user-select:none;
}
html.vnt .vnt-draggable-match:hover{border-color:var(--vnt-yellow)}
html.vnt .vnt-draggable-match.vnt-dragging{opacity:.4}
html.vnt .vnt-paste-toggle{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;color:var(--vnt-dim);margin:6px 0 10px;cursor:pointer}

/* Зоны приёма */
html.vnt td.vnt-dropzone{transition:.15s}
html.vnt td.vnt-dropover{outline:2px dashed var(--vnt-yellow);outline-offset:-4px;background:var(--vnt-yellow-soft) !important}

/* Диалог «время и режим» */
.vnt-modal-scrim{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:99000;display:flex;align-items:center;justify-content:center;padding:16px}
.vnt-modal{background:var(--vnt-surface);color:var(--vnt-ink);border:1px solid var(--vnt-line);border-radius:var(--vnt-r-lg);max-width:430px;width:100%;padding:22px;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.vnt-modal-court{font-family:var(--vnt-mono);font-size:12px;color:var(--vnt-muted);margin:-6px 0 14px}
.vnt-modal .vnt-field{display:block;font-size:12.5px;font-weight:600;color:var(--vnt-dim);margin-bottom:12px}
.vnt-modal .vnt-field select,.vnt-modal .vnt-field input[type="time"]{display:block;width:100%;margin-top:6px;height:40px;padding:7px 12px;border:1px solid var(--vnt-line);border-radius:var(--vnt-r);background:var(--vnt-surface);color:var(--vnt-ink);font-size:13.5px}
.vnt-modal .vnt-field--check{display:flex;align-items:center;gap:8px;font-weight:600;margin:16px 0 0;cursor:pointer}
.vnt-modal-btns{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}

/* =========================================================================
   LIVESCORE: корты карточками прототипа (чистый CSS, id и обработчики не тронуты)
   ========================================================================= */
html.vnt div[id^="court-"]{
  background:var(--vnt-surface);border:1px solid var(--vnt-line);
  border-radius:var(--vnt-r-lg);box-shadow:var(--vnt-shadow);
  margin:0 0 14px !important;padding:4px 12px 12px;
}
html.vnt div[id^="court-"]>.col-lg-12:first-child{
  font-family:var(--vnt-head);font-weight:800;font-size:11px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--vnt-ink);
  padding:12px 6px 8px;border-bottom:1px solid var(--vnt-line);margin-bottom:6px;
}
html.vnt div[id^="court-"] .table-responsive{border:none;width:100%;margin:0;padding:0 6px}
html.vnt div[id^="court-"] table{box-shadow:none;border-radius:0;margin:0}
html.vnt div[id^="court-"] td{
  border:none !important;border-top:1px solid var(--vnt-line) !important;
  background:transparent !important;white-space:nowrap;vertical-align:middle !important;
}
html.vnt div[id^="court-"] tr:first-child td{border-top:none !important}
/* Счёт по сетам — моноширинный, как в макете */
html.vnt div[id^="court-"] td[id^="set1_"],
html.vnt div[id^="court-"] td[id^="set2_"],
html.vnt div[id^="court-"] td[id^="set3_"],
html.vnt div[id^="court-"] td[id^="all_game_"]{
  font-family:var(--vnt-mono);font-weight:700;font-size:14px;text-align:center;min-width:28px;
}
/* Кнопки-имена игроков — акцент, служебные — компакт */
html.vnt div[id^="court-"] button[id^="plus_game_player_"]{font-weight:700;font-size:13px}
html.vnt div[id^="court-"] .btn-xs{padding:4px 10px;font-size:11.5px;border-radius:8px;margin:1px 0}
html.vnt div[id^="court-"] button[id^="stop_button_"]{color:var(--vnt-red)}
/* Секундомер */
html.vnt div[id^="court-"] [id^="secundomer_"]{font-family:var(--vnt-mono);font-weight:700}

/* Страница сеток (gbg-*): попапы и топбар в тонах темы */
html.vnt .gbg-topbar{background:var(--vnt-surface);border:1px solid var(--vnt-line);border-radius:var(--vnt-r-lg);box-shadow:var(--vnt-shadow);padding:14px 18px;margin-bottom:14px}
html.vnt .gbg-pop{background:var(--vnt-surface) !important;color:var(--vnt-ink) !important;border:1px solid var(--vnt-line) !important;border-radius:var(--vnt-r-lg) !important;box-shadow:0 20px 60px rgba(0,0,0,.35) !important}
html.vnt .gbg-pop-title{font-family:var(--vnt-head);font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.06em}
html.vnt .gbg-backdrop{background:rgba(0,0,0,.55) !important}
html.vnt .gbg-protocol-log th{font-family:var(--vnt-head);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--vnt-muted)}

/* =========================================================================
   Натяжка прототипа: группы меню, переключатель турнира, чипы, погода
   ========================================================================= */
.vnt-side .vnt-nav-label,.vnt-side-tour .vnt-nav-label{
  display:block;list-style:none;font-family:var(--vnt-head);font-weight:800;
  font-size:9px;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(244,244,246,.45);padding:16px 14px 6px;
}
.vnt-side-tour{padding:14px 10px 6px;border-top:1px solid #2A2A33;margin-top:14px}
.vnt-side-tour .vnt-nav-label{padding:0 4px 8px}
.vnt-side-tour select{
  width:100%;background:#16161C !important;border:1px solid #2A2A33 !important;
  color:#F4F4F6 !important;border-radius:10px;height:36px;min-height:36px;
  font-size:12.5px;padding:4px 10px;
}
html.vnt .vnt-weather-chip{
  margin-left:12px;border:1px solid var(--vnt-line);border-radius:10px;
  padding:6px 12px;font-weight:700;font-size:12.5px;color:var(--vnt-ink);white-space:nowrap;
}
/* Вторичные меню в контенте — горизонтальные чипы прототипа.
   flex-direction задан явно: список приезжает сюда из навигации с классами
   nav navbar-nav, а у Bootstrap 5 .navbar-nav — это колонка, в строку её
   разворачивает только .navbar-expand-lg на самом <nav>. Вне навигации этот
   предок теряется, и чипы вытягивались в столбик во всю ширину страницы.
   По той же причине элементам списка нужен flex:0 0 auto — иначе они
   растягиваются на всю строку, а display:inline-block у флекс-элемента
   всё равно превращается в block. */
html.vnt .vnt-chips-strip{
  display:flex !important;flex-direction:row !important;
  flex-wrap:wrap;align-items:center;gap:8px;list-style:none;
  margin:0 0 16px;padding:0;border:none;max-height:none;overflow:visible;
  width:auto;
}
html.vnt .vnt-chips-strip>li{
  display:inline-block;float:none;width:auto;
  flex:0 0 auto;max-width:100%;
}
html.vnt .vnt-chips-strip>li>a{
  display:inline-block;padding:7px 14px !important;margin:0;
  border:1px solid var(--vnt-line);border-radius:12px;background:var(--vnt-surface);
  color:var(--vnt-dim) !important;font-weight:700;font-size:12.5px !important;
  box-shadow:var(--vnt-shadow);text-decoration:none !important;
}
html.vnt .vnt-chips-strip>li>a:hover{border-color:var(--vnt-yellow);color:var(--vnt-ink) !important}
html.vnt .vnt-chips-strip>.active>a,
html.vnt .vnt-chips-strip>li>a.vnt-active{
  background:var(--vnt-yellow) !important;border-color:var(--vnt-yellow);color:#0C0C0F !important;box-shadow:none;
}

/* =========================================================================
   Расписание v9: приближение живой сетки к карточкам прототипа
   ========================================================================= */
/* Кнопки внутри сетки — нейтральные, жёлтый больше не «шумит» */
html.vnt .oopGrid .btn-primary,
html.vnt .oopGrid .btn{
  background:var(--vnt-surface) !important;border:1px solid var(--vnt-line) !important;
  color:var(--vnt-dim) !important;box-shadow:none !important;
}
html.vnt .oopGrid .btn:hover{border-color:var(--vnt-yellow) !important;color:var(--vnt-ink) !important}
/* «Вставить» в пустой ячейке — призрачная кнопка-зона, как «+ Перетащите матч» */
html.vnt .oopGrid td.vnt-dropzone button[onclick^="pasteMatch"]{
  display:block;width:100%;padding:16px 8px !important;
  border:1.5px dashed var(--vnt-line) !important;background:transparent !important;
  color:var(--vnt-muted) !important;font-weight:600;border-radius:12px;
}
html.vnt .oopGrid td.vnt-dropzone button[onclick^="pasteMatch"]:hover{
  border-color:var(--vnt-yellow) !important;color:var(--vnt-yellow-ink) !important;background:var(--vnt-yellow-soft) !important;
}
/* Селекты и время в ПУСТЫХ ячейках спрятаны (их заполняет диалог), появляются при наведении */
html.vnt .oopGrid td.vnt-dropzone select,
html.vnt .oopGrid td.vnt-dropzone input[type="time"]{display:none}
html.vnt .oopGrid td.vnt-dropzone:hover select,
html.vnt .oopGrid td.vnt-dropzone:hover input[type="time"]{display:block}
/* Номер свободной ячейки (№:1_3) — маленькая метка */
html.vnt .oopGrid td.vnt-dropzone span{font-family:var(--vnt-mono);font-size:10.5px;color:var(--vnt-muted);font-weight:500}
/* Заполненные ячейки — карточный вид */
html.vnt .oopGrid td.vnt-filled{font-size:12.5px;line-height:1.55}
html.vnt .oopGrid td.vnt-filled b{font-weight:600}
/* Имена игроков: цветовую сигнализацию заменяют лейблы — текст в тон темы */
html.vnt .oopGrid td.vnt-filled [style*="color:red"],
html.vnt .oopGrid td.vnt-filled [style*="color: red"],
html.vnt .oopGrid td.vnt-filled [style*="color:green"],
html.vnt .oopGrid td.vnt-filled [style*="color: green"],
html.vnt .oopGrid td.vnt-filled font{color:var(--vnt-ink) !important;font-weight:700}
/* Первая колонка (номер запуска и условия строки) */
html.vnt .oopGrid td[style*="font-weight: bold"]{font-family:var(--vnt-mono);font-size:18px;color:var(--vnt-ink)}
html.vnt .oopGrid td[style*="font-weight: bold"] select,
html.vnt .oopGrid td[style*="font-weight: bold"] input[type="time"]{font-family:var(--vnt-body)}


/* =========================================================================
   Серверная карточка матча в ячейке расписания (Controller/Main.php)
   ========================================================================= */
html.vnt .oopGrid .vnt-mc{display:flex;flex-direction:column;gap:3px;text-align:left;font-weight:400}
html.vnt .oopGrid .vnt-mc-top{display:flex;justify-content:space-between;gap:10px;align-items:baseline}
html.vnt .oopGrid .vnt-mc-when{font-family:var(--vnt-mono);font-size:11px;font-weight:700;color:var(--vnt-ink)}
html.vnt .oopGrid .vnt-mc-round{font-family:var(--vnt-mono);font-size:10.5px;color:var(--vnt-muted)}
html.vnt .oopGrid .vnt-mc-judge{font-size:11px;color:var(--vnt-muted)}
html.vnt .oopGrid .vnt-mc-p{font-weight:700;font-size:13px;color:var(--vnt-ink);line-height:1.4}
html.vnt .oopGrid .vnt-mc-p span{color:var(--vnt-ink) !important}
html.vnt .oopGrid .vnt-mc-vs{font-family:var(--vnt-mono);font-size:10px;color:var(--vnt-muted)}
html.vnt .oopGrid .vnt-mc-score{font-family:var(--vnt-mono);font-size:12.5px;color:var(--vnt-dim);display:flex;gap:10px;align-items:center;margin-top:2px;flex-wrap:wrap}
html.vnt .oopGrid .vnt-mc-foot{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px dashed var(--vnt-line)}

/* =========================================================================
   Кабинет переведён на Bootstrap 5, а в нём нет классов .hide и .hidden
   из Bootstrap 3 — без них скрытые блоки (поля парного разряда, пустые
   плашки ошибок, таблица правки счёта) стали видны. Возвращаем их.
   .vnt-loader исключён: там .hide означает «прозрачный», а не «убранный»,
   на этом построено угасание загрузчика в brand-vnt.js.
   ========================================================================= */
html.vnt .hide:not(.vnt-loader),
html.vnt .hidden{display:none !important}

/* ======================================================================
   Верхняя панель кабинета и подвал меню — по макету прототипа
   ====================================================================== */

/* Подзаголовок турнира под названием: даты · клуб · категория */
html.vnt .vnt-tour-sub{font-family:var(--vnt-body);font-size:12px;color:var(--vnt-muted)}

/* Правый край верхней панели: LIVE, погода, тема */
html.vnt .vnt-hj-right{display:flex;align-items:center;gap:10px;margin-left:auto;flex-wrap:wrap}

html.vnt .vnt-live-pill{
  display:inline-flex;align-items:center;gap:7px;
  background:var(--vnt-red);color:#fff !important;text-decoration:none;
  border-radius:999px;padding:5px 12px;font:700 11.5px var(--vnt-head);
  letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;
}
html.vnt .vnt-live-pill:hover{filter:brightness(1.07);text-decoration:none;color:#fff !important}
html.vnt .vnt-live-pill .vnt-mono{font-family:var(--vnt-mono);text-transform:none;letter-spacing:0}
html.vnt .vnt-live-dot{width:7px;height:7px;border-radius:50%;background:#fff;animation:vntLiveBlink 1.1s infinite}
@keyframes vntLiveBlink{0%,100%{opacity:1}50%{opacity:.25}}

html.vnt .vnt-weather-chip{
  display:inline-flex;align-items:center;gap:6px;background:var(--vnt-surface-2);
  border:1px solid var(--vnt-line);border-radius:999px;padding:5px 12px;
  font:600 12px var(--vnt-body);color:var(--vnt-dim);white-space:nowrap;
}

/* Кнопка темы в панели — со значком и подписью */
html.vnt .vnt-theme-btn--inline{
  position:static !important;width:auto !important;height:auto !important;
  display:inline-flex;align-items:center;gap:7px;
  background:var(--vnt-surface) !important;border:1px solid var(--vnt-line) !important;
  border-radius:999px !important;padding:5px 12px !important;box-shadow:none !important;
  color:var(--vnt-dim) !important;font:600 12px var(--vnt-body);white-space:nowrap;
}
html.vnt .vnt-theme-btn--inline:hover{border-color:var(--vnt-yellow) !important}
html.vnt .vnt-theme-btn--inline svg{width:15px;height:15px;flex-shrink:0}
html.vnt .vnt-theme-cap{font:600 12px var(--vnt-body)}

/* Подвал левого меню: кто вошёл и какой день турнира */
html.vnt .vnt-side-who{padding:0 0 10px;margin:0 0 10px;border-top:1px solid var(--vnt-line);padding-top:14px}
html.vnt .vnt-side-who b{display:block;font:700 13px var(--vnt-body);color:#F4F4F6}
html.vnt .vnt-side-who span{display:block;font:500 11.5px var(--vnt-body);color:rgba(244,244,246,.55)}
html.vnt .vnt-side-day{margin-top:9px;font:500 11px var(--vnt-mono);color:rgba(244,244,246,.45)}

/* =========================================================================
   v23 · Каркас, тёмная тема и адаптивность кабинета главного судьи
   -------------------------------------------------------------------------
   Правила ниже ограничены классом vnt-hj — его вешает на <html> скрипт из
   hj_menu.tpl.php, а это меню подключают только страницы кабинета. Судейская
   страница, live-табло, кабинет игрока и админка сюда не попадают.
   ========================================================================= */

/* -------------------------------------------------------------------------
   1. Белая подложка страниц
   sb-admin-2.css задаёт #page-wrapper{background:#fff} и светлую границу
   слева. Файл общий с админкой и кабинетом игрока, поэтому не правим его, а
   перекрываем здесь: селектор с id весомее, порядок подключения не важен.
   В тёмной теме именно эта заливка делала «Списки», «Сетки» и «Судей»
   нечитаемыми — светлый текст выводился на белом.
   ------------------------------------------------------------------------- */
html.vnt.vnt-hj #wrapper,
html.vnt.vnt-hj #page-wrapper,
html.vnt.vnt-hj #page-wrapper-judge{
  background:transparent !important;
  border-left:none !important;
}

/* Поля контента. Ширину НЕ ограничиваем: на широком мониторе главного судьи
   в сетку расписания должны помещаться все корты, а в список матчей — все
   колонки. Ограничение в 1280px здесь уже пробовали — оно съедало половину
   экрана и обрезало четвёртый корт. */
html.vnt.vnt-hj #page-wrapper,
html.vnt.vnt-hj #page-wrapper-judge{
  padding:0 16px 28px;
  min-width:0;
}
@media (min-width:768px){
  html.vnt.vnt-hj #page-wrapper,
  html.vnt.vnt-hj #page-wrapper-judge{padding:0 24px 32px}
}

/* Плавающие кнопки (тема, бургер, заметки) висят в углах экрана и
   перекрывали последнюю строку страницы — например «Выгрузить» на Главной */
html.vnt.vnt-hj body{padding-bottom:78px}
@media print{html.vnt.vnt-hj body{padding-bottom:0}}

/* -------------------------------------------------------------------------
   2. Читаемость мелкого текста
   Заголовки таблиц шли 9.5px в разрядку 0.1em — на солнце и на телефоне это
   не читается ни в одной теме.
   ------------------------------------------------------------------------- */
html.vnt.vnt-hj .table>thead>tr>th,
html.vnt.vnt-hj table thead th{font-size:11px;letter-spacing:.07em}
html.vnt.vnt-hj .vnt-card-title,
html.vnt.vnt-hj .panel-heading{font-size:11.5px;letter-spacing:.07em}
html.vnt.vnt-hj .vnt-kicker{font-size:11px;letter-spacing:.1em}
html.vnt.vnt-hj label{font-size:13px}

/* Заголовок страницы не должен разрезать длинное название турнира */
html.vnt.vnt-hj .vnt-page-title{overflow-wrap:anywhere;line-height:1.2}

/* -------------------------------------------------------------------------
   3. Страховка от чужих светлых заливок в тёмной теме
   В шаблонах остаются точечные inline-стили с белым фоном. Пока текст
   наследует светлый цвет темы, такой блок превращается в белое пятно.
   ------------------------------------------------------------------------- */
html[data-theme="dark"].vnt.vnt-hj [style*="background:#fff"],
html[data-theme="dark"].vnt.vnt-hj [style*="background: #fff"],
html[data-theme="dark"].vnt.vnt-hj [style*="background-color:#fff"],
html[data-theme="dark"].vnt.vnt-hj [style*="background-color: #fff"],
html[data-theme="dark"].vnt.vnt-hj [style*="background:#FFF"],
html[data-theme="dark"].vnt.vnt-hj [style*="background: #FFF"],
html[data-theme="dark"].vnt.vnt-hj [style*="background:white"],
html[data-theme="dark"].vnt.vnt-hj [style*="background: white"]{
  background:var(--vnt-surface) !important;
  color:var(--vnt-ink);
}
/* Тёмный текст, прописанный в разметке, на тёмном фоне */
html[data-theme="dark"].vnt.vnt-hj [style*="color:#000"],
html[data-theme="dark"].vnt.vnt-hj [style*="color: #000"],
html[data-theme="dark"].vnt.vnt-hj [style*="color:black"],
html[data-theme="dark"].vnt.vnt-hj [style*="color: black"],
html[data-theme="dark"].vnt.vnt-hj [style*="color:#333"],
html[data-theme="dark"].vnt.vnt-hj [style*="color: #333"],
html[data-theme="dark"].vnt.vnt-hj [style*="color:#666"],
html[data-theme="dark"].vnt.vnt-hj [style*="color: #666"]{color:var(--vnt-ink) !important}

/* Поле поиска с фоновой картинкой-лупой (registration_players, set_judges):
   светлая иконка вшита в data:URI и в тёмной теме светилась белым пятном */
html[data-theme="dark"].vnt.vnt-hj input[style*="data:image/png;base64"]{
  background-image:none !important;
}

/* Значок «непрочитанные сообщения» в меню */
html.vnt.vnt-hj .hj-msg-badge{background:var(--vnt-red) !important;color:#fff !important}

/* -------------------------------------------------------------------------
   4. Адаптивность
   У кабинета своего слоя не было: он есть только у админки (vnt-admin.css).
   Разметка страниц осталась на сетке Bootstrap 3 (col-xs-4 и подобные), а
   подключён Bootstrap 5, где таких классов нет, — на узком экране колонки
   схлопывались или вылезали за край.
   ------------------------------------------------------------------------- */
/* Ничто не должно вылезать за край: картинки ужимаются, поля не растягивают
   свою колонку. Сетку Bootstrap здесь не трогаем — на широком мониторе она
   должна оставаться такой, какой её задал шаблон. */
html.vnt.vnt-hj img{max-width:100%;height:auto}
html.vnt.vnt-hj .input-group{max-width:100%}

/* Колонки старой сетки Bootstrap 3 (col-xs-4 и подобные) на планшете и
   телефоне схлопываются в ниточку: подключён Bootstrap 5, где таких классов
   нет. Делаем их резиновыми — но только на узких экранах. На большом мониторе
   раскладку страниц не меняем: там col-md-* и col-lg-* работают штатно, и
   вмешательство ломало пропорции расписания и списка матчей. */
@media (max-width:991px){
  html.vnt.vnt-hj #page-wrapper .row,
  html.vnt.vnt-hj #page-wrapper-judge .row{
    display:flex;flex-wrap:wrap;align-items:flex-start;
  }
  html.vnt.vnt-hj #page-wrapper .row>[class^="col-xs-"],
  html.vnt.vnt-hj #page-wrapper .row>[class*=" col-xs-"],
  html.vnt.vnt-hj #page-wrapper-judge .row>[class^="col-xs-"],
  html.vnt.vnt-hj #page-wrapper-judge .row>[class*=" col-xs-"]{
    float:none;width:auto;max-width:100%;
    min-width:min(100%,240px);flex:1 1 250px;
    margin-bottom:12px;
  }
  html.vnt.vnt-hj #page-wrapper .row>[class*="col-"]>*{max-width:100%}
}

/* Широкие таблицы прокручиваются вбок на любой ширине.
   Штатный .table-responsive Bootstrap 3 включает прокрутку только до 767px,
   поэтому на планшете таблица ломала страницу. */
html.vnt.vnt-hj .table-responsive{
  width:100%;margin:0;border:0;
  overflow-x:auto;overflow-y:visible;
  -webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;
}
/* html.vnt table{overflow:hidden} стоит ради скруглённых углов, но внутри
   прокручиваемой обёртки делает таблицу своей областью прокрутки */
html.vnt.vnt-hj .table-responsive>table{
  overflow:visible;margin-bottom:0;border-radius:0;box-shadow:none;
}

/* Поля и кнопки под палец */
@media (max-width:900px){
  /* 16px — порог, ниже которого Safari на iOS сам приближает страницу
     при попадании в поле, после чего вёрстка «уезжает» */
  html.vnt.vnt-hj .form-control,
  html.vnt.vnt-hj input[type="text"],
  html.vnt.vnt-hj input[type="date"],
  html.vnt.vnt-hj input[type="time"],
  html.vnt.vnt-hj input[type="number"],
  html.vnt.vnt-hj input[type="email"],
  html.vnt.vnt-hj input[type="password"],
  html.vnt.vnt-hj select,
  html.vnt.vnt-hj textarea{font-size:16px;min-height:46px}

  html.vnt.vnt-hj input[type="checkbox"],
  html.vnt.vnt-hj input[type="radio"]{min-height:0;width:20px;height:20px}

  html.vnt.vnt-hj .btn,
  html.vnt.vnt-hj .ev-btn,
  html.vnt.vnt-hj .hj-btn,
  html.vnt.vnt-hj input[type="submit"],
  html.vnt.vnt-hj button[type="submit"]{min-height:44px}

  /* Кнопки внутри таблиц и сетки расписания во всю ширину не нужны */
  html.vnt.vnt-hj .table .btn,
  html.vnt.vnt-hj .oopGrid .btn{width:auto;min-height:38px;font-size:13px;padding:7px 12px}

  html.vnt.vnt-hj .table>thead>tr>th{font-size:12px;padding:9px 10px}
  html.vnt.vnt-hj .table>tbody>tr>td{font-size:13.5px;padding:9px 10px}

  html.vnt.vnt-hj .vnt-page-title{font-size:20px}
  html.vnt.vnt-hj h1{font-size:20px}
  html.vnt.vnt-hj h2{font-size:17px}
}

/* Верхняя панель на телефоне: название и правый блок в столбик */
@media (max-width:640px){
  html.vnt.vnt-hj .vnt-tophead{padding:10px 14px;gap:8px}
  html.vnt.vnt-hj .vnt-tophead h4{font-size:12px}
  html.vnt.vnt-hj .vnt-hj-right{margin-left:0;width:100%}
}

/* Чипы разрядов: одна строка с прокруткой вместо трёх строк на телефоне */
@media (max-width:640px){
  html.vnt.vnt-hj .vnt-chips-strip{
    flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;
  }
  html.vnt.vnt-hj .vnt-chips-strip::-webkit-scrollbar{display:none}
  html.vnt.vnt-hj .vnt-chips-strip>li{flex:0 0 auto}
}

/* Затемнение под открытым меню на телефоне — чтобы было понятно,
   что нажатие мимо меню его закроет (сам обработчик в brand-vnt.js) */
.vnt-hj-scrim{
  position:fixed;inset:0;background:rgba(0,0,0,.5);
  z-index:999;display:none;-webkit-tap-highlight-color:transparent;
}
@media (max-width:880px){
  html.vnt.vnt-hj body.vnt-sidebar:not(.vnt-nav-collapsed) .vnt-hj-scrim{display:block}
  html.vnt.vnt-hj .vnt-side{width:min(288px,84vw)}
  html.vnt.vnt-hj .vnt-burger{
    width:52px;height:52px;left:14px;
    bottom:calc(14px + env(safe-area-inset-bottom,0px));
  }
  html.vnt.vnt-hj .vnt-theme-btn{
    right:14px;bottom:calc(14px + env(safe-area-inset-bottom,0px));
  }
}

/* Сетка расписания: на узком экране прокручивается вбок вместе с шапкой */
@media (max-width:880px){
  html.vnt.vnt-hj table.oopGrid{min-width:720px}
  html.vnt.vnt-hj .ev-grid-wrap{margin:0 -16px;padding:0 16px 6px}
}

/* Печать: панели и кнопки на бумаге не нужны */
@media print{
  html.vnt.vnt-hj body.vnt-sidebar{padding-left:0 !important}
  html.vnt.vnt-hj .vnt-side,
  html.vnt.vnt-hj .vnt-burger,
  html.vnt.vnt-hj .vnt-hj-scrim,
  html.vnt.vnt-hj .vnt-theme-btn{display:none !important}
  html.vnt.vnt-hj .table-responsive{overflow:visible}
}

/* -------------------------------------------------------------------------
   5. Переменные Bootstrap 5.3 — на цвета темы
   Bootstrap держит свои цвета в переменных и задаёт их прямо на элементе:
   у ячейки таблицы стоит color:var(--bs-table-color), у поля —
   color:var(--bs-body-color). Собственное правило элемента сильнее
   унаследованного от родителя, поэтому наши цвета до ячеек не доходили.
   Атрибут data-bs-theme (его ставит hj_menu и brand-vnt.js) уже переводит
   Bootstrap в тёмный режим; здесь дополнительно сводим его палитру к нашей,
   чтобы таблицы и поля совпадали с карточками по тону.
   ------------------------------------------------------------------------- */
html.vnt.vnt-hj body{
  --bs-body-color:var(--vnt-ink);
  --bs-body-bg:var(--vnt-bg);
  --bs-secondary-color:var(--vnt-muted);
  --bs-tertiary-color:var(--vnt-muted);
  --bs-border-color:var(--vnt-line);
  --bs-emphasis-color:var(--vnt-ink);
  --bs-link-color:var(--vnt-yellow-ink);
  --bs-link-hover-color:var(--vnt-ink);
  --bs-heading-color:var(--vnt-ink);
}
html.vnt.vnt-hj .table{
  --bs-table-color:var(--vnt-ink);
  --bs-table-bg:var(--vnt-surface);
  --bs-table-border-color:var(--vnt-line);
  --bs-table-striped-color:var(--vnt-ink);
  --bs-table-striped-bg:var(--vnt-surface);
  --bs-table-active-color:var(--vnt-ink);
  --bs-table-active-bg:var(--vnt-surface-2);
  --bs-table-hover-color:var(--vnt-ink);
  --bs-table-hover-bg:var(--vnt-surface-2);
}
/* Ячейка красится своим правилом .table>:not(caption)>*>* — перекрываем его
   тем же уровнем вложенности, иначе фон шапки и тела расходятся */
html.vnt.vnt-hj .table>:not(caption)>*>*{
  color:var(--vnt-ink);
  background-color:var(--vnt-surface);
}
html.vnt.vnt-hj .table>thead>tr>th{
  color:var(--vnt-muted);
  background-color:var(--vnt-surface-2);
}
html.vnt.vnt-hj .form-control,
html.vnt.vnt-hj .form-select{
  --bs-body-color:var(--vnt-ink);
  --bs-body-bg:var(--vnt-surface);
  --bs-border-color:var(--vnt-line);
  color:var(--vnt-ink);
  background-color:var(--vnt-surface);
  border-color:var(--vnt-line);
}
/* Стрелка выпадающего списка.
   Выше в файле поля заданы сокращением background: — оно сбрасывает не
   только картинку, но и её положение с повторением, поэтому у .form-select
   стрелка Bootstrap пропадала. Возвращаем целиком: одна картинка у правого
   края, цвет нейтрально-серый — виден и на белом, и на чёрном. */
html.vnt.vnt-hj .form-select{
  background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23888892' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
  background-repeat:no-repeat;
  background-position:right .75rem center;
  background-size:16px 12px;
  padding-right:2.4rem;
  appearance:none;
  -webkit-appearance:none;
}
html.vnt.vnt-hj .input-group-text{
  background-color:var(--vnt-surface-2);
  border-color:var(--vnt-line);
  color:var(--vnt-dim);
}
html.vnt.vnt-hj .text-muted{color:var(--vnt-muted) !important}
html.vnt.vnt-hj .btn-close{filter:none}
html[data-theme="dark"].vnt.vnt-hj .btn-close{filter:invert(1) grayscale(100%) brightness(200%)}
html.vnt.vnt-hj .modal-content,
html.vnt.vnt-hj .dropdown-menu,
html.vnt.vnt-hj .offcanvas{
  background-color:var(--vnt-surface);
  color:var(--vnt-ink);
  border-color:var(--vnt-line);
}

/* =========================================================================
   Верхняя панель кабинета — всё в одну строку
   -------------------------------------------------------------------------
   Панель собрана из bootstrap-строки .row (head_judge_info.tpl.php), а в
   Bootstrap 5 у .row>* стоит width:100%. Колонки от этого спасало правило
   выше ([class*="col-"]{width:auto}), но правый блок .vnt-hj-right и чип
   погоды — обычные div и span, и они растягивались на всю строку: тема
   уезжала на вторую строку, температура на третью серой полосой.
   Здесь ширина возвращается по содержимому, название занимает остаток
   строки, а на телефоне панель по-прежнему может переноситься.
   ========================================================================= */
html.vnt .vnt-tophead>*{
  width:auto;max-width:100%;flex:0 0 auto;
  padding-left:0;padding-right:0;margin-top:0;
}
html.vnt .vnt-tophead>[class*="col-"]:first-child{flex:1 1 auto;min-width:0}
html.vnt .vnt-tophead h4{
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
}
html.vnt .vnt-tophead .vnt-tour-sub{
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
}

/* Правый край: LIVE · погода · тема — одной строкой, без переноса */
html.vnt .vnt-hj-right{flex-wrap:nowrap;flex:0 0 auto}

@media (min-width:881px){
  html.vnt .vnt-tophead{flex-wrap:nowrap}
}

/* Телефон: название сверху, LIVE-погода-тема строкой под ним */
@media (max-width:880px){
  html.vnt .vnt-tophead{flex-wrap:wrap}
  html.vnt .vnt-hj-right{width:100%;margin-left:0;flex-wrap:wrap}
}
