@charset "utf-8";
/* ==========================================================================
   PERSONAL OS — модули
   1–6: финансы и ассистент (используются app.js / modules.js).
   8–9: рабочая поверхность для проектов, заметок, чата и задач/kanban.
        Классы уже заданы как часть визуальной системы; поведение к ним
        добавят отдельные модули — здесь нет ни разметки, ни обработчиков.
   Все токены берутся из единственного блока :root в style.css.
   ========================================================================== */

/* 1. ФИНАНСЫ — шапка с балансом ------------------------------------------- */
.finance-dashboard{display:grid;gap:var(--sp-5)}
/* светлая карточка-шапка: референс Hermes Workspace — белая поверхность,
   тонкая линия, зелёный акцент, а не графитовый блок */
.finance-hero{background:var(--surface);color:var(--ink);border:1px solid var(--line);
  border-radius:var(--r-3);box-shadow:var(--sh-1);padding:24px clamp(20px,3vw,30px);display:flex;align-items:flex-end;
  justify-content:space-between;gap:var(--sp-5);flex-wrap:wrap}
.finance-hero-main{min-width:210px}
.finance-hero .eyebrow{color:var(--muted)}
.finance-head-amount{display:block;font-size:clamp(28px,3.2vw,40px);font-weight:600;line-height:1.15;
  letter-spacing:-.03em;font-variant-numeric:tabular-nums;margin:8px 0 6px;color:var(--ink)}
.finance-hero-caption{font-size:var(--fs-ui);color:var(--muted);margin:0}
.finance-actions{display:flex;gap:8px;flex-wrap:wrap}
.finance-hero .button-primary{background:var(--accent);color:var(--on-accent)}
.finance-hero .button-primary:hover{background:var(--accent-strong)}
.finance-hero .button-light{background:var(--surface);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line)}
.finance-hero .button-light:hover{background:var(--surface-3)}

/* 2. ФИНАНСЫ — метрики месяца -------------------------------------------- */
.finance-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-3)}
.finance-tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);padding:19px 21px;
  min-width:0;box-shadow:var(--sh-1)}
.finance-tile .eyebrow{color:var(--muted)}
.finance-tile-value{display:block;font-size:clamp(19px,2vw,26px);font-weight:750;letter-spacing:-.045em;
  font-variant-numeric:tabular-nums;overflow-wrap:anywhere;line-height:1.3;margin:8px 0 5px}
.finance-tile-note{font-size:var(--fs-meta);color:var(--muted)}
.finance-tile.outflow .finance-tile-value{color:var(--clay)}

/* 3. ФИНАНСЫ — аналитика -------------------------------------------------- */
.finance-analytics{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(290px,.9fr);gap:var(--sp-5);align-items:start}
.finance-analytics .stack{gap:var(--sp-5)}
.finance-legend{display:flex;gap:20px;padding:16px var(--sp-5) 0;font-size:var(--fs-meta);color:var(--muted)}
.finance-legend span{display:inline-flex;align-items:center;gap:7px}
.finance-legend span:before{content:'';display:block;width:9px;height:9px;border-radius:2px;background:var(--accent)}
.finance-legend .expense:before{background:var(--expense)}
.finance-chart{height:248px;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;
  padding:14px var(--sp-5) 8px;border-bottom:1px solid var(--line-soft)}
.finance-chart-month{min-width:0;display:flex;flex-direction:column;align-items:center;gap:9px}
.finance-chart-bars{flex:1;width:100%;display:flex;align-items:flex-end;justify-content:center;gap:4px;
  border-bottom:1px solid var(--line);padding:0 12%;
  background:repeating-linear-gradient(to top,transparent 0,transparent calc(25% - 1px),var(--line-soft) calc(25% - 1px),var(--line-soft) 25%)}
.finance-bar{width:21px;max-width:43%;min-height:0;border-radius:3px 3px 0 0;transition:height .3s ease}
.finance-bar.income{background:var(--accent)}
.finance-bar.expense{background:var(--expense)}
.finance-axis-label{font:400 var(--fs-micro) var(--mono);text-transform:capitalize;color:var(--muted);white-space:nowrap}
.finance-chart-caption{padding:11px var(--sp-5);color:var(--muted);font-size:var(--fs-meta)}
.finance-categories{padding:6px var(--sp-5) 20px;display:grid;gap:17px}
.finance-category{min-width:0}
.finance-category-label{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);font-size:var(--fs-ui);min-width:0}
.finance-category-label strong{overflow-wrap:anywhere;font-weight:700}
.finance-category-label span{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.finance-category .budget-track{margin-top:8px}

/* 4. ФИНАНСЫ — бюджеты, счета, прогноз ----------------------------------- */
.budget-track{grid-column:1/-1;height:6px;background:var(--paper-deep);border-radius:var(--r-pill);overflow:hidden}
.budget-fill{display:block;height:100%;background:var(--accent);border-radius:var(--r-pill);transition:width .3s ease}
.budget-fill.over{background:var(--clay)}
.budget-row{padding:15px var(--sp-5);border-bottom:1px solid var(--line-soft);display:grid;
  grid-template-columns:1fr auto;gap:8px;font-size:var(--fs-ui)}
.budget-row:last-child{border-bottom:0}
.budget-row span{color:var(--muted)}
.budget-row .budget-track{margin-top:9px}
.budget-status{font-size:var(--fs-micro);color:var(--muted);display:block;margin-top:7px}
.budget-row .negative{color:var(--clay)}
.finance-account,.finance-forecast-row{display:flex;justify-content:space-between;gap:12px;align-items:center;
  padding:15px var(--sp-5);border-bottom:1px solid var(--line-soft);font-size:var(--fs-ui)}
.finance-account:last-child,.finance-forecast-row:last-child{border-bottom:0}
.finance-account strong,.finance-forecast-row strong{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:700}
.finance-forecast-row span{color:var(--muted)}
.finance-footnote{font-size:var(--fs-meta);line-height:1.6;color:var(--muted);padding:4px var(--sp-5) 16px;margin:0}

/* 5. ФИНАНСЫ — журнал операций ------------------------------------------- */
.finance-toolbar{padding:14px var(--sp-5);display:flex;gap:9px;flex-wrap:wrap;border-bottom:1px solid var(--line-soft)}
.finance-toolbar input,.finance-toolbar select{min-height:40px;border:1px solid var(--line-field);border-radius:var(--r-2);
  background:var(--field);color:var(--ink);font-size:var(--fs-ui);padding:8px 11px}
.finance-toolbar input:focus,.finance-toolbar select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}
.finance-toolbar .finance-search{flex:1 1 260px;min-width:0;font-size:var(--fs-body)}
.finance-toolbar select{flex:0 1 auto;appearance:none;cursor:pointer;padding-right:32px;background-repeat:no-repeat;
  background-position:right 11px center;background-size:10px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%2358626b' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E")}
.finance-table{display:grid}
.finance-results{display:grid}
.finance-table-row{display:grid;grid-template-columns:minmax(0,1fr) 82px minmax(105px,145px) 150px;gap:14px;
  align-items:center;min-height:68px;padding:12px var(--sp-5);border-bottom:1px solid var(--line-soft);transition:background .14s}
.finance-table-row:hover{background:var(--surface-2)}
.finance-table-row:last-child{border-bottom:0}
.finance-entry{min-width:0;display:grid;gap:4px}
.finance-entry strong{font-size:var(--fs-ui);font-weight:700;overflow-wrap:anywhere}
.finance-entry span{color:var(--muted);font-size:var(--fs-meta);overflow-wrap:anywhere}
.finance-badge{font-size:var(--fs-micro);font-weight:500;color:var(--accent-ink);background:var(--accent-soft);border-radius:var(--r-1);
  padding:5px 8px;width:max-content;white-space:nowrap}
.finance-badge.planned{color:var(--warn-ink);background:var(--warn-soft)}
.finance-row-amount{font-size:13px;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right}
.finance-row-amount.negative{color:var(--clay)}
.finance-row-amount.positive{color:var(--ok)}
.finance-row-actions{display:flex;justify-content:flex-end;gap:4px}
.finance-row-actions button{background:none;border:0;color:var(--accent);font-size:var(--fs-meta);font-weight:700;
  min-height:36px;padding:0 8px;border-radius:var(--r-1)}
.finance-row-actions button:hover{background:var(--accent-soft);text-decoration:none}
.finance-row-actions .finance-delete{color:var(--danger)}
.finance-row-actions .finance-delete:hover{background:var(--danger-bg)}
.finance-today-balance{display:block;font-size:23px;font-weight:750;letter-spacing:-.04em;padding:18px var(--sp-5) 4px;
  font-variant-numeric:tabular-nums}
.finance-today-balance+.row-meta{padding:0 var(--sp-5)}
.finance-today-balance~.action-link{margin:16px var(--sp-5) 20px}

/* 6. АССИСТЕНТ (Hermes) --------------------------------------------------- */
.agent-wrap{max-width:790px;display:flex;flex-direction:column;gap:var(--sp-4)}
.agent-intro{padding:26px clamp(20px,3vw,28px);background:var(--accent-soft);border:1px solid var(--accent-line);border-radius:var(--r-3)}
.agent-intro h2{font-size:25px;font-weight:750;letter-spacing:-.04em;margin:12px 0 7px}
.agent-intro p{font-size:var(--fs-body);line-height:1.7;color:var(--ink-soft);max-width:570px}
.agent-thread{min-height:220px;display:flex;flex-direction:column;align-items:flex-start;gap:14px}
.agent-empty{color:var(--muted);font-size:var(--fs-body)}
.agent-message{max-width:85%;border:1px solid var(--line);background:var(--surface);padding:14px 18px;
  border-radius:12px;white-space:pre-wrap;font-size:var(--fs-body);line-height:1.6;overflow-wrap:anywhere}
.agent-message.user{align-self:flex-end;background:var(--accent-soft);border-color:var(--accent-line);color:var(--ink)}
.proposal{background:var(--surface);border:1px solid var(--accent-line);border-radius:var(--r-3);padding:17px;
  display:flex;gap:9px;flex-wrap:wrap;box-shadow:var(--sh-1)}
.proposal strong{width:100%;font-size:var(--fs-ui)}
.proposal pre{width:100%;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.6 var(--mono);
  background:var(--paper);padding:12px;border-radius:var(--r-1);margin:0}
.agent-compose{display:flex;flex-wrap:wrap;gap:9px;background:var(--surface);border:1px solid var(--line);
  padding:15px;border-radius:var(--r-3);box-shadow:var(--sh-1)}
.agent-compose>input{flex:1;min-width:150px;border:1px solid var(--line-field);border-radius:var(--r-2);padding:11px 13px;
  font-size:var(--fs-body);background:var(--field)}
.agent-compose>input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}
.agent-consent{display:flex;align-items:flex-start;gap:9px;width:100%;font-size:var(--fs-meta);
  color:var(--muted);line-height:1.55;cursor:pointer}
