:root{
  --bg:#f3f1ea;
  --surface:#fffdf8;
  --surface-2:#ece8dd;
  --ink:#211f1a;
  --muted:#6f6a5c;
  --line:#dad4c4;
  --line-strong:#c3bca6;

  --companyA:#2f6f5e;
  --companyB:#a2551f;

  --pos:#2f7a4b;
  --neg:#a83f34;
  --pending:#8a6a1d;
  --pending-soft:#f4e8c9;
  --accepted-soft:#dcefe2;
  --rejected-soft:#f1dcd8;

  --focus:#1c6dd0;

  --font-display:"Source Serif 4", Georgia, "Times New Roman", serif;
  --font-body:"IBM Plex Sans", "Segoe UI", system-ui, sans-serif;
  --font-mono:"IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;
}

@media (prefers-color-scheme: dark){
  :root{
    --bg:#15140f;
    --surface:#1e1c16;
    --surface-2:#262319;
    --ink:#ede8db;
    --muted:#a89e88;
    --line:#3a3527;
    --line-strong:#4d4630;

    --companyA:#5fbb9e;
    --companyB:#e0985a;

    --pos:#63c186;
    --neg:#e08477;
    --pending:#e0c26b;
    --pending-soft:#3a3018;
    --accepted-soft:#1e3226;
    --rejected-soft:#3a2420;

    --focus:#6fa8ea;
  }
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:var(--bg); color:var(--ink); font-family:var(--font-body);
  line-height:1.5; -webkit-font-smoothing:antialiased;
}

/* ---------- login ---------- */
.login-shell{min-height:100vh; display:flex; align-items:center; justify-content:center; padding:2rem 1.25rem;}
.login-card{
  width:min(380px, 100%); background:var(--surface); border:1px solid var(--line);
  border-radius:12px; padding:2rem 1.9rem 1.8rem;
}
.login-card .kicker{font-size:0.75rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--muted); font-weight:500; margin-bottom:0.3rem;}
.login-card h1{font-family:var(--font-display); font-weight:600; font-size:1.5rem; margin:0 0 1.4rem; text-wrap:balance;}
.login-card .field{margin-bottom:1.1rem;}
.login-card label{font-size:0.8rem; color:var(--muted); font-weight:500; display:block; margin-bottom:0.35rem;}
.login-card input[type="password"]{
  width:100%; font-family:var(--font-mono); font-size:0.92rem;
  padding:0.6rem 0.7rem; border-radius:7px; border:1px solid var(--line-strong);
  background:var(--bg); color:var(--ink);
}
.login-card input[type="password"]:focus-visible{outline:2px solid var(--focus); outline-offset:1px;}
.login-error{font-size:0.82rem; color:var(--neg); min-height:1.2em; margin:0 0 0.9rem;}
.login-card .btn-primary{width:100%; padding:0.65rem 1rem; font-size:0.92rem;}

/* ---------- shared ---------- */
.btn-primary{
  font-family:var(--font-body); font-weight:600; font-size:0.88rem;
  background:var(--ink); color:var(--bg); border:none;
  padding:0.55rem 1rem; border-radius:7px; cursor:pointer;
}
.btn-primary:hover{opacity:0.88;}
.btn-primary:disabled{opacity:0.4; cursor:not-allowed;}
.btn-ghost{
  font-family:var(--font-body); font-size:0.88rem; font-weight:500;
  background:transparent; border:1px solid var(--line-strong); color:var(--ink);
  padding:0.5rem 0.9rem; border-radius:7px; cursor:pointer;
}

/* ---------- app shell ---------- */
.wrap{max-width:1080px; margin:0 auto; padding:2.5rem 1.25rem 5rem;}

