/* inst-ai · кабинет «Конвейер» (План 12, спека §9). Одна светлая тема. */
@font-face{font-family:"PT Sans";src:url(fonts/PTSans-Regular.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"PT Sans";src:url(fonts/PTSans-Bold.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"PT Serif";src:url(fonts/PTSerif-Regular.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"PT Serif";src:url(fonts/PTSerif-Bold.woff2) format("woff2");font-weight:700;font-display:swap}

:root{
  --bg:#F4F6F8;--paper:#FFFFFF;--ink:#1B2430;--ink-2:#4A5563;--ink-3:#7B8794;
  --line:#D9DEE4;--line-2:#EAEEF2;--accent:#0E6B87;--accent-soft:#E3F0F5;--accent-ink:#0B5468;
  --ok:#2E7D4F;--ok-soft:#E4F2EA;--warn:#B8770F;--warn-soft:#FBF0DC;--crit:#B3261E;--crit-soft:#F9E4E2;
  --mute:#9AA5B1;--mute-soft:#EEF1F4;
  --sans:"PT Sans",system-ui,"Segoe UI",Arial,sans-serif;--serif:"PT Serif",Georgia,serif;
  --side-w:240px;--r:4px;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.45 var(--sans)}
a{color:var(--accent-ink)}
h1,h2,h3{font-family:var(--serif);margin:0;text-wrap:balance}
h1{font-size:24px}h2{font-size:18px;margin-top:24px}h3{font-size:15px;margin-top:16px}
.num,td.num{font-variant-numeric:tabular-nums;text-align:right}
.muted{color:var(--ink-3)}

/* макет */
.layout{display:grid;grid-template-columns:var(--side-w) 1fr;min-height:100vh}
.side{background:var(--paper);border-right:1px solid var(--line);padding:12px 0;position:sticky;top:0;height:100vh;overflow-y:auto}
.side__brand{display:block;padding:6px 16px 14px;font:700 16px var(--serif);color:var(--ink);text-decoration:none}
.side__group{padding:12px 16px 4px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.side__item{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:7px 16px;color:var(--ink-2);text-decoration:none;border-right:3px solid transparent}
.side__item:hover{background:var(--mute-soft)}
.side__item.is-active{background:var(--accent-soft);color:var(--accent-ink);font-weight:700;border-right-color:var(--accent)}
.side__user{margin-top:auto;padding:12px 16px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3)}
.side__toggle{display:none}
.page{padding:20px 28px 60px;min-width:0}
.page__head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:18px}
.crumbs{font-size:12px;color:var(--ink-3);margin-bottom:4px}
.crumbs a{color:var(--ink-3)}
.actions{display:flex;gap:8px;flex-wrap:wrap}

/* таблицы */
.tbl{overflow-x:auto;background:var(--paper);border:1px solid var(--line);border-radius:var(--r)}
table.grid{border-collapse:collapse;width:100%}
table.grid th{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);background:var(--mute-soft)}
table.grid td{padding:7px 10px;border-bottom:1px solid var(--line-2);vertical-align:top}
table.grid tr:last-child td{border-bottom:0}
table.grid tr.is-review{background:var(--warn-soft)}
table.grid tr.is-current{outline:2px solid var(--accent);outline-offset:-2px}
table.grid tr.cancelled{color:var(--mute);text-decoration:line-through}
table.grid tr.history td{color:var(--mute)}
.group-row td{background:var(--mute-soft);font-weight:700;color:var(--ink-2)}
/* строка-раздел таблицы норм (/norms): жирно, фон как у заголовка, без капса заголовка */
.grid tr.section th{font-weight:700;background:var(--mute-soft);color:var(--ink-2);font-size:13px;letter-spacing:0;text-transform:none}

/* бейджи, точки */
.tag{display:inline-block;font-size:12px;line-height:1.5;padding:0 7px;border-radius:3px;background:var(--mute-soft);color:var(--ink-2);white-space:nowrap}
.tag.ok{background:var(--ok-soft);color:var(--ok)}.tag.warn{background:var(--warn-soft);color:var(--warn)}
.tag.crit{background:var(--crit-soft);color:var(--crit)}.tag.acc{background:var(--accent-soft);color:var(--accent-ink)}.tag.mute{color:var(--ink-3)}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle;background:var(--mute)}
.dot.ok{background:var(--ok)}.dot.warn{background:var(--warn)}.dot.crit{background:var(--crit)}.dot.acc{background:var(--accent)}
.sev-crit{color:var(--crit);font-weight:700}.sev-warn{color:var(--warn)}.sev-info{color:var(--ink-3)}
.done{color:var(--ok)}.status{font-size:12px;color:var(--ink-3)}.status.ok{color:var(--ok)}.status.warn{color:var(--warn)}

/* кнопки, поля */
.btn,button{font:inherit;padding:5px 12px;border:1px solid var(--line);border-radius:var(--r);background:var(--paper);color:var(--ink);cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:6px}
.btn:hover,button:hover{border-color:var(--ink-3)}
.btn--primary,button.btn--primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn--ghost{border-color:transparent;color:var(--accent-ink)}
/* Удаление (План 16 §7): белый фон и тёмно-красная рамка — кнопка заметна, но
   не кричит; заливка красным только под курсором, перед самим действием. */
