/* ===== Токены ===== */
:root{
  --bg:#f6f7f8;--panel:#ffffff;--panel-2:#f1f2f4;--panel-3:#e9ebee;--line:#e5e7ea;--line-2:#d4d7db;
  --ink:#1f2328;--ink-2:#5b6067;--ink-3:#6e747a;
  --amber:#216a4a;--amber-2:#195238;--accent-text:#195238;--timber:#2e7958;--btn-contrast:#ffffff;
  --red:#bd3035;--red-bg:#fbeaea;--green:#2f9e63;--green-bg:#e6f4ec;
  --wip:#c98a1f;--wip-bg:#f7eed9;--blue:#2f6fed;--blue-bg:#eaf2fd;
  --purple:#654a8c;--purple-bg:#eee8f6;--cyan:#1c7676;--cyan-bg:#e2f3f3;--pink:#a13a63;--pink-bg:#f8e5ee;
  --on-red:#9d1e1e;--on-blue:#1e55c4;--on-purple:#4c346e;--on-cyan:#135b5b;--on-pink:#7f234b;--on-green:#1b6740;--on-wip:#805100;
  --red-contrast:#ffffff;
  --nav-active-bg:var(--green-bg);--nav-active-fg:var(--ink);
  --header-bg:var(--panel);
  --shadow-sm:0 1px 2px rgba(20,30,26,.06);
  --shadow-md:0 6px 18px rgba(20,30,26,.10);
  --shadow-lg:0 18px 48px rgba(16,24,20,.22);
  --r:11px;--r-sm:8px;--r-xs:6px;
  --h-sm:32px;--h:36px;--h-lg:44px;
  --side-w:260px;
  --gap-xs:4px;--gap-s:8px;--gap-m:12px;--gap-l:16px;--gap-xl:24px;--gap-2xl:32px;
  --font:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  --ease-out:cubic-bezier(.22,1,.36,1);
  --z-sticky:10;--z-chart-head:12;--z-header:20;--z-side:30;--z-backdrop:60;--z-drawer:70;--z-popup:200;--z-confirm:220;--z-toast:240;
  --av-1:#2f6fed;--av-2:#1f7a4f;--av-3:#654a8c;--av-4:#1c7676;--av-5:#a13a63;--av-6:#9a5b12;--av-7:#b4441f;--av-8:#4a5568;
  --gantt-day:12px;
  color-scheme:light;
}
:root[data-theme="dark"]{
  --red:#ff8585;--red-bg:#493238;--green:#81d6a3;--green-bg:#284b3b;
  --wip:#f1c678;--wip-bg:#53442c;--blue:#91b7ff;--blue-bg:#2b3d5a;
  --purple:#c7adff;--purple-bg:#413653;--cyan:#83d5d5;--cyan-bg:#28494a;--pink:#eda3c7;--pink-bg:#51354a;
  --on-red:#ff9b9b;--on-blue:#a7c4ff;--on-purple:#d3bfff;--on-cyan:#97dede;--on-pink:#f2b6d2;--on-green:#93dfb0;--on-wip:#f4d08d;
  --red-contrast:#171b20;
  --shadow-sm:none;--shadow-md:0 8px 22px rgba(0,0,0,.35);--shadow-lg:0 18px 48px rgba(0,0,0,.5);
  color-scheme:dark;
}

/* ===== База ===== */
*,*::before,*::after{box-sizing:border-box}
html{font-size:16px;-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:.875rem;line-height:1.45;-webkit-font-smoothing:antialiased;font-feature-settings:"cv11","ss01"}
button,input,select,textarea{font:inherit;color:inherit}
button{background:none;border:0;padding:0;cursor:pointer}
a{color:var(--accent-text);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3,h4{margin:0;line-height:1.25;text-wrap:balance}
p{margin:0}
:focus-visible{outline:2px solid var(--amber);outline-offset:2px}
.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--ink-2)}
.faint{color:var(--ink-3)}
.nowrap{white-space:nowrap}
.ico{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0}
.ico svg{width:1em;height:1em;display:block}
[hidden]{display:none!important}