.agent-consent input{margin-top:3px;width:16px;height:16px;flex:none}

/* 7. РАБОЧАЯ ПОВЕРХНОСТЬ — ПРОЕКТЫ --------------------------------------- */
.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--sp-4)}
.project-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);padding:var(--sp-4) var(--sp-5);
  display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-3);min-width:0;box-shadow:var(--sh-1);transition:border-color .14s,box-shadow .14s}
.project-card:hover{border-color:var(--accent-line);box-shadow:var(--sh-2)}
.project-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-2);min-width:0}
.project-title{font-size:var(--fs-head);font-weight:800;letter-spacing:-.02em;line-height:1.35;overflow-wrap:anywhere}
.project-status{font:500 var(--fs-micro) var(--mono);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}
.project-progress{height:6px;background:var(--paper-deep);border-radius:var(--r-pill);overflow:hidden}
.project-progress-fill{display:block;height:100%;background:var(--accent);border-radius:var(--r-pill);transition:width .3s ease}
.project-meta{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);
  font-size:var(--fs-meta);color:var(--muted);font-variant-numeric:tabular-nums}
.project-tag{font:500 var(--fs-micro) var(--mono);color:var(--accent-ink);background:var(--accent-soft);
  border-radius:var(--r-1);padding:3px 7px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}

/* 8. РАБОЧАЯ ПОВЕРХНОСТЬ — ЗАМЕТКИ --------------------------------------- */
.note-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--sp-4)}
.note-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);padding:var(--sp-4) var(--sp-5);
  display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-2);min-width:0;box-shadow:var(--sh-1);transition:border-color .14s}
.note-card:hover{border-color:var(--line);box-shadow:var(--sh-2)}
.note-title{font-size:var(--fs-body);font-weight:800;letter-spacing:-.01em;line-height:1.4;overflow-wrap:anywhere}
.note-body{color:var(--ink-soft);font-size:var(--fs-meta);line-height:1.65;overflow-wrap:anywhere;white-space:pre-line}
.note-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);
  border-top:1px solid var(--line-soft);padding-top:var(--sp-2)}
.note-tag{font:500 var(--fs-micro) var(--mono);color:var(--muted);background:var(--paper-deep);
  border-radius:var(--r-1);padding:3px 7px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.note-time{font:400 var(--fs-micro) var(--mono);color:var(--muted);white-space:nowrap}

/* 9. РАБОЧАЯ ПОВЕРХНОСТЬ — ЧАТ (список диалогов и сообщения)
   Разметку приносит workspace.js: панель «Диалоги» слева, рабочая область
   диалога справа. Классы .chat-* — общие для системы, .ws-chat-* и .ws-session-*
   уточняют конкретные узлы. Рамку и фон даёт .ws-chat-main, поэтому список и
   тред внутри неё собственной рамки не несут. */
.chat-sessions{display:grid;align-content:start;max-height:min(420px,52vh);overflow-y:auto;
  overscroll-behavior:contain;background:none;border:0;min-width:0}
.chat-session{display:flex;align-items:stretch;gap:4px;border-bottom:1px solid var(--line-soft);
  min-width:0;transition:background .14s}
.chat-session:hover{background:var(--surface-2)}
.chat-session.active{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}
.ws-session-pick{flex:1;min-width:0;border:0;background:none;text-align:left;display:grid;gap:3px;
  padding:11px var(--sp-4);min-height:56px;cursor:pointer}
.chat-session-title{font-size:var(--fs-ui);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-session-meta{font:400 var(--fs-micro) var(--mono);color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-session-actions{display:flex;align-items:center;padding-right:6px;flex:none}
.chat-thread{flex:1;min-height:180px;display:flex;flex-direction:column;align-items:flex-start;gap:12px;
  overflow-y:auto;overscroll-behavior:contain;background:none;border:0;border-radius:0;padding:0;min-width:0}
.chat-msg{max-width:min(78%,660px);display:grid;gap:5px}
.chat-msg.assistant{align-self:flex-start}
.chat-msg.user{align-self:flex-end;justify-items:end}
.chat-msg-body{border:1px solid var(--line);background:var(--surface-2);border-radius:12px;padding:13px 16px;
  font-size:var(--fs-body);line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere}
.chat-msg.user .chat-msg-body{background:var(--accent-soft);border-color:var(--accent-line)}
.chat-msg-time{font:400 var(--fs-micro) var(--mono);color:var(--muted)}
/* композер живёт внутри поверхности чата: только линия сверху, без своей рамки */
.chat-compose{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;align-items:end;
  border-top:1px solid var(--line-soft);padding:var(--sp-3) 0 0;background:none;border-radius:0;box-shadow:none}
.chat-compose textarea{grid-column:1;min-width:0;border:1px solid var(--line-field);border-radius:var(--r-2);
  padding:11px 13px;font-size:var(--fs-body);background:var(--field);resize:vertical;min-height:80px}
.chat-compose textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}
.chat-compose .ws-send{grid-column:2;white-space:nowrap}

/* 10. РАБОЧАЯ ПОВЕРХНОСТЬ — ЗАДАЧИ: ПЛОТНЫЙ СПИСОК И KANBAN -------------- */
.task-list{display:grid;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);overflow:hidden}
.task-item{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:flex-start;padding:14px var(--sp-5);
  border-bottom:1px solid var(--line-soft);min-width:0;transition:background .14s}
.task-item:hover{background:var(--surface-2)}
.task-item:last-child{border-bottom:0}
.task-item.done .task-item-title{text-decoration:line-through;color:var(--muted);font-weight:600}
/* базис 240px + flex-wrap на строке: набор действий уходит на вторую строку,
   а не сжимает заголовок до одной буквы в столбце (проверено в браузере) */
.task-item-main{min-width:0;flex:1 1 240px;display:grid;gap:4px}
.task-item-title{font-size:var(--fs-body);font-weight:700;line-height:1.45;overflow-wrap:anywhere}
.task-item-meta{color:var(--muted);font-size:var(--fs-meta);line-height:1.5;overflow-wrap:anywhere}
.task-pill{flex:none;align-self:flex-start;font:500 var(--fs-micro) var(--mono);border-radius:var(--r-pill);
  padding:3px 9px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;
  background:var(--paper-deep);color:var(--ink-soft)}
.task-pill.high{background:var(--danger-bg);color:var(--danger)}
.task-pill.low{background:var(--accent-soft);color:var(--accent-ink)}

.kanban{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(228px,1fr);gap:var(--sp-4);align-items:start;
  overflow-x:auto;padding-bottom:6px;overscroll-behavior-x:contain}
.kanban-col{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);display:flex;
  flex-direction:column;min-width:0;overflow:hidden}
