Schlossbote verbindet die Rezeption von Schloss Hohenfels mit der Küche, die rund 200 Meter entfernt liegt. Die Rezeption meldet Gästezahlen, Speisewünsche und Absagen, die Küche bestätigt per Fingerabdruck oder Gesicht. Das System erbt die Marke des Hohenfels-Kiosks (Kalkstein, Petrol, Messing, Fraunces über Albert Sans), ergänzt sie um einen Nachtmodus und um Bewegung nach iOS-Vorbild, und übersetzt sie für zwei Arbeitsplätze: das **Küchen-Terminal** (Touchscreen am Raspberry Pi 5, läuft rund um die Uhr) und das **Rezeptions-Dashboard** (Arbeits-PCs am Pult). Ein dritter, kleiner Kanal sind Push-Nachrichten aufs Handy, die nur informieren.

Die Grundhaltung: eine Änderung muss in der Küche nicht übersehen werden können, und es muss jederzeit klar sein, wer was wann bestätigt hat.

## Inhalt und Ton

- **Du oder Sie:** Kolleginnen und Kollegen werden nicht angesprochen, die Oberfläche beschreibt Sachverhalte. „3 zusätzliche Gäste zum Abendessen“, nicht „Bitte beachten Sie…“. Wo eine Aufforderung nötig ist, im Infinitiv: „Änderung bestätigen“.
- **Zahlen zuerst:** Jede Meldung beginnt mit der Mahlzeit und dem Tag, dann die Zahl. „Abendessen, Do 6. Nov: 42 → 45 Gäste“.
- **Alt und neu sichtbar:** Eine Änderung zeigt immer den bisherigen und den neuen Wert, getrennt durch den Pfeil →. Nie nur die neue Zahl.
- **Buttons sind Verben:** „Bestätigen“, „An Küche senden“, „Änderung zurückziehen“, „Erneut versuchen“. Nie „OK“ oder „Senden“ ohne Objekt.
- **Uhrzeiten** im 24-Stunden-Format ohne „Uhr“ in Listen („14:32“), mit „Uhr“ in Sätzen („Frist 15:00 Uhr“). Datum kurz: „Do 6. Nov“.
- **Fehler** sagen, was passiert ist und was jetzt geht: „Keine Verbindung zum Server. Die Daten von 14:32 bleiben sichtbar, neue Änderungen sind gesperrt.“
- **Satzschreibung** überall. Großbuchstaben nur in `overline`.
- **Keine Emoji**, keine Ausrufezeichen in Statusmeldungen.
- **Sprache:** vorerst nur Deutsch.

## Farbe

- Zwei Themes: **Hell** für den Tag und das Pult, **Nacht** für das gedimmte Küchen-Terminal in der Spätschicht. Nacht ist keine Umkehrung: der Grund wird tiefes Schiefergrün, Petrol und die Statusfarben werden heller, Text auf Petrol wird dunkel (`on-petrol`). Alle Paare halten in beiden Themes mindestens 4,5:1.
- Seitengrund ist immer `kalkstein-100`, Karten und Kacheln liegen als `papier` darauf („Papier auf Stein“). Eingelassene Bereiche wie das Protokoll nutzen `kalkstein-50` ohne Schatten.
- Text ist `ink`, Sekundärtext `ink-muted`. Kein Grau außerhalb der Kalkstein-Familie.
- `petrol-600` ist die einzige Aktionsfarbe. Pro Screen gibt es höchstens eine Petrol-Fläche als Button. Hover `petrol-700`, gedrückt `petrol-800`, Text darauf `on-petrol`.
- `messing-500` nur als Schmuck (Haarlinie, Punkt). Als Text immer `messing-700`.
- Status hat feste Farben und ist nie nur Farbe:

| Status | Fläche | Text | Icon | Wort |
|---|---|---|---|---|
| Offen | `messing-50` | `messing-700` | Uhr | Offen |
| Bestätigt | `moos-50` | `moos-700` | Häkchen | Bestätigt |
| Eskaliert | `ziegel-50` | `ziegel-700` | Warndreieck | Eskaliert |
| Neu | `petrol-50` | `petrol-text` | Glocke | Neu |
| Offline | `kalkstein-200` | `ink-muted` | WLAN aus | Offline |

- Text auf `petrol-50` und `petrol-100` ist immer `petrol-text`.
- `moos-600` und `ziegel-600` haben fast dieselbe Helligkeit (1,1:1). Wer Rot und Grün nicht unterscheidet, liest den Status deshalb am Wort und am Icon. Beides darf nie fehlen.

## Typografie

- Fraunces (`display`) nur für den einen Titel pro Screen und die Wortmarke, ruhig gesetzt mit `font-variation-settings: "SOFT" 0, "WONK" 0`. Alles andere ist Albert Sans (`sans`).
- Küchen-Terminal: Gästezahlen in `terminal-zahl`, Titel in `terminal-titel`, Inhalte in `terminal-text`, Beschriftungen in `terminal-label`.
- Rezeption: `pult-titel`, `pult-abschnitt`, `pult-text`, `pult-label`.
- Alle Zahlen tabellarisch (`font-variant-numeric: tabular-nums`), damit Spalten nicht springen, wenn 9 zu 10 wird.
- Labels stehen immer über dem Feld, nie als Platzhalter im Feld.

