/* D40 (дизайн-проход, итерация 5): прибор преподавателя, тон лабораторного журнала.
   Токены: Бумага #FBFAF7 · Чернила #1C2330 · Сургуч #8F0F0F (канон разрыва) ·
   Грифель #66707F (метаданные) · Архивный синий #2B4C7E (навигация).
   Статусные подложки не трогаем (решение CEO 2026-07-30). */
body {
    font-family: system-ui, sans-serif;
    /* D22 (#68, живая петля): рабочий инструмент с широкой таблицей — вся ширина
       окна, а не центрированная колонка 1200px с внутренним скроллом матрицы */
    margin: 2rem 0;
    padding: 0 2rem;
    color: #1c2330;
    background: #fbfaf7;
}

h1, h2 { font-family: Georgia, 'Times New Roman', serif; letter-spacing: 0.01em; }
a { color: #2b4c7e; }

/* доказательные данные — моноширинным: «это данные, им можно верить» */
.sha, td.sha, .evidence-meta, .obs-note, .row-progress, .as-of, .case-summary,
.file-status + .sha { font-family: Consolas, 'Cascadia Mono', 'Courier New', monospace; }


/* FR-12 интерим: ячейка MR-канала — приглушённая, не тревожная (это не «нет») */
.cell-mr-channel { background: #f4f6fa; }
.status-mr { color: #556; font-style: italic; text-decoration: none; }

/* ── Шапка матриц ─────────────────────────────────────────────────────── */
.matrix-header { display: flex; align-items: baseline; gap: 1rem; flex-wrap: wrap; }
.matrix-header h1 { font-size: 1.35rem; margin: 0 auto 0 0; }
.matrix-nav { display: flex; gap: 1rem; }
/* Макет: жёлтый стикер «Время и дата последнего анализа» */
.as-of-note {
    background: #ffe98a;
    border: 1px solid #e3c94f;
    border-radius: 3px;
    padding: 0.35rem 0.6rem;
    font-size: 0.85rem;
    margin: 0;
}
/* D10 (US-A3): обход устарел — стикер тревожный, а не жёлтый */
.as-of-stale { background: #f6dcdc; border-color: #c66a6a; color: #7c1010; }
.auth-banner { background: #f6dcdc; border: 1px solid #c66a6a; color: #7c1010; padding: 0.5rem 0.8rem; border-radius: 4px; margin-top: 0.75rem; }
.blind-spots, .chronics { margin-top: 0.75rem; }
.blind-spots h2, .chronics h2 { font-size: 1rem; margin: 0 0 0.25rem; }
.unchecked { color: #667; font-size: 0.85rem; }

/* ── Таблицы матриц ───────────────────────────────────────────────────── */
/* D15 (#59): закреплённые шапка и первая колонка при прокрутке */
.matrix-wrap { overflow: auto; max-height: 78vh; margin-top: 1rem; }
.matrix-wrap table.matrix { margin-top: 0; }
.matrix-wrap thead th { position: sticky; top: 0; background: #fff; z-index: 3; }
.matrix-wrap td.repo-url, .matrix-wrap th.col-repo {
    position: sticky; left: 0; background: #fff; z-index: 2;
}
.matrix-wrap thead th.col-repo { z-index: 4; }
/* D22 (#68): переносы в колонке репо — по границам слов, не в случайном месте */
.repo-url { overflow-wrap: break-word; word-break: normal; }
/* D22 (#68): кнопка обхода на стикере актуальности (POST /sync с подтверждением) */
.sync-now {
    margin-left: 0.6rem;
    padding: 0.15rem 0.6rem;
    border: 1px solid #99a;
    border-radius: 4px;
    background: #fff;
    color: #445;
    font-size: 0.78rem;
    cursor: pointer;
}
.sync-now:hover { border-color: #445; }
.sync-now:disabled { opacity: 0.6; cursor: wait; }

/* D20 (#66): сводка строки слева (заменила правую колонку «Разрывы» D15) */
.row-summary { display: block; margin-top: 0.15rem; font-size: 0.78rem; color: #8a90a0; }
.row-summary > span { margin-right: 0.5rem; }
.row-breaks-chip { color: #8f0f0f; font-weight: 700; }
.row-progress { color: #445; }
.sort-links { display: block; font-weight: 400; font-size: 0.75rem; margin-top: 0.15rem; }
.sort-links a { color: inherit; text-decoration: none; border-bottom: 1px dashed #99a; margin-right: 0.5rem; }
table.matrix { border-collapse: collapse; width: 100%; margin-top: 1rem; }
table.matrix th, table.matrix td {
    border: 1px solid #c9ced8;
    padding: 0.45rem 0.6rem;
    text-align: left;
    vertical-align: top;
    font-size: 0.85rem;
}
table.matrix { background: #fff; }
table.matrix thead th { background: #fff; font-weight: 600; white-space: nowrap; }
/* D22 (#68): перенос по границам слов; «anywhere» ломал имена в случайном месте
   и перебивал по специфичности общее правило .repo-url */
td.repo-url { max-width: 16rem; overflow-wrap: break-word; word-break: normal; }

/* ── Ячейки: инверсия сигнала (D13, решение CEO 2026-07-30) ──────────────
   Наличие — тихие светлые подложки (светофор как фон), единственный
   насыщенный элемент экрана — чип разрыва. Статус всегда есть словом. */
.acell { cursor: pointer; min-width: 7rem; max-width: 12rem; }
.acell:hover { filter: brightness(0.95); }
.acell-found { background: #dff0e3; color: #14532d; }
.acell-partial { background: #fbebd2; color: #713f12; }
.acell-not_found { background: #f6dcdc; color: #7f1d1d; }
.acell-none { background: #f2f3f6; color: #8a90a0; cursor: default; }
/* D9 (FR-12): канал сдачи — MR; приглушённая, не тревожная (это не «нет») */
.acell-mr { background: #eef1f7; color: #445566; font-style: italic; }
.acell-break { box-shadow: inset 0 0 0 2px rgba(143, 15, 15, 0.35); }
.presence { display: block; }
/* D16 (#60): точка свежести — артефакт изменился в последнем обходе */
.fresh-dot {
    display: inline-block;
    width: 7px; height: 7px;
    border-radius: 50%;
    background: #2563eb;
    margin-left: 0.35rem;
    vertical-align: middle;
}
/* Чип разрыва — подпись прибора: высокая уверенность — полный,
   средняя/низкая — контурный с подписью словами (риск PRD §11) */
.break-chip {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2; /* D21 (#67): чип — не выше 2 строк, дальше многоточие */
    line-clamp: 2;
    overflow: hidden;
    margin-top: 0.3rem;
    padding: 0.12rem 0.5rem;
    border-radius: 4px;
    font-size: 0.78rem;
    font-weight: 600;
    background: #8f0f0f;
    color: #fff;
}
.chip-medium, .chip-low {
    background: transparent;
    color: #8f0f0f;
    border: 2px solid #8f0f0f;
    font-weight: 500;
}

/* ── Легенда (D12): компактная строка, состояния словами ─────────────────── */
.legend {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem 1.1rem;
    align-items: center;
    margin-top: 1rem;
    font-size: 0.8rem;
    color: #444d61;
}
.legend-item { display: inline-flex; align-items: center; gap: 0.35rem; }
.legend .swatch {
    display: inline-block;
    width: 0.9rem; height: 0.9rem;
    border-radius: 3px;
    border: 1px solid rgba(0, 0, 0, 0.12);
}
.legend .break-chip { margin-top: 0; }

/* D8: второй блок под матрицей — разрывы связности и процесс сдачи */
.matrix-extras h2 { font-size: 1.05rem; margin: 1.75rem 0 0.25rem; }
table.extras { width: auto; min-width: 60%; }

/* те же статусы в старой матрице занятий и хронологии карточки — мягкой заливкой */
.cell-found { background: #e2f5e8; }
.cell-partial { background: #fdeeda; }
.cell-not_found { background: #f9dede; }
.partial-reason { display: block; font-size: 0.75rem; opacity: 0.85; }

/* ── Модальное окно деталей ячейки (D7) ───────────────────────────────── */
.modal-overlay {
    position: fixed; inset: 0;
    background: rgba(20, 25, 38, 0.55);
    display: flex; align-items: flex-start; justify-content: center;
    padding: 4rem 1rem 2rem;
    z-index: 100;
}
.modal {
    background: #fff;
    border-radius: 8px;
    max-width: 44rem; width: 100%;
    max-height: 80vh; overflow-y: auto;
    padding: 1.25rem 1.5rem;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
}
.modal-header { position: relative; padding-right: 2.5rem; }
.modal-header h2 { margin: 0 0 0.25rem; font-size: 1.15rem; }
.modal-header .repo-url { margin: 0; color: #556; font-size: 0.85rem; }
.modal-close {
    position: absolute; top: 0; right: 0;
    border: none; background: none;
    font-size: 1.5rem; line-height: 1; cursor: pointer; color: #556;
}
.modal h3 { font-size: 0.95rem; margin: 1.25rem 0 0.5rem; }
.modal-files ul { margin: 0; padding-left: 1.25rem; }
.modal-files li { margin-bottom: 0.3rem; font-size: 0.85rem; }
.file-status { margin-left: 0.4rem; font-size: 0.78rem; padding: 0.1rem 0.4rem; border-radius: 3px; }
.file-found { background: #e2f5e8; color: #10521f; }
.file-partial { background: #fdeeda; color: #6b3d05; }
.file-not_found { background: #f9dede; color: #7c1010; }
.file-none { background: #f2f3f6; color: #8a90a0; }
.sha { color: #8a90a0; font-size: 0.78rem; margin-left: 0.4rem; }

/* карточки рёбер — общие для карточки студента и модалки */
.edge { border: 1px solid #d9dee7; border-radius: 6px; padding: 0.6rem 0.8rem; margin-bottom: 0.6rem; }
.edge h4, .edge h3 { margin: 0 0 0.35rem; font-size: 0.9rem; }
.edge .state { color: #778; font-style: italic; margin: 0; font-size: 0.85rem; }
.verdict { margin: 0 0 0.35rem; font-size: 0.9rem; }
.verdict-break { color: #a01212; font-weight: 600; }
.verdict-ok { color: #157a37; }
/* D17 (#61): уверенность — заметный бейдж по уровню, а не мелкий серый текст */
.confidence {
    font-weight: 600; font-size: 0.85rem;
    margin-left: 0.5rem; padding: 0.1rem 0.45rem; border-radius: 4px;
}
.conf-high { background: #e2f5e8; color: #14532d; }
.conf-medium { background: #fdeeda; color: #713f12; }
.conf-low { background: #f9dede; color: #7c1010; }
.edge-card-link { margin-left: 0.6rem; font-size: 0.82rem; white-space: nowrap; }

/* D18 (#62): режим защиты */
.defense-link { display: inline-block; font-size: 0.75rem; color: #556; margin-left: 0.3rem; }
.defense-header h1 { color: #14532d; }
.evidence-meta { display: block; font-weight: 400; font-size: 0.8rem; color: #556; margin-top: 0.2rem; }
.defense-breaks .edge { border-left: 4px solid #8f0f0f; }
.defense-ok ul { margin: 0; padding-left: 1.25rem; font-size: 0.9rem; }
.edge-overridden .verdict-break { color: #778; text-decoration: line-through; }
.override { color: #667; font-size: 0.8rem; margin-left: 0.5rem; }
/* D21 (#67): видимое курирование — кнопка-действие в блоке разрыва */
.override-form { margin: 0.4rem 0; display: flex; align-items: center; gap: 0.5rem; }
.override-button {
    padding: 0.3rem 0.8rem;
    border: 1px solid #8f0f0f;
    border-radius: 4px;
    background: #fff;
    color: #8f0f0f;
    font-weight: 600;
    cursor: pointer;
}
.override-button:hover { background: #8f0f0f; color: #fff; }
.override-note { font-size: 0.75rem; color: #778; }

.points { margin: 0.25rem 0; padding-left: 1.25rem; font-size: 0.85rem; }
.notes { font-size: 0.85rem; color: #444d61; background: #f6f7fa; padding: 0.4rem 0.6rem; border-radius: 4px; }

/* D19 (#65) + D40: дело защиты — «титульный лист протокола» (сигнатура дизайна) */
.defense-header {
    border: 3px double #444d61;
    background: #fff;
    padding: 1rem 1.4rem 1.1rem;
    margin-bottom: 1.2rem;
    max-width: 56rem;
}
.case-summary {
    display: inline-block;
    border: 1px solid #66707f;
    color: #333c50;
    padding: 0.3rem 0.65rem;
    font-size: 0.82rem;
    letter-spacing: 0.03em;
    margin: 0.35rem 0;
    background: #fbfaf7;
}
.repo-url-small { font-size: 0.78rem; color: #667; margin: 0.1rem 0; }
.defense-opened { font-size: 0.78rem; color: #667; margin: 0.1rem 0 0.4rem; }
.defense-notes { font-size: 1.05rem; line-height: 1.5; color: #1c2333; margin: 0.4rem 0; }
.points-details summary,
.timeline-full summary,
.defense-mrs summary,
.defense-muted summary { cursor: pointer; font-size: 0.85rem; color: #445; }
.defense-mrs, .defense-muted, .timeline-full { margin: 0.8rem 0; }
.lesson-milestone td { background: #eef1f6; color: #333c50; font-size: 0.82rem; font-weight: 600; }
.obs-note { font-size: 0.72rem; color: #778; white-space: nowrap; }
