/* ============================================================================
   ЕДИНЫЙ СТИЛЬ ПРОЕКТА — НЕОМОРФИЗМ
   ----------------------------------------------------------------------------
   Перенесен из dashboard.html, чтобы все страницы выглядели одинаково.

   ПОДКЛЮЧЕНИЕ: в <head> каждой страницы, ПОСЛЕ Tailwind:
       <link rel="stylesheet" href="neu.css">

   Ключевые классы:
     .neu, .neu-sm, .neu-lg          — выпуклые блоки (карточки, панели)
     .neu-inset, .neu-inset-sm       — впадины (поля ввода, области)
     .metric-card                    — карточка показателя, всплывает при наведении
     .soft-select                    — выпадающие списки и поля
     .btn-soft                       — кнопки, активная становится впадиной
     .neu-chip, .neu-icon            — мелкие плашки и круглые иконки
     .glass, .glass-soft             — старые имена, оставлены для совместимости

   Если страница верстается классами Tailwind (bg-white, shadow-sm, border),
   раздел «АДАПТАЦИЯ СТАРОЙ ВЕРСТКИ» внизу приводит ее к общему виду
   автоматически, без правки разметки.
   ============================================================================ */

:root {
      --bg: #e4e9f2;
      --bg-light: #f0f4fa;
      --shadow-dark: #c8d0e0;
      --shadow-light: #ffffff;
      --accent: #5b7cfa;
      --accent-soft: #7b93f5;
      --text: #3d4a5c;
      --text-muted: #8b97a8;
    }

    .custom-scrollbar::-webkit-scrollbar { height: 6px; width: 6px; }
    .custom-scrollbar::-webkit-scrollbar-track { background: transparent; }
    .custom-scrollbar::-webkit-scrollbar-thumb {
      background: #c8d0e0;
      border-radius: 20px;
      box-shadow: inset 1px 1px 2px #a8b4c8, inset -1px -1px 2px #e8eef8;
    }

    /* ===== NEUMORPHISM: выпуклые элементы (raised) ===== */
    .neu {
      background: var(--bg);
      border-radius: 24px;
      border: none;
      box-shadow:
        9px 9px 18px var(--shadow-dark),
        -9px -9px 18px var(--shadow-light);
    }
    .neu-sm {
      background: var(--bg);
      border-radius: 16px;
      border: none;
      box-shadow:
        5px 5px 12px var(--shadow-dark),
        -5px -5px 12px var(--shadow-light);
    }
    .neu-lg {
      background: var(--bg);
      border-radius: 28px;
      border: none;
      box-shadow:
        12px 12px 24px var(--shadow-dark),
        -12px -12px 24px var(--shadow-light);
    }

    /* ===== NEUMORPHISM: впадины (inset / recessed) ===== */
    .neu-inset {
      background: var(--bg);
      border-radius: 20px;
      border: none;
      box-shadow:
        inset 6px 6px 12px var(--shadow-dark),
        inset -6px -6px 12px var(--shadow-light);
    }
    .neu-inset-sm {
      background: var(--bg);
      border-radius: 14px;
      border: none;
      box-shadow:
        inset 4px 4px 8px var(--shadow-dark),
        inset -4px -4px 8px var(--shadow-light);
    }
    .neu-inset-deep {
      background: var(--bg);
      border-radius: 24px;
      border: none;
      box-shadow:
        inset 8px 8px 16px var(--shadow-dark),
        inset -8px -8px 16px var(--shadow-light);
    }

    /* Совместимость со старыми классами glass */
    .glass, .glass-strong {
      background: var(--bg);
      border-radius: 24px;
      border: none;
      box-shadow:
        9px 9px 18px var(--shadow-dark),
        -9px -9px 18px var(--shadow-light);
    }
    .glass-soft {
      background: var(--bg);
      border-radius: 16px;
      border: none;
      box-shadow:
        inset 4px 4px 8px var(--shadow-dark),
        inset -4px -4px 8px var(--shadow-light);
    }

    /* Sidebar — мягкий выпуклый блок */
    .sidebar {
      background: var(--bg);
      border-right: none;
      box-shadow:
        6px 0 18px var(--shadow-dark),
        -2px 0 8px var(--shadow-light);
    }

    .nav-item {
      transition: all 0.2s ease;
      border-radius: 14px;
      color: var(--text-muted);
    }
    .nav-item:hover {
      box-shadow:
        inset 3px 3px 6px var(--shadow-dark),
        inset -3px -3px 6px var(--shadow-light);
      color: var(--text);
    }
    .nav-item.active {
      box-shadow:
        inset 4px 4px 8px var(--shadow-dark),
        inset -4px -4px 8px var(--shadow-light);
      color: var(--accent);
      font-weight: 600;
    }

    /* Селекты — впадины */
    .soft-select {
      background: var(--bg);
      border: none;
      border-radius: 14px;
      color: var(--text);
      box-shadow:
        inset 4px 4px 8px var(--shadow-dark),
        inset -4px -4px 8px var(--shadow-light);
      transition: all 0.2s;
    }
    .soft-select:focus {
      outline: none;
      box-shadow:
        inset 5px 5px 10px var(--shadow-dark),
        inset -5px -5px 10px var(--shadow-light),
        0 0 0 3px rgba(91, 124, 250, 0.12);
    }

    /* Метрики — выпуклые, при наведении чуть «всплывают» */
    .metric-card {
      background: var(--bg);
      border-radius: 24px;
      border: none;
      box-shadow:
        8px 8px 16px var(--shadow-dark),
        -8px -8px 16px var(--shadow-light);
      transition: all 0.25s ease;
    }
    .metric-card:hover {
      box-shadow:
        12px 12px 24px var(--shadow-dark),
        -12px -12px 24px var(--shadow-light);
      transform: translateY(-3px);
    }

    /* Кнопки — выпуклые / активная = впадина */
    .btn-soft {
      background: var(--bg);
      border: none;
      border-radius: 14px;
      color: var(--text-muted);
      box-shadow:
        4px 4px 8px var(--shadow-dark),
        -4px -4px 8px var(--shadow-light);
      transition: all 0.15s ease;
    }
    .btn-soft:hover {
      color: var(--text);
    }
    .btn-soft:active,
    .btn-soft.active {
      color: var(--accent);
      font-weight: 600;
      box-shadow:
        inset 4px 4px 8px var(--shadow-dark),
        inset -4px -4px 8px var(--shadow-light);
    }

    /* Иконки в кружках — мягкие впадины */
    .neu-icon {
      background: var(--bg);
      border-radius: 16px;
      box-shadow:
        inset 3px 3px 6px var(--shadow-dark),
        inset -3px -3px 6px var(--shadow-light);
    }

    /* Прогресс-бар — впадина */
    .neu-progress {
      background: var(--bg);
      border-radius: 20px;
      box-shadow:
        inset 3px 3px 6px var(--shadow-dark),
        inset -3px -3px 6px var(--shadow-light);
    }

    /* Чипы / бейджи */
    .neu-chip {
      background: var(--bg);
      border-radius: 12px;
      border: none;
      box-shadow:
        3px 3px 6px var(--shadow-dark),
        -3px -3px 6px var(--shadow-light);
    }

    /* Фон страницы */
    /* База цвета — на html; body прозрачный, чтобы фоновый слой
       с самолётами (z-index:-1, дочерний к body) был виден. */
    html { background: var(--bg) !important; }
    body {
      background: transparent !important;
      color: var(--text);
    }

    /* Мягкие разделители без линий */
    .neu-divider {
      height: 2px;
      background: transparent;
      box-shadow:
        inset 0 1px 1px var(--shadow-dark),
        inset 0 -1px 1px var(--shadow-light);
      border: none;
      margin: 0;
    }

    /* Карточки зон внутри тепловой карты */
    .zone-card {
      background: var(--bg);
      border-radius: 24px;
      border: none;
      box-shadow:
        8px 8px 16px var(--shadow-dark),
        -8px -8px 16px var(--shadow-light);
      transition: all 0.25s ease;
    }
    .zone-card:hover {
      box-shadow:
        10px 10px 20px var(--shadow-dark),
        -10px -10px 20px var(--shadow-light);
    }

    /* Статус комнаты — мягкая впадина */
    .room-status {
      border-radius: 16px;
      border: none;
      box-shadow:
        inset 3px 3px 6px rgba(0,0,0,0.06),
        inset -3px -3px 6px rgba(255,255,255,0.7);
    }

    /* ==========================================================
       БОКОВАЯ ПАНЕЛЬ
       Панель занимает всю высоту окна и не прокручивается целиком:
       логотип сверху и блок выхода снизу закреплены. Прокручивается
       только средняя часть <nav> со списком фильтров.

       min-height: 0 обязателен — без него flex-элемент не может стать
       меньше содержимого, и прокрутка внутри просто не появляется.
       ========================================================== */
    .sidebar {
      display: flex !important;
      flex-direction: column !important;
      height: 100vh;
      max-height: 100vh;
      overflow: hidden;

      /* Положение и слой задаем здесь, а не только классами Tailwind.
         Если Tailwind не успел примениться, панель оставалась static,
         из-за чего z-index не работал: она уходила ПОД затемнение
         и выглядела темной, а клики по ней не проходили. */
      position: fixed;
      top: 0;
      left: 0;
      z-index: 60;
      isolation: isolate;
    }

    /* На широком экране панель остаётся fixed — не уезжает при скролле */
    @media (min-width: 1024px) {
      .sidebar {
        position: fixed !important;
        z-index: 30;
      }
    }

    .sidebar > nav {
      flex: 1 1 auto !important;
      min-height: 0 !important;
      overflow-y: auto !important;
      overflow-x: hidden !important;
      -webkit-overflow-scrolling: touch;
      scrollbar-width: thin;
      scrollbar-color: #b4bed2 transparent;
      padding-right: 6px;
    }

    .sidebar > nav::-webkit-scrollbar { width: 6px; }
    .sidebar > nav::-webkit-scrollbar-track { background: transparent; }
    .sidebar > nav::-webkit-scrollbar-thumb {
      background: #b4bed2;
      border-radius: 20px;
    }
    .sidebar > nav::-webkit-scrollbar-thumb:hover { background: #9aa7bf; }

    /* Логотип сверху и нижний блок не сжимаются и не прокручиваются */
    .sidebar > div { flex: 0 0 auto; }

    /* Mobile sidebar */
    @media (max-width: 1023px) {
      .sidebar {
        transform: translateX(-100%);
        transition: transform 0.3s ease;
        box-shadow: 8px 0 24px var(--shadow-dark);
      }
      .sidebar.open {
        transform: translateX(0);
      }
    }

    /* ==========================================================
       На широком экране панель закреплена, гамбургер и затемнение
       не нужны. Прописано правилами CSS, а не только классами
       Tailwind: если Tailwind не успел загрузиться, затемнение
       перекрывало страницу и по ней нельзя было кликнуть.
       ========================================================== */
    @media (min-width: 1024px) {
      /* На широком экране затемнение не участвует вовсе: даже скрытое
         оно перехватывало клики, если Tailwind не успел примениться */
      #sidebarOverlay {
        display: none !important;
        pointer-events: none !important;
      }
      button[onclick="toggleSidebar()"] { display: none !important; }
      .sidebar { transform: none !important; position: fixed !important; top: 0 !important; left: 0 !important; }
    }

    /* ==========================================================
       Контейнер страницы не должен создавать контекст наложения:
       иначе панель внутри него запирается и не может подняться
       выше затемнения, каким бы ни был ее z-index. Именно из-за
       этого меню выглядело темным и не принимало нажатия.
       ========================================================== */
    body > div:has(> .sidebar) {
      z-index: auto !important;
      isolation: auto !important;
    }

    /* Скрытое затемнение не должно ловить нажатия ни при каком размере */
    #sidebarOverlay.hidden {
      display: none !important;
      pointer-events: none !important;
    }

    /* ============================================================================
       ФОН СТРАНИЦЫ
       ----------------------------------------------------------------------------
       Облака и самолеты — декорация, они не должны спорить с содержимым.
       Приглушаем их и уводим на самый нижний слой, а карточки делаем
       полностью непрозрачными: раньше сквозь них просвечивал фон и
       текст становился трудночитаемым.
       ============================================================================ */

    /* Слой с анимацией — под содержимым, но должен быть виден.
       Карточки непрозрачные (ниже задаётся background-color: var(--bg)),
       поэтому текст на них читается независимо от яркости фона.
       Раньше здесь стояло opacity 0.35/0.12 — самолёты были почти
       не видны. Поднимаем до заметного уровня. */
    .bg-clouds {
      opacity: 0.6 !important;
    }

    .airplane-1, .airplane-2, .airplane-3 {
      opacity: 0.55 !important;
      filter: saturate(0.9);
    }

    /* Контейнер фона: позади всего содержимого. Виден за счёт того, что
       у body фон прозрачный, а базовый цвет вынесен на html (см. ниже).
       Раньше здесь было z-index:-1 при НЕпрозрачном body — слой уходил
       за фон body и не отображался вовсе. */
    .fixed.inset-0.z-0 {
      z-index: -1 !important;
    }

    /* Карточки непрозрачные: фон сквозь них не виден */
    .glass, .glass-strong, .glass-lg, .glass-sm, .glass-soft,
    .neu, .neu-sm, .neu-lg, .metric-card, .sidebar {
      background-color: var(--bg) !important;
      background-image: none !important;
    }

    /* Содержимое над фоном. aside НЕ трогаем: сайдбар тоже aside. */
    main, header, footer {
      position: relative;
      z-index: 1;
    }

    /* ============================================================================
       МЕНЮ РАБОТАЕТ БЕЗ TAILWIND
       ----------------------------------------------------------------------------
       Раньше положение панели, слои и скрытие затемнения держались на классах
       Tailwind (fixed, z-50, hidden, lg:hidden). Если CDN не успел загрузиться
       или заблокирован, ни один из них не применялся: затемнение растягивалось
       на весь экран и перехватывало нажатия, а панель уходила под него.
       Здесь всё то же самое задано обычным CSS и работает всегда.
       ============================================================================ */

    /* Затемнение: показывается только когда у панели есть класс open */
    #sidebarOverlay {
      position: fixed;
      inset: 0;
      display: none;
      z-index: 45;
      pointer-events: none;
    }

    /* Появляется вместе с открытой панелью */
    body:has(.sidebar.open) #sidebarOverlay {
      display: block;
      pointer-events: auto;
    }

    /* Запасной вариант для браузеров без :has — по классу на самом элементе */
    #sidebarOverlay:not(.hidden) {
      display: block;
      pointer-events: auto;
    }
    #sidebarOverlay.hidden {
      display: none !important;
      pointer-events: none !important;
    }

    /* Кнопка меню остаётся в шапке (в потоке), не вырывается position:fixed.
       Раньше она накрывала заголовок страницы. */
    button.menu-toggle,
    .menu-toggle {
      position: static;
      z-index: auto;
    }

    @media (min-width: 1024px) {
      button.menu-toggle,
      .menu-toggle { display: none !important; }
      .sidebar-close,
      button.sidebar-close { display: none !important; }
      #sidebarOverlay {
        display: none !important;
        pointer-events: none !important;
      }
      body:has(.sidebar.open) #sidebarOverlay { display: none !important; }
    }

    /* ==========================================================
       ЗАТЕМНЕНИЕ ПОД МОБИЛЬНЫМ МЕНЮ
       Без размытия: оно затуманивало всю страницу и мешало читать
       содержимое, пока панель открыта. Оставляем только легкую
       полупрозрачную подложку.
       ========================================================== */
    #sidebarOverlay {
      z-index: 45;                 /* ниже панели (60), выше содержимого */
      background: rgba(61, 74, 92, 0.25) !important;
      backdrop-filter: none !important;
      -webkit-backdrop-filter: none !important;
      filter: none !important;
    }
    #sidebarOverlay.hidden { display: none !important; }

    /* ==========================================================
       Открытая панель ничем не приглушается: она выше затемнения
       по слоям, фон непрозрачный, фильтры цвета отключены.
       Раньше размытие подложки затрагивало и саму панель, из-за
       чего пункты меню выглядели блеклыми.
       ========================================================== */
    .sidebar,
    .sidebar.open {
      background: var(--bg) !important;
      backdrop-filter: none !important;
      -webkit-backdrop-filter: none !important;
      filter: none !important;
      opacity: 1 !important;
      z-index: 60 !important;
    }

    /* Пункты меню и фильтры внутри панели — в полную силу цвета */
    .sidebar .nav-item,
    .sidebar select,
    .sidebar .soft-select,
    .sidebar a,
    .sidebar span,
    .sidebar i {
      opacity: 1 !important;
      filter: none !important;
    }

    /* ==========================================================
       ВЫПАДАЮЩИЕ СПИСКИ
       Браузер рисует раскрытый список системными цветами: при темной
       теме системы он мелькал черным. Задаем цвета явно.
       ========================================================== */
    /* Светлая схема на весь документ. Только так браузер рисует
       раскрытый список светлым: при системной темной теме он
       игнорирует цвета отдельных элементов и мелькает черным. */
    html, body {
      color-scheme: light only;
    }

    select {
      color-scheme: light only;
      background-color: #f0f4fa !important;
      color: var(--text) !important;
    }

    select option,
    select optgroup {
      color-scheme: light only;
      background-color: #f0f4fa !important;
      color: #3d4a5c !important;
      padding: 8px 10px;
    }

    select option:checked,
    select option:hover,
    select option:focus {
      background-color: #dce4f5 !important;
      color: #5b7cfa !important;
    }

    /* Поля даты и времени тоже открывают системные окошки */
    input[type="date"],
    input[type="time"],
    input[type="number"],
    input[type="month"] {
      color-scheme: light only;
    }

    /* Инпуты дат */
    input[type="date"] {
      color: var(--text-muted);
      background: transparent;
    }
    input[type="date"]::-webkit-calendar-picker-indicator {
      opacity: 0.5;
      cursor: pointer;
    }

    /* ===== Облака и самолёты ===== */
    .bg-clouds {
      background-image: url("data:image/svg+xml,%3Csvg width='800' height='800' viewBox='0 0 800 800' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150 200 Q 180 150 250 180 Q 300 130 350 180 Q 400 160 420 220 Q 380 250 280 240 Q 180 250 150 200 Z' fill='%23ffffff' opacity='0.55'/%3E%3Cpath d='M450 450 Q 480 400 550 430 Q 600 380 650 430 Q 700 410 720 470 Q 680 500 580 490 Q 480 500 450 450 Z' fill='%23ffffff' opacity='0.3'/%3E%3Cpath d='M700 150 Q 730 100 800 130 Q 850 80 900 130 Q 950 110 970 170 Q 930 200 830 190 Q 730 200 700 150 Z' fill='%23ffffff' opacity='0.4'/%3E%3Cpath d='M50 500 Q 80 460 130 480 Q 180 440 230 480 Q 280 460 300 510 Q 260 540 160 530 Q 80 540 50 500 Z' fill='%23ffffff' opacity='0.25'/%3E%3C/svg%3E");
      background-size: 800px 800px;
      animation: drift 160s linear infinite;
    }
    .airplane-1 { animation: fly1 90s linear infinite; }
    .airplane-2 { animation: fly2 120s linear infinite; animation-delay: -45s; }
    .airplane-3 { animation: fly3 150s linear infinite; animation-delay: -90s; }

    @keyframes drift {
      from { background-position: 0 0; }
      to   { background-position: -800px 800px; }
    }
    @keyframes fly1 {
      0%   { transform: translate(-30vw, 110vh) rotate(45deg); }
      100% { transform: translate(110vw, -30vh) rotate(45deg); }
    }
    @keyframes fly2 {
      0%   { transform: translate(110vw, 110vh) rotate(-45deg) scale(0.65); }
      100% { transform: translate(-30vw, -30vh) rotate(-45deg) scale(0.65); }
    }
    @keyframes fly3 {
      0%   { transform: translate(-30vw, 60vh) rotate(75deg) scale(0.35); }
      100% { transform: translate(110vw, 10vh) rotate(75deg) scale(0.35); }
    }


