/* ============================================================================
   «Работа с массивом данных» (#screen-dataset, модуль DS).
   Три области в одну строку: ФАЙЛЫ · ПРЕВЬЮ/ОТЧЁТ · ТЕРМИНАЛ КОМАНД.
   Токены/бриксы общие с доктулами (50-doc-tools.css): .cmp-bar, .cmp-zone, .seg.
   ============================================================================ */
.ds-main{display:grid;grid-template-columns:270px minmax(0,1fr) 320px;gap:14px;
  padding:14px 18px 18px;height:calc(100% - var(--docwin-bar-h,56px));min-height:0}
.ds-pane{min-width:0;display:flex;flex-direction:column;border:1px solid var(--hairline);
  border-radius:var(--r-lg);background:var(--surface);overflow:hidden}
.ds-pane-h{flex:none;display:flex;align-items:center;gap:8px;padding:9px 13px;
  border-bottom:1px solid var(--hairline);font-size:13px;font-weight:700}
.ds-pane-h .ico{width:16px;height:16px;color:var(--txt-2)}
.ds-h-btn{margin-left:auto}

/* ── Склейка страниц (F-8): модалка плана и пометка склеенного документа ─────────────── */
.ds-h-note{margin-left:auto;font-size:11px;color:var(--txt-2);font-weight:600}
.ds-h-note+.ds-h-btn{margin-left:8px}
.ds-glue{display:flex;flex-direction:column;gap:8px}
.ds-glue-row{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:10px;
  border:1px solid var(--line);background:var(--bg-2);cursor:pointer}
.ds-glue-row:hover{border-color:color-mix(in oklab,var(--acc) 40%,var(--line))}
.ds-glue-row input[type=checkbox]{margin-top:7px;flex:none}
.ds-glue-b{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}
.ds-glue-name{font-weight:600}
.ds-glue-meta{font-size:11px;color:var(--txt-2);overflow-wrap:anywhere}
.ds-glue-warn{font-size:11px;color:var(--warn);overflow-wrap:anywhere}
.ds-filefmt{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--txt-2)}
.ds-filefmt select{padding:3px 6px;font-size:11px;height:auto}
.ds-bar-mid{display:flex;align-items:center;gap:8px}
.ds-pick{max-width:260px;padding:5px 9px;border:1px solid var(--hairline);border-radius:var(--r-sm);
  background:var(--surface-2);color:var(--txt);font:inherit;font-size:12.5px}

/* ---------- 1. файлы ---------- */
.ds-zone{flex:none;margin:11px;padding:14px 10px;min-height:0}
/* Идёт импорт: зона перестаёт быть кнопкой и становится табло. Курсор по умолчанию —
   потому что клик по ней в это время намеренно ничего не делает (см. dsWireZone). */
.ds-zone.busy{cursor:default;border-style:solid;text-align:left;display:block}
.ds-imp{display:flex;flex-direction:column;gap:2px;width:100%}
.ds-imp .rprog{margin:0 0 2px}
.ds-imp-row{display:flex;align-items:center;gap:8px}
/* Имя файла и «стр. N из M» — строка длинная и меняется каждые пару секунд: не даём ей
   растягивать панель и дёргать вёрстку. */
.ds-imp-sub{flex:1;min-width:0;font-size:11.5px;color:var(--txt-3);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-imp-note{font-size:11px;color:var(--txt-3);opacity:.75}
.ds-zone .dz-ic .ico{width:22px;height:22px}
.ds-zone b{font-size:12.5px}
.ds-zone span{font-size:11.5px}
.ds-file-list{flex:1;min-height:0;overflow-y:auto;padding:0 8px 8px}
.ds-file{display:flex;align-items:flex-start;gap:6px;padding:7px 9px;border-radius:var(--r-sm);
  cursor:pointer;border:1px solid transparent}
.ds-file:hover{background:var(--surface-2)}
.ds-file.on{background:var(--elev);border-color:var(--iris)}
.ds-file.bad{border-color:color-mix(in oklab,var(--bad) 45%,transparent)}
.ds-file-b{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.ds-file-b b{font-size:12.5px;font-weight:600;word-break:break-word}
.ds-file-b span{font-size:11px;color:var(--txt-2)}
.ds-file-err{font-size:11px;color:var(--bad);font-style:normal}
.ds-file-x{flex:none;display:grid;place-items:center;width:20px;height:20px;border:0;padding:0;
  border-radius:6px;background:transparent;color:var(--txt-3);cursor:pointer;opacity:0}
.ds-file:hover .ds-file-x,.ds-mine-i:hover .ds-file-x{opacity:1}
.ds-file-x:hover{background:color-mix(in oklab,var(--bad) 18%,transparent);color:var(--bad)}
.ds-file-x .ico{width:12px;height:12px}
/* Счётчик «во сколько раз больше окна модели» — суть фичи, поэтому он всегда на виду. */
.ds-sum{flex:none;display:flex;flex-direction:column;gap:2px;padding:9px 13px;
  border-top:1px solid var(--hairline);background:var(--surface-2)}
.ds-sum b{font-size:12px;font-weight:700}
.ds-sum span{font-size:11px;color:var(--txt-2);line-height:1.35}

/* ---------- 2. превью / отчёт ---------- */
.ds-prev-body{flex:1;min-height:0;overflow-y:auto;padding:13px 16px}
.ds-src{margin:0;white-space:pre-wrap;word-break:break-word;font:12.5px/1.6 var(--mono,ui-monospace,monospace);color:var(--txt-2)}
.ds-run{display:flex;flex-direction:column;gap:8px}
.ds-phase{font-size:12.5px}
/* Блок «Размышления ИИ» (общий .reason из 20-screens.css) внутри панели отчёта: тот же вид,
   что в чатах, только отбит от отчёта и с собственной прокруткой в раскрытом состоянии. */
.ds-reason{margin:0 0 12px}
.ds-reason .rc{max-height:34vh;overflow:auto}
.ds-report{font-size:13.5px;line-height:1.62}
.ds-report table{border-collapse:collapse;width:100%;margin:10px 0;font-size:12.5px;display:block;overflow-x:auto}
.ds-report th,.ds-report td{border:1px solid var(--hairline);padding:5px 9px;text-align:left}
.ds-report th{background:var(--surface-2);font-weight:700}
/* Правка отчёта — по СЫРОМУ markdown (таблицы трат иначе не пережили бы редактирование). */
.ds-report-edit{display:block;width:100%;min-height:340px;height:100%;resize:vertical;
  border:1px solid var(--hairline);border-radius:var(--r-sm);padding:9px 11px;
  background:var(--surface-2);color:var(--txt);font:12.5px/1.6 var(--mono,ui-monospace,monospace)}
.ds-report-edit:focus{outline:0;border-color:var(--iris)}
.ds-acts{flex:none;padding:10px 14px;border-top:1px solid var(--hairline)}
.ds-err{display:flex;flex-direction:column;align-items:center;gap:6px;padding:26px 16px;text-align:center;color:var(--bad)}
.ds-err .ico{width:22px;height:22px}
.ds-err span{font-size:12.5px;color:var(--txt-2)}

/* ---------- 3. терминал ---------- */
.ds-term-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:9px;padding:11px 12px}
.ds-chips{display:flex;flex-wrap:wrap;gap:5px}
.ds-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border:1px solid var(--hairline);
  border-radius:999px;background:var(--surface-2);color:var(--txt-2);font-size:11.5px;cursor:pointer}