header.masthead{
  display:flex; flex-wrap:wrap; gap:1.25rem 2rem; align-items:flex-end; justify-content:space-between;
  border-bottom:1px solid var(--line-strong); padding-bottom:1.1rem; margin-bottom:1.4rem;
}
.masthead h1{font-family:var(--font-display); font-weight:600; font-size:clamp(1.5rem, 1.1rem + 1.5vw, 2rem); margin:0 0 0.2rem;}
.masthead .kicker{font-size:0.78rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--muted); font-weight:500;}

.session-badge{display:flex; align-items:center; gap:0.7rem; font-size:0.88rem; color:var(--muted);}
.session-badge .chip{font-weight:600; padding:0.3rem 0.7rem; border-radius:999px; color:#fff; font-size:0.85rem;}
.session-badge .chip[data-role="A"]{background:var(--companyA);}
.session-badge .chip[data-role="B"]{background:var(--companyB);}
.conn-dot{width:8px; height:8px; border-radius:50%; background:var(--muted); display:inline-block;}
.conn-dot.live{background:var(--pos);}
.conn-dot.down{background:var(--neg);}
.logout-btn{font-family:var(--font-body); font-size:0.82rem; font-weight:500; background:transparent; border:1px solid var(--line-strong); color:var(--muted); padding:0.35rem 0.7rem; border-radius:7px; cursor:pointer;}

.main-grid{display:grid; grid-template-columns:1.4fr 1fr; gap:1.5rem; align-items:start;}
@media (max-width:900px){ .main-grid{grid-template-columns:1fr;} }

.ledgers{display:grid; grid-template-columns:1fr 1fr; gap:1.1rem; margin-bottom:1.6rem;}
@media (max-width:560px){ .ledgers{grid-template-columns:1fr;} }

.company{background:var(--surface); border:1px solid var(--line); border-radius:10px; padding:1.1rem 1.2rem 1.3rem; border-top:3px solid var(--side-color);}
.company[data-role="A"]{--side-color:var(--companyA);}
.company[data-role="B"]{--side-color:var(--companyB);}
.company-tag{font-size:0.72rem; letter-spacing:0.06em; text-transform:uppercase; color:var(--side-color); font-weight:600; margin:0 0 0.7rem;}
.company-name{font-family:var(--font-display); font-weight:600; font-size:1.15rem; margin:0 0 0.15rem;}
.role-note{font-size:0.72rem; color:var(--muted); margin-bottom:0.6rem;}

.balance{display:flex; align-items:baseline; gap:0.5rem; padding:0.55rem 0 0.75rem; border-bottom:1px dashed var(--line-strong); margin-bottom:0.7rem;}
.balance-label{font-size:0.78rem; color:var(--muted);}
.balance-value{font-family:var(--font-mono); font-weight:600; font-size:1.25rem; font-variant-numeric:tabular-nums; margin-left:auto;}
.balance-value.neg{color:var(--neg);}

table.ledger{width:100%; border-collapse:collapse; font-size:0.83rem;}
table.ledger thead th{text-align:left; font-weight:500; font-size:0.7rem; letter-spacing:0.05em; text-transform:uppercase; color:var(--muted); padding:0 0 0.3rem; border-bottom:1px solid var(--line-strong);}
table.ledger thead th.num{text-align:right;}
table.ledger tbody td{padding:0.35rem 0; border-bottom:1px solid var(--line); vertical-align:top;}
table.ledger tbody tr:last-child td{border-bottom:none;}
table.ledger td.date{color:var(--muted); white-space:nowrap; font-family:var(--font-mono); font-size:0.76rem; padding-right:0.4rem;}
table.ledger td.num{text-align:right; font-family:var(--font-mono); font-variant-numeric:tabular-nums; white-space:nowrap; padding-left:0.4rem;}
table.ledger td.num.pos{color:var(--pos);}
table.ledger td.num.neg{color:var(--neg);}
.ledger-scroll{max-height:220px; overflow-y:auto;}

.deals-section h2, .chat-section h2{font-family:var(--font-display); font-weight:600; font-size:1.2rem; margin:0 0 0.2rem;}
.deals-head{display:flex; align-items:center; justify-content:space-between; gap:1rem; flex-wrap:wrap; margin-bottom:0.3rem;}
.deals-sub{color:var(--muted); font-size:0.83rem; margin:0 0 1rem;}

ol.deal-list{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:0.65rem; max-height:520px; overflow-y:auto;}
.deal-empty{color:var(--muted); font-size:0.88rem; font-style:italic; border:1px dashed var(--line-strong); border-radius:8px; padding:1.1rem; text-align:center;}

li.deal{background:var(--surface); border:1px solid var(--line); border-radius:9px; padding:0.8rem 0.95rem;}
li.deal.accepted{border-color:var(--pos);}
li.deal.rejected{opacity:0.65;}
.deal-row{display:flex; align-items:center; gap:0.55rem; flex-wrap:wrap; margin-bottom:0.3rem;}
.deal-type{font-weight:600; font-size:0.9rem;}
.deal-flow{font-family:var(--font-mono); font-size:0.8rem; color:var(--muted); background:var(--surface-2); padding:0.1rem 0.4rem; border-radius:5px;}
.deal-amount{font-family:var(--font-mono); font-weight:600; font-variant-numeric:tabular-nums; margin-left:auto;}
.deal-status{font-size:0.7rem; font-weight:600; letter-spacing:0.03em; text-transform:uppercase; padding:0.18rem 0.5rem; border-radius:999px;}
li.deal.pending .deal-status{background:var(--pending-soft); color:var(--pending);}
li.deal.accepted .deal-status{background:var(--accepted-soft); color:var(--pos);}
li.deal.rejected .deal-status{background:var(--rejected-soft); color:var(--neg);}
.deal-desc{font-size:0.85rem; color:var(--muted); margin:0.1rem 0 0;}
.deal-meta{font-size:0.74rem; color:var(--muted); margin-top:0.35rem;}
.deal-actions{display:flex; gap:0.5rem; margin-top:0.6rem;}
.deal-actions button{font-family:var(--font-body); font-size:0.8rem; font-weight:600; padding:0.38rem 0.75rem; border-radius:6px; cursor:pointer; border:1px solid var(--line-strong); background:var(--surface);}
.deal-actions .accept{background:var(--pos); border-color:var(--pos); color:#fff;}
.deal-actions .reject{color:var(--neg);}
.hint-noRole{font-size:0.76rem; color:var(--pending); margin-top:0.3rem;}

dialog.newdeal{border:1px solid var(--line-strong); border-radius:12px; padding:0; background:var(--surface); color:var(--ink); width:min(420px, 92vw);}
dialog.newdeal.wide{width:min(720px, 94vw);}

/* ---------- табличная часть (строки позиций) ---------- */
.line-table{border:1px solid var(--line-strong); border-radius:8px; overflow:hidden;}
.line-table-head{
  display:grid; grid-template-columns:1.8fr 0.7fr 0.8fr 0.8fr 0.9fr 1.1fr auto; gap:0.4rem;
  padding:0.4rem 0.6rem; background:var(--surface-2);
  font-size:0.7rem; letter-spacing:0.04em; text-transform:uppercase; color:var(--muted); font-weight:600;
}
#whDocItemsHead, #whDocConsumedTable .line-table-head, #ctItemsTable .line-table-head{
  grid-template-columns:2fr 1fr auto;
}
.line-table-body{display:flex; flex-direction:column;}
.line-row{
  display:grid; grid-template-columns:1.8fr 0.7fr 0.8fr 0.8fr 0.9fr 1.1fr auto; gap:0.4rem; align-items:center;
  padding:0.4rem 0.6rem; border-top:1px solid var(--line);
}
#whDocItemsList .line-row, #whDocConsumedList .line-row, #ctItemsList .line-row{
  grid-template-columns:2fr 1fr auto;
}
.line-row select, .line-row input{
  font-family:var(--font-body); font-size:0.85rem; padding:0.35rem 0.45rem;
  border-radius:5px; border:1px solid var(--line-strong); background:var(--bg); color:var(--ink); width:100%;
}
.line-row .line-sum{font-family:var(--font-mono); font-size:0.85rem; font-variant-numeric:tabular-nums; white-space:nowrap;}
.line-row .rm-row{
  font-family:var(--font-body); font-size:1rem; line-height:1; background:transparent; border:none;
  color:var(--muted); cursor:pointer; padding:0.2rem 0.4rem;
}
.line-row .rm-row:hover{color:var(--neg);}
.line-empty-row{padding:0.7rem 0.6rem; color:var(--muted); font-size:0.85rem; font-style:italic;}
.add-row{margin-top:0.5rem; font-size:0.82rem;}
.line-total{font-family:var(--font-mono); font-weight:600; font-size:0.95rem; text-align:right; margin:0.5rem 0 0;}
@media (max-width:640px){
  .line-table-head{display:none;}
  .line-row{grid-template-columns:1fr; grid-auto-rows:auto; gap:0.3rem; padding:0.6rem;}
}
dialog.newdeal::backdrop{background:rgba(20,18,12,0.45);}
.newdeal form{padding:1.2rem 1.3rem 1.3rem; display:flex; flex-direction:column; gap:0.85rem;}
.newdeal h3{font-family:var(--font-display); margin:0; font-size:1.1rem;}
.field{display:flex; flex-direction:column; gap:0.3rem;}
.field label{font-size:0.76rem; color:var(--muted); font-weight:500;}
.field select, .field input, .field textarea{font-family:var(--font-body); font-size:0.9rem; padding:0.48rem 0.6rem; border-radius:6px; border:1px solid var(--line-strong); background:var(--bg); color:var(--ink);}
.field textarea{resize:vertical; min-height:3rem;}
.newdeal-actions{display:flex; justify-content:flex-end; gap:0.6rem; margin-top:0.2rem;}

