/* ═══ Конфигуратор модульных зданий — инженерная тема ═══ */
:root{
  --bg:#131a22; --panel:#1a232e; --panel2:#202b38; --line:#2b3947;
  --ink:#e2e9f0; --muted:#8fa1b2; --accent:#5a9ae0; --accent2:#e08838;
  --ok:#5fbf7a; --danger:#e06050;
  --on-accent:#0e1620;
  --cell-on:#3d587a; --cell-on-hi:#48699a; --cell-off-hi:#242f3c; --cell-sel:#4f688a;
  --cell-line:#4a6a94; --overlay:rgba(20,28,38,.75);
  --mono:"Cascadia Code",Consolas,ui-monospace,monospace;
}
:root[data-theme="light"]{
  --bg:#eef1f4; --panel:#ffffff; --panel2:#f6f8fa; --line:#ccd6e0;
  --ink:#1b2530; --muted:#5f7183; --accent:#2f6db3; --accent2:#b25c1c;
  --ok:#2e7d43; --danger:#c0392b;
  --on-accent:#ffffff;
  --cell-on:#8fb0d4; --cell-on-hi:#7ba2cd; --cell-off-hi:#e2e8ee; --cell-sel:#a8c4e2;
  --cell-line:#6f95bf; --overlay:rgba(255,255,255,.85);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{
  font-family:"Segoe UI",system-ui,sans-serif; font-size:14px;
  background:var(--bg); color:var(--ink);
  display:flex; flex-direction:column; overflow:hidden;
}
.mono{font-family:var(--mono)}
.small{font-size:.78rem}

/* ── верхняя панель ── */
.topbar{
  display:flex; align-items:center; gap:1.2rem; padding:.55rem 1rem;
  background:var(--panel); border-bottom:1px solid var(--line); flex:0 0 auto;
}
.brand{display:flex; align-items:center; gap:.6rem; min-width:0}
.proj-name{
  background:transparent; border:1px solid transparent; border-radius:4px;
  color:var(--ink); font-size:1rem; font-weight:600; padding:.2rem .5rem; width:16rem;
}
.proj-name:hover,.proj-name:focus{border-color:var(--line); outline:none; background:var(--panel2)}
.dims{color:var(--accent2); font-size:.82rem; letter-spacing:.03em; white-space:nowrap}
.topbar-actions{margin-left:auto; display:flex; gap:.5rem}
.btn{
  font:inherit; font-size:.83rem; padding:.42rem .85rem; border-radius:5px;
  border:1px solid var(--line); background:var(--panel2); color:var(--ink); cursor:pointer;
}
.btn:hover{border-color:var(--accent)}
.btn.primary{background:var(--accent); border-color:var(--accent); color:var(--on-accent); font-weight:600}
.btn.primary:hover{filter:brightness(1.1)}
.btn.ghost{background:transparent}
.btn.danger{color:var(--danger); border-color:var(--danger)}
.btn:focus-visible{outline:2px solid var(--accent2); outline-offset:1px}

/* ── layout ── */
.layout{flex:1; display:flex; min-height:0}
.sidebar{
  width:320px; flex:0 0 auto; overflow-y:auto; padding:.8rem;
  display:flex; flex-direction:column; gap:.8rem;
  background:var(--panel); border-right:1px solid var(--line);
}
.pane{background:var(--panel2); border:1px solid var(--line); border-radius:8px; padding:.85rem .95rem}
.pane h2{
  font-size:.75rem; letter-spacing:.1em; text-transform:uppercase;
  color:var(--muted); font-weight:600; margin-bottom:.7rem;
  display:flex; justify-content:space-between; align-items:baseline;
}
.note{font-size:.75rem; color:var(--muted); margin-top:.6rem; line-height:1.45}

.fields{display:flex; flex-direction:column; gap:.55rem}
.fields label{display:grid; grid-template-columns:1fr 5.2rem; align-items:center; gap:.5rem; font-size:.86rem}
.fields .hint{grid-column:1 / -1; color:var(--accent2); font-size:.72rem; text-align:right; min-height:.9em}
input[type=number]{
  font:inherit; font-family:var(--mono); background:var(--bg); color:var(--ink);
  border:1px solid var(--line); border-radius:5px; padding:.32rem .5rem; width:100%;
}
input[type=number]:focus{outline:none; border-color:var(--accent)}
select{
  font:inherit; background:var(--bg); color:var(--ink);
  border:1px solid var(--line); border-radius:5px; padding:.32rem .4rem; width:100%;
}
.chk{display:flex; gap:.5rem; align-items:center; font-size:.86rem; margin-bottom:.4rem; cursor:pointer}
.chk input{accent-color:var(--accent)}

