:root { --fail:#c62828; --warn:#ef8f00; --pass:#2e7d32; --err:#616161; --line:#e3e3e3; --muted:#777; }
* { box-sizing:border-box }
body { margin:0; font:15px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif; color:#222; background:#fafafa }
.top { display:flex; gap:24px; align-items:center; padding:10px 24px; background:#1f2933; color:#fff }
.top a { color:#fff; text-decoration:none; margin-right:14px } .brand { font-weight:700; font-size:17px }
.whoami { margin-left:auto; display:flex; gap:10px; align-items:center }
.page { max-width:1100px; margin:0 auto; padding:24px }
h1 { font-size:22px; margin:0 0 16px } h2 { font-size:18px; margin:24px 0 10px }
.card { background:#fff; border:1px solid var(--line); border-radius:8px; padding:20px }
.login { max-width:360px; margin:60px auto } .login label, .form label { display:block; margin:10px 0 }
input:not([type=checkbox]), select, textarea { width:100%; padding:7px 9px; border:1px solid #bbb; border-radius:5px; font:inherit }
.check input { width:auto; margin-right:6px } fieldset { border:1px solid var(--line); border-radius:6px; margin:14px 0 }
button { padding:7px 14px; border:1px solid #888; border-radius:5px; background:#fff; font:inherit; cursor:pointer }
button.ok { border-color:var(--pass); color:var(--pass) } button.bad { border-color:var(--fail); color:var(--fail) }
button.link { border:0; background:none; color:#3366cc; padding:0; text-decoration:underline }
.error { color:var(--fail) } .muted { color:var(--muted) } .small { font-size:12px }
table { width:100%; border-collapse:collapse; background:#fff } td, th { padding:8px 10px; border-bottom:1px solid var(--line); vertical-align:top; text-align:left }
.badge { display:inline-block; padding:2px 8px; border-radius:4px; font-size:12px; font-weight:600; color:#fff; background:var(--err) }
.badge.FAIL { background:var(--fail) } .badge.WARNING { background:var(--warn) } .badge.PASS { background:var(--pass) }
.badge.status-new { background:#546e7a } .badge.status-review { background:#1565c0 } .badge.status-returned { background:var(--warn) } .badge.status-accepted { background:var(--pass) }
.task-head { display:flex; gap:14px; align-items:center } .task-head h1 { margin:0 }
.meta { display:grid; grid-template-columns:max-content 1fr; gap:4px 16px; margin:14px 0 } .meta dt { color:var(--muted) } .meta dd { margin:0 } .meta pre { margin:0; font:inherit }
.scan { margin:14px 0 } .inline { display:inline-block; margin-right:10px }
.results .st { width:130px } .results .act { width:330px } .row-FAIL { background:#fff7f7 } .row-WARNING { background:#fffaf0 }
.issues { margin:6px 0 0; padding-left:18px; font-size:13px; overflow-wrap:anywhere } .issues a { color:#3366cc; word-break:break-all }
.override { display:flex; gap:6px; flex-wrap:wrap } .override input { flex:1 1 120px }
.review-actions { margin-top:20px; display:flex; gap:20px; align-items:center; flex-wrap:wrap }
/* формы — flex-строки: иначе глобальное input{width:100%} растягивает поле и кнопка уезжает под него */
.review-actions form { display:flex; gap:10px; align-items:center; margin:0 }
.review-actions input { width:auto; flex:1 1 320px }
.review { white-space:pre-wrap }
.badge.action-done { background:var(--pass) } .badge.action-skipped { background:var(--warn) } .badge.action-failed { background:var(--fail) } .badge.action-pending, .badge.action-running { background:#1565c0 }
.row-skipped { background:#fffaf0 } .row-failed { background:#fff7f7 }
.newuser { display:flex; gap:14px; align-items:flex-end; flex-wrap:wrap; margin-bottom:16px }
.newuser label { flex:1 1 260px; margin:0 } .newuser button { flex:0 0 auto }
.narrow { max-width:420px } .rowform { display:inline-block; margin-right:6px }
.password-once { margin:0 0 16px } .password-once code { font-size:15px; background:#f3f3f3; padding:2px 6px; border-radius:4px }
.row-deleted { opacity:.55 } .badge.deleted { background:var(--err) }
.ok-msg { color:var(--pass) }
.whoami a { color:#9ecbff; font-size:13px }
