/* UytHome Сметы — дизайн-система админ-панели */
:root{
  --bg:#f6f7f9; --card:#ffffff; --line:#e8ebf0; --line2:#f0f2f6;
  --text:#151a23; --muted:#69748c; --faint:#98a1b3;
  --accent:#f97a1f; --accent-h:#e56a10; --accent-soft:#fff3e8;
  --green:#1e9e6a; --green-soft:#e7f6ef;
  --red:#d64540; --red-soft:#fdeeed;
  --blue:#3468d1; --blue-soft:#edf2fc;
  --yellow:#b7791f; --yellow-soft:#fdf5e3;
  --radius:12px; --radius-s:8px;
  --shadow:0 1px 2px rgba(21,26,35,.05), 0 4px 16px rgba(21,26,35,.06);
  --shadow-pop:0 8px 40px rgba(21,26,35,.16);
  --font:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer}
input,select,textarea{font:inherit;color:inherit}
h1,h2,h3{margin:0;letter-spacing:-.02em}
h1{font-size:22px;font-weight:700}
h2{font-size:17px;font-weight:700}
h3{font-size:14px;font-weight:600}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--muted)}
.faint{color:var(--faint)}
.small{font-size:12.5px}
.nowrap{white-space:nowrap}
.right{text-align:right}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}

/* ---------- Каркас ---------- */
.topbar{position:sticky;top:0;z-index:60;background:rgba(255,255,255,.92);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.topbar-in{max-width:1440px;margin:0 auto;padding:0 20px;display:flex;align-items:center;gap:20px;min-height:54px}
.brand{display:flex;align-items:baseline;gap:8px;font-weight:800;font-size:15px;letter-spacing:-.02em}
.brand b{color:var(--accent)}
.brand span{font-weight:600;font-size:11px;color:var(--faint);letter-spacing:.08em;text-transform:uppercase}
.nav{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;flex:1}
.nav::-webkit-scrollbar{display:none}
.nav a{padding:7px 12px;border-radius:9px;color:var(--muted);font-weight:600;font-size:13.5px;white-space:nowrap;transition:.15s}
.nav a:hover{color:var(--text);background:var(--line2)}
.nav a.on{color:var(--accent);background:var(--accent-soft)}
.topbar .out{color:var(--faint);font-size:13px;padding:6px 10px;border-radius:8px}
.topbar .out:hover{color:var(--red);background:var(--red-soft)}
.wrap{max-width:1440px;margin:0 auto;padding:22px 20px 80px}
.wrap.narrow{max-width:960px}
.pagehead{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:18px}
.pagehead .grow{flex:1}

/* ---------- Кнопки ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;
  min-height:36px;padding:0 14px;border-radius:10px;border:1px solid transparent;
  font-weight:600;font-size:13.5px;transition:.15s;user-select:none;text-decoration:none;color:var(--text)}
.btn:active{transform:translateY(1px)}
.btn.primary{background:var(--accent);color:#fff;box-shadow:0 2px 10px rgba(249,122,31,.25)}
.btn.primary:hover{background:var(--accent-h)}
.btn.ghost{border-color:var(--line);background:var(--card)}
.btn.ghost:hover{border-color:#d4dae3;background:#fbfcfd}
.btn.soft{background:var(--line2)}
.btn.soft:hover{background:#e8ebf1}
.btn.danger{color:var(--red)}
.btn.danger:hover{background:var(--red-soft)}
.btn.sm{min-height:29px;padding:0 10px;font-size:12.5px;border-radius:8px}
.btn.lg{min-height:44px;padding:0 22px;font-size:15px;border-radius:12px}
.btn.icon{padding:0;width:32px;min-height:32px;color:var(--muted);border-radius:8px}
.btn.icon:hover{background:var(--line2);color:var(--text)}
.btn[disabled]{opacity:.5;pointer-events:none}

/* ---------- Формы ---------- */
.input,.select,textarea.input{width:100%;min-height:36px;padding:7px 11px;border-radius:10px;
  border:1px solid var(--line);background:var(--card);transition:.15s;font-size:13.5px}
.input:focus,.select:focus,textarea.input:focus{outline:none;border-color:var(--accent);
  box-shadow:0 0 0 3px rgba(249,122,31,.13)}
.input::placeholder{color:var(--faint)}
textarea.input{resize:vertical;line-height:1.45}
.select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2369748c' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center;padding-right:30px}
.field{display:flex;flex-direction:column;gap:5px}
.field label{font-size:12px;font-weight:600;color:var(--muted)}
.fields{display:grid;gap:12px}
.fields.c2{grid-template-columns:1fr 1fr}
.fields.c3{grid-template-columns:1fr 1fr 1fr}
.check{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13.5px}
.check input{accent-color:var(--accent);width:15px;height:15px}

/* ---------- Карточки и таблицы ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.card-pad{padding:18px}
.card-head{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line2)}
.card-head .grow{flex:1}
.table{width:100%;border-collapse:collapse;font-size:13.5px}
.table th{font-size:11.5px;font-weight:600;color:var(--faint);text-transform:uppercase;
  letter-spacing:.05em;text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
.table td{padding:9px 12px;border-bottom:1px solid var(--line2);vertical-align:middle}
.table tr:last-child td{border-bottom:none}
.table tr.click{cursor:pointer}
.table tr.click:hover td{background:#fafbfd}
.table .right{text-align:right}
.tablewrap{overflow-x:auto}

/* ---------- Бейджи и статусы ---------- */
.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:999px;
  font-size:11.5px;font-weight:600;white-space:nowrap;background:var(--line2);color:var(--muted)}
