# ---------------------------------------------------------------------------
# Sveltia-CMS-Konfiguration fuer die DAV-Website  ·  siehe ../README.md
#
# STAND: Entscheidung fuer Variante A (Sveltia) ist gefallen. Diese Datei ist aus
# dem PoC zu einer VOLLSTAENDIGEN Collection-Konfiguration ausgebaut, die alle
# Inhaltstypen der Website abdeckt (Beitraege je Abteilung, Veranstaltungen,
# Service-/Info-Seiten inkl. der Shortcode-Hubs als Formular, Huetten, stehende
# Seiten). Laeuft weiterhin auch rein LOKAL ueber die File System Access API
# (nur Chromium: Chrome/Edge/Brave; NICHT Firefox/Safari) -> KEIN Proxy noetig.
# Beim Start "Work with Local Repository" klicken und den Ordner
#   /home/jkkopp/Projects/DAV-Website/website   (= Hugo-Repo-Wurzel) waehlen.
# Alle Pfade unten sind relativ zu dieser gewaehlten Wurzel.
#
# ===== SAVE-SICHERHEIT (Pflicht-Regel, gilt fuer JEDE Collection hier) =====
# Sveltia/Decap schreiben beim Speichern NUR die unten deklarierten Frontmatter-
# Felder zurueck. Nicht deklarierte Felder GEHEN VERLOREN. Deshalb ist fuer jeden
# Seitentyp JEDES real vorkommende Frontmatter-Feld deklariert; Felder, die
# Redakteure nicht anfassen sollen (weight, aliases, lastmod, layout, url,
# category, date alter Bestandsseiten), stehen als `widget: hidden` -> ihr Wert
# bleibt unveraendert erhalten. Aenderungen am Content-Modell der Website hier
# nachziehen (die EINE Kopplungsnaht zwischen den beiden Repos).
# ---------------------------------------------------------------------------

# Natives GitLab-Backend = der echte Produktiv-Login: der Browser authentifiziert
# sich per GitLab-OAuth und committet direkt ins website-Repo (GitLab-API). Das
# ist das EINZIGE Gate (kein Proxy, keine Nextcloud-forwardAuth davor). Im reinen
# Lokal-Schnelltest (File System Access API) wird dieser Block nicht genutzt.
backend:
  name: gitlab
  repo: jkkopp/dav-mittelfranken
  branch: redaktion        # Modell A: Sveltia committet auf den ARBEITSZWEIG "redaktion" (NICHT live). main = letzter deployter Live-Stand. Veroeffentlichen/Verwerfen ueber admin/steuerung.html.
  auth_type: pkce          # OAuth Authorization Code + PKCE: kein Secret, kein Auth-Broker noetig.
  app_id: fbc86f1ad447f76305243a4055c149c2ad6fb8d4edf40bf630e2779d8929c222   # gitlab.com OAuth-App "DAV Redaktion (Sveltia)", Scope api, public client. Nicht geheim.

# Oberflaeche auf Deutsch
locale: de

# Globaler Medien-Fallback (relativ zur gewaehlten Repo-Wurzel = website/).
# Bundle-/Beitrags-Collections ueberschreiben das unten auf "relativ zum Bundle".
media_folder: static/images
public_folder: /images

