/* =============================================================================
   AS TELAS DE ACESSO — superficie, campo e profundidade

   Folha separada pelos mesmos dois motivos de `acesso-motion.css`: nao pagar
   bytes fora daqui, e nao colidir com a reescrita dos parciais `_acesso-*` que
   estava em curso em 26/08/2026.

   ESCOPO `pagina-auth`, E NAO `pagina-acesso`: o tratamento de CAMPO vale nas
   cinco telas (entrar, criar conta, recuperar, redefinir, confirmar e-mail).
   Um campo que se comporta de um jeito na porta e de outro no e-mail de
   recuperacao seria a mesma tela contando duas historias. A coreografia de
   entrada, essa sim, e so das duas portas — e por isso mora na outra folha.

   -----------------------------------------------------------------------------
   O QUE JA ESTAVA DECIDIDO E NAO SE MEXE
   -----------------------------------------------------------------------------

   O FOCO CONTINUA NEUTRO. A tentacao obvia era trocar o anel branco pelo
   vermelho da marca — e `style.css` ja registra por que nao: a borda de ERRO
   tambem e vermelha, e com o anel na mesma cor "campo focado" e "campo
   reprovado" ficavam identicos. No /redefinir-senha o campo "Nova senha"
   recem-focado parecia ter falhado na validacao. Nada aqui toca em
   `:focus-visible`.

   A ALTURA CONTINUA 48px e a borda continua `--borda-controle`, que existe por
   medida de contraste (WCAG 1.4.11): com `--borda` o campo media 1,35:1 contra
   o cartao. Esta folha muda o PREENCHIMENTO, e o preenchimento novo so melhora
   aquela conta — nunca piora.
   ============================================================================= */

/* -----------------------------------------------------------------------------
   1. O CAMPO GANHA SUPERFICIE PROPRIA
   -----------------------------------------------------------------------------

   O DEFEITO, MEDIDO: `style.css` escreve `background: var(--campo-fundo,
   var(--fundo))` em tres lugares — e `--campo-fundo` NUNCA FOI DEFINIDO. Os
   tres caem no fallback, e o fallback e a cor da PAGINA.

   No tema escuro isso significava campo `#0D0D14` sobre cartao `#151520`: o
   preenchimento do campo era a mesma tinta do fundo da tela, e a unica coisa
   que dizia "aqui se digita" era uma borda de 1px. Na captura que o dono
   mandou, os dois campos lem como retangulos pretos vazios — porque e o que
   eles sao.

   O token era um gancho esperando valor. Dar o valor resolve os tres lugares
   de uma vez (campo, preenchimento automatico e o <select> de DDI), sem
   sobrescrever seletor nenhum e sem briga de especificidade.

   A DIRECAO E A MESMA NOS DOIS TEMAS — o campo AFUNDA em relacao ao cartao —,
   e e o que ja acontecia no claro (#F1F4F8 sobre #FFFFFF). O que faltava era o
   escuro ter a mesma distancia: `#0D0D14` sobre `#151520` sao 3 pontos de
   luminancia, quase nada. Aqui o poco fica mais fundo E a boca ganha luz. */
.pagina-auth {
    --campo-fundo: #EDF1F7;
    /* A luz no labio de cima: 1px que separa a boca do poco da superficie do
       cartao. E o que faz o campo parecer que tem profundidade em vez de ser
       um retangulo mais escuro. */
    --campo-luz: rgba(255, 255, 255, .9);
    --campo-sombra: rgba(15, 18, 32, .07);
}

/*
 * O ATRIBUTO DE TEMA MORA NO <html>, E NAO NO <body> — e confundir os dois
 * custou o defeito que o dono fotografou em 26/08/2026: sistema no escuro,
 * portal alternado para o CLARO, e os dois campos pretos dentro de um cartao
 * branco.
 *
 * A primeira versao guardava a media query com `.pagina-auth:not([data-tema="claro"])`.
 * `.pagina-auth` e classe de BODY; `data-tema` e escrito em `document.documentElement`
 * (app.js) e vem do servidor pelo cookie `portal_tema`. Body nunca tem o atributo,
 * entao o `:not()` era SEMPRE verdadeiro: sob sistema escuro, os tokens escuros
 * venciam mesmo com o portal em claro.
 *
 * O padrao correto e o que `style.css` ja usa e explica: `:root:not([data-tema])`
 * — ausencia TOTAL de escolha, e nao ausencia de uma escolha especifica. Qualquer
 * valor no atributo sai do ramo automatico, e o bloco de baixo cuida do forcado.
 *
 * Os dois blocos listam os MESMOS tokens, e CSS puro nao tem como referenciar um
 * no outro. Editar um sem editar o outro e defeito — a mesma nota que style.css
 * carrega no bloco equivalente.
 */
