/* 14 mm lassen Chrome und Safari Platz für ihre eigene Kopf-/Fußzeile
   (Turniername · Dokument · Datum aus document.title oben, Seitenzahl unten). */
@page {
  margin: 14mm;
}

/* Benannte Seite fürs Querformat (B022). In Chrome selbst gemessen: eine so
   markierte Seite kommt als MediaBox 841,92 × 594,96 zwischen zwei
   Hochformatseiten heraus. Safari ist NICHT gegengemessen — trägt es die Regel
   nicht, bleibt es beim Hochformat, es geht also nichts kaputt. */
@page quer {
  size: A4 landscape;
  margin: 12mm;
}

@media print {
  html,
  body {
    background: #fff;
    color: #111;
    font-size: 10pt;
  }

  body.is-printing-document .page-shell {
    display: none !important;
  }

  body.is-printing-document .print-document {
    display: block !important;
  }

  button,
  select,
  input,
  textarea,
  .hero-actions,
  .app-header-switch,
  .race-day-shell,
  .participant-import-section,
  .template-toolbar,
  .tournament-workspace,
  .sheet-toolbar,
  #modeChooser,
  #configForm,
  #messageArea {
    display: none !important;
  }

  .card,
  .table-card,
  .team-summary-card,
  .winner-card {
    box-shadow: none;
    background: #fff;
    border-color: #bbb;
  }

  .step-card {
    padding: 16px;
    break-inside: avoid;
  }

  .layout {
    gap: 10px;
  }

  .print-document,
  .print-document * {
    box-shadow: none !important;
    text-shadow: none !important;
  }

  .print-document {
    font-family: "Lora", Georgia, "Times New Roman", serif;
    /* Auf Papier zählt Lesbarkeit, nicht die Bildschirmpalette: Schwarz auf
       Weiß, aber dieselben Schriften wie in der App. */
    font-variant-numeric: lining-nums tabular-nums;
  }

  .print-document h1,
  .print-document h2,
  .print-document h3,
  .print-document h4 {
    font-family: "Cormorant Garamond", Garamond, "Times New Roman", serif;
    font-weight: 600;
  }

  /* Dieselbe Grid-Falle wie bei .print-page: das Blatt umfasst alle Seiten des
     Dokuments und bricht damit immer um. */
  .print-document-sheet {
    display: block;
  }

  .print-document-sheet > * + * {
    margin-top: 16px;
  }

  .print-document-header,
  .print-page-header,
  .print-round-card-header,
  .print-certificate-frame footer {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    align-items: flex-start;
  }

  .print-document-header {
    padding-bottom: 10px;
    border-bottom: 2px solid #111;
    break-after: avoid;
  }

  .print-document-header h1,
  .print-page-header h2,
  .print-round-card h3,
  .print-certificate-frame h1 {
    margin: 0;
    color: #111;
  }

  .print-document-header h1 {
    font-size: 22pt;
  }

  .print-document-meta,
  .print-page-header > p,
  .print-round-card-header p {
    display: grid;
    gap: 3px;
    margin: 0;
    color: #333;
    text-align: right;
  }

  /* Blocksatz statt Grid — und das ist kein Geschmacksfrage: läuft eine
     Rasterseite über zwei Blätter, legt Chrome die Grid-Kinder auf dem zweiten
     Blatt ÜBEREINANDER. Im PDF gesehen: die Namenslegende lag quer über den
     letzten beiden Tabellenzeilen (G12 auf Papier). Ein Blockfluss bricht
     sauber um. */
  .print-page {
    display: block;
  }

  .print-page > * + * {
    margin-top: 12px;
  }

  .print-page + .print-page {
    break-before: page;
  }

  .print-page-header {
    padding: 8px 0 6px;
    border-bottom: 1px solid #bbb;
    break-after: avoid;
  }

  .print-round-grid {
    display: grid;
    gap: 10px;
  }

  .print-round-card,
  .print-winner-card {
    border: 1px solid #bbb;
    border-radius: 0;
    padding: 10px;
    break-inside: avoid;
    background: #fff;
  }

  .print-round-card-header {
    margin-bottom: 8px;
  }

  .print-round-card-header p {
    font-size: 8pt;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    text-align: left;
  }

  .print-round-card-header span {
    font-weight: 700;
  }

  .print-match-table,
  .print-document .stats-table {
    width: 100%;
    min-width: 0;
    border-collapse: collapse;
    table-layout: auto;
    font-size: 9pt;
  }

  .print-match-table thead,
  .print-document .stats-table thead {
    display: table-header-group;
  }

  .print-match-table tr,
  .print-document .stats-table tr {
    break-inside: avoid;
  }

  .print-match-table th,
  .print-match-table td,
  .print-document .stats-table th,
  .print-document .stats-table td {
    border: 1px solid #bbb;
    padding: 5px 6px;
    text-align: left;
    vertical-align: middle;
    white-space: normal;
    overflow-wrap: anywhere;
  }

  /* B061: „Nr." brach bei 28 px und 9 pt zu „Nr"/„." um — in jeder
     Rundenkarte jedes Formats. 34 px plus nowrap halten den Kopf in einer
     Zeile; die Ziffern darunter brauchen nicht mehr. */
  .print-match-table th:first-child,
  .print-match-table td:first-child {
    width: 34px;
    text-align: center;
    white-space: nowrap;
  }

  /* Dieselbe Klasse Fehler in jedem anderen gedruckten Tabellenkopf: ein Kopf,
     der umbricht, verschiebt die ganze Zeile. Werte dürfen weiter umbrechen. */
  .print-document th {
    white-space: nowrap;
  }

  .print-document .print-result-matrix-table th.print-result-matrix-player-heading {
    white-space: nowrap;
  }

  .print-match-table th:nth-child(3),
  .print-match-table td:nth-child(3) {
    width: 76px;
    text-align: center;
  }

  /* Der TT-Race-Spielplan trägt echte Ergebnisse samt Sätzen; 76 px pressen
     „11:9, 8:11, 11:7, 5:11, 12:10" in drei Zeilen (gemessen). 118 px reichen
     für zwei — die Begegnungsspalte gibt den Platz her. */
  .print-ttrace-schedule-table th:nth-child(3),
  .print-ttrace-schedule-table td:nth-child(3) {
    width: 118px;
  }

  /* Ergebniszelle mit Satzdetails: Satzstand fett, die einzelnen Sätze klein
     darunter. Ohne die zweite Zeile presst die 76-px-Spalte
     „11:9, 8:11, 11:7, 5:11, 12:10" in fünf Zeilen. */
  .print-match-table td strong {
    display: block;
  }

  .print-match-table td small {
    display: block;
    margin-top: 1px;
    color: #444;
    font-size: 7pt;
    line-height: 1.25;
  }

  .print-document .stats-table th,
  .print-document .stats-table td {
    text-align: center;
  }

  .print-document .stats-table td:nth-child(2),
  .print-document .stats-table th:nth-child(2) {
    text-align: left;
  }

  /* Verbindet das Dokument mit der benannten @page-Regel oben. Ohne diese
     Zeilen ist `@page quer` totes CSS. Die Lage gilt fürs ganze Dokument, vom
     Kopf bis zur letzten Rundenkarte — eine gemischte Lage lässt Chrome alles
     auf der Breite der ersten Seite auslegen und schneidet die schmaleren
     Seiten rechts ab (im PDF gesehen). */
  .print-document--quer,
  .print-document--quer .print-document-sheet,
  .print-document--quer .print-document-header,
  .print-document--quer .print-page,
  .print-document--quer .print-certificate-page {
    page: quer;
  }

  .print-document .stats-table.print-result-matrix-table {
    font-size: 8.2pt;
    table-layout: fixed;
    min-width: 0;
  }

  .print-result-matrix-name-col {
    width: 31%;
  }

  .print-result-matrix-table.has-summary .print-result-matrix-name-col {
    width: 24%;
  }

  /* Bis acht Spalten bleibt genug übrig, um die Namen breiter zu setzen. */
  .print-result-matrix-table.has-wide-names .print-result-matrix-name-col {
    width: 40%;
  }

  .print-result-matrix-table.has-summary.has-wide-names .print-result-matrix-name-col {
    width: 34%;
  }

  .print-result-matrix-score-col {
    width: auto;
  }

  .print-result-matrix-summary-col {
    width: 8%;
  }

  .print-document .stats-table.print-result-matrix-table th,
  .print-document .stats-table.print-result-matrix-table td {
    padding: 4px 5px;
    position: static;
    text-align: center;
    line-height: 1.18;
  }

  /* Die vollständige Rangliste führt bewusst acht Kennzahlen. Im Druck bleibt
     ihre Kopfzeile einzeilig, damit die Tabelle als Vergleichszeile lesbar
     bleibt statt sich über zwei Zeilen auseinanderzuziehen. */
  .print-document .stats-table.full-ranking-table th,
  .print-document .stats-table.full-ranking-table td {
    padding-left: 3px;
    padding-right: 3px;
  }

  .print-document .stats-table.full-ranking-table th {
    font-size: 7pt;
    white-space: nowrap;
  }

  .print-document .stats-table.print-result-matrix-table th:nth-child(2),
  .print-document .stats-table.print-result-matrix-table td:nth-child(2) {
    text-align: center;
  }

  .print-document .stats-table.print-result-matrix-table th:first-child {
    min-width: 28mm;
  }

  /* B058: „MAXIMILIAN FREIHERR VON BODELSCHWINGH" lag mit nacktem `nowrap` und
     sichtbarem Überlauf quer über den ersten drei bis fünf Ergebniszellen —
     G12 auf Papier, schon ab acht Teilnehmern. Der Name endet jetzt an seiner
     Spalte; vollständig steht er in der Namenslegende unter dem Raster. */
  .print-document .stats-table.print-result-matrix-table th.print-result-matrix-player-heading {
    display: table-cell;
    text-align: left;
    white-space: nowrap;
    overflow: hidden;
  }

  .print-result-matrix-player-name {
    display: inline-block;
    max-width: calc(100% - 21px);
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: bottom;
    white-space: nowrap;
  }

  /* Namenslegende unter dem Raster: beim Teamwettbewerb Pflicht (Zeilen und
     Spalten sind zwei verschiedene Mannschaften, B060), sonst der Ort, an dem
     der gekürzte Name vollständig nachzulesen ist. */
  .print-matrix-legend {
    margin: 6px 0 0;
    font-size: 8pt;
    line-height: 1.35;
    color: #333;
    break-inside: avoid;
  }

  .print-matrix-legend strong {
    font-weight: 700;
  }

  /* Kopf-/Fußzeile des Ausdrucks liefert der Browser aus `document.title`
     (oben Turniername · Dokument · Datum, unten die Seitenzahl). Ein eigenes
     `position: fixed`-Band wurde hier ausprobiert und wieder entfernt: Chrome
     positioniert es nicht je Seite neu, es lag quer über dem Text der
     Folgeseiten. Jede `.print-page` trägt zusätzlich ihren eigenen Kopf mit
     Turniername und Dokumentnamen. */

  .print-document .stats-table.print-result-matrix-table .diagonal-cell {
    background: #eeeeee;
    color: #333333;
    font-weight: 800;
  }

  .print-result-matrix-player-heading {
    display: table-cell;
  }

  .print-result-matrix-number-heading {
    text-align: center;
    white-space: nowrap;
  }

  /* Teamspalten tragen Spielernamen statt bloßer Nummern. Bei großen
     Mannschaften laufen sie senkrecht, damit die Ergebniszellen im Raster
     bleiben und die Namen nicht über die Nachbarspalte drucken. */
  .print-document .stats-table.print-result-matrix-table th.print-result-matrix-team-heading {
    font-size: 6.8pt;
    overflow: hidden;
    padding: 4px 2px;
    text-align: center;
    vertical-align: bottom;
  }

  .print-result-matrix-team-name {
    display: block;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .print-document .stats-table.print-result-matrix-table th.print-result-matrix-team-heading.is-vertical {
    height: 50mm;
    overflow: visible;
    padding: 2px;
  }

  .print-result-matrix-team-heading.is-vertical .print-result-matrix-team-name {
    overflow: visible;
    text-overflow: clip;
    transform: rotate(180deg);
    white-space: nowrap;
    writing-mode: vertical-rl;
  }

  .print-matrix-player-number {
    color: #444;
    display: inline-block;
    font-weight: 800;
    margin-right: 5px;
    text-align: right;
    width: 14px;
  }

  .print-document .print-result-matrix-table td strong {
    display: block;
  }

  .print-document .print-result-matrix-table td small {
    display: block;
    margin-top: 2px;
    color: #444;
    font-size: 7pt;
    line-height: 1.2;
  }

  .print-result-matrix-summary-cell {
    background: #f5f5f5;
  }

  .print-compact-round-section {
    display: grid;
    gap: 8px;
    margin-top: 12px;
    break-inside: auto;
  }

  .print-compact-round-section > header {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    align-items: end;
    padding-top: 4px;
    border-top: 1px solid #bbb;
    break-after: avoid;
  }

  .print-compact-round-section h3 {
    margin: 0;
    font-size: 11pt;
  }

  .print-compact-round-section p {
    margin: 0;
    color: #444;
    font-size: 8pt;
    text-align: right;
  }

  .print-compact-round-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
    align-items: start;
  }

  .print-compact-round-card {
    border: 1px solid #bbb;
    padding: 6px;
    break-inside: avoid;
  }

  .print-compact-round-card h4 {
    margin: 0 0 4px;
    font-size: 9.5pt;
  }

  .print-compact-round-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 8pt;
  }

  .print-compact-round-table td {
    border-top: 1px solid #ddd;
    padding: 3px 4px;
    vertical-align: top;
    overflow-wrap: anywhere;
  }

  .print-compact-round-table td:first-child {
    width: 72%;
  }

  .print-compact-round-table td:last-child {
    width: 28%;
    text-align: right;
    white-space: nowrap;
  }

  .print-compact-round-table strong,
  .print-compact-round-table small {
    display: block;
  }

  .print-compact-round-table small {
    margin-top: 1px;
    color: #444;
    font-size: 7pt;
    white-space: normal;
  }

  .print-table-wrapper,
  .print-document .table-wrapper {
    overflow: visible;
  }

  .print-score-box {
    display: inline-block;
    width: 52px;
    height: 22px;
    border-bottom: 1px solid #111;
  }

  .print-note-line {
    display: block;
    height: 22px;
    border-bottom: 1px solid #111;
  }

  .print-bye-row td {
    background: #f2f2f2;
  }

  .print-winner-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
  }

  .print-winner-card {
    display: grid;
    gap: 8px;
    min-height: 72px;
  }

  .print-winner-card span {
    color: #555;
    font-weight: 700;
    text-transform: uppercase;
    font-size: 8pt;
  }

  .print-winner-card strong {
    font-size: 15pt;
  }

  .print-certificate-document {
    display: block;
  }

  .print-certificate-page {
    min-height: calc(100vh - 28mm);
    display: grid;
    align-items: center;
    break-after: page;
  }

  .print-certificate-page:last-child {
    break-after: auto;
  }

  .print-certificate-frame {
    min-height: 180mm;
    display: grid;
    gap: 18px;
    align-content: center;
    justify-items: center;
    padding: 24mm 18mm;
    border: 2px solid #111;
    text-align: center;
  }

  .print-certificate-frame h1 {
    font-size: 34pt;
  }

  .print-certificate-tournament {
    margin: 0;
    font-size: 17pt;
    font-weight: 700;
  }

  .print-certificate-placement {
    font-size: 20pt;
    font-weight: 700;
    border-top: 1px solid #111;
    border-bottom: 1px solid #111;
    padding: 10px 28px;
  }

  .print-certificate-frame strong {
    font-size: 28pt;
  }

  .print-certificate-frame footer {
    width: 100%;
    margin-top: 18mm;
    padding-top: 12mm;
  }
}
