/* ====================================================================
   CAMPOS DE FORMULÁRIO — correcção de altura
   ====================================================================
   O problema, e porque aparecia em todo o lado:

   Três folhas diferentes descrevem o mesmo campo e nenhuma sabe da outra:

     bootstrap.min.css   .form-control { line-height: 1.5; padding: .375rem .75rem }
     style.css (tema)    .form-control { height: 35px; line-height: 2 }
     custom.css          .form-control, .form-select { padding: 9px 14px; font-size: 13px }

   Somando o que vale no fim: 13px x 2 = 26px de linha, mais 9+9 de padding,
   mais 2 de bordas = 46px de conteúdo dentro de uma caixa de 35px FIXOS.
   Faltam 11px, e como a altura é fixa o texto é cortado em cima e em baixo
   — foi isso que se viu no "Física" do selector de tipo de pessoa, e é o
   mesmo em cada input do sistema.

   A correcção não é aumentar o 35px para outro número fixo: qualquer valor
   fixo volta a partir no dia em que alguém mude o tamanho da letra ou o
   padding. Aqui a altura passa a ser um MÍNIMO e a caixa cresce com o que
   tem dentro, com a entrelinha em 1,4 (legível, e sem exigir altura a mais).

   Esta folha carrega depois de todas as outras, de propósito: é o único
   sítio onde a regra final dos campos está escrita.
   ==================================================================== */

/* ── Regra base ──────────────────────────────────────────────────── */
.form-control,
.form-select,
select.form-control,
textarea.form-control,
.input-group > .form-control,
.input-group > .form-select {
    height: auto;
    min-height: 42px;
    line-height: 1.4;
    padding: 9px 14px;
}

/* Variante pequena: continua menor, mas com espaço para a sua linha. */
.form-control-sm,
.form-select-sm,
.input-group-sm > .form-control,
.input-group-sm > .form-select {
    min-height: 38px;
    line-height: 1.4;
    padding: 7px 12px;
    font-size: 13px;
}

.form-control-lg,
.form-select-lg {
    min-height: 50px;
    line-height: 1.4;
    padding: 12px 16px;
}

/* O textarea cresce em linhas, não em altura mínima de uma linha. */
textarea.form-control,
textarea.form-control-sm {
    min-height: 88px;
    height: auto;
}

/* O selector nativo precisa de espaço à direita para a seta não ficar
   por cima da última letra da opção escolhida. */
.form-select,
select.form-control {
    padding-right: 34px;
    background-position: right 12px center;
}

/* Em ecrã de toque, 44px é o mínimo utilizável — e é também o que evita
   que o teclado do telemóvel tape um campo demasiado rente. */
@media (pointer: coarse) {
    .form-control,
    .form-select,
    .form-control-sm,
    .form-select-sm { min-height: 44px; }
}

/* ── Coerência à volta do campo ──────────────────────────────────── */
/* Num input-group as partes formam UMA linha visual, por isso a altura
   tem de ser a mesma para todas. Dar a cada parte o seu próprio mínimo
   não chega: um campo `form-control-sm` ao lado de um botão normal ficava
   38px contra 44px, e via-se o degrau entre a caixa e a lupa. Aqui a
   altura é do grupo e as partes esticam para a acompanhar.              */
.input-group { align-items: stretch; }
.input-group > .form-control,
.input-group > .form-select,
.input-group > .input-group-text,
.input-group > .btn {
    min-height: 42px;
    height: auto;
}
.input-group > .input-group-text,
.input-group > .btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
/* Um grupo pequeno é pequeno por inteiro — nunca só metade dele. */
.input-group-sm > .form-control,
.input-group-sm > .form-select,
.input-group-sm > .input-group-text,
.input-group-sm > .btn { min-height: 38px; }
@media (pointer: coarse) {
    .input-group > .form-control,
    .input-group > .form-select,
    .input-group > .input-group-text,
    .input-group > .btn,
    .input-group-sm > .form-control,
    .input-group-sm > .form-select,
    .input-group-sm > .input-group-text,
    .input-group-sm > .btn { min-height: 44px; }
}

/* A caixa de escolha e o rádio ficam alinhados com a primeira linha do
   seu rótulo, em vez de flutuarem a meio de rótulos de duas linhas. */
.form-check-input { margin-top: .2em; }
.form-check-label { line-height: 1.4; }

