/* 2026-09-25: Фирменные стили NiceAparts для входа, смены пароля и закрытой рабочей области. */
@font-face {
    font-family: 'Manrope';
    src: url('fonts/manrope-regular.woff2') format('woff2');
    font-display: swap;
    font-weight: 400;
}

@font-face {
    font-family: 'Montserrat-Medium';
    src: url('fonts/Montserrat-Medium.woff2') format('woff2');
    font-display: swap;
    font-weight: 500;
}

@font-face {
    font-family: 'AMAGROBold';
    src: url('fonts/Amagro.woff2') format('woff2');
    font-display: swap;
}

:root {
    color-scheme: light;
    font-family: Arial, Helvetica, sans-serif;
    color: #24312c;
    background: #eef3f1;
    --green: #38725d;
    --green-light: #4b9c80;
    --cream: #ffecc0;
    --line: #c3d1cc;
}

* {
    box-sizing: border-box;
}

body {
    margin: 0;
    min-height: 100vh;
    background:
        radial-gradient(circle at 15% 18%, rgba(255, 236, 192, 0.72), transparent 31%),
        radial-gradient(circle at 88% 82%, rgba(65, 144, 117, 0.18), transparent 33%),
        #eef3f1;
}

.auth-page {
    display: grid;
    place-items: center;
    padding: 28px 18px;
}

.auth-card {
    width: min(100%, 570px);
    overflow: hidden;
    border: 1px solid rgba(56, 114, 93, 0.14);
    border-radius: 24px;
    background: #ffffff;
    box-shadow: 0 24px 70px rgba(32, 63, 52, 0.16);
}

.brand-panel,
.app-header {
    color: #ffffff;
    background-color: var(--green);
    background-image:
        linear-gradient(120deg, rgba(20, 70, 53, 0.2), rgba(56, 114, 93, 0.05)),
        url('images/bgbg26.jpg');
    background-position: center;
    background-size: cover;
}

.brand-panel {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 18px;
    padding: 22px 28px;
}

.brand-logo {
    display: block;
    width: 104px;
    height: auto;
    flex: 0 0 auto;
    filter: drop-shadow(0 5px 11px rgba(12, 45, 34, 0.26));
}

.brand-copy {
    min-width: 0;
    text-align: center;
}

.brand-name {
    color: var(--cream);
    font-family: 'AMAGROBold', Georgia, serif;
    font-size: clamp(27px, 7vw, 40px);
    line-height: 1;
    letter-spacing: 0.02em;
}

.brand-ornament {
    position: relative;
    width: 148px;
    height: 11px;
    margin: 2px auto 4px;
}

.brand-ornament::before {
    content: '';
    position: absolute;
    top: 5px;
    left: 0;
    right: 0;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(255, 236, 192, 0.92) 22%, rgba(255, 236, 192, 0.92) 78%, transparent);
}

.brand-ornament::after {
    content: '';
    position: absolute;
    top: 2px;
    left: 50%;
    width: 7px;
    height: 7px;
    border: 1px solid #ffecc0;
    background: #38725d;
    transform: translateX(-50%) rotate(45deg);
}

.brand-description {
    margin: 0;
    font-family: 'Montserrat-Medium', Arial, sans-serif;
    font-size: 12px;
    line-height: 1.35;
}

.auth-content {
    padding: 30px 34px 34px;
}

h1,
h2 {
    color: #264c3e;
    font-family: 'Montserrat-Medium', Arial, sans-serif;
}

h1 {
    margin: 0 0 10px;
    font-size: clamp(24px, 5vw, 30px);
    text-align: center;
}

h2 {
    margin: 0 0 12px;
    font-size: 22px;
}

.description {
    margin: 0 0 22px;
    color: #5a6762;
    line-height: 1.5;
    text-align: center;
}

label {
    display: block;
    margin: 14px 0 6px;
    font-weight: 700;
}

input {
    width: 100%;
    min-height: 46px;
    padding: 10px 12px;
    border: 1px solid #b7c8c1;
    border-radius: 12px;
    background: #fbfdfc;
    font: inherit;
}

input:focus {
    outline: 3px solid rgba(65, 144, 117, 0.22);
    border-color: var(--green-light);
}