@media (prefers-color-scheme: dark) {
    :root:not([data-tema]) .pagina-auth {
        --campo-fundo: #0A0A11;
        --campo-luz: rgba(255, 255, 255, .085);
        --campo-sombra: rgba(0, 0, 0, .5);
    }
}

:root[data-tema="escuro"] .pagina-auth {
    --campo-fundo: #0A0A11;
    --campo-luz: rgba(255, 255, 255, .085);
    --campo-sombra: rgba(0, 0, 0, .5);
}

/* A sombra interna e o unico acrescimo de desenho — `box-shadow` nao entra na
   conta de contraste do 1.4.11 (a borda continua fazendo esse trabalho) e nao
   desloca uma linha de layout. */
.pagina-auth .autenticar_form input[type="text"],
.pagina-auth .autenticar_form input[type="email"],
.pagina-auth .autenticar_form input[type="tel"],
.pagina-auth .autenticar_form input[type="password"],
.pagina-auth .autenticar_form .telefone {
    box-shadow:
        inset 0 1px 0 var(--campo-luz),
        inset 0 2px 5px var(--campo-sombra);
}

/* O CAMPO RESPONDE AO PONTEIRO ANTES DO CLIQUE. Sem isto, a unica resposta que
   o campo dava era o foco — e ate o clique acontecer, nada na tela confirmava
   que aquele retangulo era interativo.

   O VALOR ERA `--contorno-forte`, E ELE APAGAVA A BORDA EM VEZ DE ACENDE-LA
   (medido em 01/09/2026). Os dois tokens sao a MESMA tinta em opacidades
   diferentes:

     --borda-controle   color-mix(--texto 52%)   (style.css:295)  <- repouso
     --contorno-forte   color-mix(--texto 46%)   (style.css:276)  <- era o hover

   `--contorno-forte` e forte em relacao a `--borda`, o fio de superficie — e
   NAO em relacao a `--borda-controle`, que existe justamente por ser a borda
   mais opaca do sistema (WCAG 1.4.11 nos campos). O hover baixava a opacidade
   de 52% para 46%: o campo DESBOTAVA quando o cursor chegava nele, e a
   intencao escrita duas linhas acima acontecia ao contrario. Nada acusava,
   porque a direcao de uma mudanca de 6% de alfa nao se ve sem medir.

   `--texto-suave` sobe nos DOIS temas e nao inventa cor nenhuma — e a tinta
   dos proprios rotulos. Medido no pixel renderizado
   (`evidencias/w81/contraste.txt`), a borda contra o cartao:

     repouso  4,79:1 (escuro)   4,16:1 (claro)
     hover    7,39:1 (escuro)   6,27:1 (claro) */
.pagina-auth .autenticar_form input[type="text"]:hover,
.pagina-auth .autenticar_form input[type="email"]:hover,
.pagina-auth .autenticar_form input[type="tel"]:hover,
.pagina-auth .autenticar_form input[type="password"]:hover {
    border-color: var(--texto-suave);
}

/*
 * O FOCO GANHA PROFUNDIDADE, E NAO COR NOVA. O anel de `:focus-visible` segue
 * intocado (neutro, pelo motivo do cabecalho); o que muda e o poco, que se
 * ACENDE — a sombra interna sai e o preenchimento sobe para a cor do cartao.
 * O campo deixa de ser um buraco e passa a ser a coisa mais proxima do olho,
 * que e exatamente onde o cursor esta.
 */
