# yaml-language-server: $schema=https://unpkg.com/@sveltia/cms/schema/sveltia-cms.json
#
# Painel da ARCA Paradesporto (Sveltia CMS, versão fixada no package.json).
# O esquema acima é só uma dica para o editor de código; o painel não o baixa.
# Os nomes e as regras dos campos espelham src/content.config.ts. Se mudar um, mude o outro.

backend:
  name: github
  repo: arcaparadesporto/site
  branch: main
  # Login pelo GitHub: Worker arca-cms-auth (repositório arcaparadesporto/cms-auth), em domínio próprio. Ele só
  # entrega o token a painel.arcaparadesporto.com.br (ALLOWED_DOMAINS).
  base_url: https://login-painel.arcaparadesporto.com.br
  commit_messages:
    create: "Cria {{collection}} “{{slug}}”"
    update: "Atualiza {{collection}} “{{slug}}”"
    delete: "Remove {{collection}} “{{slug}}”"
    uploadMedia: "Envia “{{path}}”"
    deleteMedia: "Remove “{{path}}”"

app_title: Painel da ARCA
site_url: https://www.arcaparadesporto.com.br
display_url: https://www.arcaparadesporto.com.br

# Biblioteca geral de arquivos (PDFs da transparência). Imagens de notícias e banners ficam junto do conteúdo.
media_folder: arquivos/documentos
public_folder: /documentos

media_libraries:
  default:
    config:
      max_file_size: 20971520 # 20 MiB
      slugify_filename: true
      # Toda imagem enviada vira WebP de no máximo 2000 px; o Astro gera as larguras finais no build.
      transformations:
        raster_image:
          format: webp
          quality: 85
          width: 2000
          height: 2000
  stock_assets: false

slug:
  encoding: ascii
  clean_accents: true
  maxlength: 80
  timezone: local

# Campos opcionais vazios saem do arquivo, em vez de virar '' ou null.
output:
  omit_empty_optional_fields: true

