digraph G {
  subgraph clusterNotcurses {
    labeljust="l";
    label = "Notcurses context (one per terminal)"
    style = filled;
    color = lightgrey;
    compound = "true"
    subgraph clusterRedner {
      label="Rendering solves for the current frame. This\nframe is compared to the current state.\nDifferent cells are written to the terminal,\nand the current state is updated."
      style="filled"
      color="cadetblue:purple"
      LastFrame [ shape=rectangle label="Last rendered frame" style=filled color=yellow ]
      RenderArea [ shape=rectangle label="Render area\n(via stdout)" style=filled color=yellow ]
      labelloc="b"
    }
    subgraph clusterZaxis {
      label="Stacks represent distinct collections of planes. Only the main stack gets rendered."
      style=filled;
      color="cadetblue:purple";
      stackMain [ label="Main stack.\nContains standard plane.\nGets rendered." style="filled" fillcolor=darkseagreen1 shape=invtrapezium ]
      stack1 [ label="Extracted\nstack 1" style="filled" fillcolor=darkolivegreen2 shape=invtrapezium ]
      stack2 [ label="Extracted\nstack 2" style="filled" fillcolor=darkolivegreen2 shape=invtrapezium ]
      { rank=same; stackMain stack1 stack2 }
    }
    stackMain -> LastFrame
    LastFrame -> RenderArea
    subgraph clusterPlanes {
      labelloc="b"
      label="The planes of a stack are related two ways:\n1. Totally ordered along the stack's z-axis.\n2. Via a rooted n-ary tree of binding."
      style=filled;
      color="cadetblue:purple";
      planeStd [ label="Standard plane" shape=rectangle color="lightgreen" style=filled ]
      plane1 [ label="Plane 1" shape=rectangle color="green" style=filled ]
      plane2 [ label="Plane 2" shape=rectangle color="green" style=filled ]
      plane3 [ label="Plane 3" shape=rectangle color="green" style=filled ]
      plane4 [ label="Plane 4" shape=rectangle color="green" style=filled ]
      plane5 [ label="Plane 5" shape=rectangle color="green" style=filled ]
      plane6 [ label="Plane 6" shape=rectangle color="green" style=filled ]
      stackMain -> planeStd
      planeStd -> plane1
      planeStd -> plane2
      plane1 -> plane3
      stack1 -> plane4
      plane4 -> plane5
      stack2 -> plane6
    }
    subgraph clusterMatrices {
      labelloc="b"
      label="A rectangular array of Cells, with one Cell per coordinate of the associated plane, backs each plane.\nThis is the plane's cell matrix. An EGCPool backs each cell matrix; they contain nul-terminated\nUTF8-encoded Extended Grapheme Clusters of arbitrary length."
      style=filled;
      color="cadetblue:purple";
      cMatrix0 [ label="Cellmatrix 0" shape=rectangle style=filled ]
      cMatrix1 [ label="Cellmatrix 1" shape=rectangle style=filled ]
      cMatrix2 [ label="Cellmatrix 2" shape=rectangle style=filled ]
      cMatrix3 [ label="Cellmatrix 3" shape=rectangle style=filled ]
      plane1 -> cMatrix1
      plane2 -> cMatrix2
      plane3 -> cMatrix3
      LastFrame -> cMatrix0
      egcPool0 [ label="EGCPool 0" shape=rectangle style=filled ]
      egcPool1 [ label="EGCPool 1" shape=rectangle style=filled ]
      egcPool2 [ label="EGCPool 2" shape=rectangle style=filled ]
      egcPool3 [ label="EGCPool 3" shape=rectangle style=filled ]
      cMatrix0 -> egcPool0
      cMatrix1 -> egcPool1
      cMatrix2 -> egcPool2
      cMatrix3 -> egcPool3
    }
  }
}