.kanban-col-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);
  padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--line-soft);background:var(--surface-2)}
.kanban-col-title{font-size:var(--fs-ui);font-weight:800;letter-spacing:-.01em}
.kanban-count{font:500 var(--fs-micro) var(--mono);color:var(--muted);background:var(--paper-deep);
  border-radius:var(--r-pill);padding:2px 8px;min-width:22px;text-align:center}
.kanban-col-body{display:grid;gap:var(--sp-2);padding:var(--sp-3);align-content:start;min-height:120px}
.kanban-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-2);padding:var(--sp-3);
  display:grid;grid-template-columns:minmax(0,1fr);gap:7px;min-width:0;box-shadow:var(--sh-1);transition:border-color .14s,box-shadow .14s}
.kanban-card:hover{border-color:var(--accent-line);box-shadow:var(--sh-2)}
.kanban-card-title{font-size:var(--fs-ui);font-weight:700;line-height:1.45;overflow-wrap:anywhere}
.kanban-card-meta{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);
  font:400 var(--fs-micro) var(--mono);color:var(--muted);font-variant-numeric:tabular-nums}
.kanban-tag{font:500 var(--fs-micro) var(--mono);color:var(--accent-ink);background:var(--accent-soft);
  border-radius:var(--r-1);padding:3px 7px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}

/* 12. РАБОЧАЯ ПОВЕРХНОСТЬ (ws-*)
   Покрытие выверено по фактическому workspace.js/app.js: здесь ровно те
   ws-классы, которые модуль ставит сам (одиночные) или уточняет поверх общих
   классов системы (project-card, note-card, task-item, kanban-card, chat-msg,
   panel, badge, button). Разметки и обработчиков в CSS нет. */
.ws-stack{display:grid;gap:var(--sp-5);min-width:0}
.ws-grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:var(--sp-5);align-items:start}
/* .ws-head дублирует заголовок страницы из shell (надзаголовок + h1 + подпись).
   Надзаголовок скрыт, а повторяющийся заголовок превращён в мелкую метку
   раздела: шапка читается как панель действий, а не как второй заголовок. */
.ws-head .eyebrow{display:none}
.ws-head-title{font:800 var(--fs-micro) var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin:0}
.ws-note{color:var(--muted);font-size:var(--fs-body);line-height:1.65;max-width:86ch}
.ws-hint{display:block;margin-top:5px;color:var(--muted);font-size:var(--fs-meta);line-height:1.5}
.ws-field-label{display:block;color:var(--ink-soft);font-size:var(--fs-label);font-weight:800;letter-spacing:.01em}
.ws-error{color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-line);
  border-radius:var(--r-2);padding:11px 13px;font-size:var(--fs-ui);line-height:1.6;overflow-wrap:anywhere}
.ws-footnote{color:var(--muted);font-size:var(--fs-meta);line-height:1.6;padding:var(--sp-3) var(--sp-5) var(--sp-4);margin:0}
.ws-counter{color:var(--muted);font:500 var(--fs-meta) var(--mono);letter-spacing:.06em;margin:0}
.ws-empty{padding:30px var(--sp-5);color:var(--muted);font-size:var(--fs-body);line-height:1.65}

/* 12.1 поля и элементы управления */
.ws-field{display:block;color:var(--ink-soft);font-size:var(--fs-label);font-weight:800}
.ws-field>input,.ws-field>select,.ws-field>textarea{margin-top:7px;width:100%}
.ws-input,.ws-select,.ws-textarea{background:var(--field);border:1px solid var(--line-field);border-radius:var(--r-2);
  padding:10px 12px;color:var(--ink);font-size:var(--fs-body);width:100%;min-width:0;min-height:42px}
.ws-textarea{min-height:110px;resize:vertical}
.ws-input:focus,.ws-select:focus,.ws-textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}
.ws-input::placeholder,.ws-textarea::placeholder,.ws-search-input::placeholder{color:var(--faint)}
/* .ws-label — подписи полей, которые app.js добавляет в форму задачи;
   самодостаточны, хотя форма и так .entry-form */
.ws-label{display:block;color:var(--ink-soft);font-size:var(--fs-label);font-weight:800;letter-spacing:.01em}
.ws-label>input,.ws-label>select,.ws-label>textarea{margin-top:7px;width:100%}
/* .ws-more-item — пункт мобильного меню «Ещё»; вне .more-menu тоже читаем */
.ws-more-item{border:0;background:transparent;text-align:left;padding:13px 14px;font-size:13.5px;
  min-height:46px;border-radius:var(--r-2);font-weight:600;color:var(--ink)}
.ws-more-item:hover,.ws-more-item.active{background:var(--accent-soft);color:var(--accent-ink)}
.ws-proposal-meta{color:var(--muted);font-size:var(--fs-meta);line-height:1.6}
/* в тулбаре элементы не растягиваются на всю строку */
.ws-toolbar .ws-search-input{flex:1 1 240px;min-width:0}
.ws-toolbar .ws-select{width:auto;flex:0 1 auto;min-height:38px;padding:8px 11px}
.ws-toolbar .ws-input{width:auto;flex:0 1 auto}
.ws-shortcuts{gap:9px}

/* 12.2 переключатели и действия */
.ws-view-toggle{display:inline-flex;gap:2px;padding:2px;margin-left:auto;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-2)}
.ws-toggle{border:0;background:transparent;color:var(--ink-soft);border-radius:var(--r-1);padding:7px 13px;
  min-height:32px;font-size:var(--fs-meta);font-weight:700;transition:background .14s,color .14s}
.ws-toggle:hover{background:var(--accent-soft);color:var(--accent-ink)}
.ws-toggle.active{background:var(--accent-soft);color:var(--accent-ink)}
.ws-action,.ws-icon-action{border:0;background:none;color:var(--accent);border-radius:var(--r-1);
  padding:6px 9px;min-height:32px;font-size:var(--fs-meta);font-weight:700;display:inline-flex;
  align-items:center;gap:6px;transition:background .14s,color .14s}
