Add documentation and templates for Start-/Ergebnislisten v07: Introduce foundational templates, print styles and partials, and consolidate related session notes.

This commit is contained in:
2026-03-30 22:55:33 +02:00
parent 3f09cf7006
commit 8f5df00a98
29 changed files with 2499 additions and 0 deletions
@@ -0,0 +1,237 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Ergebnisliste - Turniersystem</title>
<style>
/* --- PRINT SETTINGS --- */
@page {
size: A4;
margin: 15mm 10mm 20mm 10mm;
@bottom-right {
content: "Seite " counter(page) " von " counter(pages);
font-family: sans-serif;
font-size: 8pt;
}
@bottom-left {
content: "Gedruckt: 30.03.2026 21:15"; /* Dynamisch zu füllen */
font-family: sans-serif;
font-size: 8pt;
}
}
:root {
--font-main: 'Helvetica Neue', Helvetica, Arial, sans-serif;
--border-color: #333;
--row-border: #ccc;
}
body {
font-family: var(--font-main);
font-size: 9pt;
line-height: 1.2;
margin: 0;
color: #000;
}
/* --- HEADER --- */
header {
border-bottom: 2px solid var(--border-color);
padding-bottom: 5px;
margin-bottom: 15px;
}
.header-top {
display: flex;
justify-content: space-between;
align-items: flex-end;
}
h1 {
font-size: 18pt;
margin: 0;
padding: 0;
}
.software-version {
font-size: 8pt;
color: #666;
}
/* --- METADATA GRID --- */
.metadata {
display: grid;
grid-template-columns: 2fr 1fr 1.5fr;
gap: 10px;
margin-bottom: 10px;
font-size: 9pt;
}
.meta-item {
margin-bottom: 2px;
}
.label {
font-weight: normal;
display: inline-block;
min-width: 80px;
}
.value {
font-weight: normal;
}
.officials {
margin-top: 5px;
font-style: italic;
}
/* --- TABLE --- */
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
thead th {
border-top: 1px solid var(--border-color);
border-bottom: 1px solid var(--border-color);
text-align: left;
padding: 4px 2px;
font-size: 8pt;
font-weight: normal;
}
tbody td {
border-bottom: 1px solid var(--row-border);
padding: 6px 2px;
vertical-align: top;
}
/* Spaltenbreiten & Ausrichtung */
.col-pos { width: 30px; font-weight: bold; text-align: center; }
.col-knr { width: 45px; }
.col-horse { width: 30%; }
.col-rider { width: 30%; }
.col-cat { width: 25px; text-align: center; }
.col-land { width: 40px; text-align: center; }
.col-score { width: 60px; text-align: right; font-weight: bold; }
.col-prize { width: 60px; text-align: right; }
/* Multi-line fields */
.sub-info {
display: block;
font-size: 7.5pt;
color: #333;
margin-top: 2px;
}
/* Zebra-Striping optional */
/* tbody tr:nth-child(even) { background-color: #f9f9f9; } */
</style>
</head>
<body>
<header>
<div class="header-top">
<h1>Ergebnisliste für Bewerb Nr.: 8 Abteilung: 1</h1>
<div class="software-version">PSO v1.07</div>
</div>
</header>
<div class="metadata">
<div>
<div class="meta-item"><span class="label">Turnier:</span> <span class="value">Neumarkt/M. OÖ - CDN-C_Neu CDNP-C_Neu</span></div>
<div class="meta-item"><span class="label">Prüfung:</span> <span class="value">Dressurreiterprüfung</span></div>
<div class="meta-item"><span class="label">Anzahl Starter:</span> <span class="value">8</span> &nbsp; <span class="label">Platziert:</span> <span class="value">5</span></div>
</div>
<div>
<div class="meta-item"><span class="label">Turnier Nr.:</span> <span class="value">25320</span></div>
<div class="meta-item"><span class="label">Klasse:</span> <span class="value">A</span></div>
</div>
<div>
<div class="meta-item"><span class="label">am</span> <span class="value">08.06.2025</span></div>
<div class="meta-item"><span class="label">Start um</span> <span class="value">12:30</span></div>
<div class="meta-item"><span class="label">Richtverfahren:</span> <span class="value">A</span></div>
</div>
</div>
<div class="officials">
Richter: C: Oberhumer Julia;
</div>
<table>
<thead>
<tr>
<th class="col-pos">Pos.</th>
<th class="col-knr">Kopf Nr.</th>
<th class="col-horse">Pferd<br><span style="font-size:7pt">Abstammung</span></th>
<th class="col-rider">Reiter<br><span style="font-size:7pt">Verein</span></th>
<th class="col-cat">K</th>
<th class="col-land">Land</th>
<th class="col-score">Wertung<br><span style="font-size:7pt">Gesamtnote</span></th>
<th class="col-prize">Geldpreis</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col-pos">1</td>
<td class="col-knr">5617</td>
<td class="col-horse">
<strong>Amigo 222</strong>
<span class="sub-info">Andalusier-PRE/2013/W/Brauner/Decisivo A</span>
</td>
<td class="col-rider">
<strong>Pelzeder Sandra</strong>
<span class="sub-info">Sportunion Pferdefreunde Altenberg</span>
</td>
<td class="col-cat"></td>
<td class="col-land">O</td>
<td class="col-score">8,00</td>
<td class="col-prize"></td>
</tr>
<tr>
<td class="col-pos">2</td>
<td class="col-knr">4G13</td>
<td class="col-horse">
<strong>Kokusz</strong>
<span class="sub-info">Ung. HB/2011/S/Fuchs/3108 Dárda</span>
</td>
<td class="col-rider">
<strong>Resch Lisa</strong>
<span class="sub-info">Reitclub Scherhaufgut</span>
</td>
<td class="col-cat"></td>
<td class="col-land">O</td>
<td class="col-score">7,80</td>
<td class="col-prize"></td>
</tr>
<tr>
<td class="col-pos">3</td>
<td class="col-knr">A404</td>
<td class="col-horse">
<strong>Cordonello</strong>
<span class="sub-info">Österr. WB/2018/W/Schimmel/Cordolensky</span>
</td>
<td class="col-rider">
<strong>Neubauer Sandra</strong>
<span class="sub-info">Union Reiterhof Premser</span>
</td>
<td class="col-cat"></td>
<td class="col-land">O</td>
<td class="col-score">5,00</td>
<td class="col-prize"></td>
</tr>
</tbody>
</table>
<footer style="position: fixed; bottom: 0; width: 100%; font-size: 8pt; border-top: 1px solid #eee; padding-top: 5px;">
<div style="display: flex; justify-content: space-between;">
<span>Gedruckt: 08.06.2025 16:09:22</span>
<span>Seite 1 von 1</span>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,217 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<style>
/* --- DESIGN SYSTEM --- */
:root {
--primary-color: #1a2b3c; /* Dunkelblau/Anthrazit */
--accent-gray: #f8f9fa;
--border-light: #e0e0e0;
--text-main: #212529;
--text-muted: #6c757d;
--font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
}
@page {
size: A4;
margin: 15mm;
@bottom-center {
content: "Seite " counter(page) " von " counter(pages);
font-family: var(--font-family);
font-size: 8pt;
color: var(--text-muted);
}
}
body {
font-family: var(--font-family);
color: var(--text-main);
line-height: 1.4;
margin: 0;
-webkit-print-color-adjust: exact;
}
/* --- HEADER & METADATA --- */
header {
display: flex;
justify-content: space-between;
align-items: flex-start;
border-bottom: 3px solid var(--primary-color);
padding-bottom: 10px;
margin-bottom: 20px;
}
.title-area h1 {
font-size: 20pt;
margin: 0;
text-transform: uppercase;
letter-spacing: 1px;
color: var(--primary-color);
}
.badge-bewerb {
background: var(--primary-color);
color: white;
padding: 4px 12px;
border-radius: 4px;
font-weight: bold;
font-size: 11pt;
margin-top: 5px;
display: inline-block;
}
.event-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
background: var(--accent-gray);
padding: 15px;
border-radius: 8px;
margin-bottom: 20px;
font-size: 9pt;
}
.meta-box strong {
display: block;
color: var(--text-muted);
text-transform: uppercase;
font-size: 7pt;
margin-bottom: 2px;
}
/* --- TABLE DESIGN --- */
table {
width: 100%;
border-collapse: collapse;
}
thead th {
text-align: left;
padding: 10px 5px;
border-bottom: 2px solid var(--primary-color);
font-size: 8pt;
text-transform: uppercase;
color: var(--primary-color);
}
tbody tr {
border-bottom: 1px solid var(--border-light);
}
tbody td {
padding: 10px 5px;
vertical-align: top;
}
/* Spalten-Styling */
.rank { font-weight: bold; font-size: 11pt; width: 35px; }
.knr { color: var(--text-muted); font-family: monospace; width: 50px; }
.name-bold { font-weight: 600; font-size: 10pt; display: block; }
.sub-text { font-size: 8pt; color: var(--text-muted); display: block; margin-top: 2px; }
.score-cell {
text-align: right;
font-weight: bold;
font-size: 11pt;
background: rgba(26, 43, 60, 0.03);
width: 80px;
}
.nation-flag {
font-weight: bold;
color: #d32f2f; /* Dezent für AUT-Klub Kennzeichnung */
}
/* --- FOOTER --- */
footer {
position: fixed;
bottom: 0;
width: 100%;
font-size: 7pt;
color: var(--text-muted);
display: flex;
justify-content: space-between;
border-top: 1px solid var(--border-light);
padding-top: 5px;
}
</style>
</head>
<body>
<header>
<div class="title-area">
<h1>Ergebnisliste</h1>
<div class="badge-bewerb">Bewerb 08 | Abt. 1</div>
</div>
<div style="text-align: right; font-size: 8pt; color: var(--text-muted);">
Turnier-ID: 25320<br>
Reglement: ÖTO 2026
</div>
</header>
<div class="event-grid">
<div class="meta-box">
<strong>Veranstaltungsort</strong>
Neumarkt/M. OÖ — CDN-C_Neu
</div>
<div class="meta-box">
<strong>Prüfung / Klasse</strong>
Dressurreiterprüfung | Klasse A
</div>
<div class="meta-box">
<strong>Datum / Richter</strong>
08.06.2025 | Julia Oberhumer (C)
</div>
</div>
<table>
<thead>
<tr>
<th>Rang</th>
<th>KNR</th>
<th>Pferd / Abstammung</th>
<th>Reiter / Verein</th>
<th style="text-align:center">Land</th>
<th style="text-align:right">Wertung</th>
</tr>
</thead>
<tbody>
<tr>
<td class="rank">1</td>
<td class="knr">5617</td>
<td>
<span class="name-bold">Amigo 222</span>
<span class="sub-text">Andalusier-PRE / 2013 / W / Brauner</span>
</td>
<td>
<span class="name-bold">Pelzeder Sandra</span>
<span class="sub-text">Sportunion Pferdefreunde Altenberg</span>
</td>
<td style="text-align:center" class="nation-flag">AUT</td>
<td class="score-cell">8,00</td>
</tr>
<tr>
<td class="rank">2</td>
<td class="knr">4G13</td>
<td>
<span class="name-bold">Kokusz</span>
<span class="sub-text">Ung. HB / 2011 / S / Fuchs</span>
</td>
<td>
<span class="name-bold">Resch Lisa</span>
<span class="sub-text">Reitclub Scherhaufgut</span>
</td>
<td style="text-align:center" class="nation-flag">AUT</td>
<td class="score-cell">7,80</td>
</tr>
</tbody>
</table>
<footer>
<span>Erstellt mit Turniersystem Pro v1.07</span>
<span>Zeitstempel: 30.03.2026 21:10</span>
</footer>
</body>
</html>
@@ -0,0 +1,255 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<style>
:root {
--primary-dark: #1a202c;
--accent-blue: #2b6cb0;
--gray-bg: #f7fafc;
--border-color: #e2e8f0;
--text-main: #2d3748;
--text-muted: #718096;
--font-sans: 'Inter', -apple-system, sans-serif;
}
@page {
size: A4;
margin: 12mm;
@bottom-left {
content: "Generiert am: 30.03.2026";
font-size: 7pt;
color: #a0aec0;
}
@bottom-right {
content: "Seite " counter(page) " von " counter(pages);
font-size: 7pt;
}
}
body {
font-family: var(--font-sans);
color: var(--text-main);
font-size: 9pt;
line-height: 1.3;
margin: 0;
}
/* --- HEADER SECTION --- */
.event-header {
display: flex;
justify-content: space-between;
border-bottom: 2px solid var(--primary-dark);
padding-bottom: 10px;
margin-bottom: 15px;
}
.event-title h1 {
font-size: 16pt;
margin: 0;
color: var(--primary-dark);
font-weight: 800;
}
.event-id {
font-family: monospace;
background: var(--primary-dark);
color: white;
padding: 2px 8px;
border-radius: 4px;
font-size: 9pt;
}
/* --- DETAIL GRID --- */
.info-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 20px;
}
.info-group {
background: var(--gray-bg);
padding: 10px;
border-radius: 6px;
border: 1px solid var(--border-color);
}
.info-group h2 {
font-size: 7pt;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--accent-blue);
margin: 0 0 5px 0;
border-bottom: 1px solid var(--border-color);
padding-bottom: 3px;
}
.detail-row {
display: flex;
margin-bottom: 2px;
}
.detail-label {
width: 100px;
font-weight: 600;
font-size: 8pt;
}
/* --- START LIST TABLE --- */
table {
width: 100%;
border-collapse: collapse;
}
thead th {
text-align: left;
background: var(--primary-dark);
color: white;
padding: 8px 5px;
font-size: 8pt;
text-transform: uppercase;
}
tbody tr {
border-bottom: 1px solid var(--border-color);
}
tbody tr:nth-child(even) {
background-color: #fcfcfc;
}
.col-time { width: 60px; font-weight: bold; color: var(--accent-blue); }
.col-knr { width: 45px; font-family: monospace; font-weight: bold; }
.col-rider { width: 35%; }
.col-horse { width: 35%; }
.col-nat { width: 40px; text-align: center; font-weight: bold; }
.sub-data {
display: block;
font-size: 7.5pt;
color: var(--text-muted);
margin-top: 2px;
}
.name-main {
display: block;
font-weight: 700;
font-size: 9.5pt;
}
.badge-status {
font-size: 7pt;
padding: 1px 4px;
border-radius: 3px;
background: #edf2f7;
border: 1px solid #cbd5e0;
}
</style>
</head>
<body>
<header class="event-header">
<div class="event-title">
<h1>STARTLISTE</h1>
<span style="color: var(--accent-blue); font-weight: 600;">CDN-C Neumarkt / Oberösterreich</span>
</div>
<div style="text-align: right">
<span class="event-id">Turnier-Nr: 25320</span>
<div style="font-size: 8pt; margin-top: 5px;">08.06.2025 10.06.2025</div>
</div>
</header>
<div class="info-grid">
<div class="info-group">
<h2>Bewerb-Informationen</h2>
<div class="detail-row">
<span class="detail-label">Bewerb:</span>
<span><strong>008</strong> | Dressurreiterprüfung</span>
</div>
<div class="detail-row">
<span class="detail-label">Klasse/Aufg:</span>
<span>A | Aufgabe A3 (20x40m)</span>
</div>
<div class="detail-row">
<span class="detail-label">Richtverf.:</span>
<span>ÖTO §204.2 (Gemeinsames Richten)</span>
</div>
</div>
<div class="info-group">
<h2>Jury & Offizielle</h2>
<div class="detail-row">
<span class="detail-label">Richter:</span>
<span>Julia Oberhumer (C), Dr. Max Mustermann</span>
</div>
<div class="detail-row">
<span class="detail-label">Parcours:</span>
<span>Ing. Franz Beispieler</span>
</div>
<div class="detail-row">
<span class="detail-label">Startzeit:</span>
<span><strong>12:30 Uhr</strong></span>
</div>
</div>
</div>
<table>
<thead>
<tr>
<th class="col-time">Zeit</th>
<th class="col-knr">KNR</th>
<th class="col-rider">Reiter / Verein</th>
<th class="col-nat">Nat.</th>
<th class="col-horse">Pferd / Abstammung</th>
<th style="text-align: right;">Info</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col-time">12:30</td>
<td class="col-knr">5617</td>
<td>
<span class="name-main">PELZEDER Sandra</span>
<span class="sub-data">Sportunion Pferdefreunde Altenberg</span>
</td>
<td class="col-nat">AUT</td>
<td>
<span class="name-main">Amigo 222</span>
<span class="sub-data">PRE / 2013 / W / Brauner / Decisivo A</span>
</td>
<td style="text-align: right;"><span class="badge-status">OK</span></td>
</tr>
<tr>
<td class="col-time">12:38</td>
<td class="col-knr">4G13</td>
<td>
<span class="name-main">RESCH Lisa</span>
<span class="sub-data">Reitclub Scherhaufgut</span>
</td>
<td class="col-nat">AUT</td>
<td>
<span class="name-main">Kokusz</span>
<span class="sub-data">Ung. HB / 2011 / S / Fuchs / Dárda</span>
</td>
<td style="text-align: right;"><span class="badge-status">OK</span></td>
</tr>
<tr>
<td class="col-time">12:46</td>
<td class="col-knr">4Y59</td>
<td>
<span class="name-main">RINTELEN-BERNEGGER Flora</span>
<span class="sub-data">Reitverein Exaequo</span>
</td>
<td class="col-nat">AUT</td>
<td>
<span class="name-main">Legolas 196</span>
<span class="sub-data">Oldenburger / 2011 / W / Brauner / Levisonn</span>
</td>
<td style="text-align: right;"><span class="badge-status">a.K.</span></td>
</tr>
</tbody>
</table>
</body>
</html>
@@ -0,0 +1,212 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<style>
:root {
--primary: #000;
--secondary: #4a5568;
--bg-light: #f8f9fa;
--border: #cbd5e0;
--font-size-main: 9pt;
--font-size-sub: 7.5pt;
}
@page {
size: A4;
margin: 10mm 12mm 15mm 12mm;
@bottom-left { content: "Turniersystem 2026"; font-size: 7pt; color: #718096; }
@bottom-right { content: "Seite " counter(page) " von " counter(pages); font-size: 7pt; }
}
body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
color: var(--primary);
font-size: var(--font-size-main);
line-height: 1.25;
margin: 0;
}
/* --- HEADER: Turnier & Bewerb --- */
.header-container {
border-bottom: 2px solid var(--primary);
margin-bottom: 15px;
padding-bottom: 5px;
}
.top-row {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.top-row h1 {
font-size: 16pt;
margin: 0;
font-weight: bold;
text-transform: uppercase;
}
.meta-grid {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr;
gap: 15px;
margin-top: 10px;
padding: 8px;
background-color: var(--bg-light);
border: 1px solid var(--border);
border-radius: 4px;
}
.meta-item b {
display: block;
font-size: 6.5pt;
text-transform: uppercase;
color: var(--secondary);
}
/* --- TABLE --- */
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
thead th {
text-align: left;
border-top: 1px solid var(--primary);
border-bottom: 1px solid var(--primary);
padding: 6px 4px;
font-size: 8pt;
font-weight: bold;
}
tbody td {
border-bottom: 1px solid var(--border);
padding: 8px 4px;
vertical-align: top;
}
.col-time { width: 50px; font-weight: bold; }
.col-knr { width: 45px; font-family: 'Courier New', Courier, monospace; }
.col-rider { width: 35%; }
.col-horse { width: 35%; }
.col-nat { width: 35px; text-align: center; }
.main-info { display: block; font-weight: bold; font-size: 9.5pt; }
.sub-info { display: block; font-size: var(--font-size-sub); color: var(--secondary); margin-top: 2px; }
.officials-box {
margin-top: 8px;
font-size: 8pt;
font-style: italic;
color: var(--secondary);
}
</style>
</head>
<body>
<header class="header-container">
<div class="top-row">
<h1>Startliste</h1>
<div style="text-align: right;">
<b>Turnier Nr.:</b> 25320<br>
<b>Datum:</b> 30.03.2026
</div>
</div>
<div class="meta-grid">
<div class="meta-item">
<b>Bewerb / Abteilung</b>
Bewerb Nr. 08 | Abteilung 1
</div>
<div class="meta-item">
<b>Prüfung / Klasse</b>
Dressurreiterprüfung | Klasse A
</div>
<div class="meta-item">
<b>Ort / Land</b>
Neumarkt/M. OÖ | AUT
</div>
<div class="meta-item">
<b>Aufgabe / Viereck</b>
Aufgabe A3 | 20 x 40 m
</div>
<div class="meta-item">
<b>Richtverfahren</b>
A (ÖTO §204.2)
</div>
<div class="meta-item">
<b>Startzeit</b>
12:30 Uhr
</div>
</div>
<div class="officials-box">
Richter: C: Oberhumer Julia; M: Dr. Max Mustermann; Parcours: Ing. Franz Beispieler
</div>
</header>
<table>
<thead>
<tr>
<th class="col-time">Start</th>
<th class="col-knr">KNR</th>
<th class="col-rider">Reiter <span style="font-weight: normal; font-size: 7pt;">/ Verein</span></th>
<th class="col-nat">Land</th>
<th class="col-horse">Pferd <span style="font-weight: normal; font-size: 7pt;">/ Abstammung</span></th>
<th style="text-align: right;">Info</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col-time">12:30</td>
<td class="col-knr">5617</td>
<td>
<span class="main-info">PELZEDER Sandra</span>
<span class="sub-info">Sportunion Pferdefreunde Altenberg</span>
</td>
<td class="col-nat">AUT</td> <td>
<span class="main-info">Amigo 222</span>
<span class="sub-info">Andalusier-PRE / 2013 / W / Brauner / Decisivo A</span>
</td>
<td style="text-align: right; font-size: 7pt;"></td>
</tr>
<tr>
<td class="col-time">12:38</td>
<td class="col-knr">4G13</td>
<td>
<span class="main-info">RESCH Lisa</span>
<span class="sub-info">Reitclub Scherhaufgut</span>
</td>
<td class="col-nat">AUT</td>
<td>
<span class="main-info">Kokusz</span>
<span class="sub-info">Ung. HB / 2011 / S / Fuchs / 3108 Dárda</span>
</td>
<td style="text-align: right; font-size: 7pt;"></td>
</tr>
<tr>
<td class="col-time">12:46</td>
<td class="col-knr">4Y59</td>
<td>
<span class="main-info">RINTELEN-BERNEGGER Flora</span>
<span class="sub-info">Reitverein Exaequo</span>
</td>
<td class="col-nat">AUT</td>
<td>
<span class="main-info">Legolas 196</span>
<span class="sub-info">Oldenburger / 2011 / W / Brauner / Levisonn</span>
</td>
<td style="text-align: right; font-size: 7pt;">a.K.</td>
</tr>
</tbody>
</table>
<footer style="position: fixed; bottom: 0; width: 100%; font-size: 7pt; color: var(--secondary); border-top: 1px solid var(--border); padding-top: 4px;">
<span>Gedruckt: 30.03.2026 21:30:22</span>
<span style="float: right;">Bewerb 08 | Abteilung 1</span>
</footer>
</body>
</html>
@@ -0,0 +1,217 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<style>
:root {
--primary: #000;
--secondary: #4a5568;
--highlight: #2d3748;
--bg-light: #f8f9fa;
--border: #cbd5e0;
--font-main: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
@page {
size: A4;
margin: 10mm 12mm 15mm 12mm;
@bottom-left { content: "Turniersystem PRO v1.07"; font-size: 7pt; color: #718096; }
@bottom-right { content: "Seite " counter(page) " von " counter(pages); font-size: 7pt; }
}
body {
font-family: var(--font-main);
color: var(--primary);
font-size: 9pt;
line-height: 1.3;
margin: 0;
}
/* --- HEADER BEREICH --- */
header {
border-bottom: 2px solid var(--primary);
margin-bottom: 15px;
padding-bottom: 8px;
}
.title-row {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.title-group h1 {
font-size: 22pt;
margin: 0;
font-weight: 900;
text-transform: uppercase;
letter-spacing: -0.5px;
}
/* Gewünschte Änderung: Bewerb prominent links */
.bewerb-subtitle {
font-size: 14pt;
font-weight: 600;
color: var(--highlight);
margin-top: -2px;
display: block;
}
.tournament-info {
text-align: right;
font-size: 8.5pt;
line-height: 1.2;
}
/* --- DETAIL GRID --- */
.meta-grid {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr;
gap: 12px;
margin-top: 12px;
padding: 10px;
background-color: var(--bg-light);
border: 1px solid var(--border);
border-radius: 4px;
}
.meta-item b {
display: block;
font-size: 6.5pt;
text-transform: uppercase;
color: var(--secondary);
margin-bottom: 2px;
}
.meta-item span {
font-size: 9pt;
font-weight: 500;
}
/* --- TABELLE --- */
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
thead th {
text-align: left;
border-top: 1px solid var(--primary);
border-bottom: 1px solid var(--primary);
padding: 8px 4px;
font-size: 8pt;
font-weight: bold;
text-transform: uppercase;
}
tbody tr {
border-bottom: 1px solid var(--border);
}
tbody td {
padding: 10px 4px;
vertical-align: top;
}
.col-time { width: 55px; font-weight: bold; }
.col-knr { width: 50px; font-family: 'Courier New', monospace; font-weight: bold; }
.main-info { display: block; font-weight: bold; font-size: 10pt; }
.sub-info { display: block; font-size: 7.5pt; color: var(--secondary); margin-top: 3px; }
.officials-text {
margin-top: 10px;
font-size: 8pt;
font-style: italic;
}
</style>
</head>
<body>
<header>
<div class="title-row">
<div class="title-group">
<h1>Startliste</h1>
<div class="bewerb-subtitle">Bewerb Nr. 008 | Abteilung 1</div>
</div>
<div class="tournament-info">
<b>Turnier-Nr.:</b> 25320<br>
<b>Datum:</b> 30.03.2026<br>
<b>Ort:</b> Neumarkt/M. OÖ
</div>
</div>
<div class="meta-grid">
<div class="meta-item">
<b>Prüfung / Klasse</b>
<span>Dressurreiterprüfung | Klasse A</span>
</div>
<div class="meta-item">
<b>Aufgabe / Viereck</b>
<span>Aufgabe A3 | 20 x 40 m</span>
</div>
<div class="meta-item">
<b>Richtverfahren</b>
<span>A (ÖTO §204.2)</span>
</div>
</div>
<div class="officials-text">
<b>Richter:</b> C: Oberhumer Julia; M: Dr. Max Mustermann | <b>Parcours:</b> Ing. Franz Beispieler
</div>
</header>
<table>
<thead>
<tr>
<th class="col-time">Start</th>
<th class="col-knr">KNR</th>
<th style="width: 35%;">Reiter / Verein</th>
<th style="width: 35%;">Pferd / Abstammung</th>
<th style="text-align: center; width: 40px;">Land</th>
<th style="text-align: right;">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col-time">12:30</td>
<td class="col-knr">5617</td>
<td>
<span class="main-info">PELZEDER Sandra</span>
<span class="sub-info">Sportunion Pferdefreunde Altenberg</span>
</td>
<td>
<span class="main-info">Amigo 222</span>
<span class="sub-info">Andalusier-PRE / 2013 / W / Brauner / Decisivo A</span>
</td>
<td style="text-align: center; font-weight: bold;">AUT</td>
<td style="text-align: right; font-size: 8pt;">OK</td>
</tr>
<tr>
<td class="col-time">12:38</td>
<td class="col-knr">4G13</td>
<td>
<span class="main-info">RESCH Lisa</span>
<span class="sub-info">Reitclub Scherhaufgut</span>
</td>
<td>
<span class="main-info">Kokusz</span>
<span class="sub-info">Ung. HB / 2011 / S / Fuchs / 3108 Dárda</span>
</td>
<td style="text-align: center; font-weight: bold;">AUT</td>
<td style="text-align: right; font-size: 8pt;">OK</td>
</tr>
</tbody>
</table>
<footer style="position: fixed; bottom: 0; width: 100%; font-size: 7pt; color: var(--secondary); border-top: 1px solid var(--border); padding-top: 5px;">
<div style="display: flex; justify-content: space-between;">
<span>Gedruckt am 30.03.2026 um 21:35 Uhr</span>
<span>Bewerb 008 | Abteilung 1</span>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,278 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<style>
:root {
--primary: #000;
--secondary: #4a5568;
--highlight: #1a202c;
--bg-light: #f8f9fa;
--border: #cbd5e0;
--font-main: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
@page {
size: A4;
margin: 10mm 12mm 15mm 12mm;
@bottom-left {
content: "Turniersystem PRO v1.07";
font-size: 7pt;
color: #718096;
}
@bottom-right {
content: "Seite " counter(page) " von " counter(pages);
font-size: 7pt;
}
}
body {
font-family: var(--font-main),serif;
color: var(--primary);
font-size: 9pt;
line-height: 1.3;
margin: 0;
}
/* --- HEADER BEREICH --- */
header {
border-bottom: 2px solid var(--primary);
margin-bottom: 12px;
padding-bottom: 8px;
}
.title-row {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.title-group h1 {
font-size: 20pt;
margin: 0;
font-weight: 900;
text-transform: uppercase;
}
.bewerb-subtitle {
font-size: 15pt;
font-weight: 700;
color: var(--highlight);
margin-top: -2px;
display: block;
}
.tournament-info {
text-align: right;
font-size: 8.5pt;
line-height: 1.2;
}
/* --- DETAIL GRID (Pflichtangaben) --- */
.meta-grid {
display: grid;
grid-template-columns: 1.2fr 1fr 1fr;
gap: 12px;
margin-top: 10px;
padding: 10px;
background-color: var(--bg-light);
border: 1px solid var(--border);
border-radius: 4px;
}
.meta-item b {
display: block;
font-size: 6.5pt;
text-transform: uppercase;
color: var(--secondary);
margin-bottom: 2px;
}
.meta-item span {
font-size: 9pt;
font-weight: 500;
}
/* --- TABELLE --- */
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
thead th {
text-align: left;
border-top: 1px solid var(--primary);
border-bottom: 1px solid var(--primary);
padding: 8px 4px;
font-size: 8pt;
font-weight: bold;
text-transform: uppercase;
}
tbody tr {
border-bottom: 1px solid var(--border);
}
tbody td {
padding: 10px 4px;
vertical-align: top;
}
/* Spalten-Definitionen */
.col-start {
width: 55px;
font-weight: bold;
}
.col-rider {
width: 32%;
}
.col-knr {
width: 50px;
font-family: 'Courier New', monospace;
font-weight: bold;
text-align: center;
}
.col-horse {
width: 35%;
}
.col-land {
width: 45px;
text-align: center;
font-weight: bold;
}
.col-status {
width: 50px;
text-align: right;
font-size: 8pt;
color: var(--secondary);
}
.main-info {
display: block;
font-weight: bold;
font-size: 10pt;
}
.sub-info {
display: block;
font-size: 7.5pt;
color: var(--secondary);
margin-top: 3px;
}
.officials-text {
margin-top: 8px;
font-size: 8pt;
font-style: italic;
}
</style>
<title></title>
</head>
<body>
<header>
<div class="title-row">
<div class="title-group">
<h1>Startliste</h1>
<div class="bewerb-subtitle">Bewerb 008 | Abt. 1</div>
</div>
<div class="tournament-info">
<b>Turnier-Nr.:</b> 25320<br>
<b>Datum:</b> 30.03.2026<br>
<b>Ort:</b> Neumarkt/M. OÖ
</div>
</div>
<div class="meta-grid">
<div class="meta-item">
<b>Prüfung / Klasse</b>
<span>Dressurreiterprüfung | Klasse A</span>
</div>
<div class="meta-item">
<b>Aufgabe / Viereck</b>
<span>Aufgabe A3 | 20 x 40 m</span>
</div>
<div class="meta-item">
<b>Richtverfahren</b>
<span>A (ÖTO §204.2)</span>
</div>
</div>
<div class="officials-text">
<b>Richter:</b> C: Oberhumer Julia; M: Dr. Max Mustermann | <b>Parcours:</b> Ing. Franz Beispieler
</div>
</header>
<table>
<thead>
<tr>
<th class="col-start">Start</th>
<th class="col-rider">Reiter / Verein</th>
<th class="col-knr">KNR</th>
<th class="col-horse">Pferd / Abstammung</th>
<th class="col-land">Land</th>
<th class="col-status">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col-start">12:30</td>
<td class="col-rider">
<span class="main-info">PELZEDER Sandra</span>
<span class="sub-info">Sportunion Pferdefreunde Altenberg</span>
</td>
<td class="col-knr">5617</td>
<td class="col-horse">
<span class="main-info">Amigo 222</span>
<span class="sub-info">Andalusier-PRE / 2013 / W / Brauner / Decisivo A</span>
</td>
<td class="col-land">AUT</td>
<td class="col-status">OK</td>
</tr>
<tr>
<td class="col-start">12:38</td>
<td class="col-rider">
<span class="main-info">RESCH Lisa</span>
<span class="sub-info">Reitclub Scherhaufgut</span>
</td>
<td class="col-knr">4G13</td>
<td class="col-horse">
<span class="main-info">Kokusz</span>
<span class="sub-info">Ung. HB / 2011 / S / Fuchs / 3108 Dárda</span>
</td>
<td class="col-land">AUT</td>
<td class="col-status">OK</td>
</tr>
<tr>
<td class="col-start">12:46</td>
<td class="col-rider">
<span class="main-info">RINTELEN-BERNEGGER Flora</span>
<span class="sub-info">Reitverein Exaequo</span>
</td>
<td class="col-knr">4Y59</td>
<td class="col-horse">
<span class="main-info">Legolas 196</span>
<span class="sub-info">Oldenburger / 2011 / W / Brauner / Levisonn</span>
</td>
<td class="col-land">AUT</td>
<td class="col-status">a.K.</td>
</tr>
</tbody>
</table>
<footer
style="position: fixed; bottom: 0; width: 100%; font-size: 7pt; color: var(--secondary); border-top: 1px solid var(--border); padding-top: 5px;">
<div style="display: flex; justify-content: space-between;">
<span>Gedruckt am 30.03.2026 um 21:50 Uhr</span>
<span>Bewerb 008 | Abteilung 1</span>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,233 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<style>
:root {
--primary: #000;
--secondary: #4a5568;
--highlight-bg: #edf2f7;
--border-bold: #1a202c;
--border-light: #cbd5e0;
--font-main: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
@page {
size: A4;
margin: 10mm 12mm 15mm 12mm;
@bottom-left { content: "Turniersystem PRO v1.07"; font-size: 7pt; color: var(--secondary); }
@bottom-right { content: "Seite " counter(page) " von " counter(pages); font-size: 7pt; }
}
body {
font-family: var(--font-main),serif;
color: var(--primary);
font-size: 9pt;
line-height: 1.3;
margin: 0;
}
header {
border-bottom: 3px solid var(--primary);
margin-bottom: 12px;
padding-bottom: 10px;
}
.title-row {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.title-group h1 {
font-size: 20pt;
margin: 0;
font-weight: 900;
text-transform: uppercase;
}
.bewerb-subtitle {
font-size: 15pt;
font-weight: 700;
color: var(--primary);
margin-top: 2px;
}
.start-time-badge {
background-color: var(--primary);
color: white;
padding: 5px 12px;
border-radius: 4px;
font-size: 12pt;
font-weight: bold;
margin-top: 5px;
display: inline-block;
}
.tournament-info {
text-align: right;
font-size: 8.5pt;
line-height: 1.4;
}
/* --- DETAIL GRID (Pflicht- & Sollangaben) --- */
.meta-grid {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr 0.8fr;
gap: 10px;
margin-top: 12px;
padding: 10px;
background-color: var(--highlight-bg);
border: 1px solid var(--border-light);
border-radius: 4px;
}
.meta-item b {
display: block;
font-size: 6.5pt;
text-transform: uppercase;
color: var(--secondary);
margin-bottom: 2px;
}
.meta-item span {
font-size: 9pt;
font-weight: 600;
}
/* --- TABELLE --- */
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
thead th {
text-align: left;
border-top: 1px solid var(--primary);
border-bottom: 1px solid var(--primary);
padding: 8px 4px;
font-size: 8pt;
font-weight: bold;
text-transform: uppercase;
}
tbody tr {
border-bottom: 1px solid var(--border-light);
}
tbody td {
padding: 10px 4px;
vertical-align: top;
}
/* Spalten-Reihenfolge: Start - Reiter/Verein - KNR - Pferd/Abstammung - Land - Status */
.col-start { width: 50px; font-weight: bold; }
.col-rider { width: 30%; }
.col-knr { width: 55px; font-family: 'Courier New', monospace; font-weight: bold; text-align: center; }
.col-horse { width: 35%; }
.col-land { width: 40px; text-align: center; font-weight: bold; }
.col-status { width: 50px; text-align: right; font-size: 8pt; color: var(--secondary); }
.main-info { display: block; font-weight: bold; font-size: 9.5pt; }
.sub-info { display: block; font-size: 7.5pt; color: var(--secondary); margin-top: 3px; }
.officials-text {
margin-top: 8px;
font-size: 8pt;
font-style: italic;
}
</style>
<title></title>
</head>
<body>
<header>
<div class="title-row">
<div class="title-group">
<h1>Startliste</h1>
<div class="bewerb-subtitle">BW 008 | Abt. 1</div>
<div class="bewerb-subtitle">Start: 12:30 Uhr</div>
</div>
<div class="tournament-info">
<b>Turnier-Nr.:</b> 25320<br>
<b>Turnier:</b> CDN-C Neumarkt/M. OÖ<br>
<b>Datum:</b> 08.06.2025
</div>
</div>
<div class="meta-grid">
<div class="meta-item">
<b>Prüfung / Klasse</b>
<span>Dressurreiterprüfung | Klasse A</span>
</div>
<div class="meta-item">
<b>Aufgabe / Viereck</b>
<span>Aufgabe A3 | 20 x 40 m</span>
</div>
<div class="meta-item">
<b>Richtverfahren</b>
<span>A (ÖTO §204.2)</span>
</div>
<div class="meta-item">
<b>Starter / Platziert</b>
<span>8 / 5</span>
</div>
</div>
<div class="officials-text">
<b>Richter:</b> C: Oberhumer Julia; M: Dr. Max Mustermann | <b>Parcours:</b> Ing. Franz Beispieler
</div>
</header>
<table>
<thead>
<tr>
<th class="col-start">Start</th>
<th class="col-rider">Reiter / Verein</th>
<th class="col-knr">KNR</th>
<th class="col-horse">Pferd / Abstammung</th>
<th class="col-land">Land</th>
<th class="col-status">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col-start">12:30</td>
<td class="col-rider">
<span class="main-info">PELZEDER Sandra</span>
<span class="sub-info">Sportunion Pferdefreunde Altenberg</span>
</td>
<td class="col-knr">5617</td>
<td class="col-horse">
<span class="main-info">Amigo 222</span>
<span class="sub-info">Andalusier-PRE / 2013 / W / Brauner</span>
</td>
<td class="col-land">AUT</td> <td class="col-status">OK</td>
</tr>
<tr>
<td class="col-start">12:38</td>
<td class="col-rider">
<span class="main-info">RESCH Lisa</span>
<span class="sub-info">Reitclub Scherhaufgut</span>
</td>
<td class="col-knr">4G13</td>
<td class="col-horse">
<span class="main-info">Kokusz</span>
<span class="sub-info">Ung. HB / 2011 / S / Fuchs</span>
</td>
<td class="col-land">AUT</td>
<td class="col-status">OK</td>
</tr>
</tbody>
</table>
<footer style="position: fixed; bottom: 0; width: 100%; font-size: 7pt; color: var(--secondary); border-top: 1px solid var(--border-light); padding-top: 5px;">
<div style="display: flex; justify-content: space-between;">
<span>Gedruckt am 30.03.2026 um 22:05 Uhr</span>
<span>Bewerb 008 | Abteilung 1</span>
</div>
</footer>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

+50
View File
@@ -0,0 +1,50 @@
---
type: Reference
status: ACTIVE
owner: Frontend Expert
updated: 2026-03-30
---
# Start- und Ergebnislisten Templates v07 (HTML + Mustache)
Ziel: Drucktaugliche, hochdichte Start-/Ergebnislisten auf Basis von HTML/CSS (PrintCSS) und logikarmen MustacheTemplates. PDFErzeugung via Headless Chromium empfohlen.
## Bestand (aktueller Stand)
- templates/
- `Ergebnisliste_v07.html` v07Grundtemplate (derzeit mit „Startliste“-Inhalt befüllt)
- `print.css` gemeinsames DruckStylesheet (A4, thead/tfootWiederholung, Umbruchschutz)
- partials/
- `header.html`, `footer.html`
- `table_head_common.html`
- `dressur_row.html` (Basis für DressurZeilen)
## Geplante Ergänzungen (Next)
- `Startliste_v07.html` separates StartlistenTemplate.
- Partials für SpringenVarianten: Table A (238.2.1/2.2), Table C (239), TwoPhases (274), Accumulator (269).
- `ergebnisliste_*_data.json` BeispielDaten (Dressur, Springen Table A).
## Compliance/Regelwerk
- „Nation“ gemäß ÖTOUpdate 2011 (docs/03_Domain/02_Reference/OETO_Regelwerk/OETO-2026_Meldestelle_Update-Ergebnisfile.md):
- Start für AUTKlub → `NATION = AUT`, sonst `NATION = NATIONALITÄT` laut `lizenz01.dat`.
- Numerik als Text mit DezimalKomma, keine Tausenderpunkte (Legacy 2014Spezifikation).
## RenderPfad (lokal)
1) Mustache rendern (CLI):
```
mustache docs/06_Frontend/StartErgListen/examples/startliste_data.json \
docs/06_Frontend/StartErgListen/templates/Ergebnisliste_v07.html \
/tmp/Startliste_v07.html
```
2) PDF erzeugen (Chromium):
```
chromium --headless --disable-gpu \
--print-to-pdf=/tmp/Startliste_v07.pdf \
/tmp/Startliste_v07.html
```
## Bekannte Abweichungen (werden gefixt)
- Spaltenüberschrift „Land“ wird auf „Nation“ vereinheitlicht.
- Doppelte Fußzeilen vermeiden: Entweder CSSFooter ODER RendererFooter verwenden.
## Bezug/Checkliste
- Siehe ReferenzCheckliste: `docs/03_Domain/02_Reference/OETO_Regelwerk/Checkliste_Start-Ergebnislisten_Dressur-Springen.md`
@@ -0,0 +1,45 @@
type: How-to
status: ACTIVE
owner: Frontend Expert
updated: 2026-03-30
---
# Beispiele: Start-/Ergebnislisten rendern (Mustache + HTML/CSS)
Dieser Ordner enthält Beispiel-Daten (JSON) für die Mustache-Templates unter `../templates/`.
Struktur (aktueller Stand):
- `../templates/print.css` gemeinsames Druck-CSS (A4, Wiederhol-Header, Umbruchschutz)
- `../templates/Ergebnisliste_v07.html` v07-Template (aktuell als Startliste befüllt; Spalten und Kopf sind bereits drucktauglich)
- `../templates/partials/` Header, Footer, Tabellenkopf, Dressur-Zeile (Grundlage für Varianten)
Beispiel-Daten (verfügbar):
- `startliste_data.json` Startliste Dressur
Geplante Beispiel-Daten (TODO):
- `ergebnisliste_springen_tableA_data.json` Ergebnisliste Springen (Table A 238.2.1)
- `ergebnisliste_dressur_data.json` Ergebnisliste Dressur (Endprozent)
Hinweise (Compliance):
- Dezimaltrennzeichen „,“ bitte bereits im Backend/Formatter vorbereiten (LegacyVorgabe: numerisch als Text; kein Tausenderpunkt).
- Spalte „Nation“ gemäß ÖTOUpdate 2011 bilden: Start für AUTKlub → `AUT`, sonst Staatsbürgerschaft lt. `lizenz01.dat`.
- In den v07Entwürfen ist die Spaltenüberschrift teils noch „Land“; fachlich korrekt ist „Nation“ (siehe Checkliste). Dies wird in den finalen Templates vereinheitlicht.
Quick Render (Beispiel, ohne Gewähr):
1) Mustache rendern (CLI-Beispiel):
```
mustache startliste_data.json ../templates/Ergebnisliste_v07.html > /tmp/Startliste_v07.html
```
2) PDF erzeugen (Headless Chromium):
```
chromium --headless --disable-gpu --print-to-pdf=/tmp/Startliste_v07.pdf /tmp/Startliste_v07.html
```
Alternativ: wkhtmltopdf (Achtung RenderingUnterschiede)
```
wkhtmltopdf /tmp/Startliste_v07.html /tmp/Startliste_v07.pdf
```
Status & Nächste Schritte:
- Ergänzung der fehlenden BeispielDaten für Ergebnislisten (Dressur, Springen Table A) siehe TODO oben.
- Aufteilung in separate Templates `Startliste_v07.html` und `Ergebnisliste_v07.html`, sobald beide Varianten produktiv befüllt sind.
@@ -0,0 +1,46 @@
{
"docTitle": "Ergebnisliste",
"bewerbLabel": "BW 008 | Abt. 1",
"turnierNummer": "25320",
"turnierName": "CDN-C Neumarkt/M. OÖ",
"datum": "08.06.2025",
"printedAt": "30.03.2026 22:40",
"bewerbShort": "BW 008 | Abt. 1",
"isErgebnisliste": true,
"meta": [
{"label": "Sparte", "value": "Dressur"},
{"label": "Aufgabe / Viereck", "value": "Aufgabe A3 | 20 x 40 m"},
{"label": "Richtverfahren", "value": "A (ÖTO §204.2)"},
{"label": "Starter / Platziert", "value": "8 / 5"}
],
"officials": ["Richter: C: Oberhumer Julia; M: Dr. Max Mustermann"],
"starts": [
{
"isDressur": true,
"rang": 1,
"reiter": {"name": "PELZEDER Sandra", "verein": "Sportunion Pferdefreunde Altenberg", "knr": "5617"},
"pferd": {"name": "Amigo 222", "details": "Andalusier-PRE / 2013 / W / Brauner"},
"nation": "AUT",
"endProzent": "69,58",
"status": "CR"
},
{
"isDressur": true,
"rang": 2,
"reiter": {"name": "RESCH Lisa", "verein": "Reitclub Scherhaufgut", "knr": "4G13"},
"pferd": {"name": "Kokusz", "details": "Ung. HB / 2011 / S / Fuchs"},
"nation": "AUT",
"endProzent": "68,22",
"status": "CR"
},
{
"isDressur": true,
"rang": "EL",
"reiter": {"name": "MUSTERMANN Paul", "verein": "RV Exemplar", "knr": "9Z99"},
"pferd": {"name": "Dorian", "details": "Old. / 2012 / W / Rappe"},
"nation": "AUT",
"endProzent": "",
"status": "EL"
}
]
}
@@ -0,0 +1,46 @@
{
"docTitle": "Ergebnisliste",
"bewerbLabel": "BW 012 | Abt. 1",
"turnierNummer": "25320",
"turnierName": "CSN-B Neumarkt/M. OÖ",
"datum": "08.06.2025",
"printedAt": "30.03.2026 22:35",
"bewerbShort": "BW 012 | Abt. 1",
"isErgebnisliste": true,
"meta": [
{"label": "Sparte", "value": "Springen"},
{"label": "Richtverfahren", "value": "Table A gegen die Zeit (FEI Art. 238.2.1)"},
{"label": "Höhe", "value": "1.10 m"},
{"label": "Starter / Platziert", "value": "32 / 8"}
],
"officials": ["Parcours: Ing. Franz Beispieler"],
"starts": [
{
"isSpringenTableA": true,
"rang": 1,
"reiter": {"name": "MUSTER Anna", "verein": "RV Linz", "knr": "A123"},
"pferd": {"name": "Quickstar", "abstammung": "Holst. / 2014 / W / Dunkelbraun"},
"nation": "AUT",
"ergebnisA": {"fehler": 0, "zeit": "59,38"},
"status": "CR"
},
{
"isSpringenTableA": true,
"rang": 2,
"reiter": {"name": "HUBER Leo", "verein": "RC Traun", "knr": "B987"},
"pferd": {"name": "Blue Moon", "abstammung": "Zang. / 2012 / S / Schimmel"},
"nation": "AUT",
"ergebnisA": {"fehler": 0, "zeit": "60,12"},
"status": "CR"
},
{
"isSpringenTableA": true,
"rang": 18,
"reiter": {"name": "GAST Max", "verein": "Gast", "knr": "G001"},
"pferd": {"name": "Visitor", "abstammung": "KWPN / 2011 / W / Braun"},
"nation": "GER",
"ergebnisA": {"fehler": 8, "zeit": "75,44"},
"status": "CR"
}
]
}
@@ -0,0 +1,36 @@
{
"docTitle": "Startliste",
"bewerbLabel": "BW 008 | Abt. 1",
"startTime": "12:30 Uhr",
"turnierNummer": "25320",
"turnierName": "CDN-C Neumarkt/M. OÖ",
"datum": "08.06.2025",
"printedAt": "30.03.2026 22:30",
"bewerbShort": "BW 008 | Abt. 1",
"isStartliste": true,
"meta": [
{"label": "Prüfung / Klasse", "value": "Dressurreiterprüfung | Klasse A"},
{"label": "Aufgabe / Viereck", "value": "Aufgabe A3 | 20 x 40 m"},
{"label": "Richtverfahren", "value": "A (ÖTO §204.2)"},
{"label": "Starter / Platziert", "value": "8 / 5"}
],
"officials": ["Richter: C: Oberhumer Julia; M: Dr. Max Mustermann"],
"starts": [
{
"isDressur": true,
"startSlot": "12:30",
"reiter": {"name": "PELZEDER Sandra", "verein": "Sportunion Pferdefreunde Altenberg", "knr": "5617"},
"pferd": {"name": "Amigo 222", "details": "Andalusier-PRE / 2013 / W / Brauner"},
"nation": "AUT",
"status": "OK"
},
{
"isDressur": true,
"startSlot": "12:38",
"reiter": {"name": "RESCH Lisa", "verein": "Reitclub Scherhaufgut", "knr": "4G13"},
"pferd": {"name": "Kokusz", "details": "Ung. HB / 2011 / S / Fuchs"},
"nation": "AUT",
"status": "OK"
}
]
}
@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>{{docTitle}}</title>
<link rel="stylesheet" href="../templates/print.css">
</head>
<body>
{{! Ergebnisliste: setzt isErgebnisliste=true }}
{{> header }}
<table>
{{> table_head_common }}
<tbody>
{{#starts}}
{{#isDressur}}
{{> dressur_row }}
{{/isDressur}}
{{#isSpringenTableA}}
{{> springen_tableA_row }}
{{/isSpringenTableA}}
{{#isOther}}
{{> dressur_row }}
{{/isOther}}
{{/starts}}
</tbody>
<tfoot></tfoot>
</table>
{{> footer }}
</body>
</html>
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>{{docTitle}}</title>
<link rel="stylesheet" href="../templates/print.css">
</head>
<body>
{{> header }}
<table>
{{> table_head_common }}
<tbody>
{{#starts}}
{{#isDressur}}
{{> dressur_row }}
{{/isDressur}}
{{#isSpringenTableA}}
{{> springen_tableA_row }}
{{/isSpringenTableA}}
{{#isOther}}
{{> dressur_row }}
{{/isOther}}
{{/starts}}
</tbody>
<tfoot></tfoot>
</table>
{{> footer }}
</body>
</html>
@@ -0,0 +1,22 @@
<tr>
{{#isStartliste}}
<td class="col-start">{{startSlot}}</td>
{{/isStartliste}}
{{#isErgebnisliste}}
<td class="col-start">{{rang}}</td>
{{/isErgebnisliste}}
<td class="col-rider">
<span class="main-info">{{reiter.name}}</span>
<span class="sub-info">{{reiter.verein}}</span>
</td>
<td class="col-knr">{{reiter.knr}}</td>
<td class="col-horse">
<span class="main-info">{{pferd.name}}</span>
<span class="sub-info">{{pferd.details}}</span>
</td>
<td class="col-nation">{{nation}}</td>
{{#isErgebnisliste}}
<td class="num">{{endProzent}}</td>
{{/isErgebnisliste}}
<td class="col-status">{{status}}</td>
</tr>
@@ -0,0 +1,6 @@
<footer class="footer-fixed">
<div style="display: flex; justify-content: space-between;">
<span>Gedruckt am {{printedAt}}</span>
<span>{{bewerbShort}}</span>
</div>
</footer>
@@ -0,0 +1,31 @@
<header>
<div class="title-row">
<div class="title-group">
<h1>{{docTitle}}</h1>
<div class="bewerb-subtitle">{{bewerbLabel}}</div>
{{#startTime}}
<div class="bewerb-subtitle">Start: {{startTime}}</div>
{{/startTime}}
</div>
<div class="tournament-info">
<b>Turnier-Nr.:</b> {{turnierNummer}}<br>
<b>Turnier:</b> {{turnierName}}<br>
<b>Datum:</b> {{datum}}
</div>
</div>
<div class="meta-grid">
{{#meta}}
<div class="meta-item">
<b>{{label}}</b>
<span>{{value}}</span>
</div>
{{/meta}}
</div>
{{#officials}}
<div class="officials-text">
{{.}}
</div>
{{/officials}}
</header>
@@ -0,0 +1,23 @@
<tr>
{{#isStartliste}}
<td class="col-start">{{startSlot}}</td>
{{/isStartliste}}
{{#isErgebnisliste}}
<td class="col-start">{{rang}}</td>
{{/isErgebnisliste}}
<td class="col-rider">
<span class="main-info">{{reiter.name}}</span>
<span class="sub-info">{{reiter.verein}}</span>
</td>
<td class="col-knr">{{reiter.knr}}</td>
<td class="col-horse">
<span class="main-info">{{pferd.name}}</span>
<span class="sub-info">{{pferd.abstammung}}</span>
</td>
<td class="col-nation">{{nation}}</td>
{{#isErgebnisliste}}
<td class="num">{{ergebnisA.fehler}}</td>
<td class="time">{{ergebnisA.zeit}}</td>
{{/isErgebnisliste}}
<td class="col-status">{{status}}</td>
</tr>
@@ -0,0 +1,24 @@
<thead>
<tr>
{{#isStartliste}}
<th class="col-start">Start</th>
{{/isStartliste}}
{{#isErgebnisliste}}
<th class="col-start">Rang</th>
{{/isErgebnisliste}}
<th class="col-rider">Reiter / Verein</th>
<th class="col-knr">KNR</th>
<th class="col-horse">Pferd / Abstammung</th>
<th class="col-nation">Nation</th>
{{#isErgebnisliste}}
{{#isDressur}}
<th class="num">% Endergebnis</th>
{{/isDressur}}
{{#isSpringenTableA}}
<th class="num">Fehler</th>
<th class="time">Zeit</th>
{{/isSpringenTableA}}
{{/isErgebnisliste}}
<th class="col-status">Status</th>
</tr>
</thead>
@@ -0,0 +1,69 @@
:root {
--primary: #000;
--secondary: #4a5568;
--highlight-bg: #edf2f7;
--border-bold: #1a202c;
--border-light: #cbd5e0;
--font-main: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
@page {
size: A4;
margin: 12mm 12mm 18mm 12mm;
}
/* Headless Chromium/WKHTMLTOPDF friendly repeating headers/footers */
thead { display: table-header-group; }
tfoot { display: table-footer-group; }
tr, .row { page-break-inside: avoid; }
html, body { margin: 0; padding: 0; }
body {
font-family: var(--font-main), serif;
color: var(--primary);
font-size: 9pt;
line-height: 1.3;
}
header {
border-bottom: 3px solid var(--primary);
margin-bottom: 12px;
padding-bottom: 10px;
}
.title-row { display: flex; justify-content: space-between; align-items: flex-start; }
.title-group h1 { font-size: 20pt; margin: 0; font-weight: 900; text-transform: uppercase; }
.bewerb-subtitle { font-size: 14pt; font-weight: 700; margin-top: 2px; }
.tournament-info { text-align: right; font-size: 8.5pt; line-height: 1.4; }
.meta-grid {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr 0.8fr;
gap: 10px;
margin-top: 12px;
padding: 10px;
background-color: var(--highlight-bg);
border: 1px solid var(--border-light);
border-radius: 4px;
}
.meta-item b { display: block; font-size: 6.5pt; text-transform: uppercase; color: var(--secondary); margin-bottom: 2px; }
.meta-item span { font-size: 9pt; font-weight: 600; }
table { width: 100%; border-collapse: collapse; margin-top: 12px; }
thead th { text-align: left; border-top: 1px solid var(--primary); border-bottom: 1px solid var(--primary); padding: 8px 4px; font-size: 8pt; font-weight: bold; text-transform: uppercase; }
tbody tr { border-bottom: 1px solid var(--border-light); }
tbody td { padding: 8px 4px; vertical-align: top; }
.col-start { width: 42px; font-weight: bold; }
.col-rider { width: 30%; }
.col-knr { width: 52px; font-family: 'Courier New', monospace; font-weight: bold; text-align: center; }
.col-horse { width: 35%; }
.col-nation { width: 40px; text-align: center; font-weight: bold; }
.col-status { width: 54px; text-align: right; font-size: 8pt; color: var(--secondary); }
.main-info { display: block; font-weight: bold; font-size: 9.5pt; }
.sub-info { display: block; font-size: 7.5pt; color: var(--secondary); margin-top: 3px; overflow-wrap: anywhere; }
.num, .time { text-align: right; font-variant-numeric: tabular-nums; }
.footer-fixed { position: fixed; bottom: 0; width: 100%; font-size: 7pt; color: var(--secondary); border-top: 1px solid var(--border-light); padding-top: 5px; }