Theme modern lief nicht: formWorkflow fehlte

Die Seite baute nicht mehr auf, weder headless noch im Browser. Der Grund
stand im Statusfeld, aber meine Proben haben zu frueh gemessen und ihn nie
zu sehen bekommen: "Fehler beim Laden: formWorkflow is not defined".

Meine Ersetzung fuer Slide 3 lief von "function visWechseln" bis zum
Kommentar "Slide 4". Genau dazwischen lagen die Formen fuer Workflow,
Trichter und Megafon. Sie sind wieder da, diesmal als Einfuegung vor dem
Kommentar statt als Bereichsersetzung.

Das war derselbe Fehlertyp zum dritten Mal in diesem Projekt: ueber einen
Bereich zwischen zwei Ankern loeschen, zwischen denen mehr steht als
gedacht. Ich ersetze ab jetzt nur noch ueber den genauen Textabschnitt und
fuege sonst ein.

Zur Diagnose: node --check faellt hier nicht auf, weil eine fehlende
Funktion erst zur Laufzeit auffliegt. Was es gefunden haette, ist eine
Probe, die lange genug wartet und den Statustext ausliest -- die Seite
schreibt ihren Ladefehler dort hinein.

Slide 3 hat mehr Luft bekommen: Karte 580 statt 500 hoch, Zeilenabstand 78
statt 66, Innenrand 52 statt 48.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
dejanandClaude Opus 5 committed 2026-08-13 19:20:15 +02:00
1 parent 43a4a394f2
commit af6afe8e6e
1 file changed
+45 -9
+45 -9
View File
@@ -1205,7 +1205,7 @@
eyebrow: "Der Wechsel",
head: 'Und wechseln?<br><span class="a">Kannst du vergessen.</span>',
body: "Da hängen Jahre an Stammdaten, Aufträgen und Buchhaltung drin. Ein Wechsel führt ins Chaos.",
vis: "ersetzen", visW: 896, visLeft: 92, visBottom: 240,
vis: "ersetzen", visW: 896, visLeft: 92, visBottom: 195,
},
{
key: "mehr", type: "feature",
@@ -1948,7 +1948,7 @@
Ein Betrieb, der ueber einen Wechsel nachdenkt, versteht eine
abgebrochene Uebernahme sofort und braucht dafuer kein Sinnbild. */
function visWechseln() {
const W = 896, H = 500, P = 48;
const W = 896, H = 580, P = 52;
const zeilen = [
{ t: "Stammdaten", s: "übertragen", art: "ok" },
{ t: "Aufträge", s: "1.284 Konflikte", art: "warn" },
@@ -1958,13 +1958,13 @@
let raus = chamferFlaeche(0, 0, W, H, KARTE);
raus += '<text x="' + P + '" y="66" font-family="Manrope, sans-serif" font-size="20" ' +
raus += '<text x="' + P + '" y="74" font-family="Manrope, sans-serif" font-size="20" ' +
'font-weight="700" letter-spacing="0.16em" fill="' + TEXT3 + '">MIGRATION</text>';
raus += '<text x="' + P + '" y="118" font-family="Manrope, sans-serif" font-size="38" ' +
raus += '<text x="' + P + '" y="134" font-family="Manrope, sans-serif" font-size="38" ' +
'font-weight="800" letter-spacing="-0.025em" fill="' + TINTE + '">Alles mitnehmen</text>';
// Fortschritt: er bleibt stehen, das ist die Aussage.
const BY = 176, BW = W - 2 * P;
const BY = 200, BW = W - 2 * P;
raus += '<text x="' + P + '" y="' + (BY - 14) + '" font-family="Manrope, sans-serif" ' +
'font-size="24" font-weight="600" fill="' + TEXT2 + '">Fortschritt</text>';
raus += '<text x="' + (W - P) + '" y="' + (BY - 14) + '" text-anchor="end" ' +
@@ -1976,7 +1976,7 @@
GELB + '"/>';
zeilen.forEach((z, i) => {
const y = 262 + i * 66, f = ton[z.art];
const y = 302 + i * 78, f = ton[z.art];
raus += '<circle cx="' + (P + 17) + '" cy="' + (y - 9) + '" r="17" fill="' + f[0] + '"/>';
const cx = P + 17, cy = y - 9;
if (z.art === "ok") {
@@ -1997,16 +1997,16 @@
'font-family="Manrope, sans-serif" font-size="26" font-weight="600" fill="' +
(z.art === "fehler" ? ROT : TEXT2) + '">' + z.s + '</text>';
if (i < zeilen.length - 1) {
raus += '<rect x="' + P + '" y="' + (y + 24) + '" width="' + BW + '" height="1" fill="' +
raus += '<rect x="' + P + '" y="' + (y + 30) + '" width="' + BW + '" height="1" fill="' +
LINIE + '"/>';
}
});
/* Noahs eigenes Argument als Fusszeile: kein Chef faehrt seinen Betrieb
ein halbes Jahr an die Wand. */
raus += '<text x="' + P + '" y="' + (H - 44) + '" font-family="Manrope, sans-serif" ' +
raus += '<text x="' + P + '" y="' + (H - 54) + '" font-family="Manrope, sans-serif" ' +
'font-size="24" font-weight="600" fill="' + TEXT3 + '">Geschätzte Dauer</text>';
raus += '<text x="' + (W - P) + '" y="' + (H - 44) + '" text-anchor="end" ' +
raus += '<text x="' + (W - P) + '" y="' + (H - 54) + '" text-anchor="end" ' +
'font-family="Manrope, sans-serif" font-size="24" font-weight="800" fill="' + TINTE +
'">ein halbes Jahr</text>';
@@ -2014,6 +2014,42 @@
'" xmlns="http://www.w3.org/2000/svg">' + raus + '</svg>';
}
/* ─── Formen fuer die zugespitzte Fassung ───────────────────────────────
Workflow-Engine, Vertrieb und Marketing brauchen eigene Zeichen: die
bestehenden zeigen Dinge, die ein Branchenprogramm schon kann.
Jede Form nimmt einen Massstab entgegen und taugt damit als kleines
Listenzeichen und als grosser Satellit, sonst braeuchte es sechs
Funktionen statt drei. */
function formWorkflow(cx, cy, s) {
const r = 7 * s, dx = 20 * s, dy = 14 * s;
return kringel(cx - dx, cy, r) + kringel(cx + dx, cy - dy, r) + kringel(cx + dx, cy + dy, r) +
strich(cx - dx + r, cy - r * 0.3, cx + dx - r, cy - dy + r * 0.5) +
strich(cx - dx + r, cy + r * 0.3, cx + dx - r, cy + dy - r * 0.5);
}
function formTrichter(cx, cy, s) {
const b = 20 * s, h = 15 * s;
return "M" + n1(cx - b) + "," + n1(cy - h) + "H" + n1(cx + b) +
"L" + n1(cx + b * 0.26) + "," + n1(cy + h * 0.2) +
"V" + n1(cy + h) + "L" + n1(cx - b * 0.26) + "," + n1(cy + h * 0.55) +
"V" + n1(cy + h * 0.2) + "Z";
}
function formMegafon(cx, cy, s) {
const b = 18 * s, h = 15 * s;
return "M" + n1(cx - b) + "," + n1(cy - h * 0.34) +
"L" + n1(cx + b * 0.28) + "," + n1(cy - h) +
"V" + n1(cy + h) + "L" + n1(cx - b) + "," + n1(cy + h * 0.34) + "Z" +
strich(cx + b * 0.56, cy - h * 0.46, cx + b * 0.94, cy - h * 0.72) +
strich(cx + b * 0.62, cy, cx + b * 1.02, cy) +
strich(cx + b * 0.56, cy + h * 0.46, cx + b * 0.94, cy + h * 0.72);
}
const glyWorkflow = (cx, cy) => formWorkflow(cx, cy, 0.95);
const glyTrichter = (cx, cy) => formTrichter(cx, cy, 1.05);
const glyMegafon = (cx, cy) => formMegafon(cx, cy, 1.05);
/* ─── Slide 4: wir wollten mehr ──────────────────────────────────────────
Die alte Fassung zeigte vier Kaesten mit "fehlt". Das ist der Mangel, die
Slide handelt aber vom Wunsch. Also ein Blatt mit einer Liste.