/* ============================================================
   components.css — компоненты новых разделов AI-фабрики.
   Все решения продолжают фирменный стиль Ангстрем из
   ref/prototype-v4.html: radius 0, без теней, графит + красный
   только как акцент, Vollkorn для заголовков, Inter для UI.
============================================================ */

/* ---------- Служебные утилиты ---------- */
.panel-num{position:absolute;top:var(--space-3);right:var(--space-4);font-family:var(--font-mono);font-size:11px;letter-spacing:.02em;color:var(--fg-placeholder);text-transform:none;white-space:nowrap;}
.panel-num[title]{cursor:help;border-bottom:1px dotted var(--border-strong);}
.demo-note{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-family:var(--font-mono);color:var(--fg-placeholder);border:1px solid var(--border-default);padding:2px 6px;}
.demo-note svg{width:11px;height:11px;}
.demo-note.live{color:var(--fg-success);border-color:var(--fg-success);}
.demo-note.loading{color:var(--fg-warning);border-color:var(--fg-warning);}
.muted{color:var(--fg-muted);}
.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;}
.nowrap{white-space:nowrap;}
.stack{display:flex;flex-direction:column;gap:var(--space-4);}
.stack-2{display:flex;flex-direction:column;gap:var(--space-2);}
.row-wrap{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;}
.section-gap{margin-bottom:var(--space-4);}
.hint-text{font-size:var(--fs-12);color:var(--fg-muted);line-height:1.45;}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4);align-items:start;}
@media (max-width:1024px){.two-col{grid-template-columns:1fr;}}
.three-col{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-4);align-items:start;}
@media (max-width:1100px){.three-col{grid-template-columns:1fr;}}

/* ---------- Notice / callout ---------- */
.notice{display:flex;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--border-default);border-left:3px solid var(--color-graphite);background:var(--bg-surface-alt);font-size:var(--fs-12);line-height:1.45;color:var(--fg-muted);}
.notice svg{width:15px;height:15px;flex-shrink:0;margin-top:1px;color:var(--fg-muted);}
.notice strong{color:var(--fg-default);font-weight:var(--fw-semibold);}
.notice.danger{border-left-color:var(--color-accent-red);}
.notice.warn{border-left-color:var(--color-warning);}
.notice.ok{border-left-color:var(--color-success);}

/* ---------- Роли ---------- */
.role-select-wrap{position:relative;}
.role-select{display:flex;align-items:center;gap:var(--space-2);height:36px;padding:0 var(--space-3);border:1px solid var(--border-strong);background:var(--bg-page);font-size:var(--fs-14);font-weight:var(--fw-medium);max-width:260px;}
.role-select:hover{border-color:var(--color-graphite);}
.role-select svg{width:14px;height:14px;color:var(--fg-muted);flex-shrink:0;}
.role-select .rname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
@media (max-width:900px){.role-select .rname{display:none;}.role-select{padding:0 var(--space-2);}}
.role-menu{position:absolute;right:0;top:calc(100% + 4px);z-index:60;width:300px;background:var(--bg-page);border:1px solid var(--border-strong);display:none;}
.role-menu.open{display:block;}
.role-menu-item{display:block;width:100%;text-align:left;padding:var(--space-3);border-bottom:1px solid var(--border-default);}
.role-menu-item:last-child{border-bottom:none;}
.role-menu-item:hover{background:var(--color-beige);}
.role-menu-item.active{border-left:2px solid var(--color-accent-red);}
.role-menu-name{font-size:var(--fs-14);font-weight:var(--fw-semibold);display:block;}
.role-menu-scope{font-size:var(--fs-12);color:var(--fg-muted);display:block;line-height:1.4;}

/* ---------- Кнопки ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);height:34px;padding:0 var(--space-4);font-size:var(--fs-12);font-weight:var(--fw-semibold);border:1px solid var(--border-strong);background:var(--bg-page);color:var(--fg-default);white-space:nowrap;}
.btn svg{width:14px;height:14px;flex-shrink:0;}
.btn:hover{border-color:var(--color-graphite);background:var(--bg-surface-alt);}
.btn.primary{background:var(--color-accent-red);border-color:var(--color-accent-red);color:var(--color-white);}
.btn.primary:hover{background:var(--color-accent-red-dark);border-color:var(--color-accent-red-dark);}
.btn.solid{background:var(--color-graphite);border-color:var(--color-graphite);color:var(--color-white);}
.btn.solid:hover{background:var(--color-graphite-2);}
[data-theme="dark"] .btn.solid{background:var(--color-white);border-color:var(--color-white);color:var(--color-graphite);}
.btn.ghost{border-color:transparent;color:var(--fg-muted);}
.btn.ghost:hover{border-color:var(--border-strong);}
.btn:disabled{cursor:not-allowed;opacity:1;}

/* Заблокированное состояние (жёсткий инвариант) — замок + причина */
.btn.locked,.btn.locked:hover{cursor:not-allowed;background:var(--color-error-bg);border-color:var(--color-accent-red);color:var(--fg-danger);}
[data-theme="dark"] .btn.locked,[data-theme="dark"] .btn.locked:hover{background:var(--color-error-bg);border-color:var(--fg-danger);color:var(--fg-danger);}
.btn.locked svg{color:currentColor;}
.btn.no-right{cursor:not-allowed;background:var(--bg-surface-alt);border-color:var(--border-default);color:var(--fg-placeholder);}
.btn.no-right:hover{background:var(--bg-surface-alt);border-color:var(--border-default);}