/* ===== Каркас ===== */
.app{display:grid;grid-template-columns:var(--side-w) minmax(0,1fr);height:100dvh;overflow:hidden}
.side{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0;z-index:var(--z-side)}
.brand{display:flex;align-items:center;gap:11px;padding:16px 18px 14px;border-bottom:1px solid var(--line);flex:none}
.brand-logo{flex:0 0 32px;width:32px;height:32px;border-radius:9px;background:var(--amber);display:grid;place-items:center;color:var(--btn-contrast);font-weight:800;font-size:1rem}
.brand-text{min-width:0;flex:1}
.brand-text b{display:block;font-size:.9375rem;letter-spacing:.4px}
.brand-text span{display:block;font-size:.6875rem;color:var(--ink-3);letter-spacing:.6px}
.brand .icon-btn{margin-left:auto}
.side-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-gutter:stable;padding-bottom:8px}
.nav{display:flex;flex-direction:column;gap:2px;padding:10px 10px 6px}
.nav-link{display:flex;align-items:center;gap:11px;min-height:var(--h);padding:7px 12px;border-radius:var(--r-sm);color:var(--ink-2);font-size:.84375rem;font-weight:500;text-decoration:none;transition:background-color .12s,color .12s}
.nav-link:hover{background:var(--panel-2);color:var(--ink);text-decoration:none}
.nav-link .ico{width:18px;font-size:17px;color:var(--ink-3)}
.nav-link.on{background:var(--nav-active-bg);color:var(--nav-active-fg);font-weight:650}
.nav-link.on .ico{color:var(--accent-text)}
.nav-badge{margin-left:auto;min-width:22px;padding:1px 7px;border-radius:20px;background:var(--red);color:var(--red-contrast);font-size:.6875rem;font-weight:700;text-align:center;font-variant-numeric:tabular-nums}
.nav-badge.soft{background:var(--panel-3);color:var(--ink-2)}
.side-section{padding:12px 10px 4px;border-top:1px solid var(--line);margin-top:6px}
.side-section-head{display:flex;align-items:center;gap:8px;padding:2px 8px 8px}
.side-section-head h2{font-size:.6875rem;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--ink-3)}
.side-section-head .count{margin-left:auto;font-size:.6875rem;font-weight:700;color:var(--ink-3);font-variant-numeric:tabular-nums}
.side-filter{position:relative;margin:0 4px 8px}
.side-filter .ico{position:absolute;left:10px;top:50%;transform:translateY(-50%);font-size:14px;color:var(--ink-3);pointer-events:none}
.side-filter input{width:100%;height:var(--h-sm);padding:6px 30px 6px 30px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--bg);font-size:.8125rem}
.side-filter input::placeholder{color:var(--ink-3)}
.side-filter input:focus-visible{outline-offset:-2px}
.side-filter .clear{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:6px;display:grid;place-items:center;color:var(--ink-3)}
.side-filter .clear:hover{background:var(--panel-3);color:var(--ink)}
.obj-list{display:flex;flex-direction:column;gap:2px}
.obj-link{display:grid;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:46px;padding:6px 8px;border-radius:var(--r-sm);color:var(--ink);text-decoration:none;transition:background-color .12s}
.obj-link:hover{background:var(--panel-2);text-decoration:none}
.obj-link.on{background:var(--nav-active-bg)}
.obj-link .obj-name{display:block;font-size:.8125rem;font-weight:600;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.obj-link .obj-meta{display:flex;align-items:center;gap:6px;font-size:.71875rem;color:var(--ink-3);line-height:1.3;white-space:nowrap;overflow:hidden}
.obj-link .obj-meta .late{color:var(--on-red);font-weight:600}
.obj-mini-bar{flex:0 0 28px;height:4px;border-radius:4px;background:var(--panel-3);overflow:hidden}
.obj-mini-bar i{display:block;height:100%;background:var(--green);border-radius:inherit}
.obj-flags{display:flex;align-items:center;gap:4px}
.flag-dot{min-width:20px;height:20px;padding:0 6px;border-radius:10px;display:inline-grid;place-items:center;font-size:.6875rem;font-weight:700;font-variant-numeric:tabular-nums}
.flag-dot.danger{background:var(--red);color:var(--red-contrast)}
.flag-dot.warning{background:var(--wip-bg);color:var(--on-wip)}
.flag-dot.info{background:var(--purple-bg);color:var(--on-purple)}
.side-more{display:flex;align-items:center;justify-content:center;gap:6px;width:calc(100% - 8px);min-height:var(--h-sm);margin:6px 4px 0;border:1px dashed var(--line-2);border-radius:var(--r-sm);color:var(--ink-2);font-size:.78125rem;font-weight:600}
.side-more:hover{border-style:solid;color:var(--ink);background:var(--panel-2);text-decoration:none}
.side-empty{padding:10px 8px;font-size:.78125rem;color:var(--ink-3)}
.side-foot{flex:none;border-top:1px solid var(--line);padding:10px 10px 12px;display:flex;flex-direction:column;gap:4px}
.who{display:flex;align-items:center;gap:10px;padding:6px 8px}
.who-avatar{flex:0 0 32px;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--panel-3);color:var(--ink);font-weight:700;font-size:.8125rem}
.who>div>b{display:block;font-size:.8125rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.who>div>span{display:block;font-size:.71875rem;color:var(--ink-3)}
.who>div{min-width:0}

.avatar{flex:none;width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:#fff;font-size:.71875rem;font-weight:750;letter-spacing:.3px;background:var(--av-8);user-select:none}
.avatar.lg{width:44px;height:44px;border-radius:11px;font-size:.9375rem}
.avatar.sm{width:24px;height:24px;border-radius:6px;font-size:.625rem}
.avatar[data-c="1"]{background:var(--av-1)}.avatar[data-c="2"]{background:var(--av-2)}.avatar[data-c="3"]{background:var(--av-3)}.avatar[data-c="4"]{background:var(--av-4)}
.avatar[data-c="5"]{background:var(--av-5)}.avatar[data-c="6"]{background:var(--av-6)}.avatar[data-c="7"]{background:var(--av-7)}.avatar[data-c="8"]{background:var(--av-8)}

.main{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.topbar{flex:none;display:flex;align-items:center;gap:12px;min-height:64px;padding:12px 28px;background:var(--header-bg);border-bottom:1px solid var(--line);z-index:var(--z-header)}
.topbar .menu-btn{display:none}
.topbar .back-btn{flex:none}
.topbar-title{min-width:0;flex:1}
.topbar-title h1{font-size:1.1875rem;font-weight:750;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-title p{font-size:.78125rem;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crumbs{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--ink-3);margin-bottom:1px;white-space:nowrap;overflow:hidden}
.crumbs a{color:var(--ink-2)}
.topbar-actions{display:flex;align-items:center;gap:8px;flex:none}
.net{display:inline-flex;align-items:center;gap:7px;height:var(--h-sm);padding:0 11px;border:1px solid var(--line-2);border-radius:20px;font-size:.75rem;font-weight:600;color:var(--ink-2);background:var(--panel)}
.net::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--green)}
.net.off::before{background:var(--red)}
.net.wait::before{background:var(--wip)}
.page{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable;overscroll-behavior-y:contain}
.page-inner{padding:22px 28px 40px;display:flex;flex-direction:column;gap:18px;min-width:0}
.page-inner.flush{padding:0;gap:0}

/* ===== Кнопки ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--h);padding:7px 14px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--panel);color:var(--ink);font-size:.8125rem;font-weight:600;line-height:1.2;text-align:center;white-space:nowrap;text-decoration:none;transition:border-color .12s,background-color .12s,color .12s,transform .08s}
.btn:hover{border-color:var(--ink-3);text-decoration:none}
.btn:active:not(:disabled){transform:translateY(1px)}
.btn .ico{font-size:16px}
.btn.primary{background:var(--amber);border-color:var(--amber);color:var(--btn-contrast)}
.btn.primary:hover{background:var(--amber-2);border-color:var(--amber-2)}
.btn.danger{color:var(--on-red);border-color:color-mix(in srgb,var(--red) 45%,var(--line-2))}
.btn.danger:hover{background:var(--red-bg)}
.btn.ghost{border-color:transparent;background:transparent;color:var(--ink-2)}
.btn.ghost:hover{background:var(--panel-2);color:var(--ink)}
.btn.soft{background:var(--panel-2)}
.btn.sm{min-height:var(--h-sm);padding:5px 11px;font-size:.78125rem}
.btn.lg{min-height:var(--h-lg);padding:10px 18px;font-size:.875rem}
.btn.block{width:100%}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
.btn[aria-busy="true"]{position:relative;color:transparent!important;pointer-events:none}
.btn[aria-busy="true"]::after{content:"";position:absolute;width:15px;height:15px;border:2px solid var(--ink-2);border-right-color:transparent;border-radius:50%;animation:spin .6s linear infinite}
.btn.primary[aria-busy="true"]::after{border-color:var(--btn-contrast);border-right-color:transparent}
.icon-btn{display:inline-grid;place-items:center;flex:none;width:var(--h);height:var(--h);border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--panel);color:var(--ink-2);font-size:17px;transition:border-color .12s,background-color .12s,color .12s}
.icon-btn:hover{border-color:var(--ink-3);color:var(--ink)}
.icon-btn.sm{width:var(--h-sm);height:var(--h-sm);font-size:15px}
.icon-btn.ghost{border-color:transparent;background:transparent}
.icon-btn.ghost:hover{background:var(--panel-2)}
.icon-btn:disabled{opacity:.45;cursor:not-allowed}
@keyframes spin{to{transform:rotate(360deg)}}

/* Ряды действий: одна высота, перенос группой, в узкой колонке столбиком равной ширины */
.actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.actions.end{justify-content:flex-end}
.actions>.btn{flex:0 0 auto}
.actions.fill>.btn{flex:1 1 0;min-width:max-content}
.stack-actions{display:grid;grid-auto-rows:var(--h-sm);gap:6px;justify-items:stretch;min-width:0}
.stack-actions .btn{width:100%;min-width:0}
.row-actions{display:inline-grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:6px;align-items:center}
@container cell (max-width:220px){.row-actions{grid-auto-flow:row}}

/* ===== Сегменты, чипы, плашки ===== */
.seg{display:inline-flex;align-items:center;gap:2px;padding:3px;border:1px solid var(--line);border-radius:10px;background:var(--panel);flex:none;max-width:100%;overflow-x:auto;scrollbar-width:none}
.seg::-webkit-scrollbar{display:none}
.seg button,.seg a{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:30px;padding:5px 14px;border-radius:7px;color:var(--ink-2);font-size:.8125rem;font-weight:600;white-space:nowrap;text-decoration:none;transition:background-color .14s,color .14s}
.seg button:hover,.seg a:hover{color:var(--ink);background:var(--panel-2);text-decoration:none}
.seg .on,.seg [aria-pressed="true"],.seg [aria-selected="true"]{background:var(--amber);color:var(--btn-contrast)}
.seg .on:hover,.seg [aria-pressed="true"]:hover,.seg [aria-selected="true"]:hover{background:var(--amber-2);color:var(--btn-contrast)}
.seg .count{font-size:.6875rem;font-weight:700;padding:0 6px;border-radius:10px;background:var(--panel-3);color:var(--ink-2)}
.seg .on .count,.seg [aria-selected="true"] .count{background:rgba(255,255,255,.22);color:inherit}
.seg.lg button,.seg.lg a{min-height:36px;padding:7px 18px}
.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.chip{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:var(--h-sm);padding:5px 12px;border:1px solid var(--line-2);border-radius:20px;background:var(--panel);color:var(--ink-2);font-size:.78125rem;font-weight:600;white-space:nowrap;transition:background-color .12s,color .12s,border-color .12s}
.chip:hover{border-color:var(--ink-3);color:var(--ink)}
.chip.on,.chip[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.chip .ico{font-size:14px}
.chip .count{font-variant-numeric:tabular-nums;opacity:.75}
.tag{display:inline-flex;align-items:center;gap:5px;max-width:100%;padding:2px 9px;border-radius:6px;font-size:.71875rem;font-weight:650;line-height:1.5;white-space:nowrap;background:var(--panel-2);color:var(--ink-2)}
.tag .ico{font-size:12px}
.tag.danger{background:var(--red-bg);color:var(--on-red)}
.tag.warning{background:var(--wip-bg);color:var(--on-wip)}
.tag.success{background:var(--green-bg);color:var(--on-green)}
.tag.info{background:var(--blue-bg);color:var(--on-blue)}
.tag.reported{background:var(--purple-bg);color:var(--on-purple)}
.tag.prod{background:var(--cyan-bg);color:var(--on-cyan)}
.tag.material{background:var(--pink-bg);color:var(--on-pink)}
.tag.outline{background:transparent;border:1px solid var(--line-2)}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ink-3);flex:none}
.dot.danger{background:var(--red)}.dot.warning{background:var(--wip)}.dot.success{background:var(--green)}.dot.info{background:var(--blue)}.dot.reported{background:var(--purple)}

/* ===== Поля ===== */
.field{display:flex;flex-direction:column;gap:6px;min-width:0}
.field>label,.field>.label{font-size:.75rem;font-weight:650;color:var(--ink-2)}
.field .hint{font-size:.75rem;color:var(--ink-3)}
.field .err{font-size:.75rem;color:var(--on-red)}
.input,.textarea,.field input:not([type=checkbox]):not([type=radio]):not([type=file]),.field textarea{width:100%;min-height:var(--h-lg);padding:10px 12px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--panel);color:var(--ink);font-size:1rem;line-height:1.35}
.field textarea,.textarea{min-height:92px;resize:vertical}
.input:hover,.field input:hover,.field textarea:hover{border-color:var(--ink-3)}
.input::placeholder,.field input::placeholder,.field textarea::placeholder{color:var(--ink-3)}
.field input:focus-visible,.field textarea:focus-visible,.input:focus-visible{outline-offset:-2px}
.field [aria-invalid="true"]{border-color:var(--red)}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 14px}
.form-grid>.wide{grid-column:1/-1}
.search{position:relative;min-width:0}
.search .ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);font-size:15px;color:var(--ink-3);pointer-events:none}
.search input{width:100%;height:var(--h);padding:7px 34px 7px 34px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--panel);font-size:.84375rem}
.search input:focus-visible{outline-offset:-2px}
.search input::placeholder{color:var(--ink-3)}
.search .clear{position:absolute;right:5px;top:50%;transform:translateY(-50%);width:26px;height:26px;border-radius:6px;display:grid;place-items:center;color:var(--ink-3)}
.search .clear:hover{background:var(--panel-2);color:var(--ink)}
.check{display:inline-flex;align-items:flex-start;gap:9px;cursor:pointer;font-size:.84375rem;line-height:1.35;min-height:24px}
.check input{appearance:none;-webkit-appearance:none;flex:none;width:18px;height:18px;margin:1px 0 0;border:1.5px solid var(--line-2);border-radius:5px;background:var(--panel);display:grid;place-items:center;cursor:pointer;transition:background-color .12s,border-color .12s}
.check input::after{content:"";width:9px;height:5px;border-left:2px solid var(--btn-contrast);border-bottom:2px solid var(--btn-contrast);transform:rotate(-45deg) translate(1px,-1px);opacity:0}
.check input:checked{background:var(--amber);border-color:var(--amber)}
.check input:checked::after{opacity:1}
.check input:indeterminate{background:var(--amber);border-color:var(--amber)}
.check input:indeterminate::after{width:9px;height:0;border-left:0;transform:none;opacity:1}
.check input:hover{border-color:var(--ink-3)}
.check input:disabled{opacity:.5;cursor:not-allowed}
.switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-size:.84375rem}
.switch input{appearance:none;-webkit-appearance:none;flex:none;width:38px;height:22px;border-radius:12px;background:var(--line-2);position:relative;cursor:pointer;transition:background-color .16s}
.switch input::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:transform .16s var(--ease-out)}
.switch input:checked{background:var(--amber)}
.switch input:checked::after{transform:translateX(16px)}
.radio-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}
.radio-card{position:relative;display:flex;align-items:center;gap:9px;min-height:var(--h-lg);padding:9px 12px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--panel);font-size:.84375rem;font-weight:600;cursor:pointer}
.radio-card input{position:absolute;opacity:0;pointer-events:none}
.radio-card:has(input:checked){border-color:var(--amber);background:var(--nav-active-bg);color:var(--ink)}
.radio-card:has(input:focus-visible){outline:2px solid var(--amber);outline-offset:2px}
.radio-card .ico{font-size:17px}
.radio-cards.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.radio-cards.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.radio-cards.three .radio-card{justify-content:center;text-align:center;line-height:1.25}
.radio-card:has(input[name=severity][value=high]:checked){border-color:var(--on-red);background:var(--red-bg);color:var(--on-red)}

/* Свои списки и календарь (по образцу задачника) */
.custom-control-source{display:none!important}
.custom-control-button{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:var(--h-lg);padding:9px 12px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--panel);color:var(--ink);font-size:1rem;text-align:left}
.custom-control-button span{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.custom-control-button svg{width:16px;height:16px;flex:none;color:var(--ink-3)}
.custom-control-button:hover{border-color:var(--ink-3)}
.custom-control-button:disabled{background:var(--panel-2);color:var(--ink-3);cursor:not-allowed}
.toolbar .custom-control-button,.filters .custom-control-button{min-height:var(--h);padding:6px 11px;font-size:.8125rem;width:auto;max-width:15rem}
.custom-control-popup{position:fixed;z-index:var(--z-popup);box-sizing:border-box;min-width:0;overflow-y:auto;overscroll-behavior:contain;padding:6px;border:1px solid var(--line-2);border-radius:10px;background:var(--panel);color:var(--ink);box-shadow:var(--shadow-lg)}
.custom-control-search{position:sticky;top:0;z-index:1;width:100%;min-height:36px;margin-bottom:5px;padding:7px 9px;border:1px solid var(--line-2);border-radius:6px;background:var(--bg);font-size:.875rem}
.custom-control-option{display:block;width:100%;min-height:36px;padding:8px 9px;border-radius:6px;text-align:left;white-space:normal;overflow-wrap:anywhere;font-size:.84375rem;line-height:1.35}
.custom-control-option:hover,.custom-control-option:focus-visible{background:var(--panel-2);outline-offset:-2px}
.custom-control-option[aria-selected="true"]{color:var(--accent-text);font-weight:700}
.custom-control-option:disabled{color:var(--ink-3);cursor:not-allowed}
.custom-control-option.is-rich{display:flex;flex-direction:column;gap:2px}
.custom-control-option-top{display:flex;align-items:center;gap:8px;min-width:0}
.custom-control-option-title{flex:1;min-width:0;font-weight:600}
.custom-control-option-badge{flex:none;padding:1px 8px;border-radius:10px;background:var(--panel-2);color:var(--ink-2);font-size:.6875rem;font-weight:650}
.custom-control-option-meta{flex:none;color:var(--ink-2);font-size:.75rem;font-variant-numeric:tabular-nums}
.custom-control-option-sub{color:var(--ink-2);font-size:.75rem}
.custom-control-empty{padding:10px;color:var(--ink-3);font-size:.8125rem}
.custom-date-head{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:8px;text-transform:capitalize}
.custom-date-head b{font-size:.84375rem;text-align:center}
.custom-date-head button{display:grid;place-items:center;width:32px;height:32px;border-radius:6px;flex:none}
.custom-date-head button:hover,.custom-date-actions button:hover{background:var(--panel-2)}
.custom-date-head svg{width:16px;height:16px}
.custom-date-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px}
.custom-date-grid>span,.custom-date-grid>button{display:grid;place-items:center;min-width:0;height:32px;border-radius:6px;font-size:.78125rem;font-variant-numeric:tabular-nums}
.custom-date-grid>span{color:var(--ink-3);font-weight:700;font-size:.6875rem}
.custom-date-grid>button:hover{background:var(--panel-2)}
.custom-date-grid>button.today{box-shadow:inset 0 0 0 1px var(--amber)}
.custom-date-grid>button.selected{background:var(--amber);color:var(--btn-contrast)}
.custom-date-grid>button:disabled{color:var(--ink-3);opacity:.5;cursor:not-allowed}
.custom-date-actions{display:flex;justify-content:space-between;gap:8px;margin-top:8px;border-top:1px solid var(--line);padding-top:6px}
.custom-date-actions button{min-height:30px;padding:5px 9px;border-radius:6px;font-size:.78125rem;font-weight:600;color:var(--accent-text)}

