/* ============================================================
   АУДИТОР СМЕТ · визуальная система v3 · базовые стили
   Одна колонка 960px, ритм 24px, линии 1px вместо рамок, без теней,
   без градиентов, углы <= 4px. Брейкпоинт телефона — 600px
   (поля 16px, кнопки 44px). Страничные стили — здесь же, по разделам.
   ============================================================ */

*,*::before,*::after{box-sizing:border-box}
*{margin:0;padding:0}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{font-family:var(--font);background:var(--bg);color:var(--text);
  font-size:var(--fs-body);line-height:var(--lh-body);font-variant-numeric:tabular-nums;
  min-height:100vh;display:flex;flex-direction:column;-webkit-font-smoothing:antialiased;}
img,svg{max-width:100%;height:auto}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--accent);text-decoration:none}
a:hover{color:var(--accent-hover);text-decoration:underline;text-underline-offset:3px}
[hidden]{display:none!important}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);
  clip-path:inset(50%);white-space:nowrap;}

/* — фокус: видим всегда при навигации с клавиатуры — */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
:focus:not(:focus-visible){outline:none}

/* — ссылка «Перейти к содержанию» — */
.skip-link{position:absolute;left:16px;top:-64px;z-index:100;background:var(--accent);
  color:var(--bg);padding:8px 16px;font-size:var(--fs-table);font-weight:600;}
.skip-link:focus{top:0;color:var(--bg)}

/* — колонка — */
.wrap{width:100%;max-width:var(--col);margin:0 auto;padding-left:var(--gutter);padding-right:var(--gutter)}

/* — верхняя полоса — */
.bar{border-bottom:1px solid var(--rule);flex:none}
.bar-in{height:64px;display:flex;align-items:center;justify-content:space-between;gap:16px}
.wordmark{flex:none;white-space:nowrap;color:var(--text);font-weight:600;font-size:17px;line-height:24px}
.wordmark:hover{color:var(--text);text-decoration:none}
.bar-user{display:flex;align-items:baseline;min-width:0;font-size:var(--fs-table);
  line-height:var(--lh-table);color:var(--secondary);white-space:nowrap;}
/* длинное имя обрезается многоточием, «Выйти» видно всегда */
.bar-name{min-width:0;overflow:hidden;text-overflow:ellipsis}
.bar-user a{flex:none}

/* — основное содержимое — */
.main{flex:1 0 auto;padding-top:48px;padding-bottom:96px;outline:none}
.crumbs{font-size:var(--fs-table);line-height:var(--lh-table);margin-bottom:16px}
.crumbs:empty{display:none}
/* ссылка в пути стоит рядом с обычным текстом: отличаем не только цветом (axe link-in-text-block, 2,51:1) */
.crumbs a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
h1{font-size:var(--fs-title);line-height:var(--lh-title);font-weight:400;max-width:760px;
  text-wrap:balance;}
h2{font-size:var(--fs-action);line-height:var(--lh-action);font-weight:600}
h3{font-size:var(--fs-body);line-height:var(--lh-body);font-weight:600}
p + p{margin-top:12px}
.lead{margin-top:12px;max-width:640px}
.action{font-size:var(--fs-action);line-height:var(--lh-action);font-weight:600;max-width:760px}
.scope{margin-top:8px;font-size:var(--fs-table);line-height:var(--lh-table);color:var(--secondary)}
.source{font-size:var(--fs-note);line-height:var(--lh-note);color:var(--secondary)}
.muted{color:var(--secondary)}

/* заголовок страницы + главное действие в одну строку */
.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:24px}

/* — подвал — */
.foot{flex:none;border-top:1px solid var(--rule)}
.foot-in{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 24px;
  padding-top:20px;padding-bottom:20px;font-size:var(--fs-note);line-height:var(--lh-note);
  color:var(--secondary);}

/* — кнопки: прямоугольные, 40px, без теней — */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:var(--btn-h);padding:0 20px;border-radius:var(--radius);border:1px solid transparent;
  background:none;color:var(--text);font-size:var(--fs-table);line-height:20px;font-weight:600;
  white-space:nowrap;cursor:pointer;text-decoration:none;}