collections:
  - name: noticias
    label: Notícias
    label_singular: Notícia
    description: Notícias do site. Cada notícia fica numa pasta, junto das imagens dela.
    icon: newspaper
    folder: src/content/noticias
    preview_path: "/noticias/{{dirname}}/"
    path: "{{slug}}/index"
    # A pasta leva a data do campo "data" (AAAA-MM-DD-titulo). Ela não muda depois de criada.
    slug:
      template: "{{fields.data | date('YYYY-MM-DD')}}-{{slug}}"
      editable: false
    identifier_field: titulo
    summary: "{{titulo}} ({{data}})"
    sortable_fields: [data, titulo]
    media_folder: ""
    public_folder: ""
    fields:
      - name: titulo
        label: Título
        widget: string
      - name: data
        label: Data
        widget: datetime
        type: date
        format: YYYY-MM-DD
        default: "{{now}}"
      - name: autor
        label: Autor
        widget: string
      - name: resumo
        label: Resumo
        widget: text
        hint: Uma ou duas frases. Aparece na lista de notícias e nos buscadores.
      # A capa é um objeto: ao acrescentar a capa, a descrição e as declarações passam a ser obrigatórias.
      - name: capa
        label: Imagem de capa
        widget: object
        required: false
        collapsed: false
        fields:
          - name: imagem
            label: Imagem
            widget: image
            choose_url: false
            hint: Foto em paisagem.
          - name: texto_alternativo
            label: Descrição da imagem de capa
            widget: string
            hint: Descreva o que a foto mostra para quem não enxerga.
          - name: pessoas_identificaveis
            label: Pessoas identificáveis na foto
            widget: select
            hint: Sem esta declaração, a capa não aparece no site.
            options:
              - { label: Nenhuma, value: nenhuma }
              - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
              - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
              - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
          - name: origem
            label: Origem da foto
            widget: select
            hint: Sem esta declaração, a capa não aparece no site.
            options:
              - { label: "Própria da ARCA", value: propria }
              - { label: "Cedida, com autorização de quem cedeu", value: cedida }
              - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
      - name: categorias
        label: Categorias
        widget: select
        multiple: true
        min: 1
        options:
          - { label: Competições, value: competicoes }
          - { label: Institucional, value: institucional }
          - { label: Transparência, value: transparencia }
          - { label: Projetos, value: projetos }
      - name: atletas_relacionados
        label: Atletas relacionados
        widget: relation
        collection: atletas
        multiple: true
        required: false
        value_field: "{{slug}}"
        search_fields: [nome]
        display_fields: [nome]
      - name: patrocinio_relacionado
        label: Patrocínio relacionado
        widget: relation
        collection: patrocinadores
        required: false
        value_field: "{{slug}}"
        search_fields: [nome]
        display_fields: [nome]
        hint: >-
          O patrocínio que custeou o que a notícia conta. O site mostra "Patrocínio: nome — instrumento" com a
          logomarca, como pede o contrato de patrocínio.
      - name: fonte
        label: Fonte externa
        widget: object
        required: false
        hint: >-
          Para notícia que saiu na imprensa. Escreva um resumo próprio e dê o link da matéria; não copie o texto
          nem a foto do jornal.
        fields:
          - name: nome
            label: "Nome da fonte (jornal ou site)"
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: url
            label: "Endereço da matéria (URL)"
            widget: string
            pattern: ['^https://', 'Use o endereço completo, começando com https://']
      - name: rascunho
        label: Rascunho (não aparece no site)
        widget: boolean
        default: false
      - name: body
        label: Texto
        widget: richtext

  - name: atletas
    label: Atletas
    label_singular: Atleta
    description: >-
      Perfis dos atletas. O atleta só aparece no site com o termo de uso de imagem assinado por ele; menor de
      idade precisa também da autorização do responsável.
    icon: pool
    folder: src/content/atletas
    preview_path: "/atletas/{{dirname}}/"
    path: "{{slug}}/index"
    slug:
      template: "{{nome}}"
      editable: false
    identifier_field: nome
    summary: "{{nome}}"
    media_folder: ""
    public_folder: ""
    fields:
      - name: nome
        label: Nome
        widget: string
      - name: foto
        label: Foto
        widget: object
        required: false
        collapsed: false
        fields:
          - name: imagem
            label: Imagem
            widget: image
            choose_url: false
            hint: Foto em retrato.
          - name: texto_alternativo
            label: Descrição da foto
            widget: string
            hint: Descreva o que a foto mostra para quem não enxerga.
          - name: pessoas_identificaveis
            label: Pessoas identificáveis na foto
            widget: select
            hint: Sem esta declaração, a foto não aparece no site.
            options:
              - { label: Nenhuma, value: nenhuma }
              - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
              - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
              - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
          - name: origem
            label: Origem da foto
            widget: select
            hint: Sem esta declaração, a foto não aparece no site.
            options:
              - { label: "Própria da ARCA", value: propria }
              - { label: "Cedida, com autorização de quem cedeu", value: cedida }
              - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
      - name: modalidade
        label: Modalidade
        widget: string
        default: Natação paralímpica
      - name: cidade
        label: Cidade
        widget: string
        required: false
        pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
      - name: na_arca_desde
        label: Compete pela ARCA desde (ano)
        widget: number
        value_type: int
        min: 2021
        max: 2100
        required: false
      - name: faixa_etaria
        label: Faixa etária
        widget: select
        default: adulto
        options:
          - { label: Adulto, value: adulto }
          - { label: "Adolescente (12 a 17 anos)", value: adolescente }
          - { label: "Criança (menos de 12 anos)", value: crianca }
      - name: termo_imagem
        label: Termo de uso de imagem
        widget: object
        required: false
        hint: Assinado pelo próprio atleta. Sem o termo, o perfil fica salvo, mas não aparece no site.
        fields:
          - { name: data, label: Data da assinatura, widget: datetime, type: date, format: YYYY-MM-DD }
          - { name: validade, label: Válido até, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
      - name: autorizacao_responsavel
        label: Autorização do responsável (só para menor de idade)
        widget: object
        required: false
        fields:
          - { name: nome, label: Nome do responsável, widget: string }
          - { name: data, label: Data, widget: datetime, type: date, format: YYYY-MM-DD }
      - name: classe_funcional
        label: Classe funcional
        widget: string
        required: false
        hint: Só aparece no site com o consentimento específico do atleta, abaixo.
        pattern: ['^.{0,20}$', 'Use até 20 caracteres.']
      - name: consentimento_classe
        label: Consentimento para publicar a classe funcional
        widget: object
        required: false
        fields:
          - { name: data, label: Data do consentimento, widget: datetime, type: date, format: YYYY-MM-DD }
      - name: apoiador_decisao
        label: Apoiador na decisão (tomada de decisão apoiada)
        widget: object
        required: false
        hint: Só se o atleta tiver termo de tomada de decisão apoiada. Fica registrado aqui e não aparece no site.
        fields:
          - { name: nome, label: Nome do apoiador, widget: string }
          - { name: data, label: Data do termo, widget: datetime, type: date, format: YYYY-MM-DD }
      - name: contrato_direito_imagem
        label: Contrato de cessão de direito de imagem
        widget: object
        required: false
        hint: >-
          Exigido quando um patrocinador usa a imagem do atleta como contrapartida. Guarde o contrato fora do
          site.
        fields:
          - { name: data, label: Data da assinatura, widget: datetime, type: date, format: YYYY-MM-DD }
          - { name: validade, label: Válido até, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
      - name: conquistas
        label: Conquistas
        label_singular: Conquista
        widget: list
        required: false
        summary: "{{medalha}} · {{prova}} · {{evento}} {{ano}}"
        hint: Cada conquista precisa de fonte (boletim, súmula ou ranking do organizador).
        fields:
          - name: medalha
            label: Medalha
            widget: select
            options:
              - { label: Ouro, value: ouro }
              - { label: Prata, value: prata }
              - { label: Bronze, value: bronze }
              - { label: Participação, value: participacao }
          - { name: prova, label: "Prova (ex.: 100 m livre)", widget: string }
          - { name: evento, label: Evento, widget: string }
          - { name: ano, label: Ano, widget: number, value_type: int }
          - { name: tempo, label: Tempo, widget: string, required: false }
          - { name: representando, label: Representando, widget: string, default: ARCA }
          - name: fonte
            label: Fonte (endereço)
            widget: string
            pattern: ['^https://', 'Use o endereço completo da fonte, começando com https://']
      - name: redes
        label: Redes sociais do atleta
        label_singular: Rede social
        widget: list
        required: false
        summary: "{{nome}}"
        fields:
          - { name: nome, label: Nome, widget: string }
          - name: url
            label: "Endereço (URL)"
            widget: string
            type: url
            pattern: ['^https://', 'Use o endereço completo, começando com https://']
      - name: destaque_inicio
        label: Destaque na página inicial
        widget: boolean
        default: false
      - { name: ordem, label: Ordem, widget: number, value_type: int, required: false }
      - name: rascunho
        label: Rascunho (não aparece no site)
        widget: boolean
        default: false
      - name: body
        label: Biografia
        widget: richtext
        required: false

  - name: patrocinadores
    label: Patrocinadores
    label_singular: Patrocinador
    description: >-
      Patrocinadores e apoiadores. Só aparecem no site com a autorização de exibição. Patrocinador público
      precisa da data final do patrocínio.
    icon: handshake
    folder: src/content/patrocinadores
    preview_path: "/patrocinadores/"
    extension: yaml
    format: yaml
    slug:
      template: "{{nome}}"
      editable: false
    identifier_field: nome
    summary: "{{nome}}"
    media_folder: ""
    public_folder: ""
    fields:
      - name: nome
        label: Nome
        widget: string
      - name: logo
        label: Logo
        widget: object
        required: false
        fields:
          - { name: imagem, label: Imagem, widget: image, choose_url: false }
          - name: texto_alternativo
            label: Descrição do logo
            widget: string
            required: false
            hint: Se ficar vazio, vale o nome do patrocinador.
            pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
      - name: descricao
        label: Descrição curta
        widget: string
        required: false
        hint: Aparece no lugar do logo quando não houver logo.
        pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
      - name: site
        label: Site
        widget: string
        required: false
        pattern: ['^https://', 'Use o endereço completo, começando com https://']
      - name: categoria
        label: Categoria
        widget: select
        options:
          - { label: Patrocinador público, value: patrocinador_publico }
          - { label: Patrocinador, value: patrocinador }
          - { label: Apoiador, value: apoiador }
      - name: ativo
        label: Ativo (aparece no site)
        widget: boolean
        default: true
      - { name: ordem, label: Ordem, widget: number, value_type: int, required: false }
      - name: periodo
        label: Período do patrocínio
        widget: object
        required: false
        fields:
          - { name: inicio, label: Início, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
          - { name: fim, label: Fim, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
      - name: instrumento
        label: Instrumento do patrocínio
        widget: string
        required: false
        hint: >-
          Como "Contrato 000/2026". Aparece como "Patrocínio: nome — instrumento" nas notícias, nos projetos e
          nos álbuns ligados a este patrocínio.
        pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
      - name: autorizacao
        label: Autorização de exibição
        widget: object
        required: false
        hint: Quem autorizou mostrar o nome e o logo, e quando. Guarde o e-mail da autorização fora do site.
        fields:
          - { name: quem, label: Quem autorizou, widget: string }
          - { name: data, label: Data, widget: datetime, type: date, format: YYYY-MM-DD }

  - name: galeria
    label: Galeria
    label_singular: Álbum
    description: >-
      Álbuns de fotos e vídeos. Declare as pessoas e a origem uma vez para o álbum; se uma foto for diferente,
      preencha a exceção dela. Foto sem declaração não aparece no site.
    icon: photo_library
    folder: src/content/galeria
    preview_path: "/galeria/{{dirname}}/"
    path: "{{slug}}/index"
    extension: yaml
    format: yaml
    # A pasta leva a data do campo "data" (AAAA-MM-DD-titulo), como nas notícias.
    slug:
      template: "{{fields.data | date('YYYY-MM-DD')}}-{{slug}}"
      editable: false
    identifier_field: titulo
    summary: "{{titulo}} ({{data}})"
    sortable_fields: [data, titulo]
    media_folder: ""
    public_folder: ""
    fields:
      - name: titulo
        label: Título
        widget: string
        pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
      - name: data
        label: Data
        widget: datetime
        type: date
        format: YYYY-MM-DD
        default: "{{now}}"
      - name: descricao
        label: Descrição
        widget: text
        required: false
        pattern: ['^[\s\S]{0,500}$', 'Use até 500 caracteres.']
      - name: pessoas_identificaveis
        label: Pessoas identificáveis nas fotos do álbum
        widget: select
        hint: Vale para todas as fotos, menos as que tiverem exceção. Sem esta declaração, as fotos não aparecem no site.
        options:
          - { label: Nenhuma, value: nenhuma }
          - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
          - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
          - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
      - name: origem
        label: Origem das fotos do álbum
        widget: select
        hint: Vale para todas as fotos, menos as que tiverem exceção. Sem esta declaração, as fotos não aparecem no site.
        options:
          - { label: "Própria da ARCA", value: propria }
          - { label: "Cedida, com autorização de quem cedeu", value: cedida }
          - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
      - name: patrocinio_relacionado
        label: Patrocínio relacionado
        widget: relation
        collection: patrocinadores
        required: false
        value_field: "{{slug}}"
        search_fields: [nome]
        display_fields: [nome]
        hint: >-
          O patrocínio que custeou o evento. O site mostra "Patrocínio: nome — instrumento" com a logomarca.
      - name: fotos
        label: Fotos
        label_singular: Foto
        widget: list
        required: false
        summary: "{{texto_alternativo}}"
        thumbnail: imagem
        collapsed: auto
        fields:
          - name: imagem
            label: Imagem
            widget: image
            choose_url: false
          - name: texto_alternativo
            label: Descrição da foto
            widget: string
            hint: Obrigatória. Descreva o que a foto mostra para quem não enxerga.
          - name: legenda
            label: Legenda
            widget: string
            required: false
            pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: credito
            label: Crédito (autor da foto)
            widget: string
            required: false
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: excecao
            label: Exceção à declaração do álbum
            widget: object
            required: false
            hint: Só se esta foto for diferente do resto do álbum, como uma foto cedida num álbum de fotos próprias.
            fields:
              - name: pessoas_identificaveis
                label: Pessoas identificáveis nesta foto
                widget: select
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem desta foto
                widget: select
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
      - name: videos
        label: Vídeos do YouTube
        label_singular: Vídeo
        widget: list
        required: false
        summary: "{{titulo}}"
        hint: O vídeo só carrega quando o visitante clica nele.
        fields:
          - name: url
            label: "Endereço do vídeo (URL)"
            widget: string
            pattern:
              - '^https://(www\.|m\.)?(youtube\.com/(watch\?|shorts/|live/|embed/)|youtu\.be/|youtube-nocookie\.com/embed/)'
              - Use o endereço de um vídeo do YouTube, como https://www.youtube.com/watch?v=… ou https://youtu.be/…
          - name: titulo
            label: Título do vídeo
            widget: string
            pattern: ['^.{0,120}$', 'Use até 120 caracteres.']

  - name: projetos
    label: Projetos
    label_singular: Projeto
    description: Projetos da ARCA, com situação, período, fonte do recurso e documentos do Portal da Transparência.
    icon: rocket_launch
    folder: src/content/projetos
    preview_path: "/projetos/{{dirname}}/"
    path: "{{slug}}/index"
    slug:
      template: "{{titulo}}"
      editable: false
    identifier_field: titulo
    summary: "{{titulo}}"
    media_folder: ""
    public_folder: ""
    fields:
      - name: titulo
        label: Título
        widget: string
        pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
      - name: status
        label: Situação
        widget: select
        options:
          - { label: Em captação, value: em_captacao }
          - { label: Em execução, value: em_execucao }
          - { label: Concluído, value: concluido }
      - name: periodo
        label: Período
        widget: object
        required: false
        fields:
          - { name: inicio, label: Início, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
          - { name: fim, label: Fim, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
      - name: fonte_recurso
        label: Fonte do recurso
        widget: select
        required: false
        options:
          - { label: Recurso público municipal, value: publico_municipal }
          - { label: Recurso público estadual, value: publico_estadual }
          - { label: Recurso público federal, value: publico_federal }
          - { label: Patrocínio ou parceria privada, value: privado }
          - { label: Doações, value: doacoes }
          - { label: Recursos próprios, value: recursos_proprios }
      - name: valor
        label: Valor (R$)
        widget: number
        value_type: float
        min: 0
        required: false
        hint: Só números, com ponto nos centavos, como 18000 ou 3600.50.
      - name: resumo
        label: Resumo
        widget: text
        pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
      - name: capa
        label: Imagem de capa
        widget: object
        required: false
        collapsed: false
        fields:
          - name: imagem
            label: Imagem
            widget: image
            choose_url: false
            hint: Foto em paisagem.
          - name: texto_alternativo
            label: Descrição da imagem de capa
            widget: string
            hint: Descreva o que a foto mostra para quem não enxerga.
          - name: pessoas_identificaveis
            label: Pessoas identificáveis na foto
            widget: select
            hint: Sem esta declaração, a capa não aparece no site.
            options:
              - { label: Nenhuma, value: nenhuma }
              - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
              - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
              - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
          - name: origem
            label: Origem da foto
            widget: select
            hint: Sem esta declaração, a capa não aparece no site.
            options:
              - { label: "Própria da ARCA", value: propria }
              - { label: "Cedida, com autorização de quem cedeu", value: cedida }
              - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
      - name: documentos
        label: Documentos do projeto
        widget: relation
        collection: documentos
        multiple: true
        required: false
        value_field: "{{slug}}"
        search_fields: [titulo]
        display_fields: [titulo]
        hint: Documentos já publicados no Portal da Transparência, como o termo, os relatórios e a prestação de contas.
      - name: patrocinadores
        label: Patrocinadores e apoiadores do projeto
        widget: relation
        collection: patrocinadores
        multiple: true
        required: false
        value_field: "{{slug}}"
        search_fields: [nome]
        display_fields: [nome]
      - name: patrocinio_relacionado
        label: Patrocínio relacionado
        widget: relation
        collection: patrocinadores
        required: false
        value_field: "{{slug}}"
        search_fields: [nome]
        display_fields: [nome]
        hint: >-
          O patrocínio que custeia o projeto. O site mostra "Patrocínio: nome — instrumento" com a logomarca.
      - name: body
        label: Descrição
        widget: richtext
        required: false

  # Uma entrada por página do site, cada uma com o arquivo dela. Os campos comuns se repetem em cada página,
  # sem alias de YAML, como no resto deste arquivo. Páginas com campos próprios: Quem somos, Missão, visão e
  # valores e Seja patrocinador. Uma página nova depende de uma mudança no código e de uma entrada aqui.
  - name: paginas
    label: Páginas
    label_singular: Página
    description: >-
      Textos das páginas do site. As pessoas da Diretoria, os órgãos do organograma e os contatos ficam nas
      coleções e configurações próprias. Uma página nova depende de uma mudança no código.
    icon: description
    files:
      - name: quem-somos
        label: Quem somos
        file: src/content/paginas/quem-somos.md
        preview_path: "/quem-somos/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: citacao
            label: Frase em destaque
            widget: string
            required: false
            hint: Aparece grande, ao lado do texto, como "Na natação, a raia 4 é a do nadador mais rápido das eliminatórias".
            pattern: ['^.{0,160}$', 'Use até 160 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false

      - name: missao-visao-valores
        label: Missão, visão e valores
        file: src/content/paginas/missao-visao-valores.md
        preview_path: "/missao-visao-valores/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: missao
            label: Missão
            widget: text
            hint: Obrigatória. Aparece no primeiro dos três quadros.
            pattern: ['^[\s\S]{0,400}$', 'Use até 400 caracteres.']
          - name: visao
            label: Visão
            widget: text
            hint: Obrigatória. Aparece no segundo quadro.
            pattern: ['^[\s\S]{0,400}$', 'Use até 400 caracteres.']
          - name: valores
            label: Valores
            label_singular: Valor
            widget: list
            min: 1
            max: 8
            hint: Um valor em cada item. Com um item só, ele aparece como parágrafo; com mais, como lista.
            field:
              name: valor
              label: Valor
              widget: string
              pattern: ['^.{0,160}$', 'Use até 160 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false


      - name: diretoria
        label: Diretoria e Conselho Fiscal (textos da página)
        file: src/content/paginas/diretoria.md
        preview_path: "/diretoria/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false


      - name: organograma
        label: Organograma (textos da página)
        file: src/content/paginas/organograma.md
        preview_path: "/organograma/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false


      - name: atletas
        label: Atletas (textos da página)
        file: src/content/paginas/atletas.md
        preview_path: "/atletas/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false


      - name: projetos
        label: Projetos (textos da página)
        file: src/content/paginas/projetos.md
        preview_path: "/projetos/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false


      - name: galeria
        label: Galeria (textos da página)
        file: src/content/paginas/galeria.md
        preview_path: "/galeria/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes dos álbuns.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']

      - name: patrocinadores
        label: Patrocinadores (textos da página)
        file: src/content/paginas/patrocinadores.md
        preview_path: "/patrocinadores/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false


      - name: seja-patrocinador
        label: Seja patrocinador
        file: src/content/paginas/seja-patrocinador.md
        preview_path: "/seja-patrocinador/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: cotas
            label: Cotas de patrocínio
            label_singular: Cota
            widget: list
            required: false
            max: 6
            summary: "{{nome}}"
            hint: Cada cota vira um quadro na página e uma opção do campo "Interesse" do formulário.
            fields:
              - name: nome
                label: Nome da cota
                widget: string
                hint: Como Master ou Apoiador. Não repita o nome de outra cota.
                pattern: ['^.{0,40}$', 'Use até 40 caracteres.']
              - name: contrapartidas
                label: Contrapartidas
                label_singular: Contrapartida
                widget: list
                min: 1
                max: 8
                field:
                  name: contrapartida
                  label: Contrapartida
                  widget: string
                  pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
              - name: valor
                label: Valor
                widget: string
                required: false
                hint: Como "R$ 1.000 por mês". Vazio, a página mostra "Valor sob consulta".
                pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
          - name: lei_incentivo
            label: Projeto aprovado na Lei de Incentivo ao Esporte
            widget: object
            required: false
            collapsed: true
            hint: >-
              Só preencha com o projeto autorizado pelo Ministério do Esporte. Vazio, a página diz que a ARCA ainda
              não tem projeto aprovado. Depois da data final da captação, o bloco sai da página.
            fields:
              - name: projeto
                label: Nome do projeto
                widget: string
                pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
              - name: numero_projeto
                label: Número do projeto
                widget: string
                pattern: ['^.{0,40}$', 'Use até 40 caracteres.']
              - name: processo
                label: Número do processo
                widget: string
                pattern: ['^.{0,40}$', 'Use até 40 caracteres.']
              - name: valor_autorizado
                label: Valor autorizado (R$)
                widget: number
                value_type: float
                min: 0
                hint: Só números, com ponto nos centavos, como 18000 ou 3600.50.
              - name: banco
                label: Banco da conta do projeto
                widget: select
                options:
                  - { label: Banco do Brasil, value: banco_do_brasil }
                  - { label: Caixa Econômica Federal, value: caixa }
              - name: agencia
                label: Agência
                widget: string
                pattern: ['^.{0,10}$', 'Use até 10 caracteres.']
              - name: conta
                label: Conta específica do projeto
                widget: string
                pattern: ['^.{0,20}$', 'Use até 20 caracteres.']
              - { name: captacao_ate, label: Captação autorizada até, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false


      - name: contato
        label: Contato
        file: src/content/paginas/contato.md
        preview_path: "/contato/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false

      - name: ouvidoria
        label: Ouvidoria (textos da página)
        file: src/content/paginas/ouvidoria.md
        preview_path: "/ouvidoria/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false

      # A chave Pix, os valores e o texto do painel do Pix ficam fora daqui: a chave é fixa no código, e os
      # valores e o texto estão em Configurações, Página de doação.
      - name: doe
        label: Faça uma doação (textos da página)
        file: src/content/paginas/doe.md
        preview_path: "/doe/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false

      # Modelo entregue com o site, aprovado pela Diretoria antes da publicação. As tabelas são campos próprios.
      - name: privacidade
        label: Aviso de privacidade
        file: src/content/paginas/privacidade.md
        preview_path: "/privacidade/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: tratamentos
            label: Tratamentos de dados
            label_singular: Tratamento
            widget: list
            min: 1
            summary: "{{tratamento}}"
            hint: Uma linha da tabela por uso de dados pessoais, como Contato ou Ouvidoria.
            fields:
              - name: tratamento
                label: Tratamento
                widget: string
                pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
              - name: dados
                label: Dados
                widget: text
                pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
              - name: finalidade
                label: Para quê
                widget: text
                pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
              - name: base_legal
                label: Base legal
                widget: text
                pattern: ['^[\s\S]{0,200}$', 'Use até 200 caracteres.']
              - name: prazo
                label: Por quanto tempo
                widget: text
                pattern: ['^[\s\S]{0,200}$', 'Use até 200 caracteres.']
          - name: operadores
            label: Operadores
            label_singular: Operador
            widget: list
            required: false
            summary: "{{nome}}"
            hint: Empresas e órgãos que tratam dados para a ARCA, com o país onde os dados ficam.
            fields:
              - name: nome
                label: Nome
                widget: string
                pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
              - name: servico
                label: O que faz
                widget: text
                pattern: ['^[\s\S]{0,200}$', 'Use até 200 caracteres.']
              - name: pais
                label: País
                widget: string
                pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: body
            label: Texto
            widget: richtext
            required: false
            hint: Direitos do titular, cookies, crianças e adolescentes, dados fora do Brasil, incidentes e mudanças.
          - name: atualizado_em
            label: Atualizado em
            widget: datetime
            type: date
            format: YYYY-MM-DD
            auto_now: true
            required: false
            hint: Preenchida sozinha a cada salvamento. É a data que o aviso mostra no topo.

      # O texto é um modelo entregue com o site: só aparece depois da aprovação em ata.
      - name: politica-de-protecao
        label: Política de proteção de crianças e adolescentes
        file: src/content/paginas/politica-de-protecao.md
        preview_path: "/transparencia/politica-de-protecao/"
        media_folder: ""
        public_folder: ""
        fields:
          - name: titulo
            label: Título
            widget: string
            pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
          - name: resumo
            label: Resumo
            widget: text
            hint: Uma ou duas frases. Aparece embaixo do título e nos buscadores.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: em_poucas_palavras
            label: Em poucas palavras
            label_singular: Frase
            widget: list
            required: false
            max: 5
            hint: Até 5 frases curtas, em linguagem simples, com uma ideia em cada uma. Aparecem antes do texto.
            field:
              name: frase
              label: Frase
              widget: string
              pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
          - name: imagem
            label: Imagem da página
            widget: object
            required: false
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Descreva o que a foto mostra para quem não enxerga.
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, a imagem não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
          - name: aprovacao
            label: Aprovação
            widget: object
            required: false
            hint: >-
              Preencha só depois que a ARCA aprovar a política em reunião registrada em ata. Sem a aprovação, o site
              mostra "Política em aprovação pela Diretoria" e não mostra o texto.
            fields:
              - { name: data, label: Data da aprovação, widget: datetime, type: date, format: YYYY-MM-DD }
              - name: ata
                label: Ata da aprovação
                widget: relation
                collection: documentos
                value_field: "{{slug}}"
                display_fields: [titulo]
                search_fields: [titulo]
                required: false
                hint: >-
                  A ata publicada em Documentos: de assembleia, em "Atas de assembleias", ou de reunião da Diretoria,
                  em "Registros e declarações" ou em "Políticas".
                filters:
                  - field: categoria
                    values: [atas-assembleias, registros-declaracoes, politicas]
          - name: body
            label: Texto da política
            widget: richtext
            required: false
            hint: Mude só o que a ARCA aprovar em ata. Cada compromisso segue uma alínea do art. 36, XIII, da Lei Geral do Esporte.
          - name: atualizado_em
            label: Atualizado em
            widget: datetime
            type: date
            format: YYYY-MM-DD
            auto_now: true
            required: false
            hint: Preenchida sozinha a cada salvamento. Conta para a data do bloco Proteção e privacidade.


  - name: divisor-transparencia
    divider: true

  # Preview Workflow: "Salvar" cria um rascunho com prévia; o documento só vai ao site com "Publicar".
  # Os arquivos vão para a biblioteca geral (arquivos/documentos), não para a pasta da entrada.
  - name: documentos
    label: Documentos da transparência
    label_singular: Documento
    description: >-
      Documentos do Portal da Transparência. Antes de enviar, no computador: tarje CPF, RG, endereço e dados de
      menores, aplique OCR e comprima o PDF abaixo de 20 MB. Salvar cria um rascunho com prévia; o documento só
      vai ao site com Publicar.
    icon: folder_open
    folder: src/content/documentos
    preview_path: "/transparencia/documentos/{{slug}}/"
    extension: yaml
    format: yaml
    publish_mode: preview
    slug:
      template: "{{fields.categoria}}-{{fields.exercicio}}-{{slug}}"
      editable: false
    identifier_field: titulo
    summary: "{{titulo}} ({{exercicio}})"
    sortable_fields: [data_publicacao, exercicio, titulo]
    fields:
      - name: titulo
        label: Título
        widget: string
        pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
      - name: categoria
        label: Categoria
        widget: select
        options:
          - { label: "Institucional · Estatuto Social", value: estatuto }
          - { label: "Institucional · CNPJ e certidões", value: cnpj-certidoes }
          - { label: "Institucional · Registros e declarações", value: registros-declaracoes }
          - { label: "Governança · Organograma e competências", value: organograma }
          - { label: "Governança · Remuneração dos dirigentes", value: remuneracao }
          - { label: "Governança · Pagamentos com recursos públicos", value: pagamentos-recursos-publicos }
          - { label: "Governança · Normas internas e acesso dos associados", value: normas-internas }
          - { label: "Governança · Conflito de interesses", value: conflito-interesses }
          - { label: "Assembleias · Atas de assembleias", value: atas-assembleias }
          - { label: "Assembleias · Editais e atas de eleições", value: eleicoes }
          - { label: "Prestação de contas · Relatório de gestão", value: relatorio-gestao }
          - { label: "Prestação de contas · Relatórios orçamentários", value: relatorio-orcamentario }
          - { label: "Prestação de contas · Balanço Patrimonial", value: balanco-patrimonial }
          - { label: "Prestação de contas · Demonstração do Resultado do Exercício", value: dre }
          - { label: "Prestação de contas · Parecer do Conselho Fiscal e ata de aprovação", value: parecer-conselho-fiscal }
          - { label: "Prestação de contas · Receitas e despesas", value: receitas-despesas }
          - { label: "Recursos públicos · Convênios, contratos e termos de fomento", value: convenios-contratos }
          - { label: "Recursos públicos · Patrocínios", value: patrocinios }
          - { label: "Recursos públicos · Procedimentos de contratação", value: contratacoes }
          - { label: "Recursos públicos · Contratos de direito de imagem e de propriedade intelectual", value: direitos-imagem }
          - { label: "Proteção e privacidade · Políticas", value: politicas }
      - name: exercicio
        label: Exercício (ano)
        widget: number
        value_type: int
        min: 2021
        max: 2100
        hint: O ano a que o documento se refere. Para estatuto e certidões, o ano do documento.
      - name: periodo_referencia
        label: Período de referência
        widget: select
        default: ano
        options:
          - { label: Ano inteiro, value: ano }
          - { label: 1º trimestre, value: trimestre-1 }
          - { label: 2º trimestre, value: trimestre-2 }
          - { label: 3º trimestre, value: trimestre-3 }
          - { label: 4º trimestre, value: trimestre-4 }
          - { label: Janeiro, value: janeiro }
          - { label: Fevereiro, value: fevereiro }
          - { label: Março, value: marco }
          - { label: Abril, value: abril }
          - { label: Maio, value: maio }
          - { label: Junho, value: junho }
          - { label: Julho, value: julho }
          - { label: Agosto, value: agosto }
          - { label: Setembro, value: setembro }
          - { label: Outubro, value: outubro }
          - { label: Novembro, value: novembro }
          - { label: Dezembro, value: dezembro }
      - { name: data_documento, label: Data do documento, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
      - name: data_publicacao
        label: Data de publicação
        widget: datetime
        type: date
        format: YYYY-MM-DD
        default: "{{now}}"
        hint: A data de atualização do bloco no portal vem desta data.
      - { name: data_aprovacao, label: Data de aprovação, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
      - name: resumo
        label: Resumo
        widget: text
        hint: Em texto simples. É o que a busca e o leitor de tela encontram, porque a busca não lê o PDF.
        pattern: ['^[\s\S]{0,600}$', 'Use até 600 caracteres.']
      - name: pdf
        label: Arquivo PDF
        widget: file
        required: false
        choose_url: false
        accept: application/pdf,.pdf
        hint: >-
          Até 20 MB, já tarjado, com OCR, comprimido e sem senha nem restrição de impressão ou cópia. Retângulo
          desenhado por cima do texto não é tarja: o texto continua no arquivo. Documento "não publicado" não leva
          arquivo.
        media_libraries:
          default:
            config:
              max_file_size: 20971520 # 20 MiB
      - name: arquivo_dados
        label: Planilha de dados (CSV ou ODS)
        widget: file
        required: false
        choose_url: false
        accept: .csv,.ods,text/csv,application/vnd.oasis.opendocument.spreadsheet
        hint: Planilha com os dados do documento, como receitas e despesas ou pagamentos. Até 20 MB.
        media_libraries:
          default:
            config:
              max_file_size: 20971520 # 20 MiB
      - name: fonte_recurso
        label: Fonte do recurso
        widget: select
        required: false
        options:
          - { label: Recurso público municipal, value: publico_municipal }
          - { label: Recurso público estadual, value: publico_estadual }
          - { label: Recurso público federal, value: publico_federal }
          - { label: Patrocínio ou parceria privada, value: privado }
          - { label: Doações, value: doacoes }
          - { label: Recursos próprios, value: recursos_proprios }
      - name: vinculo
        label: Faz parte de um instrumento
        widget: object
        required: false
        collapsed: true
        hint: >-
          Para aditivo, plano de trabalho, relatório, extrato ou planilha de pagamentos de um convênio, contrato,
          termo ou patrocínio já cadastrado. Os dados do instrumento ficam só no documento principal: deixe vazio
          "Dados do instrumento" neste documento.
        fields:
          - name: instrumento
            label: Documento principal do instrumento
            widget: relation
            collection: documentos
            value_field: "{{slug}}"
            display_fields: [titulo]
            search_fields: [titulo]
            filters:
              - field: categoria
                values: [convenios-contratos, patrocinios, contratacoes, direitos-imagem]
          - name: papel
            label: O que este documento é no instrumento
            widget: select
            options:
              - { label: Aditivo, value: aditivo }
              - { label: Plano de trabalho, value: plano_trabalho }
              - { label: Relatório de execução, value: relatorio_execucao }
              - { label: Relatório final de prestação de contas, value: relatorio_final }
              - { label: Extrato publicado, value: extrato }
              - { label: Planilha de pagamentos, value: pagamentos }
              - { label: Outro documento, value: outro }
      - name: instrumento
        label: Dados do instrumento (convênio, contrato, termo ou patrocínio)
        widget: object
        required: false
        collapsed: true
        hint: Só no documento principal do instrumento.
        fields:
          - name: orgao_parceiro
            label: Órgão ou empresa parceira
            widget: string
            pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
          - name: numero
            label: Número do instrumento
            widget: string
            required: false
            hint: Como 000/2026.
            pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
          - name: objeto
            label: Objeto
            widget: text
            required: false
            hint: O que o instrumento financia, em uma ou duas frases.
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: valor
            label: Valor total (R$)
            widget: number
            value_type: float
            min: 0
            required: false
            hint: Só números, com ponto nos centavos, como 18000 ou 3600.50.
          - name: vigencia
            label: Vigência
            widget: object
            required: false
            fields:
              - { name: inicio, label: Início, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - { name: fim, label: Fim, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
          - name: situacao
            label: Situação
            widget: select
            default: vigente
            options:
              - { label: Vigente, value: vigente }
              - { label: Encerrado, value: encerrado }
              - { label: Rescindido, value: rescindido }
          - name: parcelas
            label: Parcelas liberadas
            label_singular: Parcela
            widget: list
            required: false
            summary: "{{data}} · R$ {{valor}}"
            fields:
              - { name: data, label: Data da liberação, widget: datetime, type: date, format: YYYY-MM-DD }
              - { name: valor, label: Valor (R$), widget: number, value_type: float, min: 0 }
          - name: prestacao_contas
            label: Prestação de contas
            widget: object
            required: false
            fields:
              - { name: data_prevista, label: Data prevista, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - { name: data_apresentacao, label: Data de apresentação, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - name: resultado
                label: Situação
                widget: select
                default: a_apresentar
                options:
                  - { label: A apresentar, value: a_apresentar }
                  - { label: Em análise, value: em_analise }
                  - { label: Aprovada, value: aprovada }
                  - { label: Aprovada com ressalvas, value: aprovada_com_ressalvas }
                  - { label: Reprovada, value: reprovada }
      - name: publicacao
        label: Publicação
        widget: select
        default: integral
        hint: >-
          "Não publicado" vale só para contrato comercial privado com cláusula de confidencialidade (fonte do
          recurso: patrocínio ou parceria privada). Instrumento com o poder público é sempre publicado.
        options:
          - { label: Integral, value: integral }
          - { label: "Parcial: cópia com tarja além dos dados pessoais", value: parcial }
          - { label: "Não publicado: contrato privado com cláusula de confidencialidade", value: nao_publicado }
      - name: publicacao_motivo
        label: Motivo da publicação parcial ou da confidencialidade
        widget: text
        required: false
        hint: Na publicação parcial, o que mais foi tarjado e por quê. No contrato não publicado, a cláusula de confidencialidade.
        pattern: ['^[\s\S]{0,400}$', 'Use até 400 caracteres.']
      # Select de opção única, sem padrão: um campo sim/não aceitaria "não" e salvaria sem aviso.
      - name: dados_pessoais_tarjados
        label: Confirmação de tarja
        widget: select
        hint: Obrigatória. Vale para o PDF, a planilha e o resumo.
        options:
          - { label: "Confirmo que CPF, RG, endereço e dados de menores foram tarjados", value: true }
      - name: excecao_cpf
        label: Exceção da verificação de CPF (revisada)
        widget: object
        required: false
        hint: >-
          Só quando a verificação do site apontar um número que não é CPF de ninguém. Copie cada trecho apontado
          e explique por que não é dado pessoal.
        fields:
          - name: trechos
            label: Trechos revisados
            label_singular: Trecho
            widget: list
            min: 1
            field:
              name: trecho
              label: Trecho
              widget: string
              pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
          - name: motivo
            label: Por que não é dado pessoal
            widget: text
            pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - { name: data, label: Data da revisão, widget: datetime, type: date, format: YYYY-MM-DD }

  # Preview Workflow, como os documentos.
  - name: diretoria
    label: Diretoria e Conselho Fiscal
    label_singular: Membro
    description: >-
      Nome, cargo e mandato, como pede a lei. Nunca informe CPF, RG nem endereço. Cada pessoa aparece na página
      Diretoria e no órgão dela, no organograma. Salvar cria um rascunho com prévia; a mudança só vai ao site
      com Publicar.
    icon: groups
    folder: src/content/diretoria
    preview_path: "/diretoria/"
    extension: yaml
    format: yaml
    publish_mode: preview
    slug:
      template: "{{nome}}"
      editable: false
    identifier_field: nome
    summary: "{{cargo}} · {{nome}}"
    sortable_fields: [ordem, nome]
    fields:
      - name: nome
        label: Nome
        widget: string
        pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
      - name: cargo
        label: Cargo
        widget: string
        hint: Como Presidente, Tesoureiro ou Conselheiro titular.
        pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
      - name: orgao
        label: Órgão
        widget: relation
        collection: orgaos
        value_field: "{{slug}}"
        display_fields: [nome]
        search_fields: [nome]
        hint: >-
          O órgão do organograma. Quem tem dois papéis, como na Diretoria e na Ouvidoria, tem uma entrada para
          cada um.
      - name: mandato
        label: Mandato
        widget: object
        required: false
        fields:
          - { name: inicio, label: Início, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
          - { name: fim, label: Fim, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
      - { name: ordem, label: Ordem, widget: number, value_type: int, required: false }
      - name: atualizado_em
        label: Atualizado em
        widget: datetime
        type: date
        format: YYYY-MM-DD
        auto_now: true
        required: false
        hint: Preenchida sozinha a cada salvamento. É a data de atualização que o site mostra.

  # Preview Workflow, como a Diretoria. As pessoas de cada órgão vêm da coleção "diretoria".
  - name: orgaos
    label: Organograma
    label_singular: Órgão
    description: >-
      Os órgãos da ARCA, o que cada um faz e a quem responde. As pessoas de cada órgão vêm de "Diretoria e
      Conselho Fiscal". Salvar cria um rascunho com prévia; a mudança só vai ao site com Publicar.
    icon: account_tree
    folder: src/content/orgaos
    preview_path: "/organograma/"
    extension: yaml
    format: yaml
    publish_mode: preview
    slug:
      template: "{{nome}}"
      editable: false
    identifier_field: nome
    summary: "{{nome}}"
    sortable_fields: [ordem, nome]
    fields:
      - name: nome
        label: Nome do órgão
        widget: string
        pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
      - name: descricao
        label: Descrição curta
        widget: string
        required: false
        hint: Aparece embaixo do nome, no desenho do organograma, como "Todos os associados".
        pattern: ['^.{0,80}$', 'Use até 80 caracteres.']
      - name: subordinado_a
        label: Subordinado a
        widget: relation
        collection: orgaos
        value_field: "{{slug}}"
        display_fields: [nome]
        search_fields: [nome]
        required: false
        hint: O órgão a que este responde. Deixe vazio só no órgão do topo, como a Assembleia Geral.
      - name: competencias
        label: Competências
        label_singular: Competência
        widget: list
        min: 1
        max: 15
        hint: O que o órgão faz, como está no estatuto. Uma competência em cada item.
        field:
          name: competencia
          label: Competência
          widget: text
          pattern: ['^[\s\S]{0,240}$', 'Use até 240 caracteres.']
      - name: base_estatuto
        label: Base no estatuto
        widget: string
        required: false
        hint: De onde vêm as competências, como "Estatuto, arts. 13 a 16".
        pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
      - name: ordem
        label: Ordem
        widget: number
        value_type: int
        required: false
        hint: Ordem entre os órgãos que respondem ao mesmo órgão.
      - name: atualizado_em
        label: Atualizado em
        widget: datetime
        type: date
        format: YYYY-MM-DD
        auto_now: true
        required: false
        hint: Preenchida sozinha a cada salvamento. É a data de atualização que o site mostra.

  - name: faq
    label: Perguntas frequentes
    label_singular: Pergunta
    icon: quiz
    folder: src/content/faq
    preview_path: "/transparencia/perguntas-frequentes/"
    extension: yaml
    format: yaml
    slug:
      template: "{{pergunta}}"
      editable: false
    identifier_field: pergunta
    summary: "{{pergunta}}"
    sortable_fields: [grupo, ordem]
    fields:
      - name: pergunta
        label: Pergunta
        widget: string
        pattern: ['^.{0,200}$', 'Use até 200 caracteres.']
      - name: resposta
        label: Resposta
        widget: text
        pattern: ['^[\s\S]{0,2000}$', 'Use até 2.000 caracteres.']
      - name: grupo
        label: Grupo
        widget: select
        default: geral
        options:
          - { label: Geral, value: geral }
          - { label: Transparência e recursos, value: transparencia }
          - { label: Doações e patrocínio, value: doacoes }
          - { label: Ouvidoria e denúncias, value: ouvidoria }
          - { label: Atletas, value: atletas }
      - { name: ordem, label: Ordem, widget: number, value_type: int, required: false }

  - name: divisor-configuracoes
    divider: true

  - name: configuracoes
    label: Configurações
    label_singular: Configuração
    icon: settings
    files:
      - name: site
        label: Dados da associação
        icon: badge
        file: src/content/configuracoes/site.yaml
        preview_path: "/"
        fields:
          - name: razao_social
            label: Razão social
            widget: string
          - name: nome_curto
            label: Nome curto
            widget: string
            hint: Aparece grande no cabeçalho e no rodapé, ao lado da logo.
          - name: descricao_marca
            label: Descrição ao lado do nome
            widget: string
            required: false
            hint: Linha curta embaixo do nome, como "Raia 4 · Natação paralímpica · Ibirama, SC".
            pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
          - name: cnpj
            label: CNPJ
            widget: string
            required: false
            hint: "Com ou sem pontuação, como no cartão CNPJ. Confira os números: um dígito errado impede a publicação do site."
            pattern:
              - '^(?:[.\-/ ]*\d){14}[.\-/ ]*$'
              - O CNPJ precisa ter 14 dígitos.
          - name: slogan
            label: Slogan
            widget: string
            required: false
          - name: apresentacao
            label: Apresentação
            widget: text
            required: false
            hint: Uma ou duas frases sobre a ARCA. Aparece nos buscadores.
          - name: endereco
            label: Endereço
            widget: text
            required: false
          - name: localidade
            label: Cidade e estado
            widget: string
            required: false
            hint: Aparece no rodapé, como "Ibirama, Santa Catarina".
            pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
          - name: horarios
            label: Horários de atendimento
            widget: text
            required: false
          - name: telefone
            label: Telefone
            widget: string
            required: false
          - name: whatsapp
            label: WhatsApp
            widget: string
            required: false
          - name: emails
            label: E-mails
            widget: object
            required: false
            fields:
              - { name: contato, label: Contato, widget: string, type: email, required: false }
              - { name: ouvidoria, label: Ouvidoria, widget: string, type: email, required: false }
              - { name: patrocinio, label: Patrocínio, widget: string, type: email, required: false }
          - name: redes
            label: Redes sociais
            label_singular: Rede social
            widget: list
            required: false
            summary: "{{nome}}"
            fields:
              - { name: nome, label: Nome, widget: string }
              - name: url
                label: "Endereço (URL)"
                widget: string
                type: url
                pattern: ['^https://', 'Use o endereço completo, começando com https://']
          - name: atualizado_em
            label: Atualizado em
            widget: datetime
            type: date
            format: YYYY-MM-DD
            auto_now: true
            required: false
            hint: >-
              Preenchida sozinha a cada salvamento. Endereço, telefones e horários são o bloco Institucional do
              Portal da Transparência, e esta é a data dele.
      # A chave Pix e o recebedor não ficam aqui: são fixos em src/config/recebedor.ts, fora do painel.
      - name: doacao
        label: Doação pelo Pix (valores e texto)
        icon: volunteer_activism
        file: src/content/configuracoes/doacao.yaml
        preview_path: "/doe/"
        fields:
          - name: valores_sugeridos
            label: Valores sugeridos (R$)
            label_singular: Valor
            widget: list
            required: false
            max: 6
            hint: >-
              Cada valor vira um QR Code Pix. A chave Pix e o nome do recebedor não ficam no painel: são fixos no
              código do site, por segurança.
            field:
              name: valor
              label: Valor (R$)
              widget: number
              value_type: float
              min: 1
          - name: texto
            label: Texto da página
            widget: text
            required: false
            pattern: ['^[\s\S]{0,1000}$', 'Use até 1.000 caracteres.']
          - name: link_externo
            label: Link externo (opcional)
            widget: object
            required: false
            hint: Para uma campanha numa plataforma de doação, por exemplo.
            fields:
              - name: texto
                label: Texto do link
                widget: string
                pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
              - name: url
                label: "Endereço (URL)"
                widget: string
                type: url
                pattern: ['^https://', 'Use o endereço completo, começando com https://']
      - name: transparencia
        label: Portal da Transparência
        icon: visibility
        file: src/content/configuracoes/transparencia.yaml
        preview_path: "/transparencia/"
        fields:
          - name: introducao
            label: Apresentação do portal
            widget: text
            required: false
            pattern: ['^[\s\S]{0,400}$', 'Use até 400 caracteres.']
          - name: revisado_sem_mudanca
            label: Revisado sem mudança em
            widget: object
            required: false
            hint: >-
              Data de uma revisão que não achou nada para mudar. A data de cada bloco é a mais recente entre os
              documentos publicados, o que o bloco mostra (Diretoria, calendário, declarações) e esta revisão.
            fields:
              - { name: institucional, label: Institucional, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - { name: governanca, label: Governança, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - { name: assembleias_e_eleicoes, label: Assembleias e eleições, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - { name: prestacao_de_contas, label: Prestação de contas, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - { name: recursos_publicos_e_parcerias, label: Recursos públicos e parcerias, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
              - { name: protecao_e_privacidade, label: Proteção e privacidade, widget: datetime, type: date, format: YYYY-MM-DD, required: false }
          - name: remuneracao
            label: Remuneração dos dirigentes
            widget: object
            required: false
            hint: A declaração assinada vai em Documentos, na categoria "Remuneração dos dirigentes".
            fields:
              - name: declaracao
                label: Declaração
                widget: text
                pattern: ['^[\s\S]{0,1000}$', 'Use até 1.000 caracteres.']
              - { name: data, label: Data da declaração, widget: datetime, type: date, format: YYYY-MM-DD }
          - name: acesso_associados
            label: Como os associados acessam os documentos
            widget: text
            required: false
            pattern: ['^[\s\S]{0,1000}$', 'Use até 1.000 caracteres.']
          - name: conflito_interesses
            label: Declaração de conflito de interesses (opcional)
            widget: text
            required: false
            pattern: ['^[\s\S]{0,2000}$', 'Use até 2.000 caracteres.']
          - name: direitos_imagem
            label: Direitos de imagem e propriedade intelectual
            widget: object
            required: false
            hint: >-
              Só se a ARCA não tem nenhum contrato de direito de imagem ou de propriedade intelectual. Os contratos
              vão em Documentos, na categoria "Contratos de direito de imagem e de propriedade intelectual".
            fields:
              - name: declaracao
                label: Declaração
                widget: text
                pattern: ['^[\s\S]{0,1000}$', 'Use até 1.000 caracteres.']
              - { name: data, label: Data da declaração, widget: datetime, type: date, format: YYYY-MM-DD }
          - name: atualizado_em
            label: Atualizado em
            widget: datetime
            type: date
            format: YYYY-MM-DD
            auto_now: true
            required: false
            hint: Preenchida sozinha a cada salvamento. Conta para a data do bloco Governança.
      # O calendário tem arquivo próprio para que a data dele seja a do bloco Assembleias e eleições.
      - name: assembleias
        label: Calendário de assembleias
        icon: event
        file: src/content/configuracoes/assembleias.yaml
        preview_path: "/transparencia/assembleias-e-eleicoes/"
        fields:
          - name: calendario
            label: Assembleias
            label_singular: Assembleia
            widget: list
            required: false
            summary: "{{data}} · {{tipo}}"
            hint: >-
              Publique antes do começo de cada ano as assembleias previstas. Depois de cada uma, publique a ata em
              Documentos, categoria "Atas de assembleias", com a data da assembleia em "Data do documento".
            fields:
              - { name: data, label: Data, widget: datetime, type: date, format: YYYY-MM-DD }
              - name: tipo
                label: Tipo
                widget: select
                options:
                  - { label: Ordinária, value: ordinaria }
                  - { label: Extraordinária, value: extraordinaria }
              - name: pauta
                label: Pauta
                widget: text
                required: false
                pattern: ['^[\s\S]{0,300}$', 'Use até 300 caracteres.']
          - name: atualizado_em
            label: Atualizado em
            widget: datetime
            type: date
            format: YYYY-MM-DD
            auto_now: true
            required: false
            hint: Preenchida sozinha a cada salvamento. É a data do calendário no site.

  # A página inicial fica numa coleção própria porque só ela usa o Preview Workflow (rascunho em pull
  # request com prévia). Ele só vale com o GitHub; no modo de repositório local, "Salvar" grava direto.
  - name: pagina_inicial
    label: Página inicial
    label_singular: Página inicial
    icon: home
    publish_mode: preview
    files:
      - name: home
        label: Banners e destaques
        icon: home
        file: src/content/configuracoes/home.yaml
        preview_path: "/"
        # Imagens dos banners na mesma pasta do home.yaml, gravadas como caminho relativo.
        media_folder: ""
        public_folder: ""
        fields:
          - name: banners
            label: Banners
            label_singular: Banner
            widget: list
            required: false
            summary: "{{titulo}} · {{texto_alternativo}}"
            thumbnail: imagem
            collapsed: auto
            hint: >-
              A página inicial mostra o primeiro banner ativo, pela ordem. Os outros ficam guardados para
              trocar depois: desative um e ative outro.
            fields:
              - name: imagem
                label: Imagem
                widget: image
                choose_url: false
                hint: >-
                  Foto com pelo menos 1200 px de largura. Ela aparece recortada no formato 4:3, ao lado do
                  título; use o enquadramento para manter o principal à vista.
              - name: texto_alternativo
                label: Descrição da imagem
                widget: string
                hint: Obrigatória. Descreva o que a foto mostra para quem não enxerga.
              - name: enquadramento
                label: Enquadramento
                widget: select
                default: centro
                options:
                  - { label: Centro, value: centro }
                  - { label: Topo, value: topo }
                  - { label: Base, value: base }
              - name: pessoas_identificaveis
                label: Pessoas identificáveis na foto
                widget: select
                hint: Sem esta declaração, o banner não aparece no site.
                options:
                  - { label: Nenhuma, value: nenhuma }
                  - { label: "Foto coletiva esportiva, com 3 ou mais atletas", value: coletiva }
                  - { label: "Pessoa com autorização de imagem arquivada", value: autorizada }
                  - { label: "Inclui menor, com autorização do responsável", value: menor_autorizado }
              - name: origem
                label: Origem da foto
                widget: select
                hint: Sem esta declaração, o banner não aparece no site.
                options:
                  - { label: "Própria da ARCA", value: propria }
                  - { label: "Cedida, com autorização de quem cedeu", value: cedida }
                  - { label: "Imprensa, com licença escrita do veículo ou do fotógrafo", value: imprensa }
              - name: legenda
                label: Legenda da foto
                widget: string
                required: false
                hint: Texto curto sobre a parte de baixo da foto.
                pattern: ['^.{0,120}$', 'Use até 120 caracteres.']
              - name: sobretitulo
                label: Sobretítulo
                widget: string
                required: false
                hint: Linha pequena acima do título, como "Natação paralímpica · Ibirama, SC".
                pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
              - name: titulo
                label: Título
                widget: string
                required: false
                pattern: ['^.{0,70}$', 'Use até 70 caracteres.']
              - name: subtitulo
                label: Subtítulo
                widget: string
                required: false
                pattern: ['^.{0,140}$', 'Use até 140 caracteres.']
              - name: botao_texto
                label: Texto do botão
                widget: string
                required: false
                pattern: ['^.{0,40}$', 'Use até 40 caracteres.']
              - name: botao_link
                label: Link do botão
                widget: string
                required: false
                hint: "Caminho do site, como /doe/, ou endereço completo começando com https://"
                pattern: ['^(/(?!/)|https://)', 'Use um caminho do site começando com /, como /doe/, ou um endereço completo começando com https://']
              - name: botao_secundario_texto
                label: Texto do segundo botão
                widget: string
                required: false
                pattern: ['^.{0,40}$', 'Use até 40 caracteres.']
              - name: botao_secundario_link
                label: Link do segundo botão
                widget: string
                required: false
                hint: "Caminho do site, como /doe/, ou endereço completo começando com https://"
                pattern: ['^(/(?!/)|https://)', 'Use um caminho do site começando com /, como /doe/, ou um endereço completo começando com https://']
              - name: ativo
                label: Ativo (aparece no site)
                widget: boolean
                default: true
              - name: ordem
                label: Ordem
                widget: number
                value_type: int
                min: 0
                required: false
          - name: destaques
            label: Destaques
            label_singular: Destaque
            widget: list
            required: false
            max: 3
            summary: "{{titulo}}"
            hint: Até 3 destaques aparecem na página inicial.
            fields:
              - name: titulo
                label: Título
                widget: string
                pattern: ['^.{0,60}$', 'Use até 60 caracteres.']
              - name: texto
                label: Texto
                widget: text
                required: false
                pattern: ['^[\s\S]{0,200}$', 'Use até 200 caracteres.']
              - name: link
                label: Link
                widget: string
                required: false
                hint: "Caminho do site, como /transparencia/, ou endereço completo começando com https://"
                pattern: ['^(/(?!/)|https://)', 'Use um caminho do site começando com /, como /transparencia/, ou um endereço completo começando com https://']
