@layer overscan {
ov-graph {
  position: relative;
  display: block;
  min-block-size: 380px;
  background: var(--ov-field);
  border: var(--ov-bezel) solid var(--ov-line);
  overflow: hidden;
  font-family: var(--ov-font-mono);
  background-image:
    linear-gradient(to right, var(--ov-line) 1px, transparent 1px),
    linear-gradient(to bottom, var(--ov-line) 1px, transparent 1px);
  background-size: 28px 28px;
}
.ov-graph__wires {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 0;
}
.ov-graph__notes {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 2;
}
.ov-wire {
  fill: none;
  stroke: var(--ov-line-strong);
  stroke-width: 1.6;
}
.ov-wire--converted {
  stroke: var(--ov-accent-2);
  stroke-dasharray: 7 3;
}
.ov-wire--refused {
  stroke: var(--ov-alarm);
  stroke-dasharray: 2 4;
  stroke-width: 1.2;
  opacity: 0.8;
}
.ov-wire--pending {
  stroke: var(--ov-accent);
  stroke-dasharray: 4 4;
}
.ov-wire__note {
  fill: var(--ov-accent-2);
  stroke: var(--ov-field);
  stroke-width: 3.5;
  stroke-linejoin: round;
  paint-order: stroke fill;
  font-family: var(--ov-font-mono);
  font-size: 9px;
  letter-spacing: 1px;
  text-anchor: middle;
  text-transform: uppercase;
}
.ov-wire__note--refused { fill: var(--ov-alarm); }
ov-node {
  position: absolute;
  z-index: 1;
  inset-block-start: var(--ov-node-y, 0);
  inset-inline-start: var(--ov-node-x, 0);
  inline-size: var(--ov-node-w, 168px);
  display: block;
  background: var(--ov-panel);
  border: var(--ov-bezel) solid var(--ov-line-strong);
  border-radius: var(--ov-corner);
  transform: skewX(calc(var(--ov-shear) * -1));
}
.ov-node__head {
  display: flex;
  align-items: baseline;
  gap: 6px;
  padding: 5px 8px;
  background: var(--ov-raised);
  border-block-end: var(--ov-rule) solid var(--ov-line-strong);
  cursor: grab;
  user-select: none;
  -webkit-user-select: none;
}
.ov-node__step {
  font-size: var(--ov-size-1);
  color: var(--ov-faint);
  font-variant-numeric: tabular-nums;
}
.ov-node__label {
  flex: 1;
  font-size: var(--ov-size-2);
  letter-spacing: var(--ov-track);
  text-transform: var(--ov-case);
  color: var(--ov-ink);
}
.ov-node__state {
  font-size: var(--ov-size-1);
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--ov-alarm);
}
ov-node[data-ov-state="unknown"] { border-color: var(--ov-alarm); }
ov-node[data-ov-state="cycle"] { border-color: var(--ov-alarm); }
ov-node[data-ov-state="blocked"] {
  border-color: var(--ov-line-strong);
  border-style: dashed;
}
ov-node[data-ov-state="blocked"] .ov-node__state { color: var(--ov-faint); }
ov-socket {
  display: flex;
  align-items: center;
  gap: 6px;
  position: relative;
  padding: 2px 8px;
  font-size: var(--ov-size-1);
  color: var(--ov-dim);
  cursor: crosshair;
}
ov-socket[data-dir="out"] { text-align: end; }
ov-socket[data-dir="out"] .ov-sock__name { order: 1; }
ov-socket[data-dir="out"] .ov-sock__type { order: 2; }
ov-socket[data-dir="out"] .ov-sock__pin { order: 3; }
.ov-sock__pin {
  inline-size: 9px;
  block-size: 9px;
  flex: 0 0 auto;
  background: var(--ov-panel);
  border: 1.5px solid var(--ov-line-strong);
  border-radius: var(--ov-ctl-corner);
  margin-inline-start: -13px;
}
ov-socket[data-dir="out"] .ov-sock__pin { margin-inline: 0 -13px; }
ov-socket[data-dir="out"] .ov-sock__type { text-align: end; }
ov-socket[required] .ov-sock__pin { background: var(--ov-line-strong); }
.ov-sock__name { flex: 1; }
.ov-sock__type {
  color: var(--ov-faint);
  letter-spacing: 1px;
}
ov-socket:focus-visible {
  outline: 2px solid var(--ov-accent);
  outline-offset: -2px;
}
ov-graph[data-ov-linking] ov-socket[data-ov-would] { opacity: 0.35; }
ov-graph[data-ov-linking] ov-socket[data-ov-would="ok"] {
  opacity: 1;
  color: var(--ov-accent);
}
ov-graph[data-ov-linking] ov-socket[data-ov-would="ok"] .ov-sock__pin {
  background: var(--ov-accent);
  border-color: var(--ov-accent);
}
ov-graph[data-ov-linking] ov-socket[data-ov-would="broadcast"],
ov-graph[data-ov-linking] ov-socket[data-ov-would="held"],
ov-graph[data-ov-linking] ov-socket[data-ov-would="components"] {
  opacity: 1;
  color: var(--ov-accent-2);
}
ov-graph[data-ov-linking] ov-socket[data-ov-would="broadcast"] .ov-sock__pin,
ov-graph[data-ov-linking] ov-socket[data-ov-would="held"] .ov-sock__pin,
ov-graph[data-ov-linking] ov-socket[data-ov-would="components"] .ov-sock__pin {
  border-color: var(--ov-accent-2);
}
ov-graph[data-ov-linking] ov-socket[data-ov-would]::after {
  content: attr(data-ov-would);
  position: absolute;
  inset-inline-start: 100%;
  inset-block-start: 50%;
  transform: translateY(-50%);
  margin-inline-start: 6px;
  white-space: nowrap;
  font-size: var(--ov-size-1);
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--ov-alarm);
  pointer-events: none;
}
ov-graph[data-ov-linking] ov-socket[data-ov-would="ok"]::after { content: none; }
ov-graph[data-ov-linking] ov-socket[data-ov-would="broadcast"]::after,
ov-graph[data-ov-linking] ov-socket[data-ov-would="held"]::after,
ov-graph[data-ov-linking] ov-socket[data-ov-would="components"]::after {
  color: var(--ov-accent-2);
}
.ov-graph__say {
  position: absolute;
  inset-block-end: 0;
  inset-inline: 0;
  z-index: 2;
  margin: 0;
  padding: 4px 8px;
  background: var(--ov-raised);
  border-block-start: var(--ov-rule) solid var(--ov-line-strong);
  font-size: var(--ov-size-1);
  letter-spacing: 1px;
  color: var(--ov-dim);
  min-block-size: 1.2em;
}
ov-graph[data-ov-last-refusal] .ov-graph__say { color: var(--ov-alarm); }
ov-graph::after {
  content: attr(data-ov-evaluable) " nodes evaluable";
  position: absolute;
  inset-block-start: 0;
  inset-inline-end: 0;
  z-index: 2;
  padding: 4px 8px;
  font-size: var(--ov-size-1);
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--ov-faint);
  pointer-events: none;
}
.ov-link {
  position: absolute;
  inline-size: 1px;
  block-size: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
.ov-link--orphan {
  inline-size: auto;
  block-size: auto;
  overflow: visible;
  clip-path: none;
  position: absolute;
  inset-block-end: 22px;
  inset-inline-start: 8px;
  z-index: 2;
  font-size: var(--ov-size-1);
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--ov-alarm);
}
}