button,
.button-link {
    min-height: 46px;
    border: 0;
    border-radius: 13px;
    background: linear-gradient(180deg, var(--green-light), var(--green));
    color: #ffffff;
    font: inherit;
    font-weight: 400;
    cursor: pointer;
    box-shadow: 0 8px 20px rgba(56, 114, 93, 0.22);
    transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.auth-content button {
    width: 100%;
    margin-top: 22px;
}

/* 2026-09-29: Узнанное устройство сразу предлагает четыре ячейки ПИН-кода и спокойные варианты смены способа входа. */
.pin-entry-label { position: relative; display: block; width: min(248px, 100%); height: 59px; margin: 30px auto 22px; cursor: text; }
.pin-entry-label .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; }
.pin-digits { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 11px; width: 100%; height: 100%; }
.pin-digits span { display: grid; place-items: center; border: 1px solid #e4e9e7; border-radius: 11px; color: #213f34; background: #f1f4f2; font-size: 24px; }
.pin-digits span.is-active { border-color: #347d60; background: #fff; box-shadow: 0 0 0 2px rgba(52, 125, 96, .12); }
.pin-entry-label input { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 0; opacity: 0; cursor: text; }
.pin-login-options { display: flex; flex-wrap: wrap; gap: 13px 25px; align-items: center; justify-content: center; }
.pin-login-options a, .pin-login-options button, .pin-password-back a { color: #246c50; font-size: 14px; font-weight: 600; text-decoration: none; }
.pin-login-options form { margin: 0; }
.auth-content .pin-login-options button { width: auto; min-height: 0; margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; }
.pin-login-options a:hover, .pin-login-options button:hover, .pin-password-back a:hover { text-decoration: underline; transform: none; box-shadow: none; }
.pin-password-back { margin: 18px 0 0; text-align: center; }

/* 2026-10-04: Настройка ПИН показывает два ряда ячеек входа и остаётся доступной без JavaScript. */
.pin-setup-form .pin-entry-label { height: auto; margin: 16px auto 18px; }
.pin-setup-caption { display: block; margin: 0 0 8px; text-align: center; font-size: 15px; }
.pin-setup-form .pin-digits { height: 59px; }
.pin-setup-form .pin-entry-label input { top: auto; bottom: 0; height: 59px; }
.pin-setup-form:not(.pin-setup-enhanced) .pin-digits { display: none; }
.pin-setup-form:not(.pin-setup-enhanced) .pin-entry-label input { position: static; opacity: 1; }
.pin-setup-error { margin: 0; color: #aa3d31; text-align: center; font-size: 14px; }
.pin-setup-error[hidden] { display: none; }

button:hover,
.button-link:hover {
    transform: translateY(-1px);
    box-shadow: 0 11px 24px rgba(56, 114, 93, 0.27);
}

button:active,
.button-link:active {
    transform: translateY(0);
}

.message {
    margin: 0 0 18px;
    padding: 12px 14px;
    border-radius: 10px;
    line-height: 1.45;
}

.message-error {
    background: #fbeae7;
    color: #72281d;
}

.message-success,
.message-info {
    background: #e9f4ef;
    color: #245f4b;
}

.captcha-block {
    margin-top: 18px;
    padding: 3px 14px 15px;
    border: 1px solid #d6c89e;
    border-radius: 13px;
    background: #fff9e9;
}

.app-header {
    min-height: 74px;
    padding: 12px 28px;
}

.app-header-inner,
.page-shell {
    width: min(1180px, 100%);
    margin: 0 auto;
}

.app-header-inner {
    min-height: 50px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
}

.header-brand {
    display: flex;
    align-items: center;
    gap: 12px;
    color: inherit;
    text-decoration: none;
}

.header-brand img {
    width: 54px;
    height: auto;
}

.header-brand-name {
    color: var(--cream);
    font-family: 'AMAGROBold', Georgia, serif;
    font-size: 28px;
    line-height: 1;
}

.header-user {
    text-align: right;
}

.header-user strong {
    font-weight: 400;
}

/* 2026-09-25: Выход закреплён рядом с данными текущего пользователя во всех закрытых разделах. */
.header-account {
    display: flex;
    gap: 12px;
    align-items: center;
    min-width: 0;
}

.header-logout-form {
    flex: 0 0 auto;
    margin: 0;
}

.header-logout-form button {
    min-height: 36px;
    padding: 0 14px;
    border: 1px solid rgba(255, 255, 255, 0.55);
    background: rgba(20, 70, 53, 0.52);
    box-shadow: none;
}

.header-user strong,
.header-user span {
    display: block;
}

.header-user span {
    margin-top: 2px;
    color: rgba(255, 255, 255, 0.8);
    font-size: 13px;
}

.page-shell {
    padding: 34px 22px 60px;
}

.page-title {
    margin-bottom: 24px;
    text-align: left;
}

.dashboard-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 20px;
}
/* 2026-10-04: Настройка ПИН-кода занимает собственную карточку рядом с данными пользователя. */
.pin-access-panel { display:flex; flex-direction:column; align-items:flex-start; justify-content:center; gap:12px; }
.pin-access-panel h2 { margin:0; }
.pin-access-panel p { color:#5c776d; }
.pin-access-symbol { display:grid; place-items:center; width:52px; height:42px; border-radius:12px; color:#147457; background:#e8f4ed; font-size:20px; letter-spacing:2px; }
.pin-access-panel a { display:inline-flex; align-items:center; gap:10px; min-height:43px; margin-top:3px; padding:8px 15px; border-radius:10px; color:#fff; background:#317b61; font-size:14px; font-weight:700; text-decoration:none; }
.pin-access-panel a:hover,.pin-access-panel a:focus-visible { background:#246b53; }

.panel-wide {
    grid-column: 1 / -1;
}

.panel-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    margin-top: 18px;
}

/* 2026-09-25: Основные разделы показаны крупными самостоятельными действиями без лишнего заголовка. */
.dashboard-sections-panel {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.dashboard-sections-panel .panel-actions {
    margin: 0;
}

.dashboard-sections-panel .panel-actions + .panel-actions {
    margin-top: 10px;
}

.section-link {
    display: inline-flex;
    align-items: center;
    min-height: 43px;
    padding: 9px 14px;
    border: 1px solid #bad0c8;
    border-radius: 11px;
    color: #286b54;
    background: #f7fbf9;
    font-size: 15px;
    font-weight: 400;
    text-decoration: none;
}

.section-link:hover,
.section-link:focus-visible {
    border-color: #43846c;
    background: #eaf5f0;
    outline: none;
}

.section-link-primary {
    color: #fff;
    border-color: #31755d;
    background: #31755d;
}

.section-link-primary:hover,
.section-link-primary:focus-visible {
    color: #fff;
    background: #245e4a;
}

.text-link {
    color: #2f775f;
    font-weight: 700;
    text-decoration: none;
}

.text-link:hover {
    text-decoration: underline;
}

.property-list {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    margin: 14px 0 0;
    padding: 0;
    list-style: none;
}

.property-list li {
    padding: 13px 14px;
    border: 1px solid #d7e1dd;
    border-radius: 12px;
    background: #f8fbfa;
}

/* 2026-09-26: Увеличенная фотография и единая строка действий выравнивают карточки квартир. */
.property-card {
    display: block;
    min-width: 0;
}

/* 2026-09-28: ID находится слева сверху, а сегодняшний заезд компактно размещён под квартирой. */
.property-id-corner {
    display: block;
    margin: -3px 0 8px;
    font-size: 11px;
    text-align: left;
}

.property-card-main {
    display: grid;
    grid-template-columns: 140px minmax(0, 1fr);
    gap: 14px;
    align-items: center;
}

.property-photo {
    width: 140px;
    height: 106px;
    border-radius: 10px;
    object-fit: cover;
    background: #e9f1ee;
}

/* 2026-09-25: Администратор открывает квартиру кликом по её фотографии. */
.property-photo-link {
    display: block;
    width: 140px;
    border-radius: 10px;
    text-decoration: none;
}

.property-photo-link:hover .property-photo,
.property-photo-link:focus-visible .property-photo {
    box-shadow: 0 0 0 3px #b88925;
    transform: translateY(-1px);
}

.property-photo-link:focus-visible {
    outline: none;
}

.property-photo-link::after {
    display: none;
    content: none;
}

.property-card-content {
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-width: 0;
}

/* 2026-09-28: Названия квартир читаются чётким крупным текстом без синтетического начертания. */
.property-card-content > strong {
    color: #153f32;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 20px;
    font-weight: 600;
    font-synthesis: none;
    line-height: 1.35;
    text-shadow: none;
}

.property-card-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 14px;
    align-items: center;
}

.property-card-actions .property-id,
.property-card-actions .property-state-inactive {
    margin-top: 9px;
}

.property-card-inactive {
    border-color: #d9b8b0 !important;
    background: #f7efed !important;
    opacity: 0.88;
}

.property-state-inactive {
    width: max-content;
    margin-top: 7px !important;
    padding: 4px 8px;
    border-radius: 999px;
    color: #72281d !important;
    background: #f3dcd7;
    font-size: 12px !important;
    font-weight: 700;
}

.property-id {
    color: #315849 !important;
    font-weight: 700;
}

.property-today-arrivals {
    display: grid;
    gap: 10px;
    margin-top: 14px;
    padding-top: 13px;
    border-top: 1px solid #d8e4df;
}

/* 2026-09-28: Крупная сводка различает ожидаемые и полученные суммы без учёта предоплаты. */
.property-today-arrival {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(150px, 38%);
    align-items: stretch;
    gap: 12px;
    min-width: 0;
}

.property-today-arrival-copy {
    display: grid;
    gap: 7px;
    min-width: 0;
    font-size: 15px;
}

.property-arrival-guest {
    color: #244f3f !important;
    font-size: 15px !important;
    font-weight: 700;
    overflow-wrap: anywhere;
}

.property-arrival-total {
    display: block;
    overflow-wrap: anywhere;
    padding: 8px 10px;
    border-radius: 9px;
    font-size: 17px;
    line-height: 1.3;
}

.has-payment-due .property-arrival-total { color: #703b00; background: #ffe8a7; }
.is-payment-complete .property-arrival-total { color: #12573a; background: #d7f2e4; }
.property-arrival-breakdown { display: flex; flex-wrap: wrap; gap: 5px 12px; }
.property-arrival-breakdown > span {
    color: #2f4e43 !important;
    font-size: 14px !important;
    line-height: 1.4;
}
.property-arrival-breakdown > .is-due { color: #8a410d !important; font-weight: 700; }

/* 2026-10-04: Первая попытка связи главного брониста остаётся читаемой под именем гостя. */
.property-arrival-bronist-contact { display: block; margin: 5px 0; color: #386a59; font-size: 13px; line-height: 1.35; }
/* 2026-10-05: Переход к конкретному заезду и связь брониста заметны внутри карточки квартиры. */
.property-arrival-links { display:flex; flex-wrap:wrap; gap:7px; margin:7px 0; }
.property-arrival-links a { display:inline-flex; align-items:center; min-height:32px; padding:5px 10px; border:1px solid #bfd8ca; border-radius:8px; color:#24634a; background:#f4faf6; font-size:12px; font-weight:700; text-decoration:none; }
.property-arrival-links a:hover,.property-arrival-links a:focus-visible { border-color:#438f6c; background:#e6f4eb; }
.property-arrival-links .property-arrival-contact { color:#fff; background:#28765b; border-color:#28765b; }
.property-arrival-links .property-arrival-contact:hover,.property-arrival-links .property-arrival-contact:focus-visible { color:#fff; background:#1d6149; }
/* 2026-10-05: Пока бронист не предпринял попытку связи, кнопка в рабочей области выделена тёплым акцентом. */
.property-arrival-links .property-arrival-contact.is-awaiting-contact { color:#543900; border-color:#e3ae39; background:#ffe49b; box-shadow:0 3px 11px rgba(161,105,16,.2); font-weight:800; }
.property-arrival-links .property-arrival-contact.is-awaiting-contact:hover,.property-arrival-links .property-arrival-contact.is-awaiting-contact:focus-visible { color:#3e2b00; border-color:#d69b20; background:#ffd872; }
/* 2026-10-05: Отсутствующий номер показан на месте кнопки без перехода к недоступной связи. */
.property-arrival-links .property-arrival-contact.is-phone-pending { display:inline-flex; align-items:center; min-height:32px; padding:5px 10px; border:1px solid #d7dfdc; border-radius:8px; color:#63736c; background:#f1f5f3; font-size:12px; font-weight:700; }
/* 2026-10-05: Статистика бронистов подписана построчно, а брони раскрываются внутри строки сотрудника. */
.bronist-overall { margin-top:16px; padding:14px; border:1px solid #d6e7dd; border-radius:12px; background:#f5faf7; }
.bronist-overall > strong { display:block; margin-bottom:9px; }
.bronist-overall dl { display:grid; gap:0; margin:0; }
.bronist-overall dl > div { display:flex; justify-content:space-between; gap:14px; padding:7px 0; border-top:1px solid #e2ece5; }
.bronist-overall dt { color:#476b5b; }
.bronist-overall dd { margin:0; color:#184a37; font-weight:800; }
.bronist-person-list { display:grid; gap:10px; }
.bronist-person-entry { border:1px solid #d6e7dd; border-radius:12px; overflow:hidden; }
.bronist-person-entry > summary { display:grid; grid-template-columns:minmax(120px,1fr) minmax(200px,1.8fr) 16px; align-items:start; gap:12px; padding:12px 15px; background:#f5faf7; cursor:pointer; list-style:none; }
.bronist-person-entry > summary::-webkit-details-marker { display:none; }
.bronist-person-stats { display:grid; gap:0; color:#3c7057; font-size:13px; }
.bronist-person-stats > span { display:flex; justify-content:space-between; gap:12px; padding:4px 0; border-bottom:1px solid #e2ece5; }
.bronist-person-stats b { color:#184a37; }
.bronist-person-entry .work-booking-list { margin:0 10px 12px; border:1px solid #e0eae4; border-radius:9px; overflow:hidden; }
.work-booking-entry.bronist-booking-entry > summary { grid-template-columns:20px minmax(115px,1.2fr) minmax(130px,1.25fr) minmax(105px,1fr) 100px minmax(115px,.9fr) 16px; }
@media (max-width:760px) {
    .bronist-person-entry > summary { grid-template-columns:minmax(0,1fr) 16px; }
    .bronist-person-stats { grid-column:1; grid-row:2; }
    .bronist-person-chevron { grid-column:2; grid-row:1; }
    .work-booking-entry.bronist-booking-entry > summary { grid-template-columns:18px minmax(0,1fr) auto 12px; }
    .bronist-booking-entry .work-row-property,.bronist-booking-entry .work-row-guest,.bronist-booking-entry .work-row-code { grid-column:2; }
    .bronist-booking-entry .work-row-period,.bronist-booking-entry .work-row-status { grid-column:3; }
    .bronist-booking-entry .work-row-chevron { grid-column:4; }
}
.work-journal-rule { margin-bottom: 16px; }
.work-journal-rule p { max-width: 1000px; line-height: 1.55; }
/* 2026-10-04: Журнал различает выполненные и недостающие действия и показывает причину возврата. */
.work-action-list { display:flex; flex-direction:column; align-items:flex-start; gap:5px; margin:10px 0; }
.work-action-done, .work-action-missing { display:inline-block; padding:4px 7px; border-radius:7px; font-weight:700; line-height:1.3; }
.work-action-done { background:#e5f4e9; color:#216543; }
.work-action-missing { background:#fff0de; color:#89501b; }
.work-rework-reason { margin:8px 0; color:#73422b; overflow-wrap:anywhere; }
.work-rework-label { display:flex; flex-direction:column; gap:5px; margin:8px 0; font-weight:700; }
.work-rework-label textarea { width:min(100%,340px); min-height:60px; padding:8px; border:1px solid #b9cfc2; border-radius:7px; font:inherit; }

/* 2026-10-04: Журнал показывает понятные итоги и плотные раскрывающиеся строки вместо карточек на каждую бронь. */
.work-summary-explain,.work-list-hint { margin:0 0 12px; color:#5a7066; font-size:13px; line-height:1.4; }
.work-summary-list { display:grid; gap:10px; }
.work-summary-person { padding:10px 12px; border:1px solid #dce8e1; border-radius:10px; background:#f8fbf9; }
.work-summary-person > strong { display:block; margin-bottom:8px; color:#194b38; }
.work-summary-person dl { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin:0; }
.work-summary-person dl > div { display:flex; align-items:baseline; justify-content:space-between; gap:8px; padding:8px 10px; border-radius:7px; background:#fff; }
.work-summary-person dt { color:#49695b; font-size:12px; line-height:1.3; }
.work-summary-person dd { margin:0; color:#163c2d; font-size:19px; font-weight:700; white-space:nowrap; }
/* 2026-10-04: Месяц выезда для зачёта выбирается из компактного списка в административной сводке. */
.work-summary-heading { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px 16px; margin-bottom:8px; }
.work-summary-heading h2 { margin:0; }
.work-month-form { display:flex; align-items:center; gap:5px; }
.work-month-form label { font-size:12px; color:#49695b; }
.work-month-form select { max-width:145px; height:28px; padding:2px 5px; border:1px solid #c8ddd0; border-radius:6px; background:#fff; font:inherit; color:#193e2f; }
.work-month-form button { height:28px; padding:0 7px; border:0; border-radius:6px; background:#e5f2e9; color:#1a6349; font:inherit; font-weight:700; cursor:pointer; }
/* 2026-10-04: Оператору показываем только два ближайших месяца и короткую разбивку зачёта. */
.work-operator-months { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
.work-operator-month { display:flex; flex-wrap:wrap; align-items:center; gap:5px 14px; padding:10px 12px; border:1px solid #dce8e1; border-radius:10px; background:#f8fbf9; font-size:13px; }
.work-operator-month strong { width:100%; color:#194b38; }
.work-booking-list { border:1px solid #dce8e1; border-radius:10px; overflow:hidden; }
/* 2026-10-04: Поиск по всей истории размещён рядом с заголовком, не увеличивая высоту строк броней. */
.work-list-heading { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:8px; }
.work-list-heading h2 { margin:0; }
.work-list-search { display:flex; align-items:center; gap:6px; margin:0; }
.work-list-search label { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; }
.work-list-search input { width:245px; min-width:0; height:36px; padding:7px 10px; border:1px solid #bfd5c9; border-radius:8px; font:inherit; }
.work-list-search button { height:36px; padding:0 12px; border:0; border-radius:8px; background:#28775b; color:#fff; font:inherit; cursor:pointer; }
.work-list-search a { color:#28775b; font-size:12px; }
.work-booking-entry + .work-booking-entry { border-top:1px solid #e0eae4; }
/* 2026-10-04: ФИО гостя стоит в отдельной компактной колонке между квартирой и номером брони. */
.work-booking-entry > summary { display:grid; grid-template-columns:20px minmax(115px,1.2fr) minmax(130px,1.25fr) 28px minmax(105px,1fr) 100px minmax(115px,.9fr) 16px; align-items:center; gap:8px; min-height:40px; padding:5px 10px; color:#193e2f; cursor:pointer; list-style:none; font-size:13px; }
/* 2026-10-05: Значок площадки занимает собственную колонку между гостем и номером брони. */
.work-row-source { display:inline-flex; align-items:center; justify-content:center; width:25px; height:25px; border-radius:6px; background:#edf5f0; color:#28674d; font-size:10px; font-weight:800; }
.work-row-source img { display:block; width:22px; height:22px; object-fit:contain; }
.work-booking-entry > summary::-webkit-details-marker { display:none; }
.work-booking-entry > summary:hover,.work-booking-entry > summary:focus-visible,.work-booking-entry[open] > summary { background:#f0f8f3; }
.work-booking-entry > summary:focus-visible { outline:2px solid #2f775f; outline-offset:-2px; }
.work-booking-entry .work-row-property,.work-booking-entry .work-row-guest,.work-booking-entry .work-row-code { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.work-row-property { font-weight:700; }
.work-row-code,.work-row-period { color:#587165; }
.work-row-status { font-weight:700; color:#985019; }
.work-booking-entry.is-credited .work-row-status,.work-booking-entry.is-credited .work-row-state { color:#23714e; }
.work-row-chevron { font-size:19px; line-height:1; transition:transform .15s ease; }
.work-booking-entry[open] .work-row-chevron { transform:rotate(180deg); }
.work-booking-detail { padding:12px 16px 16px 38px; border-top:1px solid #e1ebe5; background:#fbfdfb; font-size:13px; }
.work-booking-detail-top { display:flex; flex-wrap:wrap; gap:3px 20px; }
.work-booking-detail-top p { margin:0 0 7px; }
.work-booking-detail-columns { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
.work-booking-detail h3 { margin:9px 0 7px; font-size:14px; }
.work-booking-detail .work-action-list { margin:0; align-items:stretch; }
.work-action-link { width:fit-content; max-width:100%; text-decoration:underline; text-underline-offset:2px; }
.work-action-link:hover,.work-action-link:focus-visible { background:#ffe2bf; color:#713a10; }
.work-attempt-list { margin:0; padding-left:18px; line-height:1.5; }
.work-booking-open { display:inline-block; margin-top:12px; color:#24684f; font-weight:700; }
.work-rework-form { max-width:380px; margin-top:12px; }
@media(max-width:760px) {
    .work-month-form { width:100%; flex-wrap:wrap; }
    .work-operator-months { grid-template-columns:1fr; }
    .work-list-search { width:100%; flex-wrap:wrap; }
    .work-list-search input { flex:1 1 180px; width:auto; }
    .work-summary-person dl { grid-template-columns:1fr; gap:3px; }
    .work-summary-person dl > div { padding:5px 8px; }
    .work-booking-entry > summary { grid-template-columns:18px 25px minmax(0,1fr) auto 12px; gap:2px 8px; min-height:62px; font-size:12px; }
    .work-row-state { grid-column:1; grid-row:1 / 4; }
    .work-row-source { grid-column:2; grid-row:1 / 4; }
    .work-row-property { grid-column:3; grid-row:1; }
    .work-row-guest { grid-column:3; grid-row:2; }
    .work-row-code { grid-column:3; grid-row:3; }
    .work-row-period { grid-column:4; grid-row:1; }
    .work-row-status { grid-column:4; grid-row:3; font-size:11px; white-space:nowrap; }
    .work-row-chevron { grid-column:5; grid-row:1 / 4; }
    .work-booking-detail { padding:11px 12px; }
    .work-booking-detail-columns { grid-template-columns:1fr; gap:8px; }
}
.property-today-arrival form { display: flex; min-width: 0; }
.property-check-in-button {
    width: 100%;
    min-height: 64px;
    padding: 12px 16px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 17px;
    font-weight: 700;
}
.property-check-in-done {
    display: grid !important;
    place-items: center;
    min-height: 64px;
    padding: 12px 14px;
    border-radius: 8px;
    color: #146345;
    background: #dcf3e7;
    font-size: 17px !important;
    font-weight: 700;
    text-align: center;
}

.property-image-form {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    margin-top: 10px;
}

.property-status-form {
    margin-top: 8px;
}

.file-button {
    display: inline-flex;
    align-items: center;
    min-height: 34px;
    margin: 0;
    padding: 6px 10px;
    border: 1px solid #9cb9ae;
    border-radius: 9px;
    color: #245f4b;
    background: #ffffff;
    cursor: pointer;
    font-size: 12px;
}

.file-button input {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    opacity: 0;
}

.property-list strong,
.property-list span {
    display: block;
}

.property-list span {
    margin-top: 4px;
    color: #65736e;
    font-size: 13px;
}

/* 2026-09-25: Календарь — главное действие в карточке квартиры. */
.property-calendar-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 48px;
    margin-top: 9px;
    padding: 8px 13px;
    border-radius: 10px;
    color: #fff;
    background: #31755d;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 16px;
    font-weight: 700;
    font-synthesis: none;
    text-shadow: none;
    text-decoration: none;
}

.property-calendar-link:hover,
.property-calendar-link:focus-visible {
    background: #245e4a;
    outline: 3px solid rgba(184, 137, 37, .25);
}

/* 2026-09-28: Общий счётчик и очередь новых броней читаются на телефоне без мелких подписей. */
.sync-review-link { display: inline-flex; align-items: center; gap: 9px; }
.sync-unread-badge {
    display: inline-grid !important;
    min-width: 27px;
    height: 27px;
    margin: 0 !important;
    padding: 0 6px;
    place-items: center;
    border-radius: 999px;
    color: #fff !important;
    background: #c2372a;
    font: 700 15px Arial, Helvetica, sans-serif;
}
.sync-review-heading { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px; align-items: center; }
.sync-review-heading h2 { margin-bottom: 4px; }
.sync-review-heading p { margin: 0; color: #36564a; font-size: 15px; }
.sync-review-heading form button { min-height: 50px; padding: 10px 16px; font-size: 15px; }
.sync-review-list { display: grid; gap: 10px; margin: 17px 0 0; padding: 0; list-style: none; }
.sync-review-card {
    display: grid;
    grid-template-columns: minmax(0, 1fr) max-content;
    gap: 4px 12px;
    align-items: center;
    padding: 14px;
    border: 1px solid #bdd9cc;
    border-left: 6px solid #26815f;
    border-radius: 15px;
    background: #fff;
    box-shadow: 0 3px 12px rgba(22, 65, 48, .06);
}
/* 2026-09-29: Сумма и корзина центрируются по всей высоте карточки; верхний и нижний отступы одинаковы. */
.sync-review-card.can-trash { grid-template-columns: minmax(0, 1fr) 44px max-content; }
.sync-review-card.can-trash .sync-review-main { grid-column: 1; grid-row: 1; }
.sync-review-card.can-trash .sync-review-trash { grid-column: 2; grid-row: 1 / span 2; align-self: center; justify-self: end; }
.sync-review-card.can-trash .sync-review-amount { grid-column: 3; grid-row: 1 / span 2; align-self: center; }
.sync-review-card.can-trash .sync-review-footer { grid-column: 1; grid-row: 2; }
.sync-review-card.is-reviewed { border-color: #d4dcd8; border-left-color: #9aa6a0; background: #f0f2f1; }
.sync-review-card[data-sync-booking-href] { cursor: pointer; }
.sync-review-card[data-sync-booking-href]:focus-visible { outline: 2px solid #2f775f; outline-offset: 2px; }

/* 2026-09-28: Новые брони выглядят как компактные карточки; номер и переход в календарь остаются видимыми отдельно. */
.sync-review-main { display: flex; align-items: center; gap: 12px; min-width: 0; min-height: 48px; color: #173f30; text-decoration: none; }
.sync-review-icon { display: flex; flex: none; align-items: center; justify-content: center; width: 39px; height: 39px; border-radius: 10px; background: #eff6f2; font-size: 19px; }
.sync-review-icon img { width: 27px; height: 27px; object-fit: contain; }
.sync-review-copy { display: grid; gap: 2px; min-width: 0; flex: 1; }
.sync-review-copy strong { overflow-wrap: anywhere; font-size: 17px; line-height: 1.22; }
/* 2026-10-04: Нет телефона — тот же красный, что у невозвращённого залога. */
.sync-review-no-phone { display: inline-flex; align-items: center; gap: 4px; width: fit-content;
    color: #c73b2f; font-size: 12px; line-height: 1.25; }
.sync-review-no-phone svg { width: 14px; height: 14px; flex: none; }
/* 2026-10-01: Серый статус отмены занимает место справа от данных гостя в карточке. */
.sync-review-cancel { flex: none; min-width: 130px; margin-left: auto; color: #84918c; font-size: 15px; font-weight: 700; text-align: center; letter-spacing: .08em; }
.sync-review-bnovo { color: #a0442d; font-size: 13px; letter-spacing: .02em; }
/* 2026-10-04: Полностью закрытые записью «вручную» даты отмечены зелёным статусом. */
.sync-review-bnovo-closed { color: #21815e; font-size: 13px; letter-spacing: .02em; }
.sync-review-overbooking { color: #b42318; font-size: 15px; letter-spacing: .04em; }
.sync-review-bnovo-form { display: inline-flex; margin: 0; }
.sync-review-bnovo-form button { border: 0; border-radius: 8px; padding: 6px 10px; background: linear-gradient(180deg,#4ca18a,#28745b); color: #fff; font-size: 12px; font-weight: 700; cursor: pointer; }
.sync-review-details { display: flex; flex-wrap: wrap; gap: 0 5px; color: #557069; font-size: 13px; line-height: 1.35; }
.sync-review-property::after { content: ' ·'; }
.sync-review-amount { justify-self: end; align-self: center; white-space: nowrap; font-size: 16px; line-height: 1.25; }
.sync-review-main:hover .sync-review-copy strong, .sync-review-main:focus-visible .sync-review-copy strong { text-decoration: underline; }
/* 2026-10-02: В очереди синхронизации двигается вся карточка, ссылки не подчёркиваются под курсором. */
.sync-review-card { transition:transform .22s cubic-bezier(.2,.75,.2,1), box-shadow .22s ease, border-color .22s ease; }
.sync-review-card:hover,.sync-review-card:focus-within { transform:translateY(-3px); box-shadow:0 12px 26px rgba(22,65,48,.12); border-color:#79b99b; }
.sync-review-card:hover .sync-review-copy strong,.sync-review-card:focus-within .sync-review-copy strong,
.sync-review-card:hover a,.sync-review-card:focus-within a { text-decoration:none; }
@media(prefers-reduced-motion:reduce) { .sync-review-card { transition:none; } .sync-review-card:hover,.sync-review-card:focus-within { transform:none; } }
.sync-review-footer { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: baseline; gap: 5px 15px; margin-left: 51px; font-size: 12px; }
.sync-review-code { color: #49695c; font-weight: 700; }
.sync-review-received { color: #59756a; }
.sync-review-calendar { width: fit-content; color: #24684f; font-size: 13px; font-weight: 700; }
.sync-review-meta { color: #697b73; font-size: 12px; }
.sync-review-trash { margin: 0; }
.sync-review-trash button { display: grid; place-items: center; width: 44px; height: 44px; padding: 7px; border: 1px solid transparent; border-radius: 9px; background: transparent; box-shadow: none; cursor: pointer; }
.sync-review-trash button:hover, .sync-review-trash button:focus-visible { border-color: #d7dfe0; background: #f3f7f5; outline-color: #2f775f; }
.sync-review-trash img { width: 26px; height: 26px; }
.booking-trash-restore { grid-column: 1 / -1; margin: 7px 0 0 51px; }
.booking-trash-restore button { min-height: 38px; }
.sync-trash-panel { margin-top: 16px; }
.sync-trash-panel p { margin: 8px 0 18px; }
.sync-trash-panel .small-button { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 10px 16px; border: 1px solid #32745f; border-radius: 10px; background: linear-gradient(180deg, #4e9f83, #31745e); color: #fff; font-size: 14px; font-weight: 500; text-decoration: none; box-shadow: 0 8px 20px rgba(56, 114, 93, .22); }
.sync-trash-panel .small-button:hover, .sync-trash-panel .small-button:focus-visible { background: linear-gradient(180deg, #408e74, #28654f); color: #fff; }

/* 2026-10-09: Опасная пересборка вынесена в отдельный закрытый блок внизу страницы синхронизации. */
.legacy-reset-panel { margin-top: 16px; }
.legacy-reset-panel > summary { cursor: pointer; color: #214f40; font-size: 19px; font-weight: 700; }
.legacy-reset-panel > summary::marker { color: #28745b; }
.legacy-reset-content { margin-top: 18px; }
.legacy-reset-content > p:first-child { margin-top: 0; }
.legacy-reset-content form { display: grid; gap: 7px; }
.legacy-reset-content form > label:first-of-type { display: flex; align-items: center; gap: 10px; }
.legacy-reset-content input[type="checkbox"] { flex: none; width: 18px; height: 18px; min-height: 18px; padding: 0; accent-color: #28745b; }
@media (max-width: 540px) {
    .sync-review-main { flex-wrap: wrap; }
    .sync-review-cancel { min-width: 0; margin-left: 43px; font-size: 13px; }
    .sync-review-main { gap: 9px; }
    .sync-review-icon { width: 34px; height: 34px; }
    .sync-review-icon img { width: 24px; height: 24px; }
    .sync-review-copy strong { font-size: 16px; }
    /* 2026-09-29: На телефоне период и число ночей занимают одну читаемую строку под адресом. */
    .sync-review-details { display: grid; gap: 1px; }
    .sync-review-property::after { content: ''; }
    .sync-review-period { font-size: 12px; font-weight: 700; white-space: nowrap; }
    .sync-review-amount { font-size: 15px; }
    .sync-review-footer { margin-left: 43px; }
    .booking-trash-restore { margin-left: 43px; }
}
@media (max-width: 440px) {
    .sync-review-card.can-trash { grid-template-columns: minmax(0, 1fr) max-content; }
    .sync-review-card.can-trash .sync-review-trash { grid-column: 2; grid-row: 1; }
    .sync-review-card.can-trash .sync-review-amount { grid-column: 2; grid-row: 2; }
    .sync-review-card.can-trash .sync-review-footer { grid-column: 1; grid-row: 2; }
}

/* 2026-09-28: Скрытые элементы живой очереди не оставляют пустых строк, а новые карточки двигаются без скачка. */
.admin-section-nav [hidden],
.sync-review-panel [hidden],
.bnovo-automation-form [hidden] { display: none !important; }
.admin-section-nav .sync-nav-link { display: inline-flex; align-items: center; gap: 8px; }
.sync-review-card { will-change: transform; }

.preview-banner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
    margin-bottom: 24px;
    padding: 16px 18px;
    border: 2px solid #c7972d;
    border-radius: 16px;
    background: #fff6da;
}

.preview-banner strong,
.preview-banner span {
    display: block;
}

.preview-banner span {
    margin-top: 4px;
}

.preview-banner form {
    flex: 0 0 auto;
}

.preview-banner button {
    padding: 0 18px;
}

.page-shell-wide {
    width: min(1480px, 100%);
}

.page-heading-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    margin-bottom: 24px;
}

.page-heading-row .page-title {
    margin: 0;
}

/* 2026-09-25: Одинаковая навигация связывает рабочую область, пользователей и журнал. */
.admin-section-nav {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 18px;
    margin-bottom: 22px;
    padding: 14px 16px;
    border: 1px solid rgba(56, 114, 93, 0.16);
    border-radius: 14px;
    background: #ffffff;
}

.admin-section-nav > div {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
}

/* 2026-09-29: Все пункты панели, включая активный, имеют одну высоту и равные вертикальные поля. */
.admin-section-nav a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 44px;
    padding: 8px 12px;
    border-radius: 9px;
    color: #2f775f;
    font-size: 15px;
    font-weight: 700;
    line-height: 1.25;
    text-decoration: none;
}

.admin-section-nav a:hover,
.admin-section-nav a.is-current {
    color: #ffffff;
    background: #38725d;
}

/* 2026-10-04: «Журналы» раскрывают три защищённых раздела без отдельного верхнего пункта для каждого. */
.admin-section-nav .nav-journals { position:relative; }
.admin-section-nav .nav-journals summary { display:inline-flex; align-items:center; justify-content:center; gap:7px; min-height:44px;
    padding:8px 12px; border-radius:9px; color:#2f775f; font-size:15px; font-weight:700; cursor:pointer; list-style:none; }
.admin-section-nav .nav-journals summary::-webkit-details-marker { display:none; }
.admin-section-nav .nav-journals summary:hover, .admin-section-nav .nav-journals summary.is-current { color:#fff; background:#38725d; }
.admin-section-nav .nav-journals summary:focus-visible { outline:3px solid #9fd9bd; }
.admin-section-nav .nav-journals-menu { position:absolute; top:calc(100% + 7px); left:0; z-index:30; display:grid; min-width:230px;
    padding:7px; border:1px solid #cfe2d8; border-radius:11px; background:#fff; box-shadow:0 12px 28px #1b483028; }
.admin-section-nav .nav-journals-menu a { justify-content:flex-start; width:100%; white-space:nowrap; }
/* 2026-10-04: В сегодняшнем заезде тот же перечёркнутый телефон виден только рабочим ролям. */
.property-arrival-phone-missing { display:inline-flex; vertical-align:middle; align-items:center; justify-content:center;
    width:23px; height:23px; margin-left:7px; border-radius:7px; color:#c8372c; background:#fff0ec; }
.property-arrival-phone-missing svg { display:block; width:16px; height:16px; }
@media (max-width:540px) {
    .admin-section-nav .nav-journals { min-width:0; }
    .admin-section-nav .nav-journals summary { width:100%; text-align:center; }
    /* 2026-10-11: Меню журналов выравнивается по левой границе своей ячейки,
       чтобы на телефоне все пункты оставались внутри экрана. */
    .admin-section-nav .nav-journals-menu { left:0; right:auto; box-sizing:border-box;
        min-width:100%; width:max-content; max-width:calc(100vw - 70px); }
    .admin-section-nav .nav-journals-menu a { white-space:normal; overflow-wrap:anywhere; text-align:left; }
}

/* 2026-09-29: На узком экране пункты меню занимают две равные колонки без случайных широких пустот. */
@media (max-width: 540px) {
    .admin-section-nav > div { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
    .admin-section-nav a { min-width: 0; width: 100%; text-align: center; overflow-wrap: anywhere; }
    /* 2026-10-06: Длинное название синхронизации занимает ряд целиком, а счётчик остаётся рядом с текстом. */
    .admin-section-nav a.sync-nav-link[href*="sync-bookings"] {
        grid-column: 1 / -1;
        box-sizing: border-box;
        white-space: nowrap;
        overflow-wrap: normal;
    }
    .admin-section-nav a.sync-nav-link[href*="sync-bookings"] .sync-unread-badge { flex: none; white-space: nowrap; }
}

/* 2026-09-25: Карточка квартиры объединяет её данные, фото и назначения сотрудников на резиновой странице. */
.property-admin-heading {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 20px;
    margin-bottom: 22px;
}

.property-admin-heading > div > span {
    color: #3a7962;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
}

.property-admin-heading .page-title {
    margin: 4px 0;
}

.property-admin-heading p {
    margin: 0;
    color: #65756f;
}

.property-calendar-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 46px;
    padding: 10px 18px;
    border-radius: 12px;
    color: #fff;
    background: #31755d;
    font-size: 15px;
    font-weight: 400;
    text-decoration: none;
}

.property-calendar-button:hover,
.property-calendar-button:focus-visible {
    background: #245e4a;
    outline: 3px solid rgba(184, 137, 37, .25);
}

.property-admin-grid {
    display: grid;
    grid-template-columns: minmax(230px, .65fr) minmax(520px, 1.8fr);
    gap: 18px;
    align-items: start;
}

.property-admin-photo-panel {
    position: sticky;
    top: 18px;
}

.property-admin-photo {
    display: block;
    width: 100%;
    max-height: 300px;
    border-radius: 14px;
    object-fit: cover;
    background: #e9f1ee;
}

.property-card-image-form {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
    margin-top: 14px;
}

.property-staff-editor,
.property-details-editor {
    grid-column: 2;
}

.property-staff-editor h2,
.property-details-editor h2 {
    margin: 0 0 16px;
    color: #275642;
}

.staff-role-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
}

.staff-role-card {
    min-width: 0;
    margin: 0;
    padding: 12px;
    border: 1px solid #d5e2dd;
    border-radius: 12px;
    background: #f8fbfa;
}

.staff-role-card legend {
    padding: 0 5px;
    color: #28634d;
    font-size: 15px;
    font-weight: 800;
}

.staff-role-card > p {
    min-height: 48px;
    margin: 0 0 10px;
    color: #687972;
    font-size: 11px;
    line-height: 1.4;
}

.staff-role-card > label {
    display: flex;
    gap: 8px;
    align-items: flex-start;
    margin: 7px 0 0;
    padding: 8px;
    border-radius: 9px;
    background: #fff;
    font-size: 12px;
    font-weight: 400;
}

.staff-role-card input,
.property-payment-options input {
    width: 18px;
    height: 18px;
    min-height: 0;
    flex: 0 0 auto;
    margin: 1px 0 0;
}

.staff-role-card label span,
.staff-role-card label strong,
.staff-role-card label small {
    display: block;
}

.staff-role-card label small {
    margin-top: 2px;
    color: #75837e;
}

/* 2026-09-29: Выбор главного брониста виден рядом с каждым назначенным сотрудником. */
.staff-role-card .staff-primary-help { margin: 8px 0 10px; color: #385d4e; font-size: 13px; line-height: 1.4; }
.staff-role-card .staff-primary-option {
    display: flex;
    align-items: center;
    gap: 7px;
    margin: 2px 8px 10px 29px;
    padding: 7px 9px;
    border: 1px solid #bfd5ca;
    border-radius: 8px;
    background: #eff7f2;
    color: #28634d;
    font-size: 13px;
    font-weight: 700;
}
.staff-role-card .staff-primary-option[hidden] { display: none; }
.staff-role-card .staff-primary-option input { width: 16px; height: 16px; margin: 0; }
/* 2026-09-30: Главный бронист выбирается отдельным хорошо заметным полем под списком назначений. */
.staff-role-card .staff-primary-picker { display: grid; gap: 8px; margin-top: 14px; padding: 12px; border: 1px solid #a8cbb7; border-radius: 10px; background: #eaf5ed; color: #20553e; font-size: 14px; font-weight: 700; }
.staff-role-card .staff-primary-picker select { width: 100%; min-height: 42px; padding: 8px; border: 1px solid #afcdbd; border-radius: 8px; background: #fff; color: #174a37; font: inherit; }
/* 2026-09-30: Результат сохранения остаётся у текущего положения страницы; пароль показывается в отдельном окне. */
/* 2026-10-02: Единый toast повторяет компактную зелёную плашку со страницы пользователей. */
.app-toast { position: fixed; z-index: 2000; right: 18px; bottom: 18px; max-width: min(440px, calc(100vw - 36px)); padding: 12px 16px; border-radius: 12px; background: #246f53; color: #fff; box-shadow: 0 12px 30px #173f3440; opacity: 0; transform: translateY(12px); pointer-events: none; transition: opacity .22s, transform .22s; }
.app-toast.is-visible { opacity: 1; transform: translateY(0); pointer-events: auto; }
.app-toast.is-error { background: #9e3f30; }
.app-toast.is-warning { background: #89572d; }
@media (prefers-reduced-motion: reduce) { .app-toast { transition:none; } }

/* 2026-10-02: Скрытые строки поиска не появляются снова из-за мобильного display карточек таблицы. */
[data-user-row][hidden], [data-user-search-empty][hidden] { display:none!important; }

/* 2026-10-02: Поиск пользователей и дополнительные номера помещаются в существующие карточки без изменения их роли. */
.user-search-control { display:grid; gap:6px; width:min(330px,100%); margin:0; color:#315b4c; font-size:13px; }
.user-search-control input { min-height:44px; font-size:15px; }
.admin-table tr[data-user-row][hidden],.user-search-empty[hidden] { display:none!important; }
/* 2026-10-05: Пользователи идут компактными строками; роль, контакты и действия открываются по нажатию строки. */
.users-accordion-table,.users-accordion-table tbody { display:block; width:100%; }
.users-accordion-table thead { display:none; }
.users-accordion-table tbody { display:grid; grid-template-columns:minmax(0,1fr)!important; gap:8px; }
.users-accordion-table tr[data-user-row] { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); overflow:hidden; border:1px solid #d7e6dd; border-radius:12px; background:#fff; box-shadow:0 3px 12px #2040340c; }
.users-accordion-table tr[data-user-row] > td { display:none!important; min-width:0; padding:12px 16px; border-bottom:1px solid #e5eee9; }
.users-accordion-table tr[data-user-row] > td:first-child { display:block!important; grid-column:1/-1; padding:0; border-bottom:0; background:#f7fbf9; }
.users-accordion-table tr[data-user-row]:has(.user-row-disclosure[open]) > td { display:block!important; }
.users-accordion-table tr[data-user-row]:has(.user-row-disclosure[open]) > td:first-child { border-bottom:1px solid #dce9e1; }
.users-accordion-table tr[data-user-row] > td::before { content:attr(data-label); display:block; margin-bottom:6px; color:#668078; font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; }
.users-accordion-table tr[data-user-row] > td:first-child::before { display:none; }
.users-accordion-table tr[data-user-row] > .action-cell { grid-column:1/-1; }
.user-row-disclosure > summary { display:grid; grid-template-columns:minmax(180px,2fr) minmax(100px,1fr) minmax(145px,1.4fr) auto 20px; align-items:center; gap:12px; min-height:60px; padding:10px 16px; cursor:pointer; list-style:none; color:#173f32; }
.user-row-disclosure > summary::-webkit-details-marker { display:none; }
.user-row-disclosure > summary::after { content:'⌄'; color:#277157; font-size:22px; line-height:1; transform:rotate(0); transition:transform .15s; }
.user-row-disclosure[open] > summary::after { transform:rotate(180deg); }
.user-row-disclosure > summary:hover { background:#eef7f1; }
.user-row-disclosure > summary:focus-visible { outline:3px solid #83c8a3; outline-offset:-3px; }
.user-row-disclosure > summary > strong,.user-row-disclosure > summary > span { display:block; min-width:0; overflow-wrap:anywhere; }
.user-row-disclosure > summary .status { margin:0!important; white-space:nowrap; }
.user-row-disclosure > summary .status-special-disabled { max-width:240px; white-space:normal; text-align:center; line-height:1.25; }
@media(max-width:700px){.user-row-disclosure > summary .status-special-disabled{max-width:min(200px,42vw)}}
@media(max-width:700px){.users-accordion-table tr[data-user-row]{grid-template-columns:minmax(0,1fr)}.user-row-disclosure > summary{grid-template-columns:minmax(0,1fr) auto 20px;gap:4px 8px}.user-row-disclosure > summary > strong{grid-column:1}.user-row-disclosure > summary .user-row-login,.user-row-disclosure > summary .user-row-role{grid-column:1;font-size:12px;color:#547266}.user-row-disclosure > summary .status{grid-column:2;grid-row:1/4}.user-row-disclosure > summary::after{grid-column:3;grid-row:1/4}.users-accordion-table tr[data-user-row] > td{grid-column:1!important}}
/* 2026-10-05: Список 30-минутных счетов показывает срок, сумму и действия одной читаемой строкой. */
.site-invoices-section { margin-bottom:18px; padding:18px 20px; }
.site-invoices-section h2 { display:flex; align-items:center; gap:10px; margin:0 0 14px; color:#205640; font-size:20px; }
.site-invoices-section h2 span { padding:3px 8px; border-radius:99px; background:#e9f4ed; font-size:13px; }
.site-invoices-empty { margin:0; color:#617a6e; }
.site-invoices-list { display:grid; gap:8px; }
.site-invoices-row { display:grid; grid-template-columns:minmax(200px,2fr) minmax(110px,.7fr) minmax(180px,1.2fr) auto; align-items:center; gap:14px; min-width:0; padding:12px 14px; border:1px solid #d9e8df; border-radius:11px; background:#f8fbf9; }
.site-invoices-main,.site-invoices-money,.site-invoices-state { display:grid; gap:3px; min-width:0; overflow-wrap:anywhere; }
.site-invoices-main strong { color:#194a36; }
.site-invoices-main span,.site-invoices-money span,.site-invoices-state span { color:#536e5f; font-size:13px; }
.site-invoices-main small { color:#6c7e72; font-size:12px; }
.site-invoices-links { display:flex; flex-wrap:wrap; gap:8px; }
.site-invoices-links a { padding:8px 11px; border:1px solid #a7ceba; border-radius:8px; background:#fff; color:#17684e; font-size:13px; font-weight:700; text-decoration:none; white-space:nowrap; }
.site-invoices-links a:hover { border-color:#28745b; background:#eaf5ee; color:#205d47; }
@media(max-width:900px){.site-invoices-row{grid-template-columns:repeat(2,minmax(0,1fr))}.site-invoices-links{grid-column:1/-1}}
@media(max-width:540px){.site-invoices-section{padding:14px}.site-invoices-row{grid-template-columns:minmax(0,1fr)}.site-invoices-links{grid-column:1}.site-invoices-links a{white-space:normal}}
/* 2026-10-05: Непросмотренный счёт выделен мягко, а кнопка просмотра сохраняет оформление прежней ссылки. */
.site-invoices-row[data-invoice-unread] { border-color:#e4c879; background:#fffaf0; }
.site-invoices-main .site-invoices-unread-label { width:max-content; padding:2px 7px; border-radius:6px; background:#ffe7aa; color:#805413; font-size:12px; font-weight:700; }
.site-invoices-links a[data-invoice-view] { border-color:#28745b; background:#28745b; color:#fff; }
.site-invoices-links a[data-invoice-view]:hover { background:#205d47; color:#fff; }

/* 2026-10-05: Удобства квартиры редактируются группами в карточке администратора. */
.property-amenities-editor { grid-column:1/-1; }
.property-amenities-heading { display:flex; justify-content:space-between; align-items:start; flex-wrap:wrap; gap:14px; }
.property-amenities-heading h2 { margin:0 0 5px; }
.property-amenities-heading p { margin:0 0 16px; color:#60776d; }
.property-amenities-form { display:grid; gap:18px; }
.property-amenities-intro { display:grid; grid-template-columns:minmax(0,1fr); gap:14px; }
.property-amenities-intro label { display:grid; align-content:start; gap:7px; color:#285443; font-weight:700; }
.property-amenities-intro input,.property-amenities-intro textarea,.property-amenity-number input { width:100%; min-width:0; padding:10px 12px; border:1px solid #bdd2c7; border-radius:9px; background:#fff; color:#163e2f; font:inherit; }
.property-amenities-intro textarea { min-height:125px; resize:vertical; line-height:1.5; }
.property-amenities-groups { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); align-items:start; gap:10px; }
.property-amenities-group { min-width:0; border:1px solid #d5e3dc; border-radius:10px; background:#f8fbf9; }
.property-amenities-group summary { display:flex; justify-content:space-between; align-items:center; gap:10px; padding:12px 14px; color:#1f624b; font-weight:700; cursor:pointer; }
.property-amenities-group summary span { color:#657b70; font-size:12px; font-weight:400; white-space:nowrap; }
.property-amenities-list { display:grid; gap:7px; padding:0 14px 14px; }
.property-amenity-option { display:flex; align-items:center; justify-content:space-between; gap:10px; min-width:0; }
.property-amenity-option > label:first-child { display:flex; align-items:center; gap:8px; min-width:0; cursor:pointer; }
.property-amenity-option input[type=checkbox] { width:18px; height:18px; flex:none; accent-color:#28745b; }
.property-amenity-option span { overflow-wrap:anywhere; }
.property-amenity-number { display:flex; align-items:center; gap:4px; flex:none; }
.property-amenity-number input { width:84px; padding:7px; }
.property-amenities-form > button { width:fit-content; }
@media(max-width:800px){.property-amenities-groups{grid-template-columns:1fr}}
@media(max-width:620px){.property-amenities-intro{grid-template-columns:1fr}}
/* 2026-10-11: Редактор кодов и карты остаётся читаемым на телефоне и не накладывается на соседние панели. */
.property-access-editor { grid-column:1/-1; }
.property-access-form { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; }
.property-access-form > label,.property-map-fields label { display:grid; gap:6px; color:#385b4e; font-size:13px; font-weight:700; }
.property-access-form input { width:100%; min-width:0; padding:10px 12px; border:1px solid #bed0c9; border-radius:9px; background:#fff; color:#213f35; font:inherit; }
.property-map-fields { grid-column:1/-1; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)) auto; align-items:end; gap:12px; }
.property-map { grid-column:1/-1; height:360px; min-height:260px; border:1px solid #bed0c9; border-radius:12px; overflow:hidden; background:#e9f1ec; }
.property-map-help { grid-column:1/-1; margin:0; color:#60776d; font-size:13px; }
.property-access-form > .property-save-button { justify-self:start; }
@media(max-width:700px){.property-access-form,.property-map-fields{grid-template-columns:1fr}.property-map{height:300px}}
/* 2026-10-11: Утраченное фото заметно в админке, кнопку удаления можно нажать без JavaScript. */
.slider-photo-missing { min-height:94px; display:grid; place-items:center; padding:10px; border:1px dashed #bd7a6c; border-radius:9px; color:#9b4337; background:#fff3ef; text-align:center; font-size:12px; }
.slider-admin-actions form { margin:0; }
.user-search-empty { margin:18px; color:#557469; }
.user-extra-phones { display:grid; gap:8px; }
.user-extra-phone { display:grid; grid-template-columns:minmax(0,1fr) 34px; align-items:end; gap:6px; }
.user-extra-phone button { min-height:36px; padding:0; border:1px solid #c9dcd1; border-radius:9px; background:#fff; color:#365f50; font-size:20px; cursor:pointer; }
.user-extra-phone button:hover { background:#fff0eb; color:#a23f30; }
.user-add-phone { padding:6px 0; border:0; background:transparent; color:#176d51; font:inherit; font-size:13px; font-weight:700; text-align:left; cursor:pointer; }
/* 2026-10-04: Форма создания пользователя остаётся компактной над таблицей на широком и узком экране. */
.user-create-panel { margin:0 0 18px; padding:14px 17px; border:1px solid #d2e2d9; border-radius:13px; background:#f7fbf9; }
.user-create-panel>summary { color:#17644e; font-weight:700; cursor:pointer; }
.user-create-form { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin-top:17px; align-items:end; }
.user-create-form label { display:grid; gap:5px; color:#315b4c; font-size:13px; font-weight:700; }
.user-create-form input,.user-create-form select { width:100%; min-height:42px; padding:8px 10px; border:1px solid #bad3c7; border-radius:8px; background:#fff; color:#173d32; font:15px Arial,sans-serif; }
.user-create-form button { min-height:42px; }
@media(max-width:800px){.user-create-form{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:520px){.user-create-form{grid-template-columns:1fr}}
/* 2026-10-04: Ссылка-приглашение читается целиком и копируется без ручного выделения на телефоне. */
.invitation-create-panel p { margin:10px 0 0; color:#526c5e; line-height:1.45; }
.invitation-link-box { overflow:hidden; }
.invitation-link-box p { margin:0; color:#526c5e; }
.invitation-link-row { display:flex; flex-wrap:wrap; gap:9px; }
.invitation-link-row input { flex:1 1 330px; min-width:0; font-size:14px; }
.invitation-link-row button { flex:0 0 auto; padding:9px 15px; }
@media(max-width:520px){.invitation-link-row button{width:100%}}
/* 2026-10-04: Форма регистрации по ссылке показывает ФИО и контакты парами, а на телефоне — по одному полю. */
.invitation-registration-card { width:min(100%,720px); }
.invitation-registration-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:0 16px; }
.invitation-registration-grid label { min-width:0; }
@media(max-width:560px){.invitation-registration-grid{grid-template-columns:minmax(0,1fr)}}
.admin-password-dialog { max-width: min(480px, calc(100vw - 28px)); border: 1px solid #c9ddd1; border-radius: 18px; padding: 22px; box-shadow: 0 24px 60px #173f3440; }
.admin-password-dialog::backdrop { background: #092f2480; }
.admin-password-dialog .temporary-password-box { margin: 0 0 16px; }

.staff-empty {
    color: #8a5b52;
    font-size: 12px;
}

.property-save-button {
    width: auto;
    margin-top: 14px;
    padding-right: 18px;
    padding-left: 18px;
}

.property-details-form {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 13px;
}

.property-details-form label {
    margin: 0;
    color: #385b4e;
    font-size: 12px;
    font-weight: 700;
}

.property-details-form input,
.property-details-form textarea {
    width: 100%;
    margin-top: 5px;
    padding: 9px 11px;
    border: 1px solid #bed0c9;
    border-radius: 10px;
    color: #213f35;
    background: #fff;
    font: inherit;
    font-size: 14px;
}

.property-details-form textarea {
    min-height: 78px;
    resize: vertical;
}

.property-details-form .field-wide {
    grid-column: 1 / -1;
}

/* 2026-10-02: Раздельные реквизиты доплаты и залога редактируются в двух читаемых группах. */
.property-payment-detail-group { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; min-width:0; margin:2px 0; padding:16px; border:1px solid #cbded3; border-radius:13px; background:#f8fbf9; }
.property-payment-detail-group legend { padding:0 6px; color:#215b43; font-size:15px; font-weight:700; }
.property-payment-detail-group select { display:block; width:100%; min-height:40px; margin-top:5px; padding:8px 10px; border:1px solid #bed0c9; border-radius:10px; color:#213f35; background:#fff; font:inherit; font-size:14px; }
.property-payment-detail-group .property-payment-options,.property-payment-detail-group > small { grid-column:1 / -1; }
.property-payment-detail-group > small { color:#557568; line-height:1.4; }
@media(max-width:640px) { .property-payment-detail-group { grid-template-columns:1fr; } }

.property-payment-options {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 18px;
    padding: 12px;
    border-radius: 11px;
    background: #f3f8f6;
}

.property-payment-options label {
    display: flex;
    gap: 8px;
    align-items: center;
}

/* 2026-09-26: Контакты назначенных сотрудников, ссылки на карточки и способы оплаты выровнены без растяжения элементов формы. */
.staff-person-link {
    color: #1f654e;
    text-decoration-color: rgba(31, 101, 78, .35);
    text-underline-offset: 2px;
}

.staff-person-link:hover {
    color: #0d4936;
    text-decoration-color: currentColor;
}

.assigned-contact-field {
    display: grid;
    gap: 4px;
    min-width: 0;
    padding: 10px 12px;
    border: 1px solid #bed0c9;
    border-radius: 10px;
    background: #f7fbf9;
}

.assigned-contact-field > span {
    color: #385b4e;
    font-size: 12px;
    font-weight: 700;
}

.assigned-contact-field > div {
    display: flex;
    flex-wrap: wrap;
    gap: 5px 14px;
}

.assigned-contact-field a {
    color: #245f4b;
    font-weight: 700;
}

.property-payment-options {
    display: grid;
    grid-template-columns: repeat(2, max-content);
    justify-content: start;
    gap: 10px 28px;
}

.property-payment-options label {
    display: inline-flex;
    width: auto;
    gap: 9px;
    align-items: center;
    margin: 0;
    line-height: 1.35;
}

.property-payment-options input {
    width: 18px;
    min-width: 18px;
    height: 18px;
    flex: 0 0 18px;
    margin: 0;
    padding: 0;
}

/* 2026-09-26: Отдельная карточка сотрудника остаётся компактной и доступной без горизонтальной прокрутки. */
.user-card-page {
    max-width: 980px;
}

.user-card-panel {
    display: grid;
    gap: 22px;
}

.user-card-meta {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
}

.user-card-meta > span {
    display: grid;
    gap: 5px;
    padding: 12px 14px;
    border-radius: 12px;
    color: #6d7d77;
    background: #f2f7f5;
    font-size: 12px;
}

.user-card-meta strong {
    color: #244f3f;
    overflow-wrap: anywhere;
}

.user-card-form {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
}

.user-card-form label {
    display: grid;
    gap: 6px;
    color: #385b4e;
    font-size: 13px;
    font-weight: 700;
}

.user-card-form input {
    width: 100%;
    min-height: 44px;
    padding: 9px 12px;
    border: 1px solid #bed0c9;
    border-radius: 10px;
    color: #213f35;
    background: #fff;
    font: inherit;
}

.user-card-form button {
    width: max-content;
}

.table-card {
    overflow: hidden;
    border: 1px solid rgba(56, 114, 93, 0.14);
    border-radius: 18px;
    background: #ffffff;
    box-shadow: 0 12px 34px rgba(32, 63, 52, 0.09);
}

/* 2026-10-04: Журнал оставляет поля вокруг заголовков, таблиц и текста правил даже при пустых списках. */
.work-journal-page > .table-card {
    padding: 20px 22px;
    margin-bottom: 16px;
    background: #fff;
    border: 1px solid rgba(56, 114, 93, 0.14);
    border-radius: 18px;
    box-shadow: 0 12px 34px rgba(32, 63, 52, 0.09);
}

.work-journal-page > .table-card h2 { margin: 0 0 16px; }
.work-journal-page > .work-journal-rule p { margin: 0 0 14px; }
.work-journal-page > .work-journal-rule p:last-child { margin-bottom: 0; }

@media (max-width: 600px) {
    .work-journal-page > .table-card { padding: 16px; }
}

.table-scroll {
    overflow-x: auto;
}

.admin-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
}

.admin-table th,
.admin-table td {
    padding: 14px;
    border-bottom: 1px solid #e3ebe8;
    text-align: left;
    vertical-align: top;
    overflow-wrap: anywhere;
}

.admin-table th {
    color: #315849;
    background: #f1f7f4;
    white-space: nowrap;
}

.admin-table td span,
.admin-table td strong {
    display: block;
}

.admin-table td span + span {
    margin-top: 4px;
}

.action-cell {
    min-width: 190px;
}

.action-cell form {
    display: inline-block;
    margin: 0 5px 6px 0;
}

.small-button {
    min-height: 34px;
    padding: 6px 10px;
    border-radius: 9px;
    font-size: 12px;
    box-shadow: none;
}

.secondary-button {
    background: #6f7d78;
}

.status {
    width: max-content;
    margin-top: 8px !important;
    padding: 5px 10px;
    border-radius: 999px;
    background: #e9f4ef;
    color: #245f4b;
    font-size: 13px;
    font-weight: 700;
}

.status-disabled,
.status-blocked {
    background: #fbeae7;
    color: #72281d;
}

.status-pending {
    background: #fff4d6;
    color: #725512;
}

/* 2026-09-25: Компактная форма позволяет администратору исправить ФИО и телефон прямо в списке пользователей. */
.user-edit-details {
    margin: 0 0 8px;
}

.user-edit-details summary,
.property-access-details summary,
.role-edit-details summary {
    width: max-content;
    max-width: 100%;
    cursor: pointer;
    color: #176e57;
    font-size: 13px;
    font-weight: 700;
}

/* 2026-10-04: На телефоне действие редактирования пользователя читается и легко нажимается. */
@media (max-width: 850px) {
    .user-edit-details summary { min-height: 42px; display: inline-flex; align-items: center; padding: 7px 11px; font-size: 17px; line-height: 1.25; }
}

/* 2026-09-25: Superadmin меняет роль пользователя прямо в таблице, сохраняя единственную понятную роль. */
.role-edit-details {
    margin-top: 9px;
}

.action-cell .role-edit-form,
.role-edit-form {
    display: grid;
    gap: 8px;
    width: min(100%, 230px);
    margin: 9px 0 0;
}

.role-edit-form select {
    min-height: 38px;
    margin: 0;
    padding: 7px 9px;
    border: 1px solid #b9cdc5;
    border-radius: 9px;
    color: #244f3f;
    background: #fff;
    font-size: 13px;
}

.property-access-details {
    margin: 0 0 10px;
}

.action-cell .user-edit-form {
    display: grid;
    gap: 8px;
    width: 260px;
    margin: 10px 0 8px;
    padding: 12px;
    border: 1px solid rgba(31, 105, 82, 0.2);
    border-radius: 10px;
    background: #f7fbf9;
}

/* 2026-09-25: Список с флажками назначает и убирает квартиры без ручного редактирования БД. */
.action-cell .property-access-form {
    display: grid;
    gap: 10px;
    width: min(100%, 520px);
    margin: 10px 0 12px;
    padding: 12px;
    border: 1px solid rgba(31, 105, 82, 0.2);
    border-radius: 10px;
    background: #f7fbf9;
}

.property-checklist {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 6px;
    max-height: 300px;
    overflow-y: auto;
    padding: 2px;
}

.property-checklist label {
    display: flex;
    gap: 7px;
    align-items: flex-start;
    min-width: 0;
    margin: 0;
    padding: 7px;
    border-radius: 8px;
    background: #ffffff;
    font-size: 12px;
    font-weight: 400;
}

.property-checklist input {
    width: 17px;
    height: 17px;
    min-height: 0;
    flex: 0 0 auto;
    margin: 1px 0 0;
    padding: 0;
}

.property-checklist span,
.property-checklist strong {
    display: inline !important;
}

/* 2026-09-25: Таблица превращается в резиновые карточки до появления горизонтальной прокрутки. */
@media (max-width: 1400px) {
    .page-shell-wide {
        width: 100%;
    }

    .table-card {
        overflow: visible;
        border: 0;
        background: transparent;
        box-shadow: none;
    }

    .table-scroll {
        overflow: visible;
    }

    .admin-table,
    .admin-table tbody {
        display: block;
        width: 100%;
    }

    .admin-table thead {
        display: none;
    }

    .admin-table tbody {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 16px;
    }

    .admin-table tr {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-content: start;
        overflow: hidden;
        border: 1px solid rgba(56, 114, 93, 0.16);
        border-radius: 16px;
        background: #ffffff;
        box-shadow: 0 10px 28px rgba(32, 63, 52, 0.08);
    }

    .admin-table td {
        display: block;
        min-width: 0;
        padding: 12px 14px;
        border: 0;
        border-bottom: 1px solid #e7eeeb;
    }

    .admin-table td::before {
        content: attr(data-label);
        display: block;
        margin-bottom: 6px;
        color: #668078;
        font-size: 11px;
        font-weight: 700;
        letter-spacing: 0.04em;
        text-transform: uppercase;
    }

    .admin-table td:first-child,
    .admin-table .action-cell {
        grid-column: 1 / -1;
    }

    .admin-table td:first-child {
        background: #f4f9f7;
    }

    .admin-table .action-cell {
        min-width: 0;
        border-bottom: 0;
    }

    .action-cell .user-edit-form {
        width: min(100%, 460px);
    }

    .action-cell .property-access-form {
        width: min(100%, 620px);
    }
}

@media (max-width: 850px) {
    .admin-table tbody {
        grid-template-columns: 1fr;
    }

    .property-admin-grid {
        grid-template-columns: 1fr;
    }

    .property-admin-photo-panel {
        position: static;
    }

    .property-staff-editor,
    .property-details-editor {
        grid-column: 1;
    }

    .staff-role-grid {
        grid-template-columns: 1fr;
    }

    .staff-role-card > p {
        min-height: 0;
    }
}

@media (max-width: 560px) {
    .page-shell {
        padding-right: 12px;
        padding-left: 12px;
    }

    .page-heading-row {
        align-items: flex-start;
        flex-direction: column;
    }

    .property-admin-heading {
        align-items: stretch;
        flex-direction: column;
    }

    .property-calendar-button {
        width: 100%;
    }

    .property-details-form {
        grid-template-columns: 1fr;
    }

    .property-details-form .field-wide {
        grid-column: 1;
    }

    .admin-section-nav {
        align-items: flex-start;
        flex-direction: column;
    }

    .admin-table tr {
        grid-template-columns: 1fr;
    }

    .admin-table td,
    .admin-table td:first-child,
    .admin-table .action-cell {
        grid-column: 1;
    }

    .action-cell form {
        display: block;
        margin-right: 0;
    }

    .action-cell > form .small-button {
        width: 100%;
    }

    .property-checklist {
        grid-template-columns: 1fr;
    }
}

.user-edit-form label {
    margin: 0;
    font-size: 12px;
}

.user-edit-form input {
    min-height: 36px;
    margin-top: 4px;
    padding: 7px 9px;
    font-size: 13px;
}

.form-help {
    display: block;
    margin: -8px 0 16px;
    color: #5f6f69;
    font-size: 12px;
    line-height: 1.45;
}

/* 2026-10-04: На экране настройки подсказка email не налезает на поле, а смена учётной записи остаётся доступной после перезапуска браузера. */
.auth-content .form-help { margin: 8px 0 16px; font-size: 13px; line-height: 1.4; }
.auth-current-account { margin: -8px 0 18px; color: #536a5d; font-size: 14px; line-height: 1.45; text-align: center; overflow-wrap: anywhere; }
.auth-switch-account { margin-top: 13px; }
.auth-content .auth-switch-account button {
    margin-top: 0; border: 1px solid #a8c6b6; background: #fff; color: #28694f;
    box-shadow: none; font-size: 15px; font-weight: 700;
}
.auth-content .auth-switch-account button:hover,
.auth-content .auth-switch-account button:focus-visible { background: #f1f8f3; box-shadow: none; }

.temporary-password-box {
    display: grid;
    gap: 6px;
    margin-bottom: 20px;
    padding: 18px;
    border: 2px solid #c7972d;
    border-radius: 14px;
    background: #fff6da;
}

.temporary-password-box code {
    width: max-content;
    padding: 8px 12px;
    border-radius: 8px;
    background: #ffffff;
    font-size: 20px;
    font-weight: 700;
}

.full-width-link {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    margin-top: 20px;
    text-decoration: none;
}

.panel {
    padding: 24px;
    border: 1px solid rgba(56, 114, 93, 0.14);
    border-radius: 18px;
    background: #ffffff;
    box-shadow: 0 12px 34px rgba(32, 63, 52, 0.09);
}

.panel p {
    margin: 8px 0;
    line-height: 1.55;
}

.role-list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 14px;
}

.role-badge {
    padding: 7px 11px;
    border-radius: 999px;
    background: #e9f4ef;
    color: #245f4b;
    font-size: 13px;
    font-weight: 700;
}

/* 2026-09-26: Ручная синхронизация вынесена в заметный административный блок перед квартирами. */
.booking-sync-panel {
    display: flex;
    flex-wrap: wrap;
    gap: 24px;
    align-items: center;
    justify-content: space-between;
    border-color: rgba(26, 125, 94, .25);
    background: linear-gradient(135deg, #f7fbf9 0%, #edf7f3 100%);
}

.booking-sync-copy {
    flex: 1 1 420px;
    max-width: 760px;
}

.booking-sync-copy h2 {
    margin: 3px 0 8px;
}

.booking-sync-copy p {
    margin: 0 0 7px;
    color: #536d63;
}

.booking-sync-copy small {
    color: #71847c;
}

/* 2026-09-26: Контрольные счётчики показывают текущее число броней, ночей и отмен в новой базе. */
.booking-database-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 12px;
}

.booking-database-stats span {
    display: inline-flex;
    gap: 6px;
    align-items: baseline;
    padding: 7px 10px;
    border: 1px solid #cfdfd9;
    border-radius: 10px;
    color: #526d63;
    background: rgba(255, 255, 255, .72);
    font-size: 12px;
}

.booking-database-stats strong {
    color: #1d664e;
    font-size: 17px;
}

.booking-sync-kicker {
    color: #218063;
    font-size: 11px;
    font-weight: 800;
    letter-spacing: .06em;
    text-transform: uppercase;
}

.booking-sync-panel form {
    display: grid;
    flex: 0 0 auto;
    gap: 7px;
    justify-items: stretch;
}

/* 2026-09-26: Импорт Bnovo отделён внутри общего блока и остаётся читаемым на узком экране. */
.booking-sync-panel .bnovo-sync-form {
    max-width: 480px;
    width: 100%;
    border-left: 1px solid rgba(24, 108, 83, .18);
    padding-left: 24px;
}

.bnovo-sync-form strong,
.bnovo-sync-form small {
    display: block;
}

.bnovo-sync-form strong {
    color: #245f4b;
    font-size: 16px;
}

.bnovo-sync-form small {
    color: #71847c;
    line-height: 1.4;
}

.booking-bnovo-button {
    margin-top: 4px;
}

.bnovo-lookup-link {
    color: #176c52;
    font-size: 12px;
    font-weight: 800;
    text-align: center;
    text-underline-offset: 2px;
}

/* 2026-09-26: Отчёт Bnovo повторяет компактный карточный список календаря и визуально разделяет результат сопоставления. */
.bnovo-run-report {
    display: grid;
    flex: 1 0 100%;
    gap: 18px;
    width: 100%;
    padding-top: 20px;
    border-top: 1px solid rgba(24, 108, 83, .18);
}

.bnovo-run-report h3,
.bnovo-report-group h4 {
    margin: 0;
    color: #285744;
}

.bnovo-run-report h3 {
    font-size: 21px;
}

.bnovo-report-group {
    display: grid;
    gap: 9px;
}

.bnovo-report-group h4 {
    display: flex;
    gap: 8px;
    align-items: center;
    font-size: 16px;
}

.bnovo-report-group h4 span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 25px;
    height: 25px;
    padding: 0 7px;
    border-radius: 999px;
    color: #fff;
    background: #2b735b;
    font-size: 12px;
}

.bnovo-report-group-pending h4 span {
    background: #c83d31;
}

.bnovo-report-list {
    display: grid;
    gap: 9px;
    max-width: 780px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.bnovo-report-card {
    position: relative;
    display: grid;
    grid-template-columns: 38px minmax(0, 1fr) auto;
    gap: 8px 10px;
    align-items: center;
    min-height: 76px;
    padding: 11px;
    border: 1px solid #d5e2dd;
    border-left: 5px solid #138b62;
    border-radius: 14px;
    color: #294b3f;
    background: #fff;
    box-shadow: 0 7px 20px rgba(31, 68, 55, .07);
}

.bnovo-report-card-linked {
    border-left-color: #2d6fc0;
}

.bnovo-report-card-pending {
    border-color: #ebcbc6;
    border-left-color: #c83427;
    background: #fffafa;
}

.bnovo-report-card-known {
    border-left-color: #86978f;
}

.bnovo-report-card-is-cancelled {
    border-left-color: #929b97;
    background: #f8faf9;
}

.bnovo-report-source {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    overflow: hidden;
    border-radius: 10px;
    color: #2c624f;
    background: #eef5f2;
    font-size: 11px;
    font-weight: 900;
}

.bnovo-report-source img {
    width: 24px;
    height: 24px;
    border-radius: 7px;
    object-fit: contain;
}

.bnovo-report-source.source-direct img {
    width: 32px;
    height: 27px;
}

.bnovo-report-main,
.bnovo-report-main strong,
.bnovo-report-main span {
    display: block;
    min-width: 0;
}

.bnovo-report-main strong {
    overflow: hidden;
    font-size: 16px;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bnovo-report-main span {
    margin-top: 2px;
    color: #718079;
    font-size: 13px;
    line-height: 1.35;
}

.bnovo-report-main .bnovo-report-property {
    color: #456a5c;
}

.bnovo-report-amount {
    color: #31594a;
    font-size: 13px;
    font-weight: 800;
    white-space: nowrap;
}

.bnovo-report-reason,
.bnovo-report-identifiers,
.bnovo-report-calendar-link,
.bnovo-report-status,
.bnovo-resolution-form {
    grid-column: 2 / -1;
}

.bnovo-report-status {
    width: fit-content;
    padding: 3px 7px;
    border-radius: 999px;
    font-size: 10px;
    font-weight: 800;
}

.bnovo-report-status.is-active,
.bnovo-candidate-status.is-active {
    color: #176c52;
    background: #e1f3ec;
}

.bnovo-report-status.is-cancelled,
.bnovo-candidate-status.is-cancelled {
    color: #8b3d34;
    background: #f8e4e0;
}

.bnovo-report-reason {
    width: fit-content;
    max-width: 100%;
    padding: 4px 8px;
    border-radius: 7px;
    color: #fff;
    background: #cf3a2e;
    font-size: 11px;
    font-weight: 800;
    line-height: 1.35;
}

.bnovo-report-identifiers {
    color: #84938d;
    font-size: 11px;
    line-height: 1.35;
}

.bnovo-report-calendar-link {
    justify-self: start;
    color: #176c52;
    font-size: 12px;
    font-weight: 800;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.booking-sync-panel .bnovo-resolution-form {
    display: grid;
    gap: 10px;
    width: 100%;
    margin-top: 3px;
    padding-top: 10px;
    border-top: 1px solid #e5d4d0;
}

.bnovo-resolution-form fieldset {
    display: grid;
    gap: 7px;
    min-width: 0;
    margin: 0;
    padding: 0;
    border: 0;
}

.bnovo-resolution-form legend {
    margin-bottom: 6px;
    color: #4d675e;
    font-size: 12px;
    font-weight: 800;
}

.bnovo-candidate {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 9px;
    align-items: start;
    padding: 9px;
    border: 1px solid #d8e3df;
    border-radius: 10px;
    background: #fff;
}

.bnovo-candidate.is-other-bnovo {
    grid-template-columns: minmax(0, 1fr);
    border-color: #e3d0cc;
    background: #fff6f4;
}

.bnovo-candidate input {
    width: 18px;
    height: 18px;
    margin: 2px 0 0;
}

.bnovo-candidate strong,
.bnovo-candidate small {
    display: block;
}

.bnovo-candidate small {
    margin-top: 3px;
    color: #718079;
    font-size: 11px;
    line-height: 1.35;
}

.bnovo-candidate .bnovo-candidate-status {
    width: fit-content;
    padding: 3px 7px;
    border-radius: 7px;
    font-weight: 800;
}

.bnovo-resolution-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.bnovo-resolution-actions button {
    width: auto;
    min-height: 38px;
    padding: 0 13px;
    font-size: 12px;
}

.bnovo-resolution-actions .bnovo-separate-button {
    border: 1px solid #33755f;
    color: #245f4b;
    background: #fff;
    box-shadow: none;
}

.bnovo-resolution-form > small {
    color: #8b554c;
    font-size: 11px;
    line-height: 1.35;
}

/* 2026-09-26: Проблемную квартиру Bnovo можно связать прямо в карточке и сразу повторить обработку брони. */
.bnovo-property-resolution-form label {
    display: grid;
    gap: 6px;
    color: #4d675e;
    font-size: 12px;
    font-weight: 800;
}

.bnovo-property-resolution-form select {
    width: 100%;
    min-height: 42px;
    padding: 8px 34px 8px 11px;
    border: 1px solid #bfcfc9;
    border-radius: 10px;
    color: #214f40;
    background: #fff;
    font: inherit;
}

.bnovo-property-resolution-form button {
    width: fit-content;
    min-height: 40px;
    padding: 0 14px;
    font-size: 12px;
}

/* 2026-09-26: Поиск брони предоставляет администраторам безопасный режим проверки без произвольных SQL-запросов. */
.booking-lookup-panel,
.booking-lookup-result {
    margin-top: 16px;
}

.booking-lookup-form {
    display: grid;
    gap: 7px;
}

.booking-lookup-form label {
    color: #31594a;
    font-size: 13px;
    font-weight: 800;
}

.booking-lookup-form > div {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 9px;
}

.booking-lookup-form input {
    min-width: 0;
}

.booking-lookup-form button {
    width: auto;
    min-width: 120px;
}

.booking-lookup-heading {
    display: flex;
    gap: 18px;
    align-items: flex-start;
    justify-content: space-between;
}

.booking-lookup-heading span {
    color: #718079;
    font-size: 12px;
}

.booking-lookup-heading h2 {
    margin: 3px 0 0;
}

.booking-lookup-status {
    padding: 6px 10px;
    border-radius: 999px;
    font-weight: 800;
}

.booking-lookup-status.is-active {
    color: #176c52;
    background: #e1f3ec;
}

.booking-lookup-status.is-cancelled {
    color: #8b3d34;
    background: #f8e4e0;
}

.booking-lookup-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    margin: 18px 0;
}

.booking-lookup-grid div {
    padding: 10px;
    border: 1px solid #d8e3df;
    border-radius: 11px;
    background: #f9fcfb;
}

.booking-lookup-grid dt {
    margin-bottom: 4px;
    color: #718079;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
}

.booking-lookup-grid dd {
    margin: 0;
    overflow-wrap: anywhere;
    color: #294b3f;
    font-weight: 700;
}

.booking-sync-button {
    width: auto;
    min-width: 245px;
    padding-right: 20px;
    padding-left: 20px;
    white-space: nowrap;
}

.booking-sync-button:disabled {
    cursor: not-allowed;
    opacity: .55;
}

/* 2026-09-28: Загрузка сборки и остановка синхронизации имеют крупные элементы управления на телефоне. */
[data-release-update] [hidden] { display: none !important; }
[data-release-update] form { display: flex; flex-wrap: wrap; align-items: end; gap: 12px; }
[data-release-update] label { display: grid; gap: 8px; min-width: min(100%, 320px); flex: 1; }
[data-release-update] input[type="file"] { width: 100%; min-height: 52px; padding: 10px; font-size: 16px; }
/* 2026-10-03: ZIP можно бросить в заметную область; выбранный файл и ошибка читаются без системного окна выбора. */
[data-release-upload] .release-dropzone { display: flex; flex: 1 1 520px; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-width: min(100%, 320px); min-height: 155px; padding: 20px; border: 2px dashed #8db9a8; border-radius: 14px; background: #f4faf7; color: #275d49; text-align: center; cursor: pointer; transition: border-color .18s ease, background-color .18s ease, box-shadow .18s ease; }
[data-release-upload] .release-dropzone:hover, [data-release-upload] .release-dropzone:focus-visible, [data-release-upload] .release-dropzone.is-drag-over { border-color: #287b5d; background: #e6f5ed; box-shadow: 0 0 0 3px rgba(47, 119, 95, .14); outline: none; }
[data-release-upload] .release-dropzone strong { font-size: 18px; }
[data-release-upload] .release-dropzone input[type="file"] { width: min(100%, 440px); min-height: 38px; padding: 5px; font-size: 14px; }
[data-release-upload] .release-dropzone-name { max-width: 100%; overflow-wrap: anywhere; font-size: 14px; font-weight: 600; }
[data-release-upload] .release-dropzone.has-file { border-style: solid; }
[data-release-upload] .release-dropzone-error { flex-basis: 100%; margin: 0; color: #a1392d; font-weight: 600; }
[data-release-update] button { min-height: 52px; padding: 12px 20px; font-size: 16px; line-height: 1.25; }
[data-release-controls] { display: flex; flex-wrap: wrap; gap: 12px; }
[data-release-waiting] summary { min-height: 52px; padding: 12px 0; font-size: 16px; cursor: pointer; }
[data-release-waiting] form { margin-top: 8px; }
[data-release-progress] strong { font-size: 17px; line-height: 1.4; }
@media (max-width: 640px) {
    [data-release-update] form, [data-release-update] button { width: 100%; }
    [data-release-controls] { display: grid; }
}

/* 2026-09-26: Полная пересборка визуально отделена от обычной синхронизации. */
.booking-rebuild-button {
    border: 1px solid #b8604f;
    background: #fff7f4;
    box-shadow: none;
    color: #934232;
}

.booking-rebuild-button:hover:not(:disabled) {
    background: #fce9e3;
    box-shadow: none;
    transform: none;
}

.booking-rebuild-note {
    max-width: 300px;
    color: #8a625a;
    font-size: 11px;
    line-height: 1.35;
    text-align: center;
}

.booking-sync-unavailable {
    color: #9b4e42;
    text-align: center;
}
/* 2026-10-04: Во время штатного обновления фоновый опрос показывает нейтральное состояние ожидания. */
.booking-sync-unavailable.is-maintenance {
    color: #526e62;
}

/* 2026-09-27: Настройки Авито и ТВИЛ в карточке квартиры управляют только заполнением будущих броней. */
.property-platform-editor { grid-column: 1 / -1; }
.property-platform-editor > p { color: #64776f; }
.property-platform-rates {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
}
.property-platform-rates label {
    display: grid;
    gap: 10px;
    padding: 14px;
    border: 1px solid #d0dfda;
    border-radius: 13px;
    color: #31594a;
    background: #f8fbfa;
    font-weight: 800;
}
.property-platform-rates output { color: #197254; font-size: 18px; }
.property-platform-rates input[type="range"] { width: 100%; accent-color: #2f8064; }
.property-platform-rates button { grid-column: 1 / -1; width: fit-content; }

/* 2026-09-28: Сохранённые номера Bnovo и форма назначения находятся в карточке квартиры. */
.property-bnovo-editor { grid-column: 2; }
.property-bnovo-editor h2 { margin: 0 0 12px; color: #275642; }
.property-bnovo-editor > p { color: #64776f; }
.property-bnovo-links { display: grid; gap: 8px; margin: 0 0 18px; padding: 0; list-style: none; }
.property-bnovo-links li { display: grid; gap: 3px; padding: 12px; border: 1px solid #d0dfda; border-radius: 10px; background: #f8fbfa; }
.property-bnovo-links li span { color: #5c7067; font-size: 13px; }
.property-bnovo-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.property-bnovo-form > label:not(.property-bnovo-replace) { display: grid; gap: 6px; }
.property-bnovo-form .field-wide { grid-column: 1 / -1; }
.property-bnovo-form input:not([type="checkbox"]),
.property-bnovo-form select { width: 100%; min-width: 0; min-height: 42px; padding: 8px 10px; border: 1px solid #bed2ca; border-radius: 9px; background: #fff; font: inherit; }
.property-bnovo-form .property-bnovo-replace { display: flex; gap: 8px; align-items: flex-start; color: #52675c; font-size: 13px; }
.property-bnovo-form .property-bnovo-replace input { width: 18px; height: 18px; margin: 0; flex: 0 0 auto; }
.property-bnovo-form button { width: fit-content; }
@media (max-width: 850px) {
    .property-bnovo-editor { grid-column: 1; }
}

.logout-form {
    margin: 24px 0 0;
}

.logout-form button {
    width: auto;
    padding: 0 22px;
}

@media (max-width: 700px) {
    .dashboard-grid {
        grid-template-columns: 1fr;
    }

    /* 2026-10-05: На телефоне настройка быстрого входа идёт после списка квартир. */
    .dashboard-grid > .pin-access-panel { order: 99; }

    .property-platform-rates { grid-template-columns: 1fr; }
    .property-bnovo-form { grid-template-columns: 1fr; }

    .property-list {
        grid-template-columns: 1fr;
    }

    .preview-banner {
        align-items: stretch;
        flex-direction: column;
    }

    .app-header {
        padding: 10px 16px;
    }

    .header-brand-name {
        font-size: 23px;
    }

    .header-user span {
        display: none;
    }

    .booking-sync-panel {
        align-items: stretch;
        flex-direction: column;
    }

    .booking-sync-panel .bnovo-sync-form {
        max-width: none;
        border-top: 1px solid rgba(24, 108, 83, .18);
        border-left: 0;
        padding-top: 18px;
        padding-left: 0;
    }

    .booking-sync-button {
        width: 100%;
        min-width: 0;
        white-space: normal;
    }

    .bnovo-report-list {
        max-width: none;
    }

    .bnovo-report-card {
        grid-template-columns: 38px minmax(0, 1fr) auto;
    }

    .bnovo-resolution-actions {
        display: grid;
    }

    .bnovo-resolution-actions button {
        width: 100%;
    }

    .booking-lookup-form > div,
    .booking-lookup-grid {
        grid-template-columns: 1fr;
    }

    .booking-lookup-form button {
        width: 100%;
    }

    .user-card-meta,
    .user-card-form {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 520px) {
    .auth-page {
        padding: 14px 10px;
    }

    .auth-card {
        border-radius: 18px;
    }

    .brand-panel {
        gap: 10px;
        padding: 17px 15px;
    }

    .brand-logo {
        width: 78px;
    }

    .brand-description {
        font-size: 10px;
    }

    .auth-content {
        padding: 24px 18px 26px;
    }

    .header-brand img {
        width: 44px;
    }

    .header-brand-name {
        display: none;
    }

    .header-account {
        gap: 8px;
    }

    .header-user strong {
        display: block;
        max-width: 125px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    .header-logout-form button {
        min-height: 34px;
        padding: 0 11px;
    }

    .property-card-main {
        grid-template-columns: 96px minmax(0, 1fr);
        gap: 10px;
    }

    .property-today-arrival {
        grid-template-columns: minmax(0, 1fr);
    }
    .property-today-arrival form,
    .property-check-in-button { width: 100%; }

    .property-photo {
        width: 96px;
        height: 82px;
    }

    .property-photo-link {
        width: 96px;
    }

    .property-image-form {
        grid-column: 1 / -1;
    }

    .property-payment-options {
        grid-template-columns: 1fr;
    }
}
/* 2026-09-28: Крупный индикатор стадии импорта Bnovo остаётся читаемым на телефоне. */
.bnovo-import-state { display: grid; gap: 4px; width: 100%; padding: 12px 14px; border: 1px solid #bfd8cd; border-radius: 12px; background: #f2f8f5; color: #16483d; font: 15px/1.4 Arial, sans-serif; }
.bnovo-import-state strong { font-size: 16px; }
.bnovo-import-state small { font-size: 14px; }
.bnovo-import-state [hidden] { display: none; }
/* 2026-09-28: Контрастная шкала показывает долю проверенных дат во всём полугодии. */
.bnovo-progress { display: grid; gap: 8px; width: 100%; padding: 12px 0; font: 600 16px Arial, sans-serif; color: #16483d; }
.bnovo-progress-track { position: relative; height: 24px; width: 100%; background: #cadbd2; border: 1px solid #5e987f; border-radius: 999px; overflow: hidden; }
.bnovo-progress-fill { width: 0; height: 100%; background: #13704f; transition: width .35s ease; }
.bnovo-auto-progress { padding-top: 2px; }
.bnovo-progress-track[data-loading="true"]::after { content: ""; position: absolute; inset: 0 auto 0 0; width: 30%; background: rgba(255,255,255,.68); animation: bnovo-progress-wait 1.4s linear infinite; }
@keyframes bnovo-progress-wait { from { transform: translateX(-110%); } to { transform: translateX(340%); } }
.bnovo-automation-form { display: grid; gap: 8px; border-top: 1px solid #ccdcd5; padding-top: 18px; }
.bnovo-automation-form p { margin: 0; font-size: 15px; }
/* 2026-09-28: Состояние фонового импорта и ошибка видны под переключателем без поиска в журналах сервера. */
.bnovo-automation-status { display: grid; gap: 5px; font-size: 14px; line-height: 1.4; color: #244d3e; overflow-wrap: anywhere; }
.bnovo-automation-status strong { font-size: 15px; }
/* 2026-09-29: Детали брони в корзине читаются на телефоне без горизонтальной прокрутки. */
.booking-trash-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.booking-trash-actions .small-button { display: inline-flex; align-items: center; text-decoration: none; }
.trash-detail-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.trash-detail-grid > div { min-width: 0; padding: 12px; border: 1px solid #d8e7df; border-radius: 11px; background: #f8fbf9; overflow-wrap: anywhere; }
.trash-detail-grid small, .trash-detail-grid strong { display: block; }
.trash-detail-grid small { margin-bottom: 5px; color: #63776b; }
@media (max-width: 640px) { .trash-detail-grid { grid-template-columns: 1fr; } }

/* 2026-10-02: Рабочий список квартир — компактные строки; сегодняшний заезд остаётся заметным отдельным блоком. */
.property-list-heading { display:flex; align-items:center; justify-content:space-between; gap:14px; }
.property-list-heading span { display:block; margin-bottom:3px; color:#529279; font-size:11px; font-weight:800; letter-spacing:.12em; }
.property-list-heading h2 { margin:0; font-size:25px; }
.property-list-heading > strong { flex:none; padding:8px 12px; border-radius:999px; color:#25634c; background:#e9f5ee; font-size:13px; }
.property-list { grid-template-columns:1fr; gap:9px; margin-top:19px; }
.property-list li.property-card { position:relative; display:grid; grid-template-columns:1fr; align-items:center; gap:18px; min-height:110px; padding:16px 20px; border:1px solid #d9e7df; border-radius:17px; background:#fff; box-shadow:0 3px 14px rgba(25,70,49,.04); }
.property-list li.property-card.has-today-arrivals { grid-template-columns:minmax(0,1fr) minmax(310px,43%); }
.property-card .property-id-corner { position:absolute; top:10px; right:16px; margin:0; color:#789388!important; font-size:11px!important; font-weight:600; }
.property-card .property-card-main { grid-template-columns:92px minmax(0,1fr); gap:17px; align-items:center; }
.property-card .property-photo,.property-card .property-photo-link { width:92px; height:80px; border-radius:12px; }
.property-card .property-photo { display:block; }
.property-card .property-card-content > strong { font-size:18px; line-height:1.25; }
.property-card .property-card-content > span { max-width:680px; margin-top:3px; font-size:13px; line-height:1.35; }
.property-card .property-card-actions { margin-top:8px; }
.property-card .property-calendar-link { min-height:34px; margin:0; padding:5px 9px; border:1px solid #c5d9ce; border-radius:8px; color:#27674e; background:#f7fbf8; font-size:12px; font-weight:700; }
.property-card .property-calendar-link span { display:inline; margin:0 0 0 4px; color:inherit; font-size:13px; }
.property-card .property-calendar-link:hover,.property-card .property-calendar-link:focus-visible { border-color:#4b9c80; color:#1c5d43; background:#e8f5ed; outline:none; }
/* 2026-10-05: На карточке квартиры виден сегодняшний заезд, текущее проживание или отсутствие гостей. */
.property-card .property-occupancy-status { display:inline-flex; width:fit-content; margin-top:9px; padding:5px 9px; border-radius:8px; font-size:12px; font-weight:700; line-height:1.25; }
.property-card .property-occupancy-status.is-arrival { color:#86520f; background:#ffedc4; }
.property-card .property-occupancy-status.is-occupied { color:#196b50; background:#e4f4eb; }
.property-card .property-occupancy-status.is-free { color:#526d61; background:#eef4f0; }
.property-card .property-today-arrivals { align-self:stretch; margin:0; padding:0 0 0 17px; border-top:0; border-left:1px solid #deebe3; }
.property-card .property-today-arrival { grid-template-columns:minmax(0,1fr) auto; gap:12px; align-items:center; }
.property-card .property-today-arrival-copy { gap:4px; font-size:13px; }
.property-card .property-arrival-guest { margin:0; font-size:13px!important; }
.property-card .property-arrival-total { width:fit-content; padding:5px 8px; font-size:14px; }
.property-card .property-arrival-breakdown { gap:2px 10px; }
.property-card .property-arrival-breakdown > span { margin:0; font-size:12px!important; }
.property-card .property-check-in-button,.property-card .property-check-in-done { min-height:44px; width:auto; padding:8px 12px; font-size:13px!important; white-space:normal; }
@media(max-width:940px) { .property-list li.property-card.has-today-arrivals { grid-template-columns:1fr; } .property-card .property-today-arrivals { padding:13px 0 0; border-left:0; border-top:1px solid #deebe3; } }
@media(max-width:560px) { .property-list li.property-card { padding:14px; } .property-card .property-card-main { grid-template-columns:74px minmax(0,1fr); gap:11px; } .property-card .property-photo,.property-card .property-photo-link { width:74px; height:72px; } .property-card .property-id-corner { position:static; order:2; text-align:right; } .property-card .property-today-arrival { grid-template-columns:1fr; } .property-card .property-today-arrival form,.property-card .property-check-in-button { width:100%; } }
/* 2026-10-03: Галерея квартиры показывает миниатюры, их порядок и быстрые действия без длинной прокрутки страницы. */
.slider-admin-panel { margin: 18px 0; padding: 22px; }
.slider-admin-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; margin-bottom: 16px; }
.slider-admin-heading h2 { margin: 0 0 6px; color: #164b3e; }
.slider-admin-heading p { margin: 0; color: #5d756c; }
.slider-admin-heading .slider-import-link { display: inline-flex; flex: none; align-items: center; justify-content: center; min-height: 46px; padding: 10px 17px; color: #fff; font-size: 14px; font-weight: 600; text-decoration: none; white-space: nowrap; }
.slider-admin-heading .slider-import-link:hover, .slider-admin-heading .slider-import-link:focus-visible { color: #fff; text-decoration: none; }
.slider-admin-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(145px, 1fr)); gap: 12px; padding: 0; margin: 0 0 18px; list-style: none; }
.slider-admin-list li { min-width: 0; padding: 8px; border: 1px solid #d4e5dd; border-radius: 12px; background: #f9fcfa; }
/* 2026-10-04: При перетаскивании карточка фото выделяется, а мобильная страница скроллится до долгого нажатия. */
.slider-admin-drag-help { margin:0 0 12px; color:#547568; font-size:14px; }
.slider-admin-list li { cursor:grab; user-select:none; -webkit-user-select:none; transition:transform .14s ease,box-shadow .14s ease,opacity .14s ease; }
.slider-admin-list li.is-dragging { cursor:grabbing; opacity:.62; border-color:#257b5e; box-shadow:0 8px 18px #15584138; transform:scale(.97); }
.slider-admin-list.is-reordering { touch-action:none; }
.slider-admin-list img { -webkit-user-drag:none; }
.slider-admin-actions button { cursor:pointer; }
.slider-admin-list img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 7px; }
.slider-admin-list span { display: block; padding: 7px 2px 4px; font-size: 13px; font-weight: 700; }
.slider-admin-list small { color: #647e73; font-weight: 400; }
.slider-admin-actions { display: flex; gap: 4px; }
.slider-admin-actions button { min-height: 32px; padding: 4px 7px; border: 1px solid #c9dfd4; border-radius: 7px; background: white; color: #185848; cursor: pointer; }
.slider-admin-actions button:last-child { margin-left: auto; color: #a23d30; }
.slider-admin-actions button:disabled { opacity: .4; cursor: default; }
.slider-admin-upload { display: flex; align-items: end; flex-wrap: wrap; gap: 12px; }
.slider-admin-upload label { display: grid; gap: 6px; color: #31564b; font-weight: 600; }
.slider-admin-empty { color: #61766d; }
.slider-admin-panel.is-busy { opacity: .65; pointer-events: none; }
@media (max-width: 680px) { .slider-admin-heading { display: block; } .slider-admin-heading .slider-import-link { margin-top: 12px; white-space: normal; } }
.slider-import-list { display: grid; gap: 7px; margin: 18px 0 40px; }
.slider-import-row { display: grid; grid-template-columns: minmax(180px, 1fr) auto minmax(150px, auto); align-items: center; gap: 14px; padding: 11px 15px; border: 1px solid #d5e6df; border-radius: 10px; background: #fff; }
.slider-import-row.is-done { background: #e9f7ef; }
.slider-import-row [data-import-status] { text-align: right; color: #487263; }
@media (max-width: 680px) { .slider-import-row { grid-template-columns: 1fr; gap: 4px; } .slider-import-row [data-import-status] { text-align: left; } }
/* 2026-10-05: Восстановление истёкшего счёта видно рядом с его действиями и не ломает строки на телефоне. */
.site-invoice-restore-form{display:inline-flex;margin:0}
.site-invoice-restore-form button{min-height:36px;padding:7px 12px;border:1px solid #a7c6b8;border-radius:8px;background:#f4faf7;color:#17634e;font:inherit;font-weight:700;cursor:pointer}
.site-invoice-restore-form button:hover{background:#e7f3eb}
/* 2026-10-08: Аннулирование активного счёта видно рядом с просмотром и календарём. */
.site-invoice-annul-form{display:inline-flex;margin:0}
.site-invoice-annul-form button{min-height:36px;padding:7px 12px;border:1px solid #b36c60;border-radius:8px;background:#fff5f1;color:#9b4235;font:inherit;font-weight:700;cursor:pointer}
.site-invoice-annul-form button:hover{background:#ffe9e1}
.site-invoice-flash{padding:12px 16px;border:1px solid #b6d7c7;border-radius:10px;background:#f2faf5;color:#145842}
.site-invoice-flash-error{border-color:#e4b4ac;background:#fff5f1;color:#a63725}
/* 2026-10-17: Компактная диагностика не перекрывает PIN; длинные технические признаки переносятся на телефоне. */
.auth-login-diagnostic{margin-top:22px;border-top:1px solid #d6e5df;padding-top:14px;color:#4c6c60;font-size:13px;line-height:1.5}
.auth-login-diagnostic summary{cursor:pointer;font-weight:600}
.auth-login-diagnostic p{overflow-wrap:anywhere;margin:10px 0}
.auth-log-event{padding:12px 0;border-bottom:1px solid #d6e5df;overflow-wrap:anywhere}
.auth-log-event summary{cursor:pointer;line-height:1.5}
.auth-log-context{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px}
