/* quadroforce:coletor — assinatura de procedência, NÃO REMOVER: o service
   worker exige esta marca antes de gravar o arquivo no cache. Ver sw.js. */
/* Coletor de referência.
 *
 * ⚠️ OS PAPÉIS DE COR E AS FONTES VÊM DE `/base.css` — este arquivo declarava
 * os seus, e por isso o coletor parecia outro produto ao lado do painel:
 * primário #2D5A27 contra #3C6934, superfície #FCFDF6 contra #F6FBF4, fonte do
 * sistema contra Roboto. E o #2D5A27 nem era papel: é a cor de ORIGEM de onde
 * a paleta tonal foi gerada. O handoff é explícito — "não inventar cores: usar
 * os papéis --md-*".
 *
 * Aqui fica só o que é do coletor: a régua estreita e as telas do ato de
 * registrar. */
:root {
  /* A régua do coletor herda a das portas — uma medida só no produto. */
  --coletor-largura: var(--porta-largura);
  --coletor-respiro: var(--porta-respiro);
}

* { box-sizing: border-box; }

body {
  margin: 0;
  padding: 0;
  min-height: 100vh;
  display: flex; flex-direction: column;
  background: var(--md-surface);
  color: var(--md-on-surface);
  font-family: var(--fonte);
  line-height: 1.5;
}

/* O miolo é a AÇÃO, e ação de coletor cabe numa coluna estreita: quem bate
   ponto olha uma coisa só. O `flex: 1` centra essa coluna na altura sobrando
   entre a barra e o rodapé, em vez de deixá-la pendurada no topo. */
#app {
  flex: 1;
  width: 100%; max-width: var(--coletor-largura); margin: 0 auto;
  padding: 1.5rem var(--coletor-respiro) 2rem;
}

/* ═══ O PORTÃO — a tela de entrada, irmã da entrada do painel ═══════════════
   ⚠️⚠️ ANTES DISTO ELA ERA UM TÍTULO PEQUENO, DOIS CAMPOS E UM MAR DE BRANCO.
   A entrada do painel tinha metade verde com marca, norma e o desvio para a
   outra porta; a do coletor, nada — duas telas de login do mesmo produto,
   feitas como se fossem produtos diferentes. Era a reclamação de "parecem 3
   aplicativos" na sua forma mais visível, porque a tela de entrada é a
   primeira coisa que qualquer pessoa vê.

   ⚠️ A RÉGUA DE 30rem CAI SÓ AQUI. O miolo logado é estreito de propósito —
   quem bate ponto olha uma coisa só —, e `:has()` limita o alargamento ao
   tempo em que esta tela está à mostra. Sem essa condição, a lista de
   marcações herdaria a largura e o coletor deixaria de ser coletor. */
#app:has(> #tela-entrada:not([hidden])) {
  max-width: 64rem;
  padding: 0;
  /* ⚠️ O PORÃO OCUPA A ALTURA, em vez de ficar pendurado no topo com 350px
     de vazio embaixo — medido em 1440×900. `safe` é obrigatório: numa janela
     baixa (ou com o teclado do celular aberto), `center` sem ele transborda
     para CIMA e o campo de login fica inalcançável. */
  display: grid;
  align-content: safe center;
}

/* ⚠️ A BARRA ACOMPANHA A COLUNA DA TELA ATIVA. `/base.css` dá à marca a
   régua do coletor (30rem); com a entrada alargada para 64rem, a marca ficava
   centralizada no meio de uma tela larga enquanto o "QuadroForce" grande
   começava a 208px à esquerda — e desalinhamento entre a moldura e o conteúdo
   é exatamente o que faz duas telas parecerem montadas por gente diferente.
   Mesmo ajuste que a porta da frente já faz para a régua dela. */
body:has(#tela-entrada:not([hidden])) .qf-barra-dentro {
  max-width: 64rem;
  padding: 0 var(--coletor-respiro);
}

.portao {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 1.5rem;
  align-items: stretch;
}

.portao-identidade {
  display: flex; flex-direction: column; gap: 1.75rem;
  justify-content: space-between;
  padding: 1.5rem var(--coletor-respiro);
}

