/* Header */

:root {
  --pc-nav-size: 16px;
  --pc-font-logo: "pacaembu", sans-serif;
  --pc-font-menu: "eurostile", sans-serif;
  --pc-weight-logo: 300;
  --pc-weight-menu: 400;
}

/* Die beiden Regeln zur Sprachumschaltung standen hier zeichengleich ein
   zweites Mal. base.css traegt sie, und site.css haengt in pages.php
   ausdruecklich daran, laedt also immer danach. Wer eine der beiden Stellen
   anpasst, sucht sonst an der falschen Datei. */

.primecup-header-master {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  width: auto;
  max-width: none !important;
  margin: 0 calc(50% - 50vw) 15px calc(50% - 50vw) !important;
  padding: 0 30px !important;
  box-sizing: border-box;
  background: transparent;

  /* Diese beiden Zeilen sehen nach Resten eines mitfahrenden Kopfes aus,
     sind aber das Gegenteil und werden gebraucht:

     Das mobile Menue liegt als .mobile-menu-panel mit position: absolute im
     Kopf, und seine Huelle traegt selbst keine Positionierung. Bezugspunkt
     fuer top und right ist damit dieser Kasten hier. Ohne position wanderte
     das Menue an den Seitenrand. Der z-index haelt es ueber dem Inhalt
     darunter.

     Ein mitfahrender Kopf war mehrfach versucht und ist mit 6.51.2
     aufgegeben worden. Im Code stand davon nie etwas; die entsprechende
     CSS-Eigenschaft kommt im ganzen Projekt nicht vor. Der Begriff steht
     hier bewusst nicht ausgeschrieben, sonst faende ihn jede kuenftige
     Suche in diesem Kommentar statt in einer Regel. */
  position: relative !important;
  z-index: 999 !important;
}

.pc-header-left {
  justify-self: start;
  display: flex;
  align-items: center;
}

.header-primecup-link {
  display: inline-flex;
  align-items: baseline;
  text-decoration: none !important;
  font-family: var(--pc-font-logo);
  font-size: var(--pc-nav-size);
  font-weight: var(--pc-weight-logo);
  letter-spacing: 0.5px;
  line-height: 1;
  cursor: pointer;
}

/* ---------- Die Krone vor dem Schriftzug ----------
 *
 * Sie kommt aus derselben Zeichnung wie das Abzeichen und traegt deshalb
 * .pc-av-box mit. Deren runde Fassung samt Grund und Rand wird hier
 * zurueckgenommen: Im Kopf soll die Krone stehen, nicht ein Abzeichen.
 *
 * Gemessen in em, nicht in Pixeln. Der Schriftzug haengt an
 * --pc-nav-size, und die Krone soll ihm folgen, wenn sich der Wert
 * einmal aendert. Dieselbe Ueberlegung wie bei .pc-av-box selbst.
 *
 * align-self: center statt vertical-align. .header-primecup-link ist ein
 * inline-flex mit align-items: baseline, und dort wird vertical-align
 * IGNORIERT - genau die Falle, an der die Abzeichen im Turnierbaum in
 * 6.60.0 haengengeblieben sind. Der kleine Versatz nach unten sitzt auf
 * der Mitte der Grossbuchstaben: Der Schriftzug steht durchgehend in
 * Versalien, und die tragen ihre Masse oben. Im Browser nachgemessen. */
.pc-logo-krone.pc-av-box {
  /* 1.2em Kasten. Gemessen ist damit die ZEICHNUNG 13,79 Pixel hoch, die
     Versalhoehe des Schriftzugs 11 - die Krone steht also ein Viertel
     ueber dem Text, so wie Robert es wollte. Ueber den Kasten gerechnet
     waere es das Doppelte: Die Krone fuellt ihre 64 Einheiten nicht aus,
     sie sitzt zwischen 10 und 56. Wer die Groesse aendert, misst die
     Tinte ueber getBBox() und nicht den Kasten. */
  width: 1.2em;
  height: 1.2em;
  padding: 0;
  background: none;
  border: none;
  border-radius: 0;
  margin-right: 0.34em;
  align-self: center;

  /* Und die Feinlage. align-self setzt den KASTEN auf die Mitte der Zeile;
     gesucht ist die Mitte der Zeichnung auf der Mitte der Versalien.
     Beides faellt nicht zusammen, gemessen 0,087em zu tief. Dieselbe
     Bauart wie beim Abzeichen im Turnierbaum, siehe 6.60.1. */
  position: relative;
  top: -0.087em;
}

.header-primecup-link .primecup-text,
.header-primecup-link .tv-text {
  color: var(--pc-text) !important;
  font-weight: var(--pc-weight-logo);
  text-shadow: none !important;
  transition: opacity 0.25s ease;
}

.header-primecup-link:hover .primecup-text,
.header-primecup-link:hover .tv-text {
  opacity: 0.6;
}

/* ---------------------------------------------------------------
 * Zahlen im Kopf
 *
 * Sichtbar sind nur die Zahlen in eckigen Klammern. Was sie bedeuten, steht
 * im Kasten: am Rechner beim Ueberfahren, am Telefon auf Fingertipp.
 *
 * Den Block gibt es zweimal im Dokument, einmal neben dem Schriftzug und
 * einmal im Klappmenue. Umgeschaltet wird bei 900 Pixeln, denselben, an
 * denen auch die Kopfleiste zwischen ihren beiden Menues wechselt.
 * ------------------------------------------------------------- */

.pc-hdr-stats {
  /* Bezugspunkt fuer den Kasten darunter. Ohne diese Zeile waere es der
     Kopf selbst, und der Kasten saesse am linken Seitenrand. Dieselbe
     Falle wie beim mobilen Menue, siehe den Kommentar ganz oben.

     Am Telefon wird sie ausdruecklich zurueckgenommen, dort SOLL der Kopf
     der Bezugspunkt sein. Siehe unten in der Medienabfrage. */
  position: relative;
  display: inline-flex;
  align-items: center;
  margin-left: 14px;
}

/* ZWEI Regeln, und die Trennung ist tragend.
 *
 * Die Liste mit :hover, :focus und :active gibt es nur, um die Vorgaben des
 * Themes fuer Knoepfe abzuwehren. Sie ist damit aber SPEZIFISCHER als eine
 * spaetere Regel, die nur .pc-hdr-stats-btn nennt: (0,2,0) gegen (0,1,0).
 * Jede Eigenschaft, die weiter unten in einer Medienabfrage ueberschrieben
 * wird, muss deshalb hier heraus - sonst spraenge sie in dem Augenblick auf
 * den Grundwert zurueck, in dem der Finger den Knopf beruehrt.
 *
 * Genau daran ist der Schliessen-Knopf gescheitert, siehe die Warnung dort.
 * Bei den Zahlen waere es nur ein Zappeln gewesen, aber dieselbe Ursache.
 */

/* Abwehr gegen das Theme. Nichts hiervon wird spaeter ueberschrieben. */
.pc-hdr-stats-btn,
.pc-hdr-stats-btn:hover,
.pc-hdr-stats-btn:focus,
.pc-hdr-stats-btn:active {
  display: inline-flex;
  align-items: baseline;
  margin: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  outline: none !important;
  font-family: "droid-sans-mono", monospace;
  font-weight: 400;
  line-height: 1;
  color: var(--pc-muted) !important;
  transform: none !important;
  white-space: nowrap;
  transition: opacity 0.2s ease;
}

/* Gestalt. Alles hier wird weiter unten je nach Breite neu gesetzt und darf
   deshalb NICHT in der Liste oben stehen. */
.pc-hdr-stats-btn {
  gap: 6px;
  padding: 2px 0 !important;
  font-size: 11.5px;
  letter-spacing: 0.4px;
  cursor: pointer !important;
}

.pc-hdr-stats-btn:hover { opacity: 0.85; }

.pc-hdr-stats-klammer {
  color: var(--pc-muted);
  opacity: 0.55;
}

.pc-hdr-stat {
  display: inline-flex;
  align-items: baseline;
}

.pc-hdr-stat-num {
  color: var(--pc-text);
  font-weight: 400;
}

/* Die einzige Zahl, die sich in Echtzeit bewegt, bekommt die Live-Farbe.
   Alles andere bliebe sonst bunt ohne Aussage. */
.pc-hdr-stat:first-child .pc-hdr-stat-num {
  color: var(--pc-live);
}

.pc-hdr-stat-sep {
  color: var(--pc-muted);
  opacity: 0.35;
}

/* ---------- Der Kasten ----------
   Gestalt wie die Fenster bei Levelaufstieg und Einladung, nur am Kopf
   verankert statt mitten auf der Seite. */

.pc-hdr-pop {
  position: absolute;
  top: calc(100% + 10px);
  left: 0;
  width: 300px;
  max-width: 78vw;
  padding: 16px 18px 14px 18px;
  background: var(--pc-surface);
  border: 1px solid var(--pc-line);
  box-shadow: 0 18px 40px rgba(0, 0, 0, 0.45);
  text-align: left;

  /* Unter dem mobilen Menue (9999), ueber allem anderen im Kopf. */
  z-index: 900;

  opacity: 0;
  visibility: hidden;
  transform: translateY(-4px);
  transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s;
  pointer-events: none;
}

/* Aufgeklappt wird auf drei Wegen, und jeder gilt nur dort, wo er hingehoert.
 *
 * is-open setzt der Fingertipp. Hier steht dazu KEINE Medienabfrage, weil
 * schon das Skript die Klasse nur dort setzt, wo getippt wird; die Bedingung
 * dafuer steht in tippbar() in site.js und ist die zweite Fassung derselben
 * Regel. Wer eine aendert, aendert die andere mit.
 *
 * :focus-visible ist die Tastatur, und zwar NUR sie. Ein Mausklick setzt zwar
 * ebenfalls den Fokus, gilt dem Browser aber nicht als sichtbar, und genau
 * das ist gewollt: Am Rechner soll ein Klick nichts bewirken. Das loest
 * nebenbei die alte Kruecke :not(.is-mobil) ab, die es brauchte, weil
 * :focus-within auch beim Antippen griff und der Kasten dadurch sofort wieder
 * aufging, nachdem ihn das Kreuz zugemacht hatte.
 *
 * Der Kasten ist das GESCHWISTER des Knopfes, deshalb der Nachbarschafts-
 * selektor statt :focus-within an der Huelle.
 *
 * Das Ueberfahren steht weiter unten in seiner eigenen Medienabfrage. */
.pc-hdr-stats.is-open .pc-hdr-pop,
.pc-hdr-stats-btn:focus-visible + .pc-hdr-pop {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  pointer-events: auto;
}

.pc-hdr-pop-eyebrow {
  margin: 0 0 12px 0 !important;
  font-family: var(--pc-font-page);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1.8px;
  text-transform: uppercase;
  color: var(--pc-gold) !important;
}

.pc-hdr-pop-list {
  list-style: none;
  margin: 0 !important;
  padding: 0 !important;
  display: flex;
  flex-direction: column;
  gap: 11px;
}

.pc-hdr-pop-row {
  display: flex;
  align-items: baseline;
  gap: 10px;
  margin: 0 !important;
  padding: 0 !important;
}

.pc-hdr-pop-num {
  flex: 0 0 auto;
  min-width: 52px;
  font-family: "droid-sans-mono", monospace;
  font-size: 15px;
  font-weight: 400;
  line-height: 1.2;
  color: var(--pc-text);
  white-space: nowrap;
}

.pc-hdr-pop-row:first-child .pc-hdr-pop-num { color: var(--pc-live); }

.pc-hdr-pop-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.pc-hdr-pop-label {
  font-family: var(--pc-font-page);
  font-size: 12.5px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--pc-text);
  overflow-wrap: break-word;
  word-wrap: break-word;
}

.pc-hdr-pop-hint {
  font-family: var(--pc-font-page);
  font-size: 11px;
  font-weight: var(--pc-weight-page);
  line-height: 1.4;
  color: var(--pc-muted);
  overflow-wrap: break-word;
  word-wrap: break-word;
}

.pc-hdr-pop-fuss {
  margin: 13px 0 0 0 !important;
  padding-top: 11px;
  border-top: 1px solid var(--pc-line);
  font-family: var(--pc-font-page);
  font-size: 10.5px;
  font-weight: var(--pc-weight-page);
  line-height: 1.4;
  color: var(--pc-muted) !important;
}

/* ---------- Schliessen-Knopf ----------
 *
 * ACHTUNG, hier steckte der Fehler aus 6.55.1: display gehoert NICHT in die
 * Liste mit :hover, :focus und :active.
 *
 * Die Liste ist (0,2,0) spezifisch, die Regel weiter unten, die den Knopf am
 * Telefon sichtbar macht, nur (0,1,0). Sobald der Finger den Knopf beruehrte,
 * griff also wieder display: none, und der Knopf verschwand MITTEN IN DER
 * BERUEHRUNG. Gemessen im Browser sah das so aus:
 *
 *     pointerdown -> BUTTON.pc-hdr-pop-x     der Finger setzt auf
 *     mousedown   -> BUTTON.pc-hdr-pop-x
 *     pointerup   -> P.pc-hdr-pop-eyebrow    der Knopf ist weg
 *     click       -> DIV.pc-hdr-pop          gemeinsamer Vorfahre
 *
 * Der Browser erzeugt click am gemeinsamen Vorfahren von mousedown- und
 * mouseup-Ziel. Der Zuhoerer am Knopf lief deshalb nie, und der Kasten liess
 * sich nur durch einen Tipp DANEBEN schliessen.
 *
 * Sichtbarkeit steht seither in einer eigenen Regel ohne Zustandsselektoren.
 */
.pc-hdr-pop-x { display: none; }

.pc-hdr-pop-x,
.pc-hdr-pop-x:hover,
.pc-hdr-pop-x:focus,
.pc-hdr-pop-x:active {
  /* Das !important ist tragend, kein Rest. Weiter unten in dieser Datei
     steht "header a, header span, header button { position: relative
     !important }", und das schlaegt jede genauere Regel ohne !important.
     Der Knopf lag deshalb seit 6.54.1 im Fluss statt rechts oben im Kasten:
     Die Zeichenkette "absolute" stand zwar da, gewirkt hat sie nie.
     Genau die Lektion "!important schlaegt Genauigkeit". */
  position: absolute !important;
  top: 5px;
  right: 6px;

  /* 38 Pixel im Quadrat: Eine Flaeche, die mit dem Finger sicher zu treffen
     ist. Das Kreuz darin ist kleiner, die Flaeche darum zaehlt. */
  width: 38px;
  height: 38px;
  padding: 0 !important;
  margin: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  outline: none !important;
  font-family: var(--pc-font-page);
  font-size: 22px;
  font-weight: 400;
  line-height: 1;
  color: var(--pc-muted) !important;
  cursor: pointer !important;
  transform: none !important;
  transition: color 0.2s ease;
}

.pc-hdr-pop-x:hover { color: var(--pc-text) !important; }