.chat-section{background:var(--surface); border:1px solid var(--line); border-radius:10px; padding:1.1rem 1.2rem 1.2rem; display:flex; flex-direction:column; height:min(600px, 80vh);}
.chat-log{flex:1; overflow-y:auto; display:flex; flex-direction:column; gap:0.55rem; margin:0.8rem 0 0.8rem; padding-right:0.2rem;}
.chat-empty{color:var(--muted); font-size:0.85rem; font-style:italic; text-align:center; padding:1rem 0;}
.chat-msg{max-width:88%; padding:0.5rem 0.7rem; border-radius:10px; font-size:0.88rem; line-height:1.4;}
.chat-msg .who{font-size:0.68rem; font-weight:600; letter-spacing:0.03em; text-transform:uppercase; margin-bottom:0.15rem; opacity:0.75;}
.chat-msg.mine{align-self:flex-end; background:var(--surface-2);}
.chat-msg.theirs{align-self:flex-start; border:1px solid var(--line);}
.chat-msg.mine .who{color:var(--ink);}
.chat-form{display:flex; gap:0.5rem;}
.chat-form textarea{flex:1; resize:none; font-family:var(--font-body); font-size:0.9rem; padding:0.55rem 0.65rem; border-radius:8px; border:1px solid var(--line-strong); background:var(--bg); color:var(--ink); height:2.6rem;}
.chat-form button{align-self:flex-end;}

footer.note{margin-top:2.4rem; font-size:0.76rem; color:var(--muted); max-width:70ch; border-top:1px solid var(--line); padding-top:1rem;}

/* ---------- nomenclature / warehouse ---------- */
.nomen-section, .recon-section{margin-bottom:1.8rem;}
.table-scroll{overflow-x:auto;}
table.nomen-table{width:100%; border-collapse:collapse; font-size:0.85rem;}
table.nomen-table thead th{text-align:left; font-weight:500; font-size:0.7rem; letter-spacing:0.05em; text-transform:uppercase; color:var(--muted); padding:0 0 0.35rem; border-bottom:1px solid var(--line-strong); white-space:nowrap;}
table.nomen-table thead th.num{text-align:right;}
table.nomen-table tbody td{padding:0.4rem 0.5rem 0.4rem 0; border-bottom:1px solid var(--line); vertical-align:middle;}
table.nomen-table tbody tr:last-child td{border-bottom:none;}
table.nomen-table td.num{text-align:right; font-family:var(--font-mono); font-variant-numeric:tabular-nums; white-space:nowrap;}
table.nomen-table .item-meta{color:var(--muted); font-size:0.78rem;}
table.nomen-table .rename-btn{font-size:0.76rem; background:transparent; border:1px solid var(--line-strong); border-radius:6px; padding:0.25rem 0.55rem; cursor:pointer; color:var(--muted); white-space:nowrap;}
table.nomen-table .rename-btn:hover{color:var(--ink); border-color:var(--muted);}