/* ============================================================================
   АДАПТАЦИЯ СТАРОЙ ВЕРСТКИ
   Страницы, сверстанные на классах Tailwind, подхватывают общий стиль
   без изменения разметки: белые карточки становятся выпуклыми блоками,
   рамки убираются, поля превращаются во впадины.
   ============================================================================ */

html { background: var(--bg) !important; }
body {
  background: transparent !important;
  color: var(--text);
}

/* Карточки: белый фон + тень + рамка -> выпуклый блок */
.bg-white:not(.no-neu),
.bg-white\/80:not(.no-neu),
.bg-white\/90:not(.no-neu),
.bg-white\/95:not(.no-neu) {
  background: var(--bg) !important;
  border-color: transparent !important;
  box-shadow: 9px 9px 18px var(--shadow-dark), -9px -9px 18px var(--shadow-light) !important;
}

/* Рамки в этом стиле не нужны: глубину дают тени */
.border, .border-2, .border-slate-200, .border-slate-300,
.border-blue-100, .border-blue-200, .border-blue-300 {
  border-color: transparent !important;
}

/* Поля ввода и списки — впадины */
select:not(.no-neu),
input[type="text"]:not(.no-neu),
input[type="date"]:not(.no-neu),
input[type="time"]:not(.no-neu),
input[type="number"]:not(.no-neu),
input[type="password"]:not(.no-neu),
textarea:not(.no-neu) {
  background: var(--bg) !important;
  border: none !important;
  border-radius: 14px;
  color: var(--text);
  box-shadow: inset 4px 4px 8px var(--shadow-dark), inset -4px -4px 8px var(--shadow-light) !important;
  outline: none;
}

