Beim Staffelfinale klingt der Abspann anders

Und genau daran fiel er durch. Der Tonabgleich lebt davon, dass der
Abspann in jeder Folge derselbe ist; beim Finale ist er es oft nicht —
anderer Schluss, andere Musik, kein Treffer. In jeder Staffel fehlte
deshalb genau eine Marke, immer die letzte, und wer dort weitersah, sah
keinen Knopf. Das war der ganze Fehler. Der Spieler war nie schuld, und
meine Schranken-Vermutung von eben war falsch.

Was der Ton nicht findet, sucht jetzt das Bild — derselbe Weg wie bei
einem Film: dunkel werden und bis zum Ende durchhalten. Das Verfahren
lag fertig in `FilmAsync` und war nur dort eingebaut; es steht jetzt für
sich und wird von beiden benutzt. Nur für die Lücken: bei einer Staffel
ohne fehlende Marke läuft der Abtaster gar nicht.

**Drei Punkte heissen „mehr davon", nicht „tu etwas".** Bei einer Folge
taten sie etwas — wegräumen aus „Fortsetzen", ohne Rückfrage. Jeder, der
sie sah, hat ein Menü erwartet, draufgetippt, und dann baute die Seite
sich neu auf und die Punkte waren weg. Jetzt ein Kreuz, und eine Zeile,
die sagt, was geschehen ist.

Und die Markenanzeige nennt die Zeiten, nicht nur die Namen: dass eine
Marke da ist, sagt noch nicht, dass sie an der richtigen Stelle steht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-13 20:49:50 +02:00
co-authored by Claude Opus 5
parent 74643b8242
commit 1340176bf0
2 changed files with 97 additions and 21 deletions
+20 -4
View File
@@ -455,9 +455,20 @@ export function detailseite(art: Art, id: string, zurueck: () => void): HTMLElem
stand?.favourite ? 'Aus Favoriten nehmen' : 'Zu Favoriten',
async () => { await favorit(eintrag.id, !stand?.favourite); await laden(); }));
// **Drei Punkte heissen „mehr davon", nicht „tu etwas".**
//
// Hier taten sie etwas: wegräumen aus „Fortsetzen", ohne Rückfrage.
// Jeder, der sie sah, hat ein Menü erwartet, draufgetippt — und dann
// baute die Seite sich neu auf und die Punkte waren weg. Von aussen
// sah das aus wie ein Fehler, und ohne Rückmeldung war nicht einmal
// zu erkennen, was passiert war.
if ((stand?.positionSeconds ?? 0) > 0 && !stand?.dismissed) {
reihe.appendChild(rundKnopf('mehr', false, 'Aus „Fortsetzen" entfernen',
async () => { await weglegen(eintrag.id); await laden(); }));
reihe.appendChild(rundKnopf('schliessen', false, 'Aus „Fortsetzen" entfernen',
async () => {
await weglegen(eintrag.id);
hinweisZeigen('Aus „Fortsetzen" entfernt.');
await laden();
}));
}
// **Diesen einen Titel neu holen, nicht den ganzen Bestand.**
@@ -1094,9 +1105,14 @@ export function detailseite(art: Art, id: string, zurueck: () => void): HTMLElem
function markenwort(marken: Folge['markers']): string {
if (!istAdmin()) return '';
if (!marken || marken.length === 0) return 'keine Marken';
// **Mit Zeiten, nicht bloss mit Namen.** Dass eine Marke da ist, sagt
// noch nicht, dass sie an der richtigen Stelle steht — und genau das
// ist der Unterschied zwischen „die Erkennung hat nichts gefunden"
// und „der Knopf kommt zur falschen Minute".
return marken
.map(m => m.kind === 'intro' ? 'Vorspann' : 'Abspann')
.join(' + ');
.map(m => `${m.kind === 'intro' ? 'Vorspann' : 'Abspann'} `
+ `${dauer(m.startSeconds)}–${dauer(m.endSeconds)}`)
.join(' · ');
}
function folgenblock(folge: Folge): HTMLElement {