/* OneDev ассистент — «Камень и графит». Токены общие с порталом DreamTeam. */
:root{
  --bg:#F1F2F0; --panel:#FCFCFA; --panel2:#E9ECE7; --border:#DDDFD5;
  --text:#2B332D; --muted:#626B60; --accent:#465A61; --accent-dark:#384B52;
  --accent-soft:#E2E8E8; --on-accent:#FCFCFA;
  --free:#42654D; --sold:#9D4840; --book:#8A601D; --na:#7B879C;
  --success-bg:#E8EFE8; --warning-bg:#F5EEDC; --danger-bg:#F7EAE7;
  --radius:8px; --radius-panel:10px;
  --shadow-doc:0 2px 14px rgba(43,51,45,.08);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  background:var(--bg); color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;
  font-size:14.5px; line-height:1.5;
  display:flex; flex-direction:column; height:100%;
}
:focus-visible{outline:2px solid var(--accent); outline-offset:2px}
.ic{width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.75; stroke-linecap:round; stroke-linejoin:round; flex:0 0 auto}
a{color:var(--accent)}
a:hover{color:var(--accent-dark)}
.topbar{
  display:flex; align-items:center; gap:12px;
  padding:0 24px; min-height:64px; background:var(--panel); border-bottom:1px solid var(--border);
  position:sticky; top:0; z-index:20;
}
.brand{display:flex; align-items:center; gap:14px; min-width:0}
.logo-img{height:30px; width:auto; display:block}
.brand-sub{font-size:11px; color:var(--muted); margin-top:1px; letter-spacing:.4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.top-right{display:flex; align-items:center; gap:10px; margin-left:auto; min-width:0; flex-wrap:wrap; justify-content:flex-end}
.feed-state{font-size:12.5px; color:var(--muted)}
.feed-state.ok{color:var(--free)}
.feed-state.err{color:var(--sold)}
.lang-switch{display:flex; border:1px solid var(--border); border-radius:var(--radius); overflow:hidden; background:var(--panel)}
.lang-switch button{
  border:none; background:transparent; padding:6px 13px; font-size:12.5px;
  cursor:pointer; color:var(--muted); font-weight:500; font-family:inherit;
}
.lang-switch button+button{border-left:1px solid var(--border)}
.lang-switch button.active{background:var(--accent); color:var(--on-accent)}
.mgr-btn{
  background:transparent; border:1px solid var(--border); border-radius:var(--radius);
  padding:6px 13px; font-size:12.5px; color:var(--text); cursor:pointer; font-family:inherit;
}
.mgr-btn:hover{border-color:var(--accent); color:var(--accent-dark); background:var(--accent-soft)}

/* auth overlay */
.overlay{
  position:fixed; inset:0; background:rgba(43,51,45,.4); z-index:50;
  display:flex; align-items:center; justify-content:center; padding:20px;
}
.auth-card{
  background:var(--panel); border:1px solid var(--border); border-radius:var(--radius-panel);
  padding:32px 34px; width:100%; max-width:400px;
  box-shadow:0 8px 28px rgba(43,51,45,.12),0 2px 8px rgba(43,51,45,.06);
}
.auth-card .logo-img{height:36px; margin-bottom:6px}
.auth-title{font-size:20px; font-weight:600; margin:14px 0 4px}
.auth-sub{font-size:13.5px; color:var(--muted); margin-bottom:20px}
.auth-card label{display:block; font-size:12.5px; font-weight:500; color:var(--muted); margin:14px 0 6px}
.auth-card input{
  width:100%; padding:11px 13px; border:1px solid var(--border); border-radius:var(--radius);
  font-size:14.5px; outline:none; color:var(--text); background:var(--panel);
}
.auth-card input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft)}
.auth-actions{display:flex; gap:10px; margin-top:22px}
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  border:none; border-radius:var(--radius); padding:0 18px; min-height:40px;
  font-size:14px; font-weight:500; line-height:1; font-family:inherit;
  cursor:pointer; background:var(--accent); color:var(--on-accent); text-decoration:none;
}
.btn:hover{background:var(--accent-dark)}
.btn:disabled{background:var(--border); color:var(--muted); cursor:not-allowed}
.btn.ghost{background:transparent; border:1px solid var(--border); color:var(--text)}
.btn.ghost:hover{border-color:var(--accent); background:var(--accent-soft); color:var(--accent-dark)}