.btn:hover{text-decoration:none}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--bg)}
.btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);color:var(--bg)}
.btn.line{background:var(--bg);border-color:var(--text);color:var(--text)}
.btn.line:hover{background:var(--fill);color:var(--text)}
.btn.sm{min-height:32px;padding:0 12px;font-size:var(--fs-note)}
.btn[disabled],.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
.link-btn{background:none;border:0;padding:0;color:var(--accent);cursor:pointer;font:inherit}
.link-btn:hover{color:var(--accent-hover);text-decoration:underline;text-underline-offset:3px}

/* — статус: точка 8px + слово; цвет только у точки — */
.dot{display:inline-block;flex:none;width:8px;height:8px;border-radius:50%;
  background:var(--secondary);margin-right:10px;vertical-align:1px;}
.dot.ok{background:var(--ok)}
.dot.question{background:var(--question)}
.dot.mismatch{background:var(--mismatch)}
.dot.none{background:none;border:1px solid var(--secondary)}

/* — тег «пример» — */
.tag{display:inline-block;margin-left:8px;padding:0 6px;border:1px solid var(--rule);
  border-radius:var(--radius);font-size:var(--fs-note);line-height:var(--lh-note);font-weight:400;
  color:var(--secondary);white-space:nowrap;vertical-align:1px;}

/* — формы — */
label{display:block;font-size:var(--fs-table);line-height:var(--lh-table);font-weight:600}
input[type="text"],input[type="password"],input[type="email"],textarea,select{
  display:block;width:100%;margin-top:8px;min-height:var(--btn-h);padding:8px 12px;
  border:1px solid var(--secondary);border-radius:var(--radius);background:var(--bg);color:var(--text);
  font-size:var(--fs-body);line-height:var(--lh-body);}
input::placeholder,textarea::placeholder{color:var(--secondary)}
.field + .field{margin-top:24px}
.hint{margin-top:6px;font-size:var(--fs-note);line-height:var(--lh-note);color:var(--secondary)}

/* — сообщение (вход, отказ): точка и текст, без плашки — */
.notice{display:flex;align-items:baseline;font-size:var(--fs-table);line-height:var(--lh-table)}

/* — таблицы: тёмная линия сверху, светлые между строками — */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table{width:100%;border-collapse:collapse;font-size:var(--fs-table);line-height:var(--lh-table)}
th{text-align:left;font-size:var(--fs-note);line-height:var(--lh-note);font-weight:400;
  color:var(--secondary);border-bottom:1px solid var(--text);padding:0 16px 8px 0;}
td{border-bottom:1px solid var(--rule);padding:10px 16px 10px 0;vertical-align:top}
th:last-child,td:last-child{padding-right:0}
td.num,th.num,.num{text-align:right;white-space:nowrap}

/* ============================================================
   Вход
   ============================================================ */
.login{max-width:560px}
.login form{margin-top:40px}
.login .notice{margin-top:24px}
.login .btn{margin-top:32px}
.terms{margin-top:56px;padding-top:24px;border-top:1px solid var(--rule);max-width:640px}
.terms h2{font-size:var(--fs-body);line-height:var(--lh-body)}
.terms ul{margin-top:8px;list-style:none;font-size:var(--fs-table);line-height:var(--lh-table);
  color:var(--secondary);}
.terms li + li{margin-top:6px}

/* ============================================================
   Объекты: список строк, не карточки
   ============================================================ */
.objects-summary{margin-top:48px}
.obj-list{list-style:none;margin-top:32px;border-top:1px solid var(--text)}
.obj-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 24px;padding:20px 0;
  border-bottom:1px solid var(--rule);}
.obj-name{flex:1 1 340px;min-width:0;font-weight:600}
.obj-name a{color:var(--text)}
.obj-name a:hover{color:var(--accent-hover)}
.obj-state{flex:1 1 340px;min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 16px}
.obj-date{flex:0 0 112px;text-align:right;font-size:var(--fs-table);color:var(--secondary)}
/* шапка колонок — над списком, вне <ul>; тёмная линия сверху несёт она */
.obj-head{margin-top:32px;padding:12px 0;border-top:1px solid var(--text);border-bottom:1px solid var(--rule);
  font-size:var(--fs-note);line-height:var(--lh-note);color:var(--secondary);}
.obj-head + .obj-list{margin-top:0;border-top:0}
.obj-head .obj-name{font-weight:400}
.obj-head .obj-date{font-size:inherit}
.restart-msg:empty{display:none}
.group-title{margin-top:var(--section);font-size:var(--fs-body);line-height:var(--lh-body);font-weight:600}
.group-title + .obj-list,.group-title + .obj-head{margin-top:12px}
.empty{margin-top:48px;max-width:640px}
.objects-summary + .empty{margin-top:24px}
.obj-list + .source{margin-top:16px}

/* ============================================================
   Проверка: ход этапов одной фразой
   ============================================================ */
.run-status{margin-top:40px}
.stages{display:inline;list-style:none}
.stages li{display:inline;color:var(--secondary);font-weight:400;white-space:nowrap}
/* стрелка — inline-block, чтобы подчёркивание текущего этапа её не задевало */
.stages li + li::before{content:"→";display:inline-block;margin-right:.3em;color:var(--secondary);font-weight:400}
.stages li.passed{color:var(--text)}
.stages li[aria-current="step"]{color:var(--text);font-weight:600;
  text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:6px;}
.run-stopped{margin-top:40px;max-width:720px}
.run-stopped .actions{margin-top:24px;display:flex;flex-wrap:wrap;align-items:center;gap:16px 24px}
.run-log{margin-top:var(--section);padding-top:24px;border-top:1px solid var(--rule)}
.run-log summary{cursor:pointer;font-size:var(--fs-table);line-height:var(--lh-table);color:var(--secondary)}
.run-log summary:hover{color:var(--text)}
.run-log pre{margin-top:16px;font-family:var(--font);font-size:var(--fs-note);line-height:var(--lh-note);
  color:var(--secondary);white-space:pre-wrap;overflow-wrap:anywhere;max-height:420px;overflow:auto;}

/* ============================================================
   Обратная связь: ссылка в подвале, окно <dialog>
   ============================================================ */
.fb-dialog{margin:auto;width:calc(100% - 32px);max-width:560px;padding:24px;border:1px solid var(--rule);
  border-radius:var(--radius);background:var(--bg);color:var(--text);}
.fb-dialog::backdrop{background:rgba(11,31,51,.35)}
.fb-dialog h2{font-size:var(--fs-body);line-height:var(--lh-body)}
.fb-dialog form{margin-top:16px}
.fb-dialog textarea{min-height:120px;resize:vertical}
.fb-actions{margin-top:16px;display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px}
.fb-msg{font-size:var(--fs-note);line-height:var(--lh-note);color:var(--secondary)}

/* ============================================================
   Переходный слой для страниц, которые ещё не перевёрстаны под v3
   (object.html, admin.html, error.html): старые классы — в новых токенах.
   Убрать вместе с последним использованием.
   ============================================================ */
.sub{font-size:var(--fs-table);line-height:var(--lh-table);color:var(--secondary);margin:8px 0 16px}
.card{padding:24px 0;border-top:1px solid var(--rule)}
.card h2,.card h3{margin-bottom:8px}
.card.note{padding:16px 20px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--fill)}
.card + .card{margin-top:24px}
.b{display:inline-flex;align-items:baseline;font-size:var(--fs-table);line-height:var(--lh-table);
  font-weight:400;color:var(--text);white-space:nowrap;}
.b::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:8px;
  background:var(--secondary);}
.b.g::before{background:var(--ok)}
.b.y::before{background:var(--question)}
.b.r::before{background:var(--mismatch)}
.b.i::before{background:none;border:1px solid var(--secondary)}
.mono{font-family:var(--font)}

/* — без движения по запросу системы — */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}

/* — телефон — */
@media (max-width:600px){
  :root{--gutter:16px;--btn-h:44px}
  .main{padding-top:32px;padding-bottom:64px}
  h1{font-size:28px;line-height:36px}
  .action{font-size:20px;line-height:26px}
  .page-head{align-items:stretch}
  .page-head .btn,.login .btn,.run-stopped .btn{width:100%}
  .obj-row{padding:16px 0}
  .obj-date{flex:1 1 100%;text-align:left;font-size:var(--fs-note)}
  .obj-head{display:none}
  .obj-head + .obj-list{margin-top:32px;border-top:1px solid var(--text)}
  .group-title + .obj-head + .obj-list{margin-top:12px}
  .btn.sm{min-height:44px}
  .obj-date.no-date{display:none}
  .bar-in{gap:12px}
}

/* — печать: без теней, белый фон — */
@media print{
  *{box-shadow:none!important;text-shadow:none!important}
  body{background:#fff}
  .skip-link,.fb-open,.fb-dialog,.btn,.link-btn,button,.restart-msg{display:none!important}
}
