local_backend: true

backend:
  name: github
  repo: santihago/atlasbonjon
  branch: main
  # Sveltia CMS Authenticator on Cloudflare Workers
  # https://github.com/sveltia/sveltia-cms-auth
  base_url: https://sveltia-cms-auth.atlasbonjon.workers.dev
  # Do NOT use PKCE — not supported for GitHub backend in Sveltia CMS

# Sveltia CMS native i18n — single collection, locale switcher tab
i18n:
  structure: multiple_folders
  locales: [fr, nl, en]
  default_locale: fr
  initial_locales: [fr]  # nl and en are stubs, enabled on demand in CMS

media_folder: public/images
public_folder: /images

# ── Collections ──────────────────────────────────────────────────────────────

collections:

  # ── Pages (6 pages, all 3 languages) ─────────────────────────────────────
  - name: pages
    label: Pages
    label_singular: Page
    i18n: true
    files:

      - name: home
        label: Accueil / Home / Startpagina
        file: src/content/pages/{{locale}}/home.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Main title displayed at the top of the page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle shown just below the main heading. One or two sentences describing what you offer." }
          - { label: Hero CTA text,   name: hero_cta_text,   widget: string,   i18n: true, hint: "Text on the main call-to-action button." }
          - { label: Hero CTA URL,    name: hero_cta_url,    widget: string,   i18n: true, hint: "Where the button links to. Use /fr/contact for the contact page, or a full URL for an external link." }
          - { label: Hero image,      name: hero_image,      widget: image,    i18n: duplicate, required: false, hint: "Poster image shown before the hero video loads and used as a fallback/share image. Landscape format, at least 1400px wide." }
          - { label: Hero image alt,  name: hero_image_alt,  widget: string,   i18n: true, required: false, hint: "Short description of the image for accessibility and screen readers." }
          # ── Service card images ──
          - label: "Service card images"
            name: card_images
            widget: list
            i18n: duplicate
            required: false
            hint: "Images for the 3 service cards on the home page. Add exactly 3 items in this order: 1 Renovations, 2 Moving, 3 Cleaning. If left empty the default hero images are used."
            fields:
              - { label: Image,     name: img,     widget: image,  i18n: duplicate, hint: "Landscape, 800 × 400 px recommended. WebP or JPEG. Maximum file size: 200 KB. Use a 2:1 aspect ratio." }
              - { label: Image alt, name: img_alt, widget: string, i18n: true, required: false, hint: "Short description of the image for screen readers. E.g. 'Bathroom renovation in Brussels'." }
          # ── "Why choose us" section ──
          - { label: "Why Choose Us — eyebrow",  name: why_choose_eyebrow, widget: string, i18n: true, required: false, hint: "Small label shown above the section title. E.g. 'Why choose us'." }
          - { label: "Why Choose Us — heading",  name: why_choose_heading, widget: string, i18n: true, required: false, hint: "Main title of the section." }
          - label: "Why Choose Us — items"
            name: why_choose_items
            widget: list
            i18n: true
            required: false
            hint: "Grid of trust promises shown on the home page. 3 to 4 items work best. Short title + one-sentence description each."
            fields:
              - { label: Title,       name: title, widget: string, i18n: true }
              - { label: Description, name: desc,  widget: text,   i18n: true }
          # ── Not yet displayed on the page ──
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string,   i18n: true, hint: "Shown in the browser tab and Google search results. Not displayed on the page. Ideally 50 to 60 characters." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,     i18n: true, hint: "Short summary shown under the page title in Google results. Not displayed on the page. Ideally 140 to 160 characters." }
          - { label: "Body (not displayed yet)",             name: body,             widget: markdown, i18n: true, hint: "Page content saved here but not yet shown on the site. Will be used in a future update." }

      - name: renovations
        label: Rénovations / Renovations / Renovaties
        file: src/content/pages/{{locale}}/renovations.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Main title at the top of the Renovations page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading. Briefly list the main renovation services offered." }
          - { label: Hero CTA text,   name: hero_cta_text,   widget: string,   i18n: true, hint: "Text on the main call-to-action button." }
          - { label: Hero CTA URL,    name: hero_cta_url,    widget: string,   i18n: true, hint: "Where the button links to. Use /fr/contact for the contact page." }
          - { label: Hero image,      name: hero_image,      widget: image,    i18n: duplicate, required: false, hint: "Banner image for this page. Landscape, at least 1400px wide. Name the file hero-renovations.jpg." }
          - { label: Hero image alt,  name: hero_image_alt,  widget: string,   i18n: true, required: false, hint: "Short description of the image for accessibility." }
          # ── Service card images ──
          - label: "Service card images"
            name: card_images
            widget: list
            i18n: duplicate
            required: false
            hint: "Images for the 5 service cards on this page. Add exactly 5 items in this order: 1 Bathrooms, 2 Kitchens, 3 Floors, 4 Drywall & partitions, 5 Painting. If left empty the default images are used."
            fields:
              - { label: Image,     name: img,     widget: image,  i18n: duplicate, hint: "Landscape, 800 × 400 px recommended. WebP preferred. Maximum file size: 200 KB. Use a 2:1 aspect ratio (e.g. 1200 × 600 px)." }
              - { label: Image alt, name: img_alt, widget: string, i18n: true, required: false, hint: "Short description of the image for screen readers. E.g. 'Bathroom renovation — tiled walk-in shower'." }
          # ── "Our process" section ──
          - { label: "Process — eyebrow",  name: process_eyebrow, widget: string, i18n: true, required: false, hint: "Small label shown above the section title. E.g. 'Our process'." }
          - { label: "Process — heading",  name: process_heading, widget: string, i18n: true, required: false, hint: "Main title of the section." }
          - { label: "Process — intro",    name: process_intro,   widget: text,   i18n: true, required: false, hint: "Short introductory sentence shown below the title." }
          - label: "Process — steps"
            name: process_steps
            widget: list
            i18n: true
            required: false
            hint: "Numbered steps that describe how a renovation project unfolds. 3 to 5 steps work best."
            fields:
              - { label: Title,       name: title, widget: string, i18n: true }
              - { label: Description, name: desc,  widget: text,   i18n: true }
          - { label: "Belgium callout — title", name: belgium_callout_title, widget: string, i18n: true, required: false, hint: "Title of the highlighted card about Belgian administrative guidance (permits, primes, VAT)." }
          - { label: "Belgium callout — body",  name: belgium_callout_body,  widget: text,   i18n: true, required: false, hint: "Short paragraph explaining the administrative help offered." }
          # ── Not yet displayed on the page ──
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string,   i18n: true, hint: "Shown in the browser tab and Google search results. Not displayed on the page. Ideally 50 to 60 characters." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,     i18n: true, hint: "Short summary shown under the page title in Google results. Not displayed on the page. Ideally 140 to 160 characters." }
          - { label: "Body (not displayed yet)",             name: body,             widget: markdown, i18n: true, hint: "Page content saved here but not yet shown on the site. Will be used in a future update." }

      - name: moving
        label: Déménagements / Moving / Verhuizingen
        file: src/content/pages/{{locale}}/moving.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Main title at the top of the Moving page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading. Mention key services like lift rental, packing, or furniture assembly." }
          - { label: Hero CTA text,   name: hero_cta_text,   widget: string,   i18n: true, hint: "Text on the main call-to-action button." }
          - { label: Hero CTA URL,    name: hero_cta_url,    widget: string,   i18n: true, hint: "Where the button links to. Use /fr/contact for the contact page." }
          - { label: Hero image,      name: hero_image,      widget: image,    i18n: duplicate, required: false, hint: "Banner image for this page. Landscape, at least 1400px wide. Name the file hero-moving.jpg." }
          - { label: Hero image alt,  name: hero_image_alt,  widget: string,   i18n: true, required: false, hint: "Short description of the image for accessibility." }
          # ── Service card images ──
          - label: "Service card images"
            name: card_images
            widget: list
            i18n: duplicate
            required: false
            hint: "Images for the 4 service cards on this page. Add exactly 4 items in this order: 1 Brussels / Belgium / Europe, 2 Lift service, 3 Professional packing, 4 Assembly & disassembly. If left empty the default images are used."
            fields:
              - { label: Image,     name: img,     widget: image,  i18n: duplicate, hint: "Landscape, 800 × 400 px recommended. WebP preferred. Maximum file size: 200 KB. Use a 2:1 aspect ratio (e.g. 1200 × 600 px)." }
              - { label: Image alt, name: img_alt, widget: string, i18n: true, required: false, hint: "Short description of the image for screen readers. E.g. 'Moving team loading a truck in Brussels'." }
          # ── "Our commitments" section ──
          - { label: "Commitments — eyebrow", name: guarantees_eyebrow, widget: string, i18n: true, required: false, hint: "Small label shown above the section title. E.g. 'Our commitments'." }
          - { label: "Commitments — heading", name: guarantees_heading, widget: string, i18n: true, required: false, hint: "Main title of the section." }
          - label: "Commitments — items"
            name: guarantees_items
            widget: list
            i18n: true
            required: false
            hint: "Concrete commitments about the move (insurance, packing materials, flat-rate pricing, trained crew). 3 to 4 items work best."
            fields:
              - { label: Title,       name: title, widget: string, i18n: true }
              - { label: Description, name: desc,  widget: text,   i18n: true }
          # ── Not yet displayed on the page ──
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string,   i18n: true, hint: "Shown in the browser tab and Google search results. Not displayed on the page. Ideally 50 to 60 characters." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,     i18n: true, hint: "Short summary shown under the page title in Google results. Not displayed on the page. Ideally 140 to 160 characters." }
          - { label: "Body (not displayed yet)",             name: body,             widget: markdown, i18n: true, hint: "Page content saved here but not yet shown on the site. Will be used in a future update." }

      - name: cleaning
        label: Nettoyage / Cleaning / Reiniging
        file: src/content/pages/{{locale}}/cleaning.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Main title at the top of the Cleaning page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading. Mention the types of cleaning offered: end-of-tenancy, offices, gyms, etc." }
          - { label: Hero CTA text,   name: hero_cta_text,   widget: string,   i18n: true, hint: "Text on the main call-to-action button." }
          - { label: Hero CTA URL,    name: hero_cta_url,    widget: string,   i18n: true, hint: "Where the button links to. Use /fr/contact for the contact page." }
          - { label: Hero image,      name: hero_image,      widget: image,    i18n: duplicate, required: false, hint: "Banner image for this page. Landscape, at least 1400px wide. Name the file hero-cleaning.jpg." }
          - { label: Hero image alt,  name: hero_image_alt,  widget: string,   i18n: true, required: false, hint: "Short description of the image for accessibility." }
          # ── Service card images ──
          - label: "Service card images"
            name: card_images
            widget: list
            i18n: duplicate
            required: false
            hint: "Images for the 4 service cards on this page. Add exactly 4 items in this order: 1 Apartments & houses, 2 Offices & professional spaces, 3 Gyms & fitness centres, 4 End-of-tenancy cleaning. If left empty the default images are used."
            fields:
              - { label: Image,     name: img,     widget: image,  i18n: duplicate, hint: "Landscape, 800 × 400 px recommended. WebP preferred. Maximum file size: 200 KB. Use a 2:1 aspect ratio (e.g. 1200 × 600 px)." }
              - { label: Image alt, name: img_alt, widget: string, i18n: true, required: false, hint: "Short description of the image for screen readers. E.g. 'Cleaning team disinfecting a gym floor'." }
          # ── "Eco-friendly commitment" section ──
          - { label: "Eco — eyebrow", name: eco_eyebrow, widget: string, i18n: true, required: false, hint: "Small label shown above the section title. E.g. 'Our commitment'." }
          - { label: "Eco — heading", name: eco_heading, widget: string, i18n: true, required: false, hint: "Main title of the section." }
          - { label: "Eco — intro",   name: eco_intro,   widget: text,   i18n: true, required: false, hint: "Short paragraph below the title explaining the eco-friendly approach." }
          - label: "Eco — items"
            name: eco_items
            widget: list
            i18n: true
            required: false
            hint: "Concrete eco-friendly practices (biodegradable products, controlled dosing, washable microfibers). 3 items work best."
            fields:
              - { label: Title,       name: title, widget: string, i18n: true }
              - { label: Description, name: desc,  widget: text,   i18n: true }
          # ── Not yet displayed on the page ──
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string,   i18n: true, hint: "Shown in the browser tab and Google search results. Not displayed on the page. Ideally 50 to 60 characters." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,     i18n: true, hint: "Short summary shown under the page title in Google results. Not displayed on the page. Ideally 140 to 160 characters." }
          - { label: "Body (not displayed yet)",             name: body,             widget: markdown, i18n: true, hint: "Page content saved here but not yet shown on the site. Will be used in a future update." }

      - name: about
        label: À propos / About / Over ons
        file: src/content/pages/{{locale}}/about.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Main title at the top of the About page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading. A short sentence about your story or values." }
          - { label: Hero CTA text,   name: hero_cta_text,   widget: string,   i18n: true, hint: "Text on the main call-to-action button." }
          - { label: Hero CTA URL,    name: hero_cta_url,    widget: string,   i18n: true, hint: "Where the button links to. Use /fr/contact for the contact page." }
          - { label: Hero image,      name: hero_image,      widget: image,    i18n: duplicate, required: false, hint: "Banner image for this page. Landscape, at least 1400px wide. Name the file hero-about.jpg." }
          - { label: Hero image alt,  name: hero_image_alt,  widget: string,   i18n: true, required: false, hint: "Short description of the image for accessibility." }
          # ── "Our team" section ──
          - { label: "Team — eyebrow", name: team_eyebrow, widget: string, i18n: true, required: false, hint: "Small label shown above the section title. E.g. 'Our team'." }
          - { label: "Team — heading", name: team_heading, widget: string, i18n: true, required: false, hint: "Main title of the section." }
          - { label: "Team — intro",   name: team_intro,   widget: text,   i18n: true, required: false, hint: "Short paragraph under the title. Good place to mention the languages spoken." }
          - label: "Team — credentials"
            name: team_credentials
            widget: list
            i18n: true
            required: false
            hint: "Trust credentials shown as tiles (registered company, insurance, experience). 3 items work best. Photos of the team can be added later in a follow-up."
            fields:
              - { label: Title,       name: title, widget: string, i18n: true }
              - { label: Description, name: desc,  widget: text,   i18n: true }
          # ── Not yet displayed on the page ──
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string,   i18n: true, hint: "Shown in the browser tab and Google search results. Not displayed on the page. Ideally 50 to 60 characters." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,     i18n: true, hint: "Short summary shown under the page title in Google results. Not displayed on the page. Ideally 140 to 160 characters." }
          - { label: "Body (not displayed yet)",             name: body,             widget: markdown, i18n: true, hint: "Page content saved here but not yet shown on the site. Will be used in a future update." }

      - name: contact
        label: Contact
        file: src/content/pages/{{locale}}/contact.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Main title at the top of the Contact page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading. Reassure visitors: mention response time, availability, no obligation." }
          - { label: Hero CTA text,   name: hero_cta_text,   widget: string,   i18n: true, hint: "Text on the main call-to-action button." }
          - { label: Hero CTA URL,    name: hero_cta_url,    widget: string,   i18n: true, hint: "Where the button links to." }
          - { label: Hero image,      name: hero_image,      widget: image,    i18n: duplicate, required: false, hint: "Banner image for this page. Optional. Landscape, at least 1400px wide. Name the file hero-contact.jpg." }
          - { label: Hero image alt,  name: hero_image_alt,  widget: string,   i18n: true, required: false, hint: "Short description of the image for accessibility." }
          # ── Not yet displayed on the page ──
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string,   i18n: true, hint: "Shown in the browser tab and Google search results. Not displayed on the page. Ideally 50 to 60 characters." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,     i18n: true, hint: "Short summary shown under the page title in Google results. Not displayed on the page. Ideally 140 to 160 characters." }
          - { label: "Body (not displayed yet)",             name: body,             widget: markdown, i18n: true, hint: "Page content saved here but not yet shown on the site. Will be used in a future update." }

      - name: legal
        label: Mentions légales / Legal notice / Juridisch
        file: src/content/pages/{{locale}}/legal.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Title displayed at the top of the legal page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading." }
          - { label: Body,            name: body,            widget: markdown, i18n: true, required: false, hint: "Optional extra legal notice content. Core company details are sourced from Global Settings." }
          # ── SEO — not visible on the page, used by search engines only ──
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string, i18n: true, hint: "Shown in the browser tab and Google search results. Not displayed on the page. Ideally 50 to 60 characters." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,   i18n: true, hint: "Short summary shown under the page title in Google results. Not displayed on the page. Ideally 140 to 160 characters." }

      - name: privacy
        label: Politique de confidentialité / Privacy
        file: src/content/pages/{{locale}}/privacy.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Title displayed at the top of the privacy page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading." }
          - { label: Body,            name: body,            widget: markdown, i18n: true, hint: "Full privacy policy content." }
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string, i18n: true, hint: "Shown in the browser tab and Google search results." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,   i18n: true, hint: "Short summary shown under the page title in Google results." }

      - name: terms
        label: Conditions générales / Terms
        file: src/content/pages/{{locale}}/terms.md
        i18n: true
        fields:
          - { label: Hero heading,    name: hero_heading,    widget: string,   i18n: true, hint: "Title displayed at the top of the terms page." }
          - { label: Hero subheading, name: hero_subheading, widget: text,     i18n: true, hint: "Subtitle below the heading." }
          - { label: Body,            name: body,            widget: markdown, i18n: true, hint: "Full terms and conditions content." }
          - { label: "SEO — Page title (not visible)",       name: meta_title,       widget: string, i18n: true, hint: "Shown in the browser tab and Google search results." }
          - { label: "SEO — Meta description (not visible)", name: meta_description, widget: text,   i18n: true, hint: "Short summary shown under the page title in Google results." }

  # ── Global Settings (language-neutral) ────────────────────────────────────
  - name: global_settings
    label: Global Settings
    files:
      - name: settings
        label: Company Settings
        file: src/content/global-settings/settings.json
        fields:
          - { label: Company name,    name: company_name, widget: string, hint: "Your business name as it appears in the header, footer, and page titles." }
          - { label: Legal company name, name: legal_name, widget: string, required: false, hint: "Full legal company name shown in the footer and legal pages." }
          - { label: Registered office (siège social), name: siege_social, widget: string, required: false, hint: "Legal registered address of the company, shown on the legal page." }
          - { label: Company number (BCE / KBO),       name: bce_number,   widget: string, required: false, hint: "Belgian company registration number. Format: BE 0XXX.XXX.XXX" }
          - { label: IBAN, name: iban, widget: string, required: false, hint: "Company IBAN shown in the footer." }
          - { label: PEPPOL, name: peppol, widget: string, required: false, hint: "Company PEPPOL identifier shown in the footer." }
          - { label: Phone,         name: phone,        widget: string, hint: "Phone number displayed in the header and footer. Include the country code." }
          - { label: WhatsApp,      name: whatsapp,     widget: string, hint: "WhatsApp number for the chat button. Include the country code, no spaces or dashes." }
          - { label: Email,         name: email,        widget: string, hint: "Contact email address displayed on the site and used for form submissions." }
          - { label: Address,       name: address,      widget: string, hint: "Area of operations shown in the footer and contact page." }
          - { label: Logo,          name: logo,         widget: image,  required: false, hint: "Your company logo. Recommended: PNG with transparent background, at least 300px wide." }
          - { label: Facebook URL,  name: facebook,     widget: string, required: false, hint: "Full URL to your Facebook page. Leave empty to hide the icon." }
          - { label: Instagram URL, name: instagram,    widget: string, required: false, hint: "Full URL to your Instagram profile. Leave empty to hide the icon." }
          - { label: Google Business Profile URL, name: google_maps, widget: string, required: false, hint: "Full URL to your Google Business Profile or Maps listing. Leave empty to hide Google links." }

  # ── Global Settings i18n ───────────────────────────────────────────────────
  - name: global_settings_i18n
    label: Global Settings (translated)
    i18n: true
    files:
      - name: settings_i18n
        label: Translated labels
        file: src/content/global-settings-i18n/{{locale}}/settings.json
        i18n: true
        fields:
          - { label: Tagline,            name: tagline,         widget: text,   i18n: true, hint: "Short slogan shown in the header beneath the logo." }
          - { label: Nav — Home,         name: nav_home,        widget: string, i18n: true, hint: "Label for the Home link in the navigation menu." }
          - { label: Nav — Renovations,  name: nav_renovations, widget: string, i18n: true, hint: "Label for the Renovations link in the navigation menu." }
          - { label: Nav — Moving,       name: nav_moving,      widget: string, i18n: true, hint: "Label for the Moving link in the navigation menu." }
          - { label: Nav — Cleaning,     name: nav_cleaning,    widget: string, i18n: true, hint: "Label for the Cleaning link in the navigation menu." }
          - { label: Nav — About,        name: nav_about,       widget: string, i18n: true, hint: "Label for the About link in the navigation menu." }
          - { label: Nav — Contact,      name: nav_contact,     widget: string, i18n: true, hint: "Label for the Contact link in the navigation menu." }
          - { label: Footer text,        name: footer_text,     widget: string, i18n: true, hint: "Short line of text shown at the bottom of every page." }
          - { label: Default CTA button, name: cta_default,     widget: string, i18n: true, hint: "Default text for call-to-action buttons across the site." }

  # ── Testimonials ───────────────────────────────────────────────────────────
  - name: testimonials
    label: Testimonials
    label_singular: Testimonial
    folder: src/content/testimonials
    create: true
    i18n: true
    fields:
      - { label: Name,     name: name,     widget: string, i18n: true, hint: "Client's first name, or first name and last initial." }
      - { label: Text,     name: text,     widget: text,   i18n: true, hint: "What the client said. Keep it authentic. 2 to 4 sentences works best." }
      - { label: Photo,    name: photo,    widget: image,  i18n: duplicate, required: false, hint: "Optional client photo. Square format, at least 200x200px." }
      - { label: Location, name: location, widget: string, i18n: true, required: false, hint: "Client's neighbourhood or city. Optional." }
      - { label: Service,  name: service,  widget: string, i18n: true, required: false, hint: "Which service this review is about. Optional." }

  # ── Gallery ("Our work") ───────────────────────────────────────────────────
  - name: gallery
    label: Gallery
    label_singular: Gallery item
    folder: src/content/gallery
    create: true
    fields:
      - { label: Image,        name: image,        widget: image,  hint: "Photo of the finished work. Landscape format works best." }
      - { label: Image alt,    name: image_alt,    widget: string, required: false, hint: "Short description of the image for accessibility." }
      - { label: Caption,      name: caption,      widget: string, required: false, hint: "Short title shown under the image. E.g. 'Bathroom renovation — Ixelles'." }
      - { label: Description,  name: description,  widget: text,   required: false, hint: "Optional longer description of the work done." }
      - { label: Service tag,  name: service_tag,  widget: select, options: [renovations, moving, cleaning], hint: "Which service this gallery item belongs to. Used to show it on the right page." }
      - { label: Order,        name: order,        widget: number, required: false, value_type: int, hint: "Optional. Lower numbers appear first. Leave empty for default ordering." }