/* ── план-редактор ── */
.floor-tabs{display:flex; gap:.3rem; margin-bottom:.6rem; flex-wrap:wrap}
.floor-tab{
  font-family:var(--mono); font-size:.72rem; padding:.25rem .6rem; border-radius:4px;
  border:1px solid var(--line); background:var(--bg); color:var(--muted); cursor:pointer;
}
.floor-tab.active{background:var(--accent); color:var(--on-accent); border-color:var(--accent); font-weight:600}
.plan-tools{display:flex; align-items:center; gap:.5rem; margin-bottom:.5rem}
.brush-sel{flex:1; font-size:.8rem; padding:.25rem .4rem}
.plan-wrap{overflow-x:auto; display:flex; gap:.4rem; align-items:flex-start}
.plan-grid{display:grid; gap:3px; width:max-content}
.row-depths{display:none}
.plan-rows{display:flex; flex-direction:column; gap:3px}
.row-depth-inp{
  width:3.4rem; font-family:var(--mono); font-size:.68rem; text-align:center;
  background:var(--bg); color:var(--muted); border:1px solid var(--line);
  border-radius:4px; padding:.1rem .2rem;
}
.row-depth-inp:focus{outline:none; border-color:var(--accent); color:var(--ink)}
.plan-cell{position:relative}
.plan-cell .ct{
  position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  font-family:var(--mono); font-size:.62rem; color:#dfe8f0; pointer-events:none;
}
.plan-cell{
  width:26px; height:56px; border-radius:3px; cursor:pointer; border:1px solid var(--line);
  background:var(--bg); transition:background .1s;
}
.plan-cell.on{background:var(--cell-on); border-color:var(--cell-line)}
.plan-cell.on:hover{background:var(--cell-on-hi)}
.plan-cell.off:hover{background:var(--cell-off-hi)}
.plan-cell.sel{outline:2px solid var(--accent2); outline-offset:1px; background:var(--cell-sel)}
.plan-cell.hasop{box-shadow:inset 0 0 0 2px rgba(224,136,56,.55)}

/* ── инспектор ── */
.insp-empty{color:var(--muted); font-size:.82rem}
.op-list{display:flex; flex-direction:column; gap:.4rem; margin:.5rem 0}
.op-row{
  display:flex; align-items:center; gap:.5rem; font-size:.8rem;
  background:var(--bg); border:1px solid var(--line); border-radius:5px; padding:.35rem .55rem;
}
.op-row .x{
  margin-left:auto; cursor:pointer; color:var(--danger); background:none; border:none;
  font-size:1rem; line-height:1; padding:0 .2rem;
}
.op-form{display:flex; flex-direction:column; gap:.45rem; margin-top:.6rem; padding-top:.6rem; border-top:1px dashed var(--line)}
.op-form .row2{display:grid; grid-template-columns:1fr 1fr; gap:.45rem}
.err{color:var(--danger); font-size:.75rem; min-height:1em}
.wall-badge{font-family:var(--mono); font-size:.68rem; color:var(--accent); white-space:nowrap}
.btn-remove-mod{width:100%; margin-top:.7rem}

/* ── вкладки ── */
.main{flex:1; display:flex; flex-direction:column; min-width:0}
.tabs{display:flex; gap:.25rem; padding:.5rem .8rem 0; background:var(--panel); border-bottom:1px solid var(--line)}
.tab{
  font:inherit; font-size:.86rem; padding:.5rem 1.1rem; cursor:pointer;
  background:transparent; color:var(--muted); border:1px solid transparent;
  border-radius:7px 7px 0 0; border-bottom:none;
}
.tab.active{background:var(--bg); color:var(--ink); border-color:var(--line); font-weight:600}
.tab-body{flex:1; min-height:0; position:relative}
.tab-page{position:absolute; inset:0; display:none}
.tab-page.active{display:block}
#canvas3d{width:100%; height:100%}
#canvas3d canvas{display:block}

/* ── таблицы ── */
.table-scroll{height:100%; overflow:auto; padding:1rem 1.2rem}
table{border-collapse:collapse; width:100%; font-size:.84rem; background:var(--panel2); border-radius:8px; overflow:hidden}
th{
  font-family:var(--mono); font-size:.68rem; text-transform:uppercase; letter-spacing:.08em;
  color:var(--muted); text-align:left; padding:.6rem .8rem; background:var(--panel);
  border-bottom:1px solid var(--line); position:sticky; top:-1rem;
}
td{padding:.5rem .8rem; border-bottom:1px solid var(--line); vertical-align:top}
td.num{text-align:right; font-family:var(--mono); font-variant-numeric:tabular-nums; white-space:nowrap}
tr.cat td{
  background:var(--panel); color:var(--accent2); font-weight:600; font-size:.78rem;
  letter-spacing:.06em; text-transform:uppercase;
}
tr.total td{font-weight:700; border-top:2px solid var(--line)}
tr.grand td{background:var(--panel); color:var(--accent2); font-size:.95rem}
.muted{color:var(--muted)}