collections:
  # =========================================================================
  # ★ STARTSEITE & ZENTRALE SEITEN
  # =========================================================================

  # === Startseite als Formular ============================================
  #     Formular fuers Frontmatter statt Markdown-Geraten: Aufmacher (hero),
  #     Schnellzugriff-Knoepfe, Begruessungstext. Die "Neuesten Beitraege"
  #     darunter sind automatisch und bewusst NICHT editierbar. Save-sicher:
  #     alle Frontmatter-Felder (title/hero/buttons) sind deklariert.
  - name: startseite
    label: "Startseite ★"
    files:
      - name: home
        label: "Startseite (Aufmacher · Knöpfe · Text)"
        file: content/_index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Seitentitel (intern)", name: title, widget: string }
          - label: "Aufmacher (großer Kasten oben)"
            name: hero
            widget: object
            fields:
              - { label: "Überschrift", name: titel, widget: string }
              - { label: "Text", name: text, widget: text }
              - { label: "Hintergrundbild (/assets/… oder Datei im Ordner; leer = grün)", name: bild, widget: string, required: false }
          - label: "Schnellzugriff-Knöpfe (unter dem Titel)"
            name: buttons
            widget: list
            label_singular: "Knopf"
            summary: "{{fields.text}}"
            fields:
              - { label: "Beschriftung", name: text, widget: string }
              - { label: "Ziel-Link", name: link, widget: string }
          - { label: "Begrüßungstext", name: body, widget: markdown, modes: [raw, rich_text] }

  # =========================================================================
  - { name: divider_sektion, divider: true }
  # ░░░░░░░░░░░░░░░  DAV MITTELFRANKEN · SEKTION  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  # =========================================================================

  # === Die Sektion (Bereichs-Startseite) ==================================
  #     Nur Titel + Einleitungstext sind redaktionell; weight bleibt erhalten.
  - name: die_sektion
    label: "Die Sektion (Einleitung)"
    files:
      - name: die_sektion_index
        label: "Die Sektion – Bereichsseite"
        file: content/dav-mittelfranken/die-sektion/_index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "Position im Menü (weight)", name: weight, widget: hidden }
          - { label: "Inhalt", name: body, widget: markdown, modes: [rich_text, raw] }

  # === Veranstaltungen der Sektion – Beitraege (Page-Bundles) =============
  #     Liegen unter content/dav-mittelfranken/veranstaltungen/<slug>/index.md.
  #     Mischung aus stehenden Veranstaltungs-Seiten (Sonnwendfeier, Edelweiss-
  #     fest, JHV …) und datierten Berichten. ANNAHME/Sonderfall: die `date`-
  #     Werte hier sind UNEINHEITLICH (teils YYYY-MM-DD, teils mit Uhrzeit) und
  #     die Uhrzeiten sind Import-Artefakte -> `date` als HIDDEN, damit beim
  #     Speichern KEIN Wert umformatiert/verloren geht. Neue Veranstaltungs-
  #     Beitraege sind selten und werden von einer technischen Person betreut;
  #     ein Datum ggf. im Roh-Modus setzen.
  - name: veranstaltungen
    label: "Veranstaltungen – Beiträge"
    label_singular: "Veranstaltung"
    description: "Veranstaltungs-Seiten & -Berichte der Sektion (Ordner mit index.md + Bildern)."
    folder: content/dav-mittelfranken/veranstaltungen
    path: "{{slug}}/index"      # listet nur <slug>/index.md, NICHT das _index.md
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{slug}}"
    fields:
      - { label: "Titel", name: title, widget: string }
      - { label: "Datum (unverändert lassen – siehe Kommentar)", name: date, widget: hidden }
      - { label: "lastmod", name: lastmod, widget: hidden }
      - { label: "Bericht über eine Veranstaltung? (zeigt Datum auf der Kachel)", name: bericht, widget: boolean, default: false, required: false }
      - { label: "Kategorie", name: category, widget: string, required: false, default: "Veranstaltungen Sektion" }
      - { label: "Titelbild (Dateiname in diesem Ordner)", name: titelbild, widget: string, required: false }
      - { label: "Entwurf – NICHT veröffentlichen", name: draft, widget: boolean, default: false, required: false }
      - { label: "URL (fester Permalink, i. d. R. nicht ändern)", name: url, widget: string, required: false }
      - label: "Inhalt"
        name: body
        widget: markdown
        modes: [rich_text, raw]
        buttons: [bold, italic, link, heading-two, heading-three, bulleted-list, numbered-list, quote]

  # === Kalender (Bereichs-Startseite) =====================================
  #     Hat `layout: kalender` (Spezial-Template). layout MUSS als hidden
  #     mitlaufen, sonst geht es beim Speichern verloren.
  - name: kalender
    label: "Kalender (Einleitung)"
    files:
      - name: kalender_index
        label: "Kalender – Bereichsseite"
        file: content/kalender/_index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "Position im Menü (weight)", name: weight, widget: hidden }
          - { label: "Layout (technisch – nicht ändern)", name: layout, widget: hidden }
          - { label: "Inhalt (optionaler Text über dem Kalender)", name: body, widget: markdown, modes: [rich_text, raw], required: false }

  # === Kontakt & Impressum ================================================
  #     Enthaelt das Web3Forms-Kontaktformular als rohes HTML im Body und die
  #     aliases-Liste -> aliases hidden, Body als Markdown mit Roh-Modus zuerst
  #     (HTML nicht durch den Rich-Text-Editor jagen).
  - name: kontakt
    label: "Kontakt & Impressum"
    files:
      - name: kontakt_md
        label: "Kontakt & Impressum"
        file: content/kontakt.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "aliases (alte URLs – nicht ändern)", name: aliases, widget: hidden }
          - { label: "Inhalt (enthält das HTML-Kontaktformular – im Roh-Modus bearbeiten!)", name: body, widget: markdown, modes: [raw, rich_text] }

  # =========================================================================
  - { name: divider_service, divider: true }
  # ░░░░░░░░░░░░░░░  SERVICE & INFO  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  # =========================================================================

  # === Service & Info – Übersicht (Hub mit {{< kacheln >}}) ===============
  #     Das Kachel-Raster steht STRUKTURIERT im Frontmatter (`kacheln:`), im Text
  #     nur der Shortcode. Hier als Formular modelliert (analog Downloads): eine
  #     Liste von Gruppen, jede Gruppe optional mit Überschrift + Eintraegen
  #     (Name, Vorschaubild, Ziel-Link). Save-sicher: layout (= "hub") und
  #     aliases laufen als hidden mit, sonst gingen sie + das kacheln-Konstrukt
  #     beim Speichern verloren.
  - name: service_info_hub
    label: "Service & Info – Übersicht (Kacheln) ★"
    files:
      - name: service_info_index
        label: "Service & Info – Übersicht"
        file: content/dav-mittelfranken/service-info/_index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "Position im Menü (weight)", name: weight, widget: hidden }
          - { label: "Layout (technisch – nicht ändern)", name: layout, widget: hidden }
          - { label: "aliases (alte URLs – nicht ändern)", name: aliases, widget: hidden }
          - label: "Kachel-Raster"
            name: kacheln
            widget: list
            label_singular: "Kachel-Gruppe"
            summary: "{{fields.titel}}"
            fields:
              - { label: "Gruppen-Überschrift (optional)", name: titel, widget: string, required: false }
              - label: "Kacheln in dieser Gruppe"
                name: eintraege
                widget: list
                label_singular: "Kachel"
                summary: "{{fields.titel}}"
                fields:
                  - { label: "Anzeigename", name: titel, widget: string }
                  - { label: "Vorschaubild (im Ordner)", name: bild, widget: image }
                  - { label: "Ziel-Link (/pfad/ oder https://)", name: link, widget: string }
          - { label: "Einleitungstext (enthält {{< kacheln >}})", name: body, widget: markdown, modes: [raw, rich_text] }

  # === Downloads (Hub mit {{< kacheln >}}) ================================
  #     Wie der Hub oben: Download-"Kacheln" stehen im Frontmatter, im Text nur
  #     {{< kacheln >}}. Gruppen -> Eintraege -> (Name, Bild, Datei). Der
  #     Redakteur fasst den Shortcode NIE an, er klickt "Download hinzufügen".
  #     Save-sicher: date/lastmod/category/url als hidden = bleiben erhalten.
  - name: downloads
    label: "Downloads (Kacheln) ★"
    files:
      - name: downloads_page
        label: "Download-Seite"
        file: content/dav-mittelfranken/service-info/downloads/index.md
        media_folder: ""      # Bilder/PDFs relativ zum Bundle (Page-Bundle)
        public_folder: ""
        fields:
          - { label: "Seitentitel", name: title, widget: string }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - label: "Download-Gruppen"
            name: kacheln
            widget: list
            label_singular: "Gruppe"
            summary: "{{fields.titel}}"
            fields:
              - { label: "Gruppen-Überschrift", name: titel, widget: string, required: false }
              - label: "Downloads in dieser Gruppe"
                name: eintraege
                widget: list
                label_singular: "Download"
                summary: "{{fields.titel}}"
                fields:
                  - { label: "Anzeigename", name: titel, widget: string }
                  - { label: "Vorschaubild (im Ordner)", name: bild, widget: image }
                  - { label: "Datei (PDF im Ordner, /pfad/ oder https://)", name: link, widget: file }
          - { label: "Einleitungstext (enthält {{< kacheln >}})", name: body, widget: markdown, modes: [raw, rich_text] }

  # === Aktuelles Sektionsheft =============================================
  #     ANNAHME/Sonderfall: Der Shortcode {{< aktuelles-heft >}} verlinkt FEST
  #     auf die statische Datei  static/hefte/aktuelles-heft.pdf  (keine Daten im
  #     Frontmatter). Zum Heft-Wechsel diese PDF separat austauschen. Hier nur
  #     Titel + Text editierbar; date/lastmod/category/url bleiben als hidden.
  - name: aktuelles_sektionsheft
    label: "Aktuelles Sektionsheft"
    files:
      - name: aktuelles_sektionsheft_page
        label: "Aktuelles Sektionsheft"
        file: content/dav-mittelfranken/service-info/aktuelles-sektionsheft/index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - { label: "Inhalt (enthält {{< aktuelles-heft >}} – PDF separat unter static/hefte/ tauschen)", name: body, widget: markdown, modes: [raw, rich_text] }

  # === Sektionshefte-Archiv (Seite) =======================================
  #     Der Shortcode {{< hefte-archiv >}} laedt die Heft-Liste zur Laufzeit aus
  #     static/hefte/hefte.json (siehe naechste Collection). Auf DIESER Seite ist
  #     nur der Einleitungstext redaktionell.
  - name: sektionshefte_archiv
    label: "Sektionshefte-Archiv (Seite)"
    files:
      - name: sektionshefte_archiv_page
        label: "Sektionshefte-Archiv – Seitentext"
        file: content/dav-mittelfranken/service-info/sektionshefte-archiv/index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - { label: "Inhalt (enthält {{< hefte-archiv >}})", name: body, widget: markdown, modes: [raw, rich_text] }

  # === Heftarchiv-Liste (JSON-Datenfile) ==================================
  #     Die eigentliche Heft-Liste fuer {{< hefte-archiv >}} liegt als JSON unter
  #     static/hefte/hefte.json mit dem Schluessel `archiv`. Hier als Formular
  #     editierbar: pro Heft Jahr/Nummer/Dateiname/Groesse. ANNAHME: `datei` ist
  #     der BLOSSE PDF-Dateiname (das Theme-Skript setzt den Pfad static/hefte/
  #     selbst davor) -> die PDF separat nach static/hefte/ hochladen.
  - name: heftarchiv_liste
    label: "Heftarchiv-Liste (Hefte)"
    files:
      - name: hefte_json
        label: "Heftarchiv – Einträge"
        file: static/hefte/hefte.json
        fields:
          - label: "Hefte (neueste zuerst)"
            name: archiv
            widget: list
            label_singular: "Heft"
            summary: "{{fields.nr}}/{{fields.jahr}} – {{fields.datei}}"
            fields:
              - { label: "Jahr", name: jahr, widget: number, value_type: int }
              - { label: "Heft-Nummer", name: nr, widget: number, value_type: int }
              - { label: "Dateiname (PDF in static/hefte/)", name: datei, widget: string }
              - { label: "Größe (z. B. \"8,60 MB\")", name: groesse, widget: string, required: false }

  # === Service & Info – Einzelseiten ======================================
  #     Die "stehenden" Info-Seiten (Mitgliedschaft, Satzung, Links, AGB,
  #     Datenschutz, …). BEWUSST als FILE-Collection (feste Liste) statt
  #     Folder-Collection: eine Folder-Collection ueber content/.../service-info
  #     wuerde auch die oben gesondert modellierten Hub-Seiten (downloads,
  #     aktuelles-sektionsheft, sektionshefte-archiv) einsammeln -> beim
  #     Speichern dort ginge das kacheln-/Shortcode-Frontmatter VERLOREN. Die
  #     explizite Liste vermeidet diese Ueberschneidung (Save-Sicherheit).
  #     Alle Seiten teilen dieselbe einfache Form; Felder via YAML-Anker.
  - name: service_info_seiten
    label: "Service & Info – Einzelseiten"
    media_folder: ""
    public_folder: ""
    files:
      - name: mitgliedschaft
        label: "Mitgliedschaft"
        file: content/dav-mittelfranken/service-info/mitgliedschaft/index.md
        fields: &infoseite_felder
          - { label: "Titel", name: title, widget: string }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "aliases (alte URLs – nicht ändern)", name: aliases, widget: hidden, required: false }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - { label: "Inhalt", name: body, widget: markdown, modes: [rich_text, raw] }
      - { name: satzung, label: "Satzung", file: content/dav-mittelfranken/service-info/satzung/index.md, fields: *infoseite_felder }
      - { name: agb, label: "AGB", file: content/dav-mittelfranken/service-info/agb/index.md, fields: *infoseite_felder }
      - { name: datenschutzerklaerung, label: "Datenschutzerklärung", file: content/dav-mittelfranken/service-info/datenschutzerklaerung/index.md, fields: *infoseite_felder }
      - { name: links, label: "Links", file: content/dav-mittelfranken/service-info/links/index.md, fields: *infoseite_felder }
      - { name: ausleihmaterial, label: "Ausleihmaterial", file: content/dav-mittelfranken/service-info/ausleihmaterial/index.md, fields: *infoseite_felder }
      - { name: ausweise, label: "Ausweise", file: content/dav-mittelfranken/service-info/ausweise/index.md, fields: *infoseite_felder }
      - { name: basar, label: "Basar / Tauschbörse", file: content/dav-mittelfranken/service-info/basar/index.md, fields: *infoseite_felder }
      - { name: jugendherbergswerk, label: "Jugendherbergswerk (DJH)", file: content/dav-mittelfranken/service-info/jugendherbergswerk/index.md, fields: *infoseite_felder }
      - { name: sektionslokal, label: "Sektionslokal", file: content/dav-mittelfranken/service-info/sektionslokal/index.md, fields: *infoseite_felder }
      - { name: versicherungsfaelle, label: "Versicherung & Formulare", file: content/dav-mittelfranken/service-info/versicherungsfaelle/index.md, fields: *infoseite_felder }
      - { name: anzeigenpreise_fuer_heft, label: "Anzeigenpreise fürs Heft", file: content/dav-mittelfranken/service-info/anzeigenpreise-fuer-heft/index.md, fields: *infoseite_felder }
      - { name: inhaltsverzeichnis_heftarchiv, label: "Inhaltsverzeichnis Heftarchiv", file: content/dav-mittelfranken/service-info/inhaltsverzeichnis-heftarchiv/index.md, fields: *infoseite_felder }
      - { name: online_mitgliedschaft_ablauf, label: "Online-Mitgliedschaft (Ablauf)", file: content/dav-mittelfranken/service-info/online-mitgliedschaft-ablauf/index.md, fields: *infoseite_felder }
      - { name: online_mitgliedsdaten_aendern_ablauf, label: "Mitgliedsdaten ändern (Ablauf)", file: content/dav-mittelfranken/service-info/online-mitgliedsdaten-aendern-ablauf/index.md, fields: *infoseite_felder }

  # =========================================================================
  - { name: divider_huetten, divider: true }
  # ░░░░░░░░░░░░░░░  HÜTTEN  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  # =========================================================================

  # === Hütten – Übersicht + Detail-/Stehende Seiten =======================
  #     Detailseiten der beiden Huetten sind die _index.md der Huetten-Ordner
  #     (Steckbrief-Text steht als Markdown im Body, NICHT strukturiert im
  #     Frontmatter). Huettenbelegung hat `layout: huettenbelegung` (Spezial-
  #     Template) -> layout als hidden mitfuehren. Bilder relativ zum jeweiligen
  #     Ordner.
  - name: huetten_seiten
    label: "Hütten – Seiten"
    files:
      - name: huetten_uebersicht
        label: "Hütten – Übersicht"
        file: content/Hütten/_index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "weight", name: weight, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "aliases", name: aliases, widget: hidden, required: false }
          - { label: "Inhalt", name: body, widget: markdown, modes: [rich_text, raw], required: false }
      - name: mittelfrankenhuette
        label: "Mittelfrankenhütte (Detailseite)"
        file: content/Hütten/Mittelfrankenhütte/_index.md
        media_folder: ""
        public_folder: ""
        fields: &huette_detail_felder
          - { label: "Titel", name: title, widget: string }
          - { label: "weight", name: weight, widget: hidden }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - { label: "Inhalt (Steckbrief / Beschreibung)", name: body, widget: markdown, modes: [rich_text, raw] }
      - name: leitsberghaus
        label: "Leitsberghaus (Detailseite)"
        file: content/Hütten/Leitsberghaus/_index.md
        media_folder: ""
        public_folder: ""
        fields: *huette_detail_felder
      - name: huettenbelegung
        label: "Hüttenbelegung"
        file: content/Hütten/Hüttenbelegung/_index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "weight", name: weight, widget: hidden }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "Layout (technisch – nicht ändern)", name: layout, widget: hidden }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - { label: "Inhalt", name: body, widget: markdown, modes: [rich_text, raw], required: false }
      - name: uebernachtungsgebuehren
        label: "Übernachtungsgebühren"
        file: content/Hütten/Übernachtungsgebühren/_index.md
        media_folder: ""
        public_folder: ""
        fields:
          - { label: "Titel", name: title, widget: string }
          - { label: "weight", name: weight, widget: hidden }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "url", name: url, widget: hidden }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - { label: "Inhalt (i. d. R. nur das Gebühren-Bild)", name: body, widget: markdown, modes: [rich_text, raw], required: false }

  # === Mittelfrankenhütte – Berichte (Page-Bundles) =======================
  #     Arbeitsdienst-/Touren-Berichte unter content/Hütten/Mittelfrankenhütte/
  #     <slug>/index.md. path "{{slug}}/index" haelt das _index.md (Detailseite
  #     oben) aus dieser Liste heraus.
  - name: mfh_berichte
    label: "Mittelfrankenhütte – Berichte"
    label_singular: "Bericht"
    description: "Berichte rund um die Mittelfrankenhütte (Ordner mit index.md + Bildern)."
    folder: content/Hütten/Mittelfrankenhütte
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: &huette_bericht_felder
      - { label: "Titel", name: title, widget: string }
      - { label: "Datum (Tour-/Arbeitsdienst-Datum!)", name: date, widget: datetime, date_format: "YYYY-MM-DD", time_format: false, picker_utc: false }
      - { label: "lastmod", name: lastmod, widget: hidden }
      - { label: "Bericht über eine Tour? (zeigt Datum auf der Kachel)", name: bericht, widget: boolean, default: true, required: false }
      - { label: "Kategorie", name: category, widget: string, required: false, default: "Hütten" }
      - { label: "Titelbild (Dateiname in diesem Ordner)", name: titelbild, widget: string, required: false }
      - { label: "Entwurf – NICHT veröffentlichen", name: draft, widget: boolean, default: false, required: false }
      - { label: "URL (fester Permalink, i. d. R. nicht ändern)", name: url, widget: string, required: false }
      - label: "Inhalt"
        name: body
        widget: markdown
        modes: [rich_text, raw]
        buttons: [bold, italic, link, heading-two, heading-three, bulleted-list, numbered-list, quote]

  # === Leitsberghaus – Berichte (Page-Bundles) ============================
  - name: lbh_berichte
    label: "Leitsberghaus – Berichte"
    label_singular: "Bericht"
    description: "Berichte rund um das Leitsberghaus (Ordner mit index.md + Bildern)."
    folder: content/Hütten/Leitsberghaus
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *huette_bericht_felder

  # =========================================================================
  - { name: divider_abteilungen, divider: true }
  # ░░░░░░░░░░░░░░░  ABTEILUNGEN · BEITRÄGE  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  # =========================================================================
  #
  # Pro Abteilung EINE eigene Folder-Collection (statt einer gemeinsamen) — das
  # passt zum spaeteren Per-User-Scoping: ein Abteilungs-Redakteur sieht nur
  # seine Collection. Alle teilen exakt dasselbe Beitrags-Schema (Page-Bundle:
  # <slug>/index.md + Bilder daneben, relativ referenziert). Damit das Schema
  # garantiert konsistent (und save-sicher) bleibt, ist die Feldliste EINMAL als
  # YAML-Anker `&beitrag_felder` definiert und wird wiederverwendet.
  #
  # Save-Sicherheit: real vorkommende Frontmatter-Felder sind title, date,
  # bericht, lastmod, category, draft, url (+ vereinzelt titelbild). `lastmod`
  # laeuft als hidden mit (im urspruenglichen PoC-Beispiel fehlte es — hier
  # ergaenzt, sonst ginge es beim Speichern verloren). `date` ist bei Beitraegen
  # durchgaengig YYYY-MM-DD -> Datetime-Widget ohne Uhrzeit.
  # `path: "{{slug}}/index"` listet NUR <slug>/index.md, also NICHT das _index.md
  # der Abteilung (das wird weiter unten gesondert gepflegt).

  - name: ausbildungsreferat_beitraege
    label: "Ausbildungsreferat – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/ausbildungsreferat
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: &beitrag_felder
      - { label: "Titel", name: title, widget: string }
      - { label: "Datum (Tour-/Veranstaltungsdatum!)", name: date, widget: datetime, date_format: "YYYY-MM-DD", time_format: false, picker_utc: false }
      - { label: "lastmod", name: lastmod, widget: hidden }
      - { label: "Bericht über eine Tour? (zeigt Datum auf der Kachel)", name: bericht, widget: boolean, default: true, required: false }
      - { label: "Kategorie", name: category, widget: string, required: false }
      - { label: "Titelbild (Dateiname in diesem Ordner)", name: titelbild, widget: string, required: false }
      - { label: "Entwurf – NICHT veröffentlichen", name: draft, widget: boolean, default: false, required: false }
      - { label: "URL (fester Permalink, i. d. R. nicht ändern)", name: url, widget: string, required: false }
      # Body mit eingedampfter Toolbar (weniger einschuechternd) + Roh-Umschalter.
      # Bewusst KEIN minimal:true -> lange Berichte brauchen Hoehe.
      - label: "Inhalt"
        name: body
        widget: markdown
        modes: [rich_text, raw]
        buttons: [bold, italic, link, heading-two, heading-three, bulleted-list, numbered-list, quote]

  - name: familiengruppe_beitraege
    label: "Familiengruppe – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/familiengruppe
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *beitrag_felder

  - name: frauengruppe_beitraege
    label: "Frauengruppe – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/frauengruppe
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *beitrag_felder

  # Jugendgruppe hat aktuell noch KEINE Beitrags-Bundles, nur das _index.md.
  # Die Collection steht trotzdem bereit (create: true) fuer kuenftige Beitraege.
  - name: jugendgruppe_beitraege
    label: "Jugendgruppe – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/jugendgruppe
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *beitrag_felder

  # Offener Klettertreff: aktuell nur _index.md, noch keine Beitraege.
  - name: offener_klettertreff_beitraege
    label: "Offener Klettertreff – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/offener-klettertreff
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *beitrag_felder

  # Der urspruengliche PoC-Testfall: Spaziergaenger (Galerie-Stresstest
  # "Fürther Höfe" mit 32 Bildern). Jetzt mit ergaenztem lastmod-hidden.
  - name: spaziergaenger_beitraege
    label: "Spaziergänger – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/spaziergaenger
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *beitrag_felder

  # Unternehmen Edelweiß: aktuell nur _index.md, noch keine Beitraege.
  - name: unternehmen_edelweiss_beitraege
    label: "Unternehmen Edelweiß – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/unternehmen-edelweiss
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *beitrag_felder

  # Wandergruppe: aktuell nur _index.md, noch keine Beitraege.
  - name: wandergruppe_beitraege
    label: "Wandergruppe – Beiträge"
    label_singular: "Beitrag"
    description: "Jeder Beitrag = Ordner mit index.md + Bildern daneben (Page-Bundle)."
    folder: content/abteilungen/wandergruppe
    path: "{{slug}}/index"
    media_folder: ""
    public_folder: ""
    create: true
    extension: md
    format: yaml-frontmatter
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields: *beitrag_felder

  # =========================================================================
  - { name: divider_abteilungsseiten, divider: true }
  # ░░░░░░░░░░░░░░░  ABTEILUNGS-STARTSEITEN (_index.md)  ░░░░░░░░░░░░░░░░░░░░░
  # =========================================================================
  #     Die Sektionsseite jeder Abteilung (Einleitungstext, der ueber der
  #     Beitragsliste steht). Redaktionell sind Titel + Einleitungstext (+ draft);
  #     weight/date/lastmod/category/aliases laufen als hidden mit und bleiben
  #     erhalten. Feldliste via Anker, da alle 8 identisch.
  - name: abteilungs_startseiten
    label: "Abteilungs-Startseiten (Einleitungen)"
    media_folder: ""
    public_folder: ""
    files:
      - name: ausbildungsreferat_index
        label: "Ausbildungsreferat – Einleitung"
        file: content/abteilungen/ausbildungsreferat/_index.md
        fields: &abteilung_index_felder
          - { label: "Titel", name: title, widget: string }
          - { label: "weight", name: weight, widget: hidden }
          - { label: "date", name: date, widget: hidden }
          - { label: "lastmod", name: lastmod, widget: hidden }
          - { label: "category", name: category, widget: hidden }
          - { label: "aliases", name: aliases, widget: hidden, required: false }
          - { label: "Entwurf – nicht veröffentlichen", name: draft, widget: boolean, default: false, required: false }
          - { label: "Einleitungstext", name: body, widget: markdown, modes: [rich_text, raw], required: false }
      - { name: familiengruppe_index, label: "Familiengruppe – Einleitung", file: content/abteilungen/familiengruppe/_index.md, fields: *abteilung_index_felder }
      - { name: frauengruppe_index, label: "Frauengruppe – Einleitung", file: content/abteilungen/frauengruppe/_index.md, fields: *abteilung_index_felder }
      - { name: jugendgruppe_index, label: "Jugendgruppe – Einleitung", file: content/abteilungen/jugendgruppe/_index.md, fields: *abteilung_index_felder }
      - { name: offener_klettertreff_index, label: "Offener Klettertreff – Einleitung", file: content/abteilungen/offener-klettertreff/_index.md, fields: *abteilung_index_felder }
      - { name: spaziergaenger_index, label: "Spaziergänger – Einleitung", file: content/abteilungen/spaziergaenger/_index.md, fields: *abteilung_index_felder }
      - { name: unternehmen_edelweiss_index, label: "Unternehmen Edelweiß – Einleitung", file: content/abteilungen/unternehmen-edelweiss/_index.md, fields: *abteilung_index_felder }
      - { name: wandergruppe_index, label: "Wandergruppe – Einleitung", file: content/abteilungen/wandergruppe/_index.md, fields: *abteilung_index_felder }