/* Тултип-причина */
.tip{position:relative;}
.tip .tip-body{position:absolute;left:0;bottom:calc(100% + 6px);z-index:70;width:min(300px,72vw);padding:var(--space-3);background:var(--color-graphite);color:var(--color-white);font-size:var(--fs-12);font-weight:var(--fw-regular);line-height:1.45;text-transform:none;letter-spacing:0;white-space:normal;text-align:left;border:1px solid var(--color-graphite-2);opacity:0;visibility:hidden;transition:opacity .12s ease;}
[data-theme="dark"] .tip .tip-body{background:#241F1F;border-color:var(--border-strong);}
.tip:hover .tip-body,.tip:focus-visible .tip-body,.tip:focus-within .tip-body{opacity:1;visibility:visible;}
.tip.tip-right .tip-body{left:auto;right:0;}

/* ---------- Таблицы ---------- */
.table-wrap{overflow-x:auto;border:1px solid var(--border-default);}
.dtable{width:100%;border-collapse:collapse;font-size:var(--fs-12);min-width:640px;}
.dtable.wide{min-width:860px;}
.dtable th{text-align:left;padding:var(--space-3);background:var(--bg-surface);border-bottom:1px solid var(--border-strong);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-muted);font-weight:var(--fw-semibold);white-space:nowrap;}
.dtable td{padding:var(--space-3);border-bottom:1px solid var(--border-default);vertical-align:top;line-height:1.4;color:var(--fg-default);}
.dtable tbody tr:last-child td{border-bottom:none;}
.dtable tbody tr:hover{background:var(--bg-surface-alt);}
.dtable td.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap;}
.dtable td.strongcell{font-weight:var(--fw-semibold);}
.dtable tr.is-selected{background:var(--color-beige);}

/* ---------- Master-detail ---------- */
.split{display:grid;grid-template-columns:340px 1fr;gap:var(--space-4);align-items:start;}
@media (max-width:1200px){.split{grid-template-columns:290px 1fr;}}
@media (max-width:900px){.split{grid-template-columns:1fr;}}
.list-pane{border:1px solid var(--border-default);background:var(--bg-page);max-height:calc(100dvh - 240px);overflow-y:auto;}
@media (max-width:900px){.list-pane{max-height:340px;}}
.list-pane-head{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-default);background:var(--bg-surface);display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);position:sticky;top:0;z-index:2;}
.list-pane-title{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-muted);font-weight:var(--fw-semibold);}
.run-item{display:block;width:100%;text-align:left;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-default);border-left:2px solid transparent;}
.run-item:last-child{border-bottom:none;}
.run-item:hover{background:var(--bg-surface-alt);}
.run-item.active{background:var(--bg-surface-alt);border-left-color:var(--color-accent-red);}
.run-item-top{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);margin-bottom:2px;}
.run-item-id{font-family:var(--font-mono);font-size:var(--fs-12);font-weight:var(--fw-semibold);color:var(--fg-default);}
.run-item-name{font-size:var(--fs-14);font-weight:var(--fw-semibold);line-height:1.3;margin-bottom:var(--space-1);}
.run-item-meta{font-size:11px;color:var(--fg-muted);font-family:var(--font-mono);}

.detail-pane{display:flex;flex-direction:column;gap:var(--space-4);min-width:0;}
.detail-head{border:1px solid var(--border-default);padding:var(--space-5);background:var(--bg-page);}
.detail-title{font-family:var(--font-heading);font-size:var(--fs-22);font-weight:var(--fw-semibold);line-height:var(--lh-heading);margin-bottom:var(--space-2);}
.kv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--space-3) var(--space-4);margin-top:var(--space-4);}
.kv-k{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--fg-muted);font-weight:var(--fw-semibold);margin-bottom:2px;}
.kv-v{font-size:var(--fs-14);font-weight:var(--fw-medium);line-height:1.35;}
.kv-v.mono{font-size:var(--fs-12);}
.detail-actions{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-5);padding-top:var(--space-4);border-top:1px solid var(--border-default);}