/*
 * `background-color`, E NUNCA O ATALHO `background` — a diferenca custou o
 * glifo, e o defeito era invisivel em repouso.
 *
 * `background: var(--superficie)` e um ATALHO: ele nao troca so a cor, ele
 * REDEFINE todas as sub-propriedades, e `background-image` volta para `none`.
 * O envelope e o cadeado da secao 4 desapareciam no instante em que a pessoa
 * clicava no campo — exatamente o momento em que ela esta olhando para ele.
 *
 * Nenhuma regra deste arquivo pode usar o atalho enquanto houver imagem de
 * fundo em campo; ha teste (`SuperficieDoAcessoTest`).
 */
.pagina-auth .autenticar_form input[type="text"]:focus,
.pagina-auth .autenticar_form input[type="email"]:focus,
.pagina-auth .autenticar_form input[type="tel"]:focus,
.pagina-auth .autenticar_form input[type="password"]:focus {
    background-color: var(--superficie);
    box-shadow: inset 0 1px 0 var(--campo-luz);
}

/* -----------------------------------------------------------------------------
   2. O FUNDO GANHA UMA FONTE DE LUZ
   -----------------------------------------------------------------------------

   `.cena_glow` (style.css) ja pinta tres halos vermelhos em posicoes fixas da
   JANELA — 16%/6%, 92%/28%, 40%/108%. Numa home cheia isso funciona; numa tela
   de duas colunas com metade vazia, os tres caem longe do unico objeto que
   importa e o miolo da tela fica chapado. Na captura do dono da para ver: o
   vermelho vive na borda superior direita e o centro e preto liso.

   O QUE ENTRA E UMA LUZ SO, ATRAS DO CARTAO. Ela nao substitui a cena — soma
   a ela, na camada de baixo — e existe para dar ao cartao um lugar de onde
   nascer. Radial larga, muito fraca, presa a coluna direita.

   `z-index: -2` fica ACIMA de `.cena` (-3) e abaixo de todo conteudo. */
.pagina-acesso::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -2;
    pointer-events: none;
    background:
        radial-gradient(38vmax 34vmax at 72% 42%,
            color-mix(in srgb, var(--fss-acao) 9%, transparent), transparent 70%),
        radial-gradient(30vmax 30vmax at 78% 96%,
            color-mix(in srgb, var(--texto) 4%, transparent), transparent 72%);
}

/* -----------------------------------------------------------------------------
   3. O VAZIO QUE O DONO CIRCULOU
   -----------------------------------------------------------------------------

   MEDIDO ANTES DE MEXER, em 1600x700 no tema escuro:

     /entrar    o painel de marca termina em y=288 e o cartao em y=505
                -> 217px de nada embaixo do texto
     /          termina em y=358, cartao em y=747
                -> 389px de nada

   A causa e `align-items: start` na grade: as duas colunas comecam no topo, e
   como a esquerda e curta (em /entrar ela nem tem os tres selos — foram tirados
   de proposito, porque ali nao ha nada a vender), sobra um buraco do tamanho da
   diferenca.

   CENTRAR RESOLVE SEM TIRAR NADA DE NINGUEM: a diferenca de altura passa a se
   dividir em cima e embaixo, e o que era um buraco vira respiro. O texto tambem
   passa a olhar o cartao de frente, que e a leitura que a composicao pede.

   SO EM TELA LARGA. Abaixo de 900px a grade vira uma coluna so e nao existe
   diferenca de altura para distribuir — centrar ali nao faria nada, e a media
   query de `style.css` que empilha as duas continua mandando. */
@media (min-width: 901px) {
    .pagina-acesso .autenticar { align-items: center; }
}