.portao-marca h1 { font-size: 2rem; letter-spacing: -0.02em; }
/* A assinatura perde a margem de 2rem que ela tinha quando era o último
   elemento antes do formulário: aqui há um bloco inteiro depois dela. */
.portao-marca .assinatura { margin: 0.25rem 0 0; }
.portao-conformidade {
  margin: 1.5rem 0 0;
  font-size: 0.9rem; color: var(--md-on-surface-variant);
  text-wrap: pretty;
}
.portao-conformidade strong { font-weight: 500; }

.portao-desvio {
  border: 1.5px solid var(--md-outline-variant);
  border-radius: var(--canto-m, 12px);
  background: var(--md-surface-container);
  padding: 1rem 1.1rem;
}
.portao-desvio-titulo { margin: 0; font-weight: 600; }
.portao-desvio-texto {
  margin: 0.35rem 0 0.75rem;
  font-size: 0.88rem; color: var(--md-on-surface-variant);
}
/* ⚠️ ALVO DE TOQUE DE 48px, como todo o resto do coletor: a regra da casa é
   "para quem está de mãos molhadas na cozinha", e um link de texto solto é o
   tipo de coisa que escapa dela por não parecer um botão. */
.portao-desvio-link {
  display: inline-flex; align-items: center; min-height: 48px;
  color: var(--md-primary); font-weight: 600; text-decoration: underline;
  text-underline-offset: 3px;
}

.portao-formulario { padding: 0 var(--coletor-respiro) 1.5rem; }
.portao-titulo { font-size: 1.75rem; margin: 0.15rem 0 1.25rem; }
.eyebrow {
  margin: 0;
  font-size: 0.72rem; font-weight: 600; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--md-primary);
}

/* ⚠️ NO CELULAR, O FORMULÁRIO VEM PRIMEIRO — mesma decisão do painel. Quem
   abre o coletor no telefone veio ENTRAR; marca e norma são contexto, e
   contexto acima do campo empurra a ação para baixo da dobra. A ordem visual
   muda, a do DOM não: quem navega por teclado ou leitor de tela continua
   recebendo marca, norma e depois o formulário. */
@media (max-width: 47.99rem) {
  .portao-identidade { order: 2; padding-top: 0; }
  .portao-formulario { order: 1; padding-top: 1.5rem; }
  .portao-marca h1 { font-size: 1.75rem; }
  /* A conformidade é longa e no telefone ela compete com o campo de senha.
     Some no estreito, como a marca some na porta do painel — o rodapé de
     `/base.css` continua declarando a norma em todas as telas. */
  .portao-conformidade { display: none; }
}

/* Duas colunas quando há espaço: identidade à esquerda, formulário à direita,
   como o painel. O piso de 48rem é o mesmo que o coletor já usa para decidir
   que a tela deixou de ser um telefone. */
@media (min-width: 48rem) {
  .portao {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 3rem;
    align-items: center;
    padding: 2.5rem 0;
  }
  .portao-identidade {
    border-right: 1px solid var(--md-outline-variant);
    padding-right: 3rem;
  }
  .portao-formulario { padding: 0 var(--coletor-respiro) 0 0; }
}

/* A barra e o rodapé vivem em `/base.css`: são a moldura que o coletor, a
   porta e a entrada do painel compartilham. Duas definições da mesma barra
   divergem na primeira alteração — foi assim que as três telas passaram a
   parecer três produtos. */

h1 { font-size: 1.5rem; margin: 0; }
h2 { font-size: 1.05rem; margin: 2rem 0 0.75rem; }

.assinatura { color: var(--md-outline); font-size: 0.85rem; margin: 0 0 2rem; }
.rotulo { color: var(--md-outline); font-size: 0.8rem; margin: 0; }
.destaque { font-weight: 600; margin: 0; }
/* A casa onde a pessoa está: logo abaixo do nome, no tom secundário — é
   contexto, não identidade. Sem ela, "Trocar de empresa" era um botão sem
   referência. */
.casa { color: var(--md-on-surface-variant); font-size: 0.85rem; margin: 0.15rem 0 0; }