/* ---------- Таймлайн слоёв L1→L7 ---------- */
.layers{display:flex;flex-direction:column;}
.layer-step{display:grid;grid-template-columns:26px 1fr;gap:var(--space-3);position:relative;padding-bottom:var(--space-4);}
.layer-step:last-child{padding-bottom:0;}
.layer-rail{display:flex;flex-direction:column;align-items:center;}
.layer-dot{width:18px;height:18px;border:2px solid var(--border-strong);background:var(--bg-page);flex-shrink:0;display:flex;align-items:center;justify-content:center;}
.layer-dot svg{width:10px;height:10px;}
.layer-step.done .layer-dot{background:var(--color-success);border-color:var(--color-success);color:var(--color-white);}
.layer-step.running .layer-dot{background:var(--color-link);border-color:var(--color-link);color:var(--color-white);}
.layer-step.waiting .layer-dot{background:var(--color-warning);border-color:var(--color-warning);color:var(--color-white);}
.layer-step.failed .layer-dot{background:var(--color-accent-red);border-color:var(--color-accent-red);color:var(--color-white);}
.layer-line{flex:1;width:2px;background:var(--border-default);margin-top:2px;min-height:12px;}
.layer-step:last-child .layer-line{display:none;}
.layer-body{min-width:0;padding-top:0;}
.layer-name{font-size:var(--fs-14);font-weight:var(--fw-semibold);line-height:1.3;}
.layer-contract{font-size:var(--fs-12);color:var(--fg-muted);line-height:1.45;margin-top:2px;}
.layer-meta{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-3);margin-top:var(--space-2);font-size:11px;font-family:var(--font-mono);color:var(--fg-placeholder);}
.layer-status{font-size:11px;font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.05em;padding:2px 6px;border:1px solid var(--border-strong);color:var(--fg-muted);}
.layer-step.done .layer-status{color:var(--fg-success);border-color:var(--fg-success);}
.layer-step.running .layer-status{color:var(--fg-link);border-color:var(--fg-link);}
.layer-step.waiting .layer-status{color:var(--fg-warning);border-color:var(--fg-warning);}
.layer-step.failed .layer-status{color:var(--fg-danger);border-color:var(--fg-danger);}

/* Цепочка состояний ленты (9 Fast / 12 Core) */
.state-chain{display:flex;flex-wrap:wrap;gap:var(--space-1);align-items:center;}
.state-pill{font-family:var(--font-mono);font-size:11px;padding:3px 7px;border:1px solid var(--border-default);color:var(--fg-placeholder);background:var(--bg-page);white-space:nowrap;}
.state-pill.passed{border-color:var(--color-success);color:var(--fg-success);}
.state-pill.current{background:var(--color-graphite);border-color:var(--color-graphite);color:var(--color-white);}
[data-theme="dark"] .state-pill.current{background:var(--color-white);border-color:var(--color-white);color:var(--color-graphite);}
.state-sep{color:var(--fg-placeholder);font-size:11px;}