/* ===== Панели и секции ===== */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);min-width:0}
.panel-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px 18px;border-bottom:1px solid var(--line)}
.panel-head h2{font-size:.9375rem;font-weight:700}
.panel-head p{font-size:.78125rem;color:var(--ink-2)}
.panel-head .spacer{flex:1}
.panel-body{padding:14px 18px}
.panel-body.tight{padding:8px 10px}
.panel-foot{padding:10px 18px;border-top:1px solid var(--line);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.section-title{display:flex;align-items:center;gap:10px;margin:4px 0 -6px}
.section-title h2{font-size:.9375rem;font-weight:700}
.section-title .line{flex:1;height:1px;background:var(--line)}
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.grid-main{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(300px,1fr);gap:16px;align-items:start}

/* Требует внимания: тонированные плитки, ведут туда, где это чинится */
.attn{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.attn-tile{display:flex;align-items:center;gap:11px;min-height:64px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel-2);color:var(--ink);text-align:left;width:100%;transition:border-color .12s,background-color .12s,transform .12s}
.attn-tile:hover{background:var(--panel);border-color:var(--line-2);transform:translateY(-1px)}
.attn-tile .ico{font-size:19px}
.attn-tile .attn-t{flex:1;min-width:0}
.attn-tile b{display:block;font-size:.84375rem;font-weight:700;line-height:1.3}
.attn-tile i{display:block;margin-top:2px;font-style:normal;font-size:.75rem;line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.attn-tile .attn-n{font-size:1.375rem;font-weight:800;font-variant-numeric:tabular-nums;line-height:1}
.attn-tile.danger{background:var(--red-bg);border-color:color-mix(in srgb,var(--red) 38%,var(--line));color:var(--on-red)}
.attn-tile.warning{background:var(--wip-bg);border-color:color-mix(in srgb,var(--wip) 45%,var(--line));color:var(--on-wip)}
.attn-tile.info{background:var(--blue-bg);border-color:color-mix(in srgb,var(--blue) 35%,var(--line));color:var(--on-blue)}
.attn-tile.reported{background:var(--purple-bg);border-color:color-mix(in srgb,var(--purple) 35%,var(--line));color:var(--on-purple)}
.attn-tile.success{background:var(--green-bg);border-color:color-mix(in srgb,var(--green) 40%,var(--line));color:var(--on-green)}
.attn-tile.prod{background:var(--cyan-bg);border-color:color-mix(in srgb,var(--cyan) 35%,var(--line));color:var(--on-cyan)}
.attn-tile.material{background:var(--pink-bg);border-color:color-mix(in srgb,var(--pink) 35%,var(--line));color:var(--on-pink)}
.attn-clean{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid color-mix(in srgb,var(--green) 40%,var(--line));border-radius:10px;background:var(--green-bg);color:var(--on-green);font-size:.84375rem;font-weight:600}

/* Показатели */
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.nw{white-space:nowrap}
.kpi{display:flex;flex-direction:column;gap:4px;padding:14px 16px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel);text-align:left;min-width:0;transition:border-color .12s,box-shadow .12s}
button.kpi:hover,a.kpi:hover{border-color:var(--line-2);box-shadow:var(--shadow-md);text-decoration:none}
.kpi .kpi-l{display:flex;align-items:center;gap:7px;font-size:.75rem;font-weight:650;color:var(--ink-2)}
.kpi .kpi-l .ico{font-size:15px;color:var(--ink-3)}
.kpi .kpi-v{font-size:1.75rem;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums;color:var(--ink)}
.kpi .kpi-s{font-size:.75rem;color:var(--ink-3)}
.kpi.danger .kpi-v{color:var(--on-red)}.kpi.warning .kpi-v{color:var(--on-wip)}.kpi.success .kpi-v{color:var(--on-green)}.kpi.reported .kpi-v{color:var(--on-purple)}
.kpi .bar{margin-top:6px}

/* Прогресс */
.bar{display:block;position:relative;height:6px;border-radius:6px;background:var(--panel-3);overflow:hidden;min-width:40px}
.bar>i{position:absolute;inset:0 auto 0 0;border-radius:inherit;background:var(--green)}
.bar>i.reported{background:color-mix(in srgb,var(--purple) 55%,transparent)}
.progress{display:flex;align-items:center;gap:8px;min-width:0}
.progress .bar{flex:1}
.progress b{font-size:.78125rem;font-weight:700;font-variant-numeric:tabular-nums;min-width:3.2em;text-align:right}

/* Списки строк */
.list{display:flex;flex-direction:column}
.list-row{display:grid;align-items:center;gap:12px;padding:11px 18px;border-top:1px solid var(--line);min-width:0}
.list-row:first-child{border-top:0}
a.list-row,button.list-row{color:var(--ink);text-align:left;text-decoration:none;width:100%;transition:background-color .12s}
a.list-row:hover,button.list-row:hover{background:var(--panel-2);text-decoration:none}
.list-row .title{display:block;font-size:.84375rem;font-weight:650;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-row .sub{display:block;font-size:.75rem;color:var(--ink-3);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-row .cell{display:flex;flex-direction:column;gap:1px;min-width:0}

/* Таблица объектов */
.table-wrap{overflow-x:auto;overscroll-behavior-x:contain}
.table{width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:.8125rem}
.table th{position:sticky;top:0;z-index:1;background:var(--panel-2);padding:9px 12px;border-bottom:1px solid var(--line);font-size:.6875rem;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--ink-3);text-align:left;white-space:nowrap}
.table td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle;min-width:0;overflow:hidden}
.table tr:last-child td{border-bottom:0}
.table tbody tr{transition:background-color .1s}
.table tbody tr.clickable{cursor:pointer}
.table tbody tr.clickable:hover{background:var(--panel-2)}
.table .t-right{text-align:right}
.table .tag{white-space:normal;overflow-wrap:break-word;text-align:left;line-height:1.35;padding-top:3px;padding-bottom:3px}
.cell-obj{display:flex;align-items:center;gap:10px;min-width:0}
.cell-obj>div{min-width:0}
.cell-obj>div>b{display:block;font-size:.84375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cell-obj>div>span{display:block;font-size:.75rem;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cell-clip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cell-2line{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* Тулбар над списком */
.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.toolbar .search{flex:1 1 240px;max-width:380px}
.toolbar .spacer{flex:1}

/* Пустые состояния, подсказки, заметки */
.empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:36px 20px;text-align:center;color:var(--ink-2)}
.empty .empty-ico{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--panel-2);color:var(--ink-3);font-size:22px}
.empty h3{font-size:.9375rem;color:var(--ink)}
.empty p{max-width:46ch;font-size:.8125rem}
.empty .actions{margin-top:6px;justify-content:center}
.note{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;border:1px solid var(--line);border-radius:10px;background:var(--panel-2);font-size:.8125rem;line-height:1.45}
.note .ico{font-size:17px;margin-top:1px}
.note>div{min-width:0;flex:1}
.note b{font-weight:700}
.note .actions{margin-top:8px}
.note.info{background:var(--blue-bg);border-color:color-mix(in srgb,var(--blue) 30%,var(--line));color:var(--on-blue)}
.note.warning{background:var(--wip-bg);border-color:color-mix(in srgb,var(--wip) 40%,var(--line));color:var(--on-wip)}
.note.danger{background:var(--red-bg);border-color:color-mix(in srgb,var(--red) 35%,var(--line));color:var(--on-red)}
.note.success{background:var(--green-bg);border-color:color-mix(in srgb,var(--green) 40%,var(--line));color:var(--on-green)}
.note.reported{background:var(--purple-bg);border-color:color-mix(in srgb,var(--purple) 32%,var(--line));color:var(--on-purple)}
.note .btn:not(.primary):not(.danger){color:var(--ink)}
.note a:not(.btn){color:inherit;text-decoration:underline;text-underline-offset:2px;font-weight:650}
.howto{font-size:.8125rem;color:var(--ink-2)}
.howto ol{margin:6px 0 0;padding-left:20px}
.howto li{margin:2px 0}
.skeleton{display:flex;flex-direction:column;gap:14px;animation:sk-in .2s ease-out both}
.skeleton i,.skeleton .sk-bar-row span{display:block;border-radius:6px;background:linear-gradient(90deg,var(--panel-2) 0%,var(--panel-3) 40%,var(--panel-2) 80%);background-size:300% 100%;animation:shimmer 1.4s ease-in-out infinite}
.sk-toolbar{display:flex;gap:10px;flex-wrap:wrap}
.sk-panel{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:hidden}
.sk-head{display:flex;gap:18%;padding:12px 18px;background:var(--panel-2);border-bottom:1px solid var(--line)}
.sk-row{display:grid;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:12px;padding:13px 18px;border-top:1px solid var(--line)}
.sk-row:first-child,.sk-head+.sk-row{border-top:0}
.skeleton i.sk-dot{width:30px;height:30px;border-radius:8px}
.sk-lines{display:flex;flex-direction:column;gap:7px;min-width:0}
.sk-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.skeleton i.sk-tile{height:64px;border-radius:10px}
.sk-col{display:flex;flex-direction:column;gap:16px;min-width:0}
.people-skeleton{flex-direction:row;gap:10px}
.people-skeleton i{height:var(--h-lg);flex:1;border-radius:var(--r-sm)}
.people-skeleton i+i{flex:none;width:118px}
.sk-pad{display:flex;flex-direction:column;gap:12px;padding:16px 18px}
.sk-pad .sk-tiles{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}
.sk-chart{padding:8px 0}
.sk-bar-row{display:grid;grid-template-columns:200px minmax(0,1fr);align-items:center;gap:16px;padding:12px 18px;border-top:1px solid var(--line)}
.sk-bar-row:first-child{border-top:0}
.sk-bar-row span{height:16px}
.sk-card{display:flex;flex-direction:column;gap:9px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--panel)}
.sk-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
@keyframes shimmer{from{background-position:100% 0}to{background-position:-200% 0}}
@keyframes sk-in{from{opacity:0}to{opacity:1}}

/* Определения */
.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px 18px}
.fact{min-width:0}
.fact dt,.fact .k{font-size:.71875rem;font-weight:650;color:var(--ink-3);margin-bottom:3px}
.fact dd,.fact .v{margin:0;font-size:.84375rem;font-weight:600;overflow-wrap:anywhere}
.fact .v small,.fact dd small{display:block;font-weight:500;color:var(--ink-3);font-size:.75rem;margin-bottom:4px}
dl{margin:0}

