/*
 * Buchmafia – Design-Tokens.
 *
 * Verbindlich aus der Art-Bibel in CLAUDE.md. Die einzige Stelle, an der Farben,
 * Schriften und Abstände definiert werden – kein Wert darunter hartkodiert.
 *
 * Farbidee: Nichts ist reines Schwarz oder Weiß. Das Dunkel ist Druckerschwärze,
 * das Helle ist vergilbtes Papier. Dazu drei Signalfarben (Rot, Senf, Terminal)
 * und vier Rollenfarben, die aus den Figuren kommen: Die Schrauberin IST der
 * blaue Schlosseranzug, der Schmierfink IST der Rotstift.
 *
 * Regel aus der Bibel: höchstens drei Farben pro Fläche, Schwarz und Papier
 * nicht mitgezählt.
 */

:root {
    /* --- Grundtöne ------------------------------------------------------- */
    --bm-ink: #0b0b0d; /* Noir-Grund, Panelrahmen, Silhouetten */
    --bm-ink-2: #17171c; /* zweite Tiefe: Karten, Panelfluchten */
    --bm-ink-3: #24242b; /* Kanten und Trennlinien */
    --bm-soot: #6d6d78; /* Ruß: deaktivierter Text, Nebenangaben */

    /*
     * Derselbe Ruß, zweimal nachgeschärft, weil er als SCHRIFT auf keinem der
     * beiden Schirme reichte: 3.49:1 auf der Karte aus Blech, 2.63:1 auf der
     * Remittende, auf der die stumme Sprechblase liegt. Der Ton bleibt derselbe,
     * es wandert allein die Helligkeit – nach oben fürs Blech, nach unten fürs
     * Papier.
     */
    /*
     * DIE ZAHL GILT GEGEN DEN HELLSTEN SCHIRMGRUND, NICHT GEGEN JEDES BLECH.
     *
     * Hier stand "dem hellsten dunklen Grund", und das war zu weit gefasst:
     * --bm-ink-3 (#24242b) ist heller als jeder Schirm. Heute traegt kein
     * ink-3-Grund einen dieser Token — es sind Reglerschienen,
     * :active-Zustaende, Balken und Rasterpunkte. Wer je ein TEXTFELD auf
     * ink-3 stellt, bricht die Zusage lautlos.
     */
    --bm-soot-blech: #8a8a94; /* 4.60:1 auf #2a2210, dem hellsten SCHIRM */
    --bm-soot-papier: #494950; /* 4.60:1 auf #cbb894, dem dunkelsten Papier */

    --bm-paper: #e8dcc0; /* vergilbtes Papier, Fließtext, Dokumente */
    --bm-paper-aged: #cbb894; /* ältere Auflage, Remittende */
    --bm-paper-dim: #a2957c; /* Nebentext auf dunklem Grund */
    --bm-paper-durchschlag: #e3cfc4; /* rosa Durchschlag: Vordrucke, Formulare */

    /*
     * DAS PAPIER EINER BILDUNTERSCHRIFT — und es ist ein fünftes und kein
     * überzähliges.
     *
     * Die vier darüber sind Dokumente: Zeitung, Remittende, Nebentext,
     * Durchschlag. Dies hier ist der Kasten UNTER einem Bild, in dem der
     * Erzähler das Bild benennt — heller und kälter als das vergilbte
     * Zeitungsblatt, weil er kein Archivstück ist, sondern frisch gedruckt.
     * Dieselbe Zahl führt die Arena als `--ar-comic-papier`; es ist dieselbe
     * Sorte Fläche, und zwei Werte dafür wären zwei Handschriften für einen
     * Gegenstand.
     *
     * --bm-ink hält darauf 15.28:1. Die Goldkante daran (--bm-gold, 2 px) ist
     * Prägung und keine Auskunft; gemessen wird sie gegen den GRUND, auf dem
     * sie liegt — 6.16:1 auf --bm-ink —, und nicht gegen ihre eigene Fläche.
     */
    --bm-comic-papier: #ede2c8; /* Bildunterschrift unter einem Panel */

    /*
     * DRUCKERSCHWÄRZE, DIE INS PAPIER GEZOGEN IST.
     *
     * Ein Nebentext auf einem Zeitungsblatt ist nicht grau, sondern dünner
     * gedruckt: derselbe --bm-ink, nur nicht voll deckend. Ein eigener Grauton
     * wäre eine vierte Farbe auf einer Fläche, die schon drei trägt.
     *
     * Die Werte standen viermal getippt in zeitung.css (0.4, zweimal 0.62,
     * 0.68) und waren damit drei verschieden laute Nebentexte ohne einen Grund
     * dafür. Voll deckend hält --bm-ink 14.45:1 auf --bm-paper und 13.10:1 auf
     * --bm-paper-durchschlag; die beiden Abstufungen halten:
     *   --bm-ink-notiz        8.46:1 auf Papier, 7.93:1 auf Durchschlag
     *   --bm-ink-platzhalter  4.52:1 im Feld des Vordrucks (#efe3dd)
     *
     * DIE NOTIZ STAND AUF 0.62 UND HIELT 5.01:1. Das reicht auf einem glatten
     * Schirm und nicht auf diesem: Unter ihr liegen Korn und Halbtonraster,
     * und am Tablet war genau das der lauteste Befund des Playtests.
     */
    --bm-ink-notiz: rgba(11, 11, 13, 0.78);
    --bm-ink-platzhalter: rgba(11, 11, 13, 0.58);

    /*
     * Das Blech einer Werkbank. Zwischen --bm-ink und --bm-ink-2 und mit einem
     * Stich ins Blaugraue: Die Reglerbank soll sich vom Grund der Station
     * abheben, ohne eine eigene Farbe zu sein.
     */
    --bm-blech: #101216;

    /*
     * --- Das Graphit des Tresens -----------------------------------------
     *
     * DER EINZIGE TON DIESES HAUSES OHNE STICH, UND ZWAR MIT ABSICHT.
     *
     * Jede andere Fläche hier ist gefärbt: --bm-ink ist Druckerschwärze,
     * --bm-blech geht ins Blaugraue, --bm-ink-2 auch. Der Tresen ist aber
     * keine Druckerei – er ist das Möbel des Hauses, das in jedem Zimmer
     * steht, und er soll in beiden dasselbe sein. Drüben führt
     * `weltregister/css/tokens.css` dieselben drei Werte unter --wr-.
     *
     * Gerechnet auf --bm-graphit (relative Luminanz nach WCAG 2.x):
     *   --bm-paper      13.52:1      --bm-paper-dim   6.24:1
     *   --bm-mustard     8.20:1      --bm-signal      3.62:1 (Nichttext)
     * Auf --bm-graphit-tief: Papier 14.17:1, Senf 8.59:1. Der alte Grund
     * --bm-blech trug Papier mit 13.77:1 – der neue Ton kostet nichts.
     *
     * ZWEI TIEFEN, EINE KANTE. --bm-graphit-tief liegt 1.05:1 unter dem
     * Grund: Was den Kopfbalken vom Rumpf trennt, ist die Linie und nicht
     * der Ton – dieselbe Bauweise wie im Sockel des Hauses.
     *
     * --bm-graphit-kante ist der einzige Ton, der ein BEDIENELEMENT
     * begrenzen darf: 3.62:1 auf dem Grund, 3.80:1 auf der Tiefe, beide über
     * den 3,0, die WCAG 1.4.11 für Nichttext verlangt. Der Haarstrich
     * daneben (rgba(255,255,255,0.08), im Tresen als --tr-linie) mischt sich
     * auf diesem Grund zu #272729 und hält 1.23:1 – er gliedert, er
     * begrenzt nicht. Für 3,0:1 bräuchte derselbe Strich 33 Prozent Deckung
     * (#626263, 3.02:1), und dann wäre er kein Haarstrich mehr, sondern ein
     * Rahmen. Zwei Aufgaben, zwei Töne.
     *
     * #141416 IST ZEICHENGLEICH --haus-tinte, UND VERLINKT WIRD TROTZDEM
     * NICHT: `inspektion.php` lädt in beiden Häusern kein `haus/haus.css` –
     * nur `index.php` tut das. Ein var(--haus-tinte) fiele im
     * Inspektions-Cockpit still aus, und der Tresen stünde dort ohne Grund
     * da.
     *
     * Der Name ist „graphit" und nicht „werkstatt": `.haus-fuss__werkstatt`
     * bezeichnet in diesem Haus die Wortmarke des Entwicklers.
     */
    --bm-graphit: #141416;
    --bm-graphit-tief: #0e0e10;
    --bm-graphit-kante: #6e6e72;

    /* --- Signalfarben ---------------------------------------------------- */
    --bm-signal: #d6241c; /* Lektoratsrot, Deleatur, Alarm, Aktenvermerk */

    /*
     * Lektoratsrot steht auf dem Blech bei 3.56:1. Als Lampe ist das genug, als
     * WORT nicht – und im Funk ist es ein Wort. Diese Fassung ist die Schrift
     * dazu. Der Grundton oben bleibt liegen: An ihm hängt über --tr-signal der
     * Tresen, und der steht in jedem Zimmer dieses Hauses.
     */
    --bm-signal-blech: #e95d57; /* 4.62:1 auf #2a2210 */
    --bm-signal-deep: #8e1410; /* Rot auf Papier, Fehlregister-Unterdruck */
    --bm-mustard: #d9a521; /* Senfgelb der 50er-Pulp-Cover, Warnbänder */

    /*
     * UND DIE DRITTE FASSUNG GEHÖRT DEM SENF.
     *
     * Rückfrage, Lehrkasten und Bescheid liegen auf --bm-mustard, und ihre
     * Markenzeilen standen dort in --bm-signal-deep: 4.14:1, elf Pixel hoch,
     * in Versalien, gesperrt, in der schmalen Amtsschrift. Das reisst AA, und
     * zwar nicht knapp — der lauteste Kasten der Station hatte die
     * unleserlichste Kopfzeile.
     *
     * GEÄNDERT WIRD DIE SCHRIFT UND NICHT DER GRUND, aus demselben Grund wie im
     * Nachbarhaus: Ein Fond, der hell genug wäre, um --bm-signal-deep auf 7:1
     * zu heben, stünde auf Ansgars Papierschirm als FLÄCHE bei rund 1:1 — der
     * Kasten verschwände bei genau einem der vier Sitze, und WCAG 1.4.11
     * verlangt für Nichttext 3,0. Der Senf bleibt auch deshalb liegen, weil an
     * ihm über --tr-marke der Tresen hängt.
     *
     * Der Wert ist derselbe wie --wr-signal-bernstein drüben, denn der Grund
     * ist es auch (#d9a521 in beiden Häusern). Zwei Töne für dieselbe Rechnung
     * wären zwei Stellen, an denen jemand den falschen pflegt.
     */
    --bm-signal-mustard: #3b0e09; /* 7.47:1 auf --bm-mustard */
    --bm-gold: #b4893a; /* Goldprägung – NUR als Linie, nie als Fläche */
    --bm-screen: #4fe0c4; /* Terminalgrün des Code-Knackers */

    /* --- Rollenfarben ---------------------------------------------------- */
    --bm-role-schrauber: #3c6e9b; /* Ruth Kalander – Maschinenblau */
    --bm-role-schmierfink: #c4453b; /* Ansgar Pleite – Rotstift */
    --bm-role-faelscher: #c9a227; /* Selma Golder – Blattgold */
    --bm-role-codeknacker: #2fa37e; /* Nuri Wendt – Registergrün */

    /*
     * Dieselben vier Farben, in Druckerschwärze ertränkt: Flächen für Plakette
     * und Titelleiste. Als Vollton wäre jede von ihnen ein Signal, und Signale
     * sind hier für Aktenvermerke reserviert. So getrübt tragen sie Text in
     * Papierfarbe – bei allen vier gleich lesbar, was ein Vollton nicht
     * schafft: Blattgold bräuchte dunkle Schrift, Maschinenblau helle.
     */
    --bm-role-schrauber-tief: #16242f;
    --bm-role-schmierfink-tief: #2a1614;
    --bm-role-faelscher-tief: #2a2210;
    --bm-role-codeknacker-tief: #10251e;

    /*
     * DIESELBEN VIER FARBEN, ABER NICHT DIESELBE AUFGABE.
     *
     * Hier stand jede Rollenfarbe genau einmal und trug zwei Aufträge
     * gegeneinander: Vordergrund auf einem Schirm UND Fläche unter
     * Druckerschwärze. Wer sie aufhellte, rettete die eine Richtung und verdarb
     * die andere. Selmas Ruf stand auf Ansgars Handbuchseite bei 1.56:1, das
     * Wort „du" auf Ruths Plakette bei 3.65:1 – derselbe Token, beide Male zu
     * schwach, und kein Wert konnte beides zugleich sein.
     *
     * Die Identität oben bleibt deshalb unangetastet: Wer beide Fälle spielt,
     * erkennt seinen Stuhl wieder. Daneben steht je eine Fassung für je eine
     * Aufgabe, und zwar IM SELBEN FARBTON – Blau bleibt Blau, Rot bleibt Rot, es
     * wandert allein die Helligkeit.
     *
     *   -blech   SCHRIFT auf den dunklen Schirmen (#05100d bis #2a2210).
     *   -papier  SCHRIFT auf den Papierschirmen (#cbb894 bis #e8dcc0).
     *   -licht   FLÄCHE unter --bm-ink; die Identität trägt dort keine Tinte.
     *   -tief    FLÄCHE unter heller Schrift – steht oben und ist älter.
     *
     * „-blech" heisst: für die Schirme aus Blech. Nicht: in der Farbe von
     * --bm-blech.
     *
     * WO EINE FASSUNG FEHLT, REICHT DIE IDENTITÄT SCHON. Selmas Blattgold und
     * Nuris Registergrün stehen auf dem Blech bei 6.50:1 und 4.99:1 und tragen
     * Druckerschwärze mit 8.13:1 und 6.24:1; für sie steht hier nichts. Ein
     * Token, das nur ein anderes wiederholt, läuft beim nächsten Umbau
     * auseinander, ohne dass es jemand merkt. Welche Fassung eine Regel bekommt,
     * entscheidet die Umschaltung in `game.css` und nicht diese Liste.
     *
     * Dasselbe steht in `weltregister/css/tokens.css`. Zwei Zimmer, zwei
     * Namensräume – aber ein Leser, der eines von beiden kennt, kennt beide.
     */
    --bm-role-schrauber-blech: #5a90bf; /* 4.63:1 auf #2a2210 */
    --bm-role-schmierfink-blech: #d16f67; /* 4.63:1 auf #2a2210 */

    --bm-role-schrauber-papier: #2a4c6c; /* 4.61:1 auf #cbb894 */
    --bm-role-schmierfink-papier: #812d27; /* 4.63:1 auf #cbb894 */
    --bm-role-faelscher-papier: #594711; /* 4.64:1 auf #cbb894 */
    --bm-role-codeknacker-papier: #185340; /* 4.61:1 auf #cbb894 */

    --bm-role-schrauber-licht: #457fb3; /* --bm-ink darauf: 4.63:1 */
    --bm-role-schmierfink-licht: #c9564d; /* --bm-ink darauf: 4.61:1 */

    --bm-bordeaux: #5e1b2e; /* Die Vertreterin: Lippen, Mantelfutter */

    /* --- Schrift --------------------------------------------------------- */
    --bm-font-display: 'Alfa Slab One', 'Rockwell', 'Bookman Old Style', Georgia, serif;
    /*
     * Die Handschrift der Sprechblasen.
     *
     * Bedingung Nummer eins ist nicht der Stil, sondern der Zeichensatz: Sie
     * muss ä ö ü Ä Ö Ü ß wirklich enthalten. Die Vorgängerin (Nanum Pen Script)
     * meldete den Bereich U+0000–00FF an und hatte die Umlaute trotzdem nicht –
     * „Mühle draußen" kam dann in drei verschiedenen Schriften auf den Schirm.
     * Wer diese Zeile ändert, lässt `dev/dev.ps1 schriften` laufen.
     */
    --bm-font-letter: 'Caveat', 'Bradley Hand', cursive; /* Sprechblasen, Erzähler */
    --bm-font-doc: 'Special Elite', 'Courier New', monospace; /* Fließtext, Dokumente */
    --bm-font-mono: 'IBM Plex Mono', Consolas, ui-monospace, monospace; /* Terminals, Zählwerk */
    --bm-font-amt: 'Archivo Narrow', 'Arial Narrow', Arial, sans-serif; /* Kartell-Amtsschrift */
    /*
     * DIE SCHRIFT DER BILDUNTERSCHRIFT — und sie ist die einzige Kette dieses
     * Hauses ohne eigene Datei.
     *
     * Eine Bildunterschrift ist kein gesprochener Satz (das ist die
     * Sprechblase in --bm-font-letter) und kein Formular (das ist die
     * Schreibmaschine in --bm-font-doc). Sie ist gesetzt, und dafür steht hier
     * eine Serife, die es auf jedem Gerät wirklich gibt: Georgia liegt auf
     * Windows, macOS, iOS und Android, und `serif` fängt den Rest.
     *
     * KEIN NAME IN ANFÜHRUNGSZEICHEN, und das ist Absicht: `dev/dev.ps1
     * schriften` nimmt den ersten zitierten Namen einer `--*-font-*`-Kette und
     * verlangt dafür eine ausgelieferte Datei. Eine Systemschrift in
     * Anführungszeichen wäre dort ein Befund über eine Datei, die es nie geben
     * soll. Dieselbe Kette führt die Arena als `--ar-schrift-comic`.
     */
    --bm-font-comic: Georgia, Times, serif; /* Bildunterschrift unter einem Panel */

    --bm-tracking-display: 0.01em;
    --bm-tracking-amt: 0.08em;

    /* --- Maße ------------------------------------------------------------ */
    --bm-gap-1: 0.35rem;
    --bm-gap-2: 0.7rem;
    --bm-gap-3: 1.15rem;
    --bm-gap-4: 1.9rem;
    --bm-gap-5: 3rem;

    --bm-border: 3px;
    --bm-border-fat: 5px;

    /*
     * --- Breiten ---------------------------------------------------------
     *
     * Zwei Maße, und sie widersprechen einander mit Absicht:
     *
     * `--bm-shell` ist die Bühnenbreite. Ein Comic-Panel, vier Stationen
     * nebeneinander und eine Kartei mit acht Spalten brauchen Platz; auf 68rem
     * standen sie in einer Spalte, die für sie zu schmal war.
     *
     * `--bm-mass` ist das Zeilenmaß für Fließtext und bleibt davon unberührt.
     * Eine Textzeile über die volle Bühnenbreite läse sich niemand durch – der
     * Blick findet den Zeilenanfang nicht wieder. Alles, was Sätze trägt,
     * bekommt deshalb dieses Maß und NICHT die Bühnenbreite.
     */
    --bm-shell: 82rem;
    /*
     * DIE AKTENBREITE — und sie ist NICHT die Bühnenbreite.
     *
     * `--bm-shell` hat drei Verbraucher: `.shell` über allen fünf Ansichten,
     * die Beweiswand in Akt 2 und früher die Kopfleiste. Wer ihn hochsetzt,
     * verbreitert stillschweigend jede Werkzeug-Hürde samt Reglerbank, deren
     * Pixel-je-Stufe-Rechnung für 375 px gebaut ist.
     *
     * Die STARTANSICHT ist dagegen keine Bühne, sondern die Akte dieses Falls,
     * und die steht im selben Schrank wie das Foyer: 1800px, dieselbe Zahl wie
     * `--haus-shell` und `--hub-shell`. Sie war 82rem, dann 96rem (1536px) und
     * ist mit dem Rahmen auf 1800px gewachsen — jedes Mal aus demselben Grund:
     * Steht hier eine andere Zahl als im Kopf darueber, springt die Wortmarke
     * beim Betreten des Zimmers zur Seite. Beim ersten Mal waren es 76 Pixel.
     *
     * DREI ZAHLEN, EINE ZUSAGE — wer eine anfasst, fasst alle an. Die dritte
     * steht in `shared/haus/haus.css`, und dort steht auch, warum 1800 und
     * nicht mehr.
     */
    --bm-akte: 1800px;
    --bm-buehne: 76rem;
    --bm-mass: 75ch;

    /* Eingabefelder liegen als Vertiefung in ihrer Flaeche: auf dunklem Grund
       ein Loch, auf Papier ein Schatten im Bogen. */
    --bm-feld-dunkel: rgba(0, 0, 0, 0.3);
    --bm-feld-papier: rgba(0, 0, 0, 0.06);

    /* --- Texturen -------------------------------------------------------- */
    --bm-halftone-size: 6px;
    --bm-halbton: #00000026; /* Alpha der Rasterpunkte über Papierflächen */

    /*
     * DIE LEICHTEN FASSUNGEN GEHÖREN DEM LESETEXT, DIE VOLLEN DER NACHT.
     *
     * Beide Texturen liegen auf dem Bockenheimer Tageblatt übereinander, und
     * darunter steht der einzige echte Spaltensatz dieses Hauses: 0.92rem in
     * drei Spalten, über eine Fläche, die zweimal aufgeraut ist.
     *
     * Gerechnet auf --bm-paper: Über dem vollen Raster fällt der dunkelste
     * Papierpunkt so weit, dass --bm-ink darauf nur noch 10.34:1 hält; über
     * der leichten Fassung sind es 12.72:1. Rasterweite und Winkel bleiben —
     * das schräge Raster ist das, was eine Zeitung von Karopapier
     * unterscheidet, und was bleiben soll, ist es.
     *
     * DESHALB WIRD DER TON HELLER UND NICHT DIE FLÄCHE KLEINER. Der andere
     * Weg wäre, das Raster auf Ränder und Kästen zu beschränken und die
     * Textspalten freizuhalten; er hätte quer über das Blatt zwei sichtbare
     * Kanten gezogen, dort wo die freigehaltene Fläche anfängt und aufhört.
     * Eine Zeitung hat keine Kante um ihren Satzspiegel.
     *
     * --bm-halbton und --bm-grain bleiben unverändert: An ihnen hängen
     * base.css, game.css und lobby.css, also die Nacht. Dort ist das Korn
     * richtig, denn dort steht kein Spaltensatz darauf.
     */
    --bm-halbton-leicht: #0000000f;

    /* Das Punktraster über dem Aufmacherbild: doppelt so grob, volle Schwärze. */
    --bm-halbton-bild: rgba(11, 11, 13, 0.42);

    /* Papierkorn als SVG-Rauschen: kein Bild, keine Extra-Anfrage. */
    --bm-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)' opacity='0.15'/%3E%3C/svg%3E");
    --bm-grain-leicht: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)' opacity='0.05'/%3E%3C/svg%3E");

    /* Harter Comic-Schlagschatten – nie weich, nie verlaufend. */
    --bm-shadow: 6px 6px 0 var(--bm-ink);
    --bm-shadow-sm: 3px 3px 0 var(--bm-ink);

    /*
     * Übergänge laufen linear und höchstens 120 ms. Es gibt kein Federn,
     * kein Nachwippen, kein ease-in-out – das wäre Software-Sprache, und
     * dieses Spiel spricht Druckerei.
     */
    --bm-schnell: 90ms linear;

    /* --- Der Tresen ------------------------------------------------------
     *
     * Der Plattformrahmen holt sich seine Farben von hier. Fast jeder Wert
     * ist ein VERWEIS, und keiner hat einen Ausweichwert: `tr/tresen.css`
     * erklärt keine Vorgaben, jedes Haus setzt diesen Block selbst. Fehlt
     * eine Zeile, stünde der Griff schriftlos und durchsichtig da – ohne
     * Fehler, ohne roten Lauf.
     *
     * SEIN GRUND IST IN JEDEM ZIMMER DERSELBE, SEINE SCHRIFT GEHÖRT DEM
     * HAUS. Hier stand „Der Tresen wird an seiner FORM wiedererkannt, nicht
     * an seiner Farbe" – und dann war jede Farbe ein Hausverweis, der
     * Grund eingeschlossen. Die Lade stand damit im Blech des Zimmers: hier
     * blaugrau, drüben mit einem Stich ins Teal, und drüben schrieben
     * obendrein fünf Überschriften in vollem Bildröhrengrün. Das las sich
     * nicht wie ein Rahmen, sondern wie ein Bauteil des Spiels, das man
     * versehentlich aufgezogen hat.
     *
     * DIE GRENZE VERLÄUFT AN DER KANTE DER LADE. Draußen am Griff ist die
     * Hausfarbe Fläche und Schrift – er ist das Wiedererkennungszeichen und
     * steht auf dem Bild des Zimmers. Drinnen ist sie nur noch Zeichen:
     * das Plus der Klappen, der Raumcode, die Kante des offenen Vorgangs,
     * der eine starke Knopf. Was in der Lade ÜBERSCHRIFT ist, steht in
     * --tr-schrift.
     */
    --tr-grund: var(--bm-graphit);
    --tr-grund-tief: var(--bm-graphit-tief);
    /*
     * ZWEI KANTEN, ZWEI AUFGABEN – die Rechnung steht oben beim Graphit.
     * --tr-linie gliedert (1.23:1) und steht als Deckung da und nicht als
     * Verweis: Eine Haarlinie ist kein Ton dieses Hauses, sondern ein
     * Anteil Licht, der sich mit dem mischt, worauf er liegt. Auf
     * --tr-grund-tief ergibt derselbe Strich #212123 und 1.20:1.
     * --tr-linie-griff begrenzt Bedienelemente (3.62:1).
     */
    --tr-linie: rgba(255, 255, 255, 0.08);
    --tr-linie-griff: var(--bm-graphit-kante);
    --tr-schrift: var(--bm-paper);
    --tr-schrift-still: var(--bm-paper-dim);
    --tr-marke: var(--bm-mustard);
    --tr-signal: var(--bm-signal);
    /*
     * DAS SIGNAL ALS FLÄCHE GIBT ES NICHT LESBAR. Der Schließer der Lade
     * trug im Hover --bm-signal mit dunkler Schrift darauf: 3.87:1. Das ×
     * misst 22,4 px und ist nicht fett, ist also kein Large Text – nötig
     * sind 4,5:1. Papier auf demselben Rot hält 3.74:1, es gibt also keine
     * Richtung, die hält. Diese Fassung trägt --tr-schrift mit 6.83:1.
     */
    --tr-signal-tief: var(--bm-signal-deep);
    --tr-font-amt: var(--bm-font-amt);
    --tr-font-doc: var(--bm-font-doc);
    --tr-font-mono: var(--bm-font-mono);
    --tr-font-kopf: var(--bm-font-display);
    /*
     * DIE WORTMARKE DES HAUSES GEHOERT DEM HAUS.
     *
     * Alle anderen Schriften des Tresens sind die dieses Zimmers — er nimmt
     * die Handschrift an, in der er steht. Genau eine Zeile tut das nicht:
     * das Wort „tableroom" im Kopf der Lade und am Griff. Es benennt nicht
     * dieses Spiel, sondern das Haus darueber, und in der Plakatschrift des
     * Zimmers gesetzt las es sich wie ein weiterer Vorgang des Kartells.
     *
     * Die Systemschrift ist dieselbe wie im Foyer (`--hub-font-text`), und
     * sie ist absichtlich KEINE Datei: Das Foyer laedt fuer Buchstaben nichts
     * nach, und ein Rahmen, der in jedem Zimmer eine Schrift mitbraechte,
     * waere in jedem Zimmer eine Anfrage mehr.
     */
    --tr-font-marke: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
    /* Derselbe Schleier wie unter Rechtliches und Wurfzettel – eine Zahl. */
    --tr-schleier: rgba(11, 11, 13, 0.85);
    /*
     * DIE LADE ATMET NICHT ÜBER IHRE BREITE, SONDERN ÜBER IHRE LUFT.
     *
     * 21rem waren 336 px; 340 px sind vier mehr, also 1,2 Prozent – das
     * allein hätte den Befund „technisch gequetscht" nicht angefasst. Was
     * ihn erzeugt hat, ist --tr-luft: 0.7rem sind 11,2 px Innenrand für
     * Rumpf, Balken, Fachabstand und Meldebogen zugleich. 0.85rem sind
     * 13,6 px. Auf 375 px bleiben damit 340 − 2 × 13,6 − 1 px Kante =
     * 311,8 px Inhalt gegenüber 336 − 2 × 11,2 − 1 = 312,6 px vorher, also
     * 0,8 px weniger Breite für spürbar mehr Rand. Was ein einzelner Knopf
     * darin wirklich misst, hängt an der Schrift und steht hier bewusst
     * nicht als Zahl.
     */
    --tr-lade: 340px;
    --tr-griff: 44px;
    --tr-luft: 0.85rem;
    --tr-fuss-luft: 5.25rem;
    --tr-ebene: 30;
    --tr-schnell: var(--bm-schnell);
}
