/* Kimi Workboard.
 *
 * Палитра — та же, что в кабинете Kimi (§9 CLAUDE.md): один синий акцент,
 * зелёный/янтарный/красный только на состояния. Шрифт при этом системный, а не
 * Inter с чужого CDN: у внутреннего инструмента строгий CSP без внешних
 * источников, и одна внешняя ссылка ради начертания сломала бы правило ради
 * мелочи.
 *
 * Плотность — главное требование (§77 ТЗ): 13px основной кегль, 4px шаг
 * отступов, ничего декоративного. */

:root{
  --bg:#F7F8FA;
  --surface:#FFFFFF;
  --surface-sunken:#F1F3F6;
  --ink:#1F2430;
  --ink-soft:#6B7280;
  --ink-faint:#9CA3AF;
  --line:#E5E7EB;
  --line-strong:#D1D5DB;
  --blue:#4C6FFF;
  --blue-ink:#3450CC;
  --blue-bg:#EAEEFF;
  --green:#22A06B;
  --green-bg:#E6F6EF;
  --amber:#F5A623;
  --amber-bg:#FEF3DD;
  --amber-ink:#8A5A00;
  --red:#E5484D;
  --red-bg:#FDEAEA;
  --violet:#7C5CE0;
  --violet-bg:#EFEAFC;
  --on-accent:#FFFFFF;
  --radius:6px;
}

*{box-sizing:border-box;margin:0;padding:0;}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit;}
html{scrollbar-gutter:stable;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  background:var(--bg);
  color:var(--ink);
  font-size:13px;
  line-height:1.45;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none;}
a:hover{text-decoration:underline;}
[hidden]{display:none !important;}

.app{display:flex;min-height:100vh;}

/* ---------- сайдбар ---------- */
.sidebar{
  width:196px;flex-shrink:0;background:var(--surface);
  border-right:1px solid var(--line);
  display:flex;flex-direction:column;padding:12px 10px;
  position:sticky;top:0;height:100vh;
}
.brand{display:flex;align-items:center;gap:8px;padding:4px 6px 14px;}
.brand:hover{text-decoration:none;}
.brand-mark{
  width:22px;height:22px;border-radius:5px;background:var(--blue);color:var(--on-accent);
  display:flex;align-items:center;justify-content:center;font-weight:600;font-size:12px;
}
.brand-mark-lg{width:34px;height:34px;font-size:17px;border-radius:8px;margin:0 auto 10px;}
.brand-name{font-weight:600;}
.nav{display:flex;flex-direction:column;gap:1px;}
.nav-item{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:5px 8px;border-radius:var(--radius);color:var(--ink-soft);
}
.nav-item:hover{background:var(--surface-sunken);text-decoration:none;color:var(--ink);}
.nav-item.is-active{background:var(--blue-bg);color:var(--blue-ink);font-weight:500;}
.nav-count{color:var(--ink-faint);font-variant-numeric:tabular-nums;}
.sidebar-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;
  gap:8px;padding:8px 6px 0;border-top:1px solid var(--line);color:var(--ink-faint);}
.who{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.link-btn{background:none;border:0;color:var(--ink-faint);cursor:pointer;padding:0;}
.link-btn:hover{color:var(--red);}

/* ---------- шапка ---------- */
.main{flex:1;min-width:0;display:flex;flex-direction:column;}
.topbar{
  display:flex;align-items:center;gap:16px;
  padding:10px 16px;border-bottom:1px solid var(--line);background:var(--surface);
  position:sticky;top:0;z-index:5;
}
/* `min-width:0` на обоих детях — не украшение. Без него флекс-элемент не
   сжимается ниже своего содержимого: на узком окне поиск вылезал за шапку и
   накрывал собой заголовок страницы, а строка уезжала за правый край. */
.topbar-title{font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;}
.crumb{color:var(--ink-soft);}
.search{min-width:0;flex-shrink:1;}
.search input{
  width:240px;max-width:100%;padding:5px 9px;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--bg);
}
.search input:focus{outline:none;border-color:var(--blue);background:var(--surface);}
.content{padding:14px 16px 40px;flex:1;min-width:0;}

/* ---------- доска ---------- */
.board{display:flex;gap:10px;align-items:flex-start;overflow-x:auto;padding-bottom:8px;}
.board-loading{color:var(--ink-faint);padding:8px;}
.column{
  width:252px;flex-shrink:0;background:var(--surface-sunken);
  border-radius:8px;padding:8px;display:flex;flex-direction:column;gap:6px;
}
.column.is-collapsed .column-body,
.column.is-collapsed .quick-add{display:none;}
.column.is-collapsed{width:150px;}
.column-head{display:flex;align-items:center;gap:6px;padding:0 2px;}
.column-title{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;
  color:var(--ink-soft);}
