g.node polygon, g.node ellipse { stroke-width: 1; }
.hide-nodes-added g.node.status-added { display: none; }
.hide-nodes-removed g.node.status-removed { display: none; }
.hide-nodes-affected g.node.status-affected { display: none; }
.hide-nodes-unchanged g.node.status-unchanged { display: none; }
.hide-edges-added g.edge.status-added { display: none; }
.hide-edges-removed g.edge.status-removed { display: none; }
.hide-edges-affected g.edge.status-affected { display: none; }
.hide-edges-unchanged g.edge.status-unchanged { display: none; }
:is(.hide-nodes-added,.hide-nodes-removed,.hide-nodes-affected,.hide-nodes-unchanged).show-cycle-baseline
g.node:is(.status-added,.status-removed,.status-affected,.status-unchanged):is(.cycle-status-baseline-only,.cycle-status-both) { display: block; }
:is(.hide-nodes-added,.hide-nodes-removed,.hide-nodes-affected,.hide-nodes-unchanged).show-cycle-current
g.node:is(.status-added,.status-removed,.status-affected,.status-unchanged):is(.cycle-status-current-only,.cycle-status-both) { display: block; }
:is(.hide-edges-added,.hide-edges-removed,.hide-edges-affected,.hide-edges-unchanged).show-cycle-baseline
g.edge:is(.status-added,.status-removed,.status-affected,.status-unchanged):is(.cycle-status-baseline-only,.cycle-status-both) { display: block; }
:is(.hide-edges-added,.hide-edges-removed,.hide-edges-affected,.hide-edges-unchanged).show-cycle-current
g.edge:is(.status-added,.status-removed,.status-affected,.status-unchanged):is(.cycle-status-current-only,.cycle-status-both) { display: block; }
.svg-frame.side-baseline g.node:is(.cycle-status-baseline-only,.cycle-status-both) > polygon,
.svg-frame.side-baseline g.node:is(.cycle-status-baseline-only,.cycle-status-both) > ellipse,
.svg-frame.side-current g.node:is(.cycle-status-current-only,.cycle-status-both) > polygon,
.svg-frame.side-current g.node:is(.cycle-status-current-only,.cycle-status-both) > ellipse {
stroke: #c00;
}
.svg-frame.side-baseline g.edge:is(.cycle-status-baseline-only,.cycle-status-both) > path,
.svg-frame.side-current g.edge:is(.cycle-status-current-only,.cycle-status-both) > path {
stroke: #c00;
}
.svg-frame.side-baseline g.edge:is(.cycle-status-baseline-only,.cycle-status-both) > polygon,
.svg-frame.side-current g.edge:is(.cycle-status-current-only,.cycle-status-both) > polygon {
stroke: #c00; fill: #c00;
}
.svg-frame g.node { cursor: pointer; }
#node-modal-diagram g[data-diag-node] { cursor: pointer; }
#node-modal-diagram g[data-diag-node].sn-static { cursor: default; }
body.shift-select .svg-frame svg { cursor: crosshair; }
body.shift-select .svg-frame g.node { cursor: copy; }
body.ctrl-link .svg-frame svg { cursor: default; }
body.ctrl-link .svg-frame g.node { cursor: alias; }
body.shift-select #node-modal-diagram g[data-diag-node]:not(.diag-ext) { cursor: copy; }
body.ctrl-link #node-modal-diagram g[data-diag-node]:not(.diag-ext) { cursor: alias; }
body.shift-select #node-modal-diagram g.diag-ext,
body.ctrl-link #node-modal-diagram g.diag-ext { cursor: not-allowed; }
body.shift-select #node-modal-diagram .mn-card:not(.diag-ext) { cursor: copy; }
body.ctrl-link #node-modal-diagram .mn-card:not(.diag-ext) { cursor: alias; }
body.shift-select #node-modal-diagram .mn-card.diag-ext,
body.ctrl-link #node-modal-diagram .mn-card.diag-ext { cursor: not-allowed; }
#node-modal-hints { z-index: 5; }
body.shift-select #node-modal-hints,
body.ctrl-link #node-modal-hints { opacity: 1; }
body.shift-select, body.ctrl-link { user-select: none; -webkit-user-select: none; }
body.shift-select .frame-wrap .zoom-controls,
body.ctrl-link .frame-wrap .zoom-controls,
body.shift-select .frame-wrap .size-controls,
body.ctrl-link .frame-wrap .size-controls { opacity: 1; pointer-events: auto; }
.kbd-hints { position: absolute; bottom: 12px; left: 12px; z-index: 10;
display: flex; gap: 8px; opacity: 0; transition: opacity .15s;
pointer-events: none; }
.kbd-hint { display: inline-flex; align-items: center; gap: 5px; font-size: 11px;
color: #5c7a96; background: rgba(255,255,255,.95); border: 1px solid #d0dcea;
border-radius: 6px; padding: 3px 8px; }
.kbd-hint kbd { font-family: ui-monospace,'SF Mono',monospace; font-size: 11px;
font-weight: 600; color: #2c3e50; background: #eef1f4;
border: 1px solid #cdd7e2; border-radius: 4px; padding: 0 5px; }
.frame-wrap.show-zoom .kbd-hints,
body.shift-select .frame-wrap .kbd-hints,
body.ctrl-link .frame-wrap .kbd-hints { opacity: 1; }
.node-table tr.row-selected td { background: rgb(254,245,222); }
.node-table tr.row-selected td[data-col="name"] { background: rgb(254,245,222); }
g.node.node-selected > polygon,
g.node.node-selected > ellipse { fill: #fffde7; stroke: #f9a825; stroke-width: 2; }
.svg-frame.side-baseline g.node.node-selected:is(.cycle-status-baseline-only,.cycle-status-both) > polygon,
.svg-frame.side-baseline g.node.node-selected:is(.cycle-status-baseline-only,.cycle-status-both) > ellipse,
.svg-frame.side-current g.node.node-selected:is(.cycle-status-current-only,.cycle-status-both) > polygon,
.svg-frame.side-current g.node.node-selected:is(.cycle-status-current-only,.cycle-status-both) > ellipse {
stroke: #c00;
}
#node-modal-diagram g[data-diag-node].diag-selected > rect,
#node-modal-diagram g.mn-card.diag-selected > rect { fill: #fffde7; stroke: #f9a825; stroke-width: 2; }
#node-modal-diagram g.diag-cycle.diag-selected > rect { stroke: #c00; stroke-width: 2; }
.node-table tr.row-hl td { background: rgb(210,235,248); }
.node-table tr.row-hl td[data-col="name"] { background: rgb(210,235,248); }
g.node.node-hl { filter: drop-shadow(0 0 7px rgba(30,160,220,1)) drop-shadow(0 0 3px rgba(30,160,220,.95)); }
.svg-status-bar {
position: absolute; bottom: 0; left: 0; right: 0; z-index: 15;
background: rgba(28, 42, 57, 0.90);
color: #c8d8e8; font-family: ui-monospace, 'SF Mono', monospace; font-size: 11px;
padding: 4px 72px 4px 12px;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
pointer-events: none;
border-top: 1px solid rgba(255,255,255,.10);
}
.svg-frame g.edge > path,
.svg-frame g.edge > polygon,
.svg-frame g.edge > text { transition: opacity 0.12s; }
.svg-frame g.edge.cluster-edge-hidden > path,
.svg-frame g.edge.cluster-edge-hidden > polygon,
.svg-frame g.edge.cluster-edge-hidden > text {
opacity: 0; pointer-events: none;
}
.svg-frame.show-in-edges g.edge.edge-in.cluster-edge-hidden > path,
.svg-frame.show-in-edges g.edge.edge-in.cluster-edge-hidden > polygon,
.svg-frame.show-in-edges g.edge.edge-in.cluster-edge-hidden > text,
.svg-frame.show-out-edges g.edge.edge-out.cluster-edge-hidden > path,
.svg-frame.show-out-edges g.edge.edge-out.cluster-edge-hidden > polygon,
.svg-frame.show-out-edges g.edge.edge-out.cluster-edge-hidden > text {
opacity: 1; pointer-events: auto;
}
.svg-frame.node-hovered g.edge.edge-dim > path,
.svg-frame.node-hovered g.edge.edge-dim > polygon,
.svg-frame.node-hovered g.edge.edge-dim > text { opacity: 0.06; }
.svg-frame.node-hovered g.edge.cluster-edge-hidden.edge-dim > path,
.svg-frame.node-hovered g.edge.cluster-edge-hidden.edge-dim > polygon,
.svg-frame.node-hovered g.edge.cluster-edge-hidden.edge-dim > text {
opacity: 0; pointer-events: none;
}
.svg-frame.node-hovered g.edge.edge-connected > path,
.svg-frame.node-hovered g.edge.edge-connected > polygon,
.svg-frame.node-hovered g.edge.edge-connected > text {
opacity: 1; pointer-events: auto;
}