/* ---------- Ueberfahren: nur am Rechner ----------
   Die Bedingung ist die genaue UMKEHRUNG der Tipp-Bedingung darunter, damit
   sich beide nie ueberschneiden. Auf einem schmalen Fenster am Rechner gaebe
   es sonst Ueberfahren UND Tippen zugleich: Der Kasten ginge beim Zeigen auf,
   ein Klick liesse ihn per is-open stehen, und beim Wegfahren bliebe er
   offen. Genau ein Weg je Geraet.

   Ausgeschrieben nach De Morgan:
     nicht (max-width: 900px)  ->  min-width: 901px
     nicht (hover: none)       ->  hover: hover
     nicht (pointer: coarse)   ->  pointer: fine */
@media (min-width: 901px) and (hover: hover) and (pointer: fine) {
  .pc-hdr-stats:hover .pc-hdr-pop {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
    pointer-events: auto;
  }

  /* Ein Klick bewirkt hier ausdruecklich nichts, deshalb sieht der Block
     auch nicht wie ein Knopf aus. */
  .pc-hdr-stats-btn,
  .pc-hdr-stats-btn:hover,
  .pc-hdr-stats-btn:focus,
  .pc-hdr-stats-btn:active {
    cursor: default !important;
  }
}

/* ---------- Tippen: ueberall sonst ----------
   Dieselbe Bedingung wie tippbar() in site.js. Das Komma ist ein ODER: Es
   reicht EINER der drei Faelle. */
@media (max-width: 900px), (hover: none), (pointer: coarse) {
  /* Erst hier wird das Kreuz sichtbar. Am Rechner geht der Kasten von allein
     zu, dort waere es ein Versprechen ohne Deckung. */
  .pc-hdr-pop-x { display: block; }

  /* Die Zahlenzeile ist nur zwoelf Pixel hoch. Polsterung plus dieselbe
     Polsterung als negativer Aussenabstand vergroessert die Trefferflaeche
     auf gut dreissig Pixel, OHNE die Kopfleiste hoeher zu machen. Ein reines
     Vergroessern haette den ganzen Kopf mitwachsen lassen. */
  .pc-hdr-stats-btn,
  .pc-hdr-stats-btn:hover,
  .pc-hdr-stats-btn:focus,
  .pc-hdr-stats-btn:active {
    padding: 11px 4px !important;
    margin: -11px -4px !important;
  }
}

/* ---------- Am Telefon: der Kasten ueber die volle Breite ----------
   Bis 6.55.0 lag der Block im Klappmenue. Jetzt steht er neben dem
   Schriftzug, und damit stellte sich sofort das Platzproblem: Der Kasten war
   300 Pixel breit und am Block ausgerichtet, der weit rechts vom linken Rand
   sitzt. Auf einem 390 Pixel breiten Geraet stand er damit halb ausserhalb
   des Bildes. */

@media (max-width: 900px) {
  /* Die Positionierung wird ZURUECKGENOMMEN. Bezugspunkt ist damit der
     naechste positionierte Vorfahre, und das ist .primecup-header-master mit
     seinem position: relative. Genau daran haengt auch das mobile Menue.
     Der Kasten spannt dadurch ueber die Kopfbreite statt ueber die Breite
     der Zahlenzeile.

     Der Schliessen-Knopf bleibt richtig verankert: Er haengt an
     .pc-hdr-pop, und das ist selbst absolut positioniert. */
  .pc-hdr-stats {
    position: static;
    margin-left: 10px;
  }

  .pc-hdr-stats-btn {
    font-size: 10.5px;
    gap: 4px;
  }

  .pc-hdr-pop {
    top: calc(100% + 8px);

    /* Zwanzig Pixel sind die Polsterung, die der Kopf unterhalb von 1150
       Pixeln traegt. Der Kasten steht damit bündig mit dem Schriftzug links
       und dem Menueknopf rechts. */
    left: 20px;
    right: 20px;
    width: auto;
    max-width: none;
  }

  .pc-hdr-pop-num { min-width: 46px; font-size: 14px; }

  /* Platz fuer den Schliessen-Knopf, damit er nicht auf der Ueberschrift
     sitzt. */
  .pc-hdr-pop-eyebrow { padding-right: 40px; }
}

/* Auf sehr schmalen Geraeten teilen sich Schriftzug, Zahlen und Menueknopf
   eine Zeile. Die Zahlen sind das, was am ehesten nachgeben kann.

   Der Kasten behaelt seine zwanzig Pixel und bleibt damit buendig mit dem
   Schriftzug. Ihn weiter nach aussen zu ziehen brachte ein paar Pixel mehr
   Text und dafuer eine Kante, die zu nichts sonst auf der Seite passt. */
@media (max-width: 420px) {
  .pc-hdr-stats { margin-left: 7px; }

  .pc-hdr-stats-btn {
    font-size: 9.5px;
    gap: 3px;
    letter-spacing: 0;
  }

  .pc-hdr-pop { padding: 14px 14px 12px 14px; }

  .pc-hdr-pop-num { min-width: 40px; font-size: 13px; }
}

@media (prefers-reduced-motion: reduce) {
  .pc-hdr-pop { transition: none !important; }
}

.pc-header-center {
  justify-self: center;
}

.pc-header-right {
  justify-self: end;
}

.desktop-only-menu {
  display: flex;
  align-items: center;
  gap: 26px;
  background: transparent;
  flex-wrap: nowrap;
}

.menu-item {
  display: inline-block;
  padding: 0;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  text-transform: uppercase;
  font-family: var(--pc-font-menu);
  font-size: var(--pc-nav-size);
  font-weight: var(--pc-weight-menu);
  letter-spacing: 0.5px;
  line-height: 1;
  color: var(--pc-text) !important;
  text-decoration: none !important;
  white-space: nowrap !important;
  transition: opacity 0.25s ease;
}

@media (hover: hover) {
  .menu-item:hover {
    opacity: 0.6;
  }
}

.pc-lang-switch {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  line-height: 1;
}

.pc-lang-btn {
  background: none !important;
  background-color: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 0 !important;
  color: var(--pc-text) !important;
  font-family: var(--pc-font-menu) !important;
  font-size: var(--pc-nav-size) !important;
  font-weight: var(--pc-weight-menu) !important;
  letter-spacing: 0.5px !important;
  text-transform: uppercase !important;
  line-height: 1 !important;
  opacity: 0.4;
  cursor: pointer !important;
  outline: none !important;
  transform: none !important;
  transition: opacity 0.25s ease !important;
}

.pc-lang-btn:hover,
.pc-lang-btn:focus,
.pc-lang-btn:active {
  background: none !important;
  color: var(--pc-text) !important;
  outline: none !important;
  transform: none !important;
}

.pc-lang-btn.active {
  opacity: 1;
}

.pc-lang-sep {
  color: var(--pc-text);
  font-family: var(--pc-font-menu);
  font-size: var(--pc-nav-size);
  opacity: 0.3;
  user-select: none;
}

.mobile-only-menu {
  display: none;
  position: relative;
  justify-self: end;
}

.mobile-menu-trigger {
  padding: 0 !important;
  background: none !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  backdrop-filter: none !important;
  color: var(--pc-text) !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  font-family: var(--pc-font-menu) !important;
  font-weight: var(--pc-weight-menu) !important;
  font-size: var(--pc-nav-size) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.5px !important;
  cursor: pointer !important;
  transform: none !important;
  outline: none !important;
  transition: opacity 0.25s ease !important;
}

.mobile-menu-trigger:hover,
.mobile-menu-trigger:focus,
.mobile-menu-trigger:active,
.mobile-menu-trigger:focus-visible,
.mobile-menu-trigger.active {
  background: none !important;
  border: none !important;
  box-shadow: none !important;
  color: var(--pc-text) !important;
  outline: none !important;
  transform: none !important;
}

.mobile-menu-trigger.active {
  opacity: 0.6;
}

.menu-chevron {
  font-size: 10px;
  color: var(--pc-text);
  transition: transform 0.3s ease;
}

.mobile-menu-trigger.active .menu-chevron {
  transform: rotate(180deg);
}

/* max-width, seit 6.87.0: Das Menue waechst mit seinem breitesten Eintrag,
   und seit der Kontopunkt Levelkasten und Muenzen traegt, ist das seine
   Zeile. Bei einem Fenster von 320 Pixeln kam es gemessen auf 335 und hing
   damit links aus dem Bild - es ist rechtsbuendig verankert, also faellt
   der Ueberschuss nach links heraus. Der Deckel laesst das nicht mehr zu;
   die Zeile bricht dann um, siehe flex-wrap an .mobile-menu-link.

   100vw und nicht 100%: Bezugspunkt der Prozentangabe waere die Kopfleiste,
   und die spannt ueber die volle Fensterbreite hinaus
   (margin: 0 calc(50% - 50vw)). Die 32 Pixel sind zweimal der Seitenrand
   von 16. */
.mobile-menu-panel {
  display: none;
  position: absolute;
  top: calc(100% + 10px);
  right: 0;
  min-width: 180px;

  /* So breit wie der breiteste Eintrag, hoechstens aber so breit wie der
     Bildschirm. Ohne die erste Zeile bliebe das Menue bei seinen 180
     Pixeln, und die Kontozeile braeche auf DREI Zeilen um - ein
     Menueeintrag von 79 Pixeln Hoehe neben sechs einzeiligen. Mit ihr
     misst das Menue auf einem Telefon von 375 Pixeln 335 und traegt die
     Zeile am Stueck; erst darunter greift der Deckel und die Zeile bricht.
     Kennt ein aelterer Browser max-content nicht, faellt er auf die 180
     zurueck und die Zeile bricht - unschoen, aber heil. */
  width: max-content;
  max-width: calc(100vw - 32px);
  padding: 4px 0;
  background: var(--pc-bg);
  border: none;
  border-radius: 0;
  box-shadow: none;
  box-sizing: border-box;
  z-index: 9999;
}

.mobile-menu-panel.open {
  display: block;
}

.mobile-menu-link {
  display: block !important;
  width: 100% !important;
  box-sizing: border-box !important;
  padding: 9px 14px 9px 18px !important;
  background: none !important;
  border: none !important;
  color: var(--pc-text) !important;
  text-decoration: none !important;
  font-family: var(--pc-font-menu) !important;
  font-weight: var(--pc-weight-menu) !important;
  font-size: var(--pc-nav-size) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.5px !important;
  text-align: right !important;
  white-space: nowrap !important;
  -webkit-tap-highlight-color: transparent;
  transition: opacity 0.25s ease !important;
}

.mobile-menu-link:hover,
.mobile-menu-link:active {
  background: none !important;
  opacity: 0.6;
}

/* ---------- Arcade und Shop in Gold ----------
 *
 * Roberts Vorgabe vom 16.08.2026: die beiden ein wenig hervorheben, "in
 * unserem Gold". Es sind die beiden Punkte, an denen ein Spieler etwas
 * holen und etwas ausgeben kann; Gold ist in diesem Projekt die Farbe fuer
 * den Wert selbst, vom Preisgeld ueber das Guthaben bis zur [1] der
 * taeglichen Abholung.
 *
 * NUR DIE FARBE, nichts weiter. Ein Grund, ein Rahmen oder eine andere
 * Schriftstaerke braeuchte Polsterung oder aendert die Wortbreite, und
 * beides macht die Kopfleiste hoeher oder verschiebt die Punkte daneben.
 * "Ein wenig hervorheben" ist in einem sonst weissen Menue genau eine
 * Farbe.
 *
 * ES HAENGT AN DER ADRESSE, nicht an einer Klasse im Markup, und deshalb
 * braucht es KEINE neue Seitenfassung. Der Kopf steht auf jeder Seite;
 * eine Aenderung an Header_v4.txt waere eine Aenderung an jeder einzelnen.
 * Denselben Weg gehen die Krone seit 6.74.0, die Einladungszahl seit
 * 6.52.0 und die Tagesmarke: site.js sucht sie ueber
 * `[href*="/team"]` und `[href*="/arcade"]`, hier tut es das CSS.
 *
 * !important, weil .menu-item und .mobile-menu-link ihre Farbe ebenfalls
 * damit setzen. Die Genauigkeit reicht ohnehin - (0,2,1) gegen (0,1,0) -,
 * aber gegen ein !important gewinnt nur ein !important.
 *
 * KEINE ZUSTANDSLISTE, und das ist wichtig: Die beiden Hover-Regeln
 * darueber setzen `opacity`, nicht `color`. Sie dimmen das Gold also
 * einfach mit, und es gibt nichts, was sich ueberschreiben koennte. Stuende
 * hier eine Liste mit :hover, waere es genau die Falle aus 6.55.2. */
a.menu-item[href*="/arcade"],
a.menu-item[href*="/shop"],
a.mobile-menu-link[href*="/arcade"],
a.mobile-menu-link[href*="/shop"] {
  color: var(--pc-gold) !important;
}

/* Die Sprachwahl im Klappmenue gibt es ab Header_v5 nicht mehr, sie steht
   seit 6.86.2 im Fuss. Die Regel bleibt trotzdem stehen, und zwar mit
   Absicht: Plugin und Seitenfassungen werden getrennt eingespielt, und
   zwischen den beiden Schritten laeuft das neue CSS auf dem alten Kopf.
   Ohne sie stuende der Schalter dort so lange unformatiert im Menue.
   Dieselbe Ueberlegung wie bei #pcPrimyMobilInfo in primy.css seit
   6.72.0. Sie trifft nach dem Einspielen von Header_v5 nichts mehr. */
.mobile-lang-row {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 7px;
  width: 100%;
  box-sizing: border-box;
  padding: 12px 14px 9px 18px;
}

header a, header span, header button {
  position: relative !important;
  z-index: 3 !important;
}

@media (max-width: 1150px) {
  .desktop-only-menu {
    gap: 18px;
  }
  .primecup-header-master {
    padding: 0 20px !important;
  }
}