/* ── Histórico do prestador ─────────────────────────────────────────────── */
.historico-abrir { margin-top: 1.25rem; min-height: 48px; }
.periodo { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; margin: 0.5rem 0 1rem; }
.periodo label { margin: 0; font-size: 0.85rem; color: var(--md-on-surface-variant); }
.periodo input { flex: 1 1 8rem; min-width: 0; min-height: 48px; }
/* O botão secundário não existia no coletor — só o primário e o link. "Ver"
   nascia com a aparência crua do navegador ao lado de dois campos estilizados. */
.secundario {
  min-height: 48px; padding: 0.6rem 1.25rem;
  background: var(--md-surface-container-lowest); color: var(--md-primary);
  border: 1.5px solid var(--md-outline-variant); border-radius: 6.25rem;
  font-size: 0.95rem; font-weight: 500; cursor: pointer;
}
.secundario:hover { border-color: var(--md-primary); }
.secundario:focus-visible { outline: 3px solid var(--md-primary); outline-offset: 2px; }
/* A tabela rola DENTRO do próprio contentor num celular: seis colunas não
   cabem em 412px, e a página inteira andar de lado é o outro defeito. */
.tabela-rolagem { overflow-x: auto; }
.tabela { width: 100%; border-collapse: collapse; font-size: 0.88rem; }
.tabela th {
  text-align: left; font-weight: 500; font-size: 0.72rem; letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--md-on-surface-variant);
  padding: 0.55rem 0.6rem; border-bottom: 1px solid var(--md-outline-variant); white-space: nowrap;
}
.tabela td { padding: 0.6rem 0.6rem; border-bottom: 1px solid var(--md-outline-variant); white-space: nowrap; }
.tabela td.mono { font-family: var(--fonte-mono); font-variant-numeric: tabular-nums; }
.recibo-desfeito .destaque { text-decoration: line-through; opacity: 0.7; }

.cabecalho { display: flex; justify-content: space-between; align-items: flex-start; }

/* Todo número conferível contra outro documento vai em monoespaçada. */
.relogio-caixa { text-align: center; margin: 2rem 0; }
.relogio {
  font-family: var(--fonte-mono);
  font-size: 3rem; font-variant-numeric: tabular-nums;
  margin: 0; letter-spacing: 0.02em;
}

label { display: block; margin: 1rem 0 0.25rem; font-size: 0.85rem; color: var(--md-outline); }
input {
  width: 100%; padding: 0.85rem; font-size: 1rem;
  border: 1px solid var(--md-outline); border-radius: 0.5rem;
  background: var(--md-surface); color: var(--md-on-surface);
}

button { font: inherit; cursor: pointer; }
.primario {
  width: 100%; margin-top: 1.5rem; padding: 1rem;
  background: var(--md-primary); color: var(--md-on-primary);
  border: none; border-radius: 6.25rem; font-size: 1rem; font-weight: 500;
}
/* Botão de bater ponto: alvo grande, para quem está de mãos molhadas na cozinha. */
.grande { padding: 1.5rem; font-size: 1.15rem; }
/* ⚠️ ALVO DE TOQUE DE 48px, e não só um texto sublinhado.
   Medido a 412x915 (Pixel 7, o alvo declarado): "Trocar de empresa" saía com
   30px de altura e "Sair" com 23x30px — o botão que desconecta a pessoa era o
   menor alvo da tela. O próprio CSS deste coletor exige 48px "para quem está
   de mãos molhadas na cozinha"; os links do cabeçalho estavam fora da regra.
   `inline-flex` + `align-items` mantêm o texto onde estava: cresce a área de
   toque, não o desenho. */
.link {
  background: none; border: none; color: var(--md-primary);
  padding: 0.25rem 0.5rem; font-size: 0.9rem; text-decoration: underline;
  min-height: 48px; display: inline-flex; align-items: center;
}

.erro { color: var(--md-error); font-size: 0.9rem; }
.aviso {
  color: var(--md-warning); font-size: 0.9rem;
  background: var(--md-surface-variant); padding: 0.75rem; border-radius: 0.5rem;
}

/* ⚠️ O AVISO DE QUE ALGUÉM REDEFINIU A SENHA DESTA PESSOA. Peso visual de
   alerta, não de rodapé: é a única superfície em que ela descobre que a
   credencial dela passou pela mão de outra pessoa, e ela precisa ler isso
   antes de escolher a senha nova. Não é a pílula `.alerta` do painel — lá é um
   rótulo de uma palavra; aqui são três linhas que têm de ser lidas. */