select:focus, input:focus, textarea:focus {
  box-shadow:
    inset 5px 5px 10px var(--shadow-dark),
    inset -5px -5px 10px var(--shadow-light),
    0 0 0 3px rgba(91, 124, 250, 0.12) !important;
}

/* Шапка страницы */
header {
  background: var(--bg) !important;
  border-bottom: none !important;
  box-shadow: 0 6px 18px var(--shadow-dark);
}

/* Разделители: тонкая линия смотрится чужеродно, заменяем мягкой */
.divide-y > * + *, .divide-x > * + * {
  border-color: rgba(200, 208, 224, 0.5) !important;
}

/* Цветные акценты сохраняем: статусы должны читаться */
.text-red-500, .text-red-600 { color: #e05c5c !important; }
.text-emerald-500, .text-emerald-600 { color: #4fb286 !important; }
.text-amber-500, .text-amber-600 { color: #e0a44c !important; }
.text-blue-600, .text-blue-700, .text-aero-600, .text-aero-700 { color: var(--accent) !important; }

/* Цветные плашки статусов — легкие впадины вместо заливки */
.bg-red-50, .bg-emerald-50, .bg-amber-50, .bg-blue-50,
.bg-indigo-50, .bg-pink-50, .bg-sky-50, .bg-slate-50, .bg-slate-100 {
  box-shadow: inset 2px 2px 5px var(--shadow-dark), inset -2px -2px 5px var(--shadow-light) !important;
  border-color: transparent !important;
}

/* Кнопки-действия остаются заметными */
button.bg-blue-600, button.bg-blue-700, a.bg-blue-600,
button.bg-emerald-600, button.bg-sky-600 {
  border: none !important;
  border-radius: 14px;
  box-shadow: 4px 4px 10px var(--shadow-dark), -4px -4px 10px var(--shadow-light) !important;
}

button.bg-blue-600:active, button.bg-emerald-600:active {
  box-shadow: inset 3px 3px 7px rgba(0,0,0,0.18), inset -3px -3px 7px rgba(255,255,255,0.12) !important;
}

/* Модальные окна */
.fixed .bg-white, [id$="-modal"] .bg-white {
  border-radius: 24px;
}

/* Полосы прокрутки в общем стиле */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
  background: #c8d0e0;
  border-radius: 20px;
  box-shadow: inset 1px 1px 2px #a8b4c8, inset -1px -1px 2px #e8eef8;
}

/* Печать и PDF: тени только мешают, возвращаем плоский вид */
@media print {
  .neu, .neu-sm, .neu-lg, .metric-card, .bg-white {
    box-shadow: none !important;
    border: 1px solid #cbd5e1 !important;
    background: #ffffff !important;
  }
  body { background: #ffffff !important; }
}

/* ===== ЕДИНАЯ КНОПКА ВЫЙТИ В САЙДБАРЕ ===== */
.sidebar a[href*="logout"] {
    display: flex !important;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    width: 100%;
    margin-top: 0.5rem;
    padding: 0.75rem 1rem;
    border-radius: 16px;
    background: var(--bg);
    box-shadow: 5px 5px 12px var(--shadow-dark), -5px -5px 12px var(--shadow-light);
    font-size: 0.75rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #ef4444; 
    transition: all 0.2s ease;
    text-decoration: none;
}
.sidebar a[href*="logout"]:hover {
    color: #dc2626;
    box-shadow: 6px 6px 14px var(--shadow-dark), -6px -6px 14px var(--shadow-light);
    transform: translateY(-1px);
}
.sidebar a[href*="logout"]:active {
    box-shadow: inset 4px 4px 8px var(--shadow-dark), inset -4px -4px 8px var(--shadow-light);
    transform: translateY(1px);
}

/* ============================================================================
   ПРАВКИ ВЁРСТКИ (август 2026)
   Слои, мобильное меню, безопасные зоны, касания, модалки.
   Эти правила идут последними и перекрывают конфликтующие.
   ============================================================================ */

html {
  min-width: 320px;
}
body {
  min-width: 320px;
  min-height: 100dvh;
}

/* Сайдбар: всегда position:fixed, не уезжает при скролле страницы */
.sidebar {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  width: min(260px, 86vw) !important;
  height: 100dvh !important;
  max-height: 100dvh !important;
  padding-top: max(1.5rem, env(safe-area-inset-top)) !important;
  padding-bottom: max(1rem, env(safe-area-inset-bottom)) !important;
  padding-left: max(1rem, env(safe-area-inset-left));
  overscroll-behavior: contain;
}
@media (min-width: 1024px) {
  .sidebar {
    width: 260px !important;
    transform: none !important;
  }
  /* Контент справа не заезжает под закреплённую панель */
  .sidebar + * {
    margin-left: 260px;
    width: calc(100% - 260px);
    min-width: 0;
  }
}

/* Кнопка закрытия внутри панели — только на узком экране */
.sidebar-close,
button.sidebar-close {
  display: none !important;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  flex-shrink: 0;
  border: none;
  background: var(--bg);
  border-radius: 16px;
  color: var(--text-muted);
  box-shadow: 5px 5px 12px var(--shadow-dark), -5px -5px 12px var(--shadow-light);
  cursor: pointer;
}
.sidebar-close:hover { color: var(--text); }
.sidebar-close:active {
  box-shadow: inset 4px 4px 8px var(--shadow-dark), inset -4px -4px 8px var(--shadow-light);
}

/* Гамбургер в шапке: 44px, в потоке документа. На десктопе скрыт. */
.menu-toggle,
button.menu-toggle,
header button.menu-toggle {
  position: static !important;
  top: auto !important;
  left: auto !important;
  display: none !important;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  min-width: 44px;
  min-height: 44px;
  flex-shrink: 0;
  padding: 0;
  z-index: auto !important;
}

@media (max-width: 1023px) {
  .menu-toggle,
  button.menu-toggle,
  header button.menu-toggle {
    display: inline-flex !important;
  }
  .sidebar-close,
  button.sidebar-close {
    display: inline-flex !important;
  }
}

@media (min-width: 1024px) {
  .menu-toggle,
  button.menu-toggle,
  header button.menu-toggle,
  header button[onclick="toggleSidebar()"] {
    display: none !important;
  }
  .sidebar-close,
  button.sidebar-close {
    display: none !important;
  }
}

/* Блок «Требуют уборки сейчас»: ровно 5 видимых строк, остальное — скролл */
#cleanNowList,
.clean-now-list {
  --clean-row-h: 4.625rem;
  max-height: calc(5 * var(--clean-row-h)) !important;
  overflow-y: auto !important;
  overflow-x: hidden;
}
#cleanNowList > div.clean-now-row,
.clean-now-list > div.clean-now-row {
  height: var(--clean-row-h);
  max-height: var(--clean-row-h);
  min-height: var(--clean-row-h);
  overflow: hidden;
  box-sizing: border-box;
  flex-wrap: nowrap !important;
}
.clean-now-hint {
  margin: 0;
  padding: 0.45rem 1.25rem 0.7rem;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
}

/* Стек слоёв: контент < оверлей < сайдбар < модалка */
#sidebarOverlay {
  z-index: 50 !important;
}
.sidebar,
.sidebar.open {
  z-index: 60 !important;
}
#room-modal,
#photoModal,
#reportModal,
[id$="-modal"] {
  z-index: 80;
}

/* Поля и селекты — удобно попадать пальцем */
.soft-select,
.sidebar select,
header select,
header input[type="date"],
header input[type="time"] {
  min-height: 44px;
  max-width: 100%;
}

/* Шапка не заезжает под вырез iPhone */
.app-header,
body header.sticky,
body header {
  padding-top: max(1rem, env(safe-area-inset-top));
}

/* Карточки счётчиков на узком экране не распирают ряд */
@media (max-width: 640px) {
  .stat-pills {
    min-width: 0 !important;
    width: 100%;
    justify-content: space-around;
    padding-left: 0.75rem !important;
    padding-right: 0.75rem !important;
  }
  .stat-card {
    min-width: 0 !important;
  }
}

/* Модалка отчётов: на телефоне на весь экран, с учётом safe-area */
@media (max-width: 640px) {
  .modal-shell {
    padding-bottom: env(safe-area-inset-bottom);
  }
}

@media (prefers-reduced-motion: reduce) {
  .bg-clouds,
  .airplane-1, .airplane-2, .airplane-3,
  .cloud-1, .cloud-2, .cloud-3,
  .plane-r1, .plane-r2, .plane-r3,
  .plane-l1, .plane-l2, .plane-l3 {
    animation: none !important;
  }
}

button, [role="button"], a.nav-item {
  cursor: pointer;
}
button:disabled { cursor: not-allowed; }