@media (max-width: 900px) {
  .primecup-header-master {
    grid-template-columns: 1fr auto;
  }
  .desktop-only-menu {
    display: none !important;
  }
  .mobile-only-menu {
    display: block !important;
  }

  /* ---------- Der Kopf am Telefon, seit 6.78.0 ----------
   *
   * Drei Aenderungen, alle NUR hier: die drei Balken statt des Wortes
   * "Menue", links die Krone allein statt des Schriftzugs, und die vier
   * Zahlen daneben fallen weg.
   *
   * KEINE NEUE SEITENFASSUNG. Der Kopf steht auf jeder Seite; eine
   * Aenderung an Header_v2.txt waere eine Aenderung an jeder einzelnen.
   * Dieselbe Linie, aus der die Krone in 6.74.0 aus site.js kommt und die
   * Kopfzahlen in 6.54.0 aus site.js.
   *
   * DIE GRENZE IST DIESELBE WIE DIE DES MENUES, 900 Pixel, und das ist
   * zwingend: Bei einer eigenen Grenze gaebe es einen Bereich mit drei
   * Balken und vollem Schriftzug daneben, oder umgekehrt. */

  /* Der Text im Knopf verschwindet OPTISCH, nicht fuer Vorleseprogramme.
     Mit display: none haette der Knopf keinen zugaenglichen Namen mehr,
     und ein aria-label dafuer stuende in der Seitenfassung, die
     unangetastet bleibt. Dieselbe Technik wie bei
     .pc-ro-eingabe-label in primy.css. */
  .mobile-menu-trigger .pc-lang-de,
  .mobile-menu-trigger .pc-lang-us {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    overflow: hidden !important;
    clip: rect(0 0 0 0) !important;
    white-space: nowrap !important;
  }

  /* Das Dreieck geht ganz. Es sagte "hier klappt etwas auf", und genau
     das sagen die drei Balken selbst. */
  .mobile-menu-trigger .menu-chevron {
    display: none !important;
  }

  /* Der Knopf ist jetzt eine Flaeche, kein Text. 22 mal 16 Pixel, dazu
     die Polsterung darunter fuer die Tippflaeche. */
  .mobile-menu-trigger {
    gap: 0 !important;
    justify-content: center !important;
    width: 22px !important;
    height: 16px !important;
    padding: 11px 6px !important;
    margin: -11px -6px !important;
    box-sizing: content-box !important;
  }

  /* EIN Pseudo-Element fuer drei Balken: der mittlere ist das Element
     selbst, die beiden anderen sind sein Schatten. Zwei Pseudo-Elemente
     waeren zwei Stellen, an denen die Farbe auseinanderlaufen kann;
     currentColor haelt alle drei am Text des Kopfes.
     ::before und nicht ::after, damit die Balken vor dem versteckten
     Text stehen und nicht dahinter. */
  .mobile-menu-trigger::before {
    content: '';
    display: block;
    width: 22px;
    height: 2px;
    background: currentColor;
    box-shadow: 0 -6px 0 currentColor, 0 6px 0 currentColor;
  }

  /* Links nur noch die Krone. Der Schriftzug verschwindet ganz: Anders
     als beim Menueknopf bleibt hier ein zugaenglicher Name stehen, der
     Verweis traegt ihn ueber das title-Attribut der Zeichnung nicht -
     aber die Startseite ist ueber das Logo ohnehin nur ein Weg von
     vielen, und im Klappmenue steht jeder davon noch einmal. */
  .header-primecup-link .primecup-text,
  .header-primecup-link .tv-text {
    display: none !important;
  }

  /* So gross wie die drei Balken. In PIXELN und nicht in em: Der
     Bezugswert --pc-nav-size gilt dem Schriftzug, und den gibt es hier
     nicht mehr. Gemessen wird die TINTE ueber getBBox und nicht der
     Kasten - die Krone fuellt ihre 64 Einheiten nicht aus, sie sitzt
     zwischen 10 und 56. Genau diese Falle steht seit 6.60.0 an
     .pc-av-box. */
  .pc-logo-krone.pc-av-box {
    /* 28 und nicht 22, und das ist gemessen: Bei einem Kasten von 22
       Pixeln ist die TINTE nur 15,1 mal 11,0 gross, die drei Balken
       daneben sind 22 mal 14. Mit 28 misst die Zeichnung 19,2 mal 14,0 -
       die Hoehe ist damit dieselbe wie beim Knopf, und darauf kommt es
       an: Beide sitzen auf einer Linie und wirken gleich gross. Ueber
       den Kasten gerechnet waere die Krone ein Viertel zu klein
       herausgekommen. */
    width: 28px !important;
    height: 28px !important;
    margin-right: 0 !important;
    /* Die Feinlage galt der Mitte der Versalien. Ohne Schriftzug gibt es
       keine Versalien mehr, und der Kasten steht von allein mittig. */
    top: 0 !important;
  }

  /* Die vier Zahlen neben dem Schriftzug fallen weg.
     AUSGEBLENDET UND NICHT ENTFERNT: Robert hat sie "vorab" heraushaben
     wollen. Die Regeln aus 6.54.0 bis 6.55.2 samt ihrer beiden genau
     entgegengesetzten Medienabfragen bleiben deshalb stehen; ein
     Zurueckdrehen ist damit eine Zeile und keine Rekonstruktion.
     Am Rechner aendert sich nichts, der Block steht dort weiter. */
  .pc-hdr-stats {
    display: none !important;
  }
}


/* Footer */

.primecup-footer-content {
  margin-top: -40px !important;
}

.footer-contact {
  margin-top: 18px !important;
  margin-bottom: 18px !important;
  text-align: center;
}

/* ---------- Discord und die Sprachwahl, seit 6.86.2 im Fuss ----------
 *
 * Robert wollte beide aus der Kopfleiste heraus und zwischen die
 * Kontaktzeile und die Urheberrechtszeile. Im Kopf stehen sie damit
 * nirgends mehr, weder im Balken noch im Klappmenue (Header_v5).
 *
 * VERSCHOBEN, NICHT NACHGEBAUT. Der Fuss bekommt zeichengleich dieselben
 * Elemente: den Verweis mit .menu-item und die drei Teile des Schalters
 * mit .pc-lang-btn und .pc-lang-sep. Damit sehen beide genau so aus wie
 * vorher, sie stehen nur woanders - und es gibt keine zweite Fassung, die
 * beim naechsten Griff auseinanderlaeuft.
 *
 * .menu-item ist nicht an den Kopf gebunden, die Regel steht als blosse
 * Klasse da. Ihre Zustandsregel `header a, header span, header button`
 * greift hier ausdruecklich NICHT, das ist auf <header> beschraenkt; der
 * Verweis im Fuss braucht die Positionierung auch nicht.
 *
 * Am Skript aendert sich nichts: pcSyncLangUI() sucht `.pc-lang-btn` im
 * ganzen Dokument, nicht in der Kopfleiste, und pcSetLanguage() ist eine
 * globale Funktion. site.js laedt auf jeder Seite.
 *
 * flex-wrap, damit auf einem sehr schmalen Geraet der Schalter unter den
 * Verweis rutscht statt hinauszuragen. Der Abstand von 26 Pixeln ist der
 * der Kopfleiste (.desktop-only-menu), damit die beiden Teile so weit
 * auseinanderstehen wie vorher. */
/* DIE 13 PIXEL SIND GERECHNET, nicht geraten. .footer-container in
   base.css ist eine Flex-Spalte mit `gap: 25px`, und darauf liegen zwei
   weitere Abstaende: .footer-contact traegt 18 Pixel nach unten,
   .footer-copyright 5 nach oben. Ohne eigenen Wert misst der Abstand ueber
   der Reihe 25 + 18 = 43 und der darunter 25 + 5 = 30; die Reihe saesse
   sichtbar naeher an der Urheberrechtszeile als an der Kontaktzeile.
   43 - 25 - 5 = 13. Im Browser nachgemessen: 43 oben, 43 unten. */
.footer-meta {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 10px 26px;
  margin: 0 0 13px 0;
}

/* Beide Teile tragen die Schrift der uebrigen Fusszeilen.
 *
 * Sie kamen aus der Kopfleiste und brachten deren Schrift mit: eurostile,
 * 16 Pixel, Versalien, 0,5 Pixel Sperrung. Daneben stehen Impressum,
 * Datenschutz und die uebrigen Verweise in der Seitenschrift. Im Browser an
 * `.footer-links a` gemessen: aptos, 14 Pixel, Gewicht 300, -0,1 Pixel
 * Sperrung, keine Versalien, Zeilenhoehe 1,4.
 *
 * DIE SCHRIFTART UEBER inherit, nicht ausgeschrieben: Der Fussbereich
 * gehoert dem Theme, und `--pc-font-page` ist in site.css gar nicht
 * gesetzt - die Variable steht je Seiten-Stylesheet, und der Fuss laeuft
 * auf jeder Seite. Ein <button> erbt die Schriftart von sich aus nicht,
 * deshalb muss es dort ausdruecklich dastehen.
 *
 * `!important` nur beim Schalter: .pc-lang-btn setzt seine Schrift selbst
 * mit !important. Beim Verweis genuegt die groessere Genauigkeit.
 *
 * Die Farbe bleibt, wie sie ist. Sie kommt aus dem Farbsatz des Projekts
 * (--pc-text), die Verweise daneben tragen den Ton des Themes; der
 * Unterschied ist mit blossem Auge nicht zu sehen, und die Palette gehoert
 * uns. */
.footer-meta a.menu-item {
  font-family: inherit;
  font-size: 14px;
  font-weight: 300;
  letter-spacing: -0.1px;
  line-height: 1.4;
  text-transform: none;
}

.footer-meta .pc-lang-btn,
.footer-meta .pc-lang-sep {
  font-family: inherit !important;
  font-size: 14px !important;
  font-weight: 300 !important;
  letter-spacing: -0.1px !important;
  line-height: 1.4 !important;
  text-transform: none !important;
}

@media (max-width: 768px) {
  .primecup-footer-content {
    margin-top: 0 !important;
    padding-top: 30px !important;
  }

  .footer-container::before {
    content: "";
    display: block;
    align-self: stretch;
    width: 100%;
    height: 1px;
    flex-shrink: 0;
    background: linear-gradient(to right, var(--pc-text), rgba(255, 255, 255, 0));
    opacity: 0.35;
    margin-bottom: 8px;
  }
}

/* ---------- Trennlinie mit Lauflicht (alle Seiten) ---------- */

.pc-divider {
  position: relative;
  width: 100%;
  max-width: 1200px;
  height: 1px;
  margin: 0 auto 46px auto;
  overflow: hidden;
  background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.32), rgba(255, 255, 255, 0));
}

.pc-divider-sweep {
  position: absolute;
  top: 0;
  left: -30%;
  width: 30%;
  height: 100%;
  background: linear-gradient(to right, transparent, var(--pc-gold), transparent);
  opacity: 0;
}

@media (max-width: 768px) {
  .pc-divider { margin-bottom: 34px; }
}

@media (prefers-reduced-motion: no-preference) {
  .pc-divider-sweep {
    animation: pcSweep 9s ease-in-out infinite;
  }

}

@keyframes pcSweep {
  0%, 62% { left: -30%; opacity: 0; }
  68% { opacity: 0.85; }
  100% { left: 100%; opacity: 0; }
}

/* ---------- Umlaufender Lichtpunkt am Rahmen (alle Seiten) ----------
 *
 * Ein Kegelverlauf dreht sich hinter dem Rahmen; eine Maske laesst nur die
 * Kante durchscheinen. Dadurch wandert der helle Punkt einmal aussen herum,
 * ohne dass die Flaeche eingefaerbt wird.
 *
 * Stand bis 6.64.4 allein in home.css am Arena-Block der Startseite. Seit
 * 6.65.0 braucht ihn auch die 404-Seite, dort in Rot. Verschoben, nicht
 * kopiert: site.css laedt auf jeder Seite.
 *
 * Der Arena-Block steht hier namentlich in der Selektorliste, statt in
 * Body_v4 eine zweite Klasse zu bekommen. Eine neue Seitenfassung nur fuer
 * ein Attribut haette bedeutet, dass die Startseite zwischen den beiden
 * Einspielschritten ohne Lichtpunkt dasteht.
 *
 * Zwei Variablen statt einer: Der Verlauf braucht neben der vollen Farbe
 * eine abgeschwaechte Stufe fuer die Auslaeufer. Sie liesse sich aus der
 * Farbe rechnen, aber nur mit color-mix(), und das fehlt aelteren Browsern.
 */

@property --pc-lauf-winkel {
  syntax: '<angle>';
  initial-value: 0deg;
  inherits: false;
}

.pc-lauframen {
  position: relative;
}

