This uses (invisible - peripheries=0) clusters and a few invisible edges.
Pretty repeatable & better(?) that expected.
But if you have more than 4 subgraphs, I suggest a major re-think.
digraph {
peripheries=0
subgraph clustergroup_000 {
"main_idea_title" [width=5.555555555555555, height=1.0416666666666665, shape=rectangle, label="MAIN IDEA", style="filled", fillcolor="#baee7b"]
"main_idea_text" [width=3.472222222222222, height=3.472222222222222, shape=rectangle, label="MAIN DESCRIPTION", style="filled", fillcolor="#baee7b"]
"main_idea_title" -> "main_idea_text" [style=invis]
}
subgraph clusterwrap0 {
subgraph clustergroup_0 {
"sub_idea_0_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
"sub_idea_0_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
"sub_idea_0.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
"sub_idea_0.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
"sub_idea_0.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
"sub_idea_0.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
"sub_idea_0.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
"sub_idea_0.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
"sub_idea_0.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
"sub_idea_0.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
"sub_idea_0.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
"sub_idea_0.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
"sub_idea_0.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
"sub_idea_0.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
"sub_idea_0_title" -> "sub_idea_0_text" [penwidth=5]
"sub_idea_0_title" -> "sub_idea_0.0_title" [penwidth=5]
"sub_idea_0_title" -> "sub_idea_0.1_title" [penwidth=5]
"sub_idea_0.0_title" -> "sub_idea_0.0_text" [penwidth=5]
"sub_idea_0.0_title" -> "sub_idea_0.0.0_title" [penwidth=5]
"sub_idea_0.0_title" -> "sub_idea_0.0.1_title" [penwidth=5]
"sub_idea_0.0.0_title" -> "sub_idea_0.0.0_text" [penwidth=5]
"sub_idea_0.0.1_title" -> "sub_idea_0.0.1_text" [penwidth=5]
"sub_idea_0.1_title" -> "sub_idea_0.1_text" [penwidth=5]
"sub_idea_0.1_title" -> "sub_idea_0.1.0_title" [penwidth=5]
"sub_idea_0.1_title" -> "sub_idea_0.1.1_title" [penwidth=5]
"sub_idea_0.1.0_title" -> "sub_idea_0.1.0_text" [penwidth=5]
"sub_idea_0.1.1_title" -> "sub_idea_0.1.1_text" [penwidth=5]
}
subgraph clustergroup_1 {
"sub_idea_1_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
"sub_idea_1_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
"sub_idea_1.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
"sub_idea_1.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
"sub_idea_1.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
"sub_idea_1.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
"sub_idea_1.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7bc6ee"]
"sub_idea_1.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7bc6ee"]
"sub_idea_1.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#817bee"]
"sub_idea_1.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#817bee"]
"sub_idea_1.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#987bee"]
"sub_idea_1.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#987bee"]
"sub_idea_1.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#c67bee"]
"sub_idea_1.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#c67bee"]
"sub_idea_1_title" -> "sub_idea_1_text" [penwidth=5]
"sub_idea_1_title" -> "sub_idea_1.0_title" [penwidth=5]
"sub_idea_1_title" -> "sub_idea_1.1_title" [penwidth=5]
"sub_idea_1.0_title" -> "sub_idea_1.0_text" [penwidth=5]
"sub_idea_1.0_title" -> "sub_idea_1.0.0_title" [penwidth=5]
"sub_idea_1.0_title" -> "sub_idea_1.0.1_title" [penwidth=5]
"sub_idea_1.0.0_title" -> "sub_idea_1.0.0_text" [penwidth=5]
"sub_idea_1.0.1_title" -> "sub_idea_1.0.1_text" [penwidth=5]
"sub_idea_1.1_title" -> "sub_idea_1.1_text" [penwidth=5]
"sub_idea_1.1_title" -> "sub_idea_1.1.0_title" [penwidth=5]
"sub_idea_1.1_title" -> "sub_idea_1.1.1_title" [penwidth=5]
"sub_idea_1.1.0_title" -> "sub_idea_1.1.0_text" [penwidth=5]
"sub_idea_1.1.1_title" -> "sub_idea_1.1.1_text" [penwidth=5]
}
}
subgraph clusterwrap1 {
subgraph clustergroup_2 {
"sub_idea_2_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#dd7bee"]
"sub_idea_2_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#dd7bee"]
"sub_idea_2.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#ee7baf"]
"sub_idea_2.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#ee7baf"]
"sub_idea_2.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#ee7b98"]
"sub_idea_2.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#ee7b98"]
"sub_idea_2.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#baee7b"]
"sub_idea_2.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#baee7b"]
"sub_idea_2.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
"sub_idea_2.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#7beee8"]
"sub_idea_2.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
"sub_idea_2.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#af7bee"]
"sub_idea_2.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
"sub_idea_2_title" -> "sub_idea_2_text" [penwidth=5]
"sub_idea_2_title" -> "sub_idea_2.0_title" [penwidth=5]
"sub_idea_2_title" -> "sub_idea_2.1_title" [penwidth=5]
"sub_idea_2.0_title" -> "sub_idea_2.0_text" [penwidth=5]
"sub_idea_2.0_title" -> "sub_idea_2.0.0_title" [penwidth=5]
"sub_idea_2.0_title" -> "sub_idea_2.0.1_title" [penwidth=5]
"sub_idea_2.0.0_title" -> "sub_idea_2.0.0_text" [penwidth=5]
"sub_idea_2.0.1_title" -> "sub_idea_2.0.1_text" [penwidth=5]
"sub_idea_2.1_title" -> "sub_idea_2.1_text" [penwidth=5]
"sub_idea_2.1_title" -> "sub_idea_2.1.0_title" [penwidth=5]
"sub_idea_2.1_title" -> "sub_idea_2.1.1_title" [penwidth=5]
"sub_idea_2.1.0_title" -> "sub_idea_2.1.0_text" [penwidth=5]
"sub_idea_2.1.1_title" -> "sub_idea_2.1.1_text" [penwidth=5]
}
subgraph clustergroup_3 {
"sub_idea_2.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#ee7b81"]
"sub_idea_3_title" [width=4.444444444444445, height=0.8333333333333333, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
"sub_idea_3_text" [width=2.7777777777777777, height=2.7777777777777777, shape=rectangle, label="", style="filled", fillcolor="#e8ee7b"]
"sub_idea_3.0_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
"sub_idea_3.0_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#d1ee7b"]
"sub_idea_3.0.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
"sub_idea_3.0.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#a3ee7b"]
"sub_idea_3.0.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
"sub_idea_3.0.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#8cee7b"]
"sub_idea_3.1_title" [width=3.888888888888889, height=0.7291666666666666, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
"sub_idea_3.1_text" [width=2.4305555555555554, height=2.4305555555555554, shape=rectangle, label="", style="filled", fillcolor="#7beeba"]
"sub_idea_3.1.0_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
"sub_idea_3.1.0_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7beed1"]
"sub_idea_3.1.1_title" [width=2.7777777777777777, height=0.5208333333333333, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
"sub_idea_3.1.1_text" [width=1.736111111111111, height=1.736111111111111, shape=rectangle, label="", style="filled", fillcolor="#7bddee"]
"sub_idea_3_title" -> "sub_idea_3_text" [penwidth=5]
"sub_idea_3_title" -> "sub_idea_3.0_title" [penwidth=5]
"sub_idea_3_title" -> "sub_idea_3.1_title" [penwidth=5]
"sub_idea_3.0_title" -> "sub_idea_3.0_text" [penwidth=5]
"sub_idea_3.0_title" -> "sub_idea_3.0.0_title" [penwidth=5]
"sub_idea_3.0_title" -> "sub_idea_3.0.1_title" [penwidth=5]
"sub_idea_3.0.0_title" -> "sub_idea_3.0.0_text" [penwidth=5]
"sub_idea_3.0.1_title" -> "sub_idea_3.0.1_text" [penwidth=5]
"sub_idea_3.1_title" -> "sub_idea_3.1_text" [penwidth=5]
"sub_idea_3.1_title" -> "sub_idea_3.1.0_title" [penwidth=5]
"sub_idea_3.1_title" -> "sub_idea_3.1.1_title" [penwidth=5]
"sub_idea_3.1.0_title" -> "sub_idea_3.1.0_text" [penwidth=5]
"sub_idea_3.1.1_title" -> "sub_idea_3.1.1_text" [penwidth=5]
}
}
// 0 and 1 are now over/under
// 2 and 3 are also over & under
"sub_idea_0_title" -> "main_idea_title" [penwidth=5]
"sub_idea_2_title" -> "main_idea_title" [penwidth=5]
// minlen is not specific to these graphs, should work for most inputs
"sub_idea_0_title" -> "sub_idea_1_title" [minlen=8 style=invis]
"sub_idea_2_title" -> "sub_idea_3_title" [minlen=8 style=invis]
"main_idea_title" -> "sub_idea_1_title" [penwidth=5]
"main_idea_title" -> "sub_idea_3_title" [penwidth=5]
// next two lines are optional
// "main_idea_text" -> "sub_idea_1_title" [style=invis]
// "main_idea_text" -> "sub_idea_3_title" [style=invis]
}
Giving: