<!-- Tai Chi — https://tai-chi.app/de/method -->

# Tai Chi — Methodik

**Die einzige Quelle der Wahrheit für dieses Projekt.** Marke, Designsystem,
Evidenzbasis, Verordnungslogik, Inhaltsrichtlinie und Sicherheitsrahmen stehen
alle hier. Wenn Code und dieses Dokument sich widersprechen, ist eines von
beiden ein Fehler — sag im PR, welches.

Status: lebendes Dokument · Letzte inhaltliche Überarbeitung: 2026-08-02

> Übersetzung des englischen Dokuments `docs/METHODOLOGY.md`, Abschnitt für
> Abschnitt und in derselben Reihenfolge. Diese Entsprechung ist tragend: die
> Überschriften-Ids von `/de/method` stammen positionsbezogen aus der englischen
> Datei, sodass `/method#42-joints` und `/de/method#42-joints` denselben
> Abschnitt bezeichnen. Diese Übersetzung hatte keine muttersprachliche
> Durchsicht; siehe §11.

---

## 1. Was das ist, und was es sich weigert zu sein

Tai Chi ist ein kostenloser, öffentlicher Tai-Chi-Begleiter ohne Anmeldung.
Du öffnest ihn, er weiß, welcher Tag ist, und er gibt dir eine Einheit, geformt
davon, wie sicher du auf den Beinen stehst, wie viel Zeit du hast und was du
trainieren willst.

**Er ist:**

- Ein *Planer und Timer*, um den Unterricht anderer Menschen herumgelegt.
- Eine *Rotationsmaschine*, deren Hauptaufgabe ist, dafür zu sorgen, dass morgen
  sich nicht wie heute anfühlt.
- Ein ehrlicher Vermittler: jedes Video ist genannt, zurückverlinkt und
  vollständig auf der Bibliotheksseite aufgeführt.

**Er ist bewusst nicht:**

- Ein Lehrer. Er korrigiert deine Haltung nicht, er kann dich nicht sehen, und er
  wird nie behaupten, eine Bewegung sei „richtig“.
- Ein Medizinprodukt oder eine klinische Intervention. Er fasst veröffentlichte
  Evidenz zusammen, um zu erklären, *warum die Einheiten so geformt sind*; er
  diagnostiziert nicht, behandelt nicht und passt sich keiner Erkrankung an.
- Ein kontobasiertes Produkt. Keine Anmeldung, keine E-Mail, kein serverseitiges
  Profil, keine Analytik. Alles liegt in `localStorage` auf einem Gerät.

### 1.1 Warum keine Anmeldung

Die Zielgruppe ist überproportional über 65. Jede Anmeldeschranke ist ein
Absprung, und ein Wohlfühlwerkzeug, das eine 78-Jährige bittet, eine E-Mail zu
bestätigen, ist ein Werkzeug, das sie einmal öffnet. Die Kosten dieser
Entscheidung sind real und wir stehen in der Oberfläche offen dazu: keine
Synchronisation zwischen Geräten, und das Löschen der Websitedaten löscht die
Serie.

---

## 2. Marke

### 2.1 Der Name

**Tai Chi** (太極, *tài jí*) benennt die Praxis selbst statt einer Stimmung um
sie herum. Er wurde den Alternativen vorgezogen, weil:

- Er sagt genau, wofür die App da ist, mit den Wörtern, die Menschen ohnehin
  verwenden, wenn sie danach suchen.
- Er ist konkret. „Flow“, „Balance“, „Serenity“ sind Adjektive, die so tun, als
  wären sie Produkte.
- Er trägt keine Behauptung. Die App plant den Unterricht anderer Menschen; ein
  erfundener Markenname würde eine eigene Methode andeuten, und es gibt keine.

### 2.2 Die Stimme

Schlicht, ruhig und leicht trocken. Kurze Sätze. Nie atemlos, nie mystisch, nie
ein Coach, der Ermutigung brüllt.

| Wir schreiben                                          | Wir schreiben nicht                          |
| ------------------------------------------------------ | -------------------------------------------- |
| „Hier ist nichts zu erreichen. Steh einfach.“           | „Umarme deine innere Stille!“                |
| „Ziehen ist in Ordnung; scharfer Schmerz nicht.“        | „Hör auf deinen Körper 🙏“                    |
| „Ruhe ist Training, keine Lücke darin.“                 | „Reiß deine Serie nicht ab!“                 |
| „Dieses läuft hier nicht.“                              | „Hoppla! Etwas ist schiefgelaufen.“          |

Schuld wird nie als Motivation eingesetzt. Es gibt keinen Zustand „du hast 3 Tage
verpasst“, und eine abgerissene Serie wird kommentarlos gemeldet.

### 2.3 Das Zeichen

Zwei verschränkte Bögen — einer steigt, einer sinkt, mit gemeinsamer Mitte — die
den Weg nachzeichnen, den die Hände in den „Wolkenhänden“ nehmen. Es trägt den
Yin-Yang-Austausch, auf dem die Praxis beruht, ohne das Taijitu zu verwenden, das
visuell erschöpft ist und wie ein Logo von 1997 wirkt. Eine Strichstärke,
24-Einheiten-Raster, lesbar in Favicon-Größe.

### 2.4 Farbe — tiefe Nacht und Mondlicht

Die App ist **standardmäßig dunkel**, und dunkel ist der entworfene Zustand, kein
Zugeständnis. Tai-Chi wird im Morgengrauen geübt, in einem dämmrigen Raum, oft
bevor das Licht angeht. Eine hellweiße Seite um sechs Uhr früh ist feindselig.
Der helle Modus existiert und ist vollständig, aber er ist dieselbe Marke am
Mittag, nicht eine andere.

Der Bildschirm ist **ein Nachthimmel mit einer einzigen Lichtquelle darin**.
Alles folgt daraus: der Mond steht fest oben rechts, die Glanzkanten der
Glasscheiben nehmen Licht von oben rechts an, und keine Fläche sendet eigene
Farbe aus — sie fangen das Mondlicht ein.

Alles ist `oklch`, sodass Helligkeitsrampen wahrnehmungsmäßig gleichmäßig sind
und sich die durchscheinenden Schichten vorhersagbar mischen.

| Rampe          | Rolle                                                  | Warum dieser Farbton                                                                                            |
| -------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
| **Nacht**      | Hintergrund und Struktur                               | Blauschwarz, nie neutrales Grau. Das leichte Blau ist, was den Akzent als *Licht* lesen lässt statt als Farbe      |
| **Mondlicht**  | Primär. Die einzige Lichtquelle, und der Akzent        | Blasses, entsättigtes Blau. Für die Abspieltaste, den Timer-Ring und den aktiven Zustand — und fast nichts sonst   |
| **Seladon**    | Die Praxisfarbe: Qigong, Aufwärmen, sanft              | Ein so weit zurückgenommenes Jade, dass es als glasiertes Porzellan im Mondlicht liest, nicht als „Wellness-Grün“  |
| **Lampenlicht**| Heute, Serien, mittlere Anstrengung                    | Der einzige warme Ton im normalen Gebrauch. Hart rationiert, damit er etwas bedeutet                               |
| **Glut**       | Kräftige Intensität, destruktive Aktionen              | Der einzige heiße Ton. Er erscheint auf vielleicht zwei Flächen in der ganzen App                                  |

**Farbe ist nie das einzige Signal.** Jeder Phasen-Chip verbindet Farbe mit einem
Label und einem Symbol; die Intensitätspunkte tragen ein textliches
`sr-only`-Äquivalent.

### 2.5 Schrift

Zwei Familien, nach dem Gegenstand gewählt und nicht nach der Mode.

- **Cormorant** (Display) — eine kalligrafische Renaissance-Antiqua mit
  pinselartiger Strichmodulation. Sie trägt die Tuschmalerei-Qualität der Praxis,
  ohne zu einer pastichehaften „orientalischen“ Schrift zu greifen, die zugleich
  hässlich und leicht beleidigend wäre. Nur in Displaygrößen: sie ist viel zu
  fein für Fließtext, und wir setzen darin nie welchen.
- **Inter** (alles Funktionale) — Oberfläche, Bedienelemente und vor allem der
  Timer. Große x-Höhe, neutral, und echte Tabellenziffern.

Tabellenziffern werden beim Timer und bei jedem Wert erzwungen, der sich an Ort
und Stelle ändert, damit die Ziffern beim Wechseln nicht zittern.

---

## 3. Designsystem

### 3.1 Token-Ebenen

Drei Ebenen, eine Abhängigkeitsrichtung. Komponenten konsumieren nur Ebene 3.

1. **Primitiv** — `--ch-moon-400`, `--ch-night-950`. Rohe Markenwerte. Nie von
   einer Komponente referenziert.
2. **Semantisch** — `--primary`, `--phase-form`, `--glass-blur`.
   Bedeutungstragend, themenschaltbar. Das ist die Ebene, die hell/dunkel
   tauscht.
3. **Komponente** — Tailwind-Utilities, erzeugt in `@theme inline`
   (`bg-phase-form`, `text-timer`, `rounded-3xl`).

Eine neue Farbe, die direkt in eine Komponente wandert, ist ein Review-Kommentar,
kein Patch.

### 3.2 Liquid Glass, spezifiziert

Eine Scheibe besteht aus vier gestapelten Signalen. Fehlt eines, sieht das aus
wie ein durchscheinendes Rechteck und nicht wie Glas.

1. **Brechung** — `backdrop-filter: blur() saturate() brightness()`. Die
   Sättigung ist es, die es verkauft; Unschärfe allein liest sich wie mattiertes
   Plastik. Im dunklen Build sind die Scheiben eher *rauchig* als mattiert: die
   Füllung fällt auf ~6 % und die Helligkeitsanhebung leistet die Arbeit.
2. **Körper** — eine durchscheinende Tönungsfüllung (`--glass-tint` /
   `--glass-fill`).
3. **Kanten** — eine helle Haarlinie oben (`inset 0 1px 0`) und eine dunkle
   Kontaktlinie unten. Das ist es, was Dicke andeutet.
4. **Glanzlicht** — ein diagonaler Glanzstreifen über `::before`, dazu ein
   Rauschkorn von 3,5 % über `::after`. Das Korn existiert, um den
   Plastikeindruck großer weichgezeichneter Flächen zu besiegen.

Bereitgestellt als `@utility glass`, `glass-faint`, `glass-strong`,
`glass-specular`, `glass-grain`, `glass-press`, und konsumiert über eine einzige
`<Glass>`-Primitive mit drei Achsen: `depth`, `tone`, `radius`.

**Regel: bastle nie ein `backdrop-blur` an einer Komponente zusammen.** Nimm
`<Glass>`, oder ergänze eine Variante.

Zwei Dinge machen das tragfähig statt dekorativ:

- **Der Nachthimmel.** Glas liest sich nur als Glas, wenn dahinter etwas ist, das
  gebrochen zu werden lohnt. Ein fester Mond plus zwei langsame, kalte
  Bodenfelder liegen bei `-z-10` hinter allem. Reines CSS, kein Canvas, kein rAF.
  Ein Schleier darüber garantiert den Textkontrast, wo immer ein Feld gerade
  landet — der Himmel ist Dekoration, und Text darf nie von ihm abhängen.
- **Der `@supports`-Rückfall.** Wo `backdrop-filter` nicht unterstützt oder
  abgeschaltet ist, springen die Füllungen auf 88–98 % Deckkraft. Textkontrast
  hängt nie davon ab, dass die Unschärfe greift.

### 3.3 Bewegung

| Regel                                        | Grund                                                                                                     |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Nur zwei Easings, beide eigens gebaut        | `--ease-glass` fürs Material, `--ease-settle` für Ankünfte. Mehr als zwei liest sich als Inkonsistenz.        |
| Nichts fährt von der Seite ein               | Periphere Bewegung zieht das Auge und bricht eine stehende Haltung. Hinweise blenden an Ort und Stelle über. |
| Umgebungsschleifen dauern 28–44 s            | Langsam genug, um unbemerkt zu bleiben; schneller wird daraus ein Metronom, gegen das man ankämpft.           |
| `prefers-reduced-motion` beendet das Driften | …behält aber Deckkraft- und Farbübergänge, denn die tragen den Zustand der Einheit.                           |

### 3.4 Barrierefreiheits-Zusagen

- Berührziele: 44 px Untergrenze, 48 px für die Transportleiste, 64 px fürs
  Abspielen.
- Jedes Bedienelement hat ein echtes `aria-label`; der Timer-Ring ist
  `aria-hidden` mit einer groben `sr-only`-Live-Region, damit er nicht jede
  Sekunde angesagt wird.
- `role="radiogroup"` für die Einrichtungsoptionen, damit Pfeiltasten und
  Positionsansagen funktionieren.
- Sprunglink, sichtbarer Fokusring, `aria-current` auf der Navigation und dem
  aktiven Block.
- **Kein `maximumScale`.** Diese App richtet sich an Menschen über 65; Zoom ist
  nicht optional.
- Untertitel standardmäßig an im Player — ein großer Teil der Bibliothek ist
  still, akzentgefärbt oder auf Mandarin, und die zuschauende Person steht quer
  durch den Raum.

### 3.5 Responsive Architektur

Der erste Build brach unterhalb von ~400 px, was für eine App inakzeptabel ist,
deren Nutzer sie am ehesten auf einem an eine Lampe gelehnten Telefon öffnen. Die
Regeln jetzt:

- **Die Navigation wandert, sie schrumpft nicht.** Unterhalb von `md` trägt die
  Kopfzeile nur das Markenzeichen und zwei Bedienelemente; die vier Navigationen
  werden zu einer festen **gläsernen Tab-Leiste unten**, mit Rücksicht auf die
  sicheren Bereiche und mit Symbolen *und* Beschriftungen. Reine Symbolleisten
  sind für die Altersgruppe, für die das gebaut ist, unlesbar.
- **`overflow-x: hidden` auf `html` und `body`, und `min-width: 0` auf jedem
  Element.** Nichts ist je breiter als das Viewport; wenn doch, ist das ein
  Fehler — aber ein Fehler, der nicht zu einer seitwärts scrollenden Seite werden
  darf.
- **Der Wochenstreifen muss sieben Zellen bei 330 px fassen.** Die Textmarke
  entfällt unterhalb von `sm`; der Anfangsbuchstabe des Tages, das Datum und der
  Farbpunkt überleben. Die Zellen bleiben unabhängig davon ≥44 px hoch — es ist
  das meistgetippte Bedienelement der App.
- **Sichere Bereiche überall**: `env(safe-area-inset-*)` an Kopfzeile, Tab-Leiste
  und Einstellungsblatt.
- **Der Timer wird gegen seinen Ring dimensioniert**, nicht gegen das Viewport.
  Ein `vw`-getriebenes `clamp` lief auf breiten Bildschirmen aus dem Ring heraus.
- **`font-size: max(16px, 1em)` auf Bedienelementen**, damit iOS die Seite nie
  zoomt.

### 3.6 Internationalisierung

Die Sprache wird beim ersten Besuch **automatisch aus dem Browser erkannt** und
danach gemerkt.

1. `navigator.languages` lesen — die eigene, geordnete Präferenzliste des Nutzers
   — und den ersten unterstützten Eintrag nehmen. Wessen Liste `[ca, es, en]`
   lautet, bekommt Spanisch, nicht Englisch.
2. Nur nach der Primär-Subtag vergleichen: `es-419`, `es-MX` und `es` lösen alle
   auf Spanisch auf. Jede chinesische Variante löst auf Vereinfacht auf —
   `zh-Hant` ohne echte Übersetzung ins Traditionelle auszuliefern wäre schlimmer
   als Vereinfacht zu zeigen.
3. Eine ausdrückliche Wahl im Einstellungsblatt überschreibt die Erkennung und
   wird in `localStorage` geschrieben. „Meinem Browser folgen“ löscht sie.

Ausgelieferte Sprachen: **Englisch, Spanisch, Französisch, Deutsch,
Vereinfachtes Chinesisch.**

Zwei Architekturentscheidungen machen, dass das funktioniert statt halb zu
funktionieren:

- **Der Motor gibt Schlüssel aus, nie Prosa.** `prescribe` und `select` sind rein
  und sprachblind, geben also `Note = { key, values }` zurück, und die Oberfläche
  löst es auf. Begründung, Warnhinweise und Blocknotizen sind daher übersetzt,
  nicht bloß das Drumherum. Wo ein Wert *selbst* ein übersetzbarer Begriff ist
  („du hast *sanft* verlangt“), gibt der Motor ihn hinter einer NUL-Sentinel aus,
  und `translate` löst eine Ebene tief auf.
- **Englisch ist Quelle der Wahrheit und zugleich der Typ.** Jede andere Sprache
  ist als `Record<keyof typeof en, string>` typisiert, ein fehlender Schlüssel
  ist also ein Compile-Fehler. Ein zur Laufzeit fehlender Schlüssel fällt auf
  Englisch zurück, statt den rohen Schlüssel darzustellen.

Jede Routenfamilie ist übersetzt: das Drumherum, die Kursseiten, die dreizehn
`/for/*`-Essays, die Installationsanleitung und dieses Dokument.
`src/lib/i18n/coverage.ts` bleibt die Quelle der Wahrheit dafür, welche davon in
welcher Sprache *indexiert* werden dürfen, und eine Behauptung zurückzunehmen ist
eine Zeile pro Familie.

Zwei Kategorien sind bewusst unübersetzt, und eine ist bewusst auf ungewöhnliche
Weise übersetzt:

- **Unübersetzt: die Rangnamen** (Eigennamen, wie Kyū- und Dan-Grade) und die
  **Videotitel und Kanalnamen** (die Nennung muss mit der Quelle übereinstimmen).
- **Unübersetzt: die Überschriften-Anker der Methodik.** `/method#42-joints` löst
  in jeder Sprache auf, weil die Ids des gerenderten Dokuments positionsbezogen
  aus der englischen Datei stammen und nicht aus dem Slug der übersetzten
  Überschriften. Ein Anker ist ein Bezeichner, und Bezeichner werden nicht
  übersetzt. Der Preis: eine Übersetzung darf keinen Abschnitt hinzufügen,
  weglassen oder umstellen; der Test setzt das durch.
- **Vom Hersteller übersetzt, nicht von uns: die Menübeschriftungen von
  `/install`.** iOS, Chrome, Firefox und Samsung Internet lokalisieren ihre
  eigenen Menüs, also trägt `install.label.*` die Formulierung des jeweiligen
  Herstellers je Sprache. Übersetzt ein Hersteller eine Beschriftung nicht, ist
  die englische Zeichenkette der richtige Wert — die einzige Stelle in den
  Wörterbüchern, an der das gilt.

---

## 3A. Fortschritt

Fortschritt wird in **Tagen gemessen, an denen du da warst** — nie in Minuten,
nie in Intensität. Eine fünfminütige Einheit im Sitzen an einem schlechten Tag
zählt genau so viel wie eine fünfundvierzigminütige Form an einem guten.

Das ist keine Weichspülung. Volumen zu belohnen würde genau die Menschen, für die
diese App gebaut ist — älter, steifer, unsicherer — dazu drängen, zu viel zu tun,
und das ist der Hauptweg, auf dem eine Bewegungsintervention Schaden anrichtet.

**Ränge** (aus abgeschlossenen Tagen abgeleitet, nie gespeichert):

| Rang | | Tage | | Rang | | Tage |
| --- | --- | --- | --- | --- | --- | --- |
| Anfängergeist | 初心 | 0 | | Weißer Kranich | 白鶴 | 60 |
| Erstes Licht | 初光 | 1 | | Langer Strom | 長江 | 100 |
| Stilles Wasser | 靜水 | 5 | | Grundgestein | 磐石 | 180 |
| Grüner Bambus | 青竹 | 15 | | Alte Kiefer | 古松 | 365 |
| Ziehende Wolke | 行雲 | 30 | | | | |

**Meilensteine** werden verdient und nie verloren. Einer davon —
*Zurückgekommen* — ist ausdrücklich für die Rückkehr nach vierzehn Tagen Pause,
weil das schwerer ist als eine Serie und kein Gewohnheitstracker es je belohnt.

Anti-Muster, die dieser Bildschirm ablehnt:

- Kein Zustand „du hast deine Serie gerissen“, und nirgendwo Rot.
- Heute noch nicht geübt reißt die Serie **nicht**. Der Tag ist nicht vorbei.
- Kein Vergleich mit anderen Menschen. Hier ist sonst niemand.
- Alles wird **bei jedem Render aus dem Protokoll abgeleitet.** Eine Serie neben
  der Historie zu speichern, die sie erzeugt, ist der Weg, auf dem jeder
  Gewohnheitstracker am Ende eine Zahl anzeigt, der seine eigenen Daten
  widersprechen.

---

## 4. Die Evidenzbasis

Jede Behauptung unten trägt ihre Quelle und ihren **Prüfstatus**: `✅ geprüft`
heißt, die Zahlen wurden beim Schreiben gegen die Quelle kontrolliert;
`⚠️ ungeprüft` heißt, sie ist aus Allgemeinwissen formuliert und sollte bestätigt
werden, bevor sie in einer öffentlichen Marketingaussage verwendet wird.

### 4.1 Stürze

- **Tai-Chi senkt die Sturzrate um etwa 19 %** bei zu Hause lebenden älteren
  Menschen (RaR 0,81; 95-%-KI 0,67–0,99; 2.655 Teilnehmende über 7 Studien;
  Evidenz *niedriger Sicherheit*). Sherrington et al., Cochrane Database of
  Systematic Reviews, 2019. ✅ geprüft
  - Derselbe Review bewertet **Gleichgewichts- und Funktionstraining** höher: 24 %
    Reduktion, Evidenz hoher Sicherheit (RaR 0,76; 95-%-KI 0,70–0,81; 39
    Studien). Tai-Chi ist *gut*, nicht *am besten*, und die Sicherheit ist
    geringer.
- **In einer Hochrisikogruppe senkte ein therapeutisches Tai-Ji-Quan-Protokoll
  Stürze um 58 % gegenüber Dehnen und um 31 % gegenüber multimodalem Training**
  (IRR 0,42; 95-%-KI 0,31–0,56 vs. Dehnen). Li et al., *JAMA Internal Medicine*,
  2018, 670 Erwachsene ab 70 Jahren mit Sturzanamnese oder eingeschränkter
  Mobilität. ✅ geprüft

**Was wir daraus mitnehmen:** Gleichgewichtsarbeit ist der wertvollste Block für
ältere Übende, also verdoppelt der Schwerpunkt `balance` diese Phase in etwa, und
die Rahmung als Sturzprävention ist ehrlich statt überzogen.

### 4.2 Gelenke

- **Bei Kniearthrose erzielte Tai-Chi WOMAC-Verbesserungen vergleichbar mit
  Standard-Physiotherapie** nach 12 Wochen (Tai-Chi 167 Punkte, 95-%-KI 145–190;
  PT 143 Punkte, 95-%-KI 119–167; Unterschied zwischen den Gruppen nicht
  signifikant). Wang et al., *Annals of Internal Medicine*, 2016, n = 204.
  ✅ geprüft
- Dr. Paul Lams *Tai Chi for Arthritis* (Sun-Stil, hoher Stand, keine tiefe
  Kniebeugung) ist das am weitesten verbreitete Protokoll in diesem Feld und ist
  der Standardinhalt für `form` beim Schwerpunkt `joints` und im Band 75+.
  ⚠️ ungeprüft (Verbreitung des Programms, keine Wirksamkeitsbehauptung)

### 4.3 Dosis

- **WHO-Leitlinien 2020**, Erwachsene ab 65: 150–300 min aerobe Aktivität
  mittlerer Intensität pro Woche, Muskelkräftigung an ≥2 Tagen/Woche und
  **abwechslungsreiche multikomponente Aktivität mit Betonung auf funktionellem
  Gleichgewicht und Kraft, bei mittlerer oder höherer Intensität, an ≥3
  Tagen/Woche**. ✅ geprüft

**Was wir daraus mitnehmen:** der Standardplan sind 5 Tage/Woche, und die
Wochenplanung garantiert, dass der Gleichgewichtsschwerpunkt an mehreren nicht
aufeinanderfolgenden Tagen auftaucht. Wer weniger als 3 Tage wählt, wird nicht
gewarnt — Nörgeln widerspricht der Marke —, aber der Plan verteilt den
Schwerpunkt trotzdem, statt eine Qualität zu wiederholen.

### 4.4 Intensität

- Allgemeines Tai-Chi wird konventionell als **leicht bis mittel intensiv, um
  3,0 MET** eingestuft (Compendium of Physical Activities). ⚠️ ungeprüft — nur
  als Entwurfsheuristik behandelt, Nutzern nie als Zahl angezeigt.

Intensität ist im Tai-Chi *nicht Tempo*. Sie wird moduliert über:

1. **Standhöhe** — die mit Abstand dominierende Variable.
2. **Bewegungsumfang.**
3. **Einbeinzeit** — der Haupttreiber sowohl des Trainingseffekts als auch des
   Sturzrisikos.
4. **Kontinuität** — wie viel der Einheit ununterbrochene Bewegung ist.

Deshalb steht in der Oberfläche direkt unter der Intensitätssteuerung: „Im
Tai-Chi sind das Standhöhe und Einbeinzeit, nicht Tempo.“

### 4.5 Atem

- Die geführten Blöcke takten auf rund **5,5 Atemzüge pro Minute** (ein
  11-Sekunden-Zyklus), innerhalb des Resonanzfrequenzbereichs, der mit den
  deutlichsten kurzfristigen Effekten auf Herzratenvariabilität und
  Barorezeptorempfindlichkeit verbunden ist. ⚠️ ungeprüft — als *Vorschlag*
  dargestellt; nichts in der App verlangt, dass man ihn trifft.

### 4.6 Gewohnheit

- Der stärkste Hebel auf die Beibehaltung, den wir tatsächlich ziehen können, ist
  die nächste Einheit **sichtbar und bereits entschieden** zu machen. Daher ist
  der Wochenstreifen über allem angeheftet, und Ruhetage werden dargestellt statt
  weggelassen. ⚠️ ungeprüft als konkrete Effektstärke; als Produktprinzip
  behandelt.

### 4.7 Was die Evidenz *nicht* hergibt

Klar gesagt, damit niemand auf Sand baut:

- Es ist **nicht** gezeigt worden, dass Tai-Chi gut gemachtem konventionellem
  Gleichgewichtstraining bei Stürzen überlegen ist.
- Die Evidenzsicherheit speziell für Tai-Chi ist insgesamt **niedrig bis
  moderat**; die Studien sind klein, Verblindung ist unmöglich, und
  Aufmerksamkeitskontrollen sind uneinheitlich.
- Nichts hier stützt Behauptungen über Immunsystem, „Energie“, Organfunktion oder
  Krankheitsumkehr. Die App stellt sie nie auf, auch nicht in den Qigong-Texten,
  wo Video*titel* das manchmal tun. Wir geben Titel zur Nennung wörtlich wieder —
  das ist keine Zustimmung.

---

## 5. Das Verordnungsmodell

`src/lib/engine/prescribe.ts` — Profil rein, Bauplan raus. Hier wird kein Inhalt
ausgewählt, was die *Gestalt* der Einheit testbar macht, ohne die Videobibliothek
anzufassen.

### 5.1 Der fünfphasige Bogen

Jede Einheit folgt bei jeder Dauer demselben Bogen. Vertrautheit ist der Punkt:
das Ritual sollte sich nicht ändern, bloß weil der Inhalt es tut.

| Phase          | 中文 | Zweck                                                                           | Basisanteil |
| -------------- | ---- | ------------------------------------------------------------------------------- | ----------- |
| **Ankommen**   | 無極 | Ankommen. Den Atem setzen, die senkrechte Ausrichtung finden.                    | 8 %         |
| **Aufwärmen**  | 熱身 | Sprunggelenke, Hüften, Wirbelsäule, Schultern im schmerzfreien Umfang mobilisieren. | 17 %      |
| **Qigong**     | 氣功 | Wiederholbare, an den Atem gebundene Bewegung. Baut Koordination auf.            | 27 %        |
| **Form**       | 套路 | Durchgehende Choreografie. Der kognitive und haltungsbezogene Kern.              | 30 %        |
| **Gleichgewicht** | 平衡 | Bewusste Gewichtsverlagerung, kontrolliertes Schreiten, schmaler Stand.       | 13 %        |
| **Abschluss**  | 收功 | Herunterfahren. Den Atem verlangsamen, in den Raum zurückkehren.                 | 5 %         |

**Ankommen und Abschluss sind immer da und werden immer von der App gesprochen,
nicht von einem Video.** Drei Gründe: niemand veröffentlicht ein gutes
zweiminütiges Ausklingen; ein festes Öffnen und Schließen ist der stärkste
verfügbare Gewohnheitsanker; und es heißt, dass eine Einheit noch funktioniert,
wenn ein Video zurückgezogen wird oder die Verbindung abbricht.

### 5.2 Neugewichtung durch den Schwerpunkt

Der Schwerpunkt multipliziert die Basisanteile, dann wird alles renormiert — ein
Schwerpunkt kann eine Phase also betonen, sie aber nie durch Arithmetik löschen.

| Schwerpunkt     | Betonung                                                    |
| --------------- | ----------------------------------------------------------- |
| **Gleichgewicht** | Gleichgewicht ×2,0; Aufwärmen ×1,1; Form/Qigong ×0,85     |
| **Gelenke**     | Aufwärmen ×1,55; Qigong ×1,2; Form ×0,8                     |
| **Ruhe**        | Ankommen ×2,2; Abschluss ×2,0; Qigong ×1,2; Form ×0,7       |
| **Kraft**       | Gleichgewicht ×1,45; Form ×1,15; Ankommen ×0,7              |
| **Ausdauer**    | Form ×1,3; Qigong ×1,2; Ankommen ×0,5                       |
| **Kognition**   | Form ×1,55; Gleichgewicht ×1,1; Qigong ×0,8                 |

### 5.3 Phasen-Untergrenzen und Weglassen

Jede Phase hat ein Minimum, unter dem sie sich nicht lohnt — man verbrächte den
ganzen Block damit, die Startposition des Videos zu finden.

`center 90s · warmup 120s · qigong 180s · form 240s · balance 120s · close 90s`

Die Zuteilung iteriert: Anteile berechnen → unterversorgte Phasen finden → die
am niedrigsten gewichtete weglassbare weglassen → neu rechnen. Das Iterieren ist
wichtig, weil das Weglassen einer Phase eine andere über ihre Untergrenze heben
kann. `center` und `close` sind geschützt und werden nie weggelassen; mindestens
eines von `qigong` / `form` / `balance` muss überleben. Die Enddauern runden auf
15 s, der Rest wird auf den größten Block geschoben.

Deshalb hat eine 10-Minuten-Einheit vier Blöcke und eine 45-Minuten-Einheit
sechs, ohne fest verdrahtete Vorlagen pro Dauer.

### 5.4 Sicherheitsobergrenzen

**Mobilität ist die harte Schranke. Alter ist eine weiche.** Eine sichere
80-Jährige sticht einen unsicheren 55-Jährigen, und die Oberfläche fragt *zuerst*
nach der Mobilität, um zu signalisieren, dass es eine Sicherheitsfrage ist und
keine demografische.

```
mobility ceiling:   seated → gentle   supported → gentle   steady → vigorous
age ceiling:        <50 → vigorous    50–64 → vigorous
                    65–74 → moderate  75+ → gentle
effective = min(requested, mobility ceiling, age ceiling)
```

Eine Ausnahme: **sicher auf den Beinen _und_ gefestigte Praxis** hebt die
*Alters*grenze um eine Stufe. Nachgewiesenes Können sticht ein Geburtsjahr. Die
Mobilitätsgrenze wird nie angehoben.

Wenn die verlangte Intensität gedeckelt wird, sagt die App das, und sie sagt,
welche Einschränkung gebunden hat — „Der Halt im Stehen ist der begrenzende
Faktor, nicht das Alter.“

Weitere strukturelle Folgen:

- `seated` → **die Gleichgewichtsphase entfällt ganz** (es gibt kein ehrliches
  sitzendes Gegenstück zum Einbeinstand), und ihre Zeit geht ans Qigong, wo
  Rumpfkontrolle und Gewichtsverlagerung im Sitzen trainierbar sind.
- `seated` oder `supported` → `requireChairFriendly`, ein harter Filter auf den
  Inhalt, keine Vorliebe.
- `new` → Aufwärmen ×1,25; Form ×0,85; und Lehrende, die Schritt für Schritt
  vorgehen, werden bevorzugt.
- `established` → Form ×1,2; Aufwärmen ×0,85.

### 5.5 Kurzformat

Dieselbe Einheit, anders geschnitten. `prescribe()` nimmt ein Format — `"full"`
oder `"shorts"` — und die Übende wechselt zwischen beiden auf dem
Übungsbildschirm. Alles, worauf es ankommt, ist geteilt: dasselbe Profil,
dieselben Minuten, derselbe fünfphasige Bogen in derselben Reihenfolge und
**dieselbe Sicherheitsobergrenze**, berechnet vom selben Code. Eine kurze Einheit
ist keine leichtere Einheit.

Was sich ändert:

- **Phasen werden in Karten geschnitten.** Ziel 75 s, nie unter 45 s oder über
  105 s, höchstens 26 Karten. Beide Enden sind gekappt: eine Untergrenze allein
  ließ eine 110-Sekunden-Phase als eine Karte durch, und das ist ein Block der
  vollen Einheit im Kartenkostüm.
- **Die Phasen-Untergrenzen sinken** auf etwa je eine Karte (`center 45 · warmup
  45 · qigong 60 · form 60 · balance 45 · close 45`), und die Zuteilungskörnung
  geht von 15 s auf 5 s. Eine kurze Einheit von 15 Minuten kann daher alle fünf
  Phasen enthalten, wo das volle Format zwei davon weggelassen hätte — der Bogen
  ist vollständiger, nicht weniger.
- **Der Inhalt muss in eine Karte passen.** Der Selektor deckelt die Laufzeit von
  Kandidaten auf 5 Minuten, gelockert auf 10 und nicht weiter; ein 42-minütiger
  Sitzkurs, 75 Sekunden lang gezeigt, ist kein Kurs, sondern ein Fragment davon.
- **Etwa jede dritte Karte ist geführt statt gefilmt**, zusätzlich zu Ankommen
  und Abschluss, die es immer sind. Dafür sind die 29 `micro`-Blöcke da: je ein
  benannter Grundbaustein, mit seinem Chinesisch und Pinyin auf der Karte.

Warum es das Format überhaupt gibt: die volle Einheit setzt voraus, dass du dich
entschieden hast zu üben. Der Feed setzt voraus, dass du das nicht hast, und
bittet um eine Minute. Die Literatur zur Dosis (§4.3) handelt von angesammelten
Übungswochen, nicht von der Länge einer Einheit — eine fünfzehnminütige Einheit
als zwölf Karten ist also keine abgespeckte Version von irgendetwas.

Was es bewusst nicht von den Feeds übernimmt, denen es ähnelt: es endet, nichts
wird beschnitten, um den Rahmen zu füllen, und die Uhr — nicht das Video —
entscheidet, wann eine Karte vorbei ist.

---

## 6. Der Anti-Wiederholungs-Motor

`src/lib/engine/select.ts`. Das ist der Teil, an dem das ganze Produkt hängt: **es
darf sich nicht jeden Tag wie dasselbe anfühlen.**

Ein naiver Bester-Treffer-Bewerter scheitert sofort — der beste Treffer ist
deterministisch, also ist Tag 2 identisch mit Tag 1. Neuheit ist hier deshalb
kein Stichentscheid. Sie ist der größte einzelne Term der Bewertung.

### 6.1 Bewertung

```
score = 0.42 · novelty        # days since last served / 21, capped at 1
      + 0.30 · durationFit    # how well the runtime covers the block
      + 0.20 · fit            # focus, intensity, level, teaching style
      + 0.08 · jitter         # seeded random — what "Shuffle" perturbs

× 0.55 if the channel appeared in either of the last two sessions
× 0.85 if the style appeared in the last session
```

Die Karten des Kurzformats gewichten dieselben Terme neu, statt einen anderen
Bewerter zu verwenden: `novelty 0.32 · durationFit 0.46 · fit 0.17 · jitter
0.05`. Die Dauer-Passung dominiert, weil eine Karte 75 Sekunden hat und die
Strafe für einen Kurs, der mitten in der Karte ausgeht, hart ist.

**Sprache wird nach der Wahl angewandt, nicht in der Bewertung.** Fünfzehn Kurse
sind wortlos; der Rest ist gesprochen, fast alle auf Englisch. Die Rangfolge ist
für jede Sprache identisch, und erst danach — innerhalb des Mischfensters, aus
dem ohnehin gewählt wurde — bekommt eine nicht englischsprachige Person den
ersten verständlichen Kurs, falls der gezogene es nicht war. Die Bewertung
stattdessen nach Sprache zu gewichten sortiert die ganze Liste je Sprache um, und
der Rotationsindex des Tages adressiert dann in jeder Sortierung einen anderen
Kurs — eine spanischsprachige Person könnte so den englischen Kurs erhalten, den
ein wortloser in ihrer eigenen Liste gerade verdrängt hatte. Das Versprechen „nie
weniger wortlose Kurse, als eine englischsprachige Person bekommt“ ist jetzt
konstruktionsbedingt wahr.

### 6.2 Harte Regeln, und die Reihenfolge, in der sie nachgeben

| | Regel |
| - | ---- |
| **HART** | Kein Video zweimal in einer Einheit |
| **HART** | Kein Kanal zweimal in einer Einheit — der größte einzelne Treiber von „das fühlt sich gleich an“ |
| **HART** | Kein Video, das innerhalb von `cooldownDays` gesehen wurde |
| **WEICH** | Kanal-Abwertung über die letzten beiden Einheiten |
| **WEICH** | Stil-Abwertung über die letzte Einheit |

`cooldownDays = clamp(floor(eligiblePoolSize × 0.6), 1, 14)`. Das skaliert mit
dem, was die Phase tatsächlich erreichen kann: eine Phase mit 15 in Frage
kommenden Videos bekommt 9 Tage Abklingzeit, eine mit 3 bekommt 1 Tag. Eine feste
Konstante würde entweder schmale Phasen aushungern oder breite kaum rotieren.

Wenn eine Phase leer bliebe, lockern sich die Bedingungen **in einer definierten
Reihenfolge** — (1) Abgleich der Erfahrungsstufe, (2) die Abklingzeit, (3)
Intensitätsband und Kanalvielfalt, (4) *keine Wiederholungen innerhalb der
Einheit* — und **die Sicherheitsobergrenze lockert sich auf keiner Stufe**. Stufe
4 existiert nur für den Kurzformat-Feed, der bis zu 26 verschiedene Dinge
verlangt, wo die volle Einheit sechs verlangt; selbst dort wird derselbe Kurs nie
auf zwei aufeinanderfolgenden Karten ausgespielt, und das ist die einzige
Wiederholung, die jemand wirklich bemerken würde. Die Kartenlängen-Deckelung
lockert sich auf Stufe 3 statt auf Stufe 4: der Selektor wiederholt also lieber
einen kurzen Kurs, als einen 40-Minuten-Kurs als 75-Sekunden-Karte auszuspielen.
Welche Regeln gelockert wurden, wird in `session.rationale` zurückgemeldet und
dem Nutzer gezeigt, denn die eigenen Bedingungen stillschweigend zu ignorieren
ist der Weg, auf dem ein Empfehlungssystem verrottet.

### 6.3 Die Dauer-Passung ist absichtlich asymmetrisch

Ein Video, das *länger* ist als sein Block, ist unproblematisch — du übst die
ersten N Minuten und der Timer schiebt dich weiter, genau wie ein Kurs. Ein
Video, das *kürzer* ist als sein Block, lässt dich in Stille stehen, und das ist
ein viel schlimmeres Scheitern. Also:

```
r = budget / runtime
r > 1  →  max(0, 1 − (r−1) × 1.25)   # too short: punished hard
r ≤ 1  →  r ^ 0.45                    # long is acceptable, not preferred
```

### 6.4 Determinismus

Die Einheit, die du bekommen hast, darf sich nicht stillschweigend neu mischen,
wenn du mitten im Üben neu lädst. Jede Zufallsziehung stammt aus einem
mulberry32-PRNG, gesät mit `hash(date, profileKey, variant)`. **`variant` ist das
Einzige, was die Einheit eines Tages ändert**, und genau ein Bedienelement erhöht
es: „Andere Einheit“.

### 6.5 Warum die Bibliothek so gebaut ist, wie sie ist

Der Motor kann nur durch das rotieren, was existiert. Deshalb führt die
Bibliothek bewusst **dieselben kanonischen Sets, unterrichtet von verschiedenen
Lehrenden** — sieben Aufnahmen von Ba Duan Jin, sechs von Shibashi, acht der
Yang-24-Form. Das ist der Trick: der *Inhalt* bleibt vertraut (du lernst eine
Form, nicht fünfzig), während *Stimme, Tempo und Kamerawinkel* rotieren.
Vertraute Praxis, frische Einheit.

Redaktionelles Ziel: **≥5 verschiedene Kanäle pro Zelle (Phase × Intensität).**

---

## 7. Wochenplanung

`src/lib/engine/week.ts`. Eine Woche identischer Einheiten ist der schnellste Weg
aufzuhören, und obendrein schlechtes Training.

- **Ein langer Tag** — der eigene Schwerpunkt der Übenden, Dauer ×1,5, gelegt auf
  ihren *letzten* gewählten Wochentag (meist das Wochenende, meist der einzige
  Tag mit Zeit). Das ist die Einheit, in der eine Form tatsächlich gelernt wird.
  Erfordert ≥3 Übungstage.
- **Ein leichter Tag** — eine Intensitätsstufe tiefer, Schwerpunkt auf `stress`
  umgestellt, in die Wochenmitte gelegt. Erholung, keine Lücke. Erfordert ≥4
  Übungstage.
- **Alles andere** wechselt zwischen dem gewählten Schwerpunkt und seinem
  Komplement, sodass keine einzelne Qualität an aufeinanderfolgenden Tagen
  trainiert wird.

```
balance ↔ strength    strength → joints    joints → stress
stress  → balance     cardio   → balance   cognition → joints
```

- **Ruhetage werden dargestellt, nicht versteckt.** Ein leerer Donnerstag ist
  eine Entscheidung des Plans. Ihn auszuwählen bietet „Trotzdem üben“ an, was mit
  verringerter Intensität baut, statt sich zu weigern.

Wochen beginnen am Montag — so sprechen Menschen über „diese Woche“, und so liegt
der natürliche lange Tag am Ende statt in der Mitte.

---

## 8. Inhaltsrichtlinie

### 8.1 Prüfung

Jeder Eintrag in `src/lib/content/videos.ts` wurde vor dem Ausliefern maschinell
geprüft:

- `https://www.youtube.com/oembed?url=…` → existiert, ist öffentlich, echter
  Titel, echter Kanal.
- die Wiedergabeseite → `lengthSeconds`, und `playableInEmbed: true`.

Führ es erneut aus mit `bun run verify:library`.

**Titel lügen ständig.** „10 min“ sitzt regelmäßig auf einem 14-Minuten-Video.
Das Feld `seconds` ist immer YouTubes eigene Zahl, denn der Timer plant dagegen.

Von 52 Kandidaten wurden **51 ausgeliefert**; einer (`ILFcKMnMkPQ`) meldete
`playableInEmbed: false` und wurde verworfen, statt als toter Rahmen
ausgeliefert zu werden.

### 8.2 Redaktionelle Regeln für einen neuen Eintrag

1. Echte Laufzeit in `seconds`. Nie die Zahl aus dem Titel.
2. `chairFriendly` ist eine **Sicherheitsaussage**, kein Bequemlichkeits-Tag. Nur
   wahr, wenn das Video im Sitzen ist oder langsam und schmal genug im Stand, um
   es an einer Stuhllehne festhaltend zu machen.
3. **Tagge nie ein Video in mehr als drei Phasen.** Übertaggen ist der Weg, auf
   dem sich eine Bibliothek aus 50 wie eine aus 6 anfühlt.
4. Ziel: ≥5 verschiedene Kanäle pro Zelle (Phase × Intensität).

### 8.3 Nennung und faire Nutzung

Nichts wird gehostet, neu hochgeladen, heruntergeladen oder entkleidet. Videos
werden über YouTubes eigenen Player eingebettet (Host `youtube-nocookie`), mit
aktiv gelassenen nativen Bedienelementen, Kanalnamen auf jeder Fläche und einem
„Auf YouTube ansehen“-Link auf jeder Bibliothekskarte. Die vollständige
Bibliothek ist öffentlich unter `/library`.

Bittet eine Urheberin darum, entfernt zu werden, wird der Eintrag entfernt. Keine
Verhandlung, kein „aber der Motor braucht ihn“.

### 8.4 Elegantes Scheitern

Videos werden gelöscht und Einbettungsrechte ändern sich. Wenn der Player einen
Fehler wirft, degradiert die Bühne zu einer Karte mit dem Vorschaubild, einer
Erklärung und einem externen Link — **und der Timer läuft weiter.** Ein leeres
iframe ist nie akzeptabel.

---

## 9. Sicherheitsrahmen

Was die App tut:

- Fragt vor allem anderen nach der Standsicherheit.
- Erzwingt eine harte Intensitätsobergrenze, die kein Lockerungspfad aushebeln
  kann.
- Zeigt Warnhinweise über dem Player, in jeder Einheit, nicht einmal beim
  Einrichten.
- Allgemeine Warnhinweise: aufhören bei scharfem Schmerz, Brustschmerz,
  Schwindel oder Atemnot, die nicht nachlässt; das Knie nie über die Zehen hinaus
  drücken; das Knie läuft über dem Fuß.
- Bedingte Warnhinweise: Stuhl in Reichweite bei `supported`; fester Stuhl, keine
  Rollen, Füße flach bei `seated`; „erhöhe den Stand, bevor du die Einheit
  kürzt“ ab mittlerer Intensität.

Was sie ausdrücklich nicht tut und ohne klinische Begleitung nicht zu tun
beginnen darf:

- Auf Gegenanzeigen prüfen (kürzliche Operationen, akute kardiale Ereignisse,
  vestibuläre Störungen, unkontrollierter Bluthochdruck).
- Sich an eine benannte Diagnose anpassen.
- Für eine einzelne Person ein therapeutisches Ergebnis behaupten.

---

## 10. Architektur

```
src/
  app/                 routes: / · /progress · /library · /method
  components/
    brand/             mark, wordmark, lockup
    glass/             NightSky, Glass — the material layer
    ui/                shadcn primitives (extended, not forked)
    layout/            header, bottom tab bar, skip link, nav definition
    practice/          stage, timer, transport, rail, screen,
                       full player + short-form feed, format switch
    progress/          rank, milestones, stats
    calendar/          week strip
    setup/             option groups, setup sheet
    library/           library browser
  hooks/               timer, session runtime, chime, wake lock, hydration gate
  lib/
    domain/types.ts    the vocabulary. Nothing decorative lives here
    content/           verified video registry + app-narrated guided blocks
    engine/            prescribe → select → week. Pure, locale-blind
    progress/          ranks + derived stats. Pure
    i18n/              detection, dictionaries (en·es·fr·de·zh), provider
    store/             the only persisted state
docs/METHODOLOGY.md    this file
docs/methodology/      its translations
scripts/verify-library.ts
```

**Konventionen**

- `lib/engine/*` und `lib/progress/*` sind rein: kein React, kein DOM, kein
  implizites `Date.now()` und **keine Sprache**. Jede Funktion bekommt das Datum
  als Argument, was Einheiten reproduzierbar und testbar macht, und gibt
  Wörterbuchschlüssel statt Sätzen zurück.
- Ein Feld existiert in `domain/types.ts` nur, wenn eine Motorregel es liest oder
  ein Label es darstellt.
- kebab-case-Dateien, benannte Exporte, direkte Importe, keine Barrel-Dateien.
- Client-Komponenten sind Blätter. `PracticeScreen` hält das gewählte Datum und
  das gewählte Format, alles andere wird abgeleitet.
- **Beide Player teilen eine Laufzeit.** `useSessionRuntime` besitzt den Timer,
  den Klang, die Bildschirmsperre, das Einfrieren des Nachthimmels und das
  Protokoll, sodass die volle Einheit und der Feed nicht darüber uneins sein
  können, wie viel du geübt hast — oder darüber, was passiert, wenn du auf halbem
  Weg gehst, nämlich ein Teilprotokoll oberhalb von zwei Minuten und gar keines
  darunter.

### 10.1 Der Timer, im Einzelnen

Drei Entscheidungen, die es zu verteidigen lohnt:

1. **Die Uhr ist ein einziger Skalar.** Eine Zahl — verstrichene Millisekunden in
   der ganzen Einheit — und der aktuelle Block wird daraus gegen kumulierte
   Grenzen *abgeleitet*. Springen, Zurück und Scrubben sind alle dieselbe
   Operation. Ein getrennter Countdown pro Block neben einer Gesamtzeit ist der
   Weg, auf dem diese beiden auseinanderdriften.
2. **Wanduhr, nicht Tick-Zählung.** Verstrichen ist
   `committed + (now − startedAt)`, bei jedem Tick neu berechnet. `+250 ms` je
   Intervall zu akkumulieren verliert über eine 45-Minuten-Einheit Minuten, weil
   Hintergrundtabs Timer hart drosseln.
3. **Deshalb übersteht er den Hintergrund.** Ein Telefon, das mitten in der
   Einheit sperrt, setzt zur richtigen Zeit fort, nicht zu der, zu der es
   gesperrt hat.

Der Timer ist außerdem die Quelle der Wahrheit für das Video: die Einheit zu
pausieren pausiert YouTube, und dass ein Video sein eigenes Ende erreicht,
beendet den Block nicht.

---

## 11. Bekannte Lücken

Ehrliche Liste. Sie sind nicht hinter „künftige Arbeit“ versteckt.

- **Noch keine Tests.** `prescribe`, `select`, `week` und `progress/stats` sind
  rein und wurden testbar geschrieben; geschrieben wurde nichts. Das ist mit
  Abstand die größte Lücke.
- **Nur `localStorage`.** Keine Synchronisation, kein Export, kein Import. Ein
  JSON-Export/Import-Knopf ist die billigste sinnvolle Abhilfe und gäbe zudem
  eine Möglichkeit, ein Jahr Praxis auf ein neues Telefon mitzunehmen.
- ~~**Die Sprache wird nach dem Mounten angewandt**, das erste gezeichnete Bild
  ist also Englisch.~~ **Behoben.** Die Sprache ist ein Routensegment: Englisch
  wird unpräfixiert unter `/library` ausgeliefert, die anderen vier unter
  `/de/library` und so weiter, und `<html lang>` stimmt ab dem ersten Byte. Es
  gibt keine Korrektur beim Mounten und kein Aufblitzen von Englisch.
- ~~**Seiten-`<title>` und Meta-Beschreibungen sind nur auf Englisch.**~~
  **Behoben**: sie kommen jetzt aus dem Wörterbuch, wie alles andere.