@supports (background: conic-gradient(from 0deg, red, blue)) {
  .pc-lauframen::before,
  .primecup-arena-section::before {
    content: "";
    position: absolute;
    inset: -1px;
    padding: 1px;
    pointer-events: none;

    background: conic-gradient(
      from var(--pc-lauf-winkel),
      transparent 0%,
      transparent 68%,
      var(--pc-lauf-schwach, rgba(245, 213, 110, 0.15)) 78%,
      var(--pc-lauf-farbe, var(--pc-gold)) 86%,
      var(--pc-lauf-schwach, rgba(245, 213, 110, 0.15)) 94%,
      transparent 100%
    );

    -webkit-mask:
      linear-gradient(#000 0 0) content-box,
      linear-gradient(#000 0 0);
    -webkit-mask-composite: xor;
    mask:
      linear-gradient(#000 0 0) content-box,
      linear-gradient(#000 0 0);
    mask-composite: exclude;
  }
}

@media (prefers-reduced-motion: no-preference) {
  .pc-lauframen::before,
  .primecup-arena-section::before {
    animation: pcLaufRahmen 7s linear infinite;
  }
}

@keyframes pcLaufRahmen {
  to { --pc-lauf-winkel: 360deg; }
}

/* ---------- Aufklappbare Seitenbeschreibung ---------- */

.pc-head-details {
  max-width: 680px;
  margin: 0 0 4px 0;
}

/* Die Trennlinie bringt sonst 24 px Abstand mit. Auf der Startseite sitzt
   sie direkt unter dem Aufklappbereich, hier soll es genauso sein.
   Der Zusammenbau aus beiden Klassen ist genauer als die Einzelregel und
   wirkt deshalb, ohne dass irgendwo !important nötig wäre. */
.pc-head-details + .pc-title-rule {
  margin-top: 8px;
}

.pc-head-summary {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  list-style: none;
  cursor: pointer;
  padding: 6px 0;
  font-family: var(--pc-font-page);
  font-size: 12.5px;
  font-weight: var(--pc-weight-page);
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--pc-muted);
  transition: color 0.2s ease;
}

.pc-head-summary::-webkit-details-marker { display: none; }
.pc-head-summary::marker { content: ""; }

.pc-head-summary:hover,
.pc-head-details[open] .pc-head-summary {
  color: var(--pc-text);
}

.pc-head-summary-icon {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: rotate(45deg) translate(-2px, -2px);
  transition: transform 0.2s ease;
  flex-shrink: 0;
}

.pc-head-details[open] .pc-head-summary-icon {
  transform: rotate(-135deg) translate(-2px, -2px);
}

.pc-head-details .pc-description {
  margin: 4px 0 0 0 !important;
}

@media (prefers-reduced-motion: no-preference) {
  .pc-head-details[open] .pc-description {
    animation: pc-head-open 0.28s ease-out;
  }
}

@keyframes pc-head-open {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}

@media (max-width: 768px) {
  .pc-head-summary {
    font-size: 11.5px;
    letter-spacing: 1.2px;
  }

  .pc-head-details + .pc-title-rule {
    margin-top: 6px;
  }
}

/* ---------- Kopfleiste: Spielername und Level ---------- */

/* ---------- Level, Guthaben und Name in der Kopfleiste ----------
 *
 * Seit 6.87.0 steht links vom Namen ein Levelkasten mit Fortschrittsbalken
 * und daneben das Guthaben mit einem Muenzstapel. Vorher stand dort ein
 * schlichtes [53]; das ist darin aufgegangen.
 *
 * DREI VERWEISE STATT EINEM, seit 6.96.0: Level fuehrt in die Stats, die
 * Muenzen in den Laden, der Name ins Profil. Bis dahin war alles ein
 * einziges Klickziel auf /account/, und die Begruendung dafuer galt: Ein
 * <a> im <a> ist weder gueltiges HTML noch vorhersehbar zu bedienen.
 * Deshalb liegen die drei jetzt NEBENEINANDER in .pc-hdr-konto - der
 * Menuepunkt ist einer von ihnen und traegt nur noch den Namen.
 *
 * Die Huelle ist ein inline-flex mit align-items: center; sie hat die
 * Anordnung vom Menuepunkt uebernommen, damit sich am Raster der
 * Kopfleiste nichts aendert.
 *
 * WAS BEI ENGE WEGFAELLT, steht in den Medienabfragen weiter unten. Der
 * Kopf ist ein Raster 1fr auto 1fr, und rechts stand bis 6.86.2 nur das
 * Wort "Profil": Die drei Teile brauchen ein Vielfaches davon, und ab einer
 * gewissen Fensterbreite ginge das auf Kosten des Menues in der Mitte. */

.pc-hdr-konto {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-width: 0;

  /* DIE SCHRIFT DES MENUES, und das ist kein Beiwerk: Die beiden Kaesten
     messen in em und erbten ihre Groesse bis 6.95.0 vom Menuepunkt, in dem
     sie standen. Als Geschwister daneben erben sie die des Seitenkoerpers
     - im Browser gemessen 21,76 statt 16 Pixel, und die Kopfleiste wuchs
     damit von 19,2 auf 23,4. Dieselben drei Werte wie an .menu-item. */
  font-family: var(--pc-font-menu);
  font-size: var(--pc-nav-size);
  font-weight: var(--pc-weight-menu);
  letter-spacing: 0.5px;
  line-height: 1;

  /* Versalien gehoeren dazu: "Lvl 53" stand im Kasten bis 6.95.0 als
     "LVL 53", weil .menu-item text-transform: uppercase setzt und der
     Kasten darin lag. Im Browser gemessen ist der Unterschied fuenf Pixel
     - dieselbe Zeichenkette, dieselbe Schrift, andere Buchstabenformen. */
  text-transform: uppercase;
}

/* Der Menuepunkt traegt jetzt nur noch den Namen und muss schrumpfen
   duerfen, sonst kuerzt der Name bei Enge nicht mehr. */
.pc-hdr-konto .menu-item,
.pc-hdr-konto .mobile-menu-link {
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
}

/* Im Klappmenue steht der Punkt ueber die volle Breite und rechtsbuendig,
   das darf der Flex-Behaelter nicht zurueckdrehen.

   flex-wrap, und das ist kein Beiwerk: Im Klappmenue steht ALLES - Kasten,
   Balken, Muenzen und Name -, und die Zeile misst damit 335 Pixel. Das
   Menue waechst mit (min-width 180) und hing bei einem Fenster von 320
   Pixeln gemessen 45 Pixel links aus dem Bild heraus. Mit dem Umbruch
   rutscht der Name in eine zweite Zeile, und der Deckel am Menue weiter
   unten sorgt dafuer, dass es den Bildschirm nie verlassen kann.

   Seit Header_v6 steht der Kontopunkt nicht mehr im Klappmenue; die Regel
   bleibt fuer die aelteren Kopffassungen stehen, die getrennt eingespielt
   werden. */
.pc-hdr-konto.is-menue {
  display: flex;
  justify-content: flex-end;
  flex-wrap: wrap;
  row-gap: 5px;
  width: 100%;
}

/* ---- Der Balken, fuer BEIDE Kaesten derselbe ----
 *
 * Robert wollte die Muenzen "in den einen eigenen gleichen Balken daneben"
 * und beide "in derselben Groesse wie den Namen". Deshalb steht die Form
 * genau einmal hier und wird zweimal getragen; ein zweiter Satz Werte
 * liefe beim naechsten Griff auseinander.
 *
 * DER STIL IST DER DER ERSTEN FASSUNG, seit 6.87.2 wieder. 6.87.1 hatte
 * die Schrift in beiden Kaesten auf die 16 Pixel des Namens gehoben; das
 * war Roberts Vorgabe, und er hat sie zurueckgenommen: "baue es genauso
 * vom Aufbau, aber dem Stil von der Version vorher". Der AUFBAU bleibt
 * also - Abzeichen statt Blitz, zwei gleiche Kaesten -, die GROESSE geht
 * auf die zurueckhaltende Fassung zurueck.
 *
 * Der Name bleibt damit die Hauptinformation, und die beiden Kaesten
 * begleiten ihn. Dieselbe Ueberlegung, die seit jeher am Levelabzeichen
 * vor einem Spielernamen steht: begleiten, nicht mit dem Namen
 * konkurrieren.
 *
 * Die Polsterung ist senkrecht knapp gehalten: Der Kasten soll die Zeile
 * nicht hoeher machen als noetig, und die Kopfleiste hat oben wie unten
 * keinen Spielraum. */
.pc-hdr-pille {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 9px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.06);
  line-height: 1;
  flex-shrink: 0;

  /* Beide Kaesten sind seit 6.96.0 Verweise. Ein <a> bringt Farbe und
     Unterstreichung mit; hier soll es aussehen wie vorher, nur anfassbar
     sein. Der Zeigefinger sagt, dass es eines ist, und beim Ueberfahren
     wird der Grund eine Spur heller - dieselbe leise Antwort, die auch die
     Menuepunkte daneben geben. */
  color: inherit;
  text-decoration: none !important;
  cursor: pointer;
  transition: background-color 0.2s ease;
}

@media (hover: hover) {
  .pc-hdr-pille:hover {
    background: rgba(255, 255, 255, 0.12);
  }
}

.pc-hdr-pille:focus-visible {
  outline: 1px solid var(--pc-gold);
  outline-offset: 2px;
}

/* ---- Das Abzeichen im Levelkasten ----
 *
 * Es kommt aus window.pcAvatar() und traegt deshalb .pc-av-box aus
 * base.css. Deren runde Fassung samt Grund und Rand ist genau das, was
 * hier gebraucht wird; zwei Angaben muessen aber weg:
 *
 * DER ABSTAND NACH RECHTS. .pc-av-box bringt margin-right: 0.34em mit, und
 * dort ist das richtig: Es ist der Abstand zum Kuerzel und zum Namen, die
 * in der Kette dahinter stehen. Im Kasten steht das Abzeichen ALLEIN, den
 * Abstand macht der `gap`. Genau die Lektion aus 6.60.3 und 6.76.0: Eine
 * Klasse, die zugleich das Aussehen und die Lage zum Nachbarn festlegt,
 * greift daneben, sobald der Nachbar fehlt.
 *
 * UND DIE GROESSE. 1.35em waeren bei 16 Pixeln Schrift 21,6 und damit
 * hoeher als die Zeile. Hier zaehlt, dass das Abzeichen so hoch ist wie
 * der Text daneben. */
.pc-hdr-av.pc-av-box {
  width: 0.8em;
  height: 0.8em;
  margin-right: 0;

  /* OHNE die runde Fassung, anders als ueberall sonst. Sie ist Grund, Rand
     und Polsterung in einem, und hier steckt das Abzeichen schon in einem
     Kasten mit Grund und Rundung - eine zweite Fassung darin waere ein
     Ring im Ring. Ohne sie fuellt die Zeichnung die vollen 16 Pixel statt
     10,5; bei dieser Groesse ist das der Unterschied zwischen erkennbar
     und geahnt. */
  padding: 0;
  background: none;
  border: 0;
}

.pc-hdr-lvl-text {
  font-family: var(--pc-font-menu);
  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.4px;
  color: var(--pc-gold);
  white-space: nowrap;
}

/* Der Balken. Die Breite der Fuellung kommt als Inline-Angabe aus dem
   Skript, sie ist ein Messwert und keine Gestaltung. */
.pc-hdr-lvl-bar {
  display: block;
  width: 46px;
  height: 5px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.14);
  overflow: hidden;
  flex-shrink: 0;
}

.pc-hdr-lvl-fill {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--pc-gold);

  /* Ein frisch gutgeschriebener Punkt soll den Balken wachsen sehen
     lassen, nicht springen. */
  transition: width 0.4s ease;
}

@media (prefers-reduced-motion: reduce) {
  .pc-hdr-lvl-fill { transition: none; }
}

/* ---- Die Muenzen ----
   Ihr Kasten traegt .pc-hdr-pille wie der Levelkasten, hier steht nur der
   Inhalt. Der `gap` ist eine Spur enger als dort: Zwischen Muenze und Zahl
   gehoert weniger Luft als zwischen drei Teilen. */

.pc-hdr-coins {
  gap: 5px;
}

.pc-hdr-coin {
  display: block;
  width: 0.8em;
  height: 0.8em;
  flex-shrink: 0;
}

/* Schreibmaschinenschrift, damit die Zahl beim Wachsen des Guthabens nicht
   in der Breite tanzt - und das zaehlt hier doppelt, seit sie sich seit
   6.87.2 live aendert: Bei einer Proportionalschrift zuckte der ganze
   Kasten bei jedem Einsatz. Dieselbe Wahl wie bei jeder anderen Zahl im
   Projekt. */
.pc-hdr-coins-zahl {
  font-family: "droid-sans-mono", monospace;
  font-size: 0.78em;
  font-weight: 700;
  letter-spacing: 0;
  color: var(--pc-gold);
  white-space: nowrap;
}

/* ---- Der Name ---- */