/* ---------- Консоль логов агентов ---------- */
.log-toolbar{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;margin-bottom:var(--space-3);}
.log-console{background:var(--color-graphite);border:1px solid var(--color-graphite-2);max-height:280px;overflow:auto;padding:var(--space-3);}
[data-theme="dark"] .log-console{background:#241F1F;border-color:var(--border-strong);}
.log-line{display:grid;grid-template-columns:64px 190px 52px 1fr;gap:var(--space-3);font-family:var(--font-mono);font-size:11px;line-height:1.6;color:#DAD5D4;padding:1px 0;}
.log-line .lt{color:#A69F9E;}
.log-line .la{color:#EDE9E8;font-weight:var(--fw-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.log-line .ll{font-weight:var(--fw-semibold);text-transform:uppercase;}
.log-line .lm{color:#DAD5D4;}
.log-line.info .ll{color:#A8C4EE;}
.log-line.warn .ll{color:#E6C25A;}
.log-line.error .ll{color:#FF8A9C;}
@media (max-width:900px){
  .log-line{grid-template-columns:1fr;gap:0;padding:var(--space-2) 0;border-bottom:1px solid #5A5555;}
  .log-line .la{white-space:normal;}
}

/* ---------- Judge-скоркарта ---------- */
.decision-badge{display:inline-flex;align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:var(--fs-18);font-weight:var(--fw-bold);letter-spacing:.06em;padding:var(--space-2) var(--space-4);color:var(--color-white);text-transform:uppercase;}
.decision-badge svg{width:17px;height:17px;}
.decision-badge.promote{background:var(--color-success);}
.decision-badge.hold{background:var(--color-warning);}
.decision-badge.rollback{background:var(--color-accent-red);}
.decision-badge.pending{background:var(--color-graphite);}
.decision-tag{display:inline-flex;font-family:var(--font-mono);font-size:11px;font-weight:var(--fw-bold);letter-spacing:.05em;padding:3px 8px;color:var(--color-white);}
.decision-tag.promote{background:var(--color-success);}
.decision-tag.hold{background:var(--color-warning);}
.decision-tag.rollback{background:var(--color-accent-red);}
.decision-tag.pending{background:var(--color-graphite);}
[data-theme="dark"] .decision-tag.pending{background:var(--color-graphite-2);border:1px solid var(--border-strong);}

.metric-list{display:flex;flex-direction:column;gap:var(--space-4);}
.metric-row{display:flex;flex-direction:column;gap:6px;}
.metric-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);}
.metric-name{font-size:var(--fs-12);font-weight:var(--fw-semibold);}
.metric-vals{font-family:var(--font-mono);font-size:var(--fs-12);font-variant-numeric:tabular-nums;white-space:nowrap;}
.metric-vals .ok{color:var(--fg-success);font-weight:var(--fw-semibold);}
.metric-vals .bad{color:var(--fg-danger);font-weight:var(--fw-semibold);}
.metric-vals .thr{color:var(--fg-muted);}
.bar{position:relative;height:8px;background:var(--color-beige);}
.bar-fill{position:absolute;left:0;top:0;bottom:0;background:var(--color-success);}
.bar-fill.bad{background:var(--color-accent-red);}
.bar-fill.warn{background:var(--color-warning);}
.bar-thr{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--color-graphite);}
[data-theme="dark"] .bar-thr{background:var(--color-white);}
.bar-thr-label{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--color-accent-red);}
.chart-box{position:relative;height:260px;}
.chart-box.short{height:200px;}
.chart-box.tall{height:300px;}

/* ---------- Прогресс-бары бюджетов ---------- */
.budget-row{padding:var(--space-4) 0;border-bottom:1px solid var(--border-default);}
.budget-row:last-child{border-bottom:none;}
.budget-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-2);}
.budget-name{font-size:var(--fs-14);font-weight:var(--fw-semibold);}
.budget-scope{font-size:11px;font-family:var(--font-mono);color:var(--fg-placeholder);text-transform:uppercase;letter-spacing:.05em;}
.budget-nums{font-family:var(--font-mono);font-size:var(--fs-12);font-variant-numeric:tabular-nums;color:var(--fg-muted);white-space:nowrap;}
.bar.lg{height:12px;}
.alert-tag{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;background:var(--color-accent-red);color:var(--color-white);}
.alert-tag svg{width:11px;height:11px;}
.ok-tag{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border:1px solid var(--fg-success);color:var(--fg-success);}
.ok-tag svg{width:11px;height:11px;}
.budget-foot{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);margin-top:var(--space-2);font-size:var(--fs-12);color:var(--fg-muted);align-items:center;}

/* ---------- Approval Board ---------- */
.board-card{border:1px solid var(--border-default);background:var(--bg-page);}
.board-card-head{padding:var(--space-4);border-bottom:1px solid var(--border-default);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);flex-wrap:nowrap;}
.board-card-head > div:first-child{min-width:0;}
.board-card-head .class-chip{flex:0 0 auto;}
.board-card-title{font-size:var(--fs-16);font-weight:var(--fw-semibold);line-height:1.3;}
.board-card-sub{font-size:var(--fs-12);color:var(--fg-muted);font-family:var(--font-mono);margin-top:2px;}
.board-card-body{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-4);}
.member-row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:1px solid var(--border-default);flex-wrap:wrap;}
.member-row:last-child{border-bottom:none;}
.member-info{flex:1;min-width:150px;}
.member-role{font-size:var(--fs-14);font-weight:var(--fw-semibold);}
.member-name{font-size:var(--fs-12);color:var(--fg-muted);}
.req-tag{font-size:10px;font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.06em;padding:2px 6px;border:1px solid var(--color-accent-red);color:var(--fg-danger);white-space:nowrap;}
.opt-tag{font-size:10px;font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.06em;padding:2px 6px;border:1px solid var(--border-strong);color:var(--fg-placeholder);white-space:nowrap;}
.vote{font-size:11px;font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.05em;padding:3px 8px;white-space:nowrap;color:var(--color-white);}
.vote.for{background:var(--color-success);}
.vote.against{background:var(--color-accent-red);}
.vote.abstain{background:var(--color-graphite);}
.vote.pending{background:transparent;border:1px dashed var(--border-strong);color:var(--fg-muted);}