#chat{flex:1; overflow-y:auto; padding:24px; display:flex; flex-direction:column; gap:14px; max-width:920px; width:100%; margin:0 auto}
.msg{display:flex; flex-direction:column; max-width:760px; width:100%}
.msg.user{align-self:flex-end; align-items:flex-end}
.msg.assistant{align-self:flex-start; align-items:flex-start}
.bubble{
  background:var(--panel); border:1px solid var(--border); border-radius:var(--radius-panel);
  padding:12px 16px; line-height:1.55; font-size:14.5px;
}
.msg.user .bubble{background:var(--accent-soft); border-color:transparent}

.chips{display:flex; gap:8px; flex-wrap:wrap; margin-top:12px}
.chip{
  background:transparent; border:1px solid var(--border); color:var(--text);
  border-radius:var(--radius); padding:8px 14px; font-size:13px; cursor:pointer; font-family:inherit;
}
.chip:hover{border-color:var(--accent); color:var(--accent-dark); background:var(--accent-soft)}

/* карточка юнита */
.unit-card{
  background:var(--panel); border:1px solid var(--border); border-radius:var(--radius-panel);
  overflow:hidden; margin-top:10px; width:100%;
}
.unit-photo{width:100%; max-height:280px; object-fit:contain; display:block; background:#E9EDE9}
.unit-body{padding:14px 16px}
.unit-top{display:flex; align-items:center; gap:10px; flex-wrap:wrap}
.unit-num{font-size:22px; font-weight:600}
.unit-complex{color:var(--muted); font-size:13px}
.badge{
  font-size:11.5px; font-weight:600; padding:3px 10px; border-radius:6px;
}
.badge.free{background:var(--success-bg); color:var(--free); border:1px solid rgba(66,101,77,.35)}
.badge.sold{background:var(--danger-bg); color:var(--sold); border:1px solid rgba(157,72,64,.35)}
.badge.book{background:var(--warning-bg); color:var(--book); border:1px solid rgba(138,96,29,.35)}
.badge.na{background:var(--panel2); color:var(--na); border:1px solid var(--border)}
.specs{display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:8px; margin:12px 0}
.spec{background:var(--panel2); border-radius:var(--radius); padding:8px 10px}
.spec .k{font-size:11px; color:var(--muted)}
.spec .v{font-size:14px; font-weight:600; margin-top:2px}
.price-row{display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; margin:4px 0 2px}
.price{font-size:24px; font-weight:600; color:var(--text)}
.price-sqm{color:var(--muted); font-size:13px}
.actions{display:flex; gap:10px; margin-top:12px; flex-wrap:wrap}

/* секция альтернатив */
.alt-section{margin-top:10px; width:100%}
.alt-title{font-size:13.5px; color:var(--muted); margin:14px 0 8px; font-weight:600}
.alt-group-title{font-size:13px; color:var(--accent-dark); font-weight:600; margin:12px 0 6px}
.alt-list{display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:10px}
.alt-item{
  background:var(--panel); border:1px solid var(--border); border-radius:var(--radius-panel);
  padding:12px; cursor:pointer;
}
.alt-item:hover{border-color:var(--accent); background:var(--panel)}
.alt-item .n{font-weight:600; font-size:16px}
.alt-item .sub{font-size:12px; color:var(--muted); margin-top:3px}
.alt-item .p{color:var(--accent-dark); font-weight:600; margin-top:6px}

.note{font-size:12.5px; color:var(--muted); margin-top:10px}

.inputbar{
  display:flex; gap:10px; padding:14px 24px; background:var(--panel);
  border-top:1px solid var(--border);
}
#input{
  flex:1; background:var(--panel); border:1px solid var(--border); border-radius:var(--radius);
  padding:11px 16px; color:var(--text); font-size:14.5px; outline:none; font-family:inherit;
}
#input:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft)}
#send{
  border:none; border-radius:var(--radius); padding:0 24px; min-height:40px; font-size:14.5px; font-weight:500;
  background:var(--accent); color:var(--on-accent); cursor:pointer; font-family:inherit;
}
#send:hover{background:var(--accent-dark)}