/* ── Botões modernos (padrão único em todo o sistema) ─────────────────
   Tamanho contido (40px normal / 34px pequeno / 48px grande), cantos
   arredondados, peso 600 e estados de foco/hover/disabled consistentes.
   A altura é um MÍNIMO: botões com texto longo crescem em vez de cortar.
   As cores continuam a vir de cada tema (primário, secundário, etc.). */
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-height: 40px;
    padding: 8px 16px;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.3;
    letter-spacing: .01em;
    border-radius: 10px;
    white-space: normal;
    vertical-align: middle;
    box-shadow: none;
    transition: background-color .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease, transform .05s ease;
}
.btn:hover { box-shadow: 0 4px 12px -6px rgba(15, 23, 42, .35); }
.btn:active { transform: translateY(1px); box-shadow: none; }
.btn:focus-visible, .btn.focus-visible { outline: 3px solid rgba(29,78,216, .35); outline-offset: 2px; }
.btn:disabled, .btn.disabled { opacity: .6; box-shadow: none; transform: none; cursor: not-allowed; }
.btn > i, .btn > .fa, .btn > .bi, .btn > svg { font-size: 1em; line-height: 1; }
input.btn { display: inline-block; }
.btn-block, .btn.w-100 { display: flex; width: 100%; }
.btn-sm, .btn-group-sm > .btn { min-height: 34px; padding: 6px 12px; font-size: 13px; border-radius: 8px; }
.btn-xs, .btn-group-xs > .btn { min-height: 28px; padding: 3px 9px; font-size: 12px; border-radius: 7px; gap: 4px; }
.btn-lg, .btn-group-lg > .btn { min-height: 48px; padding: 11px 22px; font-size: 15.5px; border-radius: 12px; }
/* Botões só com ícone ficam quadrados, sem esticar. */
.btn:has(> i:only-child):not(.btn-block):not(.w-100) { padding-left: 10px; padding-right: 10px; min-width: 40px; }
.btn-sm:has(> i:only-child) { min-width: 34px; padding-left: 8px; padding-right: 8px; }
.btn-xs:has(> i:only-child) { min-width: 28px; padding-left: 6px; padding-right: 6px; }
/* Em ecrãs de toque o alvo mínimo sobe ligeiramente, sem exagerar. */
@media (pointer: coarse) {
    .btn { min-height: 42px; }
    .btn-sm { min-height: 38px; }
}

/* Select2, usado em várias páginas do painel, desenha o seu próprio campo
   e ficava mais baixo do que os campos nativos ao lado. */
.select2-container--default .select2-selection--single {
    min-height: 42px;
    height: auto;
    display: flex;
    align-items: center;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
    line-height: 1.4;
    padding-left: 14px;
}
.select2-container--default .select2-selection--single .select2-selection__arrow { height: 100%; }

/* ── Rede de segurança ───────────────────────────────────────────── */
/* Rótulos e mensagens de validação não se recortam: são precisamente o
   texto que explica o campo, e uma mensagem de erro cortada a meio é pior
   do que nenhuma. */
label,
.form-label,
.invalid-feedback,
.valid-feedback,
.form-text {
    overflow: visible;
    line-height: 1.4;
}

/* ── Ícones que o Font Awesome instalado não tem ──────────────────────
   O tema traz o Font Awesome 4.6.3. Três nomes usados no código só
   existem a partir do 4.7/FA5 — `fa-box`, `fa-tools` e `fa-file-pdf` —
   e onde eles aparecem o browser não desenha nada: o rótulo fica com um
   espaço vazio à frente, que é o que se vê nos tipos de oferta (Produto
   Físico, Serviço, Livro Digital) tanto no painel como no site.

   Corrigir só o PHP não chegava: estes nomes também estão gravados na
   coluna `icone` da tabela `tipos_oferta`, e trocá-los aí seria mexer em
   dados reais sem necessidade. Aqui o nome antigo passa a apontar para o
   glifo equivalente que o 4.6.3 tem — cubo, chave-inglesa e folha PDF —
   sem tocar na base de dados nem no código que a lê.                  */
.fa-box:before      { content: "\f1b2"; }   /* = fa-cube        */
.fa-tools:before    { content: "\f0ad"; }   /* = fa-wrench      */
.fa-file-pdf:before { content: "\f1c1"; }   /* = fa-file-pdf-o  */