/* Шаг дальше (§41) */
.steps{display:flex;flex-direction:column;gap:2px}
.step{display:grid;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:10px;padding:9px 0;border-top:1px solid var(--line)}
.steps-panel .step{grid-template-columns:24px minmax(0,1fr) 172px}
.steps-panel .step>.btn{width:100%}
@media (max-width:720px){.steps-panel .step{grid-template-columns:24px minmax(0,1fr)}.steps-panel .step>.btn,.steps-panel .step>span:last-child{grid-column:2}}
.step:first-child{border-top:0}
.step .ico{width:24px;height:24px;border-radius:50%;font-size:14px}
.step.done .ico{background:var(--green-bg);color:var(--on-green)}
.step.warn .ico{background:var(--wip-bg);color:var(--on-wip)}
.step.todo .ico{background:var(--panel-2);color:var(--ink-3)}
.step.block .ico{background:var(--red-bg);color:var(--on-red)}
.step>div>b{display:block;font-size:.84375rem;font-weight:650}
.step>div>span{display:block;font-size:.75rem;color:var(--ink-3)}

/* ===== Страница объекта ===== */
.obj-head{background:var(--panel);border-bottom:1px solid var(--line);padding:16px 28px 0;flex:none}
.obj-head-top{display:flex;align-items:flex-start;gap:14px;flex-wrap:wrap}
.obj-head-title{flex:1;min-width:260px}
.obj-head-title h1{font-size:1.3125rem;font-weight:800;letter-spacing:-.01em;overflow-wrap:anywhere}
.obj-head-title p{font-size:.8125rem;color:var(--ink-2);margin-top:2px}
.obj-head-title .tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.obj-head-facts{display:flex;flex-wrap:wrap;align-items:center;gap:4px 20px;margin-top:9px;font-size:.8125rem;color:var(--ink-2)}
.obj-head-facts b{color:var(--ink);font-weight:650}
@media (max-width:720px){.obj-head-facts{flex-direction:column;align-items:flex-start;gap:2px}.obj-head-facts>[aria-hidden]{display:none}}
.obj-head-stats{display:flex;align-items:stretch;gap:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--panel)}
.obj-stat{padding:8px 14px;border-left:1px solid var(--line);min-width:118px}
.obj-stat:first-child{border-left:0}
.obj-stat>span{display:block;font-size:.6875rem;font-weight:650;color:var(--ink-3);white-space:nowrap}
.obj-stat>b{display:block;font-size:1rem;font-weight:750;font-variant-numeric:tabular-nums;white-space:nowrap}
.obj-stat b.late{color:var(--on-red)}
.obj-stat b.ok{color:var(--on-green)}
.obj-stat .bar{margin-top:5px}
.sk-inline{display:inline-block;width:92px;height:14px;margin:3px 0 2px;vertical-align:middle;border-radius:5px;background:linear-gradient(90deg,var(--panel-2) 0%,var(--panel-3) 40%,var(--panel-2) 80%);background-size:300% 100%;animation:shimmer 1.4s ease-in-out infinite}
.tabs{display:flex;gap:2px;margin-top:14px;overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{position:relative;display:inline-flex;align-items:center;gap:7px;min-height:42px;padding:9px 14px;color:var(--ink-2);font-size:.84375rem;font-weight:600;white-space:nowrap;text-decoration:none;border-radius:8px 8px 0 0;transition:color .12s,background-color .12s}
.tab:hover{color:var(--ink);background:var(--panel-2);text-decoration:none}
.tab .ico{font-size:16px}
.tab.on{color:var(--accent-text)}
.tab.on::after{content:"";position:absolute;left:10px;right:10px;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--amber)}
.tab .flag-dot{margin-left:2px}

/* Работы и этапы в списках */
.stage-list{display:flex;flex-direction:column}
.stage-row{display:grid;grid-template-columns:minmax(0,1fr) 150px 110px;align-items:center;gap:14px;padding:10px 18px;border-top:1px solid var(--line)}
.stage-row:first-child{border-top:0}
.stage-row>div>b{font-size:.84375rem;font-weight:650}
.stage-row>div>small{display:block;font-size:.75rem;color:var(--ink-3)}

/* Отчёты и события */
.feed{display:flex;flex-direction:column}
.feed-item{display:grid;grid-template-columns:40px minmax(0,1fr);gap:12px;padding:14px 18px;border-top:1px solid var(--line)}
.feed-item:first-child{border-top:0}
.feed-item .feed-ico{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:18px;background:var(--panel-2);color:var(--ink-2)}
.feed-item .feed-ico.reported{background:var(--purple-bg);color:var(--on-purple)}
.feed-item .feed-ico.danger{background:var(--red-bg);color:var(--on-red)}
.feed-item .feed-ico.warning{background:var(--wip-bg);color:var(--on-wip)}
.feed-item .feed-ico.success{background:var(--green-bg);color:var(--on-green)}
.feed-item .feed-ico.info{background:var(--blue-bg);color:var(--on-blue)}
.feed-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.feed-head b{font-size:.84375rem}
.feed-head .when{margin-left:auto;font-size:.75rem;color:var(--ink-3);white-space:nowrap}
.feed-text{margin-top:4px;font-size:.8125rem;color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}
.report-lines{margin-top:8px;display:flex;flex-direction:column;gap:6px}
.report-line{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:var(--panel)}
.report-line .rl-title{font-size:.8125rem;font-weight:650;overflow-wrap:anywhere}
.report-line .rl-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:3px;font-size:.75rem;color:var(--ink-2)}
.report-line .row-actions .btn{min-height:var(--h-sm);padding:5px 10px;font-size:.75rem}
.thumbs{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.thumb{position:relative;width:64px;height:64px;border-radius:8px;overflow:hidden;background:var(--panel-3);border:1px solid var(--line);display:grid;place-items:center;color:var(--ink-3);font-size:20px}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}
.thumb.lg{width:96px;height:96px}
.thumb .more{position:absolute;inset:0;display:grid;place-items:center;background:rgba(0,0,0,.45);color:#fff;font-weight:700;font-size:.875rem}
button.thumb:hover{border-color:var(--ink-3)}

/* Галерея */
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.gallery-item{display:flex;flex-direction:column;gap:6px;text-align:left;min-width:0}
.gallery-item .pic{position:relative;aspect-ratio:4/3;border-radius:10px;overflow:hidden;background:var(--panel-3);display:grid;place-items:center;color:var(--ink-3);font-size:26px;border:1px solid var(--line)}
.gallery-item .pic img{width:100%;height:100%;object-fit:cover;display:block}
.gallery-item>b{font-size:.78125rem;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gallery-item>span:not(.pic){font-size:.71875rem;color:var(--ink-3)}
/* ===== Правое окно ===== */
.drawer-backdrop{position:fixed;inset:0;z-index:var(--z-backdrop);background:rgba(14,20,17,.32);opacity:0;transition:opacity .2s var(--ease-out)}
.drawer-backdrop.show{opacity:1}
.drawer{position:fixed;top:0;right:0;bottom:0;z-index:var(--z-drawer);width:min(var(--drawer-w,640px),100vw);display:flex;flex-direction:column;background:var(--panel);border-left:1px solid var(--line);box-shadow:var(--shadow-lg);transform:translateX(104%);transition:transform .24s var(--ease-out);outline:0}
.drawer.show{transform:none}
.drawer.wide{--drawer-w:820px}
.drawer.narrow{--drawer-w:520px}
.drawer-head{flex:none;display:flex;align-items:flex-start;gap:12px;padding:16px 18px 14px 22px;border-bottom:1px solid var(--line)}
.drawer-head .dh-text{flex:1;min-width:0}
.drawer-head h2{font-size:1.0625rem;font-weight:750;overflow-wrap:anywhere}
.drawer-head p{margin-top:3px;font-size:.78125rem;color:var(--ink-2);overflow-wrap:anywhere}
.drawer-head .tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.drawer-tabs{flex:none;padding:8px 18px 0;border-bottom:1px solid var(--line);display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}
.drawer-tabs .tab{min-height:38px;padding:7px 12px}
.drawer-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-gutter:stable;padding:18px 22px 24px;display:flex;flex-direction:column;gap:16px}
.drawer-body>form{display:flex;flex-direction:column;gap:16px;min-width:0}
.drawer-body .note[hidden]{display:none}
.drawer-foot{flex:none;display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px;padding:12px 18px calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--panel)}
.drawer-foot .btn{min-height:var(--h-lg);min-width:120px}
.drawer-foot .spacer{flex:1}
.drawer-section{display:flex;flex-direction:column;gap:10px}
.drawer-section>h3{font-size:.8125rem;font-weight:700;color:var(--ink-2)}
.drawer-section+.drawer-section{padding-top:16px;border-top:1px solid var(--line)}

/* Подтверждение */
.custom-confirm-backdrop{position:fixed;inset:0;z-index:var(--z-confirm);background:rgba(14,20,17,.4);display:grid;place-items:center;padding:16px}
.custom-confirm{width:min(440px,100%);padding:20px;border-radius:14px;background:var(--panel);border:1px solid var(--line-2);box-shadow:var(--shadow-lg)}
.custom-confirm h3{font-size:1rem;margin-bottom:8px}
.custom-confirm p{font-size:.84375rem;color:var(--ink-2)}
.custom-confirm>div{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}
.custom-confirm .btn{min-height:var(--h-lg);min-width:120px}

/* Сообщения */
.toasts{position:fixed;right:20px;bottom:20px;z-index:var(--z-toast);display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}
.toast{display:flex;align-items:flex-start;gap:10px;max-width:min(420px,calc(100vw - 32px));padding:11px 14px;border-radius:10px;background:var(--ink);color:var(--bg);box-shadow:var(--shadow-lg);font-size:.84375rem;line-height:1.4;pointer-events:auto;animation:toast-in .22s var(--ease-out)}
.toast .ico{font-size:17px;margin-top:1px}
.toast.danger{background:var(--on-red);color:#fff}
.toast.leaving{opacity:0;transform:translateY(6px);transition:opacity .18s,transform .18s;pointer-events:none}
@keyframes toast-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ===== Диаграмма (график) ===== */
.gantt-wrap{position:relative;border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:clip;min-width:0}
.gantt-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line)}
.gantt-tools .spacer{flex:1}
.gantt-extra{display:flex;flex-wrap:wrap;gap:8px}
@media (max-width:720px){.gantt-tools .spacer{display:none}.gantt-extra{flex-basis:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}.gantt-extra .btn{width:100%}}
.gantt-frame{position:relative;min-width:0}
.gantt{position:relative;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;min-height:120px;cursor:default;scrollbar-width:none}
.gantt::-webkit-scrollbar{display:none}
.g-headbar{position:sticky;top:var(--sticky-top,0px);z-index:var(--z-chart-head);display:grid;grid-template-columns:var(--gantt-left,300px) minmax(0,1fr);background:var(--panel-2);border-bottom:1px solid var(--line)}
.g-head-view{position:relative;overflow:hidden;height:52px;min-width:0}
.g-hscroll{position:sticky;bottom:0;z-index:var(--z-chart-head);height:13px;margin-left:var(--gantt-left,300px);background:color-mix(in srgb,var(--panel) 88%,transparent);border-top:1px solid var(--line);cursor:default;touch-action:none}
.g-thumb{position:absolute;top:3px;bottom:3px;left:0;width:var(--thumb-w,40px);border-radius:6px;background:var(--line-2);transition:background-color var(--dur-s)}
.g-hscroll:hover .g-thumb,.g-thumb.dragging{background:var(--ink-3)}