.typing{color:var(--muted); font-size:13px; padding:4px 2px}

/* ---------- переключатель режимов ---------- */
.mode-switch{
  display:flex; border:1px solid var(--border); border-radius:var(--radius); overflow:hidden;
  background:var(--panel);
}
.mode-switch button{
  border:none; background:transparent; padding:7px 14px; font-size:12.5px;
  cursor:pointer; color:var(--muted); font-weight:500; white-space:nowrap; font-family:inherit;
}
.mode-switch button+button{border-left:1px solid var(--border)}
.mode-switch button.active{background:var(--accent); color:var(--on-accent)}
.menu-btn{
  display:inline-flex; align-items:center; gap:7px; height:36px; padding:0 14px;
  border-radius:var(--radius); border:1px solid var(--border); background:var(--panel);
  color:var(--text); text-decoration:none; font-size:13px; font-weight:500;
  white-space:nowrap; font-family:inherit;
}
.menu-btn:hover{border-color:var(--accent); color:var(--accent-dark); background:var(--accent-soft)}
.menu-btn:active{background:var(--accent-soft)}
.proj-picker{display:flex; flex-wrap:wrap; gap:8px; margin:2px 0 10px}
.proj-btn{
  padding:0 16px; min-height:38px; border-radius:var(--radius);
  border:1px solid var(--border); background:var(--panel); color:var(--text);
  font-weight:500; font-size:13.5px; cursor:pointer; font-family:inherit;
}
.proj-btn:hover{border-color:var(--accent); background:var(--accent-soft)}
.proj-btn.active{border-color:var(--accent); background:var(--accent); color:var(--on-accent)}
.inv-docs{margin-top:14px}
.inv-docs .doc-title{font-size:11.5px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); margin-bottom:6px}
.inv-docs .doc-empty{font-size:12.5px; color:var(--muted)}
.doc-row{display:flex; align-items:center; gap:8px; padding:6px 0; border-bottom:1px solid var(--border)}
.doc-label{flex:1; font-size:12.5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.doc-btn{background:none; border:1px solid var(--border); border-radius:6px; padding:3px 9px; font-size:11.5px; font-weight:500; color:var(--accent-dark); cursor:pointer; font-family:inherit}
.doc-btn.del{color:var(--sold)}
.doc-btn:hover{border-color:var(--accent)}

/* ---------- генератор инвойсов ---------- */
#invoice-app{flex:1; overflow:hidden; display:flex; flex-direction:column}
.inv-layout{
  flex:1; display:grid; grid-template-columns:360px 1fr; gap:20px;
  padding:20px; min-height:0;
}
.inv-card{
  background:var(--panel); border:1px solid var(--border); border-radius:var(--radius-panel);
  padding:20px; overflow-y:auto; display:flex; flex-direction:column;
}
.inv-title{font-size:19px; font-weight:600; color:var(--text)}
.inv-sub{font-size:12.5px; color:var(--muted); margin:4px 0 10px; line-height:1.5}
.inv-card label{
  display:block; font-size:12.5px; font-weight:500; color:var(--muted);
  margin:14px 0 6px;
}
.inv-card input, .inv-card select{
  width:100%; padding:10px 12px; border:1px solid var(--border); border-radius:var(--radius);
  font-size:14.5px; outline:none; color:var(--text); background:var(--panel); font-family:inherit;
}
.inv-card input:focus, .inv-card select:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft)}
.inv-row2{display:grid; grid-template-columns:1fr 1fr; gap:10px}
.inv-col{min-width:0}
.inv-note{font-size:12px; color:var(--muted); margin-top:12px; line-height:1.5}
.inv-rate{font-size:12px; margin-top:6px; color:var(--muted)}
.inv-rate.ok{color:var(--free)}
.inv-rate.err{color:var(--sold)}
.inv-actions{display:flex; gap:10px; margin-top:16px; flex-wrap:wrap}
.inv-err{font-size:12.5px; color:var(--sold); margin-top:10px; min-height:16px}
.inv-err.ok{color:var(--free)}
.inv-preview{display:flex; flex-direction:column; min-width:0; min-height:0}
.inv-preview-head{
  font-size:12.5px; color:var(--muted); margin-bottom:8px; font-weight:500;
}
.inv-scale-wrap{flex:1; overflow:auto; border-radius:var(--radius-panel)}
#invoice-doc{transform-origin:top left; margin:0 auto}

