fig, ax = plt.subplots(figsize=(7, 7))
ax.axis('off')
boxes = [
(0.5, 0.92, 'START\nBasissatz + Geometrie', '#4393c3', 'white'),
(0.5, 0.76, 'Startkoeffizienten $\\mathbf{c}^{(0)}$\n(Hückel / Core-Hamiltonian)', '#92c5de', 'black'),
(0.5, 0.60, 'Dichtematrix $\\mathbf{P}^{(n)}$\n$P_{\\lambda\\sigma} = 2\\sum_m c_{\\lambda m}^* c_{\\sigma m}$', '#f4a582', 'black'),
(0.5, 0.44, 'Fock-Matrix $\\mathbf{F}^{(n)}(\\mathbf{P}^{(n)})$\n$F_{\\nu\\mu} = h_{\\nu\\mu} + \\sum P[2(\\nu\\mu|\\sigma\\lambda)-(\\nu\\lambda|\\sigma\\mu)]$', '#f4a582', 'black'),
(0.5, 0.28, 'Verallg. Eigenwertproblem\n$\\mathbf{F}\\mathbf{c} = \\mathbf{S}\\mathbf{c}\\boldsymbol{\\varepsilon}$', '#f4a582', 'black'),
(0.5, 0.12, 'KONVERGIERT\n$E_\\mathrm{HF}$, $\\varepsilon_m$, $\\mathbf{c}$', '#4dac26', 'white'),
]
for x, y, txt, col, tcol in boxes:
ax.text(x, y, txt, ha='center', va='center', fontsize=10,
color=tcol, fontweight='bold' if col in ['#4393c3','#4dac26'] else 'normal',
bbox=dict(boxstyle='round,pad=0.5', facecolor=col,
edgecolor='gray', lw=1.2),
transform=ax.transAxes)
# Pfeile
arrow_kw = dict(transform=ax.transAxes, lw=1.5,
arrowstyle='->', color='#555')
for y_start, y_end in [(0.86, 0.80), (0.71, 0.65),
(0.55, 0.49), (0.38, 0.33), (0.22, 0.17)]:
ax.annotate('', xy=(0.5, y_end), xytext=(0.5, y_start),
xycoords='axes fraction', textcoords='axes fraction',
arrowprops=dict(arrowstyle='->', color='#555', lw=1.8))
# Rückpfeil
ax.annotate('', xy=(0.85, 0.60), xytext=(0.85, 0.28),
xycoords='axes fraction', textcoords='axes fraction',
arrowprops=dict(arrowstyle='->', color='#d6604d',
lw=2, connectionstyle='arc3,rad=0.0'))
ax.text(0.93, 0.44, 'nicht\nkonvergiert', ha='center', va='center',
fontsize=9, color='#d6604d', transform=ax.transAxes)
ax.annotate('', xy=(0.5, 0.28+0.05), xytext=(0.85, 0.28+0.05),
xycoords='axes fraction', textcoords='axes fraction',
arrowprops=dict(arrowstyle='->', color='#d6604d', lw=2))
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
plt.tight_layout()
plt.show()