.warehouses{display:grid; grid-template-columns:1fr 1fr; gap:1.1rem; margin-bottom:1.8rem;}
@media (max-width:560px){ .warehouses{grid-template-columns:1fr;} }

.deal-item-tag{font-family:var(--font-mono); font-size:0.78rem; color:var(--muted); background:var(--surface-2); padding:0.08rem 0.4rem; border-radius:5px;}

table.mini-lines{width:100%; border-collapse:collapse; margin:0.5rem 0; font-size:0.83rem;}
table.mini-lines td{padding:0.25rem 0.4rem; border-bottom:1px solid var(--line); font-family:var(--font-mono);}
table.mini-lines td:first-child{font-family:var(--font-body); width:60%;}
table.mini-lines td.num{text-align:right; font-variant-numeric:tabular-nums;}
table.mini-lines tr:last-child td{border-bottom:none;}
.deal-upd-btn{font-family:var(--font-body); font-size:0.78rem; font-weight:600; background:transparent; border:1px solid var(--line-strong); border-radius:6px; padding:0.3rem 0.65rem; cursor:pointer; margin-top:0.5rem;}
.deal-upd-btn:hover{border-color:var(--muted);}

.recon-chip{font-size:0.7rem; font-weight:600; letter-spacing:0.03em; text-transform:uppercase; padding:0.18rem 0.5rem; border-radius:999px;}
li.deal.pending .recon-chip, li.recon.pending .recon-chip{background:var(--pending-soft); color:var(--pending);}
li.recon.confirmed .recon-chip{background:var(--accepted-soft); color:var(--pos);}
li.recon{background:var(--surface); border:1px solid var(--line); border-radius:9px; padding:0.8rem 0.95rem;}
li.recon.confirmed{border-color:var(--pos);}
.recon-totals{font-family:var(--font-mono); font-size:0.85rem; margin:0.4rem 0; font-variant-numeric:tabular-nums;}

.upd-body{font-size:0.88rem; line-height:1.7;}
.upd-body table{width:100%; border-collapse:collapse; margin-top:0.6rem; font-size:0.85rem;}
.upd-body table td, .upd-body table th{border:1px solid var(--line-strong); padding:0.4rem 0.5rem; text-align:left;}
.upd-body table th{background:var(--surface-2); font-weight:600;}

.toast{
  position:fixed; bottom:1.5rem; left:50%; transform:translateX(-50%);
  background:var(--neg); color:#fff; padding:0.7rem 1.1rem; border-radius:8px;
  font-size:0.88rem; max-width:min(480px, 90vw); box-shadow:0 6px 20px rgba(0,0,0,0.25); z-index:50;
}

@media (prefers-reduced-motion: reduce){ *{animation-duration:0.001ms !important; transition-duration:0.001ms !important;} }