/* ---------- Схема пайплайна ---------- */
.pipeline-wrap{overflow-x:auto;border:1px solid var(--border-default);background:var(--bg-page);padding:var(--space-5);}
.pipe-svg{display:block;min-width:940px;height:auto;}
.pipe-lane-label{font-family:var(--font-body);font-size:12px;font-weight:600;fill:var(--fg-muted);text-transform:uppercase;letter-spacing:.08em;}
.pipe-track{fill:var(--color-beige);}
.pipe-gate{cursor:pointer;}
.pipe-gate rect{fill:var(--bg-page);stroke:var(--border-strong);stroke-width:1.5;}
.pipe-gate:hover rect{stroke:var(--color-graphite);}
.pipe-gate.blocking rect{stroke:var(--color-graphite);stroke-width:2;}
.pipe-gate.passed rect{fill:var(--color-success-bg);stroke:var(--color-success);}
.pipe-gate.locked rect{fill:var(--color-error-bg);stroke:var(--color-accent-red);stroke-width:2;}
.pipe-gate.current rect{fill:var(--color-warning-bg);stroke:var(--color-warning);stroke-width:2.5;}
.pipe-gate.selected rect{stroke:var(--color-accent-red);stroke-width:2.5;}
.pipe-gate-letter{font-family:var(--font-mono);font-size:15px;font-weight:700;fill:var(--fg-default);text-anchor:middle;}
.pipe-gate-name{font-family:var(--font-body);font-size:10.5px;fill:var(--fg-muted);text-anchor:middle;}
.pipe-arrow{stroke:var(--border-strong);stroke-width:1.5;fill:none;}
.pipe-marker-fill{fill:var(--border-strong);}
.pipe-badge{font-family:var(--font-mono);font-size:10px;fill:var(--fg-placeholder);}
.pipe-pos{fill:var(--color-accent-red);}
.pipe-pos-text{font-family:var(--font-mono);font-size:10px;fill:var(--color-accent-red);font-weight:700;}
.gate-detail{border:1px solid var(--border-strong);border-left:3px solid var(--color-accent-red);padding:var(--space-4);background:var(--bg-surface-alt);}
.gate-detail-title{font-size:var(--fs-16);font-weight:var(--fw-semibold);margin-bottom:var(--space-2);}
.gate-legend{display:flex;flex-wrap:wrap;gap:var(--space-3) var(--space-5);font-size:var(--fs-12);color:var(--fg-muted);}
.legend-item{display:flex;align-items:center;gap:var(--space-2);}
.legend-swatch{width:14px;height:14px;border:1.5px solid var(--border-strong);flex-shrink:0;}
.legend-swatch.passed{background:var(--color-success-bg);border-color:var(--color-success);}
.legend-swatch.current{background:var(--color-warning-bg);border-color:var(--color-warning);}
.legend-swatch.locked{background:var(--color-error-bg);border-color:var(--color-accent-red);}

/* ---------- Шаблоны ---------- */
.tpl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--space-4);}
@media (max-width:420px){.tpl-grid{grid-template-columns:1fr;}}
.tpl-card{border:1px solid var(--border-default);background:var(--bg-page);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3);min-width:0;}
.tpl-card:hover{border-color:var(--color-graphite);}
.tpl-head{display:flex;align-items:flex-start;gap:var(--space-3);}
.tpl-num{font-family:var(--font-mono);font-size:var(--fs-12);font-weight:var(--fw-bold);color:var(--fg-placeholder);width:22px;flex-shrink:0;padding-top:2px;}
.tpl-name{font-family:var(--font-mono);font-size:var(--fs-12);font-weight:var(--fw-semibold);line-height:1.35;overflow-wrap:break-word;}
.tpl-purpose{font-size:var(--fs-14);font-weight:var(--fw-semibold);margin-top:2px;line-height:1.3;}
.tpl-marker{font-family:var(--font-mono);font-size:11px;color:var(--fg-muted);background:var(--bg-surface-alt);padding:3px 6px;display:inline-block;overflow-wrap:break-word;}
.tpl-files{display:flex;flex-direction:column;gap:4px;padding-top:var(--space-2);border-top:1px solid var(--border-default);}
.tpl-file{display:flex;align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:11px;color:var(--fg-muted);}
.tpl-file svg{width:12px;height:12px;flex-shrink:0;}
.tpl-file.ok{color:var(--fg-success);}
.tpl-file.missing{color:var(--fg-danger);font-weight:var(--fw-semibold);}
.tpl-foot{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;margin-top:auto;}