/* -----------------------------------------------------------------------------
   4. O CUIDADO NOS CAMPOS — glifo, rótulo e raio
   -----------------------------------------------------------------------------

   A segunda referencia do dono (26/08/2026) e uma tela de login escura cujos
   campos funcionam por TRES detalhes pequenos, e nenhum deles e o preenchimento:

     um glifo ancorando a borda esquerda (envelope no e-mail, cadeado na senha);
     o rotulo em CAIXA ALTA com espacamento, em cinza — etiqueta, nao frase;
     folga interna generosa, com o texto comecando bem depois da borda.

   O anel de foco duplo daquela captura — linha clara colada no campo e um vao
   escuro em volta — ESTE PROJETO JA TEM: `outline: 2px solid var(--texto)` com
   `outline-offset: 2px` (style.css). Nada a fazer ali.

   POR QUE O GLIFO VEM POR `background-image` E NAO POR `icone()`.

   A regra da casa e "um lugar so para cada path" (_icones.php), e ela vale. Mas
   por dentro de um <input> nao ha onde pendurar marcacao: input nao aceita
   filho nem pseudo-elemento. As saidas seriam (a) embrulhar cada campo num
   wrapper com o <svg> ao lado — e os parciais de acesso estavam sendo
   reescritos em outro lugar, sem commit, entao editar aquilo era pedir para
   uma das duas mudancas apagar a outra; ou (b) desenhar no CSS.

   Escolhida a (b), com a condicao que a regra realmente protege: EXISTE UMA
   COPIA SO de cada path. Envelope e cadeado nao estao em `_icones.php` e nao
   podem passar a estar sem que estas duas linhas saiam junto — senao o mesmo
   desenho tem duas casas e o dia em que uma mudar comeca a contar.

   E POR QUE UM CINZA FIXO, E NAO O TOKEN DO TEMA. `url()` nao interpola
   variavel: para o glifo seguir `--texto-fraco` seriam DOIS data-URI, um por
   tema — duas copias do mesmo path, exatamente o que o paragrafo acima recusa.
   `#767C90` fica entre os dois valores do token (#565C73 claro, #868CA0
   escuro) e le nos dois; e decoracao ao lado de um rotulo que ja diz a mesma
   coisa em palavra, entao nao carrega informacao sozinho (WCAG 1.4.1) e nao
   responde por contraste de texto. */
.pagina-auth .autenticar_form input[type="email"],
.pagina-auth .autenticar_form input[type="password"] {
    padding-left: 46px;
    background-repeat: no-repeat;
    background-position: left 15px center;
    background-size: 19px 19px;
}

/* Envelope. Mesma gramatica dos glifos da casa: viewBox 24, traco 1.7, pontas
   e juntas arredondadas. */
.pagina-auth .autenticar_form input[type="email"] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23767C90' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5.5' width='18' height='13' rx='2.2'/%3E%3Cpath d='m3.7 7.2 8.3 5.9 8.3-5.9'/%3E%3C/svg%3E");
}

/* Cadeado. */
.pagina-auth .autenticar_form input[type="password"] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23767C90' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4.6' y='10.4' width='14.8' height='9.4' rx='2.2'/%3E%3Cpath d='M8.2 10.4V7.9a3.8 3.8 0 0 1 7.6 0v2.5'/%3E%3C/svg%3E");
}


/* O ROTULO VIRA ETIQUETA.
   Ele era `--texto` cheio com peso 600 — do mesmo peso e da mesma tinta do que
   a pessoa digita. Em caixa alta, com espacamento e em cinza, ele para de
   competir com o conteudo do campo e passa a se ler como o que e: o nome da
   caixa.

   `text-transform` E NAO CAIXA ALTA NO HTML: leitor de tela le o texto de
   origem ("E-mail"), e nao "E-MAIL" soletrado. A diferenca e entre uma escolha
   de tipografia e uma mudanca de conteudo. */
.pagina-auth .autenticar_form label {
    font-size: var(--tipo-0, .72rem);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .09em;
    color: var(--texto-suave);
    margin-bottom: 8px;
}

/* O rotulo do "Lembrar-me"/aceite e uma FRASE, e nao uma etiqueta: ele mora
   dentro de <label class="check"> junto com o texto corrido dos Termos. Caixa
   alta ali transformaria a frase inteira em grito. */
.pagina-auth .autenticar_form .check,
.pagina-auth .autenticar_form .check label {
    text-transform: none;
    letter-spacing: normal;
    font-size: var(--tipo-1);
    font-weight: 400;
    color: var(--texto);
}

/* 10px em vez de 8: com o glifo dentro e 48px de altura, o raio antigo deixava
   o canto duro perto de um desenho todo arredondado. */
.pagina-auth .autenticar_form input[type="text"],
.pagina-auth .autenticar_form input[type="email"],
.pagina-auth .autenticar_form input[type="tel"],
.pagina-auth .autenticar_form input[type="password"],
.pagina-auth .autenticar_form .telefone { border-radius: 10px; }