.column-count{color:var(--ink-faint);font-variant-numeric:tabular-nums;}
.column-toggle{margin-left:auto;background:none;border:0;color:var(--ink-faint);cursor:pointer;}
.column-toggle:hover{color:var(--ink);}
.column-body{display:flex;flex-direction:column;gap:5px;min-height:26px;}
/* Колонка, над которой висит карточка. Подсветка нужна именно у пустой: без
   неё непонятно, примет ли она бросок вообще. */
.column.is-drop-target{outline:1.5px dashed var(--blue);outline-offset:-3px;}

.card{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:7px 9px;cursor:grab;
}
.card:hover{border-color:var(--line-strong);}
.card.is-dragging{opacity:.4;}
.card-top{display:flex;align-items:center;gap:6px;margin-bottom:2px;}
.card-key{color:var(--ink-faint);font-size:11.5px;font-variant-numeric:tabular-nums;}
.card-title{word-break:break-word;}
.card-priority{margin-left:auto;font-size:11px;padding:0 5px;border-radius:9px;}
.prio-HIGH{background:var(--amber-bg);color:var(--amber-ink);}
.prio-URGENT{background:var(--red-bg);color:var(--red);}
.prio-LOW{color:var(--ink-faint);}
/* Место, куда встанет карточка. Полоса, а не пустая коробка: коробка сдвигает
   всю колонку и список под курсором начинает прыгать. */
.drop-line{height:2px;background:var(--blue);border-radius:2px;margin:1px 0;}

.quick-add input{
  width:100%;padding:6px 8px;border:1px dashed var(--line-strong);border-radius:var(--radius);
  background:transparent;
}
.quick-add input:focus{outline:none;border-style:solid;border-color:var(--blue);
  background:var(--surface);}
.quick-add-wide{max-width:620px;margin-bottom:10px;}
.quick-add-wide input{padding:8px 10px;font-size:14px;background:var(--surface);
  border-style:solid;}

/* ---------- плотный список ---------- */
.list-page{max-width:900px;}
.rows{display:flex;flex-direction:column;}
.row{
  display:flex;align-items:center;gap:10px;padding:5px 8px;border-radius:var(--radius);
  border-bottom:1px solid var(--line);cursor:grab;background:var(--surface);
}
.row:hover{background:var(--blue-bg);}
.row.is-dragging{opacity:.4;}
.row-key{color:var(--ink-faint);width:78px;flex-shrink:0;font-variant-numeric:tabular-nums;}
.row-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.row-status{color:var(--ink-faint);font-size:11.5px;flex-shrink:0;}
.bulk{margin-bottom:14px;max-width:620px;}
.bulk summary{cursor:pointer;color:var(--ink-soft);}
.bulk textarea{width:100%;margin:8px 0;padding:8px;border:1px solid var(--line);
  border-radius:var(--radius);resize:vertical;}

/* ---------- страница задачи ---------- */
.task-page{display:flex;gap:24px;align-items:flex-start;}
.task-main{flex:1;min-width:0;max-width:680px;display:flex;flex-direction:column;gap:12px;}
.task-title{
  width:100%;font-size:19px;font-weight:600;border:1px solid transparent;border-radius:var(--radius);
  padding:4px 6px;resize:none;overflow:hidden;background:transparent;line-height:1.3;
}
.task-title:hover{border-color:var(--line);}
.task-title:focus{outline:none;border-color:var(--blue);background:var(--surface);}
.task-controls{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;}
.control{display:flex;flex-direction:column;gap:3px;}
.control span,.field span{color:var(--ink-soft);font-size:11.5px;}
.control select,.field textarea{
  padding:5px 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);
}
.control-spacer{flex:1;}
.field{display:flex;flex-direction:column;gap:4px;}
.field textarea{resize:vertical;}
.save-row{display:flex;align-items:center;gap:10px;}
.save-hint{color:var(--ink-faint);}
.task-side{width:300px;flex-shrink:0;}
.task-side h3{font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-soft);
  margin-bottom:8px;}
.activity{display:flex;flex-direction:column;gap:8px;color:var(--ink-soft);}
.event{display:flex;flex-direction:column;gap:1px;padding-bottom:8px;border-bottom:1px solid var(--line);}
.event-when{color:var(--ink-faint);font-size:11.5px;}
.event-actor{font-weight:500;color:var(--ink);}