.pc-hdr-name {
  display: inline-block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ---------- Was bei Enge wegfaellt ----------
 *
 * IM BROWSER GEMESSEN, nicht geschaetzt. Der Kopf ist ein Raster
 * 1fr auto 1fr; das Menue in der Mitte misst 619 Pixel, der Kontopunkt mit
 * allem 303. Die Luft dazwischen:
 *
 *   1440 px Fenster   77 Pixel Luft
 *   1366 px Fenster   40 Pixel Luft   (der uebliche Laptop, traegt voll)
 *   1340 px Fenster   27 Pixel Luft
 *   1280 px Fenster   -3 Pixel        die beiden stossen aneinander
 *
 * Ab 1300 faellt deshalb der Balken weg; das spart 52 Pixel und ist der
 * kleinste Verlust, denn Level und Guthaben stehen weiter als Zahl da.
 * Reicht auch das nicht, gehen die Muenzen.
 *
 * ALLE REGELN SIND AUF .menu-item BESCHRAENKT, und das ist tragend: Der
 * Kontopunkt steht ein zweites Mal im Klappmenue, und dort ist Platz. Ohne
 * die Einschraenkung naehme eine max-width-Abfrage ihm dieselben Teile
 * weg - am Telefon, wo sie gerade hingehoeren. */

@media (max-width: 1300px) {
  .pc-hdr-konto:not(.is-menue) .pc-hdr-lvl-bar { display: none; }
}

@media (max-width: 1240px) {
  .pc-hdr-konto:not(.is-menue) .pc-hdr-coins { display: none; }
}

/* Unter 1100 bleibt allein der Name stehen, und dahinter steckt ein
   Befund: Die Kopfleiste ist in diesem Bereich SCHON HEUTE zu eng. Mit dem
   ausgelieferten Stand 6.86.2 misst der Kontopunkt "[53] ZeroCool" 128
   Pixel, und gemessen bleiben bei 950 Pixeln Fenster minus 67 Pixel Luft
   zum Menue - die beiden stossen also bereits aneinander. Das ist ein
   schmales Band zwischen 901 (dort uebernimmt das Klappmenue) und rund
   1000, und es ist nicht mit dieser Fassung entstanden.

   Der blosse Name misst 94 Pixel und damit WENIGER als die 128 von heute.
   In diesem Band ist die neue Kopfleiste also schmaler als die alte, nicht
   breiter; gemessen minus 32 statt minus 67 bei 950. Das Band selbst
   bleibt eng, dafuer muesste das Menue in der Mitte enger gesetzt werden -
   das ist eine Entscheidung von Robert und steht unter "Offene Punkte". */
@media (max-width: 1100px) {
  .pc-hdr-konto:not(.is-menue) .pc-hdr-lvl { display: none; }
}

/* ---------- Am Telefon steht der Block in der MITTE ----------
 *
 * Roberts Vorgabe: "Baue das Setup von den 2 Balken und dem Namen in der
 * Mobilen Version in die Mitte vom Header und nichts ins Menue." Der
 * Kontopunkt ist damit ab Header_v6 aus dem Klappmenue verschwunden und
 * steht stattdessen zwischen Krone und Menueknopf.
 *
 * DIESER BLOCK MUSS NACH DEN DREI ABSTUFUNGEN DARUEBER STEHEN. Sie greifen
 * bei max-width 1300, 1240 und 1100 und damit auch am Telefon; bei gleicher
 * Genauigkeit gewinnt die spaetere Regel, und nur so kommen Kasten und
 * Muenzen hier ueberhaupt zurueck.
 *
 * DER KOPF BEKOMMT WIEDER DREI SPALTEN. Seit 6.78.0 hatte er am Telefon nur
 * zwei (Krone, Menueknopf); die Mitte war leer, weil das Menue dort im
 * Klappmenue steckt. Jetzt traegt sie den Kontopunkt.
 *
 * KEIN UMZUG IM DOM, nur eine andere Spalte. Der Punkt steht genau EINMAL
 * im Dokument und wandert per grid-column; ein echter Umzug muesste beim
 * Drehen des Geraets seinen Zustand mitnehmen und bei jeder
 * Groessenaenderung erneut greifen. Genau daran sind die Kopfzahlen in
 * 6.54.1 gescheitert, und 6.55.1 hat sie deshalb auf EINEN Block
 * zurueckgefuehrt.
 *
 * WAS HIER PLATZ HAT, IST GEMESSEN: Zwischen Krone und Menueknopf liegen
 * 334 Pixel bei einem Fenster von 430, 279 bei 375, 264 bei 360 und 224 bei
 * 320. Der volle Block misst 320 - er passt also nur auf dem breitesten
 * Telefon. Der Fortschrittsbalken faellt deshalb weg (52 Pixel), und die
 * aeussere Luecke geht von 10 auf 6. Bleiben 260, und die passen bis
 * hinunter zu 360. Darunter kuerzt der Name mit Auslassungspunkten - von
 * den drei Teilen ist er der einzige, der das ueberhaupt kann, und ein
 * gekuerzter Name ist besser als ein Kasten, der aus dem Bild laeuft. */
@media (max-width: 900px) {
  /* minmax(0, 1fr) und nicht 1fr, und das ist tragend: `1fr` heisst
     `minmax(AUTO, 1fr)`, und `auto` ist hier die MIN-CONTENT-Breite des
     Kontopunkts. Die Spalte kann damit gar nicht schrumpfen, der Name
     kuerzt nie, und der Block schiebt sich bei 360 Pixeln unter den
     Menueknopf. Mit der Null als Untergrenze gibt die Spalte nach und der
     Name kuerzt. Dieselbe Falle wie bei den Schnellknoepfen des Roulettes
     in 6.68.0. */
  .primecup-header-master {
    grid-template-columns: auto minmax(0, 1fr) auto;

    /* Ohne Spaltenabstand stossen die drei Spalten aneinander: Der Block
       fuellt seine mittlere bei 320 Pixeln genau aus, und dann klebt er
       an der Krone und am Menueknopf. Zehn Pixel je Seite kosten den
       Namen ein paar Zeichen und sind das wert. */
    column-gap: 10px;
  }

  .pc-header-left      { grid-column: 1; }
  .mobile-only-menu    { grid-column: 3; }

  /* Die rechte Spalte traegt seit 6.86.2 nur noch den Kontopunkt. Sie
     kommt zurueck und stellt sich in die Mitte; das !important schlaegt
     das `display: none !important` an .desktop-only-menu, gegen das eine
     hoehere Genauigkeit allein nicht reicht.

     max-width haelt sie in ihrer Spalte: Mit justify-self: center misst
     sie sonst ihren Inhalt und darf darueber hinauswachsen. */
  .pc-header-right.desktop-only-menu {
    display: flex !important;
    grid-column: 2;
    justify-self: center;
    min-width: 0;
    max-width: 100%;
  }

  .pc-hdr-konto:not(.is-menue) {
    gap: 6px;
    min-width: 0;
    max-width: 100%;
  }

  /* ---------------------------------------------------------------
   * DER NAME IST AM TELEFON DER DRITTE BALKEN
   *
   * Robert: "Baue in der Mobilen Version im Header den Spielernamen im
   * selben Balken und Stil, wie die beiden anderen Balken."
   *
   * Die Pille sitzt am MENUEPUNKT und nicht an .pc-hdr-name darin: Der
   * Menuepunkt ist das Klickziel, und ein Grund am Text daruntergelegt
   * liesse den Rand daneben unbeklickt. Dieselben Werte wie
   * .pc-hdr-pille, nur hier ausgeschrieben - eine zweite Klasse am
   * Element muesste eintragen() setzen, und der Menuepunkt gehoert der
   * Seitenfassung, nicht dem Skript.
   *
   * `!important` beim Grund, weil .menu-item ihn selbst mit !important
   * abraeumt; bei den uebrigen Angaben genuegt die groessere Genauigkeit.
   *
   * DER GLEICHE ABSTAND ZWISCHEN ALLEN DREIEN kommt vom `gap: 6px` der
   * Huelle darueber und braucht keine eigene Zeile - seit alle drei
   * Pillen sind, ist es derselbe Wert zwischen je zweien.
   * ------------------------------------------------------------- */
  .pc-hdr-konto:not(.is-menue) .menu-item {
    padding: 3px 7px;
    border-radius: 999px !important;
    background: rgba(255, 255, 255, 0.06) !important;
    line-height: 1;
  }

  /* Die drei Balken sind gleich hoch, und dafuer muss der Name mitziehen.
   *
   * Im Browser gemessen: Mit seinen 16 Pixeln und einem inline-block
   * darin wurde die Pille 25 Pixel hoch, die beiden anderen sind 18,8 -
   * ein inline-block traegt in seiner Zeile den Unterlaengenraum mit.
   *
   * Als Block und mit 0,8em misst der Inhalt dieselben 12,8 Pixel wie das
   * Abzeichen und der Muenzstapel in den beiden anderen Pillen, und alle
   * drei stehen auf 18,8. Mit den 0,78em der Guthabenzahl waeren es 18,5
   * gewesen - drei Zehntel, die niemand sieht, aber die Zahl der Ikonen
   * ist der richtige Bezug: Sie bestimmt die Hoehe der beiden anderen.
   *
   * Der Name gibt damit am Telefon eine Spur nach - dort ist er einer von
   * drei Balken und nicht mehr die Hauptzeile daneben. */
  .pc-hdr-konto:not(.is-menue) .pc-hdr-name {
    display: block;
    font-size: 0.8em;
    line-height: 1;
  }

  /* Enger als am Rechner. Gemessen brauchte der Block sonst 260 Pixel, und
     bei einem Fenster von 360 stehen zwischen Krone und Menueknopf nur
     258 - er schob sich also unter den Knopf. Mit 7 statt 9 Pixeln
     Polsterung und 5 statt 6 Luecke sind es 248, und damit passt er bis
     360 hinunter. Darunter kuerzt der Name. */
  .pc-hdr-pille {
    padding: 3px 7px;
    gap: 5px;
  }

  /* Zurueck aus den Abstufungen darueber. */
  .pc-hdr-konto:not(.is-menue) .pc-hdr-lvl,
  .pc-hdr-konto:not(.is-menue) .pc-hdr-coins {
    display: inline-flex;
  }

  /* Der Balken nicht: Er allein kostet mit seiner Luecke 52 Pixel, und die
     fehlen unter 430. */
  .pc-hdr-konto:not(.is-menue) .pc-hdr-lvl-bar {
    display: none;
  }
}

/* ---------- Abzeichen und Level vor dem Spielernamen ----------

   EINE BOX FÜR BEIDES, seit 7.1.0 und auf Roberts Vorgabe. Bis dahin
   standen sie getrennt: ein rund gefasstes Abzeichen und daneben die
   Levelzahl in eckigen Klammern.

   DIE FARBE SAGT DIE STUFE. Zehn Farben, immer über die ganze Levelspanne
   gestreckt; welche Stufe ein Level trägt, rechnet window.pcLevelStufe()
   in site.js, und das ist die einzige Stelle, an der diese Regel steht.

   JE STUFE EINE ZAHLENFOLGE, KEIN FERTIGER FARBWERT, und das ist der
   Grund: Die Box braucht dieselbe Farbe zweimal, einmal voll für Schrift
   und Zeichnung und einmal mit 20 Prozent Deckkraft als Grund. Mit einem
   fertigen `rgb(...)` bräuchte es zwei Angaben je Stufe, die auseinander
   laufen können - genau wie bei --pc-lauf-farbe und --pc-lauf-schwach seit
   6.65.0. color-mix() wäre der kürzere Weg und fehlt älteren Browsern; die
   Zahlenfolge in einer Variablen tut dasselbe und läuft überall.

   Die Reihenfolge ist die übliche Seltenheitsleiter aus dem Spielumfeld:
   grau, grün, türkis, blau, violett, pink, rot, orange, gold, weiß. Sechs
   der zehn kommen aus der Projektpalette, vier sind ergänzt - die Palette
   führt nur sechs Akzente, und .pc-ptag.is-silver hält seit jeher einen
   eigenen Wert daneben. */

.pc-rang {
  display: inline-flex;
  align-items: center;
  margin-right: 0.34em;
  padding: 0.08em 0.42em;
  border-radius: 0.45em;

  /* KEINE Kontur, nur die Farbe - so hat Robert es vorgegeben. */
  border: none;

  font: inherit;
  letter-spacing: inherit;
  white-space: nowrap;

  /* EIGENE ZEILENHOEHE, seit 7.3.0 und ein gemessener Befund. Ohne sie
     erbt der Inhalt die Zeilenhoehe seiner Umgebung, und die Box war je
     nach Seite verschieden hoch: gemessen 1,36em im Roulette, 1,43em in
     der Crash-Leiste, 1,66em in einem gewoehnlichen Block und 1,73em im
     Crash-Feed. Robert hat sie dort als "extrem gross" gemeldet.

     1,15 ist genau die Hoehe des Abzeichens darin; die Box misst damit
     ueberall 1,31em samt Polsterung.

     SIE MUSS HINTER `font: inherit` STEHEN, und das ist ein gemessener
     Befund: `font` ist eine Kurzschreibweise und setzt line-height mit
     zurueck. Beim ersten Anlauf stand sie davor, und die Box blieb bei
     1,66em - die Kurzschreibweise hatte sie stillschweigend
     ueberschrieben. Dieselbe Familie wie "!important schlaegt
     Genauigkeit", nur ohne !important. */
  line-height: 1.15;

  /* DIE AUSRICHTUNG IST GEMESSEN, UND SIE MUSSTE DREIMAL GEBAUT WERDEN.
     Der Weg dorthin steht hier vollstaendig, weil jeder Zwischenschritt
     eine eigene Falle war.

     ERSTER ANLAUF: `vertical-align: -0.22em`, so wie es .pc-av-box seit
     6.60.1 haelt. Gemessen war die Box MIT Abzeichen richtig (0,002em) und
     OHNE Abzeichen 0,256em zu tief. Grund: An einem inline-flex bezieht
     sich ein vertical-align mit LAENGE auf die Grundlinie des Behaelters,
     und die ist die seines ERSTEN Kindes. Die Ausrichtung haette am Inhalt
     gehangen.

     ZWEITER ANLAUF: `middle` plus `position: relative; top: -0.1em`. Das
     war inhaltsunabhaengig und in einem gewoehnlichen Block auf 0,001em
     genau - aber `top` wirkt AUCH in einem Flex-Behaelter, wo
     `vertical-align` gar nicht gilt. Robert hat es prompt gemeldet:
     Roulette-Feed und Crash-Leiste lagen 0,100em zu hoch, der Crash-Feed
     0,123em. Genau die Verschiebung, die `top` dort zusaetzlich macht.

     DRITTER UND JETZIGER: ein Strut. Das ::before mit einem
     Nullbreiten-Leerzeichen ist das erste Kind und legt die Grundlinie der
     Box auf die Grundlinie der SCHRIFT - unabhaengig davon, ob danach ein
     Bild oder eine Zahl kommt. Damit stimmt `vertical-align: baseline`
     ohne jeden Korrekturwert, und `align-self: baseline` tut im
     Flex-Behaelter dasselbe. Keine Zahl, die zu einem Kontext passt und
     zum naechsten nicht.

     Gemessen ueber fuenf Kontexte, gegen die Versalmitte des Namens:

       Crash-Leiste (flex)        0,000
       Crash-Feed (flex)          0,000
       Roulette-Feed (inline-flex) 0,000
       Turnierbaum (baseline)     0,055
       gewoehnlicher Block        0,039

     WER DEN STRUT ENTFERNT, holt sich den ersten Anlauf zurueck. */
  vertical-align: baseline;
  align-self: baseline;

  background: rgba(var(--pc-rang-farbe), 0.2);
  color: rgb(var(--pc-rang-farbe));
}

/* Der Strut. Ein Nullbreiten-Leerzeichen, kein leeres content: "" - ein
   leerer inline-block haette seine Grundlinie am unteren Rand und traefe
   damit wieder etwas anderes als der Text daneben.

   gap gibt es deshalb NICHT an der Box: Es wuerde auch vor dem Strut
   greifen und die Box um seinen Betrag verbreitern. Den Abstand zwischen
   Abzeichen und Zahl traegt stattdessen das Abzeichen selbst. */
.pc-rang::before,
.pc-tagbox::before {
  content: "\200B";
}

/* Die zehn Stufen. Nur die Zahlenfolge, alles andere steht oben. */
.pc-rang.is-s1  { --pc-rang-farbe: 142, 146, 153; }   /* Grau     */
.pc-rang.is-s2  { --pc-rang-farbe: 127, 207, 106; }   /* Gruen    */
.pc-rang.is-s3  { --pc-rang-farbe:  69, 217, 163; }   /* Tuerkis  */
.pc-rang.is-s4  { --pc-rang-farbe:  82, 176, 242; }   /* Blau     */
.pc-rang.is-s5  { --pc-rang-farbe: 169, 124, 242; }   /* Violett  */
.pc-rang.is-s6  { --pc-rang-farbe: 250,  67, 122; }   /* Pink     */
.pc-rang.is-s7  { --pc-rang-farbe: 242,  84,  91; }   /* Rot      */
.pc-rang.is-s8  { --pc-rang-farbe: 252, 121,  56; }   /* Orange   */
.pc-rang.is-s9  { --pc-rang-farbe: 245, 213, 110; }   /* Gold     */
.pc-rang.is-s10 { --pc-rang-farbe: 232, 240, 255; }   /* Diamant  */

/* Die Levelzahl. OHNE Klammern, seit 7.1.0 - die Box grenzt sie ab, und
   Klammern darin wären dieselbe Abgrenzung ein zweites Mal. */
.pc-rang-lvl {
  font: inherit;
  letter-spacing: inherit;
  color: inherit;
}

/* Das Abzeichen IN der Box verliert seine runde Fassung: Ein Ring in
   einer Box ist ein Ring im Ring. Dieselbe Entscheidung wie im
   Levelkasten der Kopfleiste seit 6.87.1.

   Der rechte Abstand muss ebenfalls weg - er ist der Abstand zum Kürzel
   und zum Namen, und in der Box steht das Abzeichen neben einer Zahl, die
   ihren Abstand über gap bekommt. Genau die Lektion aus 6.60.3: Eine
   Klasse, die zugleich das Aussehen und die Lage zum Nachbarn festlegt,
   greift daneben, sobald der Nachbar ein anderer ist. */
.pc-rang .pc-av-box.pc-rang-av {
  width: 1.15em;
  height: 1.15em;
  padding: 0;

  /* Der Abstand zur Zahl. Er steht hier und nicht als gap an der Box:
     Ein gap griffe auch vor dem Strut und machte die Box breiter. */
  margin-right: 0.28em;

  background: none;
  border: none;
  border-radius: 0;
  vertical-align: baseline;
}

/* ---------- Die Hülle um das Team-Kürzel ----------

   IMMER EIN GRAUER RAHMEN, auch bei einem goldenen Kürzel. Robert hat das
   so vorgegeben, und es trägt: Die Levelfarbe daneben ist die Angabe, die
   sprechen soll; zwei farbige Rahmen nebeneinander konkurrierten
   miteinander. Die gekaufte Kürzelfarbe bleibt im TEXT sichtbar, und das
   ist der Teil, der bezahlt wurde.

   Warum eine Hülle und nicht die Box an .pc-ptag selbst: Das Kürzel trägt
   seinen Glanz über background-clip: text, also über background-color und
   background-image. Eine Box an derselben Klasse würde denselben
   Hintergrund beanspruchen - der Text würde durchsichtig und der Glanz
   verschwände. */
.pc-tagbox {
  display: inline-flex;
  align-items: center;
  margin-right: 0.34em;
  padding: 0.08em 0.42em;
  border-radius: 0.45em;
  border: 1px solid rgba(142, 146, 153, 0.55);
  background: rgba(142, 146, 153, 0.2);
  white-space: nowrap;

  /* Zeilenhoehe und Ausrichtung wie die Rangbox daneben, aus denselben
     Gruenden; die Herleitung steht dort. Beide muessen auf einer Linie
     stehen - gemessen sind es 0,00 Pixel Unterschied. */
  line-height: 1.15;
  vertical-align: baseline;
  align-self: baseline;
}

/* Der eigene Abstand des Kürzels entfällt in der Hülle: Ihn trägt jetzt
   die Hülle, und zweimal derselbe Abstand wären zwei. */
.pc-tagbox .pc-ptag {
  margin-right: 0;
}

/* ---------- Levelabzeichen vor Spielernamen, alte Fassung ----------

   .pc-lvl gibt es seit 7.1.0 nicht mehr im Markup: Die Levelzahl steht in
   der Rangbox darüber. Die Regel bleibt trotzdem stehen, weil Plugin und
   Seitenfassungen getrennt eingespielt werden und eine ältere Fassung des
   Skripts sie noch bauen kann. Sie trifft danach nichts mehr. */

.pc-lvl {
  display: inline-block;
  margin-right: 0.34em;
  font: inherit;
  letter-spacing: inherit;
  color: rgba(245, 213, 110, 0.72);
  white-space: nowrap;
}

/* ---------- Levelaufstieg ----------
   Klein und zurückhaltend: eine Meldung, kein Feuerwerk. Der Hintergrund
   bleibt durchscheinend, damit die Seite dahinter sichtbar bleibt und das
   Fenster nicht wie eine Sperre wirkt. */

/* Ausgeschrieben statt inset: Ältere Browser kennen die Kurzform nicht
   und würden das Fenster gar nicht erst platzieren. */
.pc-levelup {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 99999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  box-sizing: border-box;

  background: rgba(27, 28, 31, 0.55);
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);

  opacity: 0;
  transition: opacity 0.2s ease;
}

