backend:
  name: gitea
  repo: Hoerstube-Herzog/website
  app_id: 76682f17-cbc4-40ac-88bb-34c138edfe37
  api_root: "https://git.schwehrkraft.de/api/v1"
  base_url: "https://git.schwehrkraft.de"
  auth_endpoint: "https://git.schwehrkraft.de/login/oauth/authorize"
  branch: main

local_backend: true

media_folder: "public/uploads"
public_folder: "/uploads"

collections:
  - name: "settings"
    label: "Einstellungen"
    files:
      - name: "settings"
        label: "Kontakt & Öffnungszeiten"
        file: "content/settings.json"
        fields:
          - { label: "Name des Geschäfts", name: "name", widget: "string" }
          - { label: "Slogan", name: "claim", widget: "string" }
          - { label: "Telefon (Anzeige)", name: "phone", widget: "string" }
          - { label: "Telefon (Link)", name: "phoneHref", widget: "string" }
          - { label: "E-Mail", name: "email", widget: "string" }

          - label: "Adresse"
            name: "address"
            widget: "object"
            fields:
              - { label: "Straße & Hausnummer", name: "street", widget: "string" }
              - { label: "PLZ & Ort", name: "zipCity", widget: "string" }

          - label: "Google-Maps-Link"
            name: "googleMapsUrl"
            widget: "string"
            hint: "Link zum Google-Business-Profil bzw. Maps-Eintrag (z. B. über 'Teilen' in Google Maps kopieren). Wird als Button auf der Termin-Seite verwendet."

          - label: "Instagram-Link"
            name: "instagramUrl"
            widget: "string"
            required: false
            hint: "Link zum Instagram-Profil. Leer lassen, um den Link auf der Seite auszublenden."

          - label: "Facebook-Link"
            name: "facebookUrl"
            widget: "string"
            required: false
            hint: "Link zur Facebook-Seite. Leer lassen, um den Link auf der Seite auszublenden (z. B. solange die Facebook-Seite noch nicht fertig ist)."

          - label: "Öffnungszeiten"
            name: "openingHours"
            widget: "list"
            hint: "Nur die regelmäßigen Wochentage (Mo-Sa). Für Weihnachten, Ostern, Betriebsurlaub o.ä. den separaten Block \"Schließzeiten\" weiter unten nutzen -- nicht hier als zusätzliche Zeile eintragen."
            fields:
              - { label: "Tage", name: "days", widget: "string" }
              - { label: "Uhrzeit", name: "hours", widget: "string" }
              - label: "Wochentage (strukturiert, für Google)"
                name: "dayOfWeek"
                widget: "select"
                multiple: true
                required: false
                options: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
                hint: "Optional -- nur ausfuellen wenn's ein regelmaessiger Oeffnungszeit-Block ist (nicht fuer 'nach Vereinbarung'). Steuert die strukturierten Daten fuer Google, hat keinen Einfluss auf die Anzeige auf der Seite."
              - { label: "Öffnet (strukturiert, HH:MM)", name: "opens", widget: "string", required: false }
              - { label: "Schließt (strukturiert, HH:MM)", name: "closes", widget: "string", required: false }
              - label: "Öffnet 2 (strukturiert, HH:MM)"
                name: "opens2"
                widget: "string"
                required: false
                hint: "Nur ausfuellen bei einer Mittagspause (zweiter Zeitblock am selben Tag, z.B. Nachmittags). Sonst leer lassen."
              - { label: "Schließt 2 (strukturiert, HH:MM)", name: "closes2", widget: "string", required: false }

          - label: "Schließzeiten (Weihnachten, Ostern, Betriebsurlaub, ...)"
            name: "closures"
            widget: "list"
            required: false
            hint: "Kann leer bleiben. Jeder Eintrag erscheint als eigener Hinweis im Footer und auf der Termin-Seite, getrennt von den regulären Öffnungszeiten -- unabhängig davon, wie der Titel lautet (Weihnachtsurlaub, Osterurlaub, Betriebsferien, ...)."
            fields:
              - { label: "Titel", name: "title", widget: "string", hint: "z.B. \"Weihnachtsurlaub\" oder \"Betriebsurlaub\"." }
              - { label: "Hinweistext", name: "text", widget: "string", hint: "z.B. \"Wir haben geschlossen vom 24.12. - 06.01.\"" }
              - { label: "Von (strukturiert, JJJJ-MM-TT)", name: "startDate", widget: "string", required: false, hint: "Optional, z.B. 2026-12-24. Steuert nur die strukturierten Daten für Google, kein Einfluss auf die Anzeige." }
              - { label: "Bis (strukturiert, JJJJ-MM-TT)", name: "endDate", widget: "string", required: false, hint: "Optional, z.B. 2027-01-06." }

      - name: "banner"
        label: "Banner & Aktionen"
        file: "content/banner.json"
        fields:
          - label: "Banner aktiv"
            name: "enabled"
            widget: "boolean"
            default: true

          - label: "Banner-Typ"
            name: "variant"
            widget: "select"
            options:
              - label: "Eröffnung"
                value: "opening"
              - label: "Aktion"
                value: "campaign"
            default: "opening"

          - label: "Titel"
            name: "title"
            widget: "string"
            hint: "Zum Beispiel: Eröffnung am 10.10.2026"

          - label: "Startdatum"
            name: "startDate"
            widget: "datetime"
            format: "YYYY-MM-DDTHH:mm:ssZ"
            picker_utc: false
            hint: "Datum und Uhrzeit des Starts."

          - label: "Nachlauf in Tagen"
            name: "visibleDaysAfter"
            widget: "number"
            value_type: "int"
            min: 0
            default: 14
            hint: "Wie viele Tage der Hinweis nach dem Start noch sichtbar bleibt."

          - label: "Fortschrittsfenster in Tagen"
            name: "progressWindowDays"
            widget: "number"
            value_type: "int"
            min: 1
            default: 30
            hint: "Ab wie vielen Tagen vor dem Start der Fortschrittsbalken anlaufen soll."

          - label: "Text vor dem Start"
            name: "textBefore"
            widget: "string"
            required: false
            hint: "Platzhalter möglich: {days}"

          - label: "Text nach dem Start"
            name: "textAfter"
            widget: "string"
            required: false

  - name: "home"
    label: "Startseite"
    files:
      - name: "home"
        label: "Startseite"
        file: "content/home.json"
        fields:
          - label: "Bild"
            name: "image"
            widget: "image"
            hint: "Freigestelltes Foto (transparenter Hintergrund, PNG), Hochformat ca. 4:5 (z. B. 1000×1250px), knapp über dem Kopf bis etwa zur Hüfte zugeschnitten. Andere Formate werden ohne Verzerrung komplett angezeigt, wirken dann aber kleiner/mittiger statt bildfüllend."

          - { label: "Alt-Text zum Bild", name: "imageAlt", widget: "string", required: false,
              hint: "Beschreibt, was auf dem Foto zu sehen ist. Leer lassen = Standardtext wird verwendet." }

          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Überschrift", name: "h1", widget: "string" }
          - { label: "Einleitungstext", name: "lede", widget: "text" }
          - { label: "Button 1", name: "ctaPrimary", widget: "string" }
          - { label: "Button 2", name: "ctaSecondary", widget: "string" }
          - { label: "Überschrift Service-Bereich", name: "servicesTitle", widget: "string" }

          - label: "Services"
            name: "services"
            widget: "list"
            fields:
              - { label: "Titel", name: "title", widget: "string" }
              - { label: "Beschreibung", name: "description", widget: "text" }

          - { label: "Überschrift Angehörigen-Bereich", name: "relativesTitle", widget: "string",
              hint: "Abschnitt für Kinder/Angehörige, die sich für jemand anderen informieren." }
          - { label: "Text Angehörigen-Bereich", name: "relativesLede", widget: "text" }
          - label: "Stichpunkte Angehörigen-Bereich"
            name: "relativesBullets"
            widget: "list"
            fields:
              - { label: "Schlagwort (fett)", name: "label", widget: "string" }
              - { label: "Text", name: "text", widget: "string" }

          - { label: "Überschrift Abschluss-Bereich", name: "ctaTitle", widget: "string" }
          - { label: "Text Abschluss-Bereich", name: "ctaLede", widget: "text" }
          - { label: "Button Abschluss-Bereich", name: "ctaButton", widget: "string" }

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }

  - name: "testimonials"
    label: "Kundenstimmen (Startseite)"
    files:
      - name: "testimonials"
        label: "Kundenstimmen"
        file: "content/testimonials.json"
        fields:
          - { label: "Überschrift", name: "title", widget: "string" }
          - label: "Bewertungen"
            name: "items"
            widget: "list"
            hint: "Solange leer, wird die Sektion auf der Startseite automatisch ausgeblendet -- sinnvoll z.B. vor der Eröffnung, wenn es noch keine Bewertungen gibt. Nur echte Bewertungen eintragen, z. B. von Google kopiert. Bitte vorher das Einverständnis der Kundin/des Kunden einholen, sofern der volle Name verwendet wird."
            fields:
              - { label: "Name", name: "name", widget: "string" }
              - label: "Sterne"
                name: "rating"
                widget: "select"
                options: [1, 2, 3, 4, 5]
                default: 5
              - { label: "Bewertungstext", name: "quote", widget: "text" }

  - name: "hoergeraete"
    label: "Hörlösungen-Seite"
    files:
      - name: "hoergeraete"
        label: "Hörlösungen-Seite"
        file: "content/hoergeraete.json"
        fields:
          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Überschrift", name: "h1", widget: "string" }
          - { label: "Einleitungstext", name: "intro", widget: "text" }

          - label: "Angebote"
            name: "offerings"
            widget: "list"
            fields:
              - { label: "Titel", name: "title", widget: "string" }
              - { label: "Beschreibung", name: "description", widget: "text" }
              - { label: "Link", name: "href", widget: "hidden" }

          - { label: "Kasten: Überschrift", name: "pickTitle", widget: "string" }
          - { label: "Kasten: Text", name: "pickLede", widget: "text" }
          - { label: "Kasten: Button", name: "pickCta", widget: "string" }

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }

  - name: "hoergeraete-preise"
    label: "Hörlösungen-Preise-Seite"
    files:
      - name: "hoergeraete-preise"
        label: "Hörlösungen-Preise-Seite"
        file: "content/hoergeraete-preise.json"
        fields:
          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Überschrift", name: "h1", widget: "string" }
          - { label: "Einleitungstext", name: "intro", widget: "text" }

          - label: "Preisklassen"
            name: "tiers"
            widget: "list"
            fields:
              - { label: "Name", name: "name", widget: "string" }
              - { label: "Eigenanteil ab", name: "priceFrom", widget: "string" }
              - { label: "Preisspanne", name: "priceRange", widget: "string" }
              - { label: "Geeignet für", name: "fitFor", widget: "string" }

              - label: "Ausstattung"
                name: "features"
                widget: "list"
                field:
                  label: "Merkmal"
                  name: "feature"
                  widget: "string"

          - { label: "Überschrift Kostenübernahme", name: "insuranceHeading", widget: "string" }

          - label: "Gesetzlich versichert"
            name: "insuranceGesetzlich"
            widget: "object"
            fields:
              - { label: "Titel", name: "title", widget: "string" }
              - { label: "Text", name: "text", widget: "text" }

          - label: "Privat versichert"
            name: "insurancePrivat"
            widget: "object"
            fields:
              - { label: "Titel", name: "title", widget: "string" }
              - { label: "Text", name: "text", widget: "text" }

          - { label: "Hinweistext", name: "note", widget: "text" }
          - { label: "CTA: Überschrift", name: "ctaTitle", widget: "string" }
          - { label: "CTA: Text", name: "ctaLede", widget: "text" }
          - { label: "CTA: Button", name: "ctaButton", widget: "string" }

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }

  - name: "hoergeraete-typen"
    label: "Hörlösungen (Unterseiten)"
    files:
      - name: "im-ohr-geraete"
        label: "Im-Ohr-Geräte"
        file: "content/hoergeraete-typen/im-ohr-geraete.json"
        fields: &hoergeraete_typ_fields
          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Name", name: "name", widget: "string" }
          - { label: "Untertitel", name: "tagline", widget: "string" }
          - { label: "Einleitungstext", name: "intro", widget: "text" }

          - label: "Foto"
            name: "image"
            widget: "image"
            required: false
            hint: "Optional – Produktfoto, wird einheitlich groß dargestellt. Ohne Bild bleibt die Seite wie bisher."

          - { label: "Alt-Text zum Foto", name: "imageAlt", widget: "string", required: false,
              hint: "Beschreibt, was auf dem Foto zu sehen ist (für Screenreader & Google-Bildersuche). Leer lassen = Untertitel wird verwendet." }

          - label: "Vorteile"
            name: "benefits"
            widget: "list"
            field:
              label: "Vorteil"
              name: "benefit"
              widget: "string"

          - { label: "Für wen geeignet?", name: "idealFor", widget: "text" }

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }

      - name: "hinter-dem-ohr-geraete"
        label: "Hinter-dem-Ohr-Geräte"
        file: "content/hoergeraete-typen/hinter-dem-ohr-geraete.json"
        fields: *hoergeraete_typ_fields

      - name: "ex-hoerer-hoergeraete"
        label: "Ex-Hörer Hörgeräte"
        file: "content/hoergeraete-typen/ex-hoerer-hoergeraete.json"
        fields: *hoergeraete_typ_fields

      - name: "gehoerschutz"
        label: "Individueller Gehörschutz"
        file: "content/hoergeraete-typen/gehoerschutz.json"
        fields: *hoergeraete_typ_fields

      - name: "in-ear-monitoring"
        label: "In Ear Monitoring"
        file: "content/hoergeraete-typen/in-ear-monitoring.json"
        fields: *hoergeraete_typ_fields

      - name: "zubehoer"
        label: "Zubehör"
        file: "content/hoergeraete-typen/zubehoer.json"
        fields: *hoergeraete_typ_fields

  - name: "faq"
    label: "Häufige Fragen"
    files:
      - name: "faq"
        label: "Häufige Fragen"
        file: "content/faq.json"
        fields:
          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Überschrift", name: "h1", widget: "string" }
          - { label: "Einleitungstext", name: "intro", widget: "text" }

          - label: "Themengruppen"
            name: "groups"
            widget: "list"
            fields:
              - { label: "Gruppentitel", name: "title", widget: "string" }
              - label: "Fragen"
                name: "items"
                widget: "list"
                fields:
                  - { label: "Frage", name: "q", widget: "string" }
                  - { label: "Antwort", name: "a", widget: "text" }

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }

  - name: "ablauf"
    label: "Ihr Weg (Ablauf-Seite)"
    files:
      - name: "ablauf"
        label: "Ablauf-Seite"
        file: "content/ablauf.json"
        fields:
          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Überschrift", name: "h1", widget: "string" }
          - { label: "Einleitungstext", name: "intro", widget: "text" }

          - label: "Schritte"
            name: "steps"
            widget: "list"
            fields:
              - { label: "Titel", name: "title", widget: "string" }
              - { label: "Beschreibung", name: "description", widget: "text" }
              - { label: "Details", name: "details", widget: "text" }
              - { label: "Kostenlos & unverbindlich", name: "free", widget: "boolean", default: false,
                  hint: "Zeigt das grüne 'Kostenlos & unverbindlich'-Label bei diesem Schritt an." }

          - { label: "CTA: Überschrift", name: "ctaTitle", widget: "string" }
          - { label: "CTA: Text", name: "ctaLede", widget: "text" }
          - { label: "CTA: Button", name: "ctaButton", widget: "string" }

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }

  - name: "termin"
    label: "Termin-Seite"
    files:
      - name: "termin"
        label: "Termin-Seite"
        file: "content/termin.json"
        fields:
          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Überschrift", name: "h1", widget: "string" }
          - { label: "Einleitungstext", name: "intro", widget: "text" }
          - { label: "Buchungsbox: Titel", name: "amparexTitle", widget: "string" }
          - { label: "Buchungsbox: Text", name: "amparexBody", widget: "text" }
          - { label: "Anfahrt (Parken/ÖPNV)", name: "directions", widget: "text" }

          - { label: "Überschrift Mitbringen-Checkliste", name: "checklistTitle", widget: "string" }
          - label: "Punkte Mitbringen-Checkliste"
            name: "checklistItems"
            widget: "list"
            field: { label: "Punkt", name: "text", widget: "string" }

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }

  - name: "ueber-uns"
    label: "Über mich"
    files:
      - name: "ueber-uns"
        label: "Über mich"
        file: "content/ueber-uns.json"
        fields:
          - { label: "Eyebrow", name: "eyebrow", widget: "string" }
          - { label: "Name", name: "name", widget: "string" }

          - label: "Foto"
            name: "image"
            widget: "image"
            required: false
            hint: "Hochformat-Porträt mit etwas Platz um Kopf und Schultern."

          - { label: "Alt-Text zum Foto", name: "imageAlt", widget: "string", required: false,
              hint: "Beschreibt, was auf dem Foto zu sehen ist. Leer lassen = Standardtext wird verwendet." }

          - label: "Zitat"
            name: "quote"
            widget: "string"
            required: false

          - label: "Text"
            name: "paragraphs"
            widget: "text"
            hint: "Neue Absätze durch zwei Leerzeilen trennen."

          - label: "Stichpunkte"
            name: "bullets"
            widget: "list"
            field:
              label: "Punkt"
              name: "bullet"
              widget: "string"

          - { label: "SEO: Seitentitel", name: "metaTitle", widget: "string", required: false,
              hint: "Überschreibt den Titel in Google (ca. 55 Zeichen). Leer lassen = Standard." }
          - { label: "SEO: Beschreibung", name: "metaDescription", widget: "text", required: false,
              hint: "Der Text unter dem Titel in Google (ca. 155 Zeichen)." }