## Abstände, Größen, Radien

- 4er-Raster: `space-1` bis `space-16`. Terminal arbeitet mit `space-6` als Kartenpolster und `space-12` als Seitenrand, das Pult mit `space-4`.
- Jedes Touch-Ziel am Terminal ist mindestens `ziel-terminal` (64px) hoch. In der Küche wird mit nassen Händen oder Handschuhen getippt.
- Am Pult sind Buttons und Felder `ziel-pult` (40px) hoch.
- Buttons und Felder `radius-md`, Karten `radius-lg`, Dialoge `radius-xl`, Badges `radius-pill`.

## Tiefe und Zustände

- Karten tragen `shadow-card` und eine Haarlinie `karte-rand`. Hell ist die Linie kaum sichtbar und der Schatten trägt die Kante, im Nachtmodus ist es umgekehrt. Eine neue, noch unbestätigte Änderung hebt sich mit `shadow-raised` und Petrol-Rand ab, bis sie bestätigt ist. Der Biometrie-Dialog liegt mit `shadow-sheet` über `scrim`.
- Hover: eine Stufe dunkler (Petrol) oder `petrol-50`-Tönung (weiße Flächen). Gedrückt: `petrol-800`, 1px nach unten, Schatten weg. Am Terminal gibt es kein Hover, nur den gedrückten Zustand.
- Fokus: durchgehender Ring in `petrol-600`, Breite `fokus-breite`, 2px Abstand. Hält 6,9:1 auf `kalkstein-100`.
- Deaktiviert: Fläche `kalkstein-200`, Text `kalkstein-600`.
- Offline: Die letzten Daten bleiben sichtbar, alle Aktionen, die etwas senden, werden deaktiviert, und die Verbindungsanzeige wechselt auf Offline mit Zeitpunkt der letzten Synchronisierung.

## Bewegung und Ton

- Bewegung orientiert sich an iOS: Dinge reagieren sofort auf den Finger und federn weich nach. Die Federkurve ist gedämpft und schwingt knapp 4 % über, nie mehr. Alle Werte und Abläufe stehen im Abschnitt Bewegung.
- Jeder Button gibt beim Drücken nach (`scale(.96)` in 90ms) und federt beim Loslassen zurück.
- Bestätigen per Biometrie läuft wie Face ID und Touch ID: ein Lichtbogen kreist um das Gesicht oder die Fingerabdruck-Rillen füllen sich, bei Erfolg weicht die Figur einem Häkchen, das sich zeichnet. Bei Fehler schüttelt sich die Figur.
- Eine neue Änderung am Terminal kommt mit akustischem Signal, das Banner fällt von oben ein und die Glocke schwingt einmal. Die Karte atmet mit einem weichen Leuchtring, bis jemand bestätigt. Nichts blinkt.
- Zahlen rollen von unten herein, wenn sich eine Gästezahl ändert.
- Eskalationsstufe 1 (nach 10 Minuten) färbt die Frist-Anzeige ziegel, Stufe 2 (nach 20 Minuten) zusätzlich das Banner. Werte sind Vorschläge aus dem PRD und noch mit Benjamin abzustimmen.
- Animiert werden nur `transform`, `opacity` und Farben. Das hält die Bewegung auch auf dem Raspberry Pi 5 flüssig.
- `prefers-reduced-motion` schaltet alle Bewegung ab, Farbwechsel bleiben.

## Ikonografie

- Lucide-Icons mit 2px Strich, als Inline-SVG in `currentColor`. Die nötigen Icons stecken in der `Icon`-Komponente (Uhr, Häkchen, Warndreieck, Glocke, Glocke aus, WLAN, WLAN aus, Fingerabdruck, Gesicht, Pfeil, Plus, Minus, Aktualisieren, Person, Blatt, Besteck, Kreuz, Sonne, Mond, Monitor, Senden). Lucide ist ein Ersatz aus dem Kiosk-System, ein eigenes Icon-Set gibt es nicht.
- Icons begleiten Wörter, sie ersetzen sie nie. Größen 18px am Pult, 24px am Terminal, 40px im Biometrie-Dialog.

## Marke

- Kein Logo vorhanden. Die Wortmarke ist reiner Schriftsatz: „Schlossbote“ in Fraunces, darüber `overline` „Schloss Hohenfels“ in `messing-700`, darunter eine Haarlinie `messing-500`.
- Fraunces und Albert Sans liegen als variable Fonts unter `fonts/` (SIL Open Font License). Das Frontend bindet `fonts/fonts.css` ein, damit das Terminal auch offline richtig gesetzt ist.