.ws-action:hover,.ws-icon-action:hover{background:var(--accent-soft)}
.ws-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px}
.ws-event-actions{margin-top:6px}
.ws-icon-action{min-width:32px;justify-content:center;font-size:13px;padding:6px}
.ws-danger{color:var(--danger)}
.ws-danger:hover{background:var(--danger-bg)}
.ws-project-actions,.ws-note-actions,.ws-task-actions,.ws-kanban-actions,.ws-session-actions{
  display:flex;gap:2px;flex-wrap:wrap;align-items:center}
.ws-project-actions,.ws-note-actions{margin-top:2px}
/* действия строки задачи: при переносе на вторую строку выравниваются вправо */
.ws-task-actions{flex:1 1 auto;min-width:0;justify-content:flex-end}
.ws-task-body{min-width:0}
.ws-due-list{background:var(--surface)}

/* 12.3 задачи: kanban и служебные подписи */
.ws-kanban{min-width:0}
.ws-kanban-open .kanban-col-head{box-shadow:inset 0 2px 0 var(--accent)}
.ws-kanban-in_progress .kanban-col-head{box-shadow:inset 0 2px 0 var(--slate)}
.ws-kanban-blocked .kanban-col-head{box-shadow:inset 0 2px 0 var(--clay)}
.ws-kanban-done .kanban-col-head{box-shadow:inset 0 2px 0 var(--line)}
.ws-kanban-empty{margin:0;padding:14px 2px;color:var(--muted);font-size:var(--fs-meta)}

/* 12.4 проекты и заметки */
.ws-project-description{color:var(--muted);font-size:var(--fs-meta);line-height:1.6;overflow-wrap:anywhere}
.ws-project-counts{color:var(--muted);font-size:var(--fs-meta)}
.ws-project-summary{display:grid;padding:6px var(--sp-5) 18px;gap:15px}
.ws-project-summary-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;align-items:baseline;min-width:0}
.ws-project-summary-title{font-size:var(--fs-ui);font-weight:700;overflow-wrap:anywhere}
.ws-project-summary-count{font:400 var(--fs-meta) var(--mono);color:var(--muted);white-space:nowrap}
.ws-project-summary-row .project-progress{grid-column:1/-1;margin-top:2px}

/* 12.5 ассистент Hermes: разделение «диалоги / разговор» */
.ws-split{display:grid;grid-template-columns:minmax(258px,.32fr) minmax(0,1fr);gap:var(--sp-5);align-items:start}
.ws-chat-side{min-width:0;display:grid;gap:var(--sp-4);align-content:start}
.ws-chat-main{min-width:0;display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5) var(--sp-5);
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);box-shadow:var(--sh-1);
  min-height:min(620px,74vh)}
.ws-chat-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap;
  padding-bottom:var(--sp-3);border-bottom:1px solid var(--line-soft)}
.ws-chat-title{font-size:var(--fs-head);font-weight:800;letter-spacing:-.02em;line-height:1.35;overflow-wrap:anywhere}
.ws-chat-tools{display:flex;gap:2px;flex-wrap:wrap;align-items:center}
.ws-chat-status{font:500 var(--fs-micro) var(--mono);letter-spacing:.1em;color:var(--muted)}
.ws-chat-error{display:grid;gap:7px;justify-items:start;background:var(--danger-bg);border:1px solid var(--danger-line);
  border-radius:var(--r-2);padding:12px 14px;font-size:var(--fs-ui);color:var(--ink-soft)}
.ws-chat-error strong{color:var(--danger);font-size:var(--fs-meta)}
.ws-pending{align-self:flex-start;font:500 var(--fs-meta) var(--mono);color:var(--muted);
  background:var(--paper-deep);border-radius:var(--r-pill);padding:7px 14px}
.ws-templates{display:flex;gap:6px;flex-wrap:wrap}
.ws-chip{border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);border-radius:var(--r-pill);
  padding:6px 12px;min-height:32px;font-size:var(--fs-meta);font-weight:600;
  transition:background .14s,color .14s,border-color .14s}
.ws-chip:hover{border-color:var(--accent-line);color:var(--accent-ink);background:var(--accent-soft)}
.ws-chat-input{width:100%}
.ws-rename{display:flex;gap:8px;align-items:center;flex-wrap:wrap;width:100%}
.ws-rename .ws-input{flex:1 1 200px;width:auto;min-height:38px}
.ws-chat-sessions{background:none;border:0}
.ws-admin-link{display:inline-flex;align-items:center;min-height:24px;margin:0 var(--sp-5) var(--sp-5);color:var(--accent);font-size:var(--fs-meta);
  font-weight:700;text-decoration:underline;text-underline-offset:4px}
.ws-bullets{margin:0;padding:4px var(--sp-5) 20px var(--sp-5);display:grid;gap:9px;color:var(--ink-soft);
  font-size:var(--fs-meta);line-height:1.65}
.ws-bullets li{overflow-wrap:anywhere}

/* 12.6 командный поиск (Ctrl+K) */
.ws-palette{border:1px solid var(--line);border-radius:var(--r-4);background:var(--surface);color:var(--ink);
  padding:14px;width:min(620px,calc(100vw - 28px));max-height:min(620px,calc(100dvh - 28px));overflow:hidden;
  box-shadow:var(--sh-3);overscroll-behavior:contain}
.ws-palette::backdrop{background:var(--scrim)}
.ws-palette-input{width:100%;min-height:46px;border:1px solid var(--line-field);border-radius:var(--r-2);
  background:var(--field);color:var(--ink);font-size:var(--fs-body);padding:11px 13px}
.ws-palette-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}
.ws-palette-hint{margin:10px 2px 0;color:var(--muted);font:400 var(--fs-micro) var(--mono);letter-spacing:.05em}
.ws-search-results{display:grid;margin-top:10px;max-height:min(430px,54vh);overflow-y:auto;overscroll-behavior:contain}
.ws-search-result{border:0;background:none;text-align:left;border-radius:var(--r-2);padding:10px 11px;min-height:48px;
  display:block;width:100%;transition:background .14s}
.ws-search-result:hover,.ws-search-result.active{background:var(--accent-soft)}
.ws-search-main{display:grid;gap:3px;min-width:0}
.ws-search-type{font:500 var(--fs-micro) var(--mono);letter-spacing:.08em;color:var(--muted);text-transform:uppercase}
.ws-search-title{font-size:var(--fs-ui);font-weight:700;overflow-wrap:anywhere}
.ws-search-snippet{color:var(--muted);font-size:var(--fs-meta);overflow-wrap:anywhere}
.ws-search-empty{margin:0;padding:16px 4px;color:var(--muted);font-size:var(--fs-ui)}

/* 13. АДАПТИВ ------------------------------------------------------------- */
/* 761–1000px: четыре фиксированных трека (82/145/150px) не оставляют места
   названию операции — колонка схлопывалась до ~31px. Раскладываем строку как
   на мобильном: название слева, бейдж и сумма справа, действия ниже. */