@media (max-width:720px),(max-height:500px){.g-headbar{top:var(--topbar-h,58px)}}
.gantt.dragging{cursor:grabbing;user-select:none}
.gantt-grid{position:relative;display:grid;grid-template-columns:var(--gantt-left,300px) var(--gantt-track-w);min-width:max-content}
.g-corner{background:var(--panel-2);border-right:1px solid var(--line);display:flex;align-items:flex-end;padding:8px 12px;font-size:.6875rem;font-weight:700;letter-spacing:.4px;text-transform:uppercase;color:var(--ink-3)}
.g-head{position:absolute;top:0;left:0;height:52px;overflow:clip;will-change:transform}
.g-months,.g-ticks{position:absolute;left:0;right:0;height:26px}
.g-months{top:0}
.g-ticks{top:26px}
.g-month{position:absolute;top:0;height:26px;padding:6px 8px;font-size:.71875rem;font-weight:700;color:var(--ink-2);white-space:nowrap;border-left:1px solid var(--line-2);text-transform:capitalize;overflow:clip}
.g-tick{position:absolute;top:0;height:26px;display:grid;place-items:center;font-size:.6875rem;color:var(--ink-3);font-variant-numeric:tabular-nums;border-left:1px solid var(--line)}
.g-tick.weekend{color:var(--on-red);opacity:.85}
.g-tick.today{color:var(--btn-contrast);font-weight:700}
.g-today-badge{position:absolute;top:28px;transform:translateX(-50%);padding:1px 7px;border-radius:5px;background:var(--red);color:var(--red-contrast);font-size:.625rem;font-weight:700;letter-spacing:.2px;white-space:nowrap;z-index:1}
.g-bg{position:absolute;top:0;bottom:0;left:var(--gantt-left,300px);width:var(--gantt-track-w);pointer-events:none;z-index:0;background-image:var(--g-weekends,none),repeating-linear-gradient(to right,var(--line) 0 1px,transparent 1px var(--g-tick-w,84px));background-position:var(--g-weekend-shift,0) 0,var(--g-tick-shift,0) 0}
.g-today-line{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--red);opacity:.75;pointer-events:none;z-index:2}
.g-label{position:sticky;left:0;z-index:var(--z-sticky);background:var(--panel);border-right:1px solid var(--line);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px;padding:6px 10px 6px 12px;min-width:0;content-visibility:auto;contain-intrinsic-size:auto 31px}
.g-label.group{background:var(--panel-2)}
.g-label .g-toggle{width:22px;height:22px;flex:none;border-radius:5px;display:grid;place-items:center;color:var(--ink-3);font-size:14px;transition:transform .16s var(--ease-out)}
.g-label .g-toggle:hover{background:var(--panel-3);color:var(--ink)}
.g-label .g-toggle[aria-expanded="true"]{transform:rotate(90deg)}
.g-label .g-indent{flex:none;width:22px}
.g-label .g-text{flex:1;min-width:0}
.g-label .g-text b{display:block;font-size:.8125rem;font-weight:650;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.g-label .g-text span{display:block;font-size:.71875rem;color:var(--ink-3);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.g-label .g-text button,.g-label .g-text a{color:inherit;text-align:left;max-width:100%}
.g-label .g-text button:hover b,.g-label .g-text a:hover b{color:var(--accent-text);text-decoration:underline}
.g-label .g-pct{flex:none;font-size:.75rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink-2)}
/* Запасной размер задает содержимое без рамки и отступов: строка вне экрана весит те же 44 px, что и на экране */
.g-track{position:relative;border-bottom:1px solid var(--line);min-height:44px;content-visibility:auto;contain-intrinsic-size:auto 43px}
.g-track.group{background:color-mix(in srgb,var(--panel-2) 60%,transparent)}
.g-bar{position:absolute;top:13px;height:18px;border-radius:5px;background:var(--blue-bg);border:1px solid color-mix(in srgb,var(--blue) 45%,transparent);overflow:clip;display:flex;align-items:center;padding:0 6px;font-size:.6875rem;font-weight:650;color:var(--on-blue);white-space:nowrap;min-width:6px;cursor:pointer}
.g-bar>.fill{position:absolute;inset:0 auto 0 0;background:color-mix(in srgb,var(--blue) 30%,transparent);pointer-events:none}
.g-bar>span{position:sticky;left:calc(var(--gantt-left,300px) + 6px);overflow:hidden;text-overflow:ellipsis;max-width:100%}
.g-bar.planned{background:var(--panel-2);border-color:var(--line-2);color:var(--ink-2)}
.g-bar.planned>.fill{background:var(--panel-3)}
.g-bar.done{background:var(--green-bg);border-color:color-mix(in srgb,var(--green) 50%,transparent);color:var(--on-green)}
.g-bar.done>.fill{background:color-mix(in srgb,var(--green) 32%,transparent)}
.g-bar.late{background:var(--red-bg);border-color:color-mix(in srgb,var(--red) 50%,transparent);color:var(--on-red)}
.g-bar.late>.fill{background:color-mix(in srgb,var(--red) 26%,transparent)}
.g-bar.risk{background:var(--wip-bg);border-color:color-mix(in srgb,var(--wip) 55%,transparent);color:var(--on-wip)}
.g-bar.risk>.fill{background:color-mix(in srgb,var(--wip) 32%,transparent)}
.g-bar.proposed{background:repeating-linear-gradient(135deg,var(--purple-bg) 0 6px,var(--panel) 6px 12px);border-color:color-mix(in srgb,var(--purple) 50%,transparent);color:var(--on-purple)}
.g-bar.brigade{background:var(--cyan-bg);border-color:color-mix(in srgb,var(--cyan) 45%,transparent);color:var(--on-cyan)}
.g-bar.conflict{box-shadow:0 0 0 2px var(--red)}
.g-bar.group-bar{top:16px;height:12px;border-radius:4px;padding:0}
.g-bar:hover{filter:brightness(.97)}
.g-base{position:absolute;top:34px;height:3px;border-radius:2px;background:var(--ink-3);opacity:.55;pointer-events:none}
.g-delay{position:absolute;top:13px;height:18px;border-radius:0 5px 5px 0;background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--red) 30%,transparent) 0 4px,transparent 4px 8px);border:1px solid color-mix(in srgb,var(--red) 45%,transparent);border-left:0;pointer-events:none}
.g-busy{position:absolute;top:15px;height:14px;border-radius:4px;background:repeating-linear-gradient(135deg,var(--panel-3) 0 5px,var(--panel-2) 5px 10px);border:1px dashed var(--line-2);pointer-events:none}
.g-free{position:absolute;top:20px;height:4px;border-radius:2px;background:color-mix(in srgb,var(--green) 16%,transparent);pointer-events:none}
.g-overlap{position:absolute;top:9px;bottom:9px;background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--red) 28%,transparent) 0 4px,transparent 4px 8px);border-left:2px solid var(--red);border-right:2px solid var(--red);pointer-events:none}
.g-ms{position:absolute;top:15px;width:14px;height:14px;margin-left:-7px;transform:rotate(45deg);border-radius:2px;background:var(--cyan);border:2px solid var(--panel);box-shadow:0 0 0 1px var(--cyan);cursor:pointer;z-index:1}
.g-ms.late{background:var(--red);box-shadow:0 0 0 1px var(--red)}
.g-ms.contract{background:var(--panel);box-shadow:0 0 0 2px var(--cyan)}
.g-ms.finance{background:var(--wip);box-shadow:0 0 0 1px var(--wip);border-radius:50%;transform:none}
.g-ms.material{background:var(--pink);box-shadow:0 0 0 1px var(--pink);border-radius:50%;transform:none;width:10px;height:10px;margin-left:-5px;top:17px}
.g-ms.deadline{width:3px;height:30px;top:7px;margin-left:-1px;transform:none;border:0;border-radius:2px;background:var(--ink);box-shadow:none}
.g-legend{display:flex;flex-wrap:wrap;gap:6px 16px;padding:9px 14px;border-bottom:1px solid var(--line);background:var(--panel);font-size:.75rem;color:var(--ink-2)}
.g-legend span{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}
.g-legend i{display:inline-block;width:18px;height:10px;border-radius:3px;flex:none}
.g-legend i.l-fc{background:var(--blue-bg);border:1px solid color-mix(in srgb,var(--blue) 45%,transparent)}
.g-legend i.l-fact{background:color-mix(in srgb,var(--blue) 30%,transparent)}
.g-legend i.l-base{height:3px;background:var(--ink-3);opacity:.6}
.g-legend i.l-late{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--red) 30%,transparent) 0 4px,transparent 4px 8px);border:1px solid color-mix(in srgb,var(--red) 45%,transparent)}
.g-legend i.l-ms{width:10px;height:10px;transform:rotate(45deg);background:var(--cyan);border-radius:2px}
.g-legend i.l-fin{width:10px;height:10px;border-radius:50%;background:var(--wip)}
.g-legend i.l-mat{width:9px;height:9px;border-radius:50%;background:var(--pink)}
.g-legend i.l-today{width:2px;height:14px;background:var(--red);border-radius:1px}
.g-legend i.l-prop{background:repeating-linear-gradient(135deg,var(--purple-bg) 0 4px,var(--panel) 4px 8px);border:1px solid color-mix(in srgb,var(--purple) 50%,transparent)}
.g-legend i.l-conf{background:var(--cyan-bg);box-shadow:0 0 0 2px var(--red)}
.g-legend i.l-busy{background:repeating-linear-gradient(135deg,var(--panel-3) 0 4px,var(--panel-2) 4px 8px);border:1px dashed var(--line-2)}
.g-tip{position:fixed;z-index:var(--z-popup);max-width:320px;padding:10px 12px;border-radius:10px;background:var(--ink);color:var(--bg);font-size:.78125rem;line-height:1.45;box-shadow:var(--shadow-lg);pointer-events:none}
.g-tip b{display:block;font-size:.8125rem;margin-bottom:3px}
.g-tip .r{display:flex;justify-content:space-between;gap:14px}
.g-tip .r span{opacity:.75}
.g-tip .r strong{white-space:nowrap;flex:none}
.g-tip .r span:only-child{opacity:1}
.g-empty{grid-column:1/-1;padding:28px;text-align:center;color:var(--ink-3);font-size:.84375rem}

/* ===== Кабинет бригадира ===== */
.ws{max-width:760px;width:100%;margin:0 auto;display:flex;flex-direction:column;gap:16px}
.ws-hello{display:flex;align-items:flex-end;gap:12px}
.ws-hello h2{font-size:1.25rem;font-weight:800}
.ws-hello p{font-size:.84375rem;color:var(--ink-2)}
.ws-card{border:1px solid var(--line);border-radius:14px;background:var(--panel);overflow:hidden}
.ws-card-head{display:flex;align-items:flex-start;gap:12px;padding:14px 16px 10px}
.ws-card-head .avatar{margin-top:2px}
.ws-card-head h3{font-size:1rem;font-weight:750;overflow-wrap:anywhere}
.ws-card-head p{font-size:.8125rem;color:var(--ink-2);margin-top:2px}
.ws-card-body{padding:0 16px 14px;display:flex;flex-direction:column;gap:10px}
.ws-meta{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:.8125rem;color:var(--ink-2)}
.ws-meta b{color:var(--ink)}
.ws-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:12px 16px 16px;border-top:1px solid var(--line);background:var(--panel-2)}
.ws-actions .btn{min-height:48px;font-size:.875rem;white-space:normal}
.ws-actions .btn.primary{grid-column:1/-1}
.ws-tabbar{display:none}
.queue-strip{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid color-mix(in srgb,var(--wip) 40%,var(--line));background:var(--wip-bg);color:var(--on-wip);font-size:.8125rem}
.queue-strip .btn{margin-left:auto}

