/* ============ Вектор · Карта связей — стили редактора ============ */
.map-viewport{
  position:relative;height:calc(100vh - 230px);min-height:460px;overflow:hidden;
  border-radius:var(--r);border:1px solid var(--glass-brd);
  background-color:rgba(255,255,255,.02);
  background-image:radial-gradient(rgba(255,255,255,.09) 1px,transparent 1px);
  background-size:26px 26px;
  touch-action:none;user-select:none;-webkit-user-select:none;
  cursor:grab;
}
.map-viewport:active{cursor:grabbing}
.map-world{position:absolute;left:0;top:0;transform-origin:0 0}
.map-edges{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.map-edges .mline{fill:none;stroke-width:2;pointer-events:none}
.map-edges .mhit{fill:none;stroke:transparent;stroke-width:14;pointer-events:stroke;cursor:pointer}
.map-edges .medge.sel .mline{stroke-width:2.6}
.map-edges .mbind{fill:none;stroke-width:1.6;stroke-dasharray:3 5;pointer-events:none}
.map-edges .mghost{fill:none;stroke:#3987e5;stroke-width:2;stroke-dasharray:6 5;pointer-events:none}

.mnode{
  position:absolute;border-radius:14px;padding:12px 14px;cursor:grab;
  background:rgba(20,23,35,.9);border:1px solid var(--glass-brd-2);
  box-shadow:0 10px 26px rgba(0,0,0,.35);
}
.mnode:hover{border-color:rgba(255,255,255,.32)}
.mnode.sel{outline:2px solid var(--accent);outline-offset:2px}
.mnode.mtarget{outline:2px dashed var(--accent-2);outline-offset:2px}
.mgoal{width:250px;border-width:1.5px}
.mtask{width:215px;padding:10px 12px}
.mtask.mdone{opacity:.55}
.mn-tag{font-size:.66rem;font-weight:800;letter-spacing:.06em;margin-bottom:4px}
.mn-title{font-size:.86rem;font-weight:600;line-height:1.3;margin-bottom:9px}
.mtask .mn-title{font-size:.8rem;margin-bottom:7px;display:flex;gap:7px;align-items:flex-start}
.mdot{width:9px;height:9px;border-radius:3px;flex:none;margin-top:4px}
.mn-meta{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.mgoal .bar{height:6px}

.mport{
  position:absolute;top:50%;width:12px;height:12px;margin-top:-6px;border-radius:50%;
  background:var(--accent);border:2px solid #0d0f18;opacity:0;
  transition:opacity .15s,transform .15s;cursor:crosshair;z-index:2;
}
.mport.in{left:-6px}
.mport.out{right:-6px}
.mnode:hover .mport,.mnode.sel .mport{opacity:1}
.mport:hover{transform:scale(1.35)}

.zoomctl{display:inline-flex;align-items:center;gap:2px;background:var(--glass);border:1px solid var(--glass-brd);border-radius:13px;padding:2px}
.zoomctl .btn{border:none;background:none;padding:6px 11px;box-shadow:none}
#map-zoom{min-width:46px;text-align:center;font-size:.8rem;color:var(--ink-2);font-variant-numeric:tabular-nums}

.edge-toolbar{
  position:absolute;z-index:5;display:flex;gap:2px;transform:translateX(-50%);
  background:rgba(19,22,34,.96);border:1px solid var(--glass-brd-2);border-radius:11px;padding:3px;
  box-shadow:0 10px 30px rgba(0,0,0,.5);
}
.edge-toolbar[hidden]{display:none}
.edge-toolbar button{font-size:.74rem;font-weight:700;color:var(--ink-2);padding:6px 10px;border-radius:8px;white-space:nowrap}
.edge-toolbar button:hover{background:var(--glass);color:var(--ink)}
.edge-toolbar button.on{background:rgba(144,133,233,.2);color:#c9c3f5}
.edge-toolbar [data-edel]{color:#f2a0a0}

#map-bindings.on{border-color:rgba(57,135,229,.55);background:rgba(57,135,229,.12)}
.map-hintbar{margin-top:10px;color:var(--ink-3);font-size:.78rem;line-height:1.5}

@media (max-width:900px){
  .map-viewport{height:calc(100vh - 300px);min-height:400px}
}