@media(min-width:761px) and (max-width:1000px){
  .finance-table-row{grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;padding:14px var(--sp-5)}
  .finance-entry{grid-row:1/3}
  .finance-badge{grid-column:2;justify-self:end}
  .finance-row-amount{grid-column:2}
  .finance-row-actions{grid-column:1/-1;justify-content:flex-start}
}
@media(max-width:1180px){
  .finance-analytics{grid-template-columns:1fr}
  .finance-analytics>.stack:nth-child(2){display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .finance-analytics>.stack:nth-child(2) .panel:last-child{grid-column:1/-1}
}
@media(max-width:1000px){
  .ws-split{grid-template-columns:1fr}
  .chat-sessions{max-height:min(300px,34vh)}
  .ws-chat-main{min-height:0}
}
@media(max-width:760px){
  .finance-hero{padding:23px 20px;align-items:flex-start}
  .finance-actions{width:100%}
  .finance-actions .button{flex:1}
  .finance-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .finance-metrics .finance-tile:last-child{grid-column:1/-1}
  .finance-analytics>.stack:nth-child(2){display:grid;grid-template-columns:1fr}
  .finance-analytics>.stack:nth-child(2) .panel:last-child{grid-column:auto}
  .finance-chart{height:200px}
  .finance-table-row{grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;padding:14px 18px}
  .finance-entry{grid-row:1/3}
  .finance-badge{grid-column:2;justify-self:end}
  .finance-row-amount{grid-column:2}
  .finance-row-actions{grid-column:1/-1;justify-content:flex-start}
  .finance-row-actions button{min-height:44px}
  .finance-toolbar{padding:13px 18px}
  .finance-toolbar select{flex:1 1 130px}
  .agent-message{max-width:95%}
  .finance-today-balance{padding:16px 18px 4px}
  .finance-today-balance+.row-meta{padding:0 18px}
  .finance-today-balance~.action-link{margin:14px 18px 18px}
  .project-grid,.note-grid{grid-template-columns:1fr}
  .ws-grid-2{grid-template-columns:1fr}
  .ws-head{flex-wrap:wrap}
  .ws-view-toggle{margin-left:0}
  .ws-rename .ws-input{flex:1 1 100%}
  .task-item{padding:14px 18px}
  .chat-thread{padding:0}
  .chat-msg{max-width:92%}
  .ws-chat-main{padding:var(--sp-3) var(--sp-4) var(--sp-4)}
  .ws-footnote{padding:12px 18px 16px}
  .ws-bullets{padding:4px 18px 18px}
  .ws-project-summary{padding:6px 18px 16px}
  .ws-admin-link{margin:0 18px 18px}
}
@media(max-width:420px){
  .finance-metrics{gap:9px}
  .finance-tile{padding:16px 14px}
  .finance-tile-value{font-size:18px}
  .finance-actions{flex-direction:column}
  .finance-actions .button{flex:none;width:100%;justify-content:center}
  .finance-chart-bars{padding:0 7%}
  .finance-bar{width:12px}
  .finance-legend{gap:14px}
  .kanban{grid-auto-columns:minmax(230px,1fr)}
}

/* ==========================================================================
   14. ВТОРАЯ ВОЛНА — ЖУРНАЛ, ЦЕЛИ, НАСТРОЙКИ, USAGE, МЕТРИКИ, БЭКАПЫ, JOBS
   Классы ставит JS новых модулей. Система та же: графит/тёплый светлый/
   сдержанный teal, поверхности .panel/.ws-*, mono для чисел и меток.
   Разметки и обработчиков здесь нет; ни одного внешнего ресурса.
   ========================================================================== */

/* 14.1 ЖУРНАЛ — редактор записи и список последних дней ------------------ */
.ws-journal{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(260px,.85fr);gap:var(--sp-5);align-items:start;min-width:0}
.ws-journal-editor{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);
  padding:var(--sp-4) var(--sp-5) var(--sp-5);display:grid;gap:var(--sp-3);min-width:0;box-shadow:var(--sh-1)}
.ws-journal-side,.ws-journal-nav,.ws-journal-form{min-width:0}
.ws-journal-form{display:grid;gap:var(--sp-3)}
.ws-journal-list-title{display:block;padding:0 2px}
.ws-journal-date{display:block;color:var(--ink-soft);font-size:var(--fs-label);font-weight:800}
.ws-journal-date>span{display:block;margin-bottom:7px}
.ws-journal-date>input{display:block;width:100%}
.ws-date-input{border:1px solid var(--line);border-radius:var(--r-2);background:var(--field);color:var(--ink);
  font:500 var(--fs-ui) var(--mono);padding:8px 11px;min-height:38px;font-variant-numeric:tabular-nums;color-scheme:light}
.ws-date-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}
.ws-journal-input{display:block;width:100%;min-height:220px}
.ws-journal-actions{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;min-width:0}
.ws-journal-save{white-space:nowrap}
.ws-journal-status{font:500 var(--fs-meta) var(--mono);color:var(--muted);white-space:nowrap;overflow-wrap:anywhere}
.ws-journal-status[data-state="dirty"]{color:var(--warn-ink)}
.ws-journal-status[data-state="saved"]{color:var(--ok)}
.ws-journal-length{margin-left:auto;font-variant-numeric:tabular-nums;white-space:nowrap}
.ws-journal-list{display:grid;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);
  overflow:hidden;min-width:0;box-shadow:var(--sh-1)}
.ws-journal-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;align-items:baseline;
  width:100%;min-width:0;border:0;border-bottom:1px solid var(--line-soft);background:none;color:var(--ink);
  text-align:left;font:inherit;padding:13px var(--sp-5);min-height:52px;cursor:pointer;transition:background .14s}
.ws-journal-item:hover{background:var(--surface-2)}
.ws-journal-item:last-child{border-bottom:0}
.ws-journal-item.active{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}
.ws-journal-date-label{font:500 var(--fs-meta) var(--mono);color:var(--accent-ink);letter-spacing:.04em;
  text-transform:uppercase;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-journal-time{justify-self:end;font:400 var(--fs-micro) var(--mono);color:var(--muted);white-space:nowrap}
.ws-journal-preview{grid-column:1/-1;color:var(--ink-soft);font-size:var(--fs-meta);line-height:1.6;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ws-journal-empty,.ws-journal-note{margin:0;padding:14px var(--sp-5) 16px;color:var(--muted);font-size:var(--fs-meta);line-height:1.6}

/* 14.2 ЦЕЛИ — карточки с прогрессом ------------------------------------ */
.ws-goals{display:grid;gap:var(--sp-5);min-width:0}
.ws-goal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--sp-4);min-width:0}
.ws-goal-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);padding:var(--sp-4) var(--sp-5);
  display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-3);min-width:0;box-shadow:var(--sh-1);
  transition:border-color .14s,box-shadow .14s}