.btn--danger{border-color:#c96b6b;color:#8a1f1f;background:#fff5f5}
.btn--danger:hover{background:#8a1f1f;border-color:#8a1f1f;color:#fff}
.remove-confirm{margin-top:8px}
.btn--sm{padding:2px 8px;font-size:12px}
button[disabled]{opacity:.6;cursor:progress}
input,select,textarea{font:inherit;padding:5px 8px;border:1px solid var(--line);border-radius:var(--r);background:var(--paper);color:var(--ink)}
input:focus,select:focus,button:focus,a:focus{outline:2px solid var(--accent);outline-offset:1px}
label{color:var(--ink-2)}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:end;margin:0 0 12px}
.filters .filters{margin:0}
form.inline{display:inline}
/* План 13 §8.1: вводный абзац под заголовком страницы. */
.lead{max-width:70ch;color:var(--ink-2);font-size:14px;margin:0 0 14px}
/* План 13 §6.1: инлайн-форма периода под кнопкой «Анализ сайта»/«Собрать меню». */
details.period{display:inline-block;vertical-align:top}
details.period form{display:flex;gap:6px;flex-wrap:wrap;align-items:end;margin-top:6px}
.htmx-indicator{display:none}.htmx-request .htmx-indicator,.htmx-request.htmx-indicator{display:inline-block}
.spinner{width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spinner{animation:none}}

/* плитки, панели, пустые состояния */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:20px}
.tile{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:12px 14px;text-decoration:none;color:inherit;display:block}
.tile b{display:block;font-size:26px;line-height:1.1;font-variant-numeric:tabular-nums;color:var(--ink)}
/* План 16 §3: заголовок плитки вкладки «Источник меню» — не число дашборда. */
.tile--plain b{font-size:15px}
.tile .muted{font-size:12px}
.bar{height:4px;background:var(--mute-soft);border-radius:2px;margin-top:6px;overflow:hidden}.bar i{display:block;height:100%;background:var(--accent)}
.panel{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px}
.empty{padding:28px 16px;text-align:center;color:var(--ink-3)}
.empty a{margin:0 4px}
.metrics{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0}
.metric-card,.replacement-card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);padding:10px 14px}
button.metric-card{cursor:pointer;text-align:left;font:inherit;color:inherit}button.metric-card:hover{border-color:var(--accent)}
#metric-details:not(:empty){margin:0 0 12px}
.replacements{display:flex;gap:12px;flex-wrap:wrap}
.hits{border:1px solid var(--line);background:var(--paper);max-width:26rem;position:absolute;z-index:2}
.hits div{padding:4px 8px;cursor:pointer}.hits div:hover{background:var(--accent-soft)}
.kbd{font:12px/1 var(--sans);border:1px solid var(--line);border-bottom-width:2px;border-radius:3px;padding:1px 5px;background:var(--paper)}

/* карточка меню */
.card-head{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:baseline;color:var(--ink-2)}
.tabs{display:flex;gap:18px;border-bottom:1px solid var(--line);margin:14px 0 18px}
.tab{padding:6px 0;color:var(--ink-2);text-decoration:none;border-bottom:2px solid transparent}
.tab.is-active{color:var(--accent-ink);font-weight:700;border-bottom-color:var(--accent)}
.tab.is-disabled{color:var(--ink-3);cursor:not-allowed}
.two-pane{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(320px,1fr);gap:16px;align-items:start}
.doc-pane{position:sticky;top:12px;background:var(--paper);border:1px solid var(--line);border-radius:var(--r);min-height:320px}
.doc-pane iframe{width:100%;height:78vh;border:0}
.doc-pane__head{display:flex;justify-content:space-between;padding:6px 10px;border-bottom:1px solid var(--line);font-size:12px;color:var(--ink-3)}
.norm-row{display:grid;grid-template-columns:1fr auto auto auto;gap:10px;padding:5px 0;border-bottom:1px solid var(--line-2);align-items:baseline}
.norm-row:last-child{border-bottom:0}
/* приёмник «Почему?» под строкой нормы: пустой не занимает места */
.why-inline:empty{display:none}
.why-inline{margin:4px 0 8px 12px;border-left:2px solid var(--line)}
.norm-group{font-weight:700;color:var(--ink-2);padding-top:10px}

/* тосты */
#toasts{position:fixed;right:16px;bottom:16px;display:flex;flex-direction:column;gap:8px;z-index:50}
.toast{padding:8px 12px;border-radius:var(--r);background:var(--ink);color:#fff;font-size:13px;box-shadow:0 4px 14px rgba(0,0,0,.18)}
.toast--ok{background:var(--ok)}.toast--crit{background:var(--crit)}.toast--warn{background:var(--warn)}

/* адаптивность */
@media (max-width:1279px){.two-pane{grid-template-columns:1fr}.doc-pane{display:none}.doc-pane.is-open{display:block;position:static}}
@media (max-width:1023px){
  .layout{grid-template-columns:1fr}
  .side{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line)}
  .side__nav{display:none}.side.is-open .side__nav{display:block}
  .side__toggle{display:inline-flex;margin:0 16px}
  .page{padding:14px}
}

/* диалог «Получить меню за период» (План 16 §4) */
.fetch-sources{border:1px solid var(--line);border-radius:var(--r);padding:6px 10px;margin:6px 0}
.fetch-sources label{display:block;margin:2px 0}
