#import "@preview/fletcher:0.6.0" as fletcher: diagram, node, edge

#diagram(
  spacing: 5mm,
  node-stroke: 1pt,
  node-fill: white,
  node-corner-radius: 2pt,
  edge-stroke: 1pt,     // make lines thicker
  mark-scale: 60%,      // make arrowheads smaller

  node((-3,0), radius: 2pt, fill: black),
  edge("r,u,rr", "-|>", $f$),
  edge("r,d,rr", "..|>", $g$),

  node((0,-1), $F(s)$, colspan: 2, <f>),
  edge("-|>", (3,0), corner: "-|"),

  node((0,+1), $G(s)$, <g>),
  edge("-|>"),
  node((1,+1), $H(s)$, <g>),
  edge("..|>", (3,0), corner: "-|"),

  node((3,0),
    text(white, $ plus.o $),
    inset: 2pt,
    fill: black,
  ),
  edge("-|>", "r"),

  node(enclose: (<f>, <g>),
    inset: 10pt,
    stroke: teal,
    fill: teal.transparentize(90%)
  ),
)