.ws-goal-card:hover{border-color:var(--accent-line);box-shadow:var(--sh-2)}
.ws-goal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-2);min-width:0}
.ws-goal-title{font-size:var(--fs-head);font-weight:800;letter-spacing:-.02em;line-height:1.35;overflow-wrap:anywhere}
.ws-goal-status{font:500 var(--fs-micro) var(--mono);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}
.ws-goal-card.done .ws-goal-status{color:var(--ok)}
.ws-goal-card.paused .ws-goal-status{color:var(--warn-ink)}
.ws-goal-description{color:var(--ink-soft);font-size:var(--fs-meta);line-height:1.65;overflow-wrap:anywhere;white-space:pre-line}
.ws-goal-progress{height:6px;background:var(--paper-deep);border-radius:var(--r-pill);overflow:hidden}
.ws-goal-progress-fill{display:block;height:100%;background:var(--accent);border-radius:var(--r-pill);transition:width .3s ease}
.ws-goal-card.done .ws-goal-progress-fill{background:var(--ok)}
.ws-goal-meta{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2);flex-wrap:wrap;min-width:0}
.ws-goal-percent{font:500 var(--fs-meta) var(--mono);color:var(--accent-ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.ws-goal-tag{font:500 var(--fs-micro) var(--mono);color:var(--accent-ink);background:var(--accent-soft);
  border-radius:var(--r-1);padding:3px 7px;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.ws-goal-actions{display:flex;gap:2px;flex-wrap:wrap;align-items:center;min-width:0}

/* 14.3 USAGE — 24-часовые столбики и квота (Hermes) -------------------- */
.ws-usage{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);
  padding:var(--sp-4) var(--sp-5) var(--sp-5);display:grid;gap:var(--sp-3);min-width:0;box-shadow:var(--sh-1)}
.ws-usage-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap;min-width:0}
.ws-usage-title{font-size:var(--fs-head);font-weight:800;letter-spacing:-.02em}
.ws-usage-chart{display:grid;gap:7px;min-width:0}
/* 24 колонки: столбик сам является меткой высоты (как .finance-bar), а если JS
   кладёт внутрь .ws-usage-bar-fill — трек становится мягкой подложкой. */
.ws-usage-bars{display:grid;grid-template-columns:repeat(24,minmax(0,1fr));gap:3px;align-items:end;
  height:104px;border-bottom:1px solid var(--line);padding-bottom:2px;min-width:0}
.ws-usage-bar{display:flex;flex-direction:column;justify-content:flex-end;min-height:2px;border-radius:2px 2px 0 0;
  background:var(--accent);transition:height .3s ease}
.ws-usage-bar:has(.ws-usage-bar-fill){background:var(--accent-soft)}
.ws-usage-bar-fill{display:block;width:100%;min-height:2px;background:var(--accent);border-radius:2px 2px 0 0}
.ws-usage-bar.now,.ws-usage-bar.current{background:var(--accent-ink)}
.ws-usage-bar.now:has(.ws-usage-bar-fill),.ws-usage-bar.current:has(.ws-usage-bar-fill){background:var(--accent-line)}
.ws-usage-bar.now .ws-usage-bar-fill,.ws-usage-bar.current .ws-usage-bar-fill{background:var(--accent-ink)}
.ws-usage-axis,.ws-usage-hours{display:grid;grid-template-columns:repeat(24,minmax(0,1fr));gap:3px;min-width:0;
  font:400 var(--fs-micro) var(--mono);color:var(--muted);font-variant-numeric:tabular-nums}
.ws-usage-hour{text-align:center;white-space:nowrap;overflow:visible}
.ws-usage-meta{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2);flex-wrap:wrap;
  font:500 var(--fs-meta) var(--mono);color:var(--muted)}
.ws-usage-quota,.ws-usage-total{white-space:nowrap;font-variant-numeric:tabular-nums}
.ws-usage-quota{color:var(--ink-soft)}
.ws-usage-caption,.ws-usage-note{color:var(--muted);font-size:var(--fs-meta);line-height:1.6;margin:0}

/* 14.4 МЕТРИКИ — нагрузка, память, диск, uptime ------------------------ */
.ws-metrics{display:grid;gap:var(--sp-4);min-width:0}
.ws-metric-grid,.ws-metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--sp-3)}
.ws-metric{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);padding:16px 19px;
  display:grid;gap:7px;min-width:0;box-shadow:var(--sh-1)}
.ws-metric-label{font:500 var(--fs-micro) var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.ws-metric-value{font-size:clamp(18px,1.9vw,24px);font-weight:750;letter-spacing:-.04em;line-height:1.25;
  font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.ws-metric-note{font-size:var(--fs-meta);color:var(--muted);line-height:1.55}
.ws-metric-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2);min-width:0;font-size:var(--fs-ui)}
.ws-metric-row span{color:var(--muted)}
.ws-metric-row strong{font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap}
.ws-meter{height:6px;background:var(--paper-deep);border-radius:var(--r-pill);overflow:hidden}
.ws-meter-fill{display:block;height:100%;background:var(--accent);border-radius:var(--r-pill);transition:width .3s ease}
.ws-meter-fill.warn{background:var(--clay)}
.ws-meter-fill.danger{background:var(--danger)}
.ws-uptime-list{display:grid;min-width:0}
.ws-uptime-row{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);min-width:0;
  padding:12px var(--sp-5);border-bottom:1px solid var(--line-soft);font-size:var(--fs-ui)}
.ws-uptime-row:last-child{border-bottom:0}
.ws-uptime-name{font-weight:700;overflow-wrap:anywhere}
.ws-uptime-value{font:500 var(--fs-meta) var(--mono);color:var(--ink-soft);font-variant-numeric:tabular-nums;white-space:nowrap}

/* 14.5 БЭКАПЫ ----------------------------------------------------------- */
.ws-backups{display:grid;gap:var(--sp-4);min-width:0}
.ws-backup-list,.ws-backup-rows{display:grid;min-width:0}
.ws-backup-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 14px;align-items:baseline;min-width:0;
  padding:13px var(--sp-5);border-bottom:1px solid var(--line-soft)}
.ws-backup-row:hover{background:var(--surface-2)}
.ws-backup-row:last-child{border-bottom:0}
.ws-backup-name{font:500 var(--fs-ui) var(--mono);overflow-wrap:anywhere;min-width:0}
.ws-backup-meta,.ws-backup-created{font-size:var(--fs-meta);color:var(--muted);font-variant-numeric:tabular-nums}
.ws-backup-size{font:500 var(--fs-meta) var(--mono);color:var(--muted);white-space:nowrap}
.ws-backup-actions{display:flex;gap:2px;flex-wrap:wrap;align-items:center;grid-column:1/-1}
.ws-backup-empty{margin:0;padding:24px var(--sp-5);color:var(--muted);font-size:var(--fs-body)}

/* 14.6 JOBS — расписание уведомлений и сводок --------------------------- */
.ws-jobs{display:grid;gap:var(--sp-4);min-width:0}
.ws-jobs-table{display:grid;min-width:0}
.ws-jobs-head{display:none}
.ws-job-row{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;min-width:0;
  padding:13px var(--sp-5);border-bottom:1px solid var(--line-soft);transition:background .14s}
.ws-job-row:hover{background:var(--surface-2)}
.ws-job-row:last-child{border-bottom:0}
.ws-job-main{flex:1 1 220px;min-width:0;display:grid;gap:3px}
.ws-job-title{font-size:var(--fs-ui);font-weight:700;line-height:1.45;overflow-wrap:anywhere}
.ws-job-message,.ws-job-meta{color:var(--muted);font-size:var(--fs-meta);line-height:1.5;overflow-wrap:anywhere}
.ws-job-kind{flex:none;font:500 var(--fs-micro) var(--mono);border-radius:var(--r-pill);padding:3px 9px;
  background:var(--paper-deep);color:var(--ink-soft);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.ws-job-kind.daily_brief{background:var(--accent-soft);color:var(--accent-ink)}
.ws-job-time{flex:none;font:500 var(--fs-meta) var(--mono);color:var(--accent-ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.ws-job-state{flex:none;font:500 var(--fs-micro) var(--mono);color:var(--muted);white-space:nowrap}
.ws-job-state.on{color:var(--ok)}
.ws-job-state.off{color:var(--danger)}
.ws-job-actions{display:flex;gap:2px;flex-wrap:wrap;align-items:center;margin-left:auto;justify-content:flex-end}
.ws-job-empty{margin:0;padding:22px var(--sp-5);color:var(--muted);font-size:var(--fs-body)}

/* 14.7 НАСТРОЙКИ — секции, строки значений, переключатели, deep-links --- */
.ws-settings{display:grid;gap:var(--sp-5);min-width:0}
.ws-settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--sp-5);align-items:start}
.ws-settings-section{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);
  padding:var(--sp-4) var(--sp-5) var(--sp-5);display:grid;gap:var(--sp-3);min-width:0;box-shadow:var(--sh-1)}
.ws-settings-title{font-size:var(--fs-head);font-weight:800;letter-spacing:-.02em}
.ws-settings-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);flex-wrap:wrap;min-width:0}
.ws-settings-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 14px;align-items:center;min-width:0;
  padding:11px 0;border-bottom:1px solid var(--line-soft)}
