@font-face{font-family:'Onest';font-style:normal;font-weight:400 800;font-display:swap;src:url('/vendor/fonts/onest-cyrillic.woff2') format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'Onest';font-style:normal;font-weight:400 800;font-display:swap;src:url('/vendor/fonts/onest-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
/* ============ Виртуальный штаб — премиальная тема ============ */
:root{ /* СВЕТЛАЯ тема в цветах флага РФ (заказчик 12.07.2026): белый, синий #0039A6, красный #D52B1E */
  --bg:#f6f7f9; --bg2:#eef0f4;
  --panel:#ffffff; --panel2:#f1f3f7; --panel3:#e8ebf133;
  --line:rgba(16,24,40,.09); --line2:rgba(16,24,40,.16);
  --text:#16181d; --muted:#5b6472; --faint:#98a1b0;
  --acc:#0039a6; --acc2:#1e56c8; --acc-grad:var(--acc); /* курс «плоско» (18.07): токен погашен классом — все бывшие градиенты стали флаг-синим */
  --ok:#1e8e5a; --warn:#e0a800; /* важно = жёлтый (возврат 12.07.2026) */ --danger:#d52b1e;
  --r:16px; --r-sm:11px; --r-lg:22px;
  --pad-x:16px; /* боковой отступ контента; шапка компенсирует ровно его */
  --list-inset:14px; /* ЕДИНАЯ ЛЕВАЯ ЛИНИЯ: 1px рамка + 13px паддинг карточки = левый край текста.
                        На неё завязаны заголовок раздела и заголовки секций (класс, один источник). */
  --view-inset:21px; /* то же во вью Штаба (modal-card: 1px + 20px) */
  /* Геометрия плавающей «+» — ОДИН источник; запас под ней вычисляется формулой,
     поэтому подвинуть кнопку и «забыть» запас нельзя (заказчик 21.07). */
  --tabbar-base:68px;   /* высота таб-бара (замер) — origin запаса выше него */
  --panel-h:60px;       /* высота нижней панели групп (ИИ/Команда/Я) — БЫЛА вне формулы: --fab-bottom:128px случайно равнялся 68+60, и «+» КАСАЛСЯ панели (зазор 0px, ревизия 26.07) */
  --fab-bottom:calc(var(--tabbar-base) + var(--panel-h) + 12px); /* = 140px: зазор 12px — решение, а не совпадение */
  --fab-size:56px;      /* диаметр кнопки */
  --fab-gap:44px;       /* желаемый зазор «низ карточки → верх кнопки» */
  --fab-reserve:calc(var(--fab-bottom) + var(--fab-size) - var(--tabbar-base) + var(--fab-gap)); /* = 160px; safe-area в неравенстве сокращается */
  --sphere-size:56px;   /* диаметр центральной сферы «/» в таб-баре */
  --sphere-lift:6px;    /* насколько сфера приподнята над баром (margin-top: −lift) */
  --sphere-glyph:30px;  /* размер слэша внутри сферы */
  --shadow:0 10px 28px -14px rgba(16,24,40,.18);
  --shadow-acc:0 14px 40px -16px rgba(0,57,166,.35);
  --ff:'Onest',-apple-system,BlinkMacSystemFont,system-ui,sans-serif; /* Onest — фирменный шрифт (заказчик 20.07.2026), вендорен локально */
  /* Глифы-аффордансы полей-пикеров — ОДИН источник каждого SVG (--faint), не дублируем data-URI */
  --glyph-calendar:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%2398a1b0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 2v4'/%3E%3Cpath d='M16 2v4'/%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M3 10h18'/%3E%3C/svg%3E");
  --glyph-clock:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%2398a1b0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpolyline points='12 6 12 12 16 14'/%3E%3C/svg%3E");
  --glyph-chevron:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%2398a1b0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
}
*{box-sizing:border-box}
::selection{background:rgba(0,57,166,.16);color:var(--text)} /* выделение — фирменный синий полутон (better-typography) */
/* App-shell: страница прибита к экрану, прокрутка только внутри .main / .login-screen */
html,body{margin:0;padding:0;height:100%;overflow:hidden;overscroll-behavior:none}
/* touch-action:manipulation на корне — «потолок» для ВСЕХ экранов: отключает double-tap-zoom
   (он ломал раскладку), оставляя прокрутку и pinch-zoom. Потомки могут только сузить (pan-y/none). */
html{-webkit-text-size-adjust:100%;touch-action:manipulation}
body{
  font-family:var(--ff); color:var(--text); background:var(--bg);
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  font-synthesis:none; /* Onest variable 400–800: не даём браузеру подделывать вес/курсив фейком (better-typography) */
}
/* защита от выхода за края на смартфоне */
img,svg,video,canvas{max-width:100%}
/* Класс «поле выходит за границы»: ЖЁСТКИЙ потолок для ВСЕХ контролов форм — никакой input/select/
   textarea/button не может быть шире родителя, что бы ни решила его внутренняя UA-вёрстка.
   min-width:0 снимает встроенный минимум (во flex/grid он раздувает поле за край). */
input,select,textarea,button{max-width:100%;min-width:0}
.r-body,.auto-task,.bc-title,.gc-title,.tl-item,.assist-box,.r-summary,.mic-status{overflow-wrap:anywhere}
.tab-panel{max-width:100%}
.hidden{display:none!important}
/* Скрыто визуально, доступно скринридеру (для aria-live статуса и подписей) */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
/* Видимый фокус ТОЛЬКО для клавиатуры/навигации (не мешает тач-нажатиям) */
:focus-visible{outline:2px solid var(--acc2);outline-offset:2px;border-radius:6px}
input:focus-visible,textarea:focus-visible,select:focus-visible{outline:none}
button:focus:not(:focus-visible),[role="button"]:focus:not(:focus-visible){outline:none}
.muted{color:var(--muted)} .faint{color:var(--faint)}
.mono{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.spacer{flex:1}
.error,.err{color:#c22415}
a{color:var(--acc2)}

/* ---------- кнопки ---------- */
button{font-family:inherit;cursor:pointer;border:none;font-size:14px;transition:.16s ease}
button:active{transform:translateY(1px)}
/* КЛАСС «:active стирает базовый transform» (28.07, корень «тянущихся крестиков» всех пяти заходов):
   глобальная прижимка кнопок ПЕРЕЗАПИСЫВАЛА центрирующий translateY(-50%) крестика — при зажатии
   кнопка падала на полвысоты вниз (и залипала на iOS). У элементов с позиционным transform
   :active обязан КОМБИНИРОВАТЬ смещения, а не заменять. */
.date-clear:active{transform:translateY(calc(-50% + 1px))}
.eye-btn:active{transform:translateY(calc(-50% + 3.5px + 1px))} /* тот же класс: :active КОМБИНИРУЕТ, не заменяет (ревизия 28.07, третий повтор — глаз пароля) */
/* TOUCH-SAFE СЕМЕЙСТВО (идея ревизии 28.07): ЕДИНЫЙ набор для всех малых интерактивов —
   анти-драг, анти-лупа, анти-каллаут. Новая кнопка ОБЯЗАНА добавиться в этот список
   (гейт в selfcheck), а не копировать правила по памяти — четвёртого повтора класса не будет. */
.date-clear,.eye-btn,.swipe-del-btn,.swipe-restore-btn,.swipe-ok-btn,.view-x,.sort-btn,.nb-x,.sec-toggle{
  user-select:none;-webkit-user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none}
.date-clear svg,.eye-btn svg,.swipe-del-btn svg,.swipe-restore-btn svg,.swipe-ok-btn svg,.view-x svg,.sort-btn svg,.nb-x svg{
  pointer-events:none;-webkit-user-drag:none}
button:disabled{opacity:.5;cursor:default}
/* ЕДИНАЯ СИСТЕМА КНОПОК (заказчик 19.07.2026): primary и ghost СОРАЗМЕРНЫ — один паддинг,
   радиус, кегль; primary плоская (без градиента и свечения — дизайн-курс). Второй размер — .sm/.mini. */
.primary{background:var(--acc);color:#fff;padding:13px 20px;border-radius:12px;font-weight:600;font-size:16px;letter-spacing:.2px}
.primary:hover{filter:brightness(1.08)}
.primary.big{width:100%;padding:14px;margin-top:6px}
.ghost{background:rgba(16,24,40,.05);color:var(--text);border:1px solid var(--line2);padding:13px 20px;border-radius:12px;font-weight:600;font-size:16px}
.ghost:hover{background:rgba(16,24,40,.08);border-color:var(--line2)}
.ghost.block{width:100%;text-align:left;margin-bottom:7px}
.danger-text{color:#c22415}
/* Имя развели с классом пыха: сфера-кнопка получает `ok` от flashSphere, и общий `.ok`
   красил её зелёной кнопкой. Кнопочный стиль — только `ok-btn`. */
.ok-btn{background:rgba(39,199,154,.16);color:#1e8e5a;border:1px solid rgba(39,199,154,.32);padding:9px 15px;border-radius:11px;font-weight:600}
.ok-btn:hover{background:rgba(39,199,154,.26)}
.warn{background:rgba(245,166,35,.15);color:#8a5a00;border:1px solid rgba(245,166,35,.3);padding:9px 15px;border-radius:11px;font-weight:600}
.warn:hover{background:rgba(245,166,35,.24)}
.danger{background:#FBEAE8;color:#c22415;border:1px solid rgba(213,43,30,.25);padding:9px 15px;border-radius:11px;font-weight:600}
.danger:hover{background:rgba(255,93,108,.24)}
.icon-btn{background:transparent;color:var(--text);width:42px;height:42px;border-radius:12px;display:grid;place-items:center;border:1px solid transparent}
.icon-btn:hover{background:rgba(16,24,40,.07)}

textarea,input,select{
  font-family:inherit;font-size:15px;color:var(--text);
  background:rgba(16,24,40,.045);border:1px solid var(--line2);border-radius:12px;
  padding:12px 14px;width:100%;outline:none;transition:.16s
}
textarea{resize:vertical;line-height:1.5}
/* Фокус полей — ОДНА толстая синяя рамка (2px), без тонкой и без ореола (заказчик 12.07.2026) */
textarea:focus,input:focus,select:focus{border-color:transparent;box-shadow:0 0 0 2px var(--acc);outline:none}
select{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23b3b3b3' stroke-width='2'><path d='M2 4l4 4 4-4'/></svg>");background-repeat:no-repeat;background-position:right 14px center;padding-right:34px}
input[type=range]{padding:0;height:6px}
/* Класс «date-инпут выползает за карточку»: iOS-WebKit рисует поля даты/времени своей внутренней
   вёрсткой и игнорирует width:100%. Укрощаем ВЕСЬ тип полей (date/time/datetime-local/month):
   блок строго по ширине контейнера, свой вид, стабильная высота (пустые на iOS иначе схлопываются). */
input[type=date],input[type=time],input[type=datetime-local],input[type=month]{display:block;width:100%;min-width:0;max-width:100%;-webkit-appearance:none;appearance:none;min-height:47px;text-align:left}
input[type=date]::-webkit-date-and-time-value,input[type=time]::-webkit-date-and-time-value,input[type=datetime-local]::-webkit-date-and-time-value{text-align:left}
input[type=checkbox]{width:auto}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}

/* ============ ЭКРАН ВХОДА ============ */
.login-screen{position:fixed;inset:0;display:grid;place-items:center;padding:24px;overflow:auto;overscroll-behavior:none}
.login-aurora{position:absolute;inset:0;z-index:0;background:
  radial-gradient(60% 50% at 25% 18%,rgba(0,57,166,.10),transparent 60%),
  radial-gradient(55% 45% at 80% 85%,rgba(213,43,30,.07),transparent 60%),
  radial-gradient(40% 35% at 90% 10%,rgba(0,57,166,.06),transparent 60%);
  filter:blur(8px)}
.login-card{position:relative;z-index:1;width:100%;max-width:380px;background:rgba(255,255,255,.86);
  backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);
  border:1px solid var(--line2);border-radius:var(--r-lg);padding:34px 30px;box-shadow:0 24px 60px -24px rgba(16,24,40,.25)}
.login-card h1{margin:18px 0 26px;font-size:38px;font-weight:800;letter-spacing:-1px;text-align:center}
.login-card p{margin:0 0 22px;text-align:center;font-size:13.5px}
.setup-hint{color:var(--muted);line-height:1.5}
.login-link{display:block;width:auto;margin:16px auto 0;text-align:center;font-size:13px}
.login-card label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:14px;font-weight:500}
.login-card label input{margin-top:7px}
/* Поле пароля с глазом: перечёркнутый глаз = скрыто (звёздочки при вводе), открытый = пароль виден. */
.pwd-wrap{position:relative;display:block}
.pwd-wrap input{width:100%;padding-right:46px}
.eye-btn{position:absolute;right:6px;top:50%;transform:translateY(calc(-50% + 3.5px));width:36px;height:36px;
  display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--faint);
  cursor:pointer;border-radius:10px;-webkit-tap-highlight-color:transparent}
.eye-btn:hover{color:var(--muted)}
.eye-btn .eye-open{display:none}
.eye-btn .eye-off{display:block}
.eye-btn.show .eye-open{display:block}   /* глаз открыт — пароль виден */
.eye-btn.show .eye-off{display:none}
.login-logo{display:flex;justify-content:center}
.logo-mark{width:52px;height:52px;border-radius:15px;background:var(--acc);position:relative}
.logo-mark::after{content:"";position:absolute;inset:0;border-radius:15px;background:radial-gradient(circle at 30% 25%,rgba(255,255,255,.55),transparent 55%)}
#login-error{margin-top:14px;text-align:center;font-size:13px}

/* ============ КАРКАС ПРИЛОЖЕНИЯ ============ */
.app-screen{position:fixed;inset:0;display:flex;flex-direction:column;overflow:hidden}
/* Непрозрачная крышка под чёлкой (viewport-fit=cover): прокручиваемые карточки НЕ видны
   за системными иконками ни в одном разделе. Выше контента, ниже верхних панелей/меню. */
.app-screen::before{content:"";position:fixed;top:0;left:0;right:0;height:env(safe-area-inset-top);background:var(--bg);z-index:25;pointer-events:none}
.app-aurora{position:absolute;inset:0;z-index:0;pointer-events:none;background:
  radial-gradient(50% 40% at 85% -5%,rgba(0,57,166,.06),transparent 60%),
  radial-gradient(45% 40% at 0% 100%,rgba(213,43,30,.05),transparent 60%)}
/* ---------- нижний таб-бар (основная навигация в один тап) ---------- */
/* Нижняя панель управления Задачами: одна строка над таб-баром, зона большого пальца */
.board-panel{flex:none;order:1;display:flex;gap:8px;align-items:stretch;
  padding:6px max(12px,env(safe-area-inset-right)) 7px max(12px,env(safe-area-inset-left));
  background:#fff;border-top:1px solid var(--line)} /* серая плашка ПО ЦЕНТРУ: 6+1рамка сверху = 7 снизу (заказчик 21.07) */
.tabbar.joined{border-top:none;background:#fff} /* линия между панелью и таб-баром убрана */
.board-panel .seg{flex:1;margin-bottom:0}
.sort-btn.on{color:var(--acc)}
.pt-meta{color:var(--muted);font-size:13px;margin-top:2px}
/* Входящие Уточнить/Согласовать — ПЛАШКИ-КНОПКИ заказчика (финал по вердикту UX-критика 20.07:
   рамка+радиус = семантика кнопки-входа; вкладки/полосы/сегменты для этих входов ЗАПРЕЩЕНЫ) */
/* Плашки входящих удалены (заказчик 21.07): секции «Уточнить»/«Принять» живут прямо в «Я».
   Карточки секций ЧИСТЫЕ: без значков, кнопки и вопрос раскрываются тапом по карточке. */
.inbox-clarify .tactions,.inbox-approve .tactions,.inbox-ai .tactions{display:none}
.inbox-clarify .task-row.open .tactions,.inbox-approve .task-row.open .tactions,.inbox-ai .task-row.open .tactions{display:flex}
.inbox-clarify .q-mark{display:none} /* секция сама говорит «здесь вопросы» — маркер не дублируем */
.cal-dates{display:flex;gap:10px} .cal-dates .fld{flex:1} /* пары полей формы события */
.danger-btn{background:#c22415 !important;border-color:transparent !important} /* опасное подтверждение («Вернуть») — красная кнопка */
.ib-gate{display:block;width:100%;text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:13px 14px;font-size:16px;font-weight:600;color:var(--acc);margin-bottom:10px;-webkit-tap-highlight-color:transparent}
.mini.ok-btn{color:#1e7c45;border-color:#bfe0cd}
/* Тап-зоны мини-целей ≥44px (WCAG 2.5.5): невидимое расширение, вид не меняется */
.q-mark,.tdate.over,.pend-ic{position:relative}
.q-mark::after,.tdate.over::after,.pend-ic::after{content:'';position:absolute;inset:-12px}

/* Приоритет — маркер по тексту (полутон, текст остаётся тёмным); clone — перенос строк красится корректно */
.mk-u{background:#fcebe8;border-radius:4px;padding:1px 5px;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.mk-i{background:#f7f0d9;border-radius:4px;padding:1px 5px;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.map-card{max-width:none;width:100%}
#map-box{height:min(62vh,520px);border-radius:12px;overflow:hidden;margin:4px 0 2px;background:#e8ecf1}
.leaflet-container{font:inherit}
.exec-card{margin-top:4px}
.exec-status{margin:14px 0 4px;font-size:14px;color:var(--muted)}
.exec-actions{display:flex;flex-direction:column;gap:10px;margin-top:16px}
.exec-actions button{padding:14px;font-size:16px}
.zone-ok{color:#1e7c45}
.zone-out{color:var(--danger)}
.tl-list{margin-top:18px;border-top:1px solid var(--line);padding-top:10px}
.tl-row{display:flex;justify-content:space-between;font-size:13px;color:var(--muted);padding:4px 0}
.staff-role{font-size:11px;font-weight:600;color:var(--acc);letter-spacing:.02em;margin-top:1px}

/* Под FAB — пустая позиция в конце списков (заказчик 12.07.2026): последняя карточка
   прокручивается выше кнопки, свайп-зоны не перекрываются «плюсом» */
#tab-board{padding-bottom:var(--fab-reserve)} /* запас под FAB — снаружи крестика корзины */
#tab-field{padding-bottom:var(--fab-reserve)}
#staff-view-team{padding-bottom:var(--fab-reserve)}
#tab-cal{padding-bottom:var(--fab-reserve)} /* запас под cal-fab — был упущен при заведении Календаря (заказчик 24.07) */

/* Плавающий «+» (канон Todoist): справа внизу, над панелью групп и таб-баром */
.board-fab{position:fixed;right:16px;bottom:calc(var(--fab-bottom) + env(safe-area-inset-bottom));z-index:35; /* смещение и размер — из переменных; запас под кнопкой считается из них же (класс «FAB не налезает») */
  width:var(--fab-size);height:var(--fab-size);border-radius:50%;background:var(--acc);color:#fff;
  display:grid;place-items:center;
  transition:transform .12s;-webkit-tap-highlight-color:transparent}
.board-fab:active{transform:scale(.92)}

/* Полоска состояния сети (паттерн Telegram «Connecting…»): между контентом и таб-баром */
.net-bar{flex:none;order:1;z-index:29;text-align:center;font-size:12.5px;font-weight:600;
  color:var(--muted);background:rgba(38,38,38,.92);border-top:1px solid var(--line);
  padding:6px 12px;letter-spacing:.2px}
.net-bar.off{color:#8a5a00} /* офлайн — тёплый янтарный, не тревожно-красный */
.tabbar{position:relative;flex:none;order:2;z-index:30;display:flex;align-items:center;
  padding:4px max(8px,env(safe-area-inset-right)) max(6px,calc(env(safe-area-inset-bottom) - 10px)) max(8px,env(safe-area-inset-left));
  background:rgba(255,255,255,.9);backdrop-filter:blur(22px) saturate(1.3);-webkit-backdrop-filter:blur(22px) saturate(1.3);
  border-top:1px solid var(--line);box-shadow:0 -6px 20px -14px rgba(16,24,40,.15)}
/* подписи словами под иконками (заказчик 20.07.2026, канон Авито) */
.tbar-lbl{font-size:10.5px;font-weight:600;letter-spacing:.01em;line-height:1;white-space:nowrap}
@media (max-width:380px){ .tbar-lbl{font-size:9.5px;letter-spacing:0} } /* «План-график» (69px) не влезал в кнопку ≤380px и ломался в 2 строки — iPhone SE/8/mini (ревизия 26.07) */
.tbar-btn{color:var(--muted)} /* неактивные читаемы на улице (WCAG ~7:1), активная — синяя */
.tbar-btn{position:relative;flex:1 1 0;min-width:0;min-height:44px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:transparent;color:var(--faint);padding:4px 2px;border-radius:14px;
  -webkit-tap-highlight-color:transparent;transition:color .16s,transform .12s}
.tbar-ico{display:grid;place-items:center;width:30px;height:30px}
.tbar-btn svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.tbar-btn.active{color:var(--acc2)}
.tbar-btn:active{transform:scale(.9)}
/* центральная «/» из эмблемы — крупная приподнятая медная сфера (переход на главную) */
.tbar-voice .tbar-ico{width:var(--sphere-size);height:var(--sphere-size);margin-top:calc(-1 * var(--sphere-lift));border-radius:50%;background:var(--acc)} /* размер/подъём — из переменных нижней зоны; плоско, без градиента/свечения */
.tbar-voice svg{width:var(--sphere-glyph);height:var(--sphere-glyph);color:#fff;stroke:#fff;stroke-width:2.6}
.tbar-voice:active .tbar-ico{transform:scale(.94)}
/* красная точка на разделе (профиль/согласование) — у верхнего края иконки */
/* Бейдж таб-бара: точка с белым кольцом-«вырезом» (обводка цвета фона — не грязная тень) + мягкое появление */
.tbar-btn .badge.dot{position:absolute;top:7px;left:calc(50% + 7px);min-width:8px;width:8px;height:8px;padding:0;border-radius:50%;background:var(--danger);box-shadow:0 0 0 2.5px #fff;animation:popIn .25s cubic-bezier(.34,1.56,.64,1)}
.badge.dot.calm{background:var(--acc)}
.twait{font-variant-numeric:tabular-nums}
.form-atts{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.form-atts:empty{display:none} /* тишина при нуле */
.fa-row{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--muted);min-height:36px}
.fa-row .fa-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.fa-row .fa-x{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:none;border:0;color:var(--faint);position:relative;user-select:none;-webkit-user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;touch-action:none}
.fa-row .fa-x::before,.fa-row .fa-x::after{content:'';position:absolute;left:50%;top:50%;width:12px;height:2px;background:currentColor;border-radius:1px}
.fa-row .fa-x::before{transform:translate(-50%,-50%) rotate(45deg)}
.fa-row .fa-x::after{transform:translate(-50%,-50%) rotate(-45deg)}
.task-atts{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.task-atts a{font-size:13px;color:var(--acc);text-decoration:none;border-bottom:1px solid rgba(0,57,166,.25)}
.doc-card{width:100%;max-width:680px;height:76dvh;padding:0;overflow:hidden} /* документ читается внутри приложения (29.07: window.open в PWA — без выхода) */
.doc-card iframe{display:block;width:100%;height:100%;border:0;border-radius:inherit;background:#fff}
.ai-sum{color:var(--muted);font-size:13.5px;line-height:1.45;margin:4px 0 2px;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden} /* решение прямо в карточке «на приёмке» (28.07) */
.q-mark.ai-ask{color:var(--acc);border-color:currentColor} /* «ждёт ответа» — рабочий синий, не тревога */ /* возраст ожидания — тихое слово в мете (28.07) */ /* входящие БЕЗ просрочки — рабочий сигнал, не тревога (совет 26.07: красный нёс 4 смысла) */
@keyframes popIn{from{transform:scale(0)}to{transform:scale(1)}}
.brand{display:flex;align-items:center;gap:9px;font-weight:700;letter-spacing:-.2px}
.emblem{display:block;flex:none}
.icon-btn{width:46px;height:46px}
.toast{position:fixed;left:50%;bottom:calc(26px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(16px);
  background:#1f2430;border:none;color:#fff;padding:11px 17px;border-radius:12px;
  font-size:14px;box-shadow:0 14px 34px -14px rgba(16,24,40,.35);z-index:90;opacity:0;pointer-events:none;transition:.22s;max-width:88vw;text-align:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.brand-text{font-size:16px}

@keyframes fade{from{opacity:0}to{opacity:1}}
/* ---------- раздел «Профиль» ---------- */
/* Карточка руководителя в Профиле: БЕЗ цветного ребра — цветное ребро в системе
   сигналит «удаляемое свайпом» (Команда), у руководителя такого жеста нет. */
/* карточка админа наследует общее серое ребро .staff-row — частных override'ов нет */
/* Действия профиля — карточки-строки вплотную под профилем (не бледный текст вдали) */
.profile-actions{display:flex;flex-direction:column;gap:10px} /* зазор как в списках Задач/Команды */
.profile-actions .ghost{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px;margin:0;text-align:left;color:var(--text);font-weight:500;font-size:15px} /* margin:0 гасит глобальный .ghost.block; зазоры задаёт ТОЛЬКО gap — как в списках Задач/Команды */
.profile-actions .ghost:hover{background:var(--panel2,var(--panel));border-color:var(--line2)}
.profile-actions .danger-text{color:#c22415}
.badge{background:var(--danger);color:#fff;font-size:11px;font-weight:700;min-width:19px;height:19px;border-radius:10px;display:inline-grid;place-items:center;padding:0 5px;margin-left:auto}

/* ---------- основная область ---------- */
.main{position:relative;z-index:1;flex:1 1 auto;min-height:0;width:100%;overflow-y:auto;overflow-x:hidden;overscroll-behavior:none;touch-action:pan-y;scrollbar-gutter:stable;-webkit-overflow-scrolling:touch}
.main-inner{width:100%;max-width:920px;margin:0 auto;min-height:100%;display:flex;flex-direction:column;padding:max(18px,env(safe-area-inset-top)) var(--pad-x) 40px}
.tab-panel{flex:1 0 auto}
#tab-orch{display:flex;flex-direction:column;justify-content:center;overflow:hidden}
#tab-staff{display:flex;flex-direction:column}
/* Инвайт/Пароль/Выход — одиночная карточка по центру экрана (не прижата кверху); 10vh — оптический подъём над таб-баром */
.staff-view-center{flex:1;display:flex;flex-direction:column;justify-content:center;padding-bottom:10vh}
.panel-head{display:flex;align-items:center;gap:12px;margin-bottom:16px}
/* Заголовок раздела (канон 21.07): фирменный синий; первая буква выровнена по первой букве
   текста в карточках ниже (карточка списка: 1px рамка + 13px паддинг = 14px). */
.panel-title{font-size:20px;font-weight:700;letter-spacing:-.3px;margin:0 0 0 var(--list-inset);color:var(--acc);
  border-bottom:3px solid var(--acc);padding-bottom:2px}
.panel-title{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none} /* удержание = «Сообщить»: лупа/каллаут не перехватывают жест (28.07) */ /* подчёркнут, как вкладки-пресеты (заказчик 21.07) */
#tab-staff.viewing .panel-title{margin-left:var(--view-inset)} /* во вью Штаба карточка modal-card: 1px + 20px */

/* ---------- плашка уведомлений ---------- */
.notif-banner{display:flex;flex-wrap:wrap;align-items:center;gap:10px;background:#EAF0FB;border:1px solid rgba(0,57,166,.25);border-radius:14px;padding:11px 13px;margin-bottom:18px}
.notif-banner .nb-ico{font-size:20px}
.notif-banner .nb-text{flex:1;font-size:14px;line-height:1.4}
.primary.sm{padding:8px 15px;font-size:13.5px}
.nb-x{background:transparent;color:var(--muted);font-size:15px;padding:4px 8px;border-radius:8px}
.nb-x:hover{color:var(--text);background:rgba(16,24,40,.07)}

/* ============ ГЛАВНЫЙ ЭКРАН — голос ============ */
.hero{display:flex;flex-direction:column;align-items:center;text-align:center;padding:104px 0 16px}
.mic-fab{position:relative;overflow:hidden;width:clamp(212px,60vw,272px);height:clamp(212px,60vw,272px);border-radius:50%;
  background:transparent;color:#fff;display:grid;place-items:center;margin-top:14px;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none;
  box-shadow:inset 0 0 0 1px rgba(0,57,166,.16);transition:box-shadow .4s ease}
/* пустая сфера — только наложенные друг на друга асимметричные баббл-грани */
.bub{position:absolute;border:1.6px solid rgba(30,86,200,.5);border-radius:50%;
  background:radial-gradient(circle at 36% 30%, rgba(0,57,166,.1), rgba(0,57,166,0) 70%);
  transition:border-color .4s ease}
.bub.b1{inset:3%;animation:auraMorph 9s ease-in-out infinite, auraSpin 22s linear infinite}
.bub.b2{inset:12%;border-color:rgba(0,57,166,.42);animation:auraMorph 7s ease-in-out infinite reverse, auraSpin 28s linear infinite reverse}
.bub.b3{inset:22%;border-color:rgba(96,140,235,.5);animation:auraMorph 12s ease-in-out infinite, auraSpin 18s linear infinite}
.mic-fab.rec{transform:scale(.97)}
/* живой медный ореол под микрофоном */
.mic-wrap{position:relative;display:grid;place-items:center;margin-top:14px;isolation:isolate}
.mic-aura{position:absolute;z-index:0;width:124%;height:124%;pointer-events:none;
  background:radial-gradient(circle at 40% 36%, rgba(96,140,235,.62), rgba(0,57,166,.34) 44%, rgba(0,57,166,0) 66%);
  filter:blur(14px);opacity:.72;
  border-radius:44% 56% 57% 43% / 53% 44% 56% 47%;
  animation:auraMorph 9s ease-in-out infinite, auraSpin 22s linear infinite}
.mic-wrap .mic-fab{margin-top:0;z-index:1}
@keyframes auraMorph{
  0%,100%{border-radius:42% 58% 56% 44% / 50% 44% 56% 50%}
  25%{border-radius:62% 38% 40% 60% / 56% 58% 42% 44%}
  50%{border-radius:46% 54% 36% 64% / 38% 50% 50% 62%}
  75%{border-radius:38% 62% 60% 40% / 60% 40% 60% 40%}
}
@keyframes auraSpin{0%{transform:rotate(0deg) scale(1)}50%{transform:rotate(180deg) scale(1.08)}100%{transform:rotate(360deg) scale(1)}}
.mic-fab.rec ~ .mic-aura,.mic-wrap:has(.rec) .mic-aura{animation-duration:3.5s,9s;opacity:1}
@media (prefers-reduced-motion:reduce){.mic-aura{animation:none}}
.mic-fab:hover{transform:translateY(-2px) scale(1.02)}
.mic-rings{position:absolute;inset:0;border-radius:50%;pointer-events:none}
/* запись: грани краснеют + пульс-кольца */
.mic-fab.rec{box-shadow:inset 0 0 0 1px rgba(242,97,78,.28)}
.mic-fab.rec .bub{border-color:rgba(242,97,78,.62)}
.mic-fab.rec .mic-rings::before,.mic-fab.rec .mic-rings::after{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid rgba(242,97,78,.55);animation:pulse 1.8s ease-out infinite}
.mic-fab.rec .mic-rings::after{animation-delay:.9s}
/* ДВА пыха (заказчик 26.07): СИНИЙ — контент взят в работу (кому угодно), СИРЕНЕВЫЙ — не взято
   (тишина, нечитаемый файл, сбой). Зелёного и красного у пыхов НЕТ; ok и ai — один синий. */
.mic-fab.ok .bub,.mic-fab.ai .bub{border-color:rgba(108,150,235,.82)}
.mic-fab.ok,.mic-fab.ai{box-shadow:inset 0 0 0 1px rgba(108,150,235,.34), 0 0 50px -8px rgba(80,125,225,.5)}
/* сиреневая — «не взято». Не легаси-бренд-фиолетовый, а семантика состояния */
.mic-fab.nf .bub{border-color:rgba(170,120,236,.86)}
.mic-fab.nf{box-shadow:inset 0 0 0 1px rgba(170,120,236,.36), 0 0 52px -8px rgba(150,95,230,.58)}
.mic-fab.busy{animation:busyPulse 1.1s ease-in-out infinite}
/* Свечение ФОНА в такт отклику сферы: взято в работу — синим, тишина — сиреневым */
.flash-bg{position:absolute;inset:0;z-index:0;pointer-events:none;opacity:0;transition:opacity .5s ease}
.flash-bg.show{opacity:1}
.flash-bg.ok,.flash-bg.ai{background:radial-gradient(125% 85% at 50% 42%, rgba(80,125,225,.18), transparent 60%)}
.flash-bg.nf{background:radial-gradient(125% 85% at 50% 42%, rgba(150,95,230,.24), transparent 60%)}
/* запись голоса: фон краснеет ВМЕСТЕ со сферой (держится всё время записи, не вспышка) */
.flash-bg.rec{opacity:1;background:radial-gradient(125% 85% at 50% 42%, rgba(242,97,78,.26), transparent 62%)}
@keyframes busyPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.045)}}
@media (prefers-reduced-motion:reduce){.bub{animation:none}}
@keyframes pulse{0%{transform:scale(1);opacity:.7}100%{transform:scale(1.55);opacity:0}}
.mic-status{display:none}

.compose{width:100%;max-width:640px;margin:22px auto 0;background:rgba(16,24,40,.035);
  border:1px solid var(--line2);border-radius:var(--r);padding:12px;box-shadow:var(--shadow)}
.compose textarea{background:transparent;border:none;padding:6px 8px;font-size:15.5px;min-height:26px}
.compose textarea:focus{box-shadow:none}
.compose-bar{display:flex;align-items:center;gap:8px;margin-top:6px}
.chip-btn{display:inline-flex;align-items:center;gap:7px;background:rgba(16,24,40,.05);color:var(--text);
  border:1px solid var(--line2);padding:8px 13px;border-radius:10px;font-weight:500;font-size:13.5px}
.chip-btn:hover{background:rgba(16,24,40,.09)}
.attachments{display:flex;flex-wrap:wrap;gap:7px;margin:4px 2px 0}
.attachments:empty{display:none}
.att-chip{display:inline-flex;align-items:center;gap:8px;background:rgba(0,57,166,.12);
  border:1px solid rgba(0,57,166,.3);border-radius:10px;padding:6px 9px;font-size:12.5px;max-width:240px}
.att-chip .att-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
.att-chip .att-kind{color:var(--acc2);font-size:11px;text-transform:uppercase;letter-spacing:.4px}
.att-chip.bad{background:rgba(255,93,108,.12);border-color:rgba(255,93,108,.3)}
.att-chip.load{opacity:.7}
.att-x{cursor:pointer;color:var(--muted);font-weight:700;padding:0 2px}
.att-x:hover{color:#fff}

/* ---------- драфт диспетчера ---------- */
#orch-draft,#orch-result{max-width:640px;margin:18px auto 0}
.draft-card{border-radius:var(--r);padding:18px;border:1px solid var(--line2);background:var(--panel);box-shadow:var(--shadow);animation:rise .3s ease}
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.draft-card.ai{border-left:3px solid var(--acc)}
.draft-card.human{border-left:3px solid var(--ok)}
.draft-kind{font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--acc2);font-weight:700;margin-bottom:12px}
.draft-card.human .draft-kind{color:#1e8e5a}
.ag-list{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.ag-pick{display:flex;align-items:center;gap:11px;background:rgba(16,24,40,.045);border:1px solid var(--line);border-radius:11px;padding:11px 13px;cursor:pointer}
.ag-pick:hover{background:rgba(16,24,40,.07)}
.ag-pick .ag{font-weight:500}
.chain-flow{font-size:15px;font-weight:500;line-height:1.5;margin-bottom:8px}
.chain-flow .arr{color:var(--acc2);font-weight:700;margin:0 2px}
/* Премиальный лейбл поля: микро-капс, разрядка, тусклый — «дорогой» ритм формы */
.fld{display:block;font-size:11px;letter-spacing:.6px;text-transform:uppercase;color:var(--faint);margin-bottom:15px;font-weight:700}
.fld textarea,.fld input,.fld select{margin-top:8px}
.ht-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.flag-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px}
/* Флаги — пилюли-переключатели (без сырых чекбоксов): активна → медная заливка.
   Индикатор — аккуратная CSS-точка цвета приоритета (никаких эмодзи). */
/* Дата: ПОЛЕ с нашим текстом («31 июля 2026», без «г.»; пусто = «Позже»); тап по полю = нативный
   календарь (пикер прозрачным ровно по полю: min-height:0 гасит глобальные 47px — иначе невидимый
   инпут вылезал вниз и перехватывал тапы по вкладкам пресетов, класс «невидимый оверлей») */
/* Утилита «поле-пикер»: правый глиф-аффорданс; иконку задаёт --glyph (calendar/clock/chevron).
   Новое поле-пикер получает аффорданс, сославшись на нужную переменную — data-URI не дублируется. */
.fld-glyph{background-image:var(--glyph);background-repeat:no-repeat;background-position:right 12px center;padding-right:38px}
.date-wrap{position:relative;display:block;margin-top:8px}
.date-wrap input[type=date],.date-wrap input[type=time]{position:absolute;inset:0;width:100%;height:100%;min-height:0;margin:0;opacity:0}
/* Третий заход (pointer-events:none на инпуте) ОТМЕНЁН 28.07: showPicker на iOS не работает для дат —
   поле переставало вводить дату вообще. Нативный тап по полю открывает системный пикер, как всегда;
   «тянущийся крестик» лечится четвёртым слоем: CSS-крест + touchstart-глушение на самой кнопке. */
.date-view{display:block;background:var(--panel) var(--glyph-calendar) no-repeat right 12px center;border:1px solid var(--line);border-radius:12px;padding:12px 38px 12px 14px;font-size:15px;min-height:47px;box-sizing:border-box;text-transform:none;letter-spacing:normal;font-weight:400;color:var(--text)} /* глиф-аффорданс, что поле — пикер (ревизия 22.07) */
.date-view.time{background-image:var(--glyph-clock)} /* «Время» — глиф часов вместо календаря */
.date-view.later{color:var(--text)} /* «Позже» = ЦВЕТ ДАТЫ ЯВНО: inherit брал faint от .fld (класс «inherit в цветном родителе») */
/* Свой «×»-сброс (заказчик 24.07): системный clear спрятанного native-инпута ненадёжен под
   -webkit-appearance:none + opacity:0 — не полагаемся на невидимый нативный контрол, аффорданс явный. */
.date-clear{position:absolute;right:36px;top:50%;transform:translateY(-50%);width:26px;height:26px;display:none;align-items:center;justify-content:center;background:none;border:0;color:var(--muted);-webkit-tap-highlight-color:transparent;z-index:2;
  user-select:none;-webkit-user-select:none;-webkit-user-drag:none;touch-action:none} /* none, не manipulation: manipulation РАЗРЕШАЕТ панорамирование — жест с крестика утекал в скролл модалки (28.07) */
/* Крест — ЧИСТЫЙ CSS (27.07, четвёртый заход): в кнопке больше нет SVG — iOS нечего
   распознавать как перетаскиваемое изображение. */
.date-clear::before,.date-clear::after{content:'';position:absolute;left:50%;top:50%;width:14px;height:2px;background:currentColor;border-radius:1px}
.date-clear::before{transform:translate(-50%,-50%) rotate(45deg)}
.date-clear::after{transform:translate(-50%,-50%) rotate(-45deg)}
.date-clear svg{pointer-events:none;-webkit-user-drag:none} /* легаси-правило, кнопка теперь без svg */
.date-wrap{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none} /* лупа и iOS-предпросмотр удержания выключены */
.date-wrap *{-webkit-touch-callout:none;-webkit-user-drag:none} /* класс целиком: ни один потомок поля-даты не тянется */
.date-wrap.has-value .date-clear{display:flex}
.date-wrap.has-value .date-view{padding-right:64px}

/* Поле «Задача» с флагами в правом нижнем углу (заказчик 20.07): статус присваивается при наборе */
.task-field{position:relative;display:block;margin-top:8px}
.task-field:focus-within textarea{border-color:transparent;box-shadow:0 0 0 2px var(--acc);outline:none} /* рамка живёт, пока работаешь с полем (вкл. флаги) */
.task-field textarea{margin-top:0;width:100%;padding-bottom:44px;box-sizing:border-box;resize:none} /* угол принадлежит флагам, ресайз-грип убран (ревизия 22.07) */
.flag-corner{position:absolute;right:10px;bottom:10px;display:flex;align-items:center;gap:6px;text-transform:none;letter-spacing:normal;
  background:var(--panel);border-radius:10px;padding:2px 2px 2px 8px} /* ПЛОСКАЯ подложка (заказчик 30.07: длинный текст читался ПОД кнопками при прокрутке) */
/* Скрепка — В УГЛУ поля «Суть» после «Важно» (заказчик 30.07: ссылка «Прикрепить» была незаметной).
   Тап-зона 44px псевдоэлементом, сам глиф компактный — как канон тап-целей. */
.clip-btn{position:relative;width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:none;border:0;color:var(--muted);padding:0;
  user-select:none;-webkit-user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;touch-action:manipulation}
.clip-btn::after{content:'';position:absolute;inset:-7px} /* тап-зона 44px */
.clip-btn svg{pointer-events:none;-webkit-user-drag:none}
.clip-btn.on,.clip-btn:hover{color:var(--acc)} /* не наследует капс лейбла */

/* Срочно/Важно — МАРКЕРЫ как в задачах (заказчик 20.07.2026): серый полутон по умолчанию,
   при выборе — алый/жёлтый полутон; без пилюль и точек */
.flag-chk{position:relative;display:inline-flex;align-items:center;font-size:14.5px;font-weight:500;color:var(--text);
  text-transform:none;letter-spacing:normal;
  padding:4px 9px;border-radius:4px;background:#eef0f4;
  cursor:pointer;-webkit-tap-highlight-color:transparent;user-select:none;transition:background .16s}
.flag-chk input{position:absolute;opacity:0;pointer-events:none;margin:0}
.flag-chk:has(input:checked){background:#E4F3EA;color:#1e7c45} /* выбор без роли-цвета (инвайт: тех/полевой) — зелёный, как возврат из корзины */
.flag-chk.fu:has(input:checked){background:#fcebe8;color:var(--text)}
.flag-chk.fi:has(input:checked){background:#f7f0d9;color:var(--text)}
.flag-chk:active{transform:scale(.96)}
.btn-row{display:flex;gap:10px;flex-wrap:wrap;align-items:stretch}
.btn-row>button{flex:1 1 0} /* кнопки одного ряда — одной ширины и высоты */

/* ---------- карточки шагов оркестрации ---------- */
.step-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px;margin-bottom:14px;box-shadow:var(--shadow);animation:rise .3s ease}
.step-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.step-n{width:26px;height:26px;border-radius:8px;background:var(--acc-grad);color:#fff;display:grid;place-items:center;font-size:13px;font-weight:700;flex:none}
.copy-step,.submit-step{font-size:12.5px;padding:6px 11px}

/* ---------- результат агента / общий вывод ---------- */
.r-title{font-size:21px;font-weight:700;letter-spacing:-.3px;margin:6px 0 8px}
.r-summary{color:var(--muted);font-size:14.5px;margin-bottom:12px;padding-left:12px;border-left:2px solid var(--line2)}
.r-body{line-height:1.62;font-size:15px}
.r-body h1,.r-body h2,.r-body h3{letter-spacing:-.2px;margin:18px 0 8px}
.r-body h1{font-size:19px}.r-body h2{font-size:17px}.r-body h3{font-size:15.5px}
.r-body ul{padding-left:20px;margin:8px 0}
.r-body li{margin:4px 0}
.r-body code{background:rgba(16,24,40,.07);padding:1.5px 6px;border-radius:6px;font-size:13px}
.r-body p{margin:9px 0}
.r-block{margin-top:16px;background:rgba(16,24,40,.03);border:1px solid var(--line);border-radius:12px;padding:13px 15px}
.r-block h4{margin:0 0 7px;font-size:12.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}
.r-block ul{margin:0;padding-left:18px}.r-block li{margin:3px 0;font-size:14px}
.r-block.gates{background:rgba(245,166,35,.07);border-color:rgba(245,166,35,.25)}
.r-block.gates h4{color:#8a5a00}
.copy-btn{float:right;font-size:12.5px;padding:6px 12px}
.submit-row{margin-top:18px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}

/* ============ АГЕНТЫ (ручной режим) ============ */
.work-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:18px;align-items:start}
.work-input{padding:18px}
.field{display:block;font-size:12.5px;color:var(--muted);margin-bottom:14px;font-weight:500}
.field select,.field textarea{margin-top:7px}
.hint{font-size:12px;color:var(--faint);margin:-8px 0 14px}
.controls{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin-bottom:16px}
.inline{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.inline select{width:auto;padding:7px 30px 7px 11px}
.inline.checkbox{gap:6px}
.status{margin-top:12px;font-size:13px;color:var(--muted)}
.status.err{color:#c22415}
.output-empty{color:var(--faint);text-align:center;padding:50px 20px;border:1px dashed var(--line2);border-radius:var(--r)}
.output{padding:20px}

/* ============ ДОСКА ЗАДАЧ ============ */
.board-list{display:grid;gap:13px}
.board-card{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--faint);border-radius:var(--r);padding:16px;box-shadow:var(--shadow)}
.board-card.p-standard{border-left-color:var(--acc)}
.bc-head{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:12.5px;margin-bottom:9px}
.bc-title{font-size:15.5px;font-weight:500;line-height:1.45;margin-bottom:10px}
.bc-checks{display:flex;flex-direction:column;gap:7px;margin-bottom:12px}
.chk{display:flex;align-items:center;gap:9px;font-size:14px;color:var(--muted);cursor:pointer}
.bc-actions{display:flex;gap:9px;flex-wrap:wrap}
.bc-actions button{font-size:13px;padding:8px 14px}
[class^=st-ht-]{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:7px;background:rgba(16,24,40,.07);color:var(--text)}
.st-ht-new{background:#EAF0FB;color:var(--acc2)}
.st-ht-in_progress{background:rgba(245,166,35,.16);color:#8a5a00}
.st-ht-done{background:rgba(39,199,154,.16);color:#1e8e5a}
.st-ht-accepted{background:#E4F3EA;color:#1e7c45}
.st-ht-rework{background:#FBEAE8;color:#c22415}
.badge.ok-b{background:rgba(39,199,154,.18);color:#1e8e5a}
.badge.bad-b{background:#FBEAE8;color:#c22415}
.bc-head .badge{min-width:auto;height:auto;padding:3px 8px;font-weight:600;border-radius:7px}
.badge.warn-b{background:rgba(245,166,35,.18);color:#8a5a00}
.badge.clar-b{background:#f9efd1;color:#8a5a00}
.clarify-box{background:rgba(30,86,200,.1);border:1px solid rgba(30,86,200,.3);border-radius:11px;padding:10px 13px;font-size:13.5px;margin-bottom:11px;line-height:1.45}
.clarify-box.wait{background:rgba(245,166,35,.08);border-color:rgba(245,166,35,.25);color:#8a5a00}
/* Ответ на уточнение (25.07): переписка «вопрос → ответ». Вопрос — приглушённой строкой сверху,
   ответ — основным текстом. Зелёного не берём: это не «готово», а сообщение. */
.clarify-box.answer{background:var(--panel);border-color:var(--line)}
.clarify-box.answer .ans-q{display:block;color:var(--muted);font-size:12.5px;margin-bottom:4px}
/* Инлайн-редактор задачи: бесшовный (без коробки-в-коробке) — отделён hairline-линией,
   поля тихой заливкой без рамок, всё с новой строки. Современный «quiet» стиль. */
.task-editor{margin-top:14px;padding:14px 0 2px;border-top:1px solid var(--line);
  animation:sheetUp .22s cubic-bezier(.32,.72,0,1)}
.task-editor .fld{margin-bottom:13px}
.task-editor textarea,.task-editor input{display:block;background:rgba(16,24,40,.05);border:1px solid transparent;border-radius:12px;padding:12px 14px;font-size:15px;transition:border-color .16s,box-shadow .16s,background .16s}
.task-editor textarea:focus,.task-editor input:focus{background:rgba(16,24,40,.07);border-color:transparent;box-shadow:0 0 0 2px var(--acc)}
.task-editor .te-due{width:auto;min-width:170px;margin-top:8px} /* дата — СВОЕЙ строкой под лейблом, не наезжает */
.task-editor .btn-row{margin-top:16px;gap:8px;flex-wrap:nowrap}

/* стильная иконка-редактирования (только у админа): угол карточки задачи и в шапке ИИ-карточки */
.task>.task .tmain{padding-right:22px}
.ai-head /* авто-постановка с голоса */
.auto-line{font-size:14.5px;margin-bottom:8px}
.auto-task{font-size:15.5px;line-height:1.5;white-space:pre-wrap;background:rgba(16,24,40,.035);border:1px solid var(--line);border-radius:11px;padding:12px 14px}
.auto-check{margin:10px 0 0;padding-left:20px;font-size:14px;color:var(--muted)}
.auto-check li{margin:3px 0}

/* ---------- доска задач (todo) ---------- */
.seg-row{display:flex;gap:8px;margin-bottom:16px}
.seg-row .seg{flex:1;margin-bottom:0}
.sort-btn{display:inline-flex;align-items:center;gap:6px;background:transparent;border:none;padding:6px;color:var(--muted);font-size:14px;font-weight:600;white-space:nowrap;-webkit-tap-highlight-color:transparent} /* голый глиф в шапке (канон Го/Авито) */
#sort-btn{min-width:0;color:var(--muted)} /* серый, как корзина; без искусственного разноса (заказчик 20.07) */ /* фикс-ширина под самый длинный режим («Фамилия») — кнопка не прыгает при переключении */
.seg{display:flex;gap:5px;background:rgba(16,24,40,.045);border:1px solid var(--line);border-radius:13px;padding:4px;margin-bottom:16px}
.seg-btn{flex:1;background:transparent;color:var(--muted);padding:9px 10px;border-radius:10px;font-weight:600;font-size:14px}
.seg-btn.on{background:var(--acc);color:#fff}
.seg-btn svg{display:block;margin:0 auto} /* иконка выхода — нейтральная, по центру пилюли */
.task-list{display:flex;flex-direction:column;gap:0}
/* Скруглённые КАРТОЧКИ (возврат 20.07.2026): группа = стопка карточек с зазорами; секции — на сером между ними */
.task-group{display:flex;flex-direction:column;gap:8px}
.task-group + .task-group{margin-top:10px}
.sec-head{padding:16px var(--list-inset) 8px;margin:0;font-variant-numeric:tabular-nums}
/* Сворачиваемые входящие (заказчик 26.07, образец — секции Todoist): заголовок = кнопка со
   счётчиком и шевроном. Вес и цвет — сигнал: Просрочено красным, Уточнить/Принять тёмным жирным;
   свёрнутые строки компактны, текущий день остаётся главным контентом экрана. */
.sec-toggle{display:flex;align-items:center;gap:6px;width:100%;background:none;border:0;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;
  color:var(--text);font-size:12.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase; /* та же типографика, что у дневных — отличие ТОЛЬКО цветом (иначе тройка читалась разнобоем, рендер 26.07) */
  min-height:44px} /* тап-мишень канона — первая строка была 28px */
.sec-head.sec-toggle:first-child{padding-top:0} /* первому заголовку min-height уже даёт высоту — двойной паддинг не нужен */
.sec-toggle.overdue-head{color:#c22415}
.sec-toggle .sec-chev{color:var(--faint);transition:transform .15s;flex:none}
.sec-toggle .sec-chev{transform:rotate(-90deg)} /* СВЁРНУТО = вправо (заказчик 30.07, нативный стандарт iOS) */
.sec-toggle.open .sec-chev{transform:none}         /* РАЗВЁРНУТО = вниз */
/* БЛОК ВНИМАНИЯ (заказчик 31.07, вариант D): секции-внимание — ОДИН объект из того же материала,
   что карточки задач (белый, рамка, радиус 14, ширина ровно по карточкам), строки разделены
   хайрлайном; счётчик справа, шеврон у края. Дневные заголовки остаются серым капсом — регистры
   разведены, «что ждёт меня» больше не сливается с «планом дня». */
.att-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden;margin:2px 0 12px}
.att-card + .task-group{margin-top:0}
.att-row{display:flex;align-items:center;gap:10px;width:100%;background:none;border:0;text-align:left;cursor:pointer;position:relative;
  padding:0 13px;min-height:46px;font-size:15px;font-weight:600;color:var(--text);letter-spacing:normal;text-transform:none;-webkit-tap-highlight-color:transparent;
  user-select:none;-webkit-user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none}
.att-row + .att-row{border-top:1px solid var(--line)}
.att-row .att-n{margin-left:auto;color:var(--muted);font-weight:600;font-variant-numeric:tabular-nums}
.att-row .sec-chev{color:var(--faint);flex:none;transform:rotate(-90deg);transition:transform .15s}
.att-row.open .sec-chev{transform:none}
.att-row.over,.att-row.over .att-n{color:#c22415}
.att-row svg{pointer-events:none}
.sec-head:first-child{padding-top:4px}
/* Скелетоны загрузки: тихие карточки-заглушки с мягким бликом (вместо «Загрузка…») */
.skel-list{display:flex;flex-direction:column;gap:10px}
.skel{background:var(--panel);border:1px solid var(--line);border-radius:14px;height:74px;position:relative;overflow:hidden}
.skel::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(16,24,40,.05),transparent);animation:skelShine 1.2s infinite}
@keyframes skelShine{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
/* Таймер записи — табличные цифры, чтобы не дрожали */
.mic-status.rec-timer{font-variant-numeric:tabular-nums;font-feature-settings:"tnum";color:var(--muted)}
/* Секции сверху Актуально: «Уточнить» (янтарная) и «Просрочено» (красная) */
.ask-head{color:var(--acc2);font-size:12.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase}
.overdue-head{color:#c22415;font-size:12.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase}
.day-head{color:var(--muted);font-size:12.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase} /* Сегодня/Завтра — нейтрально, без новой краски */
/* Ребро карточки задачи: СЕРОЕ по умолчанию (без приоритетов); срочно/важно/корзина красят поверх. */
.task{display:flex;gap:13px;align-items:flex-start;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px 13px}
.task.is-done>*{opacity:.62}                      /* фейдим только содержимое; карточка непрозрачна — «Вернуть» из-под неё не просвечивает */
/* Поле чек-бокса БЕЛОЕ. После отметки внутри — тёмная (фирменная графит) точка с белой обводкой. */
.tmain{flex:1;min-width:0}
.ttitle{font-size:16px;line-height:1.5;font-weight:500;letter-spacing:-.01em;overflow-wrap:anywhere;text-wrap:pretty} /* переносы без «сирот» на последней строке */
/* выравнивание по первой букве: блок с маркером сдвигается на паддинг маркера — ВСЕ строки переноса ровные, фон не режется */
.ttitle:has(.mk-u),.ttitle:has(.mk-i){margin-left:-5px}
/* Приоритет — ТОЧКИ перед заголовком (канон Todoist, заказчик 12.07.2026): красная=срочно,
   жёлтая=важно, обе рядом=важно+срочно. Рёбер нет. */
.pdot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:2px}
.pdot.u{background:var(--danger)}
.pdot.i{background:var(--warn)}
.pdot+.pdot{margin-left:-3px}
.task.is-done .ttitle{text-decoration:line-through;color:var(--muted)}
/* Спокойная строка под заголовком: исполнитель · дата (без цветных плашек) */
/* Мета — ОДНА тихая строка (мировой паттерн Todoist/Things): единый кегль, вес и цвет
   для даты и фамилии; цвет — только у решающих сигналов (просрочка красным, чипы). */
.tmeta{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:6px;font-size:13.5px;font-weight:500;color:var(--muted);font-variant-numeric:tabular-nums} /* цифры одной ширины: даты/счётчики не прыгают (better-typography) */
.tmeta-text{display:inline-flex;align-items:center;gap:7px;color:var(--muted)}
.twho{color:inherit;font-weight:inherit} /* фамилия — тем же голосом, что дата (заказчик 12.07.2026) */
.tdate.later{color:inherit} /* «Позже» — тем же шрифтом/цветом, что даты */
.tdate.over{color:var(--danger)} /* просрочка — только цветом, без смены веса */
.tsep{color:var(--faint)}
.tmeta-chips-legacy{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.chip{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:7px;background:rgba(16,24,40,.06);color:var(--muted);white-space:nowrap}
.chip-date{background:rgba(0,57,166,.16);color:var(--acc2)}
.chip-over{background:rgba(242,97,78,.22);color:#c22415}
.chip-prog{background:rgba(0,57,166,.16);color:var(--acc2)}
.chip-rew{background:rgba(242,97,78,.16);color:#c22415}
.chip-clar{background:rgba(30,86,200,.18);color:var(--acc2)}
.chip-who{background:rgba(16,24,40,.06);color:var(--muted)}
.tchecks{display:flex;flex-direction:column;gap:7px;margin-top:11px}
.subchk{display:flex;align-items:center;gap:9px;font-size:13.5px;color:var(--muted);cursor:pointer}
.tactions{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.mini{background:rgba(16,24,40,.05);color:var(--text);border:1px solid var(--line2);padding:6px 12px;border-radius:9px;font-size:12.5px;font-weight:500}
.mini.danger{color:#c22415;border-color:rgba(213,43,30,.35)} /* деструктив красным (совет 23.07: .mini перебивал .danger — Удалить читалась нейтралью) */
.mini:hover{background:rgba(16,24,40,.09)}
.mini.ok-mini{background:#E4F3EA;color:#1e7c45;border-color:#bfe0cd}
.board-empty{text-align:center;color:var(--faint);padding:46px 20px;border:1px dashed var(--line2);border-radius:14px}
/* раздел Сотрудники / ИИ */
.bigseg{display:flex;gap:8px;margin-bottom:14px}
.bigseg-btn{flex:1;background:transparent;border:1px solid var(--line2);color:var(--muted);padding:12px;border-radius:13px;font-weight:700;font-size:15px;letter-spacing:.2px;display:flex;align-items:center;justify-content:center;gap:8px}
.bigseg-btn.on{background:var(--acc);color:#fff;border-color:transparent}
.bigseg3 .bigseg-btn{font-size:13.5px;padding:11px 6px}
/* Статус-строка ИИ-вкладки: та же высота, что у seg-кнопок — каркас не прыгает между вкладками */
/* ИИ-карточка = карточка задачи в «Я»/«Команде»: тот же box. Ребро — как у задач:
   красное (срочно) / жёлтое (важно), назначенные админом; иначе СЕРОЕ по умолчанию. */
.ai-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:var(--shadow)}
.ai-card.is-done>*{opacity:.62}
.ai-card.is-done .ai-title{text-decoration:line-through;color:var(--muted)}
.ai-head{display:flex;align-items:flex-start;gap:13px;padding:14px}
.ai-main{flex:1;min-width:0}
.ai-title{font-size:16px;font-weight:500;line-height:1.45;overflow-wrap:anywhere}
.ai-meta{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:7px}
.ai-meta:empty{display:none}
/* Лаконичный маркер «просит уточнить» у ИИ: янтарный кружок с «?» в строке меты */
.q-mark{display:inline-flex;align-items:center;justify-content:center;flex:none;width:19px;height:19px;
  border-radius:50%;background:rgba(30,86,200,.16);border:1px solid rgba(30,86,200,.4);
  color:var(--acc2);font-weight:800;font-size:12px;line-height:1;padding:0;cursor:pointer}
.tmain .clarify-box{margin:10px 0 0} /* раскрытый вопрос — под метой, с воздухом */
/* Свайп вправо = выполнить (канон): зелёная зона с галочкой под карточкой слева */
.swipe-ok{position:absolute;inset:0;display:flex;align-items:center;padding-left:20px;pointer-events:none;
  background:var(--ok);color:#fff;border-radius:14px;opacity:0;transition:opacity .12s}
.task-row.swiping-ok .swipe-ok,.task-row.revealed-r .swipe-ok{opacity:1} /* 26.07: раскрытая галочка ждёт тапа */
/* Пресеты срока (канон Todoist): типовые даты одним тапом */
.due-presets{display:flex;gap:16px;flex-wrap:wrap;margin:-4px 0 14px}
.due-chip{padding:6px 2px 7px;border-radius:0;background:none;border:none;border-bottom:3px solid transparent;
  color:var(--text);font-size:14.5px;font-weight:500;-webkit-tap-highlight-color:transparent} /* кегль = флагам Срочно/Важно */
.due-chip:active{background:rgba(0,57,166,.12)}
.due-chip.on{color:var(--text);border-bottom-color:var(--acc)} /* выбранная вкладка — толстая синяя полоса */

/* Иконка «в очереди» (офлайн): тихие часы в тон меты + приглушение карточки */
.pend-ic{display:inline-flex;align-items:center;color:var(--faint)}
.task-row.no-swipe .task,.task-row.no-swipe .ai-card{opacity:.68}
/* Редактор текста ИИ-задачи живёт прямо в карточке (тела-результата у ИИ-карточек нет) */
.ai-card .task-editor{margin:0 14px 14px;border-top:1px solid var(--line);padding-top:12px}
.chip-done{background:#E4F3EA;color:#1e7c45}
.chip-appr{background:rgba(0,57,166,.22);color:var(--acc2)}
/* иконка обновления */
.panel-head .refresh-btn{width:40px;height:40px;color:var(--muted)}
.panel-head .refresh-btn:hover{color:var(--text)}
.refresh-btn.spin svg{animation:spin360 .6s ease}
@keyframes spin360{to{transform:rotate(360deg)}}
/* свайп задачи: влево — в архив, вправо — на согласование */
.task-row{position:relative;border-radius:14px;overflow:hidden;touch-action:pan-y}
.task-row .task{position:relative;z-index:1;touch-action:pan-y;background:var(--panel)} /* непрозрачная — перекрывает иконку в покое */
.task-row.snap .task{transition:transform .2s cubic-bezier(.4,0,.2,1)}
/* ИИ-карточка в ряду — та же механика свайпа, что .task: поверх корзины, плавный снап */
.task-row .ai-card{position:relative;z-index:1;touch-action:pan-y}
.task-group .ai-card{border:1px solid var(--line);border-radius:14px;box-shadow:none}
.task-row.snap .ai-card{transition:transform .2s cubic-bezier(.4,0,.2,1)}

/* ============ СОГЛАСОВАНИЕ ============ */
.gate-grid{display:grid;grid-template-columns:300px minmax(0,1fr);gap:16px;align-items:start}
.gate-list{display:flex;flex-direction:column;gap:9px}
.gate-card{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:13px;cursor:pointer;transition:.15s}
.gate-card:hover{border-color:var(--line2);background:var(--panel2)}
.gate-card.active{border-color:rgba(0,57,166,.6);box-shadow:inset 0 0 0 1px rgba(0,57,166,.4)}
.gc-title{font-weight:600;font-size:14.5px;margin-bottom:7px;line-height:1.35}
.gc-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:12px;color:var(--muted)}
.act-here{color:#1e8e5a;font-weight:600}
.gate-detail{padding:20px;min-height:120px}
.st{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:7px;background:rgba(16,24,40,.07)}
.st-quality{background:rgba(245,166,35,.16);color:#8a5a00}
.st-legal{background:#f9efd1;color:#8a5a00}
.st-customer{background:rgba(39,199,154,.16);color:#1e8e5a}
.st-revision{background:#FBEAE8;color:#c22415}
.st-released{background:#E4F3EA;color:#1e7c45}
.st-blocked{background:#FBEAE8;color:#c22415}
.timeline{margin-top:20px;border-top:1px solid var(--line);padding-top:14px}
.timeline h4{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.5px}
.tl-item{padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}
.tl-head{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-bottom:4px}
.tl-act{font-weight:600}
.assist-box{margin-top:10px;background:rgba(0,57,166,.07);border:1px solid rgba(0,57,166,.22);border-radius:12px;padding:13px;font-size:14px}
.v-pass{color:#1e8e5a;font-weight:700}.v-revise{color:#8a5a00;font-weight:700}.v-block{color:#c22415;font-weight:700}
.actions{margin-top:16px;display:flex;flex-direction:column;gap:10px}
.actions .btn-row button{font-size:13.5px}

/* ============ ИСТОРИЯ ============ */
/* Раздел «Сотрудники» — управление штатом. Руководитель — та же карточка, тот же список (24.07). */
/* СВОДКА «ПОЛЯ» — иерархия вместо таблицы (заказчик 25.07: «убого, как в Paint»).
   Одно крупное число = что происходит сейчас; тихая строка = второстепенное; красная строка —
   единственный цвет на экране. Плоско: без теней и градиентов. У .card нет padding — задаём здесь. */
.fs-card{padding:18px var(--list-inset) 14px;display:flex;flex-direction:column;gap:2px} /* инсет от --list-inset — одна линия с .sec-head и .staff-name */
.fs-title{font-size:16px;font-weight:640;letter-spacing:-.01em;color:var(--text);margin-bottom:6px}
.fs-big{font-size:40px;line-height:1.05;font-weight:720;letter-spacing:-.03em;color:var(--text);font-variant-numeric:tabular-nums}
.fs-cap{font-size:14px;color:var(--muted);margin-bottom:10px}
.fs-none{color:var(--muted);font-size:15px;margin:6px 0 2px}
.fs-quiet{font-size:14px;color:var(--muted);padding-bottom:10px;border-bottom:1px solid var(--line)}
.fs-quiet .tsep{margin:0 6px} /* иначе числа склеиваются: «точек 5·исполнителей 3» */
.fs-alert{margin-top:10px;font-size:14.5px;font-weight:560;color:#c22415}
.fs-ok{margin-top:10px;font-size:14.5px;color:#1e7c45}
.fs-upd{margin-top:8px;font-size:12.5px;color:var(--faint)}
/* Карточка назначения руководителя: фамилия крупно, должность тихо — и всё. */
.lm-name{font-size:19px;font-weight:640;letter-spacing:-.01em;margin-top:2px}
.lm-title{font-size:14px;color:var(--muted);margin-bottom:6px}
/* Кто ведёт полевой штаб — тихая строка в «Поле» (заказчик 25.07: без плашек, без цвета). */
.lead-line{display:flex;align-items:center;width:100%;min-height:44px;padding:0 var(--list-inset);background:none;border:0;text-align:left;
  font-size:13.5px;color:var(--muted);cursor:pointer;-webkit-tap-highlight-color:transparent} /* вся строка — одна тап-цель 44px (ревизия 26.07) */
.staff-list{display:flex;flex-direction:column;gap:8px}
/* Карточка — цель ЖЕСТА (удержание→перетаскивание, свайп), а не текст: выделение и системное
   меню по долгому нажатию отключаем (заказчик 24.07: «при удержании начинает выделяться текст»). */
.staff-row-wrap{position:relative;border-radius:14px;overflow:hidden;touch-action:pan-y;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.staff-row-wrap .staff-row{position:relative;z-index:1;touch-action:pan-y;background:var(--panel)} /* непрозрачная — перекрывает корзину в покое */
.staff-row-wrap.snap .staff-row{transition:transform .2s cubic-bezier(.4,0,.2,1)}
/* Нагрузка сотрудника — тихая цифра справа (совет 26.07). Просрочка: цвет+вес — два канала. */
.staff-load{margin-left:auto;align-self:center;font-size:13.5px;color:var(--faint);font-variant-numeric:tabular-nums;padding-left:10px}
.staff-load.hot{color:#c22415;font-weight:700}
/* Карточка команды — размер как у карточки задачи (.task): padding 14, radius 14.
   Без чекбокса; правка — только по карандашу; БЕЗ смены оттенка по тапу (нет :hover/:active фона). */
/* Карточки людей (команда И администратор в «Профиле») — ЕДИНОЕ серое правое ребро 3px. */
.staff-row{position:relative;display:flex;align-items:flex-start;gap:11px;width:100%;text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:11px 13px;color:var(--text);-webkit-tap-highlight-color:transparent}
.staff-row>.staff-row .staff-main{padding-right:22px}
/* Перетаскивание удержанием: приподнятая карточка следует за пальцем, порядок меняется.
   ДВИГАЕТСЯ ОБЁРТКА, не внутренняя карточка (заказчик 24.07): .staff-row-wrap{overflow:hidden}
   обрезал бы уезжающую .staff-row, и та «улетала не туда» вместо того, чтобы липнуть к пальцу.
   Обёртке на время жеста снимаем обрезку (иначе съедала бы тень) и отдаём вертикаль жесту. */
.staff-row-wrap.dragging{z-index:20;overflow:visible;touch-action:none}
.staff-row-wrap.dragging .staff-row{transition:none;transform:scale(1.03);box-shadow:0 14px 30px -12px rgba(16,24,40,.28);opacity:.98}
.staff-row-wrap.snap{transition:transform .2s cubic-bezier(.4,0,.2,1)} /* возврат обёртки на место — та же кривая, что у свайпа */
/* премиальная иконка «+» для «Завести сотрудника» */
.add-fab{display:inline-flex;align-items:center;justify-content:center;flex:none;width:38px;height:38px;border-radius:50%;background:var(--acc);color:#fff;transition:transform .12s;-webkit-tap-highlight-color:transparent}
.add-fab:hover{box-shadow:0 9px 22px -6px rgba(0,57,166,.8),inset 0 0 0 1px rgba(255,255,255,.16)}
.add-fab:active{transform:scale(.92)}
/* профиль администратора — той же формой, что строка сотрудника; просто отступ до списка */
/* Шапка ЛЮБОГО раздела прилипает к верху: при прокрутке списка не уезжает (класс, не только «Команда»).
   Непрозрачный фон во всю ширину (с заходом под чёлку), чтобы карточки не просвечивали. */
.tab-panel .panel-head{position:sticky;top:0;z-index:5;background:var(--bg);
  margin:calc(-1 * max(18px,env(safe-area-inset-top))) calc(-1 * var(--pad-x)) 16px;
  padding:max(18px,env(safe-area-inset-top)) var(--pad-x) 12px}
#staff-profile{margin-bottom:10px}
.staff-main{flex:1;min-width:0}
.staff-name{font-weight:600;font-size:18px;letter-spacing:-.01em;overflow-wrap:anywhere}
/* Должность и логин — каждый со своей строки; логин ВСЕГДА под должностью (без точки-разделителя). */
.staff-title{display:block;color:var(--muted);font-size:15px;margin-top:3px;overflow-wrap:anywhere}
.staff-at{margin-left:8px;font-size:inherit;font-weight:400;color:var(--muted)} /* логин серый нежирный, в строке фамилии (заказчик 20.07.2026) */
/* Единая зона свайп-удаления (Команда и Задачи): чистая иконка справа, без подложки. Тап = действие. */
/* Свайп влево — КРАСНАЯ подложка в форме карточки (как зелёная у «выполнить»); возврат — зелёная.
   Проявляется только при жесте/раскрытии (иначе перекрывала бы зону «выполнить»). */
.swipe-del{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;padding-right:22px;pointer-events:none;
  background:var(--danger);border-radius:14px;opacity:0;transition:opacity .12s}
.swipe-del:has(.restore){background:var(--ok)}
.task-row.swiping-del .swipe-del,.task-row.revealed .swipe-del,
.staff-row-wrap.swiping-del .swipe-del,.staff-row-wrap.revealed .swipe-del{opacity:1}
/* Вторая иконка СЛЕВА — свайп вправо в корзине тоже раскрывает иконку для тапа, не мгновенно
   (заказчик 24.07: «сразу восстанавливать не надо, нужны иконки для доп тапа»). Только restore — зелёная. */
.swipe-restore{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-start;padding-left:22px;pointer-events:none;
  background:var(--ok);border-radius:14px;opacity:0;transition:opacity .12s}
.task-row.swiping-restore .swipe-restore,.task-row.revealed-r .swipe-restore,
.staff-row-wrap.swiping-restore .swipe-restore,.staff-row-wrap.revealed-r .swipe-restore{opacity:1}
.swipe-del-btn,.swipe-restore-btn,.swipe-ok-btn{pointer-events:auto;display:flex;align-items:center;justify-content:center;width:44px;height:44px;color:#fff;background:none;border:0;-webkit-tap-highlight-color:transparent;transition:transform .12s,opacity .15s;
  user-select:none;-webkit-user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;touch-action:manipulation} /* тот же класс, что у .date-clear: iOS не тянет иконку «призраком» (ревизия 27.07) */
.swipe-del-btn svg,.swipe-restore-btn svg,.swipe-ok-btn svg{pointer-events:none;-webkit-user-drag:none} /* класс «новая сущность без стиля»: .swipe-restore-btn забыли добавить в правило (заказчик 24.07) */
.swipe-del-btn.restore{color:#fff}
.swipe-del-btn:hover,.swipe-restore-btn:hover,.swipe-ok-btn:hover{opacity:1}
.swipe-del-btn:active,.swipe-restore-btn:active,.swipe-ok-btn:active{transform:scale(.86)}

/* ============ БАЗЫ ЗНАНИЙ ============ */
.kb-buttons{display:flex;gap:9px;flex-wrap:wrap;margin-bottom:16px}
#kb-view{padding:22px;min-height:80px}

/* ============ МОДАЛКА (премиальная) ============ */
/* Нижняя шторка (эталон заказчика 20.07: грип, крестик слева, заголовок по центру, воздух) */
.modal.sheet{place-items:end center;padding:0}
.modal.sheet .modal-card{max-width:none;border-radius:22px 22px 0 0;border-bottom:none;padding:10px 20px calc(22px + env(safe-area-inset-bottom))}
.sheet-grip{width:38px;height:4px;border-radius:2px;background:#d9dce3;margin:0 auto 10px}
.sheet-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.sheet-head h3{flex:1;text-align:center;margin:0;padding:0}
.sheet-head h3::before{display:none} /* в шторке заголовок по центру, без штриха */
.sheet-x{width:38px;height:38px;border-radius:50%;background:rgba(16,24,40,.05);display:grid;place-items:center;color:var(--text)}
.modal-card{position:relative} /* якорь для крестика вью */
.view-x{align-self:center;margin:22px auto 0;width:52px;height:52px;border-radius:50%;background:#fff;border:1px solid var(--line);display:grid;place-items:center;color:var(--muted);flex:none;transition:transform .12s} /* светлый плоский крестик ПОД карточкой, зона большого пальца (заказчик 21.07) */
.view-x:active{transform:scale(.92)}
.sheet-sp{width:38px}
.sort-opt{display:flex;align-items:center;gap:10px;min-height:56px;padding:0 4px;font-size:17px;-webkit-tap-highlight-color:transparent;width:100%;background:none;border:none;text-align:left;color:var(--text)}
.sort-opt .l{flex:1}
.sort-opt.on{color:var(--acc);font-weight:600}
/* Модалка живёт в ВИДИМОЙ области (visualViewport): клавиатура сжимает --vvh, карточка не прячется под неё */
/* КАРТОЧКА ФОРМЫ ВСЕГДА ЦЕЛАЯ (заказчик 25.07). Было: justify-content:center + внутренний
   скролл карточки с max-height (--vvh - 118px). При клавиатуре карточка сжималась И обрезалась
   СВЕРХУ — до заголовка нельзя было доскроллить (известное поведение центрированного flex-скролла:
   контент выше точки центрирования недостижим). Стало: контейнер выравнивает по началу, карточка
   центрируется через margin-block:auto (это ЕДИНСТВЕННЫЙ способ центрировать и сохранить прокрутку
   к верху), внутренний max-height снят — форма показывается ЦЕЛИКОМ, прокручивается вся модалка,
   а padding-bottom уже компенсирует клавиатуру. */
.modal{position:fixed;inset:0;height:100dvh;z-index:60;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;overflow-y:auto;overscroll-behavior:none;
  padding:16px;padding-bottom:calc(16px + (100dvh - var(--vvh,100dvh) - var(--vvt,0px)));
  background:var(--bg);animation:fade .2s}
/* Центрирование СОДЕРЖИМОГО модалки распорками (26.07): margin-block:auto на карточке толкал
   крестик в самый край экрана (подрезался). Распорки ::before/::after центрируют группу
   «карточка + крестик» целиком и сохраняют прокрутку к верху при переполнении. */
.modal::before{content:'';margin-top:auto}
.modal::after{content:'';margin-bottom:auto;padding-bottom:8px} /* крестику — воздух от края */
/* Фон покрывает ВЕСЬ экран (не только видимую область) — иначе при клавиатуре в зазоре
   просвечивает доска (заказчик 21.07). Клавиатуру обходим отступом снизу: карточка
   центрируется в области над клавиатурой (100dvh − видимая высота = высота клавиатуры). */
.modal-card{width:100%;max-width:400px;padding:22px 20px 20px;
  border-radius:22px;border:1px solid var(--line2);
  background:#ffffff;
  box-shadow:0 30px 70px -30px rgba(16,24,40,.35);
  animation:sheetUp .26s cubic-bezier(.32,.72,0,1)}
@keyframes sheetUp{from{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:none}}
/* Заголовок карточки: выровнен по краю (синий штрих убран — спорил с подчёркнутым заголовком раздела, заказчик 21.07) */
.modal-card h3{margin:0 0 18px;font-size:18px;font-weight:700;letter-spacing:-.3px;text-wrap:balance}

.modal-card .fld{margin-bottom:14px;font-size:11px;letter-spacing:.6px;color:var(--faint)}
/* Инпуты в языке карточек команды: тёмная субтильная заливка, хайрлайн-рамка, компактно */
.modal-card input,.modal-card textarea,.modal-card select{
  background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;font-size:15px;transition:border-color .16s,box-shadow .16s}
/* Селект — аффорданс выпадашки: шеврон Lucide справа, без нативной стрелки (заказчик 21.07 ревизия) */
.modal-card select{appearance:none;-webkit-appearance:none;padding-right:38px;background-image:var(--glyph-chevron);background-repeat:no-repeat;background-position:right 12px center}
.modal-card textarea{min-height:62px;line-height:1.45}
/* Резерв под угол с флагами и скрепкой — ПОСЛЕ правил модалки (класс «поздний общий селектор
   перебивает точечный»: .modal-card textarea сбрасывал padding-bottom в 12px, и длинный текст
   читался ПОД кнопками — находка заказчика 30.07). */
.task-field textarea{padding-bottom:46px}
.modal-card input::placeholder,.modal-card textarea::placeholder{color:var(--faint)}
.modal-card input:focus,.modal-card textarea:focus,.modal-card select:focus{border-color:transparent;box-shadow:0 0 0 2px var(--acc)}
/* Кнопки — в столбец на всю ширину (современно, без обрезки); первичная сверху, вторичная тихая */
.modal-card .btn-row{flex-direction:column;gap:9px;margin-top:20px} /* столбик: primary сверху, обе — системные, во всю ширину */
.modal-card .msg,.modal-card .muted{margin-top:12px;font-size:13px;text-align:center}
/* Тихая ссылка-действие (генерация пароля) — под полем, слева, без веса кнопки */
.gen-row{margin:-10px 0 4px}
.link-btn{display:inline-block;background:transparent;color:var(--acc2);font-size:12.5px;font-weight:600;padding:4px 2px;letter-spacing:.2px;-webkit-tap-highlight-color:transparent}
.link-btn:hover{color:#fff}

/* ============ ОВЕРЛЕЙ DRAG&DROP ============ */
.drop-overlay{position:fixed;inset:0;z-index:70;background:rgba(18,18,18,.85);backdrop-filter:blur(8px);display:grid;place-items:center;padding:30px}
.drop-inner{border:2.5px dashed rgba(0,57,166,.6);border-radius:24px;padding:60px 50px;text-align:center;font-size:17px;color:#fff;background:rgba(0,57,166,.08);max-width:500px}
.drop-ico{font-size:52px;margin-bottom:16px}

/* ============ АДАПТИВ ============ */
@media(max-width:760px){
  :root{--pad-x:13px}
  .work-grid{grid-template-columns:1fr}
  .gate-grid{grid-template-columns:1fr}
  .ht-row{grid-template-columns:1fr}
  .copy-btn{float:none;display:block;margin-bottom:10px}
}
