/* ============================================================================
   layout.css — ЕДИНАЯ ШИРИНА САЙТА (окно №17, требование Вовы: «все размеры
   всегда одинаковые, даже если добавляем новую страницу»).

   ПРАВИЛО: меняешь --site-w ЗДЕСЬ — ширина меняется на ВСЁМ сайте разом.
   Каждая НОВАЯ страница обязана подключать этот файл сразу после footer.css:
       <link rel="stylesheet" href="/css/layout.css?v=1">
   !important тут осознанно: перекрывает разнобойные max-width в инлайн-стилях
   страниц (1100/1360/1400), чтобы источник ширины был ровно один.

   ИСКЛЮЧЕНИЯ (этот файл НЕ подключают): юр-страницы oferta/privacy (860px,
   решение Вовы «кроме юриспруденции») и лендинг index.html (свой дизайн 1180).

   Подключено на: index.php, catalog.php, admin.php, review.php, coaching.php,
   reviews.php (members). Локальная копия: v2/root/css/, боевая: public_html/css/.
   ========================================================================== */

:root { --site-w: 1400px; }

/* контент всех members-страниц (.wrap) и премиум-футер — одна ширина.
   (22.07, окно №30) + ЦЕНТРИРОВАНИЕ: раньше margin:0 auto носила каждая
   страница инлайном — новые страницы (hero/stats_check/demo_check) без своей
   копии липли к ЛЕВОМУ краю. Причина чинится тут: база для ВСЕХ страниц.
   margin-left/right (а не margin:0 auto) — чтобы не трогать вертикальные
   отступы, если страница задаёт свои. */
.wrap { max-width: var(--site-w) !important; padding: 24px 20px 40px !important;
        margin-left: auto !important; margin-right: auto !important; }
.site-footer .sf-inner { max-width: var(--site-w) !important; }

/* ============================================================================
   «КАЖДЫЙ ЭЛЕМЕНТ ЖИВОЙ» (правило Вовы, 17.07.2026, окно мелких фиксов).
   Visual Feedback / микроинтеракции для ВСЕГО сайта, включая админку:
   hover — заметный отклик, active — «вдавливание», focus — бренд-обводка,
   disabled — полупрозрачность + not-allowed, ошибки (.bad) — красный бордер
   и shake. Переходы .15s ease-in-out, ничего дёрганого. Файл подключён на
   всех members-страницах — новые страницы получают слой автоматически.
   Классы fb* (НЕ «ad» — адблок-правило).
   ========================================================================== */

/* переходы: кликабельное и поля ввода */
button, .btn, a, summary, select, label,
input[type=submit], input[type=button],
input[type=checkbox], input[type=radio] { transition: all .15s ease-in-out; }
input[type=text], input[type=number], input[type=search], input[type=url],
input[type=email], input[type=password], textarea {
  transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out,
              background .15s ease-in-out; }

/* курсор: кликабельность очевидна */
button:not(:disabled), .btn, summary, select,
input[type=submit]:not(:disabled), input[type=button]:not(:disabled),
input[type=checkbox]:not(:disabled), input[type=radio]:not(:disabled) { cursor: pointer; }

/* hover: элемент явно отвечает (яркость — работает поверх любых своих стилей) */
button:hover:not(:disabled), .btn:hover,
input[type=submit]:hover:not(:disabled), input[type=button]:hover:not(:disabled) {
  filter: brightness(1.12); }
a:hover { filter: brightness(1.18); }

/* active: физическое ощущение клика */
button:active:not(:disabled), .btn:active,
input[type=submit]:active:not(:disabled), input[type=button]:active:not(:disabled),
input[type=checkbox]:active:not(:disabled), input[type=radio]:active:not(:disabled) {
  transform: scale(.96); }

/* focus: клавиатурная навигация и поля ввода */
:focus-visible { outline: 2px solid var(--brand, #c5f02b); outline-offset: 2px; }
input:focus, textarea:focus, select:focus {
  border-color: var(--brand, #c5f02b) !important;
  box-shadow: 0 0 0 2px rgba(197, 240, 43, .14); outline: none; }

/* disabled: мёртвое выглядит мёртвым, но осознанно */
button:disabled, input:disabled, select:disabled, textarea:disabled, .btn.off {
  opacity: .5; cursor: not-allowed; filter: none; transform: none; }

/* ошибка: страницы вешают класс .bad на поле — красный бордер + shake */
.bad { border-color: var(--acc, #e6482e) !important; animation: fbShake .3s ease; }
@keyframes fbShake {
  25% { transform: translateX(-4px); } 50% { transform: translateX(4px); }
  75% { transform: translateX(-2px); } }

/* loading: класс .fb-busy на кнопку (AJAX сам ставит disabled — этого слоя
   хватает для блока двойного клика; спиннер — точечно, где реально долго) */
.fb-busy { pointer-events: none; opacity: .6; }

/* наведение на ТЕКСТ рядом с галочкой подсвечивает и саму галочку (правило
   «каждый элемент живой», доп. Вовы 17.07): лейбл и строки задач .tsk */
label:hover > input[type=checkbox]:not(:disabled),
label:hover input[type=checkbox]:not(:disabled),
.tsk:hover input[type=checkbox]:not(:disabled) {
  border-color: var(--brand, #c5f02b); }

/* (доп. Вовы 17.07) убираем стрелочки-спиннеры у number-полей ВЕЗДЕ — ввод
   только с клавиатуры (ММР ученика, «занятий» у тренера и любые новые) */
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
input[type=number] { -moz-appearance: textfield; appearance: textfield; }

/* ============================================================================
   МОБИЛЬНАЯ НАВИГАЦИЯ (18.07): вкладки шапки НЕ прятать в горизонтальный скролл
   со скрытым скроллбаром (юзер не видел «Отзывы»/«О тренере») — на узком экране
   переносим их в несколько рядов, чтобы все были видны сразу.
   ========================================================================== */
@media (max-width:920px) {
  .urow2 { flex-wrap: wrap !important; overflow: visible !important; }
}
