Spiel-Events, Kalenderdateien, Patches-Seite und neues Design

- Kalender: Termine als Spiel-Event markieren (nur diese zählen in der
  Statistik), optionale Uhrzeiten, Termine bearbeiten
- .ics-Download für einzelne und alle kommenden Termine
- Neue Seite Patches: Upload (PNG, JPEG, WebP, geprüftes SVG),
  Status "Gibt es schon" / "In Planung", Bilder in data/patches/
- Volle Seitenbreite mit Spaltenlayouts, neues Design mit selbst
  gehosteten Schriften, Startseite mit Zoom und drehendem Zahnrad
- Bestehende Daten werden beim Laden ergänzt, keine Migration nötig

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
guyg1474andClaude Opus 5.5 committed 2026-10-12 00:13:52 +02:00
1 parent 43356a120c
commit 486e6f6784
23 files changed
+1757 -387

No files matched your search

+81
View File
@@ -0,0 +1,81 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Patches – HCRB</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<main>
<header class="page-head">
<div>
<span class="eyebrow">Klett &amp; Stoff</span>
<h1>Patches</h1>
<p>Gruppen-Patches, Event-Patches und alles, was bei der HCRB auf die Weste kommt.</p>
</div>
<div class="actions">
<button type="button" id="add-btn" class="primary" hidden>Patch hochladen</button>
</div>
</header>
<div class="card" id="patch-form-card" hidden>
<h2 id="patch-form-title">Patch hochladen</h2>
<form id="patch-form" class="split">
<label class="dropzone" id="dropzone" for="patch-file">
<img id="patch-preview" alt="Vorschau" hidden>
<span id="drop-text">
<strong>Bild auswählen</strong><br>
oder hierher ziehen · PNG, JPEG, WebP oder SVG
</span>
<input type="file" id="patch-file" accept="image/png,image/jpeg,image/webp,image/svg+xml,.svg" hidden>
</label>
<div>
<label>Name
<input type="text" id="patch-name" required maxlength="80" placeholder="z. B. HCRB Gruppenpatch 2026">
</label>
<fieldset class="segmented">
<legend>Status</legend>
<label><input type="radio" name="patch-status" id="patch-status-vorhanden" value="vorhanden" checked> Gibt es schon</label>
<label><input type="radio" name="patch-status" id="patch-status-geplant" value="geplant"> In Planung</label>
</fieldset>
<label>Beschreibung (optional)
<textarea id="patch-description" maxlength="500" placeholder="Wofür, seit wann, wer hat ihn entworfen …"></textarea>
</label>
<p class="muted">Tipp: Ein freigestelltes PNG oder eine SVG ohne Hintergrund sieht in der Galerie am besten aus.
Große Bilder werden vor dem Hochladen automatisch verkleinert.</p>
<p id="patch-error" class="warn" hidden></p>
<div class="row wrap">
<button type="submit" class="primary" id="patch-submit">Hochladen</button>
<button type="button" id="patch-cancel">Abbrechen</button>
</div>
</div>
</form>
</div>
<section class="patch-group" id="group-vorhanden" hidden>
<div class="section-title"><h2>Gibt es schon</h2><span class="muted" id="count-vorhanden"></span></div>
<div class="patch-grid" id="grid-vorhanden"></div>
</section>
<section class="patch-group" id="group-geplant" hidden>
<div class="section-title"><h2>In Planung</h2><span class="muted" id="count-geplant"></span></div>
<div class="patch-grid" id="grid-geplant"></div>
</section>
<div id="patch-empty" class="empty-state" hidden>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="M12 2.5l8 3.5v6c0 5-3.5 8.2-8 9.5-4.5-1.3-8-4.5-8-9.5V6z"/></svg>
<strong>Noch keine Patches</strong>
<span id="patch-empty-hint">Sobald jemand aus der Gruppe einen Patch hochlädt, erscheint er hier.</span>
</div>
<dialog class="lightbox" id="lightbox">
<form method="dialog"><button class="close small" aria-label="Schließen">✕</button></form>
<figure>
<img id="lightbox-img" alt="">
<figcaption><strong id="lightbox-name"></strong><span id="lightbox-text" class="muted"></span></figcaption>
</figure>
</dialog>
</main>
<script type="module" src="/js/patches.js"></script>
</body>
</html>