.badge.green{background:var(--green-soft);color:var(--green)}
.badge.red{background:var(--red-soft);color:var(--red)}
.badge.blue{background:var(--blue-soft);color:var(--blue)}
.badge.orange{background:var(--accent-soft);color:var(--accent-h)}
.badge.yellow{background:var(--yellow-soft);color:var(--yellow)}
.dot{width:7px;height:7px;border-radius:50%;background:currentColor;flex:0 0 auto}

/* ---------- KPI ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px}
.kpi b{display:block;font-size:18px;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.kpi span{font-size:11.5px;color:var(--muted);font-weight:600}
.kpi.accent b{color:var(--accent-h)}
.kpi.green b{color:var(--green)}
.kpi.red b{color:var(--red)}

/* ---------- Модалки ---------- */
.overlay{position:fixed;inset:0;z-index:120;background:rgba(15,19,28,.45);
  display:none;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow-y:auto}
.overlay.open{display:flex}
.modal{width:100%;max-width:560px;background:var(--card);border-radius:16px;box-shadow:var(--shadow-pop);
  animation:pop .18s cubic-bezier(.2,.9,.3,1.2)}
.modal.wide{max-width:860px}
.modal-head{display:flex;align-items:center;gap:10px;padding:16px 20px 0}
.modal-head h2{flex:1}
.modal-body{padding:16px 20px}
.modal-foot{display:flex;gap:9px;justify-content:flex-end;padding:0 20px 18px}
@keyframes pop{from{opacity:0;transform:scale(.97) translateY(8px)}to{opacity:1}}

/* ---------- Тосты ---------- */
.toasts{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);z-index:200;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{background:#1d2430;color:#fff;padding:10px 18px;border-radius:11px;font-size:13.5px;font-weight:500;
  box-shadow:var(--shadow-pop);animation:pop .2s;display:flex;gap:10px;align-items:center;pointer-events:auto}