/* ---------- Матрица рисков ---------- */
.risk-cat{border:1px solid var(--border-default);background:var(--bg-page);}
.risk-cat-head{padding:var(--space-3) var(--space-4);background:var(--bg-surface);border-bottom:1px solid var(--border-strong);display:flex;align-items:center;gap:var(--space-3);justify-content:space-between;flex-wrap:wrap;}
.risk-cat-title{font-size:var(--fs-14);font-weight:var(--fw-semibold);}
.risk-item{padding:var(--space-4);border-bottom:1px solid var(--border-default);}
.risk-item:last-child{border-bottom:none;}
.risk-name{font-size:var(--fs-14);font-weight:var(--fw-semibold);line-height:1.35;margin-bottom:var(--space-2);}
.risk-scales{display:flex;flex-wrap:wrap;gap:var(--space-4);margin-bottom:var(--space-2);}
.scale{display:flex;align-items:center;gap:var(--space-2);font-size:11px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.05em;font-weight:var(--fw-semibold);}
.scale-dots{display:flex;gap:3px;}
.scale-dot{width:9px;height:9px;border:1px solid var(--border-strong);}
.scale-dot.on{background:var(--color-graphite);border-color:var(--color-graphite);}
.scale-dot.on.high{background:var(--color-accent-red);border-color:var(--color-accent-red);}
.risk-measures{font-size:var(--fs-12);color:var(--fg-muted);line-height:1.5;}
.risk-measures strong{color:var(--fg-default);font-weight:var(--fw-semibold);}

/* ---------- Чат: чипы контекста и карточки-ссылки ---------- */
.ctx-chips{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center;padding-top:var(--space-2);border-top:1px solid var(--border-default);}
.ctx-chip{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:var(--fw-medium);padding:3px 6px 3px 8px;border:1px solid var(--border-strong);background:var(--bg-surface-alt);color:var(--fg-muted);max-width:100%;}
.ctx-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ctx-chip button{display:flex;align-items:center;color:var(--fg-placeholder);padding:0;}
.ctx-chip button:hover{color:var(--fg-danger);}
.ctx-chip svg{width:12px;height:12px;}
.ctx-empty{font-size:11px;color:var(--fg-placeholder);}
.link-card{display:flex;align-items:center;gap:var(--space-3);width:100%;text-align:left;border:1px solid var(--border-strong);background:var(--bg-surface-alt);padding:var(--space-3);margin-top:var(--space-3);color:inherit;}
.link-card:hover{border-color:var(--color-accent-red);}
.link-card-icon{width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--color-graphite);color:var(--color-white);}
[data-theme="dark"] .link-card-icon{background:var(--color-white);color:var(--color-graphite);}
.link-card-icon svg{width:16px;height:16px;}
.link-card-body{flex:1;min-width:0;}
.link-card-title{font-size:var(--fs-14);font-weight:var(--fw-semibold);line-height:1.3;}
.link-card-sub{font-size:var(--fs-12);color:var(--fg-muted);font-family:var(--font-mono);}
.link-card-go{font-size:var(--fs-12);color:var(--fg-muted);flex-shrink:0;display:flex;align-items:center;}
.link-card-go svg{width:15px;height:15px;}

/* ---------- Скелетоны и пустые состояния ---------- */
.skeleton{background:linear-gradient(90deg,var(--color-beige) 25%,var(--bg-surface-alt) 50%,var(--color-beige) 75%);background-size:200% 100%;animation:sk 1.3s infinite linear;height:12px;}
@keyframes sk{0%{background-position:200% 0;}100%{background-position:-200% 0;}}
.skeleton-row{display:flex;gap:var(--space-3);padding:var(--space-3);border-bottom:1px solid var(--border-default);}
.skeleton-row .skeleton:nth-child(1){flex:0 0 84px;}
.skeleton-row .skeleton:nth-child(2){flex:1;}
.skeleton-row .skeleton:nth-child(3){flex:0 0 64px;}
.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-10) var(--space-4);text-align:center;border:1px dashed var(--border-strong);color:var(--fg-muted);}
.empty-state svg{width:26px;height:26px;color:var(--fg-placeholder);}
.empty-state-title{font-size:var(--fs-14);font-weight:var(--fw-semibold);color:var(--fg-default);}
.empty-state p{font-size:var(--fs-12);max-width:44ch;}

