/* НОРМИС-S — экран «Ревизии» (макет ui-review-v1.html, экран 1). Без inline-стилей: CSP style-src 'self'. */
:root{
  --bg:#f4f6f8; --panel:#fff; --line:#dde3ea; --ink:#1c2733; --dim:#66788c;
  --blue:#2563eb; --blue-bg:#eaf0fe; --green:#15803d; --green-bg:#e9f7ee;
  --amber:#b45309; --amber-bg:#fdf3e3; --red:#b91c1c; --red-bg:#fdecec;
  --mono:'SF Mono','Consolas','Menlo',monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font:14px/1.45 -apple-system,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--ink)}

header{background:#16222f;color:#fff;padding:0 20px;display:flex;align-items:center;gap:18px;height:52px}
header .logo{font-weight:700;letter-spacing:.5px}
header .logo span{color:#6ea8ff}
nav{display:flex;gap:4px;margin-left:12px}
nav button{background:none;border:0;color:#9fb2c8;padding:8px 14px;font-size:14px;cursor:pointer;border-radius:6px}
nav button:disabled{opacity:.45;cursor:not-allowed}
header .who{margin-left:auto;color:#7d93aa;font-size:13px;display:flex;align-items:center;gap:10px}
header .who button{background:none;border:1px solid #3a4f66;color:#c6d4e2;border-radius:6px;padding:4px 10px;font-size:12.5px;cursor:pointer}
header .who button:hover{border-color:#6ea8ff;color:#fff}

main{max-width:1400px;margin:0 auto;padding:18px 20px}
h2{font-size:17px;margin-bottom:4px}
.sub{color:var(--dim);font-size:13px;margin-bottom:16px}
h3{font-size:14px;margin:18px 0 8px}
footer{max-width:1400px;margin:10px auto 30px;padding:0 20px;color:#9aa7b5;font-size:12px}

.toolbar{display:flex;gap:10px;margin-bottom:14px;align-items:center;flex-wrap:wrap}
.toolbar input[type=file]{font-size:13px;color:var(--dim);max-width:330px}
.toolbar input[type=text]{width:190px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;background:#fff;color:var(--ink)}
.btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 14px;font-size:14px;cursor:pointer;color:var(--ink)}
.btn:hover:not(:disabled){border-color:var(--blue)}
.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn.primary:disabled{opacity:.6;cursor:progress}
.btn.ghost-dim{color:var(--dim);cursor:not-allowed}
.kbadge{font-size:12px;color:var(--dim)}
.msg{font-size:12.5px;color:var(--ink)}
.msg.err{color:var(--red)}

table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:10px;overflow:hidden}
th{font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:var(--dim);text-align:left;padding:10px 12px;background:#f0f3f7;border-bottom:1px solid var(--line)}
td{padding:10px 12px;border-bottom:1px solid #edf1f5;font-size:13.5px;vertical-align:middle}
tr:last-child td{border-bottom:0}
.mono{font-family:var(--mono);font-size:12px}
.dim{color:var(--dim);font-size:12px}

.st{display:inline-block;padding:2px 10px;border-radius:20px;font-size:12px;font-weight:600}
.st.imported{background:var(--blue-bg);color:var(--blue)}
.st.extracted{background:var(--green-bg);color:var(--green)}
.st.failed{background:var(--red-bg);color:var(--red)}
.st.review{background:#f3e8fd;color:#7c3aed}
.st.approved{background:var(--green-bg);color:var(--green)}

.dchip{display:inline-block;padding:2px 10px;border-radius:20px;font-size:12px;font-weight:600}
.dchip.accept{background:var(--green-bg);color:var(--green)}
.dchip.edit{background:var(--blue-bg);color:var(--blue)}
.dchip.reject{background:var(--red-bg);color:var(--red)}
.dchip.defer{background:var(--amber-bg);color:var(--amber)}

.rchip{display:inline-block;border:1px solid var(--line);border-radius:16px;padding:3px 11px;font-size:12px;background:#fff;color:var(--ink);cursor:pointer}
.rchip.on{background:#16222f;color:#fff;border-color:#16222f}

.link{color:var(--blue);cursor:pointer;text-decoration:none;font-weight:600}
.link:hover{text-decoration:underline}

.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-top:18px}
.diffhead{display:flex;align-items:center;gap:14px;margin-bottom:8px;flex-wrap:wrap}
.diffhead .ttl{font-size:15px;font-weight:700}
.diffhead .meta{color:var(--dim);font-size:12.5px;display:flex;align-items:center;gap:8px;margin-top:4px;flex-wrap:wrap}
.diffhead .sp{flex:1}
.infolist{margin:4px 0 10px 18px;font-size:13px}
.infolist li{margin-bottom:2px}

.pages{display:flex;gap:12px;flex-wrap:wrap}
.page-card{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:8px;text-align:center}
.page-card img{display:block;max-width:340px;width:100%;height:auto;border:1px solid #e6ebf1}
.page-card figcaption{margin-top:6px}

.cell-changed{background:var(--blue-bg)}
.hidden{display:none}

.deccell{min-width:210px}
.btnrow{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.mini{border:1px solid var(--line);background:#fff;border-radius:6px;padding:3px 8px;font-size:12px;cursor:pointer;color:var(--ink)}
.mini:hover{border-color:var(--blue)}
.rowbar{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.rowbar h3{margin:14px 0 8px}
.editrow td{background:#f7f9fc}
.decform{display:flex;flex-direction:column;gap:8px;padding:4px 0}
.editgrid{display:grid;grid-template-columns:repeat(4,minmax(130px,1fr));gap:8px}
.editfield{display:flex;flex-direction:column;gap:3px;font-size:12px}
.editfield input{border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:13px;background:#fff;color:var(--ink)}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.editcomment{border:1px solid var(--line);border-radius:6px;padding:7px 9px;font-size:13px;background:#fff;color:var(--ink)}

body.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh}
#login{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:28px 30px;width:340px;display:flex;flex-direction:column;gap:12px}
#login h1{font-size:18px;letter-spacing:.5px}
#login h1 span{color:var(--blue)}
#login p{color:var(--dim);font-size:13px}
#login input{border:1px solid var(--line);border-radius:8px;padding:9px 10px;font-size:14px}
#login button{margin-top:4px}
#login .msg.err{min-height:1em}

/* ---------- Дифф-экран (макет ui-review-v1.html, экран 2) ---------- */
nav button.on{background:#24384d;color:#fff}
.st.matched{background:var(--blue-bg);color:var(--blue)}
.st.struct{background:var(--red-bg);color:var(--red)}
.btn.ok{background:var(--green);border-color:var(--green);color:#fff}
.btn.ok:disabled{opacity:.45;cursor:not-allowed}
.btn.g{background:var(--green-bg);border-color:#bfe3cb;color:var(--green)}
.btn.a{background:var(--amber-bg);border-color:#efd8b3;color:var(--amber)}
.btn.r{background:var(--red-bg);border-color:#f3c6c6;color:var(--red)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.small{padding:6px 13px;font-size:13px}
.chip{display:inline-block;background:var(--blue-bg);color:var(--blue);border-radius:6px;padding:2px 8px;font-size:12px;font-family:var(--mono)}
.banner{background:var(--amber-bg);border:1px solid #efd8b3;color:var(--amber);border-radius:9px;padding:10px 14px;font-size:13px;margin-bottom:14px}

.diffgrid{display:grid;grid-template-columns:minmax(380px,46%) 1fr;gap:14px;align-items:start}
.pdfpane{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px;position:sticky;top:10px}
.pdfpane .phead{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.pdfpane .phead b{font-size:13px}
.pdf-img{display:block;width:100%;height:auto;border:1px solid #c6ced8;border-radius:4px;background:#dfe4ea;min-height:200px}
.revtoggle{margin-left:auto;display:flex;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.revtoggle button{border:0;background:#fff;padding:5px 10px;font-size:12px;cursor:pointer;color:var(--dim)}
.revtoggle button.on{background:#16222f;color:#fff}
.legend{display:flex;gap:14px;margin-top:10px;font-size:11.5px;color:var(--dim)}
.legend i{display:inline-block;width:14px;height:9px;border-radius:2px;margin-right:5px;vertical-align:-1px}
.legend .new i{background:var(--red)} .legend .base i{background:var(--amber)}

.queue{display:flex;flex-direction:column;gap:10px}
.qfilter{display:flex;gap:6px;flex-wrap:wrap}
.qfilter button{border:1px solid var(--line);background:#fff;border-radius:16px;padding:4px 12px;font-size:12.5px;cursor:pointer;color:var(--ink)}
.qfilter button.on{background:#16222f;color:#fff;border-color:#16222f}
.qfilter button b{margin-left:4px}
.card{background:#fff;border:1px solid var(--line);border-left:4px solid var(--dim);border-radius:9px;padding:12px 14px}
.card.new{border-left-color:var(--red)} .card.mod{border-left-color:var(--amber)}
.card.amb{border-left-color:#7c3aed} .card.same{border-left-color:var(--green)}
.card .chead{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.card .pos{font-family:var(--mono);font-weight:700;font-size:13px}
.tag{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:2px 8px;border-radius:5px}
.tag.new{background:var(--red-bg);color:var(--red)} .tag.mod{background:var(--amber-bg);color:var(--amber)}
.tag.amb{background:#f3e8fd;color:#7c3aed} .tag.same{background:var(--green-bg);color:var(--green)}
.tag.prop{background:var(--blue-bg);color:var(--blue)}
.tag.carry{background:#eef2f7;color:var(--dim);text-transform:none;letter-spacing:0;font-weight:600}
.conf{display:inline-block;font-family:var(--mono);font-size:11px;color:var(--dim);margin-left:auto}
.fields{display:grid;grid-template-columns:1fr;gap:6px;margin-bottom:10px}
.frow{display:grid;grid-template-columns:150px 1fr;gap:10px;font-size:13px;align-items:baseline}
.frow .k{color:var(--dim);font-size:12px}
.frow .v{font-family:var(--mono);font-size:12.5px;background:#f7f9fb;border:1px solid #eef2f6;border-radius:6px;padding:5px 8px}
.frow .v.prop{background:var(--blue-bg);border-color:#cad9fb}
.why{font-size:12px;color:var(--dim);margin-bottom:10px}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.actions .btn{padding:6px 13px;font-size:13px}
.actions select{border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:13px;background:#fff;color:var(--ink)}
.subpanel{background:#f7f9fc;border:1px solid var(--line);border-radius:9px;padding:12px 14px;margin-top:-4px;display:flex;flex-direction:column;gap:8px}
.subpanel .rt{font-size:12px;color:var(--dim)}
.subpanel .btnrow{margin-top:4px}
.ambchoices{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
.ambc{border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:12.5px;cursor:pointer;display:flex;gap:10px;align-items:center}
.ambc:hover{border-color:var(--blue)}
.ambc .mono{font-family:var(--mono);font-size:11.5px;color:var(--dim)}
.pickgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px;font-size:12.5px}
.pickgrid label{display:flex;gap:6px;align-items:center;padding:3px 4px;cursor:pointer}
.pickgrid h4{font-size:12px;color:var(--dim);margin-bottom:4px;font-weight:600}
.batch{background:#fff;border:1px solid var(--line);border-radius:9px;padding:12px 14px}
.batch .bh{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.batch .bh b{font-size:13.5px}
.batch .note{font-size:12px;color:var(--dim);margin-bottom:8px}
.batch .rows{display:flex;flex-direction:column;gap:4px;font-size:12.5px}
.batch .rows label{display:flex;gap:8px;align-items:center;padding:4px 6px;border-radius:6px;cursor:pointer}
.batch .rows label:hover{background:#f4f7fa}
.batch .rows input{accent-color:var(--green)}
.batch .rows .mono{font-family:var(--mono);font-size:11.5px;color:var(--dim)}
.batch .rows .audit{color:var(--amber);font-weight:700}
.batch .bh .btn{margin-left:auto}

/* ---------- Предложения этапа 5: происхождение, attention, батч-защита ---------- */
.st.proposals{background:#e0f2fe;color:#0369a1}
.ochip{display:inline-block;border-radius:5px;padding:2px 8px;font-size:11.5px;font-weight:600;background:#eef2f7;color:var(--dim)}
.ochip.rule_carry{background:var(--green-bg);color:var(--green)}
.ochip.rule{background:var(--blue-bg);color:var(--blue)}
.ochip.none{background:var(--red-bg);color:var(--red)}
.prop{background:#f7fbff;border:1px solid #cad9fb;border-radius:9px;padding:10px 12px;margin-bottom:10px;display:flex;flex-direction:column;gap:8px}
.prop .phead2{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pgrid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px 10px}
.pcell{display:flex;flex-direction:column;gap:2px;min-width:0}
.pcell .k{color:var(--dim);font-size:11.5px}
.pcell .v{font-family:var(--mono);font-size:12px;background:#fff;border:1px solid #eef2f6;border-radius:5px;padding:3px 6px;overflow-wrap:anywhere}
.pcell .v.prop{background:var(--blue-bg);border-color:#cad9fb}
.pmeta{font-size:12px;color:var(--dim)}
.attn{font-size:12.5px;color:var(--amber);background:var(--amber-bg);border:1px solid #efd8b3;border-radius:6px;padding:4px 8px}
.card.att{box-shadow:0 0 0 1px #e9b949;background:#fffdf5}
tr.att td{background:#fffbeb}
.batch .rows label.att{background:#fffbeb}
.batch .rows label input:disabled{cursor:not-allowed}
.propcell{min-width:170px;font-size:12.5px}
.propcell .ochip{margin-top:4px}
tr.pick{cursor:pointer}

/* ---------- LLM-перенос (этап 6): бейдж, сворачиваемое обоснование, кнопка ---------- */
.ochip.llm{background:#f3e8fd;color:#7c3aed}
.llmdet{font-size:12px;margin-bottom:2px}
.llmdet summary{cursor:pointer;color:#7c3aed;font-size:12px;font-weight:600;list-style-position:inside}
.llmdet[open] summary{margin-bottom:4px}
.llmdet .pmeta{margin-top:2px}
#llm-btn.busy{cursor:progress}
#llm-btn.busy::after{content:'';display:inline-block;width:10px;height:10px;margin-left:8px;
  border:2px solid #fff;border-top-color:transparent;border-radius:50%;vertical-align:-1px;
  animation:llmspin .8s linear infinite}
@keyframes llmspin{to{transform:rotate(360deg)}}

/* ---------- Кандидаты правил и пары обучения (этап 7; макет ui-review-v1 :140–165) ---------- */
.cands{display:flex;flex-direction:column;gap:12px;margin-bottom:6px}
.cand{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.cand .ch{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.cand .pat{font-family:var(--mono);font-size:13px;background:#f7f9fb;border:1px solid #eef2f6;
  border-radius:6px;padding:4px 10px;color:var(--ink)}
.cand .pat .delta{color:var(--red);font-weight:700}
.cand .pat .arr{color:var(--dim);padding:0 6px}
.patkey{font-family:var(--mono);font-size:11.5px}
.cand .stats{font-size:12.5px;color:var(--dim);margin-bottom:10px}
.reg{background:#f7f9fb;border:1px dashed var(--line);border-radius:8px;padding:10px 12px;
  font-size:12.5px;color:var(--dim);margin-bottom:10px}
.reg b{color:var(--ink)}
.psummary{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;margin-bottom:10px}
.lchip{display:inline-block;border-radius:5px;padding:2px 8px;font-size:11.5px;font-weight:600}
.lchip.l-rules{background:var(--blue-bg);color:var(--blue)}
.lchip.l-fewshot{background:#eef2f7;color:var(--dim)}
.ochip.o-operator_edit{background:var(--blue-bg);color:var(--blue)}
.ochip.o-llm_correction{background:#f3e8fd;color:#7c3aed}
.ochip.o-accepted{background:var(--green-bg);color:var(--green)}
tr.qrow td{background:#fffbeb}
.qflag{display:flex;gap:8px;align-items:center;cursor:pointer;font-size:12.5px;white-space:nowrap}
.qflag input{accent-color:var(--amber)}
.modal{position:fixed;inset:0;background:rgba(22,34,47,.55);display:flex;align-items:center;
  justify-content:center;z-index:50;padding:20px}
.modal.hidden{display:none}
.modal-box{background:var(--panel);border:1px solid var(--line);border-radius:10px;
  max-width:860px;width:100%;max-height:85vh;overflow:auto;padding:16px 18px;display:flex;
  flex-direction:column;gap:10px}
.modal-head{display:flex;align-items:center;gap:12px}
.modal-head b{font-size:14px}
.modal-head .btn{margin-left:auto}
.modalpre{font-family:var(--mono);font-size:12px;background:#f7f9fb;border:1px solid #eef2f6;
  border-radius:8px;padding:12px;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}