.pc-levelup.is-open {
  opacity: 1;
}

/* Ein geschlossenes Fenster faengt keine Klicks mehr ab.
   Es liegt nach dem Schliessen noch 0,2 Sekunden im Dokument, bis der
   Uebergang durch ist, und deckt in dieser Zeit die ganze Seite ab. Beim
   Levelaufstieg fiel das nie auf, dort schliesst man einmal. Bei der
   Spielerkarte wird in einer Liste schnell hintereinander geklickt, und
   jeder zweite Klick ging ins Leere. */
.pc-levelup:not(.is-open) {
  pointer-events: none;
}

.pc-levelup-box {
  position: relative;
  width: 100%;
  max-width: 380px;
  box-sizing: border-box;
  padding: 26px 26px 22px 26px;

  background: rgba(27, 28, 31, 0.94);
  border: 1px solid rgba(245, 213, 110, 0.34);
  border-radius: 6px;
  box-shadow: 0 18px 50px rgba(0, 0, 0, 0.5);

  transform: translateY(8px);
  transition: transform 0.24s cubic-bezier(0.2, 0.7, 0.3, 1);
}

.pc-levelup.is-open .pc-levelup-box {
  transform: translateY(0);
}

.pc-levelup-x {
  position: absolute;
  top: 8px;
  right: 10px;
  width: 28px;
  height: 28px;
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  font-family: var(--pc-font-page);
  font-size: 22px;
  line-height: 1;
  color: var(--pc-muted) !important;
  cursor: pointer !important;
  transition: color 0.2s ease;
}

.pc-levelup-x:hover {
  color: var(--pc-text) !important;
}

.pc-levelup-eyebrow {
  margin: 0 0 10px 0 !important;
  font-family: var(--pc-font-page);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--pc-gold) !important;
}

.pc-levelup-level {
  margin: 0 0 4px 0 !important;
  line-height: 1;
}

.pc-levelup-num {
  font-family: "droid-sans-mono", monospace;
  font-size: 52px;
  font-weight: 400;
  letter-spacing: -2px;
  color: var(--pc-gold);
}

.pc-levelup-text {
  margin: 0 0 18px 0 !important;
  font-family: var(--pc-font-page);
  font-size: 14px;
  font-weight: var(--pc-weight-page);
  line-height: 1.5;
  color: var(--pc-text) !important;
}

.pc-levelup-text strong {
  color: var(--pc-gold);
}

.pc-levelup-sub {
  margin: 0 0 8px 0 !important;
  padding-top: 14px;
  border-top: 1px solid var(--pc-line);
  font-family: var(--pc-font-page);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--pc-muted) !important;
}

.pc-levelup-list {
  list-style: none;
  margin: 0 0 20px 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.pc-levelup-list li {
  position: relative;
  padding-left: 15px;
  font-family: var(--pc-font-page);
  font-size: 13px;
  line-height: 1.45;
  color: var(--pc-text);
}

.pc-levelup-list li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.5em;
  width: 6px;
  height: 6px;
  background: var(--pc-live);
}

.pc-levelup-actions {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

.pc-levelup-btn,
.pc-levelup-btn:hover,
.pc-levelup-btn:focus {
  flex: 1 1 auto;
  display: inline-block;
  padding: 10px 16px !important;
  margin: 0 !important;
  background: transparent !important;
  border: 1px solid rgba(255, 255, 255, 0.2) !important;
  border-radius: 3px !important;
  box-shadow: none !important;
  outline: none !important;
  font-family: var(--pc-font-page) !important;
  font-size: 12px !important;
  font-weight: 700 !important;
  letter-spacing: 1px;
  text-transform: uppercase;
  text-align: center;
  text-decoration: none !important;
  color: var(--pc-text) !important;
  cursor: pointer !important;
  transform: none !important;
  transition: border-color 0.2s ease, color 0.2s ease;
}

.pc-levelup-btn:hover {
  border-color: var(--pc-text) !important;
}

.pc-levelup-btn.is-primary,
.pc-levelup-btn.is-primary:hover,
.pc-levelup-btn.is-primary:focus {
  border-color: var(--pc-gold) !important;
  color: var(--pc-gold) !important;
}

.pc-levelup-btn.is-primary:hover {
  background: rgba(245, 213, 110, 0.08) !important;
}

@media (max-width: 480px) {
  .pc-levelup-box {
    padding: 22px 18px 18px 18px;
  }

  .pc-levelup-num {
    font-size: 44px;
  }

  .pc-levelup-actions {
    flex-direction: column;
  }
}

@media (prefers-reduced-motion: reduce) {
  .pc-levelup,
  .pc-levelup-box {
    transition: none !important;
  }
}

/* ---------------------------------------------------------------
 * Turnier verlassen: der gesperrte Zustand
 *
 * Die Grundgestalt des Knopfes steht in tournaments.css und in account.css,
 * je nachdem welche Seite ihn zeigt. Nur der ausgegraute Zustand gehoert
 * hierher, weil ihn jetzt beide Seiten kennen und er sonst zweimal
 * gepflegt werden muesste.
 *
 * Mit !important, weil die Grundregeln dort ebenfalls !important tragen.
 * Ohne das gewaenne die unspezifischere Regel, siehe den Standkasten im
 * Leaderboard.
 * ------------------------------------------------------------- */

.pc-leave-btn.is-locked,
.pc-leave-btn.is-locked:hover,
.pc-leave-btn.is-locked:focus,
.pc-leave-btn[disabled],
.pc-leave-btn[disabled]:hover {
  color: var(--pc-muted) !important;
  border-color: rgba(255, 255, 255, 0.12) !important;
  background: none !important;
  cursor: not-allowed !important;
  opacity: 0.65;
}

/* ---------------------------------------------------------------
 * Team-Einladung: Zahl in der Kopfleiste und Fenster
 *
 * Das Fenster erbt alles von .pc-levelup, hier stehen nur die Abweichungen.
 * Orange statt Gold, weil es eine Aufforderung ist und keine Auszeichnung.
 * ------------------------------------------------------------- */

.pc-hdr-invites {
  /* Gleiche Groesse wie das Wort daneben: keine eigene Schriftgroesse
     setzen, sonst tanzt die Zahl aus der Zeile. */
  font-family: var(--pc-font-page);
  font-weight: 700;
  color: var(--pc-warn);
  white-space: nowrap;
}

/* Die [1] neben "Arcade", solange die taegliche Abholung bereitliegt.
   GOLD und nicht orange: Orange traegt im Kopf die offene Einladung, also
   etwas, das jemand von einem WILL. Hier liegt etwas bereit, das es
   umsonst gibt - und Gold ist in diesem Projekt die Farbe fuer den Wert
   selbst, vom Preisgeld bis zum Guthaben. */
.pc-hdr-daily {
  font-family: var(--pc-font-page);
  font-weight: 700;
  color: var(--pc-gold);
  white-space: nowrap;
}

.pc-invite .pc-levelup-eyebrow {
  color: var(--pc-warn) !important;
}

.pc-invite-team {
  margin: 0 0 12px 0 !important;
  font-family: "eurostile", var(--pc-font-page);
  font-size: 30px;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: 0.5px;
  color: var(--pc-warn) !important;

  /* Ein sehr langer Teamname darf den Kasten nicht sprengen. */
  overflow-wrap: break-word;
  word-wrap: break-word;
}

.pc-invite .pc-levelup-text strong {
  color: var(--pc-warn);
}

.pc-invite .pc-levelup-btn.is-primary,
.pc-invite .pc-levelup-btn.is-primary:hover,
.pc-invite .pc-levelup-btn.is-primary:focus {
  border-color: var(--pc-warn) !important;
  color: var(--pc-warn) !important;
}

.pc-invite .pc-levelup-btn.is-primary:hover {
  background: rgba(252, 121, 56, 0.1) !important;
}

.pc-invite-more {
  margin: 0 0 16px 0 !important;
  font-family: var(--pc-font-page);
  font-size: 12px;
  font-weight: var(--pc-weight-page);
  color: var(--pc-muted) !important;
}

.pc-levelup-fb {
  display: none;
  margin-top: 12px;
  padding: 9px 12px;
  font-family: var(--pc-font-page);
  font-size: 12.5px;
  line-height: 1.45;
  text-align: left;
}

.pc-levelup-fb.is-error {
  display: block;
  background: rgba(250, 67, 122, 0.1);
  border-left: 2px solid var(--pc-accent);
  color: var(--pc-accent);
}

/* Zwei weitere Zustaende fuer die Spielerkarte. Dieselbe Bauart wie oben,
   damit eine Meldung nicht je nach Fenster anders aussieht. */
.pc-levelup-fb.is-pending {
  display: block;
  background: rgba(142, 146, 153, 0.12);
  border-left: 2px solid var(--pc-muted);
  color: var(--pc-muted);
}

.pc-levelup-fb.is-success {
  display: block;
  background: rgba(69, 217, 163, 0.1);
  border-left: 2px solid var(--pc-live);
  color: var(--pc-live);
}

@media (max-width: 480px) {
  .pc-invite-team { font-size: 24px; }
}

/* ---------------------------------------------------------------
 * Ankündigung
 *
 * Erbt alles von .pc-levelup, hier stehen nur die Abweichungen. Dasselbe
 * Verhältnis wie bei .pc-invite und .pc-playercard.
 * ------------------------------------------------------------- */

.pc-news .pc-levelup-box {
  max-width: 460px;
}

.pc-news-titel {
  margin: 0 0 14px 0 !important;
  font-family: "eurostile", var(--pc-font-page);
  font-size: 24px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: 0.3px;
  color: var(--pc-text) !important;
  word-break: break-word;
}

/* Das Turnier steht als eigener Kasten unter dem Text, in Gold: Es ist der
   Grund, warum das Fenster aufgeht, und nicht nur eine Fussnote.
 *
 * Oben und unten derselbe Abstand, und zwar 18 Pixel. Vorher standen dort
 * 16 oben und 4 unten, und der Kasten klebte an den Knoepfen.
 *
 * Warum ausgerechnet 18 und warum nicht der Anschein truegt: .pc-levelup-box
 * ist ein gewoehnlicher Block, kein Flex-Behaelter. Die Aussenabstaende
 * benachbarter Geschwister fallen deshalb zusammen, es gilt der GROESSERE
 * der beiden, nicht ihre Summe. Darueber steht entweder die Nachricht
 * (.pc-levelup-text, 18 unten) oder, wenn keine gesetzt ist, direkt die
 * Ueberschrift (.pc-news-titel, 14 unten). Mit 18 an dieser Regel kommt in
 * beiden Faellen 18 heraus. Darunter folgt .pc-levelup-actions ganz ohne
 * Aussenabstand, dort zaehlt der Wert allein.
 *
 * Wer die 18 an .pc-levelup-text aendert, aendert diese Zahl mit. */
.pc-news-turnier {
  margin: 18px 0;
  padding: 12px 14px;
  background: rgba(245, 213, 110, 0.05);
  border-left: 2px solid var(--pc-gold);
}

.pc-news-turnier-name {
  margin: 0 !important;
  font-family: var(--pc-font-page);
  font-size: 15px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--pc-gold) !important;
  word-break: break-word;
}

.pc-news-turnier-meta {
  margin: 5px 0 0 0 !important;
  font-family: var(--pc-font-page);
  font-size: 12px;
  font-weight: var(--pc-weight-page);
  line-height: 1.45;
  color: var(--pc-muted) !important;
}

/* ---------------------------------------------------------------
 * Levelkarte
 *
 * Kopf, Fortschrittsbalken und Hinweis. Standen bis 6.55.2 in stats.css und
 * waren damit an die Stats-Seite gebunden; seit 6.56.0 zeigt die
 * Spielerkarte dieselbe Anzeige, und die geht auf JEDER Seite auf.
 * Verschoben, nicht kopiert. Der Rahmen .pc-level-card ist in stats.css
 * geblieben, den gibt es nur dort.
 * ------------------------------------------------------------- */

.pc-level-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 18px;
  flex-wrap: wrap;
  margin-bottom: 16px;
}

.pc-level-badge {
  display: inline-flex;
  align-items: baseline;
  gap: 10px;
}

.pc-level-word {
  font-family: var(--pc-font-page);
  font-size: 11px;
  font-weight: var(--pc-weight-page);
  letter-spacing: 1.8px;
  text-transform: uppercase;
  color: var(--pc-muted);
}

.pc-level-badge strong {
  font-family: "droid-sans-mono", monospace;
  font-size: 40px;
  line-height: 1;
  letter-spacing: -1px;
  color: var(--pc-gold);
}

.pc-level-points {
  font-family: var(--pc-font-page);
  font-size: 12.5px;
  font-weight: var(--pc-weight-page);
  color: var(--pc-muted);
}

.pc-level-points strong {
  font-family: "droid-sans-mono", monospace;
  font-size: 20px;
  color: var(--pc-text);
  margin-right: 4px;
}

/* Fortschritt. Beginnt nie bei null, weil jeder mit Startguthaben anfaengt. */
.pc-level-bar {
  height: 8px;
  background: rgba(255, 255, 255, 0.07);
  overflow: hidden;
}