/* ---------- Прочее ---------- */
.gate-chip{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:11px;font-weight:var(--fw-semibold);padding:3px 7px;border:1px solid var(--border-strong);color:var(--fg-muted);white-space:nowrap;}
.gate-chip svg{width:11px;height:11px;}
.gate-chip.passed{border-color:var(--fg-success);color:var(--fg-success);}
.gate-chip.locked{border-color:var(--color-accent-red);color:var(--fg-danger);background:var(--color-error-bg);}
.gate-chip.current{border-color:var(--fg-warning);color:var(--fg-warning);}
.class-chip{display:inline-flex;font-family:var(--font-mono);font-size:11px;font-weight:var(--fw-bold);padding:3px 7px;background:var(--color-graphite);color:var(--color-white);white-space:nowrap;}
[data-theme="dark"] .class-chip{background:var(--color-white);color:var(--color-graphite);}
.sev{display:inline-flex;font-size:11px;font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;color:var(--color-white);white-space:nowrap;}
.sev.critical{background:var(--color-accent-red);}
.sev.high{background:var(--color-accent-red-dark);}
.sev.medium{background:var(--color-warning);}
.sev.low{background:var(--color-graphite);}
.status-chip{display:inline-flex;font-size:11px;font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:.05em;padding:2px 7px;border:1px solid var(--border-strong);color:var(--fg-muted);white-space:nowrap;}
.status-chip.ok{border-color:var(--fg-success);color:var(--fg-success);}
.status-chip.open{border-color:var(--fg-danger);color:var(--fg-danger);}
.status-chip.progress{border-color:var(--fg-warning);color:var(--fg-warning);}
.mini-stat{display:flex;flex-direction:column;gap:2px;padding:var(--space-3);border:1px solid var(--border-default);min-width:0;}
.mini-stat-k{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--fg-muted);font-weight:var(--fw-semibold);}
.mini-stat-v{font-family:var(--font-mono);font-size:var(--fs-18);font-weight:var(--fw-semibold);font-variant-numeric:tabular-nums;}
.mini-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--space-3);}

/* ---------- Дополнения: таблицы, контекст чата, матрица рисков ---------- */
.dtable td.num,.dtable th.num{font-family:var(--font-mono);font-size:var(--fs-12);white-space:nowrap;}
.dtable td.strongcell{font-weight:var(--fw-semibold);color:var(--fg-default);}
.dtable tr.is-selected td{background:var(--bg-surface-alt);}
.dtable tbody tr:hover td{background:var(--bg-surface-alt);}

.ctx-bar{max-width:820px;margin:0 auto;padding:var(--space-4) var(--space-6) 0;}
.ctx-note{font-size:var(--fs-12);color:var(--fg-muted);border-left:2px solid var(--border-strong);padding-left:var(--space-3);margin-bottom:var(--space-3);}

.risk-matrix td.risk-cell{height:52px;min-width:64px;vertical-align:middle;text-align:center;padding:var(--space-2);}
.risk-matrix td.risk-cell.z-low{background:var(--color-success-bg);}
.risk-matrix td.risk-cell.z-mid{background:var(--color-warning-bg);}
.risk-matrix td.risk-cell.z-high{background:var(--color-error-bg);}
.risk-dot{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;margin:1px;
  font-family:var(--font-mono);font-size:10px;font-weight:700;color:var(--color-white);background:var(--color-graphite);}
[data-theme="dark"] .risk-dot{background:var(--color-accent-red);}
.dtable.compact{min-width:0;}
.dtable.compact td,.dtable.compact th{white-space:normal;}
.chart-box.radar{height:320px;}

