/* ============================================================
     БАЗА — тот же терминальный стиль, что и в hacker-terminal.html
     ============================================================ */
  * { margin: 0; padding: 0; box-sizing: border-box; }

  html, body {
    height: 100%;
    background: #0a0a0a;
    color: #55c455;
    font-family: "Courier New", Courier, monospace;
    font-size: 13px;
    overflow: hidden;
  }

  body::after {
    content: "";
    position: fixed; inset: 0; pointer-events: none; z-index: 999;
    background: repeating-linear-gradient(to bottom,
      rgba(85,196,85,.035) 0px, rgba(85,196,85,.035) 1px, transparent 1px, transparent 3px);
  }

  /* ============================================================
     ЭКРАНЫ И ПЕРЕКЛЮЧАТЕЛЬ
     ============================================================
     Экран 1 — то, что происходит прямо сейчас (лог, запуски, метрики, шаги).
     Экран 2 — состояние воркспейса (что задеплоено, чем запускается, кто менял).
     Переключение — кнопками внизу справа или клавишами 1 / 2.
  */
  .screen { display: none; }
  .screen.active { display: block; }

  /* ============================================================
     ЗАСЛОНКА — когда страница не смогла прочитать свои файлы
     ============================================================
     Раньше об этом сообщала узкая полоска внутри окна runs: на других
     вкладках её не видно, и происходящее выглядело как «просто демо».
  */
  #blocker {
    position: fixed; inset: 0; z-index: 2000;
    display: none; align-items: center; justify-content: center;
    background: rgba(10, 10, 10, .93);
    padding: 20px;
  }
  #blocker.show { display: flex; }
  #blocker .card {
    max-width: 640px; width: 100%;
    background: #1a1a1a; border: 1px solid #333; border-radius: 8px;
    padding: 22px 24px; box-shadow: 0 0 40px rgba(85, 196, 85, .08);
  }
  #blocker h2 {
    font-size: 14px; letter-spacing: 2px; color: #ffbd2e;
    font-weight: normal; margin-bottom: 14px;
  }
  #blocker p { font-size: 12px; line-height: 1.6; color: #a0a0a0; margin-bottom: 12px; }
  #blocker code { color: #8be9fd; }
  #blocker pre {
    background: #111; border: 1px solid #2a2a2a; border-radius: 5px;
    padding: 10px 12px; margin: 12px 0;
    font-size: 12px; color: #55c455; overflow-x: auto; white-space: pre;
  }
  #blocker .row { display: flex; gap: 8px; align-items: center; margin-top: 16px; }
  #blocker .hint { flex: 1 1 auto; font-size: 11px; color: #555; }

  .desktop {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 10px; padding: 10px;
    height: calc(100vh - 42px);   /* снизу оставлено место под панель */
  }

  /* Нижняя панель: слева состояние подключения, справа переключатель экранов */
  .taskbar {
    position: fixed; left: 0; right: 0; bottom: 0; height: 42px;
    display: flex; align-items: center; justify-content: space-between;
    gap: 10px; padding: 0 12px;
    background: #141414; border-top: 1px solid #2a2a2a;
    z-index: 1000;
  }
  .tb-left {
    display: flex; align-items: center; gap: 14px; min-width: 0;
  }
  #tb-info {
    font-size: 11px; color: #666; letter-spacing: 1px;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  /* Версия сборки: тускло, но всегда на виду — по ней видно, доехал ли деплой */
  .build {
    font-size: 11px; color: #4a4a4a; letter-spacing: 1px; white-space: nowrap;
    flex: 0 0 auto;
  }
  .build.stale { color: #d19a66; }
  .whoami {
    display: flex; align-items: center; gap: 8px; flex: 0 0 auto;
    font-size: 11px; color: #666; letter-spacing: 1px;
  }
  .whoami .role { color: #6272a4; }
  .whoami .out {
    font-family: inherit; font-size: 11px; letter-spacing: 1px;
    color: #777; background: #1c1c1c; border: 1px solid #333;
    border-radius: 4px; padding: 4px 9px; cursor: pointer;
  }
  .whoami .out:hover { color: #ff5f56; border-color: #5a3330; }

  .switcher { display: flex; gap: 6px; flex: 0 0 auto; }
  .sw {
    font-family: inherit; font-size: 11px; letter-spacing: 1px;
    padding: 6px 12px; border-radius: 5px; cursor: pointer;
    color: #888; background: #1c1c1c; border: 1px solid #333;
    transition: color .15s, border-color .15s, background-color .15s;
  }
  .sw:hover { color: #c0c0c0; border-color: #444; }
  .sw.active { color: #55c455; border-color: #3a5f3a; background: #1a2a1d; }
  .sw .num { color: #555; margin-right: 5px; }
  .sw.active .num { color: #3fa955; }

  .col-stack {
    display: grid;
    grid-template-rows: auto minmax(0, 1fr);
    gap: 10px; min-height: 0; min-width: 0;
  }
  .col-stack > .window:first-child { max-height: 66vh; }

  .window {
    display: flex; flex-direction: column;
    min-width: 0; min-height: 0;
    background: #1a1a1a;
    border: 1px solid #333;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 0 20px rgba(85,196,85,.06);
  }
  .deep-queue { border-top: 1px solid #333; max-height: 32vh; }
  .deep-queue small { color: #666; }
  .identity-review { border-top: 1px solid #333; max-height: 24vh; }
  .identity-pair { padding: 7px 0; border-bottom: 1px solid #282828; font-size: 11px; }
  .identity-pair small { display: block; color: #ffbd2e; margin-top: 3px; }

  /* Заголовок окна: только название, слева. Декоративных кнопок нет —
     окна ничем не управляются, и имитировать их нечестно. */
  .titlebar {
    display: flex; align-items: baseline; gap: 8px;
    padding: 7px 12px;
    background: #222; border-bottom: 1px solid #333;
    flex: 0 0 auto; user-select: none;
  }
  .title {
    flex: 1 1 auto; min-width: 0;
    color: #c0c0c0; font-size: 12px; letter-spacing: 2px;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .title small { color: #666; letter-spacing: 0; }

  .body {
    flex: 1 1 auto;
    overflow-y: auto; overflow-x: hidden;
    padding: 10px;
    word-break: break-all;
    line-height: 1.5;
  }
  .body::-webkit-scrollbar { width: 8px; }
  .body::-webkit-scrollbar-track { background: #111; }
  .body::-webkit-scrollbar-thumb { background: #33472f; border-radius: 4px; }

  .cursor { display: inline-block; width: 8px; background: #55c455; animation: blink 1s steps(1) infinite; }
  @keyframes blink { 0%,50% { opacity: 1; } 50.01%,100% { opacity: 0; } }

  /* ============================================================
     ПОЛОСА СОСТОЯНИЯ ПОДКЛЮЧЕНИЯ
     ============================================================ */
  #conn {
    flex: 0 0 auto;
    display: flex; align-items: center; gap: 7px;
    padding: 5px 10px;
    font-size: 10px; letter-spacing: 1px;
    background: #151515; border-bottom: 1px solid #2a2a2a;
    color: #777; white-space: nowrap; overflow: hidden;
  }
  #conn .led { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }
  #conn.ok    .led { background: #3fa955; box-shadow: 0 0 6px #3fa955; animation: pulse 2s ease-in-out infinite; }
  #conn.warn  .led { background: #ffbd2e; box-shadow: 0 0 6px #ffbd2e; }
  #conn.err   .led { background: #ff5f56; box-shadow: 0 0 6px #ff5f56; }
  #conn.demo  .led { background: #8be9fd; box-shadow: 0 0 6px #8be9fd; animation: pulse 2s ease-in-out infinite; }
  #conn .msg { overflow: hidden; text-overflow: ellipsis; }
  @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .45; } }

  /* Подсказка при ошибке — разворачивается под полосой состояния */
  #conn-hint {
    flex: 0 0 auto;
    display: none;
    padding: 8px 10px;
    font-size: 11px; line-height: 1.5;
    color: #ffbd2e;
    background: #1d1a12; border-bottom: 1px solid #3a3320;
  }
  #conn-hint code { color: #8be9fd; }

  /* ============================================================
     ОКНО 1 — живой лог текущего job
     ============================================================ */
  #log { white-space: pre-wrap; font-size: 12px; line-height: 1.45; }
  #log .l-err  { color: #ff5f56; }
  #log .l-warn { color: #ffbd2e; }
  #log .l-ts   { color: #6272a4; }
  #log .l-info { color: #55c455; }
  #log .l-dim  { color: #777; }
  #log .l-hl   { color: #8be9fd; }

  /* ============================================================
     ОКНО 2 — лента запусков
     ============================================================ */
  #runs { font-size: 12px; }
  .run {
    display: flex; gap: 6px; align-items: baseline;
    padding: 1px 3px; border-radius: 3px;
    cursor: pointer;
  }
  .run:hover { background: #232323; }
  .run.sel { background: #1a2a1d; outline: 1px solid #3a5f3a; }
  .run .t    { color: #555; flex: 0 0 auto; }
  .run .ic   { flex: 0 0 auto; width: 12px; text-align: center; }
  .run .path { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .run .d    { color: #666; flex: 0 0 auto; }

  .st-running  { color: #8be9fd; }
  .st-queued   { color: #999; }
  .st-success  { color: #3fa955; }
  .st-failure  { color: #ff5f56; }
  .st-canceled { color: #ffbd2e; }

  /* ============================================================
     ОКНО 3 — метрики
     ============================================================ */
  .section-title {
    color: #666; font-size: 11px; letter-spacing: 2px;
    margin: 8px 0 5px; border-bottom: 1px dashed #333; padding-bottom: 3px;
  }
  .section-title:first-child { margin-top: 0; }

  table.metrics { width: 100%; border-collapse: collapse; font-size: 12px; }
  table.metrics td { padding: 2px 0; vertical-align: middle; }
  table.metrics td.name  { color: #c0c0c0; width: 84px; }
  table.metrics td.value { text-align: right; width: 66px; font-weight: bold; }

  .bar-track { height: 8px; background: #262626; border-radius: 2px; overflow: hidden; }
  .bar-fill { height: 100%; width: 0; border-radius: 2px; transition: width .5s ease, background-color .5s ease; }
  .lvl-ok { background: #3fa955; } .lvl-warn { background: #ffbd2e; } .lvl-crit { background: #ff5f56; }
  .c-ok { color: #3fa955; } .c-warn { color: #ffbd2e; } .c-crit { color: #ff5f56; }

  .histogram {
    display: flex; align-items: flex-end; gap: 2px;
    height: 44px; background: #141414;
    border: 1px solid #2a2a2a; border-radius: 3px; padding: 4px;
  }
  .histogram .col { flex: 1; background: #3fa955; border-radius: 1px 1px 0 0; min-height: 2px; transition: height .4s ease; }

  #paths { font-size: 11px; }
  .path-row { display: flex; align-items: center; gap: 6px; color: #999; padding: 1px 0; }
  .path-row .led { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }
  .path-row .p { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .path-row .n { color: #666; flex: 0 0 auto; }

  #alerts { font-size: 11px; line-height: 1.45; white-space: pre-wrap; flex: 1 1 auto; min-height: 60px; overflow-y: auto; }
  #alerts::-webkit-scrollbar { width: 8px; }
  #alerts::-webkit-scrollbar-track { background: #111; }
  #alerts::-webkit-scrollbar-thumb { background: #33472f; border-radius: 4px; }
  #alerts .ts { color: #555; }
  #alerts .INFO { color: #3fa955; } #alerts .WARN { color: #ffbd2e; } #alerts .ERROR { color: #ff5f56; }
  #alerts .msg { color: #a0a0a0; }

  #metrics-body { display: flex; flex-direction: column; overflow-y: auto; }
  #metrics-body .fixed-part { flex: 0 0 auto; }

  /* ============================================================
     ОКНО 4 — шаги флоу / карточка job
     ============================================================ */
  #flow { font-size: 12px; }
  .step {
    display: flex; align-items: center; gap: 7px;
    padding: 3px 4px; border-radius: 3px; margin-bottom: 2px;
    border-left: 2px solid #333;
  }
  .step.cur { background: #1a2a1d; border-left-color: #8be9fd; }
  .step .idx { color: #555; flex: 0 0 auto; width: 20px; }
  .step .id  { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #c0c0c0; }
  .step .badge { flex: 0 0 auto; font-size: 10px; letter-spacing: 1px; }
  .step .iter { color: #6272a4; flex: 0 0 auto; font-size: 11px; }

  .kv { display: flex; gap: 8px; padding: 2px 0; font-size: 12px; }
  .kv .k { color: #666; width: 92px; flex: 0 0 auto; }
  .kv .v { color: #c0c0c0; flex: 1 1 auto; overflow-wrap: anywhere; }
  .kv .v.hl { color: #8be9fd; }

  pre.args {
    margin-top: 6px; padding: 6px 8px;
    background: #141414; border: 1px solid #2a2a2a; border-radius: 3px;
    color: #f1fa8c; font-size: 11px; line-height: 1.4;
    white-space: pre-wrap; max-height: 140px; overflow: auto;
  }
  pre.args::-webkit-scrollbar { width: 8px; }
  pre.args::-webkit-scrollbar-thumb { background: #33472f; border-radius: 4px; }

  .empty { color: #555; font-size: 12px; padding: 6px 0; }

  /* ============================================================
     ЭКРАН 4 — монитор Harvester (TASK-001)
     ============================================================
     Ключевое требование контракта: 0, null и not_implemented — три разных
     состояния, и подменять их друг другом запрещено. Поэтому у значения
     три вида: число, прочерк для null и метка «не реализовано».
  */
  .kpis { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
  .kpi {
    background: #141414; border: 1px solid #2a2a2a; border-radius: 4px;
    padding: 7px 9px; min-width: 0;
  }
  .kpi .k { font-size: 10px; letter-spacing: 1px; color: #666; white-space: nowrap;
            overflow: hidden; text-overflow: ellipsis; }
  .kpi .v { font-size: 17px; color: #55c455; margin-top: 3px; }
  .kpi .v.null { color: #555; }              /* null — прочерк, не ноль        */
  .kpi .v.ni   { color: #6272a4; font-size: 11px; letter-spacing: 1px; }
  .kpi .sub { font-size: 10px; color: #555; margin-top: 2px; }
  .kpi.wide { grid-column: 1 / -1; }
  .kpi.crit .v { color: #ff5f56; }
  .kpi.warn .v { color: #ffbd2e; }

  /* Воронка: сырые → уникальные → канонические → готовые к продажам */
  .funnel { display: flex; gap: 4px; margin-top: 2px; }
  .funnel .st {
    flex: 1 1 0; min-width: 0; text-align: center;
    background: #141414; border: 1px solid #2a2a2a; border-radius: 4px; padding: 6px 3px;
  }
  .funnel .st .n { font-size: 15px; color: #55c455; }
  .funnel .st .n.zero { color: #555; }
  .funnel .st .l { font-size: 9px; color: #666; letter-spacing: 0; margin-top: 2px;
                   white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

  .badge {
    display: inline-block; font-size: 10px; letter-spacing: 1px;
    padding: 1px 6px; border-radius: 3px; border: 1px solid;
  }
  .b-running { color: #8be9fd; border-color: #8be9fd55; }
  .b-idle    { color: #3fa955; border-color: #3fa95555; }
  .b-queued  { color: #999;    border-color: #99999955; }
  .b-degraded{ color: #ffbd2e; border-color: #ffbd2e55; }
  .b-offline { color: #ff5f56; border-color: #ff5f5655; }
  .b-unknown { color: #6272a4; border-color: #6272a455; }
  .b-ni      { color: #6272a4; border-color: #6272a455; }
  .b-active  { color: #3fa955; border-color: #3fa95555; }
  .b-partial { color: #ffbd2e; border-color: #ffbd2e55; }

  /* Полоска состояния снимка: когда собран, живой или фикстуры */
  #db-meta {
    flex: 0 0 auto; display: flex; align-items: center; gap: 8px;
    padding: 5px 10px; font-size: 10px; letter-spacing: 1px; color: #666;
    background: #151515; border-bottom: 1px solid #2a2a2a;
  }
  #db-meta { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #db-meta .fx { color: #ffbd2e; }
  /* Подписи в этом окне длиннее общих, иначе «последний успех» переносится */
  #harvester .kv .k { width: 132px; }
  #db-meta .lv { color: #3fa955; }
  #db-meta .err { color: #ff5f56; }

  /* Список компаний */
  .co {
    display: flex; align-items: baseline; gap: 7px;
    padding: 2px 4px; border-radius: 3px; cursor: pointer; font-size: 12px;
  }
  .co:hover { background: #232323; }
  .co.sel { background: #1a2a1d; outline: 1px solid #3a5f3a; }
  .co .rt { flex: 0 0 auto; font-size: 9px; letter-spacing: 1px; width: 26px; }
  .co .rt.cand { color: #6272a4; }
  .co .rt.org  { color: #3fa955; }
  .co .nm { flex: 1 1 auto; min-width: 0; color: #c0c0c0;
            overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .co .ct { flex: 0 0 auto; color: #666; font-size: 11px; }
  .co .cf { flex: 0 0 auto; font-size: 11px; }

  .pager { display: flex; align-items: center; gap: 8px; margin-top: 8px; font-size: 11px; color: #666; }
  .pager .btn { padding: 3px 9px; }

  /* Карточка компании */
  #company .sec { margin-top: 10px; }
  #company .kv .k { width: 116px; }
  .ev {
    border-left: 2px solid #2a2a2a; padding: 3px 0 3px 8px;
    margin-bottom: 5px; font-size: 11px;
  }
  .ev .q { color: #f1fa8c; }
  .ev .src { color: #6272a4; }
  .ev .meta { color: #555; }

  /* ============================================================
     ЭКРАН 3 — запуск исследования
     ============================================================
     Боковые окна во всю высоту, центральное — в половину и по центру
     по вертикали. За это отвечает .slot-center: он растянут на всю
     строку грида, а окно внутри занимает половину его высоты.
  */
  .slot-center { display: flex; align-items: center; min-height: 0; min-width: 0; }
  .slot-center > .window { height: 50%; width: 100%; }

  /* Список отраслей */
  .sector {
    display: flex; align-items: baseline; gap: 7px;
    padding: 3px 5px; border-radius: 3px; cursor: pointer; font-size: 12px;
  }
  .sector:hover { background: #232323; }
  .sector.sel { background: #1a2a1d; outline: 1px solid #3a5f3a; }
  .sector .nm  { flex: 1 1 auto; color: #c0c0c0; }
  .sector.sel .nm { color: #55c455; }
  .sector .cnt { color: #666; font-size: 11px; flex: 0 0 auto; }

  .acts { margin: 3px 0 8px 10px; border-left: 1px solid #2a2a2a; padding-left: 8px; }
  .act {
    display: flex; align-items: baseline; gap: 6px;
    padding: 2px 3px; font-size: 11px; cursor: pointer; border-radius: 3px;
  }
  .act:hover { background: #222; }
  .act .code { color: #8be9fd; flex: 0 0 auto; width: 42px; }
  .act .nm   { flex: 1 1 auto; color: #999; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .act.on .nm { color: #c0c0c0; }
  .act input { accent-color: #3fa955; }

  /* Метки разрешительного режима из справочника */
  .reg { font-size: 9px; letter-spacing: 1px; padding: 1px 4px; border-radius: 3px; flex: 0 0 auto; }
  .reg-free         { color: #3fa955; border: 1px solid #3fa95544; }
  .reg-notification { color: #8be9fd; border: 1px solid #8be9fd44; }
  .reg-license      { color: #ff5f56; border: 1px solid #ff5f5644; }
  .reg-registry     { color: #ffbd2e; border: 1px solid #ffbd2e44; }

  /* Регионы */
  .tools { display: flex; gap: 6px; margin-bottom: 7px; }
  .tools input[type=text] {
    flex: 1 1 auto; min-width: 0;
    font-family: inherit; font-size: 11px; color: #c0c0c0;
    background: #141414; border: 1px solid #333; border-radius: 4px; padding: 5px 7px;
  }
  .tools input[type=text]:focus { outline: none; border-color: #3a5f3a; }
  .btn {
    font-family: inherit; font-size: 11px; letter-spacing: 1px;
    padding: 5px 9px; border-radius: 4px; cursor: pointer;
    color: #888; background: #1c1c1c; border: 1px solid #333;
  }
  .btn:hover { color: #c0c0c0; border-color: #444; }

  .district { margin-bottom: 6px; }
  .district > .dh {
    display: flex; align-items: center; gap: 6px;
    font-size: 11px; letter-spacing: 1px; color: #666;
    border-bottom: 1px dashed #333; padding: 3px 0; cursor: pointer;
  }
  .district > .dh:hover { color: #c0c0c0; }
  .district .dn { color: #6272a4; }
  .region {
    display: flex; align-items: baseline; gap: 6px;
    padding: 1px 3px 1px 14px; font-size: 11px; cursor: pointer; border-radius: 3px;
  }
  .region:hover { background: #222; }
  .region .code { color: #555; flex: 0 0 auto; width: 20px; }
  .region .nm   { flex: 1 1 auto; color: #999; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .region.on .nm { color: #55c455; }
  .region .ctr  { color: #555; flex: 0 0 auto; }
  .region input { accent-color: #3fa955; }
  .region .disp { color: #ffbd2e; flex: 0 0 auto; font-size: 10px; }

  /* Центральное окно управления */
  #control-body { display: flex; flex-direction: column; gap: 8px; overflow: hidden; }
  #prompt {
    flex: 1 1 auto; min-height: 54px; resize: none;
    font-family: inherit; font-size: 12px; line-height: 1.45; color: #c0c0c0;
    background: #141414; border: 1px solid #333; border-radius: 4px; padding: 7px 8px;
  }
  #prompt:focus { outline: none; border-color: #3a5f3a; }
  #prompt::placeholder { color: #444; }

  #summary { font-size: 11px; color: #666; letter-spacing: 1px; flex: 0 0 auto; }
  #summary b { color: #55c455; font-weight: normal; }
  #summary .warn { color: #ffbd2e; }

  #run {
    flex: 0 0 auto;
    font-family: inherit; font-size: 13px; letter-spacing: 2px;
    padding: 11px; border-radius: 5px; cursor: pointer;
    color: #55c455; background: #1a2a1d; border: 1px solid #3a5f3a;
    transition: background-color .15s, border-color .15s;
  }
  #run:hover:not(:disabled) { background: #22351f; border-color: #3f7c3f; }
  #run:disabled { color: #555; background: #191919; border-color: #2a2a2a; cursor: not-allowed; }
  #run.busy { color: #ffbd2e; border-color: #6a5a20; background: #221d12; }

  #history { flex: 0 0 auto; max-height: 92px; overflow-y: auto; font-size: 11px; line-height: 1.5; }
  #history::-webkit-scrollbar { width: 8px; }
  #history::-webkit-scrollbar-thumb { background: #33472f; border-radius: 4px; }
  .hi { display: flex; gap: 6px; align-items: baseline; }
  .hi .t { color: #555; flex: 0 0 auto; }
  .hi .s { flex: 1 1 auto; color: #999; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .hi .r { flex: 0 0 auto; }

  /* ============================================================
     ЭКРАН 2 — состояние воркспейса
     ============================================================ */
  .item {
    display: flex; align-items: baseline; gap: 7px;
    padding: 2px 3px; border-radius: 3px; font-size: 12px;
  }
  .item:hover { background: #232323; }
  .item .k    { flex: 0 0 auto; width: 13px; text-align: center; color: #6272a4; }
  .item .p    { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #c0c0c0; }
  .item .lang { flex: 0 0 auto; font-size: 10px; color: #6272a4; letter-spacing: 1px; }
  .item .flag { flex: 0 0 auto; font-size: 10px; letter-spacing: 1px; }
  .item .sub  { color: #666; font-size: 11px; }
  .item.arch .p { color: #555; text-decoration: line-through; }
  .item.bad  .p { color: #ff5f56; }

  .counts { font-size: 11px; color: #666; letter-spacing: 1px; margin-bottom: 6px; }
  .counts b { color: #55c455; font-weight: normal; }

  /* Аудит */
  #audit { font-size: 11px; line-height: 1.5; }
  .au { display: flex; gap: 7px; align-items: baseline; padding: 1px 2px; }
  .au .t   { color: #555; flex: 0 0 auto; }
  .au .who { color: #8be9fd; flex: 0 0 auto; }
  .au .op  { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .au .res { color: #999; }
  .ak-Create  { color: #3fa955; }
  .ak-Update  { color: #ffbd2e; }
  .ak-Delete  { color: #ff5f56; }
  .ak-Execute { color: #6272a4; }

  @media (max-width: 900px) {
    html, body { overflow: auto; }
    .desktop { grid-template-columns: 1fr; height: auto; }
    .col-stack { grid-template-rows: auto auto; }
    .window { height: 70vh; }
  }

  /* ============================================================
     СТРАНИЦА ВХОДА
     ============================================================ */
  body.auth-page { overflow: auto; }
  .auth-wrap {
    min-height: 100vh;
    display: flex; align-items: center; justify-content: center;
    padding: 20px;
  }
  .auth-card { width: 100%; max-width: 380px; }
  .auth-card .body { padding: 18px 20px 20px; }

  .auth-form { display: flex; flex-direction: column; }
  /* без этого display:flex у класса перебивает атрибут hidden */
  .auth-form[hidden] { display: none; }
  .auth-label {
    font-size: 10px; letter-spacing: 2px; color: #666;
    margin: 10px 0 4px;
  }
  .auth-form > .auth-label:first-child { margin-top: 0; }
  .auth-input {
    font-family: inherit; font-size: 13px; color: #c0c0c0;
    background: #141414; border: 1px solid #333; border-radius: 4px;
    padding: 8px 10px;
  }
  .auth-input:focus { outline: none; border-color: #3a5f3a; }

  .auth-btn {
    margin-top: 18px;
    font-family: inherit; font-size: 12px; letter-spacing: 2px;
    padding: 10px; border-radius: 5px; cursor: pointer;
    color: #55c455; background: #1a2a1d; border: 1px solid #3a5f3a;
  }
  .auth-btn:hover:not(:disabled) { background: #22351f; border-color: #4a7a4a; }
  .auth-btn:disabled { color: #555; background: #191919; border-color: #2a2a2a; cursor: default; }

  .auth-link {
    margin-top: 10px; align-self: center;
    font-family: inherit; font-size: 11px; color: #666;
    background: none; border: none; cursor: pointer;
  }
  .auth-link:hover { color: #c0c0c0; }

  .auth-note { font-size: 11px; line-height: 1.5; color: #777; margin-bottom: 12px; }

  .auth-msg { margin-top: 14px; font-size: 11px; line-height: 1.5; color: #777; min-height: 16px; }
  .auth-msg.err { color: #ff5f56; }
  .auth-msg.ok  { color: #3fa955; }