.pc-level-bar span {
  display: block;
  height: 8px;
  background: linear-gradient(to right, rgba(245, 213, 110, 0.55), var(--pc-gold));
  transition: width 0.6s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.pc-level-note {
  margin: 12px 0 0 0 !important;
  font-family: var(--pc-font-page);
  font-size: 12.5px;
  font-weight: var(--pc-weight-page);
  line-height: 1.55;
  color: var(--pc-muted) !important;
}

.pc-level-note strong {
  color: var(--pc-text);
}

@media (prefers-reduced-motion: reduce) {
  .pc-level-bar span { transition: none; }
}

@media (max-width: 768px) {
  .pc-level-badge strong { font-size: 34px; }

  .pc-level-head {
    gap: 10px;
    margin-bottom: 14px;
  }
}

/* ---------------------------------------------------------------
 * Spielerkarte
 *
 * Zwei Teile: der anklickbare Name und das Fenster dahinter. Das Fenster
 * erbt alles von .pc-levelup, hier stehen nur die Abweichungen. Einen
 * Glanz auf dem Namen gab es bis 6.85.0, siehe direkt darunter.
 * ------------------------------------------------------------- */

/* KEIN GLANZ AM NAMEN, seit 6.86.0.
 *
 * Bis 6.85.0 leuchtete ein Name beim Ueberfahren kurz weiss auf und sank
 * dann auf einen goldenen Schein zurueck: ein text-shadow an :hover und
 * :focus-visible, dazu @keyframes pc-glanz. Robert wollte das weg, und
 * ausdruecklich auf ALLEN Seiten: "Spielerprofile sollen sich weiterhin
 * oeffnen lassen, jedoch soll keine Animation auf dem Namen vorhanden
 * sein, wenn man drauf haelt."
 *
 * ENTFERNT SIND BEIDE, die Bewegung UND der ruhende Schein, und das ist
 * kein zu weit gefasster Griff: Auf einem Touchgeraet bleibt :hover nach
 * dem Antippen haengen. Nur die Animation zu nehmen liesse also genau das
 * uebrig, was Robert stoert - einen Namen, der nach dem Loslassen golden
 * stehenbleibt.
 *
 * WAS BLEIBT: der Zeigefinger, der Fokusrahmen fuer die Tastatur und dass
 * sich die Karte oeffnet. Das Fenster selbst ist unberuehrt.
 *
 * ES STEHT HIER UND SONST NIRGENDS. .pc-pl ist die eine Klasse, die
 * window.pcPlayerCard traegt; sie haengt an zwoelf Ausgabestellen in
 * sieben Skripten - Leaderboard, Team-Verzeichnis, Kader,
 * Mitgliederverwaltung, Beitrittsanfragen, Einladungen, Turnierbaum,
 * Startseite, Spielerkarte, Feed des Roulettes, Rang von Bird. Diese eine
 * Regel trifft sie alle, auf jeder Seite.
 *
 * DER GLANZ DES KUERZELS UND DER NAMENSFARBE BLEIBT. Das ist eine andere
 * Sache: Er laeuft dauernd (pc-ptag-shine in base.css), haengt an keinem
 * Zustand und ist das gekaufte Item selbst. */
/* EIN NAME IST HIER EIN KNOPF, KEIN TEXT ZUM MARKIEREN.
 *
 * Ein langer Druck auf Text loest auf einem Telefon zwei Dinge aus, und
 * beide sehen aus wie ein Rahmen um den Namen: die Textauswahl mit ihren
 * Anfassern, und auf iOS zusaetzlich das Callout-Menue, das der Browser
 * mit einem grauen Kasten ankuendigt. Beim gewoehnlichen Klick passiert
 * nichts davon - deshalb faellt es nur beim Druecken und Halten auf.
 *
 * Es steht HIER und nicht bei Roulette und Bird, obwohl es dort gemeldet
 * wurde: Der Ausloeser ist an allen acht Ausgabestellen derselbe, und eine
 * Sonderregel fuer zwei davon waere die naechste Stelle, die auseinander-
 * laeuft. Im Team-Kader und im Turnierbaum aendert sich dadurch nichts
 * Sichtbares; markieren liess sich der Name auch dort, nur hat es niemand
 * getan.
 *
 * OFFEN GESAGT: Auf diesem Rechner laesst sich ein langer Druck nicht
 * ausloesen. Gemessen und ausgeschlossen sind ein abweichender
 * Fokusrahmen (base.css schaltet outline global ab), ein Tap-Highlight
 * (ueberall durchsichtig), abweichende Regeln (alle vier Stellen tragen
 * genau dieselben) und eine abweichende Auswahlgeometrie (ueberall
 * dieselben sechs Rechtecke). Was bleibt, ist das Verhalten des
 * Touchgeraets - und genau das schalten diese beiden Zeilen ab. */
.pc-pl {
  cursor: pointer;
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}

/* Der Fokusrahmen ist die einzige Kontur, die es gibt, und er erscheint nur
   bei Bedienung ueber die Tastatur. Mit der Maus loest :focus-visible nicht
   aus - dort sagt der Zeigefinger, dass sich hier etwas oeffnet.

   Er bleibt ausdruecklich: Ohne ihn waere ein Name mit dem Tabulator nicht
   mehr zu finden, und die Karte ist ueber die Tastatur zu bedienen. */
.pc-pl:focus-visible {
  outline: 1px solid var(--pc-gold);
  outline-offset: 2px;
}

/* @keyframes pc-glanz ist mit 6.86.0 ersatzlos entfallen. Es hatte nach dem
   Wegfall der beiden Zustandsregeln keinen Aufrufer mehr, und toter Code
   ist in diesem Projekt die haeufigste Fehlerquelle. Nachgezaehlt: der Name
   kommt in assets/ nur noch in diesem Kommentar vor. */

.pc-playercard .pc-levelup-box {
  max-width: 430px;
}

/* .pc-pk-avatar ist mit 6.60.0 entfallen. Das Abzeichen stand dort als
   eigener Absatz über dem Namen; jetzt geht es durch dieselbe Kette wie
   überall sonst und steht davor. Es braucht deshalb keine eigene Regel: Die
   Fassung misst in `em` und wächst mit den 26 Pixeln des Namens von allein
   auf gut 35 Pixel mit. */

.pc-pk-name {
  margin: 0 0 16px 0 !important;
  font-family: "eurostile", var(--pc-font-page);
  font-size: 26px;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: 0.4px;
  color: var(--pc-text) !important;
  word-break: break-word;
}

/* ---------- Level und Fortschritt ----------
   Dieselben Regeln wie auf der Stats-Seite, nur enger: In einem Fenster von
   430 Pixeln waere die Zahl in 40 Pixeln erschlagend. Der Rahmen ist eigen,
   .pc-level-card gibt es nur auf der Stats-Seite.

   Die drei Ueberschreibungen sind (0,2,1) und schlagen damit sowohl die
   Grundregel als auch die Medienabfrage darunter, unabhaengig von der
   Reihenfolge. Keine Zustandsliste, keine Spezifitaetsfalle. */

.pc-pk-level {
  border: 1px solid var(--pc-line);
  border-left: 2px solid var(--pc-gold);
  background: rgba(245, 213, 110, 0.03);
  padding: 14px 16px;
  margin: 0 0 16px 0;
}

.pc-pk-level .pc-level-head {
  gap: 12px;
  margin-bottom: 12px;
}

.pc-pk-level .pc-level-badge strong {
  font-size: 28px;
}

.pc-pk-level .pc-level-points strong {
  font-size: 16px;
}

/* Zurueckgehaltener Punktestand: derselbe Aussetzer wie bei den Zahlen
   darunter. Das Level daneben bleibt scharf, es steht ohnehin als Abzeichen
   an jedem Namen. */
.pc-level-points.is-stoerung strong {
  display: inline-block;
  color: var(--pc-muted);
  filter: blur(3px);
  animation: pc-stoerung 1.7s steps(1, end) infinite;
}

/* Der Balken bleibt sichtbar, aber leer und ohne Gold: Ein gefuellter Balken
   verriete den Stand, ein fehlender saehe nach einem Fehler aus. */
.pc-level-bar.is-stoerung {
  background: repeating-linear-gradient(
    90deg,
    rgba(255, 255, 255, 0.10) 0 6px,
    rgba(255, 255, 255, 0.03) 6px 12px
  );
}

/* ---------- Die Zahlenreihe ---------- */

.pc-pk-zahlen {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  margin-bottom: 12px;
}

.pc-pk-kachel {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 9px 6px;
  background: rgba(255, 255, 255, 0.035);
  border: 1px solid var(--pc-line);
  border-radius: 3px;
  text-align: center;
}

.pc-pk-zahl {
  display: block;
  font-family: "droid-sans-mono", monospace;
  font-size: 21px;
  font-weight: 400;
  letter-spacing: -0.5px;
  line-height: 1.1;
  color: var(--pc-gold);
}

.pc-pk-wort {
  display: block;
  font-family: var(--pc-font-page);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: 1.1px;
  text-transform: uppercase;
  color: var(--pc-muted);
}

.pc-pk-quote {
  margin: 0 0 16px 0 !important;
  font-family: var(--pc-font-page);
  font-size: 12.5px;
  font-weight: var(--pc-weight-page);
  color: var(--pc-muted) !important;
}

.pc-pk-quote strong {
  font-family: "droid-sans-mono", monospace;
  font-weight: 400;
  font-size: 15px;
  color: var(--pc-live);
}

/* Noch kein gewertetes Match: ein Satz statt einer Zahl, und der steht
   kursiv, damit er nicht wie ein Ergebnis aussieht. */
.pc-pk-quote.is-leer {
  font-style: italic;
}

/* ---------- Hoechster Gewinn im Primy Roulette ----------
 *
 * Seit 6.76.0 dieselbe Kachel wie "Matches" darueber, nur ueber die volle
 * Breite: gleicher Grund, gleicher Rand, gleiche Rundung, Zahl mittig ueber
 * der Beschriftung. Bis 6.75.0 stand hier ein eigener Baustein mit dem Wort
 * links, der Zahl rechts und einem gruenen Strich am Rand - der einzige
 * seiner Art in der Karte.
 *
 * Die WERTE der Kachel stehen bewusst noch einmal hier und nicht in einer
 * gemeinsamen Selektorliste mit .pc-pk-kachel: Diese Kachel steht als
 * einzelner Block im Fluss und nicht als Zelle im Raster .pc-pk-zahlen,
 * sie braucht einen eigenen unteren Abstand, und ihre Zahl ist gruen statt
 * gold. Zwei Regeln mit demselben Namen fuer zwei verschiedene Lagen waeren
 * die Doppelung, die in diesem Projekt schon oft auseinandergelaufen ist -
 * eine Selektorliste mit zwei verschiedenen Ausnahmen darunter aber auch.
 *
 * Gruen bleibt die Zahl, weil sie eine Gutschrift ist: dieselbe Farbe, die
 * der Feed des Roulettes unter einem Gewinn benutzt. */
/* ZWEI ZEILEN, NICHT DREI, seit 6.78.0: der Gewinn oben, darunter
 * Beschriftung und Angabe NEBENEINANDER. Bis 6.77.0 standen alle drei
 * untereinander, und die Kachel war dadurch hoeher als jede andere in der
 * Karte, obwohl in ihren beiden unteren Zeilen zusammen weniger steht als
 * in einer.
 *
 * Ueber flex-wrap und nicht ueber eine zusaetzliche Huelle im Markup: Die
 * Zahl nimmt mit flex-basis 100 Prozent eine ganze Zeile, die beiden
 * anderen teilen sich die naechste. Eine Huelle waere ein Element mehr in
 * einer Kachel, die aus genau drei besteht - und pcPrimyRekord() in
 * site.js bleibt unangetastet.
 *
 * align-items: baseline haelt Beschriftung und Angabe auf EINER
 * Grundlinie. Ohne die Zeile staenden sie mittig zueinander, und weil die
 * eine 9,5 und die andere 11 Pixel gross ist, saehe das nach einem
 * Versatz aus. */
.pc-pk-primy {
  display: flex;
  flex-flow: row wrap;
  align-items: baseline;
  justify-content: center;
  /* Die waagerechte Luecke steht seit 6.95.0 auf 6 statt 9 Pixeln: Zwischen
     Beschriftung und Angabe steht jetzt ein Trennpunkt, und 6 Pixel auf
     jeder Seite davon sind optisch derselbe Abstand wie 9 Pixel Leere. Ohne
     die Ruecknahme braeuchte die Zeile bei 375 Pixeln 285,2 von 285
     verfuegbaren und braeche um. */
  gap: 2px 6px;
  margin: 0 0 12px 0;
  padding: 9px 6px;
  background: rgba(255, 255, 255, 0.035);
  border: 1px solid var(--pc-line);
  border-radius: 3px;
  text-align: center;
}

/* Zahl und Wort tragen die Masse aus .pc-pk-zahl und .pc-pk-wort. Beide
   stehen hier ausgeschrieben statt als zweiter Name am Element: Die Kachel
   ist ein Block und kein Rasterfeld, und ein .pc-pk-zahl im Fluss haette
   die Regeln der Reihe mitgebracht, sobald jemand dort etwas aendert. */
.pc-pk-primy-zahl {
  display: block;
  /* Eine ganze Zeile fuer sich. Der Gewinn ist die Aussage der Kachel,
     und er steht oben - genau das hat Robert am 16.08.2026 verlangt. */
  flex: 1 0 100%;
  font-family: "droid-sans-mono", monospace;
  font-size: 21px;
  font-weight: 400;
  letter-spacing: -0.5px;
  line-height: 1.1;
  color: var(--pc-live);
}

/* Die zweite Kachel traegt den besten Flug, seit 6.94.0. Sie ist Zeichen
   fuer Zeichen dieselbe wie die daruber - bis auf die Farbe der Zahl:
   Dort steht eine Roehrenzahl und keine Gutschrift, und die ist in diesem
   Projekt orange. Dieselbe Trennung wie im Leaderboard, wo
   .player-score.is-gewinn gruen steht und die Roehren orange. */
.pc-pk-bird .pc-pk-primy-zahl {
  color: var(--pc-warn);
}

.pc-pk-primy-wort {
  display: block;
  font-family: var(--pc-font-page);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: 1.1px;
  text-transform: uppercase;
  color: var(--pc-muted);
}

/* Einsatz, Feld und Quote. Roll-ID und Zeitpunkt sind mit 6.76.0
   entfallen, sie stehen nur noch im eigenen Profil auf der Stats-Seite.

   Der obere Abstand ist mit 6.78.0 auf null: Er trennte die dritte Zeile
   von der zweiten, und seit beide NEBENEINANDER stehen, schoebe er die
   Angabe gegen die Beschriftung daneben nach unten. Die Ausrichtung
   macht jetzt align-items: baseline am Behaelter. */
.pc-pk-primy-info {
  display: block;
  margin: 0 !important;
  font-family: var(--pc-font-page);
  font-size: 11px;
  font-weight: var(--pc-weight-page);
  line-height: 1.4;
  color: var(--pc-muted);
}

/* Der Trennpunkt zwischen Beschriftung und Angabe.
 *
 * ALS ::after UND NICHT IM MARKUP: Beide Kacheln bauen ihre Beschriftung
 * ueber dieselbe Klasse, eine Regel trifft damit beide. Im Markup waere es
 * ein drittes Flex-Element, das in kartePrimy() UND in karteBird() stehen
 * muesste - zwei Stellen fuer ein Zeichen.
 *
 * AN DER BESCHRIFTUNG UND NICHT AN DER ANGABE, und das ist gemessen: Die
 * Kachel ist schmal, und bei einem langen Einsatz bricht die Zeile um. Am
 * Wort bleibt der Punkt dann auf der Beschriftungszeile stehen; an der
 * Angabe stuende er allein am Anfang der zweiten Zeile und laese sich wie
 * ein Aufzaehlungszeichen.
 *
 * Der Aussenabstand ist derselbe Wert wie die Luecke des Behaelters (unten
 * auf 6 Pixel): Der Punkt sitzt damit mittig zwischen den beiden Woertern
 * und nicht an einem von beiden. Im Browser bei 375 Pixeln nachgemessen,
 * die Kachel bleibt einzeilig. */
.pc-pk-primy-wort::after {
  content: "\00B7";
  margin-left: 6px;
}

.pc-pk-titel {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin: 0 0 4px 0 !important;
  padding: 9px 12px;
  background: rgba(245, 213, 110, 0.06);
  border-left: 2px solid var(--pc-gold);
}

.pc-pk-titel-wort {
  font-family: var(--pc-font-page);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--pc-muted);
}