/* Выбор работ в отчёте */
.pick-list{display:flex;flex-direction:column;gap:8px}
.pick{border:1px solid var(--line-2);border-radius:12px;background:var(--panel);overflow:hidden}
.pick-head{display:flex;align-items:flex-start;gap:11px;padding:12px 14px;cursor:pointer}
.pick-head .check{flex:1;min-width:0}
.pick-head .check b{display:block;font-size:.875rem;overflow-wrap:anywhere}
.pick-head .check span{display:block;font-size:.75rem;color:var(--ink-3);margin-top:2px}
.pick.on{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber)}
.pick-body{padding:0 14px 14px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:10px}
.qty-input{display:flex;align-items:stretch}
.qty-input:has(.unit) input{border-radius:var(--r-sm) 0 0 var(--r-sm)!important}
.qty-input .unit{display:grid;place-items:center;min-width:46px;padding:0 10px;border:1px solid var(--line-2);border-left:0;border-radius:0 var(--r-sm) var(--r-sm) 0;background:var(--panel-2);font-size:.8125rem;color:var(--ink-2)}
.file-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:96px;padding:14px;border:1.5px dashed var(--line-2);border-radius:12px;background:var(--panel-2);color:var(--ink-2);font-size:.8125rem;text-align:center;cursor:pointer}
.file-drop:hover{border-color:var(--amber);color:var(--accent-text)}
.file-drop .ico{font-size:22px}
.file-drop input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.file-list{display:flex;flex-wrap:wrap;gap:8px}
.file-chip{position:relative;display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:9px;background:var(--panel);font-size:.75rem;max-width:100%}
.file-chip img{width:36px;height:36px;object-fit:cover;border-radius:6px}
.file-chip>span:not(.ico){overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}

/* Запуск объектов */
.launch-row-meta{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:.75rem;color:var(--ink-3);margin-top:3px}
.launch-sticky{position:sticky;bottom:0;z-index:var(--z-sticky);display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 16px;border:1px solid var(--line);border-radius:12px;background:var(--panel);box-shadow:var(--shadow-md)}
.launch-sticky b{font-size:.875rem}
.launch-sticky .spacer{flex:1}
.launch-sticky .ln-bar-info{display:flex;flex-direction:column;gap:2px;flex:1 1 100%;min-width:0}
.launch-sticky .ln-bar-info .faint{font-size:.78125rem}
.launch-sticky .ln-tpl{display:flex;align-items:center;gap:8px;font-size:.8125rem;font-weight:600;color:var(--ink)}
.launch-sticky .ln-tpl>span{white-space:nowrap}
@media (max-width:720px){.launch-sticky .ln-bar-info .faint{display:none}.launch-sticky .ln-tpl{flex:1 1 100%}.launch-sticky .ln-tpl .custom-control-button{flex:1;min-width:0}}
.table .custom-control-button{width:100%;max-width:100%;min-height:var(--h-sm);padding:5px 9px;font-size:.78125rem;border-radius:7px}
.cell-date input[type=date]{min-height:var(--h-sm)}

/* ===== Брейкпоинты ===== */
@media (max-width:1180px){
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grid-main{grid-template-columns:minmax(0,1fr)}
  .obj-head-stats{width:100%}
  .obj-stat{flex:1;min-width:0}
}
@media (max-width:980px){
  :root{--side-w:280px}
  .app{grid-template-columns:minmax(0,1fr)}
  .side{position:fixed;inset:0 auto 0 0;width:var(--side-w);transform:translateX(-102%);transition:transform .22s var(--ease-out);box-shadow:var(--shadow-lg)}
  .app.menu-open .side{transform:none}
  .side-backdrop{position:fixed;inset:0;z-index:calc(var(--z-side) - 1);background:rgba(14,20,17,.32)}
  .topbar .menu-btn{display:inline-grid}
  .topbar{padding:10px 16px;min-height:58px}
  .page-inner{padding:16px 16px 32px}
  .obj-head{padding:14px 16px 0}
  .grid-2{grid-template-columns:minmax(0,1fr)}
  .net span{display:none}
  .net{padding:0 9px}
}
@media (max-width:720px){
  .form-grid{grid-template-columns:minmax(0,1fr)}
  .toolbar .search{flex-basis:100%;max-width:none}
  .topbar-title p{display:none}
  .obj-head-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .obj-stat{border-left:0;border-top:1px solid var(--line)}
  .obj-stat:nth-child(-n+2){border-top:0}
  .obj-stat:nth-child(2n){border-left:1px solid var(--line)}
  .drawer{width:100vw;border-left:0}
  .drawer-foot .spacer{display:none}
  .drawer-foot .btn{flex:1 1 150px;min-width:0;white-space:nowrap}
  .drawer-body{padding:16px 16px 22px}
  .drawer-head{padding:14px 12px 12px 16px}
  .stage-row{grid-template-columns:minmax(0,1fr) 96px}
  .stage-row .stage-dates{display:none}
  .pick-body{grid-template-columns:minmax(0,1fr)}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .attn{grid-template-columns:minmax(0,1fr)}
  .page-inner:has(+ .ws-tabbar){padding-bottom:calc(88px + env(safe-area-inset-bottom))}
  .ws-tabbar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));position:fixed;left:0;right:0;bottom:0;z-index:var(--z-header);background:var(--panel);border-top:1px solid var(--line);padding:6px 6px calc(6px + env(safe-area-inset-bottom))}
  .ws-tabbar a{display:flex;flex-direction:column;align-items:center;gap:2px;min-height:48px;padding:4px 2px;border-radius:9px;color:var(--ink-3);font-size:.6875rem;font-weight:650;text-decoration:none}
  .ws-tabbar a .ico{font-size:20px}
  .ws-tabbar a.on{color:var(--accent-text);background:var(--nav-active-bg)}
  .feed-item{grid-template-columns:32px minmax(0,1fr);gap:10px;padding:12px 14px}
  .feed-item .feed-ico{width:32px;height:32px;font-size:16px}
  .report-line{grid-template-columns:minmax(0,1fr)}
  .report-line .row-actions{grid-auto-flow:row;grid-template-columns:minmax(0,1fr)}
  .panel-head{padding:12px 14px}
  .panel-body{padding:12px 14px}
  .list-row{padding:11px 14px}
  .toasts{left:12px;right:12px;bottom:12px;align-items:stretch}
  .toast{max-width:none}
  .seg{width:100%}
  .seg button,.seg a{flex:1 1 auto}
  .gantt{--gantt-left:200px}
}
@media (max-width:420px){
  .ws-actions{grid-template-columns:minmax(0,1fr)}
  .kpis{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}
  .kpi{padding:11px 12px}
  .kpi .kpi-v{font-size:1.375rem}
  .topbar-actions .btn>span:not(.ico){display:none}
  .topbar-actions .btn{padding:7px 10px}
}
@media (hover:none){
  .btn,.chip,.icon-btn{min-height:var(--h-lg)}
  .icon-btn{width:var(--h-lg);height:var(--h-lg)}
  .icon-btn.sm{width:40px;height:40px}
  .nav-link{min-height:var(--h-lg)}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
}

/* ===== Карточки вместо таблиц на телефоне ===== */
.m-cards{display:none}
@media (max-width:720px){
  .has-cards .table-wrap{display:none}
  .has-cards .m-cards{display:flex;flex-direction:column}
}
.m-card{display:flex;flex-direction:column;gap:8px;padding:12px 14px;border-top:1px solid var(--line);color:var(--ink);text-decoration:none;text-align:left;width:100%}
.m-card:first-child{border-top:0}
.m-card:hover{background:var(--panel-2);text-decoration:none}
.m-card-head{display:flex;align-items:center;gap:10px;min-width:0}
.m-card-head>div{min-width:0;flex:1}
.m-card-head b{display:block;font-size:.875rem;font-weight:650;overflow-wrap:break-word}
.m-card-head>div>span{display:block;font-size:.75rem;color:var(--ink-3)}
.m-card-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:.78125rem;color:var(--ink-2)}
.m-card-row .progress{flex:1 1 140px}

/* Запуск объектов */
.ln-result{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:8px 0 0 40px}
.ln-error{flex-basis:100%;font-size:.75rem;color:var(--on-red)}
.ln-why{font-size:.75rem;color:var(--ink-3)}
.ln-table tr.is-target td{background:var(--green-bg)}
.cell-obj>div>a.link-name{display:block;font-size:.84375rem;font-weight:650;color:var(--ink);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cell-obj>div>a.link-name:hover{text-decoration:underline;text-underline-offset:3px}

/* Снижение прогресса при новой версии */
.drop-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r-sm)}
.drop-line{display:grid;grid-template-columns:minmax(0,1fr) auto 16px auto;align-items:center;gap:10px;padding:10px 12px;font-size:.84375rem}
.drop-line+.drop-line{border-top:1px solid var(--line)}
.drop-line>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.drop-line>.num{color:var(--ink-3)}
.drop-line svg{width:14px;height:14px;color:var(--ink-3)}

/* Карточка, на которую привела ссылка из уведомления */
.ws-card.is-target{box-shadow:0 0 0 2px var(--ink)}

/* Кабинет бригадира: что уже отправлено и предложенные даты */
.ws-sent{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:.8125rem;font-weight:600;color:var(--on-green)}
.ws-sent svg{width:16px;height:16px;flex:none}
.ws-offered{display:flex;align-items:flex-start;gap:8px;margin:0 16px 14px;padding:10px 12px;border-radius:var(--r-sm);background:var(--purple-bg);color:var(--on-purple);font-size:.8125rem;line-height:1.4}
.ws-offered svg{width:16px;height:16px;flex:none;margin-top:1px}
.ws-wide{min-height:48px;width:100%;font-size:.875rem}

/* Строки документов и назначений: на телефоне кнопки уходят под текст */
.doc-row{grid-template-columns:auto minmax(0,1fr) auto}
.doc-ico{width:36px;height:36px;border-radius:10px;display:grid;place-items:center}
.asg-row{grid-template-columns:minmax(0,1fr) auto auto}
@media (max-width:720px){
  .doc-row{grid-template-columns:auto minmax(0,1fr)}
  .doc-row>.row-actions{grid-column:1/-1;justify-content:flex-start;flex-wrap:wrap}
  .asg-row{grid-template-columns:minmax(0,1fr) auto}
  .asg-row>.row-actions{grid-column:1/-1;justify-content:flex-start}
}

/* Таблицы с карточками и таблицы столбиком до 1180 px: рядом с меню им не хватает ширины */
.only-stack{display:none}
@media (max-width:1180px){
  .only-stack{display:inline-flex}
  .has-cards.cards-lg .table-wrap{display:none}
  .has-cards.cards-lg .m-cards{display:flex;flex-direction:column}
  .stack-table{min-width:0!important}
  .stack-table colgroup,.stack-table thead{display:none}
  .stack-table,.stack-table tbody{display:block;width:100%}
  .stack-table tr{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px;padding:14px 16px;border-bottom:1px solid var(--line)}
  .stack-table tr:last-child{border-bottom:0}
  .stack-table td{display:block;padding:0;border:0;min-width:0;text-align:left}
  .stack-table td.t-right{text-align:left}
  .stack-table td[data-label]::before{content:attr(data-label);display:block;margin-bottom:4px;font-size:.6875rem;font-weight:650;color:var(--ink-3)}
  .stack-table td.st-main,.stack-table td.st-actions{grid-column:1/-1}
  .stack-table td.st-actions .row-actions{justify-content:flex-start}
  .stack-table td.st-skip{display:none}
  .stack-table:has(.st-check) tr{padding-left:52px}
  .stack-table td.st-check{position:absolute;left:12px;top:16px;width:28px}
  .stack-table td.st-check:empty{display:none}
}
@media (max-width:560px){
  .stack-table tr{grid-template-columns:minmax(0,1fr)}
}

/* Ошибка у поля */
.field.invalid input,.field.invalid textarea,.field.invalid .custom-control-button{border-color:var(--on-red);box-shadow:0 0 0 3px color-mix(in srgb,var(--on-red) 14%,transparent)}
.field-error{display:block;margin-top:5px;font-size:.75rem;font-weight:600;color:var(--on-red)}

