:root{--bg:#f6f6f7;--surface:#fff;--surface-2:#f4f4f5;--text:#18181b;--muted:#6b6b76;--subtle:#a1a1aa;--border:#e7e7ea;--border-strong:#d6d6db;--accent:#6d28d9;--accent-hover:#5b21b6;--accent-text:#6d28d9;--accent-soft:#f3effe;--on-accent:#fff;--ok:#15803d;--ok-soft:#e8f6ec;--warn:#a15c07;--warn-soft:#fdf3e1;--danger:#d92d20;--danger-soft:#fdeceb;--shadow-sm:0 1px 2px rgb(24 24 27/.05);--shadow-lg:0 24px 60px -16px rgb(24 24 27/.3);--radius:14px;--radius-sm:10px;color-scheme:light}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0c0c0f;--surface:#151518;--surface-2:#1c1c21;--text:#f4f4f5;--muted:#a1a1aa;--subtle:#71717a;--border:#26262b;--border-strong:#34343b;--accent:#7c3aed;--accent-hover:#6d28d9;--accent-text:#c4b5fd;--accent-soft:#221b33;--on-accent:#fff;--ok:#6ee7a0;--ok-soft:#0f2a1b;--warn:#fbbf24;--warn-soft:#2b2108;--danger:#f97066;--danger-soft:#2c1514;--shadow-sm:none;--shadow-lg:0 24px 60px -16px rgb(0 0 0/.7);color-scheme:dark}}
:root[data-theme=dark]{--bg:#0c0c0f;--surface:#151518;--surface-2:#1c1c21;--text:#f4f4f5;--muted:#a1a1aa;--subtle:#71717a;--border:#26262b;--border-strong:#34343b;--accent:#7c3aed;--accent-hover:#6d28d9;--accent-text:#c4b5fd;--accent-soft:#221b33;--on-accent:#fff;--ok:#6ee7a0;--ok-soft:#0f2a1b;--warn:#fbbf24;--warn-soft:#2b2108;--danger:#f97066;--danger-soft:#2c1514;--shadow-sm:none;--shadow-lg:0 24px 60px -16px rgb(0 0 0/.7);color-scheme:dark}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 Inter,system-ui,-apple-system,"Segoe UI",sans-serif;font-feature-settings:"cv11","ss01";-webkit-font-smoothing:antialiased;display:grid;grid-template-columns:228px minmax(0,1fr);min-height:100vh}
button,input,select{font:inherit;color:inherit}
svg{width:18px;height:18px;flex:none}
a{color:var(--accent-text)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.muted{color:var(--muted)}
.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}

/* Боковая панель */
.sidebar{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:2px;padding:16px 12px;background:var(--surface);border-right:1px solid var(--border)}
.brand{display:flex;align-items:center;gap:10px;padding:4px 8px 18px;font-weight:700;font-size:15px;letter-spacing:-.01em}
.brand-mark{width:30px;height:30px;border-radius:9px;background:var(--accent);color:#fff;display:grid;place-items:center}
.brand-mark svg{width:17px;height:17px}
.nav{display:grid;gap:2px}
.nav-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:0;border-radius:9px;background:none;color:var(--muted);font-weight:500;text-decoration:none;text-align:left;cursor:pointer;white-space:nowrap}
.nav-item:hover{background:var(--surface-2);color:var(--text)}
.nav-item.active{background:var(--accent-soft);color:var(--accent-text)}
.sidebar-foot{margin-top:auto;display:grid;gap:2px;padding-top:10px;border-top:1px solid var(--border)}

/* Основная часть */
main{padding:20px 28px 28px;min-width:0;width:100%;max-width:1720px}
.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px 20px;flex-wrap:wrap;margin-bottom:16px}
.eyebrow{font-size:12px;font-weight:500;color:var(--muted)}
h1{margin:2px 0 0;font-size:24px;line-height:1.2;font-weight:650;letter-spacing:-.02em}
.sub{margin:3px 0 0;color:var(--muted);font-size:13px}
.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.toolbar form{display:contents}

/* Кнопки и поля */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:36px;padding:0 14px;border:1px solid transparent;border-radius:var(--radius-sm);font-size:13px;font-weight:600;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background .15s,border-color .15s,color .15s}
.btn svg{width:16px;height:16px}
.btn.primary{background:var(--accent);color:var(--on-accent)}
.btn.primary:hover{background:var(--accent-hover)}
.btn.secondary{background:var(--surface);color:var(--text);border-color:var(--border-strong)}
.btn.secondary:hover{background:var(--surface-2)}
.btn.ghost{background:transparent;color:var(--accent-text)}
.btn.ghost:hover{background:var(--accent-soft)}
.btn.danger{background:transparent;color:var(--danger);border-color:var(--border-strong)}
.btn.danger:hover{background:var(--danger-soft);border-color:transparent}
.btn.sm{height:30px;padding:0 10px;font-size:12px}
.btn.block{width:100%}
.icon-btn{display:inline-grid;place-items:center;width:36px;height:36px;padding:0;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);cursor:pointer;text-decoration:none}
.icon-btn:hover{background:var(--surface-2)}
.icon-btn svg{width:16px;height:16px}
.icon-btn.quiet{width:30px;height:30px;border-color:transparent;background:transparent;color:var(--muted)}
.icon-btn.quiet:hover{background:var(--surface-2);color:var(--text)}
input,select{height:36px;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);font-size:13px;min-width:0}
input:hover,select:hover{border-color:var(--subtle)}
input:focus,select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--accent) 22%,transparent)}
input[type=date]{cursor:pointer}
input[type=checkbox]{width:16px;height:16px;margin:0;padding:0;accent-color:var(--accent);box-shadow:none}
.month-nav{display:flex;align-items:center;gap:4px}
.month-nav select{font-weight:600;min-width:148px}
.field{display:grid;gap:5px;font-size:12px;font-weight:500;color:var(--muted)}
.field input,.field select{width:100%;font-weight:400;color:var(--text)}
.check{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}