/* сам документ инвойса (bilingual GE/EN, как шаблон клиента) — белая бумага */
.invoice-doc{
  width:794px; background:#fff; color:#111318; padding:34px 42px 26px;
  font-family:'Sylfaen','Noto Sans Georgian','Segoe UI',Arial,sans-serif;
  font-size:12.5px; line-height:1.4; box-shadow:var(--shadow-doc);
  border-radius:6px;
}
.inv-head{display:flex; justify-content:space-between; align-items:flex-start; gap:20px; margin-bottom:14px}
.inv-head-left{display:flex; gap:16px; align-items:flex-start; min-width:0}
.inv-head img{width:150px; height:auto; display:block; flex:none}
.inv-co{font-size:10.5px; color:#5c6a80; line-height:1.55}
.inv-co-name{font-weight:700; color:#111318; font-size:11px}
.inv-head-right{text-align:right; min-width:230px}
.inv-head-row{display:flex; justify-content:flex-end; gap:8px; padding:2px 0; align-items:baseline}
.inv-head-row .ge{font-weight:700}
.inv-head-row .en{color:#5c6a80; font-size:11px}
.inv-head-row b{font-size:13.5px}
.inv-meta{width:100%; border-collapse:collapse; margin:0 0 10px}
.inv-meta td{padding:3px 0; vertical-align:top}
.inv-meta td.lab{width:240px}
.inv-meta .ge{font-weight:700; display:block}
.inv-meta .en{color:#5c6a80; font-size:11px; display:block}
.inv-buyer-title{
  font-weight:700; font-size:13px; border-bottom:1.5px solid #111318;
  padding-bottom:3px; margin:12px 0 6px;
}
.inv-table{width:100%; border-collapse:collapse; margin-top:8px}
.inv-table th, .inv-table td{
  border:1px solid #44484f; padding:6px 8px; text-align:left; vertical-align:top;
}
.inv-table th{background:#f1f4f9; font-size:11px; text-align:center}
.inv-table th .ge{display:block; font-weight:700}
.inv-table th .en{display:block; font-weight:400; color:#5c6a80}
.inv-table td.num, .inv-table td.cur{text-align:right; white-space:nowrap; font-variant-numeric:tabular-nums}
.inv-table td.desc{min-width:170px}
.inv-total{width:100%; border-collapse:collapse; margin-top:6px}
.inv-total td{padding:5px 8px; border:1px solid #44484f; vertical-align:top}
.inv-total td.lab{width:70%; text-align:right; font-weight:700}
.inv-total td.val{text-align:right; font-weight:700; white-space:nowrap; font-variant-numeric:tabular-nums}
.inv-rate-note{
  margin-top:10px; font-size:11px; color:#5c6a80; line-height:1.5;
}
.inv-corr{margin-top:12px; border-top:1px solid #44484f; padding-top:8px}
.inv-corr-title{font-weight:700; margin-bottom:2px}
.inv-corr div{font-size:11.5px; line-height:1.45}

/* ---------- акт приёма наличных ---------- */
.cash-doc{
  width:794px; background:#fff; color:#111318; padding:44px 60px 40px;
  font-family:'Times New Roman', Georgia, 'Sylfaen', serif;
  font-size:15px; line-height:1.55; box-shadow:var(--shadow-doc);
  border-radius:6px;
}
.cash-title{
  text-align:center; font-weight:700; font-size:17px; letter-spacing:.5px;
  margin:0 0 20px; text-transform:uppercase;
}
.cash-doc p{text-align:justify; margin:0 0 12px; text-indent:24px}
.cash-signs{display:flex; justify-content:space-between; gap:40px; margin-top:34px}
.cash-sign{flex:1; font-size:14px; line-height:1.7}
.cash-sign-title{font-weight:700; margin-bottom:6px}
.cash-sign .sig{white-space:nowrap}
/* Подпись + печать: печать лежит на строке подписи, подпись выходит из-под неё вниз и заканчивается на линии.
   Подвинуть печать: --seal-x (вправо от начала строки). */
.cash-sigline{position:relative; min-height:100px; display:flex; align-items:flex-end}
.cash-seal{position:absolute; left:var(--seal-x,56px); bottom:-6px; height:129px; width:auto; max-width:none; pointer-events:none}
.cash-text-box{margin-top:14px; border:1px solid var(--border); border-radius:var(--radius); padding:10px 12px; background:var(--panel2)}
.cash-lang{display:flex; border:1px solid var(--border); border-radius:var(--radius); overflow:hidden; width:max-content; margin:2px 0 6px; background:var(--panel)}
.cash-lang button{border:none; background:transparent; padding:6px 14px; font-size:12.5px; cursor:pointer; color:var(--muted); font-weight:500; font-family:inherit}
.cash-lang button+button{border-left:1px solid var(--border)}
.cash-lang button.active{background:var(--accent); color:var(--on-accent)}
.cash-text-box summary{cursor:pointer; font-size:12.5px; font-weight:600; color:var(--accent-dark)}
.cash-text-box textarea{
  width:100%; margin-top:8px; padding:10px 12px; border:1px solid var(--border);
  border-radius:var(--radius); font-family:'Times New Roman', Georgia, serif; font-size:14px;
  line-height:1.55; color:var(--text); background:var(--panel); resize:vertical; min-height:180px; outline:none;
}
.cash-text-box textarea:focus{border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft)}
@media (max-width:900px){
  .cash-doc{width:100%}
  .cash-signs{flex-direction:column; gap:24px}
}

@media (max-width:900px){
  .inv-layout{grid-template-columns:1fr; overflow-y:auto}
  .inv-card{overflow:visible; min-width:0}
  .inv-preview{overflow:visible}
}
@media (max-width:720px){
  .topbar{flex-wrap:wrap; min-height:0; padding:8px 16px; row-gap:8px}
  .top-right{width:100%; justify-content:flex-end}
}
@media (max-width:600px){
  .specs{grid-template-columns:repeat(2,1fr)}
  .topbar{padding:8px 12px}
  #chat{padding:14px}
  .inputbar{padding:10px 14px}
  .mode-switch button{padding:6px 9px; font-size:11.5px}
  .inv-layout{padding:12px}
  .inv-card{padding:16px; width:100%; max-width:100%}
  .inv-card input, .inv-card select{min-width:0; width:100%}
  .inv-row2{grid-template-columns:1fr}
  #feed-state{display:none}
}

/* ---------- договор резервирования ---------- */
.con-sep{height:1px; background:var(--border); margin:16px 0 4px}
.con-steps{display:flex; align-items:center; gap:6px; margin:6px 0 2px}
.con-step-dot{width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:12.5px; font-weight:600; background:var(--panel2); color:var(--muted); border:1px solid var(--border)}
.con-step-dot.active{background:var(--accent); color:var(--on-accent); border-color:var(--accent)}
.con-step-dot.done{background:var(--accent); color:var(--on-accent); border-color:var(--accent); opacity:.55}
.con-step-line{flex:1; height:1px; background:var(--border)}
.con-step-title{font-size:13px; font-weight:600; color:var(--text); margin:2px 0 12px}
.con-step{display:flex; flex-direction:column; gap:2px}
.con-feed-hint{font-size:12px; color:var(--accent-dark); background:var(--accent-soft); border:1px dashed var(--border); border-radius:var(--radius); padding:8px 10px; margin-top:8px; line-height:1.5}
.con-step .inv-actions{margin-top:14px}
.contract-doc{
  width:794px; background:#fff; color:#111318; padding:44px 60px 56px;
  font-family:'Sylfaen','Noto Sans Georgian','Times New Roman',Georgia,serif;
  font-size:14px; line-height:1.55; box-shadow:var(--shadow-doc);
  border-radius:6px;
}
.con-table{width:100%; border-collapse:collapse; table-layout:fixed}
.con-table td{vertical-align:top; width:50%; padding:3px 16px 10px}
.con-table td.ge{}
.con-table td.con-title{font-weight:700; font-size:15px; text-align:center; line-height:1.4; padding-bottom:16px}
.con-table td.con-date{padding-bottom:18px}
.con-table td.con-j{text-align:justify}
.con-table td.con-b{font-weight:700}
.con-table td.con-mt{padding-top:16px}
.con-table td.con-sign{text-align:left; padding-top:10px}
.con-req-title{font-weight:700; margin:0 0 5px}
.con-req{line-height:1.5; margin:0 0 2px}
.con-seal-img{display:block; margin-top:8px; height:auto; width:200px}
.con-table tr{break-inside:avoid; page-break-inside:avoid}
.con-drafts-box{margin-top:16px; border:1px solid var(--border); border-radius:var(--radius); padding:10px 12px; background:var(--panel2)}
.con-drafts-title{font-size:11px; font-weight:600; color:var(--muted); letter-spacing:.08em; text-transform:uppercase; margin-bottom:6px}
.con-drafts{display:flex; flex-direction:column; gap:4px; max-height:170px; overflow-y:auto}
.con-drafts-empty{font-size:12px; color:var(--muted)}
.con-draft{display:flex; align-items:center; justify-content:space-between; gap:8px; padding:6px 8px; background:var(--panel); border:1px solid var(--border); border-radius:var(--radius); cursor:pointer; font-size:12.5px}
.con-draft:hover{border-color:var(--accent)}
.con-draft-label{overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.con-draft-del{border:none; background:transparent; color:var(--muted); cursor:pointer; font-size:13px; padding:2px 5px; border-radius:6px}
.con-draft-del:hover{color:var(--sold); background:var(--danger-bg)}
@media (max-width:900px){
  .contract-doc{width:100%}
}

@page{size:A4; margin:20mm 18mm}
@media print{
  body{display:block !important; background:#fff !important}
  .topbar,.inputbar,.overlay,#chat,#invoice-app,#cash-app,.inv-card,.inv-preview-head{display:none !important}
  #contract-app{display:block !important}
  #contract-app .inv-layout{display:block !important; padding:0 !important}
  #contract-app .inv-preview{display:block !important}
  #contract-app .inv-scale-wrap{overflow:visible !important}
  .contract-doc{width:auto !important; box-shadow:none !important; border-radius:0 !important; margin:0 !important; padding:0 !important; font-size:12.5pt}
}

/* поиск покупателя в акте приёма платежа */
.buyer-find{margin:4px 0 12px; padding:10px 12px; border:1px solid var(--border); border-radius:var(--radius); background:var(--panel2)}
.buyer-find label{margin-top:0}
.buyer-find input{margin-top:6px}
.buyer-results{display:flex; flex-direction:column; gap:4px; margin-top:8px}
.buyer-row{display:flex; flex-direction:column; align-items:flex-start; gap:2px; width:100%; text-align:left; padding:8px 10px; border:1px solid var(--border); border-radius:var(--radius); background:var(--panel); color:var(--text); font:inherit; cursor:pointer}
.buyer-row:hover, .buyer-row:focus-visible{border-color:var(--accent); outline:none; box-shadow:0 0 0 3px var(--accent-soft)}
.buyer-name{font-weight:600; font-size:13.5px}
.buyer-sub{font-size:12px; color:var(--muted)}
.buyer-meta{font-size:12px; color:var(--muted); margin-top:8px; line-height:1.45; min-height:16px}
.buyer-meta.ok{color:var(--free)}
.buyer-meta.err{color:var(--sold)}
.buyer-meta.warn{color:var(--book)}