/* -----------------------------------------------------------------------------
   5. O PREENCHIMENTO AUTOMATICO CONTINUA SENDO NOSSO
   -----------------------------------------------------------------------------

   `style.css` cobre a tinta que o Chrome pinta sozinho num campo autopreenchido
   com uma sombra interna de 1000px na cor do campo — o truque conhecido, porque
   `-webkit-autofill` nao aceita `background-color`.

   ISTO AQUI CONSERTA UM ESTRAGO QUE A SECAO 1 CAUSOU. A regra de la
   (`.pagina-auth .autenticar_form input[type="email"]`, 0-3-1) pesa mais que a
   de autofill (`.autenticar_form input:-webkit-autofill`, 0-2-1) e declara
   `box-shadow` — a propriedade e uma so, entao a sobrepintura de 1000px era
   simplesmente substituida pelas duas sombras do poco, e a tinta do navegador
   voltava a aparecer. Na captura do dono, o campo com o e-mail lembrado era um
   retangulo preto com texto quase ilegivel dentro.

   A regra abaixo soma as duas coisas na MESMA declaracao — sobrepintura
   primeiro, luz do labio depois — e pesa 0-4-1 (`[type]` + `:-webkit-autofill`)
   para vencer tanto a da secao 1 quanto a de foco.

   `-webkit-text-fill-color` e `caret-color` continuam vindo do style.css e nao
   sao repetidos: aquela regra nunca deixou de valer para eles, porque nada aqui
   declara essas duas. */
.pagina-auth .autenticar_form input[type]:-webkit-autofill,
.pagina-auth .autenticar_form input[type]:-webkit-autofill:hover,
.pagina-auth .autenticar_form input[type]:-webkit-autofill:focus {
    box-shadow:
        0 0 0 1000px var(--campo-fundo, var(--fundo)) inset,
        inset 0 1px 0 var(--campo-luz);
}

/* -----------------------------------------------------------------------------
   6. OS DEMAIS CAMPOS DO CADASTRO
   -----------------------------------------------------------------------------

   A tela de ENTRAR ja tinha os dois glifos desde a secao 4 — ela so tem e-mail e
   senha. Quem estava sem eram os campos do CADASTRO, e ficaram sem por uma
   decisao que o dono reverteu em 26/08/2026: eu tinha argumentado que so
   e-mail e senha tem desenho inequivoco. Ele quer os campos uniformes, e ele
   esta certo sobre o que a tela parece — tres campos com glifo e tres sem, na
   mesma coluna, lem como bug antes de lerem como criterio.

   O TIPO NAO DISTINGUE ESTES TRES: nome, sobrenome e cargo sao todos
   `input[type="text"]`. O gancho e o `name`, que o servidor ja escreve e que
   nao existe por acaso — e o mesmo nome que chega no POST.

   -----------------------------------------------------------------------------
   NOME E SOBRENOME REUSAM O DESENHO DE `perfil`, E ISSO TEM CONTA A PAGAR
   -----------------------------------------------------------------------------

   Envelope e cadeado nao existiam em `_icones.php`: desenha-los aqui criou UMA
   casa para cada um, e o teste garante que nao nasca uma segunda.

   Pessoa e diferente — `perfil` JA EXISTE la (linha ~270). Como `url()` nao
   alcanca PHP, a unica forma de ter o glifo dentro do <input> e repetir o path
   aqui, e repetir path e exatamente o que a regra da casa proibe.

   A divida foi assumida com mitigacao, e nao ignorada: os dois desenhos sao
   BYTE A BYTE o mesmo, e `SuperficieDoAcessoTest` compara os dois arquivos. No
   dia em que alguem ajustar `perfil`, o teste cai e aponta esta linha. Duas
   copias que nao podem divergir em silencio nao sao duas verdades. */
.pagina-auth .autenticar_form input[name="first_name"],
.pagina-auth .autenticar_form input[name="last_name"],
.pagina-auth .autenticar_form input[name="role_name"] {
    padding-left: 46px;
    background-repeat: no-repeat;
    background-position: left 15px center;
    background-size: 19px 19px;
}

