/* PULSE — модуль «Контур исполнения» (execution-loop.js).
 * Прототип П0: доска Kanban (5 колонок) + оверлей «Кейс» + библиотека
 * решений + аналитика контура — целиком на демо-данных, без бэкенда.
 * Оболочка PULSE (сайдбар/топбар) не затрагивается — она уже есть в
 * styles.css/voice.css. Все классы/id — префикс exec-, во избежание
 * конфликтов с остальным кабинетом (см. «Правило раскладки», CLAUDE.md).
 *
 * Переменные объявлены на .exec-shell (не на :root), чтобы не утекать в
 * остальной кабинет — тот же приём, что в quality.css (.qms-shell) и
 * ecosystem-native.css (.econ-shell). Светлая тема — дефолт кабинета;
 * тёмная — по prefers-color-scheme и по ручному переключателю data-theme.
 *
 * Акцент модуля — teal (#0F766E), как и остальная палитра кабинета;
 * зоны норма/внимание/риск — локальное зеркало общих --vx-zone-* (со
 * своими тёмными вариантами, т.к. --vx-zone-* тёмного варианта не имеют). */

.exec-shell{
  --exec-plane:#F7F7F6; --exec-surface:#FFFFFF; --exec-surface-2:#F6F6F5; --exec-surface-3:#F1F1F1;
  --exec-ink:#0A0A0A; --exec-ink2:#6A6A6A; --exec-muted:#9A9A9A;
  --exec-hair:#ECECEC; --exec-hair2:#F2F2F1;
  --exec-accent:#0F766E; --exec-accent-2:#0B5C56; --exec-accent-wash:#E7F3F1;
  --exec-good:#5F8B6F; --exec-good-wash:#EEF4EF;
  --exec-warn:#B28A50; --exec-warn-wash:#F7F1E6;
  --exec-risk:#B6736B; --exec-risk-wash:#F7EDEB;
  --exec-zone-norm:#5F8B6F; --exec-zone-norm-bg:#EEF4EF;
  --exec-zone-warn:#B28A50; --exec-zone-warn-bg:#F7F1E6;
  --exec-zone-risk:#B6736B; --exec-zone-risk-bg:#F7EDEB;
  --exec-r:16px; --exec-r-s:11px;
  --exec-col-h:clamp(460px, calc(100vh - 320px), 760px);
  color:var(--exec-ink);
}
@media (prefers-color-scheme: dark){
  .exec-shell{
    --exec-plane:#161616; --exec-surface:#1D1D1C; --exec-surface-2:#232322; --exec-surface-3:#2A2A28;
    --exec-ink:#F2F2F0; --exec-ink2:#B5B5B0; --exec-muted:#83837E;
    --exec-hair:#333331; --exec-hair2:#2B2B29;
    --exec-accent:#4FBDB2; --exec-accent-2:#6FD1C7; --exec-accent-wash:#163330;
    --exec-good:#8FCBA2; --exec-good-wash:#1E2B22;
    --exec-warn:#E0B87B; --exec-warn-wash:#2E2617;
    --exec-risk:#E0958A; --exec-risk-wash:#332120;
    --exec-zone-norm:#8FCBA2; --exec-zone-norm-bg:#1E2B22;
    --exec-zone-warn:#E0B87B; --exec-zone-warn-bg:#2E2617;
    --exec-zone-risk:#E0958A; --exec-zone-risk-bg:#332120;
  }
}
:root[data-theme="dark"] .exec-shell{
  --exec-plane:#161616; --exec-surface:#1D1D1C; --exec-surface-2:#232322; --exec-surface-3:#2A2A28;
  --exec-ink:#F2F2F0; --exec-ink2:#B5B5B0; --exec-muted:#83837E;
  --exec-hair:#333331; --exec-hair2:#2B2B29;
  --exec-accent:#4FBDB2; --exec-accent-2:#6FD1C7; --exec-accent-wash:#163330;
  --exec-good:#8FCBA2; --exec-good-wash:#1E2B22;
  --exec-warn:#E0B87B; --exec-warn-wash:#2E2617;
  --exec-risk:#E0958A; --exec-risk-wash:#332120;
  --exec-zone-norm:#8FCBA2; --exec-zone-norm-bg:#1E2B22;
  --exec-zone-warn:#E0B87B; --exec-zone-warn-bg:#2E2617;
  --exec-zone-risk:#E0958A; --exec-zone-risk-bg:#332120;
}
:root[data-theme="light"] .exec-shell{
  --exec-plane:#F7F7F6; --exec-surface:#FFFFFF; --exec-surface-2:#F6F6F5; --exec-surface-3:#F1F1F1;
  --exec-ink:#0A0A0A; --exec-ink2:#6A6A6A; --exec-muted:#9A9A9A;
  --exec-hair:#ECECEC; --exec-hair2:#F2F2F1;
  --exec-accent:#0F766E; --exec-accent-2:#0B5C56; --exec-accent-wash:#E7F3F1;
  --exec-good:#5F8B6F; --exec-good-wash:#EEF4EF;
  --exec-warn:#B28A50; --exec-warn-wash:#F7F1E6;
  --exec-risk:#B6736B; --exec-risk-wash:#F7EDEB;
  --exec-zone-norm:#5F8B6F; --exec-zone-norm-bg:#EEF4EF;
  --exec-zone-warn:#B28A50; --exec-zone-warn-bg:#F7F1E6;
  --exec-zone-risk:#B6736B; --exec-zone-risk-bg:#F7EDEB;
}