/* ---------- общее ---------- */
.btn{
  padding:5px 11px;border:1px solid var(--line-strong);border-radius:var(--radius);
  background:var(--surface);cursor:pointer;
}
.btn:hover{border-color:var(--ink-faint);}
.btn-primary{background:var(--blue);border-color:var(--blue);color:var(--on-accent);}
.btn-primary:hover{background:var(--blue-ink);border-color:var(--blue-ink);}
.btn-quiet{color:var(--ink-soft);border-color:var(--line);}
.empty{color:var(--ink-soft);padding:24px 0;display:flex;flex-direction:column;gap:8px;}

.toast{
  position:fixed;left:50%;bottom:22px;transform:translateX(-50%);
  background:var(--ink);color:var(--on-accent);padding:8px 14px;border-radius:var(--radius);
  max-width:min(560px,90vw);z-index:50;
}
.toast.is-error{background:var(--red);}

/* ---------- вход ---------- */
.login-page{display:flex;align-items:center;justify-content:center;min-height:100vh;}
.login-card{
  width:288px;background:var(--surface);border:1px solid var(--line);border-radius:10px;
  padding:22px;display:flex;flex-direction:column;gap:10px;
}
.login-card h1{font-size:16px;text-align:center;margin-bottom:6px;}
.login-card label{display:flex;flex-direction:column;gap:3px;}
.login-card label span{color:var(--ink-soft);font-size:11.5px;}
.login-card input{padding:6px 9px;border:1px solid var(--line);border-radius:var(--radius);}
.login-card input:focus{outline:none;border-color:var(--blue);}
.login-error{background:var(--red-bg);color:var(--red);padding:6px 9px;border-radius:var(--radius);}

/* ---------- вкладки задачи ---------- */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:2px;}
.tab{
  background:none;border:0;border-bottom:2px solid transparent;padding:6px 10px;
  cursor:pointer;color:var(--ink-soft);
}
.tab:hover{color:var(--ink);}
.tab.is-active{color:var(--ink);border-bottom-color:var(--blue);font-weight:500;}
.tab-note{color:var(--ink-faint);font-weight:400;}
.tab-panel{display:none;flex-direction:column;gap:12px;padding-top:12px;}
.tab-panel.is-active{display:flex;}

/* ---------- прогресс ---------- */
.progress-block{display:flex;flex-direction:column;gap:4px;}
.progress-label{color:var(--ink-soft);}
.progress-bar{height:6px;background:var(--surface-sunken);border-radius:3px;overflow:hidden;}
.progress-fill{height:100%;background:var(--green);border-radius:3px;}
.progress-extras{color:var(--ink-faint);}
.card-progress{color:var(--ink-faint);font-size:11.5px;margin-top:3px;
  font-variant-numeric:tabular-nums;}

/* ---------- ТЗ ---------- */
.spec-bar{display:flex;align-items:flex-end;gap:10px;}
.upload{display:flex;flex-direction:column;gap:8px;padding:10px;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--surface);}
.dropzone{
  border:1.5px dashed var(--line-strong);border-radius:var(--radius);padding:16px;
  text-align:center;color:var(--ink-soft);
}
.dropzone.is-over{border-color:var(--blue);background:var(--blue-bg);color:var(--blue-ink);}
.link-inline{background:none;border:0;color:var(--blue);cursor:pointer;padding:0;
  text-decoration:underline;}
.upload textarea{width:100%;padding:8px;border:1px solid var(--line);border-radius:var(--radius);
  resize:vertical;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;}
.preview{display:flex;flex-direction:column;gap:6px;padding-top:6px;border-top:1px solid var(--line);}
.preview-summary{font-weight:500;}
.preview-fate{color:var(--ink-soft);}
.preview-removed{margin-left:18px;color:var(--red);}
.preview-items{margin-left:18px;max-height:260px;overflow:auto;color:var(--ink-soft);}
.preview-item.is-new{color:var(--ink);}
.preview .btn{align-self:flex-start;margin-top:4px;}

.spec-body{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 16px;}
.markdown h1{font-size:18px;margin:0 0 8px;}
.markdown h2{font-size:15px;margin:14px 0 6px;}
.markdown h3{font-size:13.5px;margin:12px 0 4px;color:var(--ink-soft);}
.markdown p, .markdown ul, .markdown ol{margin:0 0 8px;}
.markdown ul, .markdown ol{padding-left:20px;}
.markdown li{margin:1px 0;}
.markdown code{background:var(--surface-sunken);padding:1px 4px;border-radius:3px;
  font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;}