/* Предупреждения графика со ссылками на этапы */
.sch-warn summary{cursor:pointer;display:flex;align-items:center;gap:8px;list-style:none}
/* У .note строка: без колонки список вставал справа от заголовка узкой полосой */
.sch-warn{flex-direction:column;align-items:stretch;gap:0}
.sch-warn summary::-webkit-details-marker{display:none}
.sch-warn ul{margin:10px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.sch-warn li{display:flex;align-items:center;gap:12px;justify-content:space-between;padding-top:8px;border-top:1px solid color-mix(in srgb,currentColor 14%,transparent)}
.sch-warn li>span{min-width:0}
.sch-warn li>.btn{flex:none}
@media (max-width:720px){.sch-warn li{flex-direction:column;align-items:flex-start}}

/* Загрузка бригады на 4 недели */
.load-strip{display:flex;gap:2px;height:14px;align-items:stretch}
.load-strip i{flex:1;border-radius:2px;background:var(--panel-3)}
.load-strip i.busy{background:var(--cyan)}
.load-strip i.clash{background:var(--red)}

/* Свой крестик очистки в фильтре меню, без браузерного */
#side-filter::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none;display:none}

/* Вкладки и чипы, которые не помещаются: край затухает, видно, что список прокручивается */
@media (max-width:720px){
  .tabs:not(.at-end){mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent)}
  .ws-card-head h3{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
}
.queue-strip.denied{background:var(--red-bg);color:var(--on-red)}
.asg-row .sub{white-space:normal}
.mat-actions{max-width:220px;margin-left:auto}
@media (max-width:1180px){.mat-actions{margin-left:0;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:auto;max-width:none}}
[data-overlap]{display:flex;flex-direction:column;gap:12px}
[data-overlap]:empty{display:none}

/* Самые узкие экраны: названия на графике в две строки, подсказка панели прячется, уведомления над нижней панелью */
@media (max-width:420px){
  .g-label .g-text b{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.75rem}
  .panel-head>p{display:none}
}
@media (max-width:720px){
  body:has(.ws-tabbar) .toasts{bottom:calc(84px + env(safe-area-inset-bottom))}
}
.g-month>span{display:inline-block;white-space:nowrap}
/* Шкала и названия месяцев едут за прокруткой графика силами браузера, в том же кадре, что и полосы */
.g-linked{timeline-scope:--gx}
.g-linked .gantt{scroll-timeline:--gx x}

/* Главная: ближайшие события и фото на телефоне */
.up-row{grid-template-columns:56px 104px minmax(0,1fr)}
.ph-row{grid-template-columns:auto minmax(0,1fr) auto}
@media (max-width:720px){
  .up-row{grid-template-columns:52px minmax(0,1fr);row-gap:4px}
  .up-row>span:nth-child(2){grid-column:2;grid-row:1}
  .up-row>.cell{grid-column:2}
  .up-row>span:first-child{grid-row:1 / span 2}
  .ph-row{grid-template-columns:auto minmax(0,1fr)}
  .ph-row>.thumbs{grid-column:1 / -1;justify-content:flex-start}
}
.attn-tile.static:hover{transform:none}
.ln-table td{vertical-align:top}
@media (max-width:980px){.app:not(.menu-open) .side{box-shadow:none}}
@media (max-width:720px){.g-lag-tag{display:none}}
body:has(.drawer.show) .toasts{bottom:88px}
.m-card-row .progress{flex:0 0 170px}
.sch-warn summary b{white-space:nowrap}
@media (max-width:420px){.g-label .avatar{display:none}}
@media (max-width:720px){
  .note .actions .btn{flex:1 1 140px}
  .toolbar .seg.lg{max-width:100%;overflow-x:auto;scrollbar-width:none}
  .toolbar .seg.lg:not(.at-end){mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent)}
}

/* Телефон, в том числе боком: шапка объекта уезжает вместе с содержимым */
@media (max-width:720px), (max-height:500px){
  .main{overflow-y:auto;overscroll-behavior-y:contain}
  .page{flex:none;overflow:visible;min-height:auto}
  .topbar{position:sticky;top:0;z-index:var(--z-header)}
}
/* Длинные метки в строках отчета переносятся, а не растягивают карточку */
.report-line>div{min-width:0}
.report-line .rl-meta .tag{max-width:100%;white-space:normal;height:auto;line-height:1.3;padding-top:2px;padding-bottom:2px}
/* Телефон: все вкладки объекта и разделы площадки видны сразу, без прокрутки вбок */
@media (max-width:720px){
  .tabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:4px;overflow:visible;mask-image:none!important;-webkit-mask-image:none!important}
  .tabs .tab{justify-content:center;border-radius:var(--r-sm);padding:9px 6px;gap:5px;min-width:0}
  .tabs .tab.on{background:var(--nav-active-bg)}
  .toolbar .seg.lg{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:visible;mask-image:none!important;-webkit-mask-image:none!important;width:100%}
  .toolbar .seg.lg>button{justify-content:center}
}
@media (max-width:420px){.m-card-head{flex-wrap:wrap}.m-card-head>.tag{order:3;margin-left:40px}}

/* Круг 8: карточки, график боком, вкладки на средних ширинах, подпись бригадира */
@media (max-width:420px){.m-card-head>div{flex:1 1 calc(100% - 44px)}}
@media (min-width:721px) and (max-width:1180px){
  .tabs:not(.at-end){mask-image:linear-gradient(to right,#000 calc(100% - 40px),transparent);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 40px),transparent)}
}
@media (max-width:720px){.tabs:has(> .tab:nth-child(4):last-child){grid-template-columns:repeat(2,minmax(0,1fr))}}
.g-legend i.l-ms.late{background:var(--red)}
@media (max-width:720px){
  .toolbar .seg:not(.lg){max-width:100%;overflow-x:auto;scrollbar-width:none;flex-wrap:nowrap}
  .toolbar .seg:not(.lg):not(.at-end){mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent)}
}

/* ===== Движение: окна, экраны, плашки, списки, просмотр файлов ===== */
:root{--ease-in:cubic-bezier(.4,0,1,1);--dur-s:.14s;--dur-m:.22s;--dur-l:.28s}

/* Правое окно: выезжает справа, затемнение плавно, шаги внутри окна сдвигаются по направлению */
.drawer{transition:transform .17s var(--ease-out),box-shadow .17s,width .17s var(--ease-out)}
.drawer:not(.show){transition:transform .13s var(--ease-in);box-shadow:none}
.drawer.resizing{transition:none;user-select:none}
.drawer-backdrop{transition:opacity .13s var(--ease-out)}
.drawer-resize{position:absolute;top:0;bottom:0;left:-6px;width:12px;cursor:col-resize;touch-action:none;z-index:2}
.drawer-resize::after{content:"";position:absolute;top:50%;left:5px;width:3px;height:44px;transform:translateY(-50%);border-radius:3px;background:var(--line-2);opacity:0;transition:opacity var(--dur-s),background-color var(--dur-s)}
.drawer-resize:hover::after,.drawer-resize:focus-visible::after,.drawer.resizing .drawer-resize::after{opacity:1;background:var(--amber)}
.drawer-resize:focus-visible{outline:2px solid var(--amber);outline-offset:-2px}
body.col-resizing,body.col-resizing *{cursor:col-resize!important;user-select:none}
@media (max-width:720px){.drawer-resize{display:none}}
.step-forward{animation:step-forward var(--dur-m) var(--ease-out)}
.step-back{animation:step-back var(--dur-m) var(--ease-out)}
.step-swap{animation:step-swap .18s var(--ease-out)}
@keyframes step-forward{from{opacity:0;transform:translateX(18px)}to{opacity:1;transform:none}}
@keyframes step-back{from{opacity:0;transform:translateX(-18px)}to{opacity:1;transform:none}}
@keyframes step-swap{from{opacity:.25}to{opacity:1}}

/* Экран и вкладка объекта: новое содержимое проявляется, без прыжка и без белой вспышки */
.enter-screen{animation:enter-screen var(--dur-m) var(--ease-out)}
.enter-tab{animation:enter-tab .18s var(--ease-out)}
@keyframes enter-screen{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes enter-tab{from{opacity:.3}to{opacity:1}}
.enter-screen .attn-tile,.enter-screen .kpi{animation:tile-in .3s var(--ease-out) both}
.enter-screen .attn-tile:nth-child(2),.enter-screen .kpi:nth-child(2){animation-delay:.03s}
.enter-screen .attn-tile:nth-child(3),.enter-screen .kpi:nth-child(3){animation-delay:.06s}
.enter-screen .attn-tile:nth-child(4),.enter-screen .kpi:nth-child(4){animation-delay:.09s}
.enter-screen .attn-tile:nth-child(n+5){animation-delay:.12s}
@keyframes tile-in{from{opacity:0;transform:translateY(6px) scale(.985)}to{opacity:1;transform:none}}

/* Плашки, ошибки и строки, которые появляются или уходят после действия: высота меняется плавно, соседи не прыгают */
.reveal-in{overflow:hidden;animation:reveal-in .26s var(--ease-out) both}
.fade-in{animation:fade-in .2s var(--ease-out) both}
.reveal-out{overflow:hidden;pointer-events:none;animation:reveal-out .2s var(--ease-in) both}
.g-track.reveal-in,.g-label.reveal-in,.g-track.reveal-out,.g-label.reveal-out{min-height:0!important}
@keyframes reveal-in{from{opacity:0;max-height:0;margin-top:var(--reveal-gap,0);padding-top:0;padding-bottom:0}to{opacity:1;max-height:var(--reveal-h,600px)}}
@keyframes reveal-out{from{opacity:1;max-height:var(--reveal-h,600px)}to{opacity:0;max-height:0;margin-top:var(--reveal-gap,0);padding-top:0;padding-bottom:0;border-top-width:0;border-bottom-width:0}}
/* Ячейки графика растят саму высоту: у дорожки нет своего содержимого, max-height довел бы строку только до высоты подписи */
.g-track.reveal-in,.g-label.reveal-in{animation-name:reveal-in-h}
.g-track.reveal-out,.g-label.reveal-out{animation-name:reveal-out-h}
/* Подпись или подсказка, сменившая слова на месте, проявляется в новом тексте */
.text-swap{animation:text-swap .2s var(--ease-out)}
@keyframes text-swap{from{opacity:.25}to{opacity:1}}
@keyframes reveal-in-h{from{opacity:0;height:0;padding-top:0;padding-bottom:0}to{opacity:1;height:var(--reveal-h,44px)}}
@keyframes reveal-out-h{from{opacity:1;height:var(--reveal-h,44px)}to{opacity:0;height:0;padding-top:0;padding-bottom:0;border-bottom-width:0}}

/* Раскрывающиеся блоки: стрелка поворачивается сразу по нажатию */
.howto>summary,.sch-warn>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;width:max-content;max-width:100%;border-radius:6px}
/* Заголовок предупреждений растянут на всю плашку вместе с отступами: нажатие в любом ее месте раскрывает список */
.sch-warn>summary{width:auto;max-width:none;margin:-11px -13px;padding:11px 13px;border-radius:9px}
.howto>summary::-webkit-details-marker{display:none}
.howto>summary::before{content:"";flex:none;width:7px;height:7px;margin:0 2px 0 3px;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:rotate(-45deg);transition:transform var(--dur-m) var(--ease-out)}
.howto[open]:not(.closing)>summary::before{transform:rotate(45deg)}
.howto>summary:hover{color:var(--ink)}

/* Выпадающие списки и календарь выезжают от поля */
.custom-control-popup.opening{animation:popup-in .16s var(--ease-out)}
.custom-control-popup[data-side="top"].opening{animation-name:popup-in-up}
.custom-control-popup.closing{animation:popup-out .11s var(--ease-in) forwards;pointer-events:none}
@keyframes popup-in{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}
@keyframes popup-in-up{from{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:none}}
@keyframes popup-out{to{opacity:0;transform:translateY(-4px)}}
.custom-confirm-backdrop{animation:fade-in .16s var(--ease-out)}
.custom-confirm{animation:dialog-in .2s var(--ease-out)}
.custom-confirm-backdrop.leaving{animation:fade-out .15s var(--ease-in) forwards}
.custom-confirm-backdrop.leaving .custom-confirm{animation:dialog-out .15s var(--ease-in) forwards}
@keyframes fade-in{from{opacity:0}to{opacity:1}}
@keyframes fade-out{to{opacity:0}}
@keyframes dialog-in{from{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:none}}
@keyframes dialog-out{to{opacity:0;transform:translateY(6px) scale(.98)}}

/* Кнопки и плитки отвечают на нажатие */
.attn-tile:active,.kpi:active,.obj-link:active,.nav-link:active{transform:scale(.99)}
.tab::after{transition:left var(--dur-m) var(--ease-out),right var(--dur-m) var(--ease-out),opacity var(--dur-s)}
.tab:not(.on)::after{content:"";position:absolute;left:50%;right:50%;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--amber);opacity:0}
.toast{animation:toast-in .26s var(--ease-out)}
.toast.leaving{transition:opacity .2s var(--ease-in),transform .2s var(--ease-in)}

