/* ============================================================
   board.css — 俯瞰盤面タブ(ツリーパネル・盤面本体・サイドパネル)
   ============================================================ */

/* ---- Tree panel ---- */
#treePanel{
  background:var(--panel);border-bottom:1px solid var(--line);
  max-height:38vh;overflow-y:auto;padding:10px 22px;
}
.panelHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.panelHead .label{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;color:var(--muted);}
.teamGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;}
.teamCard{border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#FDFCF9;}
.teamCard .th{
  display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;user-select:none;
  border-bottom:1px solid transparent;
}
.teamCard.open .th{border-bottom:1px solid var(--line);}
.teamCard .dot{width:9px;height:9px;border-radius:50%;flex:none;}
.teamCard .tname{font-weight:700;font-size:13px;flex:1;}
.teamCard .tgoal{font-size:10.5px;color:var(--muted);}
.teamCard .caret{font-size:10px;color:var(--muted);transition:.15s;}
.teamCard.open .caret{transform:rotate(90deg);}
.teamBody{display:none;padding:8px 10px 10px 10px;}
.teamCard.open .teamBody{display:block;}
.taskRow{
  display:flex;align-items:center;gap:6px;padding:4px 4px;border-radius:5px;font-size:12px;
  flex-wrap:nowrap;
}
.taskRow:hover{background:#F1EEE5;}
.taskRow .drag{cursor:grab;color:var(--muted);font-family:var(--font-mono);font-size:11px;flex:none;}
.taskRow .st{width:7px;height:7px;border-radius:50%;flex:none;}
.taskRow .lvl{font-family:var(--font-mono);font-size:9.5px;color:var(--muted);flex:none;}
.taskRow .ttitle{
  flex:1 1 auto;min-width:60px;cursor:pointer;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.taskRow .ttitle:hover{text-decoration:underline;}
.taskRow .meta{
  flex:none;max-width:120px;font-size:10px;color:var(--muted);font-family:var(--font-mono);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.taskRow .rowbtns{display:flex;gap:2px;flex:none;white-space:nowrap;}
.rowbtns button{padding:1px 5px;font-size:10px;}
@media (max-width:480px){
  .taskRow .meta{display:none;}
  .taskRow .rowbtns button{padding:1px 4px;font-size:9px;}
}

/* ---- Board ---- */
#boardWrap{position:relative;height:56vh;background:var(--board);overflow:hidden;}
#boardWrap::before{
  content:"";position:absolute;inset:0;
  background-image:
    linear-gradient(var(--board-grid) 1px,transparent 1px),
    linear-gradient(90deg,var(--board-grid) 1px,transparent 1px);
  background-size:26px 26px;opacity:.5;pointer-events:none;
}
#board{position:absolute;inset:0;}
/* SVGは置換要素のため、position:absolute;inset:0 だけでは既定の内在サイズ(300x150)のまま
   広がらないブラウザ実装がある。明示的にwidth/height:100%を指定して盤面全体を覆わせる。 */
#linkLayer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}
#linkLayer path{pointer-events:stroke;cursor:pointer;}
.cnode{
  position:absolute;min-width:120px;max-width:220px;padding:9px 12px;border-radius:8px;
  color:#fff;font-size:12.5px;cursor:grab;box-shadow:0 6px 18px rgba(0,0,0,.35);
  border:1.5px solid var(--node-border);user-select:none;
}
.cnode.team{background:linear-gradient(180deg,var(--node-team),#232B38);border-color:#5C6B85;font-weight:700;}
.cnode.task{background:linear-gradient(180deg,var(--node-task),#2C3446);}
/* ---- チームノードの「健康診断」表示 ---- */
.cnode.team{max-width:240px;padding-bottom:16px;}
.cnode.team.health-red{border-color:var(--danger);box-shadow:0 0 0 1px rgba(181,69,58,.5),0 6px 18px rgba(0,0,0,.35);}
.cnode.team.health-yellow{border-color:#C9A227;box-shadow:0 0 0 1px rgba(201,162,39,.4),0 6px 18px rgba(0,0,0,.35);}
.cnode.team.health-green{border-color:#3E8E5B;box-shadow:0 0 0 1px rgba(62,142,91,.35),0 6px 18px rgba(0,0,0,.35);}
.cnode .healthBreakdown{display:block;font-size:9.5px;color:#B9C0CE;font-family:var(--font-mono);margin-top:4px;font-weight:400;}
.cnode .nodeProgressBar{
  position:absolute;left:9px;right:9px;bottom:6px;height:4px;border-radius:2px;
  background:rgba(255,255,255,.15);overflow:hidden;
}
.cnode .nodeProgressFill{height:100%;background:#6FB88A;border-radius:2px;}
.cnode .loadBadge{
  position:absolute;top:-8px;right:14px;min-width:18px;height:18px;border-radius:9px;
  background:#5C6B85;color:#fff;font-size:10px;font-family:var(--font-mono);font-weight:700;
  display:flex;align-items:center;justify-content:center;padding:0 4px;box-sizing:border-box;
}
.cnode .loadBadge.tier2{background:#C1892E;}
.cnode .loadBadge.tier3{background:#B5453A;}
.cnode .nlabel{display:block;line-height:1.35;}
.cnode .nsub{display:block;font-size:10px;color:#B9C0CE;font-family:var(--font-mono);margin-top:3px;}
.cnode .nx{
  position:absolute;top:-8px;right:-8px;width:18px;height:18px;border-radius:50%;
  background:#1D2330;border:1px solid var(--node-border);color:#ccc;font-size:11px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.cnode.selected{outline:2px solid #E8C468;outline-offset:2px;}
.cnode.linkFrom{outline:3px solid #E8C468;outline-offset:3px;box-shadow:0 0 0 6px rgba(232,196,104,.18),0 6px 18px rgba(0,0,0,.35);}
body.linkModeOn .cnode{cursor:crosshair;}
.cnode.linkFrom{outline:2px solid var(--teal);outline-offset:2px;}
/* サマリーチップからの一時ハイライト */
.cnode.pulseHighlight{outline:3px solid #E8C468;outline-offset:4px;transition:outline-offset .25s ease;}
#linkLayer path.linkPulse{filter:drop-shadow(0 0 5px rgba(232,196,104,.95));}
.statusChip{display:inline-block;padding:1px 6px;border-radius:9px;font-size:9.5px;margin-left:4px;font-family:var(--font-mono);}

#boardHint{
  position:absolute;left:16px;bottom:12px;color:#9AA2B0;font-family:var(--font-mono);
  font-size:11px;background:rgba(22,27,34,.7);padding:6px 10px;border-radius:6px;pointer-events:none;
}
#boardTools{position:absolute;right:16px;top:14px;display:flex;gap:6px;z-index:5;}
#boardTools button{background:#1D2330;color:#DCE1EA;border-color:#3A4358;}
#boardTools button.active{background:var(--teal);border-color:var(--teal);color:#fff;}
#boardSummaryChips{position:absolute;left:16px;bottom:46px;display:flex;gap:6px;z-index:5;}
.boardChip{
  font-family:var(--font-mono);font-size:11px;color:#DCE1EA;background:rgba(29,35,48,.9);
  border:1px solid #3A4358;padding:5px 9px;border-radius:14px;cursor:pointer;transition:.12s;
}
.boardChip:hover{border-color:#5C6B85;background:#232B38;}

/* ---- Side panel ---- */
#sidePanel{
  position:fixed;top:0;right:-380px;width:360px;height:100vh;background:var(--panel);
  box-shadow:-8px 0 24px rgba(0,0,0,.12);transition:right .18s ease;z-index:50;
  padding:18px;overflow-y:auto;border-left:1px solid var(--line);
}
#sidePanel.open{right:0;}
#sidePanel h2{font-size:15px;margin:0 0 4px 0;}
#sidePanel .closeBtn{position:absolute;top:14px;right:14px;}
#sidePanel label{display:block;font-size:10.5px;color:var(--muted);margin:10px 0 4px;font-family:var(--font-mono);letter-spacing:.05em;}
#sidePanel input,#sidePanel select,#sidePanel textarea{width:100%;}
#sidePanel textarea{height:60px;resize:vertical;}