.exec-shell{ max-width:1440px; width:100%; animation:execFade .25s ease; }
.exec-shell *{ box-sizing:border-box; }
.exec-shell button{ font-family:inherit; }
@keyframes execFade{ from{ opacity:0; transform:translateY(4px); } to{ opacity:1; transform:none; } }
@media (prefers-reduced-motion:reduce){ .exec-shell{ animation:none; } }

.exec-hint{ font-size:12px; color:var(--exec-muted); margin:0; }

/* ---------------- суб-вкладки чипами (Доска · Библиотека решений · Аналитика контура) ---------------- */
.exec-tabs{ display:flex; gap:8px; flex-wrap:wrap; margin:0 0 18px; }
.exec-tab{
  all:unset; cursor:pointer; font-size:13.5px; font-weight:600; color:var(--exec-ink2);
  padding:8px 16px; border-radius:999px; border:1px solid var(--exec-hair); background:var(--exec-surface);
  transition:color .12s, border-color .12s, background .12s;
}
.exec-tab:hover{ border-color:var(--exec-accent); color:var(--exec-ink); }
.exec-tab.exec-on{ background:var(--exec-accent); border-color:var(--exec-accent); color:#fff; }
.exec-tab:focus-visible{ outline:2px solid var(--exec-accent); outline-offset:2px; }

.exec-content{ position:relative; }
.exec-view{ display:none; }
.exec-view.exec-on{ display:block; animation:execFade .18s ease; }

/* ---------------- доска Kanban ---------------- */
.exec-board{
  display:grid; grid-template-columns:repeat(5,minmax(228px,1fr)); gap:14px;
  align-items:start; /* колонки Kanban — не «карточки в строке» (правило раскладки про них не про это): у них разная длина стопки, растягивать не нужно */
  overflow-x:auto; padding-bottom:4px;
}
.exec-col{
  display:flex; flex-direction:column; min-width:0; min-height:180px;
  border:1px solid var(--exec-hair); border-radius:var(--exec-r); background:var(--exec-plane);
  overflow:hidden;
}
.exec-col__head{
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  padding:12px 14px; border-bottom:1px solid var(--exec-hair); background:var(--exec-surface);
}
.exec-col__ttl{ font-size:13px; font-weight:680; color:var(--exec-ink); }
.exec-col__n{ font-size:11.5px; font-weight:650; color:var(--exec-ink2); background:var(--exec-surface-3); border-radius:999px; padding:2px 9px; }
.exec-col__body{ flex:1; min-height:0; max-height:var(--exec-col-h); overflow-y:auto; padding:12px; display:flex; flex-direction:column; gap:10px; }
.exec-col__empty{ font-size:12px; color:var(--exec-muted); text-align:center; padding:18px 4px; margin:0; }

/* ---------------- карточка кейса ---------------- */
.exec-card{
  all:unset; box-sizing:border-box; position:relative; display:flex; flex-direction:column; gap:7px;
  width:100%; cursor:pointer; padding:12px 13px 13px; border-radius:var(--exec-r-s);
  border:1px solid var(--exec-hair); background:var(--exec-surface);
  transition:border-color .14s, transform .14s, box-shadow .14s;
}
.exec-card:hover{ border-color:var(--exec-accent); transform:translateY(-1px); box-shadow:0 6px 18px rgba(10,10,10,.08); }
.exec-card:focus-visible{ outline:2px solid var(--exec-accent); outline-offset:2px; }
.exec-card__top{ display:flex; align-items:flex-start; justify-content:space-between; gap:8px; padding-right:44px; }
.exec-card__dept{ font-size:13.5px; font-weight:680; color:var(--exec-ink); }
.exec-card__det{ display:flex; align-items:baseline; gap:6px; }
.exec-card__detcode{ font-size:10.5px; font-weight:700; letter-spacing:.5px; color:var(--exec-accent); }
.exec-card__detname{ font-size:11.5px; color:var(--exec-ink2); }
.exec-card__ac{ font-size:11px; color:var(--exec-muted); }
.exec-card__hyp{ font-size:12.5px; line-height:1.4; color:var(--exec-ink2); margin:0;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.exec-card__hyp--empty{ font-style:italic; color:var(--exec-muted); }
.exec-card__target{ display:flex; gap:6px; align-items:flex-start; font-size:12px; color:var(--exec-ink); margin:0;
  background:var(--exec-accent-wash); border-radius:8px; padding:6px 9px; }
.exec-card__ic{ flex:none; color:var(--exec-accent); }
.exec-card__foot{ display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:2px; flex-wrap:wrap; }
.exec-card__owner{ font-size:11.5px; color:var(--exec-ink2); }

/* ---------------- зона (норма/внимание/риск) — цветовой чип ---------------- */
.exec-zone{ display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:650; padding:3px 9px; border-radius:999px; white-space:nowrap; flex:none; }
.exec-zone__dot{ width:6px; height:6px; border-radius:50%; }
.exec-zone--norm{ color:var(--exec-zone-norm); background:var(--exec-zone-norm-bg); } .exec-zone--norm .exec-zone__dot{ background:var(--exec-zone-norm); }
.exec-zone--warn{ color:var(--exec-zone-warn); background:var(--exec-zone-warn-bg); } .exec-zone--warn .exec-zone__dot{ background:var(--exec-zone-warn); }
.exec-zone--risk{ color:var(--exec-zone-risk); background:var(--exec-zone-risk-bg); } .exec-zone--risk .exec-zone__dot{ background:var(--exec-zone-risk); }

/* ---------------- сдвиг индекса ▲/▼ — мини-бейдж (Проверяем/Закрыт) ---------------- */
.exec-delta{
  position:absolute; top:10px; right:10px; display:inline-flex; align-items:center; gap:3px;
  font-size:11px; font-weight:700; padding:3px 8px; border-radius:999px;
}
.exec-delta--static{ position:static; margin-top:8px; }
.exec-delta--up{ color:var(--exec-good); background:var(--exec-good-wash); }
.exec-delta--down{ color:var(--exec-risk); background:var(--exec-risk-wash); }

/* ---------------- чип статуса задачи ---------------- */
.exec-task-chip{ font-size:11px; font-weight:620; padding:3px 9px; border-radius:999px; white-space:nowrap; }
.exec-task-chip--none{ color:var(--exec-muted); background:var(--exec-surface-3); }
.exec-task-chip--open{ color:var(--exec-ink2); background:var(--exec-surface-3); }
.exec-task-chip--in_progress{ color:var(--exec-accent-2); background:var(--exec-accent-wash); }
.exec-task-chip--review{ color:var(--exec-warn); background:var(--exec-warn-wash); }
.exec-task-chip--done{ color:var(--exec-good); background:var(--exec-good-wash); }

@media (max-width:1180px){
  .exec-board{ grid-template-columns:repeat(5,minmax(216px,1fr)); }
}
@media (max-width:900px){
  .exec-board{ grid-auto-flow:column; grid-template-columns:none; grid-auto-columns:min(78vw,300px); }
  .exec-col{ min-width:0; }
}

/* ---------------- вкладка «Библиотека решений» ---------------- */
.exec-pb-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:14px; align-items:stretch; }
.exec-pb-card{
  display:flex; flex-direction:column; gap:8px; border:1px solid var(--exec-hair); border-radius:var(--exec-r-s);
  background:var(--exec-surface); padding:15px 16px;
}
.exec-pb-card__head{ display:flex; align-items:baseline; gap:8px; }
.exec-pb-card__code{ font-size:11px; font-weight:700; letter-spacing:.5px; color:var(--exec-accent); }
.exec-pb-card__name{ font-size:12.5px; font-weight:650; color:var(--exec-ink); }
.exec-pb-card__sit, .exec-pb-card__act{ font-size:12.5px; line-height:1.45; color:var(--exec-ink2); margin:0; }
.exec-pb-card__sit b, .exec-pb-card__act b{ color:var(--exec-ink); font-weight:640; }
.exec-pb-card__foot{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:2px; }
.exec-pb-card__meta{ font-size:11.5px; color:var(--exec-muted); }
.exec-pb-apply{ margin-top:auto; align-self:flex-start; }

/* ---------------- вкладка «Аналитика контура» ---------------- */
.exec-kpi-row{ display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px; align-items:stretch; }
.exec-kpi{
  display:flex; flex-direction:column; gap:4px; border:1px solid var(--exec-hair); border-radius:var(--exec-r-s);
  background:var(--exec-surface); padding:14px 16px;
}
.exec-kpi__cap{ font-size:12px; color:var(--exec-ink2); font-weight:560; }
.exec-kpi__val{ font-size:26px; font-weight:700; letter-spacing:-.6px; color:var(--exec-ink); line-height:1.1; }
.exec-kpi__sub{ font-size:11.5px; color:var(--exec-muted); }
@media (max-width:900px){ .exec-kpi-row{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:560px){ .exec-kpi-row{ grid-template-columns:1fr; } }

/* ================= ОВЕРЛЕЙ «КЕЙС» (drawer) ================= */
.exec-scrim{ position:fixed; inset:0; background:rgba(10,16,24,.45); opacity:0; pointer-events:none; transition:opacity .2s; z-index:960; }
.exec-scrim.exec-on{ opacity:1; pointer-events:auto; }
.exec-drawer{
  position:fixed; top:0; right:0; bottom:0; width:min(560px,94vw); background:var(--exec-surface); z-index:961;
  box-shadow:0 30px 70px rgba(10,10,10,.28); transform:translateX(105%); transition:transform .34s cubic-bezier(.22,1,.36,1);
  display:flex; flex-direction:column; border-left:1px solid var(--exec-hair); border-top:3px solid var(--exec-ink);
}
.exec-drawer.exec-on{ transform:none; }
@media (prefers-reduced-motion:reduce){ .exec-drawer{ transition:none!important; } }
.exec-dhead{ display:flex; align-items:flex-start; gap:10px; padding:16px 20px; border-bottom:1px solid var(--exec-hair); flex:0 0 auto; }
.exec-dttl{ font-size:15px; font-weight:680; line-height:1.3; color:var(--exec-ink); }
.exec-dsub{ font-size:11.5px; color:var(--exec-muted); margin-top:2px; }
.exec-dclose{ all:unset; cursor:pointer; margin-left:auto; width:30px; height:30px; border-radius:8px; display:grid; place-items:center; color:var(--exec-muted); font-size:15px; flex:none; }
.exec-dclose:hover{ background:var(--exec-surface-2); color:var(--exec-ink); }
.exec-dbody{ overflow-y:auto; padding:18px 20px 30px; flex:1; }
.exec-dsec{ margin-bottom:14px; }
.exec-dlab{ font-size:10.5px; font-weight:700; letter-spacing:.9px; text-transform:uppercase; color:var(--exec-muted); margin-bottom:6px; }
.exec-dval{ font-size:13.5px; color:var(--exec-ink); }
.exec-dmeta{ font-size:11.5px; color:var(--exec-muted); margin-top:4px; }
.exec-dbox{ background:var(--exec-surface-2); border:1px solid var(--exec-hair); border-radius:var(--exec-r-s); padding:13px 15px; margin-bottom:4px; }

.exec-pill{ display:inline-flex; align-items:center; gap:6px; font-size:11.5px; font-weight:620; padding:2.5px 9px; border-radius:999px; white-space:nowrap; }
.exec-pill__d{ width:6.5px; height:6.5px; border-radius:50%; background:currentColor; }
.exec-pill--muted{ color:var(--exec-ink2); background:var(--exec-surface-3); }
.exec-pill--info{ color:var(--exec-accent-2); background:var(--exec-accent-wash); }
.exec-pill--warn{ color:var(--exec-warn); background:var(--exec-warn-wash); }
.exec-pill--good{ color:var(--exec-good); background:var(--exec-good-wash); }
.exec-pill--risk{ color:var(--exec-risk); background:var(--exec-risk-wash); }

/* «5 почему» */
.exec-whys{ margin:0; padding-left:20px; display:flex; flex-direction:column; gap:7px; }
.exec-whys li{ font-size:13px; line-height:1.5; color:var(--exec-ink2); }
.exec-whys li:last-child{ color:var(--exec-ink); font-weight:560; }

/* задачи кейса */
.exec-tasklist{ display:flex; flex-direction:column; gap:8px; }
.exec-taskrow{ display:flex; align-items:flex-start; gap:10px; border:1px solid var(--exec-hair); border-radius:var(--exec-r-s); padding:9px 12px; background:var(--exec-surface); }
.exec-taskrow__t{ font-size:12.5px; color:var(--exec-ink); line-height:1.4; }

/* таймлайн PDCA */
.exec-timeline{ display:flex; flex-direction:column; gap:2px; }
.exec-tl-row{ display:flex; gap:11px; padding:7px 0; }
.exec-tl-dot{ width:10px; height:10px; border-radius:50%; margin-top:4px; flex:none; background:var(--exec-muted); }
.exec-tl-dot--plan{ background:var(--exec-accent); }
.exec-tl-dot--do{ background:var(--exec-warn); }
.exec-tl-dot--check{ background:var(--exec-accent-2); }
.exec-tl-dot--act{ background:var(--exec-good); }
.exec-tl-body{ flex:1; min-width:0; }
.exec-tl-phase{ font-size:11.5px; font-weight:700; color:var(--exec-ink); text-transform:uppercase; letter-spacing:.4px; }
.exec-tl-date{ font-size:11px; color:var(--exec-muted); }
.exec-tl-note{ font-size:12.5px; color:var(--exec-ink2); margin-top:2px; line-height:1.4; }

/* итог: мини-график до/после + вердикт */
.exec-outcome__row{ display:flex; align-items:center; gap:10px; margin-bottom:8px; }
.exec-outcome__row:last-of-type{ margin-bottom:0; }
.exec-outcome__lbl{ font-size:11px; color:var(--exec-muted); width:38px; flex:none; }
.exec-outcome__track{ flex:1; height:8px; background:var(--exec-surface-3); border-radius:999px; overflow:hidden; }
.exec-outcome__track i{ display:block; height:100%; border-radius:999px; background:var(--exec-muted); }
.exec-outcome__track i.exec-outcome__fill--now{ background:var(--exec-accent); }
.exec-outcome__v{ font-size:12.5px; font-weight:650; color:var(--exec-ink); width:28px; text-align:right; flex:none; }
.exec-outcome__verdict{ font-size:12.5px; color:var(--exec-ink2); line-height:1.5; margin:10px 0 0; }
.exec-outcome__std{ font-size:12px; font-weight:650; color:var(--exec-good); margin:8px 0 0; }

@media (max-width:560px){
  .exec-drawer{ width:100vw; }
}

/* ---------------- формы действий в drawer (Разобрать/Назначить/В стандарт) ---------------- */
.exec-form{ display:flex; flex-direction:column; gap:12px; margin-top:8px; }
.exec-field{ display:flex; flex-direction:column; gap:5px; }
.exec-field label{ font-size:11.5px; font-weight:620; color:var(--exec-ink2); }
.exec-field input, .exec-field select, .exec-field textarea{
  font-family:inherit; font-size:13px; color:var(--exec-ink); background:var(--exec-surface);
  border:1px solid var(--exec-hair); border-radius:var(--exec-r-s); padding:8px 11px; width:100%; box-sizing:border-box;
}
.exec-field input:focus, .exec-field select:focus, .exec-field textarea:focus{ outline:none; border-color:var(--exec-accent); }
.exec-field textarea{ resize:vertical; min-height:60px; line-height:1.4; font-family:inherit; }
.exec-form-hint{ font-size:11.5px; color:var(--exec-muted); margin:6px 0 0; }
.exec-form .vx-btn{ align-self:flex-start; }