.ds-chip .ico{width:13px;height:13px}
.ds-chip:hover{border-color:var(--iris);color:var(--txt)}
.ds-chip.on{background:var(--iris);border-color:var(--iris);color:#fff}
.ds-prompt{width:100%;resize:vertical;padding:8px 10px;border:1px solid var(--hairline);
  border-radius:var(--r-sm);background:var(--surface-2);color:var(--txt);font:inherit;font-size:12.5px}
.ds-prompt:focus{outline:0;border-color:var(--iris)}
.ds-run-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* Режимов ТРИ (сплошной · наводящий · быстрый), и на узкой панели они перестают влезать в строку:
   `.seg` — inline-flex без переноса, поэтому даём перенос и ужимаем отступы именно здесь. */
.ds-mode{flex-wrap:wrap}
.ds-mode button{font-size:11.5px;white-space:nowrap;padding:0 9px}
.ds-go{margin-left:auto}
.ds-save-cmd{align-self:flex-start}
.ds-mine{display:flex;flex-direction:column;gap:3px}
.ds-mine-h,.ds-log-h{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--txt-3);margin-top:2px}
.ds-mine-i{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:var(--r-sm);cursor:pointer;font-size:12px}
.ds-mine-i:hover{background:var(--surface-2)}
.ds-mine-i b{flex:1;min-width:0;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-log{display:flex;flex-direction:column;gap:3px}
.ds-log-i{display:flex;flex-direction:column;gap:1px;padding:6px 9px;border-radius:var(--r-sm);
  cursor:pointer;border-left:2px solid var(--hairline);background:var(--surface-2)}
.ds-log-i:hover{background:var(--elev)}
.ds-log-i.ok{border-left-color:var(--ok)}
.ds-log-i.bad{border-left-color:var(--bad)}
.ds-log-i.run{border-left-color:var(--iris)}
.ds-log-i.none{border-left-color:var(--txt-3)}   /* отработал, но отчёта нет */
.ds-log-i b{font-size:12px;font-weight:600}
.ds-log-i span{font-size:11px;color:var(--txt-2)}

/* ---------- пустые состояния ---------- */
.ds-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;
  padding:30px 20px;text-align:center;color:var(--txt-2)}
.ds-empty b{font-size:13.5px;color:var(--txt)}
.ds-empty span{font-size:12.5px;line-height:1.5;max-width:44ch}
.ds-empty-s{padding:12px 4px;text-align:center;font-size:12px;color:var(--txt-3)}

/* ---------- подсказка «контекст переполнен» (в чатах) ---------- */
.ctx-suggest{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:8px 11px;
  border:1px solid color-mix(in oklab,var(--warn) 45%,transparent);border-radius:var(--r-sm);
  background:color-mix(in oklab,var(--warn) 12%,transparent);cursor:pointer;font-size:12.5px}
.ctx-suggest:hover{background:color-mix(in oklab,var(--warn) 20%,transparent)}
.ctx-suggest .ico{flex:none;width:16px;height:16px;color:var(--warn)}
.ctx-suggest b{font-weight:700}

/* ---------- адаптив ---------- */
@media (max-width:1400px){.ds-main{grid-template-columns:230px minmax(0,1fr) 280px}}
@media (max-width:1080px){
  .ds-main{grid-template-columns:1fr;height:auto;overflow-y:auto}
  .ds-pane{max-height:60vh}
}