.pc-pk-titel-zahl {
  font-family: "droid-sans-mono", monospace;
  font-size: 20px;
  line-height: 1;
  color: var(--pc-gold);
}

/* ---------- Verborgene Zahlen ----------
   Der Server liefert sie gar nicht erst mit. Was hier flackert, ist ein
   Platzhalter aus dem Browser: Es soll nach einer gestoerten Verbindung
   aussehen und nicht nach einer Zahl, die man scharf stellen koennte. */

.pc-pk-verborgen {
  margin: 0 0 14px 0 !important;
  padding: 9px 12px;
  background: rgba(250, 67, 122, 0.08);
  border-left: 2px solid var(--pc-accent);
  font-family: var(--pc-font-page);
  font-size: 12px;
  font-weight: var(--pc-weight-page);
  line-height: 1.45;
  color: var(--pc-accent) !important;
}

.pc-pk-verborgen.is-eigen {
  background: rgba(82, 176, 242, 0.08);
  border-left-color: var(--pc-info);
  color: var(--pc-info) !important;
}

.pc-pk-kachel.is-stoerung,
.pc-pk-titel.is-stoerung {
  border-color: rgba(250, 67, 122, 0.22);
}

.pc-pk-titel.is-stoerung {
  background: rgba(250, 67, 122, 0.05);
  border-left-color: rgba(250, 67, 122, 0.4);
}

.pc-pk-kachel.is-stoerung .pc-pk-zahl,
.pc-pk-titel.is-stoerung .pc-pk-titel-zahl,
.pc-pk-quote.is-stoerung {
  /* inline-block, sonst greift transform am Inline-Element nicht. */
  display: inline-block;
  color: var(--pc-muted);
  filter: blur(3px);
  animation: pc-stoerung 1.7s steps(1, end) infinite;
}

.pc-pk-quote.is-stoerung {
  color: var(--pc-muted) !important;
}

/* steps(1, end) statt eines weichen Verlaufs: Ein Aussetzer springt, er
   blendet nicht ueber.
 *
 * Seit 6.55.1 deutlich unruhiger: fuenf Aussetzerbuendel statt zwei, verteilt
 * ueber den ganzen Durchlauf, und der ist von 2,6 auf 1,7 Sekunden verkuerzt.
 * Vorher lagen zwischen den beiden Buendeln lange ruhige Strecken, und der
 * Kasten sah dort eher unscharf als gestoert aus.
 *
 * Die schaerfste Stufe bleibt bei zwei Pixeln Unschaerfe. Zu lesen gibt es
 * ohnehin nichts: Was dort steht, sind zwei Striche aus dem Browser, die
 * echten Zahlen hat der Server nie mitgeschickt. */
@keyframes pc-stoerung {
  0%   { opacity: 0.52; filter: blur(3px); transform: translateX(0); }
  4%   { opacity: 0.10; filter: blur(7px); transform: translateX(-4px); }
  8%   { opacity: 0.66; filter: blur(2px); transform: translateX(3px); }
  12%  { opacity: 0.24; filter: blur(5px); transform: translateX(-1px); }
  17%  { opacity: 0.58; filter: blur(3px); transform: translateX(0); }

  26%  { opacity: 0.14; filter: blur(6px); transform: translateX(2px); }
  30%  { opacity: 0.60; filter: blur(2px); transform: translateX(-3px); }
  35%  { opacity: 0.30; filter: blur(5px); transform: translateX(0); }

  44%  { opacity: 0.55; filter: blur(3px); transform: translateX(1px); }
  48%  { opacity: 0.08; filter: blur(8px); transform: translateX(-4px); }
  52%  { opacity: 0.64; filter: blur(2px); transform: translateX(4px); }
  57%  { opacity: 0.22; filter: blur(6px); transform: translateX(0); }

  66%  { opacity: 0.56; filter: blur(3px); transform: translateX(-2px); }
  71%  { opacity: 0.12; filter: blur(7px); transform: translateX(3px); }
  75%  { opacity: 0.62; filter: blur(2px); transform: translateX(-1px); }
  80%  { opacity: 0.28; filter: blur(5px); transform: translateX(0); }

  88%  { opacity: 0.54; filter: blur(3px); transform: translateX(2px); }
  92%  { opacity: 0.16; filter: blur(6px); transform: translateX(-3px); }
  96%  { opacity: 0.60; filter: blur(2px); transform: translateX(1px); }
  100% { opacity: 0.52; filter: blur(3px); transform: translateX(0); }
}

/* ---------- Teams ---------- */

.pc-pk-teams {
  list-style: none;
  margin: 0 0 18px 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.pc-pk-teams li {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
}

.pc-pk-team-name,
.pc-pk-team-name:hover,
.pc-pk-team-name:focus {
  font-family: var(--pc-font-page);
  font-size: 13.5px;
  font-weight: var(--pc-weight-page);
  color: var(--pc-text) !important;
  text-decoration: none !important;
}

.pc-pk-team-name:hover {
  color: var(--pc-gold) !important;
}

.pc-pk-team-tag {
  margin-right: 0.4em;
  font-family: "droid-sans-mono", monospace;
  font-size: 11px;
  color: var(--pc-muted);
}

.pc-pk-team-rolle {
  flex: 0 0 auto;
  font-family: var(--pc-font-page);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1.1px;
  text-transform: uppercase;
  color: var(--pc-muted);
}

/* ---------- Einladen ---------- */

.pc-pk-invite {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}

/* Die beiden Auswahlfelder der Einladung.
 *
 * `color-scheme: dark` und die option-Regel darunter sind TRAGEND, keine
 * Kosmetik. Bis 6.64.1 fehlten beide, und das hatte eine Folge, die man erst
 * beim Aufklappen sieht:
 *
 * Ein <select> zeichnet der Browser, sein AUFGEKLAPPTES MENÜ dagegen das
 * Betriebssystem. Der `background` hier oben gilt dort nicht, die helle
 * Schriftfarbe schon - sie vererbt sich auf jede <option>. Auf einem hellen
 * Systemmenü stand damit helle Schrift auf hellem Grund, und sichtbar blieb
 * allein der GESCHLOSSENE Zustand, also genau der eine Eintrag, der gerade
 * ausgewählt ist. Genau so ist es gemeldet worden.
 *
 * Beides zusammen, nicht eines von beidem: `color-scheme` sagt dem System,
 * das dunkle Menü zu nehmen; die option-Regel ist der Rückfall für Browser,
 * die es nicht auswerten. Dasselbe Muster tragen `.pc-field select` in
 * signup.css und `.pc-team-detail select` in team.css seit jeher. */
.pc-pk-select,
.pc-pk-select:focus {
  flex: 1 1 130px;
  min-width: 0;
  padding: 9px 10px !important;
  margin: 0 !important;
  color-scheme: dark;
  background: rgba(255, 255, 255, 0.04) !important;
  border: 1px solid rgba(255, 255, 255, 0.2) !important;
  border-radius: 3px !important;
  box-shadow: none !important;
  font-family: var(--pc-font-page);
  font-size: 12.5px;
  font-weight: var(--pc-weight-page);
  color: var(--pc-text) !important;
}

.pc-pk-select option {
  background-color: var(--pc-surface);
  color: var(--pc-text);
}

/* Ein belegtes Team steht gesperrt in der Liste und muss als gesperrt zu
   erkennen sein. Ohne diese Zeile trüge es dieselbe Farbe wie ein freies. */
.pc-pk-select option:disabled {
  color: var(--pc-muted);
}

.pc-pk-invite .pc-levelup-btn {
  flex: 0 0 auto;
}

.pc-pk-hinweis {
  margin: 0 !important;
  font-family: var(--pc-font-page);
  font-size: 11.5px;
  font-weight: var(--pc-weight-page);
  line-height: 1.45;
  color: var(--pc-muted) !important;
}

.pc-pk-leer {
  margin: 0 0 14px 0 !important;
  font-family: var(--pc-font-page);
  font-size: 13px;
  font-weight: var(--pc-weight-page);
  color: var(--pc-muted) !important;
}

@media (max-width: 480px) {
  .pc-pk-zahlen { grid-template-columns: repeat(2, 1fr); }
  .pc-pk-name { font-size: 22px; }
  .pc-pk-invite { flex-direction: column; }
  .pc-pk-invite .pc-levelup-btn { flex: 1 1 auto; }
}

/* Wer weniger Bewegung will, bekommt keine. Die Zahlen bleiben trotzdem
   unlesbar: Die Unschaerfe ist keine Animation und steht hier erneut,
   weil die Kurzform oben mit abgeschaltet wird.

   Der Eintrag fuer .pc-pl ist mit 6.86.0 entfallen: Am Namen laeuft keine
   Animation mehr, es gibt also nichts abzuschalten. */
@media (prefers-reduced-motion: reduce) {
  .pc-pk-kachel.is-stoerung .pc-pk-zahl,
  .pc-pk-titel.is-stoerung .pc-pk-titel-zahl,
  .pc-pk-quote.is-stoerung {
    animation: none;
    opacity: 0.4;
    filter: blur(4px);
  }
}

/* ---------------------------------------------------------------
 * Der Regler
 *
 * Bis 6.63.0 stand er in legal.css und diente allein der Cookie-Richtlinie.
 * Seit 6.64.0 tragen ihn drei weitere Stellen: das Team-Kuerzel (Team-Seite
 * und Profil), "Beitrittsanfragen erlauben" und die beiden
 * Sichtbarkeitsschalter im Profil. VERSCHOBEN, nicht kopiert; site.css laedt
 * auf jeder Seite, legal.css nur auf den Rechtstexten.
 *
 * DIE HUELLE BLEIBT EINE CHECKBOX. Ein <button> muesste change, disabled,
 * Tastaturbedienung und den Zustand fuer Vorlesewerkzeuge neu bauen; eine
 * versteckte Checkbox bringt alles vier mit.
 *
 * Die Ampelfarben haengen an der Zusatzklasse .is-ampel und nicht am
 * Grundregler: Die Cookie-Richtlinie soll unveraendert bleiben, und ein
 * Rot fuer "abgelehnt" waere dort eine Wertung, die dort nichts zu suchen
 * hat.
 * ------------------------------------------------------------- */

.pc-switch {
  position: relative;
  display: inline-block;
  width: 44px;
  height: 22px;
  flex-shrink: 0;
}

/* Nicht display:none: Ein ausgeblendetes Feld ist nicht fokussierbar, und
   damit waere der Regler mit der Tastatur nicht mehr zu bedienen. */
.pc-switch input { opacity: 0; width: 0; height: 0; margin: 0; position: absolute; }

/* inset ausgeschrieben. `inset: 0` kennen aeltere Browser nicht, und dann
   haette der Regler keine Flaeche. Stand bis 6.63.0 als Kurzform in
   legal.css. */
.pc-slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: rgba(255, 255, 255, 0.08);
  border: 1px solid var(--pc-line);
  transition: background-color 0.18s ease, border-color 0.18s ease;
}

.pc-slider:before {
  position: absolute;
  content: "";
  height: 14px;
  width: 14px;
  left: 3px;
  bottom: 3px;
  background-color: var(--pc-muted);
  transition: transform 0.18s ease, background-color 0.18s ease;
}

.pc-switch input:checked + .pc-slider {
  border-color: rgba(255, 255, 255, 0.4);
}

.pc-switch input:checked + .pc-slider:before {
  transform: translateX(22px);
  background-color: #FFFFFF;
}

/* Der Fokus muss sichtbar sein: Das Feld selbst ist unsichtbar, ohne diese
   Regel saehe man bei der Tastaturbedienung nicht, wo man steht. */
.pc-switch input:focus-visible + .pc-slider {
  outline: 2px solid var(--pc-info);
  outline-offset: 2px;
}

/* ---- Ampel: rot ist aus, gruen ist an ---- */

.pc-switch.is-ampel .pc-slider {
  background-color: rgba(250, 67, 122, 0.16);
  border-color: var(--pc-accent);
}

.pc-switch.is-ampel .pc-slider:before {
  background-color: var(--pc-accent);
}

.pc-switch.is-ampel input:checked + .pc-slider {
  background-color: rgba(69, 217, 163, 0.16);
  border-color: var(--pc-live);
}

.pc-switch.is-ampel input:checked + .pc-slider:before {
  background-color: var(--pc-live);
}

/* ---- Gesperrt ----
   Nicht mit .pc-disabled-row aus legal.css zu verwechseln: Dort heisst
   gesperrt "dauerhaft an" (technisch notwendige Cookies). Hier behaelt der
   Regler seinen Zustand und laesst sich nur nicht bewegen. */
.pc-switch input:disabled + .pc-slider {
  cursor: not-allowed;
  opacity: 0.45;
}

/* ---- Die Zeile um den Regler herum ---- */

/* Der Regler steht seit 6.64.1 VORNE, siehe pcRegler() in site.js.

   `center`, und zwar mittig zum GANZEN Textblock, nicht zur ersten Zeile.
   Trägt die Zeile einen Hinweis in Klammern, ist der Block zweizeilig, und
   der Regler sitzt dann auf halber Höhe von Beschriftung und Klammer
   zusammen. Das ist eine Vorgabe von Robert vom 15.08.2026.

   6.64.1 hatte hier kurzzeitig `flex-start` samt einem Pixel Ausgleich am
   Regler. Beides ist mit 6.64.2 wieder entfallen: Der Ausgleich war für die
   Ausrichtung an der ersten Zeile gerechnet und wäre bei `center` falsch. */
.pc-reglerzeile {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  font-family: var(--pc-font-page);
  font-size: 13.5px;
  font-weight: var(--pc-weight-page);
  line-height: 1.45;
  color: var(--pc-text);
  flex-wrap: wrap;
}

.pc-reglerzeile.is-locked { color: var(--pc-muted); }

.pc-regler-text {
  flex: 1 1 200px;
  min-width: 0;
}

/* Der Zusatz in Klammern hinter dem Text. Gedaempft und eine Spur kleiner,
   damit er den Text nicht ueberlagert, aber lesbar bleibt. */
.pc-regler-hinweis {
  display: block;
  font-size: 11.5px;
  color: var(--pc-muted);
  margin-top: 2px;
}

/* Der Timer. Feste Breite in ch, damit die Zeile nicht bei jedem Tick
   springt: Die Ziffern der Monospace-Schrift sind alle gleich breit. */
.pc-regler-timer {
  font-family: "droid-sans-mono", monospace;
  font-size: 11.5px;
  letter-spacing: 0.5px;
  color: var(--pc-warn);
  white-space: nowrap;
  min-width: 9ch;
  text-align: right;
}

@media (max-width: 480px) {
  .pc-reglerzeile { gap: 8px; }
  .pc-regler-timer { min-width: 0; text-align: left; flex: 1 1 100%; }
}