.markdown pre{background:var(--surface-sunken);padding:10px;border-radius:var(--radius);
  overflow-x:auto;margin:0 0 8px;}
.markdown pre code{background:none;padding:0;}
.markdown blockquote{border-left:2px solid var(--line-strong);padding-left:10px;
  color:var(--ink-soft);margin:0 0 8px;}
.markdown table{border-collapse:collapse;margin:0 0 8px;}
.markdown th, .markdown td{border:1px solid var(--line);padding:3px 8px;}

.diff{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:10px;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;
  font-size:12px;}
.diff-head{color:var(--ink-soft);margin-bottom:6px;font-family:inherit;}
.diff-line{white-space:pre;}
.diff-added{background:var(--green-bg);color:var(--green);}
.diff-removed{background:var(--red-bg);color:var(--red);}
.diff-gap{color:var(--ink-faint);}

/* ---------- чеклист ---------- */
.checklist, .verifications{display:flex;flex-direction:column;}
.check-section{font-size:11.5px;text-transform:uppercase;letter-spacing:.03em;
  color:var(--ink-soft);margin:12px 0 4px;}
.check-row{display:flex;align-items:flex-start;gap:8px;padding:5px 6px;border-radius:var(--radius);}
.check-row:hover{background:var(--surface-sunken);}
.check-box{
  width:16px;height:16px;flex-shrink:0;margin-top:1px;border:1px solid var(--line-strong);
  border-radius:4px;background:var(--surface);cursor:pointer;line-height:1;font-size:11px;
  display:flex;align-items:center;justify-content:center;color:var(--on-accent);
}
.check-row.is-done .check-box, .check-row.is-resolved .check-box{
  background:var(--green);border-color:var(--green);}
.check-box.is-decision{background:var(--amber);border-color:var(--amber);}
.check-row.is-resolved .check-box.is-decision{background:var(--green);border-color:var(--green);}
.check-row.is-skipped .check-box{background:var(--ink-faint);border-color:var(--ink-faint);}
.check-body{flex:1;min-width:0;}
.check-row.is-done .check-title{color:var(--ink-faint);text-decoration:line-through;}
.check-meta{color:var(--ink-faint);font-size:11.5px;}
.check-resolution{color:var(--green);font-size:12px;}
.check-key{color:var(--ink-faint);font-size:11px;flex-shrink:0;
  font-family:ui-monospace,SFMono-Regular,Consolas,monospace;}
.check-row.type-optional .check-title{color:var(--ink-soft);}
.check-row.is-removed{color:var(--ink-faint);}
.removed-block{margin-top:12px;color:var(--ink-soft);}
.removed-block summary{cursor:pointer;}
.verification.is-passed .check-body{color:var(--green);}
.verification.is-failed .check-body{color:var(--red);}

/* ---------- разделитель меню ---------- */
.nav-divider{height:1px;background:var(--line);margin:6px 8px;}

/* ---------- блокеры и приёмка ---------- */
.blockers-panel{display:flex;flex-direction:column;gap:8px;}
.blocker{background:var(--red-bg);border:1px solid var(--red);border-radius:var(--radius);
  padding:10px 12px;display:flex;flex-direction:column;gap:6px;}
.blocker-title{font-weight:600;color:var(--red);}
.blocker-text{color:var(--ink-soft);white-space:pre-wrap;}
.blocker-form{display:flex;gap:8px;}
.blocker-form input{flex:1;min-width:0;padding:5px 9px;border:1px solid var(--line);
  border-radius:var(--radius);background:var(--surface);}
.review-panel{background:var(--violet-bg);border:1px solid var(--violet);
  border-radius:var(--radius);padding:10px 12px;display:flex;align-items:center;gap:12px;}
.review-head{font-weight:600;color:var(--violet);flex:1;}
.review-actions{display:flex;gap:8px;}

/* ---------- вкладка агента ---------- */
.finish-state{display:flex;flex-direction:column;gap:2px;}
.finish-ok{color:var(--green);font-weight:500;}
.finish-blocked{color:var(--red);font-weight:500;}
.finish-reason{color:var(--ink-soft);}
.runs, .commits{display:flex;flex-direction:column;gap:6px;}
.run{border:1px solid var(--line);border-radius:var(--radius);padding:7px 10px;
  background:var(--surface);}
.run.is-active{border-color:var(--amber);}
.run-head{font-weight:500;}
.run-meta{color:var(--ink-faint);font-size:11.5px;}
.run-summary{color:var(--ink-soft);margin-top:3px;}
.commit{font-size:12px;color:var(--ink-soft);}
.commit code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--ink);
  background:var(--surface-sunken);padding:1px 4px;border-radius:3px;}