/* Pessoa — o MESMO path de `perfil` em themes/portal/_icones.php. */
.pagina-auth .autenticar_form input[name="first_name"],
.pagina-auth .autenticar_form input[name="last_name"] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23767C90' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8.4' r='3.5'/%3E%3Cpath d='M5.1 20.2c0-3.6 3.1-6 6.9-6s6.9 2.4 6.9 6'/%3E%3C/svg%3E");
}

/* Maleta — cargo. Desenho novo: nao ha equivalente em `_icones.php`, entao esta
   e a unica casa dele, como envelope e cadeado. */
.pagina-auth .autenticar_form input[name="role_name"] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23767C90' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3.2' y='7.6' width='17.6' height='12.2' rx='2.2'/%3E%3Cpath d='M9 7.6V6.1a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v1.5'/%3E%3Cpath d='M3.2 12.4h17.6'/%3E%3C/svg%3E");
}

/*
 * O TELEFONE FICA DE FORA, e aqui a uniformidade perde para a leitura.
 *
 * `.telefone` nao e um campo, e um controle COMPOSTO: um <select> de DDI com
 * bandeira e codigo do pais grudado a esquerda da caixa de numero. Aquele
 * seletor JA E o afixo esquerdo — e o que diz "isto e um telefone", com mais
 * clareza que qualquer glifo de 19px. Um icone ali entraria DEPOIS da bandeira,
 * empurrando o numero para a terceira posicao e criando duas ancoras a esquerda
 * do mesmo controle.
 *
 * O padding tambem nao muda: os 12px de la sao calculados contra o <select>, e
 * nao contra a borda.
 */

/* -----------------------------------------------------------------------------
   7. O CAMPO RESPONDE — E QUEM RESPONDE E O CAMPO INTEIRO (01/09/2026)
   -----------------------------------------------------------------------------

   O PEDIDO DO DONO foi "mais bonito, mais atual, tecnologico, animado", com a
   captura desta tela. A tela nao estava feia: estava PARADA depois da entrada.
   Medido antes de mexer, em 1440x900 no tema escuro
   (`evidencias/w81/estado-antes-*.png`), o que a tela devolvia a quem trabalha
   nela era:

     hover no campo    borda --borda-controle -> --contorno-forte  (secao 3)
                       ...que DESBOTAVA a borda em vez de acende-la. Corrigido
                       na propria secao 3, com a medida escrita la
     foco no campo     anel branco + o poco vira labio + fundo --superficie
     hover no telefone NADA — a caixa composta ficava de fora da regra de hover
     rotulo            NADA em nenhum estado
     botao revelar     troca de cor, sem transicao
     aceite dos termos nenhuma resposta ao cursor — e continua sem, por medida
                       e nao por esquecimento (ver 7.5)
     botao principal   troca de fundo e afunda 1px (style.css)

   Duas observacoes sobre isso, e as duas mandam no que esta escrito abaixo.

   A PRIMEIRA: o campo JA acendia — o que faltava era o acender ser um GESTO.
   `style.css` declara `transition: border-color, box-shadow`, e a secao 3 desta
   folha troca `background-color` no foco. Como a cor de fundo NAO estava na
   lista, ela pulava de um quadro para o outro enquanto a borda e a sombra
   deslizavam: a mesma mudanca, contada em dois tempos diferentes. Repetir as
   duas propriedades aqui nao e duplicacao — `transition` e uma propriedade so,
   e declarar a terceira sem repetir as outras APAGARIA as duas.

   A SEGUNDA: `--dur-micro` (140ms) e o relogio, e ele nao muda. O que esta onda
   acrescentou foi ALCANCE (mais elementos respondendo), nunca duracao. Um
   formulario que demora a responder e um formulario mais lento de preencher, e
   esta e a porta de entrada do produto.

   TUDO AQUI E `transition`, E ISSO E DELIBERADO. Sob `prefers-reduced-motion:
   reduce` a regra global de `style.css` (`transition-duration: .001ms
   !important`) zera o tempo de todas elas: o estado final continua identico —
   mesma cor, mesma borda, mesmo anel —, so a interpolacao morre. Nenhuma
   informacao desta secao existe apenas no movimento. Keyframe nao entra aqui:
   animacao de entrada mora em `acesso-motion.css`, dentro de `no-preference`.
   ---------------------------------------------------------------------------*/