/* Показатели */
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.kpi{padding:13px 16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);min-width:0}
.kpi-label{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;font-weight:500;color:var(--muted)}
.kpi-value{margin-top:4px;font-size:22px;font-weight:650;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi-note{margin-top:1px;font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi.accent{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.kpi.accent .kpi-label,.kpi.accent .kpi-note{color:rgb(255 255 255/.78)}
.kpi.accent .badge{background:rgb(255 255 255/.16);color:#fff}

/* Карточки и таблицы */
.report-grid{display:grid;grid-template-columns:minmax(0,1fr) 336px;gap:16px;align-items:start}
.col{display:grid;gap:16px;min-width:0}
.split{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);min-width:0;overflow:hidden}
.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;min-height:50px;padding:8px 10px 8px 16px;border-bottom:1px solid var(--border)}
.card-head h2{margin:0;font-size:14px;font-weight:650}
.card-head p{margin:0;font-size:12px;color:var(--muted)}
.table-wrap{position:relative;overflow:auto}
table{width:100%;border-collapse:collapse}
th{padding:7px 16px;background:var(--surface-2);color:var(--muted);font-size:12px;font-weight:500;text-align:left;white-space:nowrap}
td{padding:8px 16px;border-top:1px solid var(--border);font-size:13px;vertical-align:middle}
tbody tr:first-child td{border-top:0}
tbody tr:hover td{background:color-mix(in oklab,var(--surface-2) 60%,transparent)}
th.num{text-align:right}
td.dates{white-space:nowrap}
td.act{width:1%;padding:4px 10px 4px 0;text-align:right}
td a{color:inherit;text-decoration-color:var(--border-strong);text-underline-offset:3px}
td a:hover{color:var(--accent-text)}
tfoot td{background:var(--surface-2);font-weight:650;border-top:1px solid var(--border)}
.cell-sub{display:block;font-size:12px;color:var(--muted)}
.list-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:7px 10px 7px 16px;border-top:1px solid var(--border)}
.list-row:first-child{border-top:0}
.list-row .amount{margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.list-row small{display:block;font-size:12px;color:var(--muted)}
.empty{padding:12px 16px;color:var(--muted);font-size:13px}
td.empty{padding:12px 16px}

/* Расчёт */
.calc dl{margin:0;padding:8px 16px}
.calc dl>div{display:flex;justify-content:space-between;gap:12px;padding:5px 0;font-size:13px}
.calc dt{color:var(--muted)}
.calc dd{margin:0;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.calc .divider{margin:3px 0;border-top:1px dashed var(--border-strong)}
.calc .strong dt{color:var(--text);font-weight:600}
.calc-section{display:grid;gap:10px;padding:12px 16px;border-top:1px solid var(--border)}
.calc .adj-list{border-top:1px solid var(--border)}
.calc .adj-list .list-row{padding:5px 10px 5px 16px}
.due{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:11px 14px;border-radius:var(--radius-sm);background:var(--accent-soft);color:var(--accent-text)}
.due span{font-size:13px;font-weight:600}
.due b{font-size:20px;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap}

/* Метки */
.badge{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:99px;background:var(--surface-2);color:var(--muted);font-size:11.5px;font-weight:600;white-space:nowrap}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.85}
.badge.ok,.badge.booked{background:var(--ok-soft);color:var(--ok)}
.badge.wait,.badge.request{background:var(--accent-soft);color:var(--accent-text)}
.badge.todo,.badge.over{background:var(--warn-soft);color:var(--warn)}
.badge.canceled{background:var(--danger-soft);color:var(--danger)}
.chip{display:inline-flex;align-items:center;gap:6px}
.chip b{letter-spacing:.14em;font-variant-numeric:tabular-nums}

/* Диалоги */
dialog{width:min(460px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:0;border:0;border-radius:16px;background:var(--surface);color:var(--text);box-shadow:var(--shadow-lg)}
dialog::backdrop{background:rgb(9 9 11/.45);backdrop-filter:blur(2px)}
dialog[open]{animation:pop .16s ease-out}
@keyframes pop{from{opacity:0;transform:translateY(6px) scale(.985)}}
.sheet{display:flex;flex-direction:column;max-height:inherit}
.sheet-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:16px 14px 4px 20px}
.sheet-head h2{margin:0;font-size:16px;font-weight:650}
.sheet-head p{margin:2px 0 0;font-size:12px;color:var(--muted)}
.sheet-body{display:grid;gap:12px;padding:12px 20px;overflow:auto}
.sheet-foot{display:flex;gap:8px;justify-content:flex-end;padding:12px 20px 18px}
.sheet-foot .push{margin-right:auto}
.sheet-section{border-top:1px solid var(--border)}
.sheet-section .list-row{padding:8px 20px}
.section-label{margin:14px 20px 4px;font-size:12px;font-weight:600;color:var(--muted)}
.hint{padding:8px 10px;border-radius:8px;background:var(--accent-soft);color:var(--accent-text);font-size:12px;line-height:1.45}
.hint:empty{display:none}
.code-box{padding:14px;border-radius:12px;background:var(--surface-2);text-align:center;color:var(--muted);font-size:12px}
.code-box b{display:block;margin-top:2px;color:var(--text);font-size:28px;letter-spacing:.24em;font-variant-numeric:tabular-nums}

/* Плашка о несохранённой форме */
.banner{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px;padding:10px 12px 10px 16px;border-radius:var(--radius-sm);background:var(--warn-soft);color:var(--warn);font-size:13px}
.banner[hidden]{display:none}
.banner span{flex:1;min-width:220px}

/* Вход и страница ошибки */
.login{display:grid;place-items:center;grid-template-columns:1fr;padding:16px}
.login form{display:grid;gap:12px;width:min(360px,100%);padding:32px 28px;background:var(--surface);border:1px solid var(--border);border-radius:18px;box-shadow:var(--shadow-lg);text-align:center}
.login h1{font-size:22px}
.login p{margin:0;color:var(--muted)}
.login input{width:100%;height:40px}
.login button{height:40px;border:0;border-radius:var(--radius-sm);background:var(--accent);color:var(--on-accent);font-weight:600;cursor:pointer}
.login small{color:var(--danger)}
.login .mark{margin:0 auto 4px;width:44px;height:44px;border-radius:12px;background:var(--accent);color:#fff;display:grid;place-items:center;font-size:22px}

/* Адаптивность */
@media(max-width:1200px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.report-grid{grid-template-columns:minmax(0,1fr) 300px}.split{grid-template-columns:1fr}}
@media(max-width:980px){body{grid-template-columns:64px minmax(0,1fr)}
.sidebar{padding:16px 10px;align-items:center}
.brand{padding:4px 0 18px}
.brand .label,.nav-item .label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.nav-item{justify-content:center;padding:9px}
.report-grid{grid-template-columns:1fr}}
@media(max-width:640px){body{display:block}
.sidebar{position:sticky;z-index:5;height:auto;flex-direction:row;align-items:center;gap:2px;padding:8px 10px;border-right:0;border-bottom:1px solid var(--border);overflow-x:auto}
.brand{padding:0 6px 0 0}
.nav{display:flex}
.sidebar-foot{display:flex;margin:0 0 0 auto;padding:0;border:0}
main{padding:16px}
.page-head{display:grid}
.kpis{gap:8px}
.kpi{padding:11px 12px}
.kpi-value{font-size:18px}
.split{grid-template-columns:1fr}}

/* Пакетный ввод и быстрое добавление */
.grid-3{display:grid;grid-template-columns:1fr 88px 1fr;gap:12px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.sheet-foot .before{order:-1}
.kbd-hint{order:-2;white-space:nowrap;font-size:11.5px;color:var(--subtle);align-self:center}
dialog.wide{width:min(820px,calc(100vw - 32px))}
textarea{width:100%;min-height:150px;padding:10px 12px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font:13px/1.55 ui-monospace,SFMono-Regular,Consolas,monospace;resize:vertical}
textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--accent) 22%,transparent)}
.help{margin:0;font-size:12px;line-height:1.5;color:var(--muted)}
.help code{padding:1px 5px;border-radius:5px;background:var(--surface-2);color:var(--text);font-size:11.5px}
.preview{border:1px solid var(--border);border-radius:var(--radius-sm);max-height:260px;overflow:auto}
.preview:empty{display:none}
.preview table{width:100%;border-collapse:collapse;font-size:12.5px}
.preview td{padding:6px 10px;border-top:1px solid var(--border);vertical-align:top}
.preview tr:first-child td{border-top:0}
.preview td.ln{width:28px;color:var(--subtle);font-variant-numeric:tabular-nums}
.preview td.kd{width:96px;white-space:nowrap}
.preview tr.err{background:var(--danger-soft)}
.preview tr.err .why{display:block;color:var(--danger);font-weight:600}
.preview tr.skip{color:var(--subtle)}
.voice-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.voice-live{flex:1;min-width:200px;font-size:12.5px;color:var(--muted)}
#voice-btn.rec{color:var(--danger);border-color:var(--danger);background:var(--danger-soft)}
#voice-btn.rec svg{animation:pulse 1.2s ease-in-out infinite}
@keyframes pulse{50%{opacity:.35}}
@media(prefers-reduced-motion:reduce){#voice-btn.rec svg{animation:none}}
.batch-status{margin-right:auto;align-self:center;font-size:12.5px;color:var(--muted)}
.batch-status.bad{color:var(--danger);font-weight:600}
.toast{position:fixed;left:50%;bottom:24px;z-index:50;transform:translateX(-50%);display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:99px;background:var(--text);color:var(--bg);font-size:13px;font-weight:500;box-shadow:var(--shadow-lg);transition:opacity .3s,transform .3s}
.toast.hide{opacity:0;transform:translate(-50%,8px);pointer-events:none}
.copy-empty{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
@media(max-width:640px){.grid-3{grid-template-columns:1fr 1fr}.grid-3 .nights{grid-column:1/-1;order:3}.kbd-hint{display:none}.preview td.kd{width:1%}.preview td{padding:6px 8px}}
.title-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lock-chip{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border:1px solid var(--border-strong);border-radius:99px;background:var(--surface);color:var(--muted);font:inherit;font-size:12px;cursor:pointer}
.lock-chip:hover{color:var(--text);border-color:var(--subtle)}
.lock-chip svg{width:14px;height:14px}
.lock-chip b{color:var(--text);font-weight:650;letter-spacing:.14em;font-variant-numeric:tabular-nums}

/* Импорт из RealtyCalendar */
.import-upload{max-width:720px}
.steps{margin:0;padding-left:20px;display:grid;gap:6px;font-size:13px;color:var(--muted)}
.steps b{color:var(--text);font-weight:600}
.banner.bad{background:var(--danger-soft);color:var(--danger);font-weight:600}
.map-table td{vertical-align:top}
.map-table select{min-width:240px}
.new-obj{display:grid;grid-template-columns:2fr 2fr 1fr 1fr;gap:8px;margin-top:8px;max-width:640px}
.rc-card{margin-top:16px;margin-bottom:84px}
.rc-table{font-size:12.5px}
.rc-table td{padding:5px 4px;vertical-align:middle}
.rc-table input,.rc-table select{height:30px;padding:0 7px;font-size:12.5px}
.rc-table input[type=date]{width:110px;padding:0 4px}
.rc-table .w-src{width:82px}.rc-table .w-num{width:76px;text-align:right}.rc-table .w-clean{width:62px;text-align:right}.rc-table .w-comment{width:100%;min-width:80px}
.rc-table td.clean{white-space:nowrap}.rc-table td.clean input[type=checkbox]{margin-right:6px;vertical-align:middle}
.rc-table td.ln{color:var(--subtle);font-variant-numeric:tabular-nums}
.rc-table td.obj{white-space:nowrap;max-width:110px;overflow:hidden;text-overflow:ellipsis}
.rc-table td.net{font-weight:600;white-space:nowrap}
.rc-table tr.sub td{padding-top:0;border-top:0}.rc-table td.note{padding:0 4px 7px;color:var(--muted);font-size:12px;line-height:1.4}
.rc-table tbody tr:not(.sub){border-top:1px solid var(--border)}.rc-table tbody td{border-top:0}
.rc-table .act{width:122px;font-weight:600}
.rc-table .badge{margin-top:3px}
.badge.deleted{background:var(--danger-soft);color:var(--danger)}
.rc-table tr.act-skip td:not(:nth-child(2)){opacity:.5}
.rc-table tr.act-new .act{color:var(--ok)}.rc-table tr.act-update .act,.rc-table tr.act-replace .act{color:var(--accent-text)}.rc-table tr.act-cancel .act,.rc-table tr.act-delete .act{color:var(--danger)}
.rc-table tr.err{background:var(--danger-soft)}.rc-table tr.err td{opacity:1!important}
.rc-table .why{color:var(--danger);margin-right:8px}
.hide-skip tr.act-skip:not(.err){display:none}
.apply-bar{position:fixed;left:228px;right:0;bottom:0;z-index:20;display:flex;align-items:center;gap:8px;padding:12px 24px;background:color-mix(in oklab,var(--surface) 92%,transparent);backdrop-filter:blur(8px);border-top:1px solid var(--border)}
.apply-stats{display:flex;flex-wrap:wrap;gap:6px;margin-right:auto}
.pill{padding:3px 10px;border-radius:99px;background:var(--surface-2);font-size:12px;font-weight:600;color:var(--muted)}
.pill.act-new{background:var(--ok-soft);color:var(--ok)}.pill.act-update,.pill.act-replace{background:var(--accent-soft);color:var(--accent-text)}.pill.act-cancel,.pill.act-delete,.pill.bad{background:var(--danger-soft);color:var(--danger)}
@media(max-width:980px){.apply-bar{left:64px}}
@media(max-width:640px){.apply-bar{left:0;padding:10px 16px}.new-obj{grid-template-columns:1fr 1fr}.map-table select{min-width:0;width:100%}}

/* Тестовый экземпляр */
.test-strip{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-4px 0 14px;padding:8px 14px;border-radius:var(--radius-sm);background:repeating-linear-gradient(-45deg,var(--warn-soft),var(--warn-soft) 12px,transparent 12px,transparent 24px),var(--warn-soft);border:1px dashed var(--warn);color:var(--warn);font-size:12.5px}
.test-strip b{text-transform:uppercase;letter-spacing:.06em}
.test-tag{display:inline-block;padding:1px 8px;border-radius:99px;background:var(--warn-soft);color:var(--warn);font-size:12px}