/* тёмная тема: закрашенные деления шкалы должны быть светлыми, иначе не видны */
[data-theme="dark"] .scale-dot.on{background:var(--fg-default);border-color:var(--fg-default);}
[data-theme="dark"] .scale-dot.on.high{background:var(--color-accent-red);border-color:var(--color-accent-red);}
[data-theme="dark"] .bar-thr{background:var(--fg-default);}
[data-theme="dark"] .risk-dot{background:var(--color-white);color:var(--color-graphite);}
[data-theme="dark"] .sev.low{background:var(--color-graphite-2);border:1px solid var(--border-strong);}
[data-theme="dark"] .vote.abstain{background:var(--color-graphite-2);border:1px solid var(--border-strong);}
[data-theme="dark"] .decision-badge.pending{background:var(--color-graphite-2);border:1px solid var(--border-strong);}
[data-theme="dark"] .pipe-gate:hover rect{stroke:var(--fg-default);}
[data-theme="dark"] .pipe-gate.blocking rect{stroke:var(--fg-muted);}
[data-theme="dark"] .log-console{background:#231F1F;border-color:var(--border-strong);}
[data-theme="dark"] .tip .tip-body{background:#100E0E;border-color:var(--border-strong);}

/* узкие экраны: номер панели не должен упираться в подпись KPI */
@media (max-width:520px){
  .kpi-label{padding-right:0;}
  .kpi-card .panel-num{position:static;display:block;margin-bottom:6px;text-align:left;}
}

/* тепловая карта: узкая шапка строк, чтобы на телефоне были видны сами ячейки */
.risk-matrix{min-width:520px;}
.risk-matrix th:first-child,.risk-matrix td:first-child{width:96px;min-width:96px;}
@media (max-width:520px){
  .risk-matrix th:first-child,.risk-matrix td:first-child{width:64px;min-width:64px;font-size:10px;}
  .risk-matrix td.risk-cell{min-width:56px;height:46px;}
}
.risk-matrix th:first-child{white-space:normal;line-height:1.3;}
@media (max-width:768px){.list-pane{max-height:none;overflow-y:visible;}}

/* ============================================================
   Индикатор режима данных (шапка сайдбара) + диалог настроек API
   (п.6 задачи «Панель на API»). Токены без изменений: --radius:0,
   без теней, только graphite/red из палитры.
============================================================ */
.sidebar-footer{flex-wrap:wrap;row-gap:var(--space-2);}
.mode-indicator{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 var(--space-2);border:1px solid var(--border-strong);background:var(--bg-page);font-family:var(--font-mono);font-size:10px;letter-spacing:.02em;color:var(--fg-muted);white-space:nowrap;flex-shrink:0;cursor:pointer;}
.mode-indicator:hover{border-color:var(--color-graphite);color:var(--fg-default);}
.mode-dot{width:6px;height:6px;flex-shrink:0;background:var(--fg-placeholder);}
.mode-indicator[data-mode="live"] .mode-dot{background:var(--fg-success);}
.mode-indicator[data-mode="live"]{border-color:var(--fg-success);color:var(--fg-success);}
.mode-indicator[data-mode="demo"] .mode-dot{background:var(--fg-muted);}
.mode-indicator[data-mode="loading"] .mode-dot{background:var(--color-warning);animation:sk 1s infinite linear;}
[data-theme="dark"] .mode-indicator[data-mode="live"]{color:var(--fg-success);}

.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:200;}
.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:201;width:min(440px,92vw);max-height:86vh;overflow-y:auto;background:var(--bg-page);border:1px solid var(--border-strong);}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4);border-bottom:1px solid var(--border-default);}
.modal-head h2{font-family:var(--font-display);font-size:var(--fs-18);font-weight:600;margin:0;}
.modal-body{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-4);}
.modal-actions{display:flex;justify-content:flex-end;gap:var(--space-2);padding:var(--space-4);border-top:1px solid var(--border-default);}
.field{display:flex;flex-direction:column;gap:6px;font-size:var(--fs-12);color:var(--fg-muted);}
.field input,.field select{height:34px;padding:0 var(--space-3);border:1px solid var(--border-strong);background:var(--bg-page);color:var(--fg-default);font-size:var(--fs-14);font-family:var(--font-body);}
.field input:focus,.field select:focus{outline:2px solid var(--color-graphite);outline-offset:1px;}

/* ---------- Состояние ошибки раздела ---------- */
.error-state{border-color:var(--color-accent-red);}
.error-state svg{color:var(--fg-danger);}
.error-state .btn{margin-top:var(--space-2);}

/* ---------- Журнал аудита ---------- */
.audit-toolbar{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center;margin-bottom:var(--space-4);}
.audit-toolbar select,.audit-toolbar input{height:32px;padding:0 var(--space-2);border:1px solid var(--border-strong);background:var(--bg-page);color:var(--fg-default);font-size:var(--fs-12);}
.audit-toggle{display:inline-flex;border:1px solid var(--border-strong);}
.audit-toggle button{height:32px;padding:0 var(--space-3);background:var(--bg-page);color:var(--fg-muted);font-size:var(--fs-12);font-weight:var(--fw-semibold);border:none;border-right:1px solid var(--border-strong);}
.audit-toggle button:last-child{border-right:none;}
.audit-toggle button.active{background:var(--color-graphite);color:var(--color-white);}
[data-theme="dark"] .audit-toggle button.active{background:var(--color-white);color:var(--color-graphite);}
.audit-row.override{border-left:3px solid var(--color-accent-red);background:var(--color-error-bg);}
.audit-row.override td:first-child{position:relative;}
.audit-flag{display:inline-flex;align-items:center;gap:4px;color:var(--fg-danger);font-weight:var(--fw-semibold);font-size:11px;}
.audit-immutable-note{display:flex;gap:var(--space-2);align-items:flex-start;padding:var(--space-3);border:1px solid var(--border-default);border-left:3px solid var(--color-graphite);background:var(--bg-surface-alt);font-size:var(--fs-12);color:var(--fg-muted);margin-bottom:var(--space-4);}
.audit-immutable-note svg{width:15px;height:15px;flex-shrink:0;margin-top:1px;}
@media (max-width:640px){.audit-toolbar{flex-direction:column;align-items:stretch;}}