.alerta {
  color: var(--md-on-surface); font-size: 0.9rem; line-height: 1.45;
  background: var(--md-warning-container);
  border-left: 4px solid var(--md-warning);
  padding: 0.85rem; border-radius: 0.5rem; margin-bottom: 1rem;
}

.explicacao {
  color: var(--md-on-surface); font-size: 0.9rem; line-height: 1.45;
  margin-bottom: 1.25rem;
}

/* ⚠️⚠️ O ATRIBUTO `hidden` VALE MAIS QUE QUALQUER `display` DAQUI.
   Sem esta regra, toda classe que declara `display` derruba o `display:none`
   nativo do atributo — e o elemento continua ocupando a tela mesmo "escondido".
   Medido em produção a 412px: `#lembrete-senha`, com `hidden` no HTML, ocupava
   uma faixa de 380x27px com a cor de aviso, aparecendo como um risco amarelo
   solto no alto da tela de quem presta serviço.
   O painel já carrega a regra equivalente; o coletor não tinha nenhuma. */
[hidden] { display: none !important; }

/* A faixa de lembrete vive ACIMA das telas, e por isso é sua própria âncora
   visual: quem adiou a troca continua vendo isto enquanto trabalha. Alvo de
   toque cheio (é o caminho de volta) e largura total, para não ser confundida
   com um botão de ação da tela em que estiver. */
.lembrete {
  display: block; width: 100%; text-align: left;
  margin: 0 0 1rem; padding: 0.85rem;
  background: var(--md-warning-container); color: var(--md-on-surface);
  border: none; border-left: 4px solid var(--md-warning); border-radius: 0.5rem;
  font-size: 0.9rem; line-height: 1.4;
}

.lista-empresas, .marcacoes { list-style: none; padding: 0; margin: 0; }
.marcacao {
  border-top: 1px solid var(--md-surface-variant);
  padding: 0.85rem 0;
}

/* ⚠️ O NÚMERO QUE O PRESTADOR VEM VER. Ele é pago por sessão e não tem
   holerite: esta é a única superfície em que ele confere quanto tem a receber
   antes de cobrar. Tamanho de destaque, mono como todo número conferível
   contra outro documento. */
.servico-a-receber {
  margin: 1.25rem 0 0.5rem;
  font-family: ui-monospace, "SF Mono", Consolas, monospace;
  font-size: 1.15rem;
  color: var(--md-primary);
}

.recibo {
  margin-top: 1.5rem; padding: 1rem;
  border: 1px solid var(--md-outline); border-radius: 0.5rem;
  font-family: ui-monospace, "SF Mono", Consolas, monospace;
  font-size: 0.78rem; word-break: break-all;
}
.recibo p { margin: 0 0 0.35rem; }

/* ── Pedir correção ─────────────────────────────────────────────────────────
   O trabalhador vê a própria marcação errada (art. 80) e precisa poder
   apontá-la. Sem isto, a fila do gestor nunca tem nada. */
.dialogo {
  width: min(30rem, 92vw); padding: 1.25rem;
  border: none; border-radius: 16px;
  background: var(--md-surface); color: var(--md-on-surface);
}
.dialogo::backdrop { background: rgba(0, 0, 0, 0.45); }
.dialogo h2 { margin-top: 0; }
.acoes-pedido { display: flex; gap: 0.75rem; justify-content: flex-end; margin-top: 1.25rem; }
.acoes-pedido .primario { width: auto; margin-top: 0; padding: 0.7rem 1.5rem; }

/* O pedido nasce ao lado do comprovante: são as duas coisas que se faz com uma
   marcação já gravada — guardar a prova, ou apontar o erro. */
.marcacao .link { margin-right: 0.75rem; }
.pendente {
  display: inline-block; margin-top: 0.35rem; padding: 0.1rem 0.6rem;
  border-radius: 999px; background: var(--md-warning-container, #FFDF9E);
  color: var(--md-warning, #7A5900); font-size: 0.75rem; font-weight: 600;
}