- ~~**Nur drei Routenfamilien sind tatsächlich übersetzt.**~~ **Geschlossen.**
  Jede Familie wird nun in allen fünf Sprachen ausgeliefert — die Kursseiten, die
  dreizehn `/for/*`-Essays, die Installationsanleitung und dieses Dokument, samt
  Metadaten, JSON-LD, Markdown-Spiegeln und `llms.txt`.
  `src/lib/i18n/coverage.ts` bleibt die Quelle der Wahrheit dafür, was
  *indexiert* werden darf:

  | Routenfamilie | Ausgelieferte Sprachen | Indexierbar |
  | --- | --- | --- |
  | Start, `/library`, `/library/teachers`, Kursseiten, `/for/*`, `/method`, `/install` | alle fünf | ja, mit reziprokem `hreflang` |
  | `/progress` | — | nie, in keiner Sprache |

  **Für eine URL, die diese Sprache nicht ausliefert, wird keine
  `hreflang`-Annotation ausgegeben**; eine erfundene ist schlimmer als keine.
  Diese Regel hat sich nicht geändert — geändert hat sich, dass die URLs die
  Sprache nun ausliefern.

- **Die Übersetzungen hatten keine muttersprachliche Durchsicht, und das ist nun
  die größte inhaltliche Lücke.** Sie wurden maschinell erzeugt. Für das
  Drumherum und die Kursseiten ist das eine risikoarme Wette: kurze, sachliche
  Zeichenketten, stark durch die Daten um sie herum eingeschränkt. Für die
  `/for/*`-Essays und für dieses Dokument ist sie es nicht, und §9 ist der Grund:
  das ist der Inhalt, bei dem falsch zu liegen jemandem schaden könnte, und eine
  maschinelle Übersetzung von Bewegungsanleitungen ist genau die Art von falsch,
  die sich flüssig liest. Das Gegenmittel steht in der Tabelle oben: eine Familie
  in `coverage.ts` auf `[DEFAULT_LOCALE]` zurückzusetzen ist eine Zeile, und das
  setzt die Varianten auf `noindex`, nimmt sie aus der Sitemap und stellt die
  Kennzeichnung „(auf Englisch)“ auf jedem Link dorthin wieder her.
- **Die Menübeschriftungen von `/install` sind der Teil, der am ehesten falsch
  ist**, und falsch auf eine Weise, die eine lesende Person nicht umgehen kann:
  sie müssen die Formulierung des jeweiligen Herstellers in dieser Sprache sein,
  keine Übersetzung des Englischen. Prüf sie an einem Gerät, bevor du diese Seite
  für fertig hältst.
- **Chinesisch ist mit `hreflang` allein nicht gelöst.** Baidu ignoriert es und
  gewichtet Domain- und Hosting-Signale anders, `/zh` zu platzieren ist also ein
  eigenes Stück Arbeit und nicht dieselbe Arbeit noch einmal.
- **Die Bibliothek im Sitzen ist schmaler als die im Stehen** und neigt zu zwei
  Kanälen. Die Regel zur Kanalvielfalt lockert sich für sitzende Übende daher
  früher.
- **Kein Offline-Modus.** Die geführten Blöcke funktionieren offline von Haus
  aus; die Videoblöcke nicht.
- **Zwei Behauptungen bleiben `⚠️ ungeprüft`** (§4.4 MET, §4.5 Atemfrequenz) und
  dürfen bis zur Prüfung nicht in öffentlichen Texten verwendet werden.

## 12. Änderungsprotokoll

| Datum      | Änderung                                                                                                                                                                                                                            |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 2026-08-01 | Erster Build. Marke, dreistufige Tokens, Liquid-Glass-System, geprüfte Bibliothek mit 51 Videos, Verordnungsmotor, Anti-Wiederholungs-Selektor, Wochenplaner.                                                                          |
| 2026-08-01 | **Visuelle Richtung geändert zu tiefer Nacht und Mondlicht**, dunkel zuerst. Cormorant + Inter ersetzen Newsreader + Geist. Vollständiger Mobil-Durchgang: Tab-Leiste unten, sichere Bereiche, Überlaufschutz, ringbezogene Timergröße. |
| 2026-08-01 | **Automatische Erkennung der Browsersprache** mit en · es · fr · de · zh. Motor umgebaut, sodass er übersetzbare Schlüssel statt Prosa ausgibt.                                                                                        |
| 2026-08-01 | **Fortschritt ergänzt**: neun Ränge, neun Meilensteine, Serien — alles aus dem Protokoll abgeleitet, alles in Tagen statt in Volumen gemessen.                                                                                         |
| 2026-08-02 | **Kurzformat.** `prescribe()` nimmt ein Format; `"shorts"` schneidet jede Phase in Karten von 45–105 s, und der Feed spielt und scrollt sich selbst, im Vollbild, und endet, wenn die Einheit endet. Bibliothek auf 287 Kurse gewachsen (93 unter drei Minuten) und 41 geführte Blöcke, 29 davon einzelne benannte Grundbausteine mit Chinesisch und Pinyin. |
| 2026-08-02 | **Jede Routenfamilie übersetzt.** Kursseiten, die sieben `/for/*`-Essays, `/install` und dieses Dokument existieren nun in allen fünf Sprachen, samt Metadaten, JSON-LD, Markdown-Spiegeln und einem `llms.txt` je Sprache. Die Methodik-Anker bleiben konstruktionsbedingt englisch, sodass eine Zitatstelle in jeder Sprache auflöst. Die Installations-Menübeschriftungen tragen die Formulierung des jeweiligen Herstellers. Muttersprachliche Durchsicht steht aus — siehe §11. |
| 2026-08-02 | Beide Player sagen jetzt, was als Nächstes kommt, und bieten einen Weg daran vorbei — der Eröffnungsblock hatte kein Video, und mehrere Leute lasen den stehenden Bildschirm als defekt. Die Sprachpräferenz wurde von einem Score-Multiplikator zu einer Präferenz nach der Wahl, womit ein Fall behoben ist, in dem eine nicht englischsprachige Person *weniger* wortlose Kurse bekommen konnte als eine englischsprachige. Der Rückfall auf geführte Blöcke umgeht die Intensitätsobergrenze nicht mehr. |
| 2026-08-15 | **Sechs weitere `/for/*`-Seiten und ein zusätzlicher Abschnitt auf jeder der ursprünglichen sieben.** Die neuen benennen eine Sache, statt eine Situation zu beschreiben — die Yang-24er-Form, Shibashi, Ba Duan Jin und die klassischen Sets, Stehmeditation, zwanzig Minuten, fünf Minuten —, denn wer weiß, was Ba Duan Jin ist, sucht nicht nach „Qigong für steife Gelenke“. Drei der sechs filtern über ein Titelmuster statt über ein Feld, dokumentiert in `topics.ts`: dass ein Kurs ein kanonisches Set lehrt, führt die Registry nicht, und jede Lehrperson schreibt es in den Titel. Alle dreizehn existieren in allen fünf Sprachen. |

---

## Quellen

- [Sherrington C. et al. *Exercise for preventing falls in older people living in the community.* Cochrane Database of Systematic Reviews, 2019](https://www.cochranelibrary.com/cdsr/doi/10.1002/14651858.CD012424.pub2/full)
- [Li F. et al. *Effectiveness of a Therapeutic Tai Ji Quan Intervention vs a Multimodal Exercise Intervention to Prevent Falls Among Older Adults at High Risk of Falling.* JAMA Internal Medicine, 2018](https://pmc.ncbi.nlm.nih.gov/articles/PMC6233748/)
- [Wang C. et al. *Comparative Effectiveness of Tai Chi Versus Physical Therapy for Knee Osteoarthritis: A Randomized Trial.* Annals of Internal Medicine, 2016](https://www.acpjournals.org/doi/10.7326/M15-2143)
- [WHO Guidelines on Physical Activity and Sedentary Behaviour, 2020 — Recommendations](https://www.ncbi.nlm.nih.gov/books/NBK566046/)
- [Tai Ji Quan: Moving for Better Balance](https://www.betterbalance.net/)