/* ── вкладки сайдбара ── */
.side-tabs{display:flex; gap:.3rem; flex:0 0 auto}
.side-tab{
  flex:1; font:inherit; font-size:.84rem; font-weight:600; padding:.5rem .4rem;
  border:1px solid var(--line); background:var(--panel2); color:var(--muted);
  border-radius:6px; cursor:pointer;
}
.side-tab.active{background:var(--accent); border-color:var(--accent); color:var(--on-accent)}
.side-tab:focus-visible{outline:2px solid var(--accent2); outline-offset:1px}
.side-page{display:none; flex-direction:column; gap:.8rem}
.side-page.active{display:flex}

/* ── переключатель темы ── */
.theme-btn{
  display:flex; align-items:center; justify-content:center; width:2rem; height:2rem;
  padding:0; border-radius:5px; border:1px solid var(--line);
  background:var(--panel2); color:var(--ink); cursor:pointer;
}
.theme-btn:hover{border-color:var(--accent)}
.theme-btn svg{width:16px; height:16px; stroke:currentColor; fill:none; stroke-width:1.8}
:root[data-theme="light"] .theme-btn .i-moon{display:none}
:root:not([data-theme="light"]) .theme-btn .i-sun{display:none}

/* ── модуль: группы состава ── */
.pane-module{border-color:var(--accent2)}
.pane-module h2{color:var(--accent2)}
.group-list{display:flex; flex-direction:column; gap:.15rem}
.group-row{
  display:flex; align-items:center; gap:.55rem; font-size:.84rem;
  padding:.3rem .45rem; border-radius:5px; cursor:pointer;
}
.group-row:hover{background:var(--bg)}
.group-row input{accent-color:var(--accent)}
.group-dot{width:10px; height:10px; border-radius:2px; flex:0 0 auto}
.group-row .cnt{margin-left:auto; font-family:var(--mono); font-size:.7rem; color:var(--muted)}
#canvas3dMod{width:100%; height:100%}
#canvas3dMod canvas{display:block}
.mod-overlay{
  position:absolute; left:.8rem; bottom:.8rem; font-size:.72rem; color:var(--muted);
  background:var(--overlay); padding:.4rem .7rem; border-radius:6px; pointer-events:none;
}

/* ── спецификация: переключатель ── */
.spec-toolbar{display:flex; gap:.5rem; align-items:center; margin-bottom:.8rem}
.spec-mode.active{background:var(--accent); color:var(--on-accent); border-color:var(--accent); font-weight:600}
tr.grp-head td{
  background:var(--panel); color:var(--accent2); font-weight:600; font-size:.78rem;
  letter-spacing:.06em; text-transform:uppercase;
}

/* ── чертежи ── */
.dw-toolbar{display:flex; gap:.8rem; align-items:center; margin-bottom:.5rem}
.dw-prog{margin:.6rem 0 .2rem; max-width:34rem}
.dw-prog-bar{
  height:8px; border-radius:99px; background:var(--panel2);
  border:1px solid var(--line); overflow:hidden;
}
.dw-prog-fill{
  height:100%; width:0%; border-radius:99px; background:var(--accent);
  transition:width .35s ease;
}
.dw-prog-fill.done{background:var(--ok)}
.dw-prog-fill.err{background:var(--danger)}
.dw-prog-info{
  display:flex; justify-content:space-between; gap:1rem;
  margin-top:.3rem; font-size:.75rem; color:var(--muted);
}
.dw-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:.9rem; margin-top:1rem}
.dw-card{background:var(--panel2); border:1px solid var(--line); border-radius:8px; overflow:hidden}
.dw-card img{width:100%; display:block; background:#fff; cursor:zoom-in}
.dw-card .cap{display:flex; align-items:center; gap:.6rem; padding:.5rem .7rem; font-size:.82rem}
.dw-card .cap a{margin-left:auto; color:var(--accent); text-decoration:none; font-family:var(--mono); font-size:.75rem}
.dw-card .cap a:hover{text-decoration:underline}
.dw-album{grid-column:1/-1; display:flex; justify-content:flex-start}

@media (max-width:900px){
  .layout{flex-direction:column; overflow-y:auto}
  .sidebar{width:100%; border-right:none; border-bottom:1px solid var(--line)}
  .main{min-height:70vh}
}