/* ---------- настройки ---------- */
.settings{max-width:680px;display:flex;flex-direction:column;gap:28px;}
.settings h3{font-size:13px;margin-bottom:6px;}
.hint{color:var(--ink-soft);}
.hint code{background:var(--surface-sunken);padding:1px 4px;border-radius:3px;
  font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;}
.numbered{margin-left:18px;}
.numbered li{margin:3px 0;}
.token-form{display:flex;gap:8px;margin:10px 0;}
.token-form input{flex:1;min-width:0;padding:6px 9px;border:1px solid var(--line);
  border-radius:var(--radius);}
.token-reveal{background:var(--green-bg);border:1px solid var(--green);
  border-radius:var(--radius);padding:10px 12px;margin-bottom:12px;
  display:flex;flex-direction:column;gap:6px;}
.token-reveal code, .token-reveal pre{background:var(--surface);padding:6px 8px;
  border-radius:var(--radius);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;
  font-size:12px;overflow-x:auto;word-break:break-all;white-space:pre-wrap;}
.tokens{display:flex;flex-direction:column;}
.token-row{display:flex;align-items:center;gap:10px;padding:7px 0;
  border-bottom:1px solid var(--line);}
.token-row.is-revoked{opacity:.55;}
.token-name{font-weight:500;}
.token-meta{color:var(--ink-faint);font-size:11.5px;flex:1;}

/* ---------- находки ---------- */
.findings{max-width:760px;display:flex;flex-direction:column;gap:10px;}
.finding{border:1px solid var(--line);border-radius:var(--radius);padding:9px 12px;
  background:var(--surface);display:flex;flex-direction:column;gap:4px;}
.finding.is-converted, .finding.is-dismissed{opacity:.6;}
.finding-head{display:flex;align-items:baseline;gap:8px;}
.finding-title{font-weight:500;}
.finding-text{color:var(--ink-soft);white-space:pre-wrap;}
.finding-meta{color:var(--ink-faint);font-size:11.5px;}
.finding-actions{display:flex;gap:8px;align-items:center;margin-top:4px;}
.severity{font-size:11px;padding:0 6px;border-radius:9px;flex-shrink:0;}
.sev-LOW{background:var(--surface-sunken);color:var(--ink-soft);}
.sev-MEDIUM{background:var(--blue-bg);color:var(--blue-ink);}
.sev-HIGH{background:var(--amber-bg);color:var(--amber-ink);}
.sev-CRITICAL{background:var(--red-bg);color:var(--red);}

/* ---------- «Сегодня» ---------- */
.today{max-width:760px;display:flex;flex-direction:column;gap:22px;}
.counters{display:flex;gap:8px;flex-wrap:wrap;}
.counter{
  flex:1;min-width:110px;background:var(--surface);border:1px solid var(--line);
  border-radius:8px;padding:10px 12px;
}
.counter:hover{border-color:var(--line-strong);text-decoration:none;}
.counter.is-alert{border-color:var(--amber);background:var(--amber-bg);}
.counter-value{font-size:22px;font-weight:600;line-height:1.1;
  font-variant-numeric:tabular-nums;}
.counter-label{color:var(--ink-soft);font-size:11.5px;}
.today-block h3{font-size:12px;text-transform:uppercase;letter-spacing:.03em;
  color:var(--ink-soft);margin-bottom:8px;}
.mine{display:flex;flex-direction:column;gap:4px;}
.mine-line{color:var(--ink);}
.mine-line.is-alert{color:var(--red);font-weight:500;}
.mine-calm{color:var(--ink-soft);}
.agent-list{display:flex;flex-direction:column;gap:5px;}
.today-card{
  display:block;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:8px 11px;
}
.today-card:hover{border-color:var(--line-strong);text-decoration:none;}
.today-card.is-blocked{border-left:3px solid var(--red);}
.today-card.is-review{border-left:3px solid var(--violet);}
.today-card.is-in_progress{border-left:3px solid var(--amber);}
.today-card-head{display:flex;gap:8px;align-items:baseline;}
.today-key{color:var(--ink-faint);font-size:11.5px;flex-shrink:0;
  font-variant-numeric:tabular-nums;}
.today-title{font-weight:500;}
.today-meta{color:var(--ink-faint);font-size:11.5px;}
.today-reason{color:var(--red);font-size:12px;margin-top:2px;}
.nav-count-alert:not(:empty){background:var(--red);color:var(--on-accent);
  border-radius:9px;padding:0 6px;font-size:11px;}