/* 7.1 O ACENDER VIRA UM GESTO SO. Ver "a primeira observacao" acima: as tres
   propriedades que mudam no hover e no foco passam a andar no mesmo relogio. */
.pagina-auth .autenticar_form input[type="text"],
.pagina-auth .autenticar_form input[type="email"],
.pagina-auth .autenticar_form input[type="tel"],
.pagina-auth .autenticar_form input[type="password"] {
    transition:
        border-color var(--dur-micro) var(--curva),
        box-shadow var(--dur-micro) var(--curva),
        background-color var(--dur-micro) var(--curva);
}

/* 7.2 O TELEFONE ESTAVA FORA DA CONVERSA.

   A regra de hover da secao 3 lista `input[type=...]`, e o numero de telefone e
   um `input[type=tel]` SEM BORDA PROPRIA: quem desenha a caixa e o container
   `.telefone`. Resultado medido: passar o mouse sobre seis campos acendia a
   borda de cinco. Um controle que nao responde igual aos vizinhos parece
   desabilitado antes de parecer diferente.

   O `:hover` VAI NO CONTAINER, e nao no `input[type=tel]` de dentro: a caixa
   composta cobre tambem o <select> de DDI, e acender a borda inteira quando o
   cursor esta sobre o seletor de pais e a mesma resposta que o campo daria — o
   que a pessoa percebe como "o campo" e a caixa toda. E o mesmo argumento que
   ja justifica o `:focus-within` do `.telefone` em `style.css`.

   Mesmo valor da regra da secao 3 (`--texto-suave`), de proposito: seis campos,
   um gesto. */
.pagina-auth .autenticar_form .telefone:hover {
    border-color: var(--texto-suave);
}

/* O <select> de DDI e um controle DENTRO do controle. A seta e a unica coisa
   que diz isso em repouso; no hover ela sobe de --texto-fraco para --texto-suave
   e confirma que ali se escolhe alguma coisa. */
.pagina-auth .autenticar_form .telefone_pais:hover .telefone_seta {
    color: var(--texto-suave);
}
.pagina-auth .autenticar_form .telefone_seta {
    transition: color var(--dur-micro) var(--curva);
}

/* 7.3 O ROTULO ACOMPANHA O FOCO — e este e o unico acrescimo desta secao que
   carrega INFORMACAO, e nao so afordancia.

   O rotulo e uma etiqueta em caixa alta, 700, em --texto-suave (secao 4): a
   mesma tinta nos sete campos, o tempo todo. Num cartao de sete campos com
   duas colunas, "qual deles esta ativo" era dito por UM sinal so — o anel de
   foco. Com o rotulo subindo para --texto, o campo ativo passa a se anunciar
   duas vezes, e a segunda vez e legivel de longe, sem depender de enxergar
   2px de contorno.

   `:focus-within` NO `.campo`, e nao `:focus` no input: os tres controles
   compostos da tela (telefone, senha com o botao de revelar, e o aceite) tem o
   foco num filho, e cobrar `:focus` do input deixaria justamente eles de fora.

   NAO E ROTULO FLUTUANTE. Aquele padrao move o texto para dentro do campo e
   troca rotulo por placeholder enquanto a caixa esta vazia — atrasa quem esta
   preenchendo e some com o nome do campo na hora de conferir. Aqui nada se
   move: muda a tinta, e o layout e o mesmo em todos os estados.

   CONTRASTE: a mudanca so SOBE (--texto-suave -> --texto, a cor de maior
   contraste do tema). O estado de repouso continua sendo o medido; o de foco e
   estritamente melhor. */
.pagina-auth .autenticar_form label {
    transition: color var(--dur-micro) var(--curva);
}
.pagina-auth .autenticar_form .campo:focus-within > label {
    color: var(--texto);
}

/* 7.4 O BOTAO DE REVELAR A SENHA. Ele ja trocava de cor no hover, sem relogio e
   sem caixa: 44x40px de alvo que nao mostrava onde comecava. O fundo em
   --preenchimento (6% de --texto) e o mesmo veu que `.ligacao` usa no hover em
   todo o portal — nao e um dialeto novo, e o degrau 3 da escada de botoes. */