.toast.err{background:#8e2f2a}
.toast button{background:none;border:none;color:var(--accent);font-weight:700;padding:0}

/* ---------- Поисковая палитра (Cmd+K) ---------- */
.palette{position:fixed;inset:0;z-index:150;background:rgba(15,19,28,.45);display:none;
  align-items:flex-start;justify-content:center;padding:10vh 16px}
.palette.open{display:flex}
.palette-in{width:100%;max-width:640px;background:var(--card);border-radius:16px;box-shadow:var(--shadow-pop);overflow:hidden}
.palette-in input{width:100%;border:none;outline:none;padding:17px 20px;font-size:16px;background:transparent}
.palette-list{max-height:min(430px,55vh);overflow-y:auto;border-top:1px solid var(--line2);padding:6px}
.palette-row{display:flex;align-items:center;gap:11px;padding:9px 13px;border-radius:10px;cursor:pointer}
.palette-row.sel{background:var(--accent-soft)}
.palette-row .t{flex:1;min-width:0}
.palette-row .t b{display:block;font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.palette-row .t span{font-size:11.5px;color:var(--muted)}
.palette-row .p{font-variant-numeric:tabular-nums;font-weight:600;font-size:13px;white-space:nowrap}
.palette-row .tag{font-size:10px;font-weight:700;padding:2px 6px;border-radius:5px;flex:0 0 auto}
.palette-hint{padding:9px 16px;border-top:1px solid var(--line2);display:flex;gap:14px;color:var(--faint);font-size:11.5px}
.palette-hint kbd{background:var(--line2);border-radius:4px;padding:1px 5px;font-family:inherit;font-size:10.5px;font-weight:600}
.tag-work{background:var(--blue-soft);color:var(--blue)}
.tag-material{background:var(--green-soft);color:var(--green)}
.tag-equipment{background:var(--accent-soft);color:var(--accent-h)}
.tag-extra{background:var(--yellow-soft);color:var(--yellow)}

/* ---------- Вход ---------- */
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{width:100%;max-width:360px;background:var(--card);border:1px solid var(--line);
  border-radius:18px;box-shadow:var(--shadow);padding:32px 28px}
.login-card .brand{justify-content:center;margin-bottom:6px;font-size:19px}
.login-card p{color:var(--muted);text-align:center;margin:0 0 20px;font-size:13px}

/* ---------- Дашборд ---------- */
.pipeline{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}
.pipe{flex:1;min-width:108px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:11px 13px;text-decoration:none}
.pipe b{display:block;font-size:19px;letter-spacing:-.02em}
.pipe span{font-size:11px;color:var(--muted);font-weight:600}
.pipe small{display:block;font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.pipe:hover{border-color:#d4dae3}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.list-row{display:flex;align-items:center;gap:12px;padding:10px 18px;border-bottom:1px solid var(--line2);text-decoration:none}
.list-row:last-child{border-bottom:none}
.list-row:hover{background:#fafbfd}
.list-row .t{flex:1;min-width:0}
.list-row .t b{display:block;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-row .t span{font-size:12px;color:var(--muted)}
.list-row .sum{font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}

/* ---------- Конструктор сметы ---------- */
.editor{display:grid;grid-template-columns:1fr 300px;gap:16px;align-items:start}
.ehead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.ehead input.title{font-size:19px;font-weight:700;border:1px solid transparent;border-radius:9px;
  padding:5px 9px;background:transparent;letter-spacing:-.02em;min-width:200px;flex:1}
.ehead input.title:hover{border-color:var(--line)}
.ehead input.title:focus{outline:none;border-color:var(--accent);background:var(--card)}
.esec{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);margin-bottom:14px;overflow:visible}
.esec.dragover{outline:2px dashed var(--accent);outline-offset:-2px}
.esec-head{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line2)}
.esec-head .drag{cursor:grab;color:var(--faint);padding:2px 4px;border-radius:5px}
.esec-head .drag:hover{background:var(--line2)}
.esec-head input.sec-title{font-weight:700;font-size:14px;border:1px solid transparent;
  border-radius:7px;padding:3px 8px;background:transparent;flex:1;min-width:120px}
.esec-head input.sec-title:hover{border-color:var(--line)}
.esec-head input.sec-title:focus{outline:none;border-color:var(--accent);background:var(--card)}
.esec-head .subtotal{font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.esec.hidden-sec{opacity:.55}
.erows{min-height:8px}
.erow{display:grid;grid-template-columns:46px minmax(180px,1fr) 70px 84px 92px 76px 106px 106px;
  gap:6px;align-items:center;padding:5px 14px 5px 8px;border-bottom:1px solid var(--line2)}
.erow:last-child{border-bottom:none}
.erow:hover{background:#fafbfd}
.erow.dragging{opacity:.4}
.erow .drag{cursor:grab;color:var(--faint);text-align:center;border-radius:5px;font-size:13px}
.erow .drag:hover{background:var(--line2)}
.erow input,.erow select{border:1px solid transparent;background:transparent;border-radius:7px;
  padding:4px 7px;font-size:13px;width:100%;min-height:29px}
.erow input:hover,.erow select:hover{border-color:var(--line)}
.erow input:focus,.erow select:focus{outline:none;border-color:var(--accent);background:var(--card);
  box-shadow:0 0 0 2px rgba(249,122,31,.12)}
.erow input.num{text-align:right;font-variant-numeric:tabular-nums}
.erow .name-cell{min-width:0;display:flex;align-items:center;gap:6px}
.erow .name-cell input{flex:1;font-weight:500}
.erow .rowsum{font-weight:600;font-variant-numeric:tabular-nums;text-align:right;font-size:13px;white-space:nowrap}
.erow .rowsum small{display:block;font-weight:500;color:var(--faint);font-size:10.5px}
.erow .acts{display:flex;gap:1px;justify-content:flex-end;opacity:0;transition:.12s}
.erow:hover .acts,.erow:focus-within .acts{opacity:1}
.erow .acts button{border:none;background:none;color:var(--faint);border-radius:6px;width:24px;height:24px;
  display:grid;place-items:center;font-size:13px}
.erow .acts button:hover{background:var(--line2);color:var(--text)}
.erow .acts button.del:hover{background:var(--red-soft);color:var(--red)}
.erow .flag{width:8px;height:8px;border-radius:50%;flex:0 0 auto}
.erow .flag.client{background:var(--blue)}
.erow .flag.stale{background:var(--yellow)}
.erow-grid-head{display:grid;grid-template-columns:46px minmax(180px,1fr) 70px 84px 92px 76px 106px 106px;
  gap:6px;padding:7px 14px 5px 8px;font-size:10.5px;font-weight:600;color:var(--faint);
  text-transform:uppercase;letter-spacing:.05em}
.erow-grid-head .right{text-align:right}
.esec-foot{padding:7px 14px;display:flex;gap:10px;align-items:center}
.esec-foot .add{color:var(--muted);font-size:13px;font-weight:600;border:none;background:none;
  padding:4px 8px;border-radius:7px}
.esec-foot .add:hover{background:var(--accent-soft);color:var(--accent-h)}
.add-section{width:100%;border:1.5px dashed var(--line);background:none;border-radius:var(--radius);
  padding:11px;color:var(--muted);font-weight:600;margin-bottom:14px}
.add-section:hover{border-color:var(--accent);color:var(--accent-h);background:var(--accent-soft)}

/* Сайдбар итогов */
.esum{position:sticky;top:70px;display:flex;flex-direction:column;gap:12px}
.esum .card-pad{padding:15px 17px}
.trow{display:flex;justify-content:space-between;gap:10px;padding:3px 0;font-size:13.5px}
.trow span{color:var(--muted)}
.trow b{font-variant-numeric:tabular-nums;font-weight:600}
.trow.total{border-top:1px solid var(--line);margin-top:7px;padding-top:9px;font-size:15px}
.trow.total b{font-weight:800;font-size:18px;letter-spacing:-.02em}
.trow.disc b{color:var(--red)}
.trow.cbuy b{color:var(--blue)}
.kpi-mini{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.kpi-mini div{background:var(--line2);border-radius:9px;padding:7px 10px}
.kpi-mini b{display:block;font-size:13.5px;font-variant-numeric:tabular-nums}
.kpi-mini span{font-size:10.5px;color:var(--muted);font-weight:600}
.kpi-mini .good b{color:var(--green)}
.kpi-mini .bad b{color:var(--red)}

/* Подсказки */
.hint{display:flex;gap:9px;align-items:flex-start;background:var(--blue-soft);border-radius:10px;
  padding:9px 12px;font-size:12.5px;margin-top:8px}
.hint .grow{flex:1}
.hint button{white-space:nowrap}

/* Мобильный конструктор */
.mobilebar{display:none}
@media(max-width:960px){
  .editor{grid-template-columns:1fr}
  .esum{position:static;order:-1}
}
@media(max-width:700px){
  .wrap{padding:14px 12px 120px}
  .erow-grid-head{display:none}
  .erow{display:flex;flex-wrap:wrap;gap:7px;align-items:center;padding:10px 14px;position:relative}
  .erow .drag{display:none}
  .erow .name-cell{flex:1 1 100%;padding-right:112px;min-height:24px}
  .erow .name-cell input{font-weight:600;padding-left:0}
  .erow input,.erow select{border-color:var(--line);background:var(--card);width:auto}
  .erow input[data-f="qty"]{width:64px}
  .erow select[data-f="unit"]{width:88px}
  .erow input[data-f="price"]{width:92px}
  .erow input[data-f="discount"]{display:none}
  .erow .rowsum{margin-left:auto;font-size:14.5px}
  .erow .acts{opacity:1;position:absolute;top:9px;right:10px}
  .esec-head .subtotal{font-size:13px}
  .mobilebar{display:flex;position:fixed;left:10px;right:10px;bottom:10px;z-index:80;
    background:#1d2430;color:#fff;border-radius:14px;padding:11px 16px;align-items:center;gap:12px;
    box-shadow:var(--shadow-pop)}
  .mobilebar b{font-size:16px;font-variant-numeric:tabular-nums;flex:1}
  .fields.c2,.fields.c3{grid-template-columns:1fr}
  .grid2{grid-template-columns:1fr}
  .pagehead .searchbox{max-width:none;flex:1 1 100%}
  .editor{gap:12px}
}

/* ---------- Diff версий ---------- */
.diff-add{background:var(--green-soft)}
.diff-del{background:var(--red-soft);text-decoration:line-through;opacity:.75}
.diff-up{color:var(--red);font-weight:600}
.diff-down{color:var(--green);font-weight:600}

/* ---------- Разное ---------- */
.tabs{display:flex;gap:2px;background:var(--line2);padding:3px;border-radius:11px;width:max-content;max-width:100%;overflow-x:auto}
.tabs button{border:none;background:none;padding:6px 14px;border-radius:8px;font-weight:600;font-size:13px;color:var(--muted);white-space:nowrap}
.tabs button.on{background:var(--card);color:var(--text);box-shadow:var(--shadow)}
.searchbox{position:relative;max-width:340px;flex:1}
.searchbox .input{padding-left:32px}
.searchbox::before{content:"";position:absolute;left:11px;top:50%;transform:translateY(-50%);
  width:13px;height:13px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='13' viewBox='0 0 24 24' fill='none' stroke='%2398a1b3' stroke-width='2.4'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-4-4'/%3E%3C/svg%3E") no-repeat}
.empty{padding:44px 20px;text-align:center;color:var(--muted)}
.empty b{display:block;font-size:15px;color:var(--text);margin-bottom:4px}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--accent-soft);color:var(--accent-h);
  display:grid;place-items:center;font-weight:700;font-size:13px;flex:0 0 auto}
kbd.k{background:var(--line2);border-radius:5px;padding:2px 6px;font-family:inherit;font-size:11px;font-weight:600;color:var(--muted)}
.spin{width:16px;height:16px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:sp .7s linear infinite;display:inline-block;vertical-align:-3px}
.popmenu{position:absolute;z-index:180;background:var(--card);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--shadow-pop);padding:5px;min-width:230px;animation:pop .15s}
.popmenu button{display:block;width:100%;text-align:left;border:none;background:none;padding:8px 12px;
  border-radius:8px;font-size:13.5px;font-weight:500}
.popmenu button:hover{background:var(--line2)}
.popmenu button.danger{color:var(--red)}
.popmenu button.danger:hover{background:var(--red-soft)}
@keyframes sp{to{transform:rotate(360deg)}}
/* Крутилка ожидания: длинную операцию без неё не отличить от сломанной кнопки. */
.mk-spin{width:26px;height:26px;margin:0 auto;border-radius:50%;
  border:3px solid var(--line2);border-top-color:var(--accent);animation:sp .8s linear infinite}
::selection{background:rgba(249,122,31,.22)}

/* ---------- UytHome Manager: объекты ---------- */
.objhead{margin-bottom:14px}
.objhead-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.objhead-top h1{font-size:24px}
.objhead-sub{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}
.chip{display:inline-flex;align-items:center;gap:5px;background:var(--card);border:1px solid var(--line);
  border-radius:99px;padding:4px 12px;font-size:12.5px;font-weight:600;color:var(--muted)}
a.chip:hover{border-color:var(--accent);color:var(--accent-h)}
.status-select{width:auto;min-width:170px;font-weight:600;border-color:var(--accent);
  background-color:var(--accent-soft);color:var(--accent-h)}
.progress{height:5px;background:var(--line);border-radius:99px;margin-top:12px;overflow:hidden}
.progress-in{height:100%;background:linear-gradient(90deg,var(--accent),#fdad63);border-radius:99px;
  transition:width .5s ease;width:0}
.objtabs{margin-bottom:16px;width:100%}
.objtabs button{display:inline-flex;align-items:center;gap:6px}
.tcount{background:var(--line);color:var(--muted);font-size:10.5px;font-weight:700;
  border-radius:99px;padding:1px 6px;min-width:16px;text-align:center}
.tcount:empty{display:none}
.tcount.warn{background:var(--accent);color:#fff}
.tabpane[hidden]{display:none}
.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 18px}
.info-grid>div{display:flex;flex-direction:column;min-width:0}
.info-grid span{font-size:11px;color:var(--faint);font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.info-grid b{font-size:13.5px;font-weight:600;color:var(--text);overflow-wrap:break-word}
.roomblock{border:1px solid var(--line);border-radius:var(--radius-s);margin:0 14px 12px;overflow:hidden}
.card>.roomblock:first-of-type{margin-top:14px}
.roomblock-head{display:flex;align-items:center;gap:8px;background:var(--line2);padding:7px 12px;font-size:13px}
.roomblock-body{padding:10px 12px;display:flex;flex-wrap:wrap;gap:7px}
.point-chip{cursor:pointer}
.point-chip:hover{border-color:var(--accent);color:var(--accent-h)}
.device-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border-top:1px solid var(--line2);cursor:pointer}
.device-row:hover{background:#fafbfd}
.device-row .t{flex:1;min-width:0}
.device-row .t b{display:block;font-size:13.5px}
.device-row .t span{display:block;font-size:12px;color:var(--muted)}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;padding:14px}
.gallery .ph{margin:0;border:1px solid var(--line);border-radius:var(--radius-s);overflow:hidden;
  cursor:pointer;background:var(--card);transition:.15s}
.gallery .ph:hover{box-shadow:var(--shadow-pop);transform:translateY(-2px)}
.gallery .ph img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;background:var(--line2)}
.gallery .ph figcaption{padding:6px 9px;font-size:11.5px;color:var(--muted);font-weight:600}
.gallery .ph figcaption span{display:block;font-weight:400;color:var(--faint);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.note{border:1px solid var(--line);border-radius:var(--radius-s);padding:10px 12px;margin-bottom:9px}
.note.pinned{border-color:var(--yellow);background:var(--yellow-soft)}
.note-text{white-space:pre-wrap;font-size:13.5px}
.note-meta{margin-top:6px;font-size:11.5px;color:var(--faint);display:flex;gap:10px;align-items:center}
.note-meta button{border:none;background:none;color:var(--muted);font-size:11.5px;padding:0;font-weight:600}
.note-meta button:hover{color:var(--accent-h)}
.note-meta button.danger:hover{color:var(--red)}
.task-row label.check{padding:0}
.objcard{display:block;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:15px 17px;box-shadow:var(--shadow);transition:.15s}
.objcard:hover{box-shadow:var(--shadow-pop);transform:translateY(-2px)}
.objcard .oc-top{display:flex;align-items:flex-start;gap:8px}
.objcard h3{font-size:15px;font-weight:700;flex:1;min-width:0}
.objcard .oc-client{color:var(--muted);font-size:12.5px;margin-top:2px}
.objcard .oc-meta{display:flex;gap:12px;margin-top:10px;font-size:12px;color:var(--muted);flex-wrap:wrap}
.objcard .oc-meta b{color:var(--text)}
.objcard .progress{margin-top:12px;height:4px}
.objgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.kpi.accent b{color:var(--accent-h)}
@media(max-width:700px){
  .objhead-top h1{font-size:19px;flex:1 1 auto}
  .status-select{flex:1 1 100%;order:5}
  .info-grid{grid-template-columns:1fr}
  .objtabs{position:sticky;top:54px;z-index:50;background:var(--bg);padding:6px 0;border-radius:0}
  .gallery{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}
  .grid2[style*="1.4fr"]{grid-template-columns:1fr!important}
}

/* ---------- Глобальный поиск ---------- */
.gsearch-btn{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);background:var(--card);
  border-radius:9px;padding:6px 11px;color:var(--muted);font-size:12.5px;font-weight:600;transition:.15s}
.gsearch-btn:hover{border-color:#d4dae3;color:var(--text)}
.gsearch-btn kbd{background:var(--line2);border-radius:5px;padding:1px 5px;font-size:10.5px;font-family:inherit}
.on-chip{border-color:var(--accent);color:var(--accent-h);background:var(--accent-soft)}
@media(max-width:700px){
  .gsearch-btn span,.gsearch-btn kbd{display:none}
  .gsearch-btn{padding:6px 9px}
}

/* ---------- Комментарии строк сметы ---------- */
.erow .flag.q{background:var(--yellow)}
.erow .order-tag.choice{background:#fdf1dc;color:#b7791f}
.erow .order-tag.pvz{background:#efe9fb;color:#6b46c1}
.erow .order-tag.alt{background:#e4eefc;color:#2f5fb0}
.erow .order-tag.alt.off{background:var(--line2);color:var(--faint)}
.erow.altoff{opacity:.55}
.erow.altoff .rowsum{color:var(--faint)}
.kp-alt{border:1px solid var(--line);border-radius:10px;padding:9px 12px;margin-bottom:8px}
.kp-alt.pending{border-color:var(--accent);background:var(--accent-soft)}
.kp-alt-opt{display:flex;align-items:center;gap:8px;margin-top:5px;font-size:12.5px}
.kp-alt-opt.on{font-weight:700}
.kp-choice{border:1px solid var(--line);border-radius:10px;padding:9px 12px;margin-bottom:8px}
.kp-choice.pending{border-color:#f0d9a8;background:#fdf6e7}
.kp-choice-head{display:flex;align-items:center;gap:8px}
.kp-choice-v{display:flex;align-items:center;gap:8px;margin-top:5px;font-size:12.5px}
.kp-choice-v.on{font-weight:700}
.kp-choice-v a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.erow.qrow{background:var(--yellow-soft)}
.erow.qrow:hover{background:#faf0d3}
.name-cell{flex-wrap:wrap}
.row-note{flex-basis:100%;font-size:11.5px;color:var(--muted);padding:0 0 2px 2px;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row-note.q{color:var(--yellow);font-weight:600}
.row-note:hover{color:var(--accent-h)}

/* Иконка бренда в шапке */
.brand-ic{width:24px;height:24px;margin-right:2px;border-radius:6px;display:block}

/* ---------- UytHome Cloud (умный дом объекта) ---------- */
.uy-line{display:flex;align-items:center;gap:8px;padding:3px 0;flex-wrap:wrap}
.uy-fb{padding:9px 0;border-bottom:1px solid var(--line2)}
.uy-fb:last-child{border-bottom:none}
.uy-area{border:1px solid var(--line2);border-radius:9px;margin-bottom:6px;padding:0}
.uy-area>summary{cursor:pointer;padding:8px 12px;display:flex;align-items:center;gap:10px;list-style:none}
.uy-area>summary::-webkit-details-marker{display:none}
.uy-area>summary:before{content:'▸';color:var(--faint);font-size:11px;transition:.15s}
.uy-area[open]>summary:before{transform:rotate(90deg)}
.uy-dev{margin:0 10px 6px 22px;border-left:2px solid var(--line2);padding-left:10px}
.uy-dev>summary{cursor:pointer;font-size:13px;padding:3px 0;list-style:none;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.uy-dev>summary::-webkit-details-marker{display:none}
.uy-ent{display:flex;gap:10px;align-items:baseline;padding:2px 0 2px 12px;flex-wrap:wrap}
.uy-ent>span:first-child{min-width:140px}

/* ---------- Severity UytHome Fleet ---------- */
/* Цвета берутся из токенов: если появится тёмная тема, severity поедет
   вместе с ней и останется читаемой. Смысл цвета один и тот же везде:
   красный — критично, оранжевый — часть функций не работает,
   жёлтый — внимание, зелёный — норма, серый — данных нет. */
.c-critical{color:var(--red)}
.c-degraded{color:var(--accent-h)}
.c-attention{color:var(--yellow)}
.c-healthy{color:var(--green)}
.c-offline{color:var(--muted)}
.c-unknown{color:var(--faint)}

/* ---------- Очерёдность работ и закупки в смете ---------- */
.stage-tag{background:var(--blue-soft);color:var(--blue);border-radius:5px;padding:1px 5px;
  font-size:10.5px;font-weight:700;flex:0 0 auto}
.order-tag{border-radius:5px;padding:1px 6px;font-size:10.5px;font-weight:700;flex:0 0 auto}
.order-tag.now{background:var(--accent-soft);color:var(--accent-h)}
.order-tag.later{background:var(--line2);color:var(--muted)}
.linklike{border:none;background:none;padding:0;color:inherit;font:inherit;cursor:pointer;
  text-align:left;border-bottom:1px dashed var(--line)}
.linklike:hover{color:var(--accent-h)}
.type-tag{border:none;border-radius:5px;padding:1px 5px;font-size:10.5px;font-weight:800;
  flex:0 0 auto;line-height:1.5;cursor:pointer}
.type-tag.t-work{background:var(--blue-soft);color:var(--blue)}
.type-tag.t-material{background:var(--green-soft);color:var(--green)}
.type-tag.t-equipment{background:var(--accent-soft);color:var(--accent-h)}
.type-tag.t-extra{background:var(--yellow-soft);color:var(--yellow)}
.type-tag:hover{outline:1px solid currentColor}

/* ---------- Выделение строк сметы ---------- */
.rowpick{display:flex;align-items:center;gap:4px}
.rowsel{width:15px;height:15px;accent-color:var(--accent);opacity:.35;transition:.12s;cursor:pointer}
.rowsel:checked,.erow:hover .rowsel,.erow:focus-within .rowsel{opacity:1}
.erow.picked{background:var(--accent-soft)}
.erow.picked:hover{background:#ffe8d5}
.selbar{position:fixed;left:50%;transform:translateX(-50%);bottom:18px;z-index:90;
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center;
  background:#1d2430;color:#fff;border-radius:14px;padding:10px 14px;box-shadow:var(--shadow-pop);
  max-width:calc(100vw - 24px)}
.selbar b{font-size:13.5px;margin-right:4px;white-space:nowrap}
.selbar .btn{background:rgba(255,255,255,.14);color:#fff;border:none}
.selbar .btn:hover{background:rgba(255,255,255,.24)}
.selbar .btn.ghost{background:none;color:#c9d1de}
@media(max-width:700px){
  .selbar{left:8px!important;right:8px;transform:none!important;bottom:70px!important;
    max-width:none!important}
  .erow .rowpick{display:flex}
  .erow .rowsel{opacity:1}
}

/* ---------- Вопросы клиента по КП ---------- */
.kp-thread{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:10px}
.kp-thread.unread{border-color:var(--accent);background:var(--accent-soft)}
.kp-thread-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.kp-thread-head .grow{flex:1}
.kp-msg{font-size:13px;padding:6px 9px;border-radius:9px;margin-bottom:5px;background:var(--card)}
.kp-msg.us{background:var(--blue-soft)}
.kp-msg .who{display:block;font-size:11px;font-weight:700;color:var(--faint);margin-bottom:2px}
.kp-reply{display:flex;gap:6px;align-items:flex-end;margin-top:6px}
.kp-reply textarea{flex:1}

/* ---------- Закупки заказчика в редакторе КП ---------- */
.kp-track{border:1px solid var(--line);border-radius:10px;padding:9px 12px;margin-bottom:8px}
.kp-track.unchecked{border-color:var(--accent);background:var(--accent-soft)}
.kp-track-head{display:flex;align-items:center;gap:8px}
.kp-track-head .grow{flex:1}
.kp-track-url{display:flex;align-items:center;gap:8px;margin-top:5px;flex-wrap:wrap}
.kp-track-url a{color:var(--blue);font-size:12.5px;word-break:break-all}