.ws-settings-row:last-child{border-bottom:0}
.ws-settings-label{font-size:var(--fs-ui);font-weight:700;overflow-wrap:anywhere}
.ws-settings-hint,.ws-settings-note{color:var(--muted);font-size:var(--fs-meta);line-height:1.6}
.ws-settings-hint.ws-success,.ws-success{color:var(--ok)}
.ws-settings-note{grid-column:1/-1}
.ws-settings-value{font:500 var(--fs-meta) var(--mono);color:var(--ink-soft);font-variant-numeric:tabular-nums;white-space:nowrap}
.ws-settings-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.ws-version{font:500 var(--fs-meta) var(--mono);color:var(--muted);letter-spacing:.04em}
/* переключатель-свитч: чекбокс остаётся настоящим input (доступность цела) */
.ws-switch{display:inline-flex;align-items:center;gap:10px;font-size:var(--fs-ui);font-weight:600;color:var(--ink-soft);
  cursor:pointer;min-height:34px}
.ws-switch input{width:36px;height:21px;flex:none;margin:0;appearance:none;cursor:pointer;position:relative;
  background:var(--paper-deep);border:1px solid var(--line);border-radius:var(--r-pill);
  transition:background .16s,border-color .16s}
.ws-switch input::after{content:'';position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;
  background:var(--surface);box-shadow:var(--sh-1);transition:transform .16s}
.ws-switch input:checked{background:var(--accent);border-color:var(--accent)}
.ws-switch input:checked::after{transform:translateX(15px)}
/* deep-links на нативную консоль: сетка плиток со стрелкой и пометкой «свой вход» */
.ws-deeplinks,.ws-links{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--sp-2);min-width:0}
.ws-deeplink,.ws-link-tile{display:grid;gap:3px;padding:13px 15px;border:1px solid var(--line);border-radius:var(--r-2);
  background:var(--surface);color:var(--ink);text-decoration:none;min-height:58px;min-width:0;
  transition:border-color .14s,background .14s}
.ws-deeplink:hover,.ws-link-tile:hover{border-color:var(--accent-line);background:var(--accent-soft)}
.ws-deeplink-label{font-size:var(--fs-ui);font-weight:700;color:var(--accent-ink);overflow-wrap:anywhere}
.ws-deeplink-note{font-size:var(--fs-meta);color:var(--muted);line-height:1.5}
.ws-sessions{display:grid;gap:2px;min-width:0}
.ws-sessions-meta,.ws-sessions-count{font:500 var(--fs-meta) var(--mono);color:var(--muted);font-variant-numeric:tabular-nums}

/* 14.8 АКТИВНОСТЬ — фильтры, аудит-строки, пагинация --------------------- */
.ws-filters{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;min-width:0}
.ws-filters select,.ws-filters input{min-height:38px;border:1px solid var(--line);border-radius:var(--r-2);
  background:var(--field);color:var(--ink);font-size:var(--fs-ui);padding:8px 11px;min-width:0}
.ws-filters select:focus,.ws-filters input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}
.ws-audit-list,.ws-audit-rows{display:grid;min-width:0}
.ws-audit-empty{margin:0;padding:24px var(--sp-5);color:var(--muted);font-size:var(--fs-body)}
.ws-audit-row{display:flex;gap:14px;align-items:flex-start;padding:15px var(--sp-5);min-width:0;
  border-bottom:1px solid var(--line-soft);transition:background .14s}
.ws-audit-row:hover{background:var(--surface-2)}
.ws-audit-row:last-child{border-bottom:0}
.ws-audit-entity,.ws-audit-action{font:500 var(--fs-micro) var(--mono);letter-spacing:.06em;color:var(--accent-ink);
  background:var(--accent-soft);border-radius:var(--r-1);padding:3px 7px;white-space:nowrap}
.ws-audit-time{font:500 var(--fs-meta) var(--mono);color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.ws-pager{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;min-width:0}
.ws-pager-status{font:500 var(--fs-meta) var(--mono);color:var(--muted);margin-right:auto}
.ws-pager .ws-action:disabled{opacity:.45;cursor:not-allowed;background:none}

/* 14.9 ПРОМПТЫ (чипы и тела) и прочие текстовые блоки новой волны ------ */
.ws-prompts{display:flex;gap:6px;flex-wrap:wrap;align-items:center;min-width:0}
.ws-prompt-chip{border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);border-radius:var(--r-pill);
  padding:6px 12px;min-height:32px;font-size:var(--fs-meta);font-weight:600;max-width:100%;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;transition:background .14s,color .14s,border-color .14s}
.ws-prompt-chip:hover{border-color:var(--accent-line);color:var(--accent-ink);background:var(--accent-soft)}
.ws-prompt-body{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.6 var(--mono);color:var(--ink-soft);
  background:var(--paper);padding:12px;border-radius:var(--r-1);margin:0}
.ws-prompt-actions{display:flex;gap:2px;flex-wrap:wrap;align-items:center}
/* служебная ссылка экспорта диалога: создаётся на один клик и скрыта */
.ws-export-download{display:none}
.ws-form{display:grid;gap:var(--sp-3);min-width:0}
.ws-notifications{display:grid;min-width:0}
.ws-notification-row{display:flex;gap:12px;align-items:flex-start;padding:12px var(--sp-5);min-width:0;
  border-bottom:1px solid var(--line-soft)}
.ws-notification-row:last-child{border-bottom:0}
.ws-notification-time{font:500 var(--fs-micro) var(--mono);color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}

/* ==========================================================================
   15. АДАПТИВ ВТОРОЙ ВОЛНЫ
   ========================================================================== */
@media(max-width:1180px){
  .ws-journal{grid-template-columns:1fr}
}
@media(max-width:760px){
  .ws-settings-grid{grid-template-columns:1fr}
  .ws-goal-grid,.ws-metric-grid,.ws-metrics-grid,.ws-deeplinks,.ws-links{grid-template-columns:1fr}
  .ws-journal-editor,.ws-goal-card,.ws-metric,.ws-settings-section{padding:15px 18px}
  .ws-journal-item,.ws-backup-row,.ws-job-row,.ws-audit-row,.ws-uptime-row{padding-left:18px;padding-right:18px}
  .ws-usage{padding:15px 18px 18px}
  .ws-usage-bars{height:84px;gap:2px}
  .ws-usage-axis,.ws-usage-hours{gap:2px}
  .ws-usage-hour{font-size:9px}
  .ws-switch{min-height:44px}
  .ws-pager .ws-action,.ws-job-actions .ws-action,.ws-backup-actions .ws-action{min-height:40px}
  /* Узкие экраны: аудит-строка перестраивается в две линии. Без этого строка
     остаётся одним flex-рядом, «хвост» (время, «Отменить») вылезает за вьюпорт,
     а заголовок сжимается до одного символа и текст рвётся по буквам. */
  .ws-audit-row{flex-wrap:wrap;gap:6px 10px;align-items:center}
  .ws-audit-main{flex:1 1 100%;order:3;min-width:0}
  .ws-audit-entity,.ws-audit-action,.ws-audit-time{flex:0 0 auto}
  .ws-audit-row .ws-audit-undo{margin-left:auto}
  .ws-audit-row .ws-audit-undone{margin-left:auto}
}
@media(max-width:520px){
  .ws-settings-row{grid-template-columns:1fr;gap:8px;align-items:start}
  .ws-settings-actions{justify-content:flex-start}
  .ws-usage-bars{height:72px}
  .ws-usage-hour{font-size:8px}
  .ws-journal-length{margin-left:0}
  .ws-journal-save{width:100%;justify-content:center}
}
@media(max-width:390px){
  .ws-usage-bars{height:64px;gap:2px}
  .ws-journal-editor,.ws-goal-card,.ws-metric,.ws-settings-section{padding:14px}
  .ws-journal-item,.ws-backup-row,.ws-job-row,.ws-audit-row,.ws-uptime-row{padding-left:14px;padding-right:14px}
  .ws-metric-value{font-size:19px}
}