/* Просмотр файлов: на весь экран, фото всегда целиком, увеличение и перетаскивание */
.viewer{position:fixed;inset:0;z-index:var(--z-confirm);display:grid;grid-template-rows:auto minmax(0,1fr) auto;background:rgba(10,12,14,.92);color:#fff;animation:viewer-in .2s var(--ease-out)}
.viewer.leaving{animation:viewer-out .18s var(--ease-in) forwards}
@keyframes viewer-in{from{opacity:0}to{opacity:1}}
@keyframes viewer-out{to{opacity:0}}
.viewer-bar{display:flex;align-items:center;gap:10px;padding:10px 12px 10px 18px;min-width:0}
.viewer-count{flex:none;font-size:.8125rem;font-weight:600;opacity:.75;font-variant-numeric:tabular-nums}
.viewer-count:empty{display:none}
.viewer-title{flex:1;min-width:0;display:flex;flex-direction:column}
.viewer-title b{font-size:.875rem;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.viewer-title span{font-size:.75rem;opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.viewer-zoom{display:flex;align-items:center;gap:2px;padding:2px;border-radius:10px;background:rgba(255,255,255,.08)}
.viewer-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-width:36px;height:36px;padding:0 10px;border-radius:8px;color:#fff;font-size:.8125rem;font-weight:600;transition:background-color var(--dur-s)}
.viewer-btn:hover{background:rgba(255,255,255,.14)}
.viewer-btn .ico{font-size:18px}
.viewer-pct{min-width:58px;font-variant-numeric:tabular-nums}
.viewer-stage{position:relative;min-height:0;min-width:0;display:flex;padding:0 64px;overflow:hidden;touch-action:none}
.viewer-stage.zoomed{cursor:grab}
.viewer-stage.grabbing,.viewer-stage.grabbing img{cursor:grabbing!important}
.viewer-media{flex:1;min-width:0;min-height:0;display:flex;align-items:center;justify-content:center;animation:media-in .24s var(--ease-out)}
.viewer-media.slide-next{animation:media-next .24s var(--ease-out)}
.viewer-media.slide-prev{animation:media-prev .24s var(--ease-out)}
@keyframes media-in{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}
@keyframes media-next{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:none}}
@keyframes media-prev{from{opacity:0;transform:translateX(-24px)}to{opacity:1;transform:none}}
.viewer-media img{display:block;width:100%;height:100%;object-fit:contain;transform-origin:center;user-select:none;-webkit-user-drag:none;will-change:transform}
.viewer-media img.smooth{transition:transform .18s var(--ease-out)}
.viewer-media video{max-width:100%;max-height:100%;border-radius:6px;background:#000}
.viewer-media iframe{width:100%;height:100%;border:0;border-radius:8px;background:#fff}
.viewer-media.kind-pdf,.viewer-media.kind-text{padding-bottom:8px}
.viewer-text{width:min(920px,100%);max-height:100%;overflow:auto;margin:0;padding:18px 20px;border-radius:10px;background:var(--panel);color:var(--ink);font-size:.8125rem;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
.viewer-audio{display:flex;flex-direction:column;align-items:center;gap:16px;font-size:44px;opacity:.95}
.viewer-none{display:flex;flex-direction:column;align-items:center;gap:10px;max-width:360px;text-align:center;font-size:.875rem}
.viewer-none .ico{font-size:40px;opacity:.7}
.viewer-none span{opacity:.75;font-size:.8125rem}
.viewer-none .btn{margin-top:6px}
.viewer-spin{width:34px;height:34px;border:3px solid rgba(255,255,255,.25);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}
.viewer-nav{position:absolute;top:50%;width:46px;height:46px;margin-top:-23px;border-radius:50%;display:grid;place-items:center;background:rgba(255,255,255,.12);color:#fff;font-size:22px;transition:background-color var(--dur-s),transform var(--dur-s)}
.viewer-nav:hover{background:rgba(255,255,255,.22)}
.viewer-nav:active{transform:scale(.94)}
.viewer-nav.prev{left:10px}.viewer-nav.next{right:10px}
.viewer-hint{padding:8px 16px 14px;text-align:center;font-size:.75rem;opacity:.75}
.viewer-hint:empty{display:none}
@media (max-width:720px){
  .viewer-stage{padding:0 4px}
  .viewer-nav{top:auto;bottom:10px;margin-top:0;width:44px;height:44px}
  .viewer-btn .lbl{display:none}
  .viewer-zoom .viewer-pct{min-width:48px}
}

/* Строка документа открывает просмотр по нажатию в любом месте */
.doc-row.is-open{cursor:pointer;transition:background-color var(--dur-s)}
.doc-row.is-open:hover{background:var(--panel-2)}
.doc-row.is-open:focus-visible{outline-offset:-2px}

@media (prefers-reduced-motion:reduce){
  .enter-screen,.enter-tab,.reveal-in,.reveal-out,.step-forward,.step-back,.step-swap,.viewer,.viewer-media{animation:none!important}
}

/* Несколько отметок в один день */
.g-ms.many{width:18px;height:18px;margin-left:-9px;top:13px;display:grid;place-items:center}
.g-ms-count{transform:rotate(-45deg);font-size:.5625rem;font-weight:800;color:#fff;line-height:1}
.g-ms.material.many .g-ms-count,.g-ms.finance.many .g-ms-count{transform:none}
.g-ms.material.many{width:16px;height:16px;margin-left:-8px;top:14px}
.launch-sticky.bar-in{animation:bar-in .24s var(--ease-out)}
.launch-sticky.bar-out{animation:bar-out .18s var(--ease-in) forwards}
@keyframes bar-in{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes bar-out{to{opacity:0;transform:translateY(12px)}}

/* Подбор материала из номенклатуры */
.cat-results{display:flex;flex-direction:column;gap:6px;margin-top:6px}
.cat-results.is-loading .cat-list,.cat-results.is-loading .cat-empty{opacity:.55;transition:opacity var(--dur-s)}
.cat-hint{font-size:.78125rem}
.cat-loading{display:flex;align-items:center;gap:10px;padding:10px 4px;font-size:.8125rem;color:var(--ink-2)}
.cat-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r-sm);max-height:300px;overflow-y:auto;overscroll-behavior-y:contain;animation:fade-in .16s var(--ease-out)}
.cat-item{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name unit" "meta unit";gap:2px 12px;align-items:center;padding:9px 12px;text-align:left;border-top:1px solid var(--line);transition:background-color var(--dur-s)}
.cat-item:first-child{border-top:0}
.cat-item:hover,.cat-item:focus-visible{background:var(--panel-2);outline-offset:-2px}
.cat-name{grid-area:name;font-size:.84375rem;font-weight:600;overflow-wrap:anywhere}
.cat-meta{grid-area:meta;font-size:.71875rem;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cat-unit{grid-area:unit;padding:2px 8px;border-radius:6px;background:var(--panel-2);font-size:.75rem;font-weight:650;color:var(--ink-2)}
.cat-empty{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:12px;border:1px dashed var(--line-2);border-radius:var(--r-sm);font-size:.8125rem}
.cat-empty span{color:var(--ink-3)}
.cat-chosen{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--green) 40%,var(--line));border-radius:var(--r-sm);background:var(--green-bg)}
.cat-chosen>div{flex:1;min-width:0}
.cat-chosen b{display:block;font-size:.875rem;overflow-wrap:anywhere}
.cat-chosen span:not(.feed-ico){display:block;font-size:.75rem;color:var(--ink-2)}
.cat-chosen .feed-ico{width:34px;height:34px;flex:none}
.cat-chosen .feed-ico{display:grid;place-items:center;border-radius:10px;background:var(--panel);color:var(--on-green);font-size:18px}
.est-card{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--panel-2);color:inherit;text-decoration:none;transition:background-color var(--dur-s),border-color var(--dur-s)}
a.est-card:hover{background:var(--panel-3);border-color:var(--line-2)}
.est-card>div{flex:1;min-width:0}
.est-card b{display:block;font-size:.84375rem;overflow-wrap:anywhere}
.est-card>div>span{display:block;font-size:.75rem;color:var(--ink-2)}
.est-open{display:inline-flex;align-items:center;gap:6px;flex:none;font-size:.8125rem;font-weight:600;color:var(--ink-2)}
a.est-card:hover .est-open{color:var(--ink)}
.bl-estimate{display:flex;flex-direction:column;gap:16px}
/* Блоки, которые окно наполняет само, не дают своего отступа: их содержимое стоит в общем ряду окна, пустые не видны */
.drawer-body [data-version-host],.drawer-body [data-estimate-host],.drawer-body [data-mismatch-host],.drawer-body [data-impact],.drawer-body [data-overlap]{display:contents}
.palette-dot{flex:none;width:18px;height:18px;border-radius:6px;background:linear-gradient(135deg,#2e7958 0 50%,#4c936e 50% 100%);box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.feed-item.is-replaced>div{opacity:.72}
.chip .count{margin-left:2px;padding:0 6px;border-radius:10px;background:var(--panel-3);color:var(--ink-2);font-size:.6875rem;font-weight:700;opacity:1}
.chip[aria-pressed="true"] .count{background:rgba(255,255,255,.2);color:inherit}
/* Выход рядом с именем, как в задачнике: красная подсветка предупреждает о действии */
.who{position:relative}
.who>div{flex:1}
.side-logout{margin-left:auto;color:var(--ink-3);transition:background-color var(--dur-s),color var(--dur-s)}
.side-logout:hover{background:var(--red-bg);color:var(--on-red)}
.field .search input:not([type=checkbox]):not([type=radio]):not([type=file]){padding-left:36px;min-height:var(--h-lg)}
@media (max-width:720px){.doc-row>.row-actions{display:grid;grid-auto-flow:row;grid-template-columns:repeat(auto-fit,minmax(92px,1fr));width:100%}.doc-row>.row-actions .btn{min-width:0;white-space:nowrap}}
/* Превью фото проявляется после загрузки, пока грузится, рамка мерцает как скелет */
.thumb img,.gallery-item .pic img{animation:fade-in .24s var(--ease-out)}
.thumb[data-loading]:not(:has(img)),.gallery-item .pic[data-loading]:not(:has(img)){background:linear-gradient(90deg,var(--panel-2) 0%,var(--panel-3) 40%,var(--panel-2) 80%);background-size:300% 100%;animation:shimmer 1.4s ease-in-out infinite}