.pagina-auth .campo_senha .revelar {
    transition:
        color var(--dur-micro) var(--curva),
        background-color var(--dur-micro) var(--curva);
}
.pagina-auth .campo_senha .revelar:hover {
    /* `background-color`, e nunca o atalho `background:` — a regra da secao 5
       vale para a folha inteira por disciplina, ainda que aqui nao haja glifo a
       preservar. */
    background-color: var(--preenchimento);
}

/* 7.5 O ACEITE DOS TERMOS FICA PARADO — E FOI UMA REGRA ESCRITA E APAGADA.

   Ela existiu: `.check:hover { color: var(--texto) }`, pela simetria com os
   outros controles. Medida, nao fazia NADA — a secao 4 ja pinta o aceite em
   `--texto` em repouso (16,3:1 no escuro), porque ele carrega dois links para
   documentos legais e nao pode ser texto de apoio. Um hover que troca uma cor
   pela mesma cor e uma regra que so serve para o proximo leitor achar que
   existe um estado ali.

   O que o aceite tem de resposta: a caixa nativa com `accent-color`, o alvo de
   44px do `.check`, e os dois links, que sublinham e mudam de cor no hover
   (regra de `.autenticar a` em style.css). Basta. */

/* 7.6 O ENVIO GANHA PROFUNDIDADE NO HOVER, E PERDE NO CLIQUE.

   `style.css` ja troca o fundo (--fss-acao -> --fss-acao-hover) e afunda 1px no
   `:active`. O que faltava era a resposta ANTES do clique ter peso proprio: numa
   tela escura, uma pilula vermelha chapada nao muda de altura quando o cursor
   chega nela.

   A sombra e a MESMA TINTA da acao, a 34%, e sai para fora da caixa: ela nao
   entra na conta de contraste do rotulo (branco sobre --fss-acao, que continua
   intacto) nem na do contorno do botao. No `:active` ela encolhe junto com o
   afundar de 1px — o botao volta para a superficie, que e o gesto de quem
   apertou.

   POR QUE ISTO NAO E ENFEITE numa tela que promete calculo deterministico: o
   envio deste formulario e sincrono e sem JavaScript no caminho. Entre apertar
   e a pagina trocar existe um intervalo sem sinal nenhum, e e nele que a pessoa
   aperta de novo. Todo retorno que couber ali se paga.

   `.pagina-auth`, e nao `.pagina-acesso`: o botao e o mesmo nas cinco telas de
   autenticacao, e uma delas responder diferente das outras quatro seria o
   mesmo produto contando duas historias — o argumento que ja abre esta folha. */
.pagina-auth .autenticar_form .btn {
    transition:
        background-color var(--dur-micro) var(--curva),
        box-shadow var(--dur-micro) var(--curva),
        transform var(--dur-micro) var(--curva);
}
/* `:not(.btn_sec)` NAO E PRECAUCAO — E UM DEFEITO EVITADO, achado na
   auto-revisao. A dobra de reenvio do /app/verificar-email usa
   `<button class="btn btn_sec">` DENTRO de um `.autenticar_form`
   (auth-verify.php:123 e :270). Sem esta exclusao, um botao VAZADO, de fundo
   transparente, ganhava um halo VERMELHO da cor da acao primaria — a escada de
   botoes do portal (solido > vazado > sem caixa) desmontada por uma sombra. A
   sombra pertence a quem tem a tinta. */
.pagina-auth .autenticar_form .btn:not(.btn_sec):hover {
    box-shadow: 0 6px 18px color-mix(in srgb, var(--fss-acao) 34%, transparent);
}
.pagina-auth .autenticar_form .btn:not(.btn_sec):active {
    box-shadow: 0 1px 4px color-mix(in srgb, var(--fss-acao) 26%, transparent);
}

/* O botao OCUPADO nao levanta. `data-pendente` chega do `app.js` no submit
   (disco girando + rotulo "Enviando..."), e manter o realce de hover embaixo do
   cursor durante o envio diria "clicavel" sobre um controle que ja foi clicado
   e nao aceita segundo clique. */
.pagina-auth .autenticar_form .btn[data-pendente],
.pagina-auth .autenticar_form .btn[data-pendente]:hover {
    box-shadow: none;
    transform: none;
}