/* ==========================================================================
   16. HERMES GATEWAY — режим, прогресс хода и события инструментов
   Классы .ws-gw-* живут только в представлении Hermes: полоска режима над
   чатом, панель статуса gateway в сайдбаре и карточка прогресса хода в
   переписке. Все цвета и метрики берутся из токенов системы.
   ========================================================================== */
.ws-gw-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-3);padding:var(--sp-3) var(--sp-4)}
.ws-gw-mode{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;min-width:0}
.ws-gw-pill{display:inline-flex;align-items:center;font:600 var(--fs-micro) var(--mono);letter-spacing:.1em;text-transform:uppercase;
  padding:3px 9px;border-radius:var(--r-pill);color:var(--muted);background:var(--paper-deep);border:1px solid var(--line);white-space:nowrap}
.ws-gw-pill-on{color:var(--accent-ink);background:var(--accent-soft);border-color:var(--accent-line)}
.ws-gw-pill-warn{color:var(--warn-ink);background:var(--warn-soft);border-color:var(--warn-line)}
.ws-gw-pill-off{color:var(--ink-soft);background:var(--surface-2);border-color:var(--faint);border-style:dashed}
.ws-gw-mode-text{color:var(--muted);font-size:var(--fs-meta);line-height:1.55;min-width:0}
.ws-gw-bar-actions{display:flex;align-items:center;gap:var(--sp-2)}

.ws-gw-meta{display:grid;gap:6px;margin:0 0 var(--sp-2)}
.ws-gw-meta-row{display:grid;grid-template-columns:minmax(72px,auto) minmax(0,1fr);gap:var(--sp-2);align-items:baseline}
.ws-gw-meta-key{font:500 var(--fs-micro) var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.ws-gw-meta-value{color:var(--ink-soft);font-size:var(--fs-meta);overflow-wrap:anywhere}
.ws-gw-footnote,.ws-gw-runtime{color:var(--muted);font-size:var(--fs-meta);line-height:1.6;margin:0}
.ws-gw-runtime{color:var(--ink-soft)}

.ws-gw-progress{display:grid;gap:var(--sp-2);align-self:stretch;background:var(--surface-2);border:1px solid var(--line);
  border-left:3px solid var(--accent);border-radius:var(--r-2);padding:var(--sp-3) var(--sp-4)}
.ws-gw-progress.failed{border-left-color:var(--danger);background:var(--danger-bg);border-color:var(--danger-line)}
.ws-gw-progress.cancelled{border-left-color:var(--clay);background:var(--warn-soft)}
.ws-gw-progress-head{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.ws-gw-phase{font-size:var(--fs-meta);color:var(--ink-soft);flex:1 1 auto;min-width:0}
.ws-gw-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex:0 0 auto}
.ws-gw-dot.running{background:var(--accent);animation:ws-gw-pulse 1.4s ease-in-out infinite}
.ws-gw-dot.done{background:var(--ok)}
.ws-gw-dot.failed{background:var(--danger)}
.ws-gw-dot.cancelled{background:var(--clay)}
@keyframes ws-gw-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.72)}}
@media (prefers-reduced-motion:reduce){.ws-gw-dot.running{animation:none}}

.ws-gw-tools{display:grid;gap:4px}
.ws-gw-tool{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-1);padding:5px 9px;font-size:var(--fs-meta)}
.ws-gw-tool-name{font:500 var(--fs-meta) var(--mono);color:var(--ink)}
.ws-gw-tool-status{font:500 var(--fs-micro) var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-left:auto}
.ws-gw-tool-running{border-color:var(--accent-line)}
.ws-gw-tool-running .ws-gw-tool-status{color:var(--accent-ink)}
.ws-gw-tool-done .ws-gw-tool-status{color:var(--ok)}
.ws-gw-tool-failed{border-color:var(--danger-line);background:var(--danger-bg)}
.ws-gw-tool-failed .ws-gw-tool-status{color:var(--danger)}
.ws-gw-tool-detail{flex:1 1 100%;color:var(--muted);font-size:var(--fs-meta);overflow-wrap:anywhere}

.ws-gw-commentary{display:grid;gap:2px}
.ws-gw-commentary-line{color:var(--muted);font-size:var(--fs-meta);line-height:1.55;margin:0}
.ws-gw-progress-error{color:var(--danger);font-size:var(--fs-meta);line-height:1.55;margin:0}
.ws-gw-stop{flex:0 0 auto}

/* Живой ответ во время стрима: тот же пузырь, но с мигающим курсором,
   который исчезает, когда ход завершён. */
.chat-msg.ws-gw-live .ws-chat-body{position:relative;white-space:pre-wrap}
.chat-msg.ws-gw-live-running .ws-chat-body::after{content:'';display:inline-block;width:7px;height:1em;margin-left:3px;
  vertical-align:text-bottom;background:var(--accent);animation:ws-gw-caret 1s step-end infinite}
@keyframes ws-gw-caret{0%,100%{opacity:1}50%{opacity:0}}
@media (prefers-reduced-motion:reduce){.chat-msg.ws-gw-live-running .ws-chat-body::after{animation:none}}

/* Полоса режима: основной gateway или резервный мост — подписаны явно. */
.ws-gw-fallback{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;padding:var(--sp-2) var(--sp-3);
  border-radius:var(--r-3);border:1px dashed var(--line);background:var(--surface-2)}
.ws-gw-fallback-on{border-color:var(--warn-line);background:var(--warn-soft)}
.ws-gw-fallback-tag{display:inline-flex;align-items:center;font:600 var(--fs-micro) var(--mono);letter-spacing:.1em;
  text-transform:uppercase;padding:3px 9px;border-radius:var(--r-pill);color:var(--muted);
  background:var(--paper-deep);border:1px solid var(--line);white-space:nowrap}
.ws-gw-fallback-on .ws-gw-fallback-tag{color:var(--warn-ink);background:var(--surface);border-color:var(--warn-line)}
.ws-gw-fallback-off .ws-gw-fallback-tag{color:var(--accent-ink);background:var(--accent-soft);border-color:var(--accent-line)}
.ws-gw-fallback-text{color:var(--muted);font-size:var(--fs-meta);line-height:1.55;min-width:0}

/* Встроенный ассистент финансов: тот же чат, но всегда мост без инструментов. */
.ws-fin-assistant{margin-top:var(--sp-5)}
.ws-fin-mode{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;padding:var(--sp-2) var(--sp-3);
  border:1px solid var(--line);border-radius:var(--r-3);background:var(--surface-2)}
.ws-fin-mode-tag{display:inline-flex;align-items:center;font:600 var(--fs-micro) var(--mono);letter-spacing:.1em;
  text-transform:uppercase;padding:3px 9px;border-radius:var(--r-pill);color:var(--ink-soft);
  background:var(--surface);border:1px dashed var(--faint);white-space:nowrap}
.ws-fin-mode-text{color:var(--muted);font-size:var(--fs-meta);line-height:1.55;min-width:0}

@media(max-width:760px){
  .ws-hermes-workspace .ws-chat-main{order:1}
  .ws-hermes-workspace .ws-chat-side{order:2}
  .ws-hermes-workspace .ws-gw-fallback{padding:var(--sp-2) var(--sp-3)}
  .ws-hermes-workspace .ws-gw-fallback-text{display:none}
  .ws-hermes-workspace .ws-gw-check{min-height:40px}
  .ws-gw-bar{padding:var(--sp-2) var(--sp-3)}
  .ws-gw-bar-actions{width:100%}
  .ws-gw-check{min-height:40px}
}
@media(max-width:520px){
  .ws-gw-meta-row{grid-template-columns:1fr;gap:1px}
  .ws-gw-progress{padding:var(--sp-2) var(--sp-3)}
}
