/*
 * 70_admin.css — ONDA G · §12.4, §12.5, §12.7, §12.8
 * ═══════════════════════════════════════════════════════════════════════════
 * SÓ o que a onda D não tem. Botão, cartão, tabela-que-vira-cartão, medidor,
 * selo, aviso, abas, paginação e os seis estados vazios vêm de
 * `10_componentes.css` e são usados como estão — reescrever qualquer um deles
 * aqui criaria um segundo botão primário, e é assim que um design system morre.
 *
 * O que é genuinamente novo nesta onda, e por quê:
 *
 *   .faixa-elevo   §12.5 — a faixa fixa de "entrar como". Não existe em lugar
 *                  nenhum do produto porque ela é a única coisa na tela que
 *                  fala da ELLÉVU dentro da conta do CLIENTE.
 *   .lote          §12.7 — a barra de ação que aparece com a seleção. O rodapé
 *                  grudado é o que faz "Aprovar e matricular" ser alcançável
 *                  com 300 linhas na tela.
 *   .filtros       §12.4 — a faixa de filtro por filial/cargo/busca.
 *   .ficha         a lista de rótulo/valor da ficha de pessoa e do console.
 *   .barras        §12.4 — conclusões por semana, em `<meter>` nativo (a CSP
 *                  não deixa passar `style="height:…"`, e nem deveria).
 *   .painel-numero os seis números, que são CARTÕES CLICÁVEIS.
 *
 * Nenhuma regra aqui escreve hex: os tokens da onda D são a única camada com
 * valor literal, e o tema claro sai de graça por causa disso.
 *
 * NADA A PEDIR AO INTEGRADOR SOBRE CARREGAMENTO — e este parágrafo está aqui
 * porque uma versão anterior pedia o contrário, e o pedido estava ERRADO:
 * `stylesheet_link_tag :app` (layouts/application.html.erb) emite um <link>
 * para CADA folha do load path, em ordem de nome, e este arquivo já sai lá
 * depois de `10_componentes`. Conferido no <head> de `/`. Um
 * `@import "70_admin.css"` em `application.css` carregaria a folha duas vezes.
 */

/* ═══ FAIXA DE "ENTRAR COMO" (§12.5) ══════════════════════════════════════
   Fixa no topo, acima de tudo, e com a cor de ATENÇÃO — nunca a cor da marca
   do cliente: a faixa existe justamente para dizer "isto aqui não é a sua
   empresa falando com você".                                                */

.faixa-elevo {
  position: sticky;
  top: 0;
  z-index: 60;
  display: flex;
  align-items: center;
  gap: var(--esp-3);
  padding: var(--esp-2) var(--esp-4);
  background: var(--cor-descanso-suave);
  color: var(--cor-descanso);
  border-bottom: 2px solid var(--cor-descanso);
  font-size: var(--texto-sm);
}
.faixa-elevo__icone { flex: none; display: inline-flex }
.faixa-elevo__texto { display: flex; flex-direction: column; gap: 2px; min-width: 0 }
.faixa-elevo__detalhe { color: var(--texto-suave); font-size: var(--texto-xs) }
/* O "sair" é um `button_to` — FORMULÁRIO, e não link, porque o Turbo 8
   pré-carrega link no hover e o hover encerraria a impersonação sozinho. Quem
   ganha as regras de posição é o <form>; o <button> de dentro usa `.botao`. */
.faixa-elevo__sair { margin-left: auto; flex: none }

@media (max-width: 40rem) {
  .faixa-elevo { flex-wrap: wrap }
  .faixa-elevo__sair { margin-left: 0; width: 100% }
  .faixa-elevo__sair .botao { width: 100% }
}

/* ═══ PAINEL: OS SEIS NÚMEROS (§12.4) ═════════════════════════════════════
   Cada número é um LINK. Número que não leva a lugar nenhum é enfeite, e
   enfeite no painel do cliente é o que faz ele parar de abrir o painel.      */

.painel-numeros { margin-bottom: var(--esp-6) }

.painel-numero {
  display: block;
  text-decoration: none;
  color: inherit;
  transition: border-color var(--transicao-rapida), transform var(--transicao-rapida);
}
.painel-numero:hover { border-color: var(--cor-marca-tenue); transform: translateY(-1px) }
.painel-numero:focus-visible { border-color: var(--cor-marca) }

/* ═══ CONCLUSÕES POR SEMANA (§12.4) ═══════════════════════════════════════
   `<meter>` e não `<div style="height:…">`: a CSP do projeto põe nonce em
   `style-src`, e nonce NÃO vale para atributo `style` — em produção o estilo
   inline é descartado em silêncio e a barra vira um traço. De quebra, o leitor
   de tela anuncia o valor sozinho.                                           */

.barras {
  display: flex;
  align-items: flex-end;
  gap: var(--esp-2);
  list-style: none;
  margin: 0 0 var(--esp-3);
  padding: 0;
  min-height: 8rem;
}
.barras__coluna {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--esp-1);
  min-width: 0;
}
.barras__valor { font-size: var(--texto-xs); color: var(--texto-tenue); font-variant-numeric: tabular-nums }
.barras__rotulo { font-size: var(--texto-xs); color: var(--texto-tenue); white-space: nowrap }
/* O 1px de rolagem horizontal do /admin a 390 (dívida do PLANO, B1): a
   contribuição de largura mínima das oito colunas (rótulo "dd/mm" + gap)
   passava de 358px, e o item da grade (`1fr` = minmax(auto, 1fr)) crescia
   até 375. O cartão da grade pode encolher e, se um dia a semana tiver mais
   colunas, o gráfico rola DENTRO do cartão — nunca a página. */
.conteudo--admin .grade > .cartao { min-width: 0 }
@media (max-width: 40rem) {
  .barras { gap: var(--esp-1); overflow-x: auto; overflow-y: hidden }
  .barras__rotulo { letter-spacing: -0.02em }
}

/* `<meter>` na vertical: `appearance: none` e depois os dois pseudo-elementos,
   porque WebKit e Gecko não compartilham nenhum deles. */
.barras__barra {
  appearance: none;
  -webkit-appearance: none;
  writing-mode: vertical-lr;
  direction: rtl;
  width: 100%;
  max-width: 2.5rem;
  height: 5rem;
  background: var(--fundo-fundo);
  border: 0;
  border-radius: var(--raio-1);
  overflow: hidden;
}
.barras__barra::-webkit-meter-bar { background: var(--fundo-fundo); border: 0; border-radius: var(--raio-1) }
.barras__barra::-webkit-meter-optimum-value,
.barras__barra::-webkit-meter-suboptimum-value,
.barras__barra::-webkit-meter-even-less-good-value { background: var(--cor-marca-forte) }
.barras__barra::-moz-meter-bar { background: var(--cor-marca-forte) }

/* ═══ FILTROS (§12.4) ═════════════════════════════════════════════════════ */

.filtros {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: var(--esp-3);
  padding: var(--esp-4);
  margin-bottom: var(--esp-5);
  background: var(--fundo-cartao);
  border: 1px solid var(--borda);
  border-radius: var(--raio-3);
}
.filtros__campo { flex: 1 1 12rem; margin-bottom: 0; min-width: 0 }
.filtros__campo .campo__controle { min-width: 0 }
.filtros__acoes { display: flex; flex-wrap: wrap; gap: var(--esp-2); flex: none }
/* A nota do filtro ("CPF só com o número inteiro…") é da FAIXA, não do campo:
   dentro do campo ela empurrava o rótulo "Nome ou CPF" 70px acima dos
   vizinhos "Filial"/"Cargo" (`align-items: flex-end` + ajuda de três linhas,
   R-10). Aqui ela ocupa a linha inteira embaixo, e os rótulos ficam na mesma
   altura. */
.filtros__nota { flex: 1 1 100%; margin: 0; font-size: var(--texto-sm); color: var(--texto-tenue) }

/* NO CELULAR a faixa é uma GRADE de duas colunas — e não `flex-direction:
   column`, que era o defeito de origem (R-3/G2 da auditoria): num container
   coluna `flex-basis: 12rem` vira ALTURA, cada campo passava a ter 192px e a
   primeira linha de dados só aparecia em y≈1100 num viewport de 844. É a
   mesma grade que `75_relatorios.css` já aplicava só ao `.filtros--relatorio`
   (e que documentava o defeito pedindo o conserto na origem: aqui).
   `min-width: 0` no item de grade é o que deixa a coluna ENCOLHER — sem ele o
   `<input>`/`<select>` impõe a largura intrínseca e a página rola de lado
   (medido em /admin/matriculas: 501px de conteúdo em 390). */
@media (max-width: 40rem) {
  .filtros {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    align-items: end;
    gap: var(--esp-3);
  }
  .filtros__campo { flex: 0 0 auto }
  .filtros__campo .campo__controle { width: 100% }
  .filtros input[type="date"].campo__controle { padding-inline: var(--esp-2) }
  /* Em meia coluna (157px) o `<select>` clipa o texto da opção escolhida — e
     os 40px de `padding-right` da folha 10 reservam lugar para uma seta que
     o `appearance: none` tirou e nada desenhou. Aqui o padding volta ao do
     campo comum: "Em andamento", "Campo Grande", "Motorista de truck" passam
     a caber; título de curso continua pedindo `--largo`. */
  .filtros select.campo__controle { padding-right: var(--esp-4) }
  /* Busca por nome e qualquer campo marcado `--largo` tomam a linha inteira:
     "Nome ou CPF" em meia tela é campo que não se digita. Os botões também. */
  .filtros__campo--largo,
  .filtros__campo:has(input[type="text"], input[type="search"]),
  .filtros__acoes,
  .filtros__nota { grid-column: 1 / -1 }
  .filtros__acoes > * { flex: 1 1 8rem }
}

/* ═══ O LOTE: APROVAR E MATRICULAR (§12.7) ════════════════════════════════
   A barra de ação gruda no rodapé da janela ENQUANTO HÁ SELEÇÃO. Com 300
   linhas, um botão no fim da página é um botão que ninguém acha; e uma barra
   sempre visível, com "0 selecionados", é uma barra que o admin aprende a
   ignorar. Por isso ela some (`.lote--vazio`) e o Stimulus só alterna a classe.
   Sem JavaScript a barra fica visível — que é o comportamento seguro.        */

.tabela__marcar { width: 2.5rem }
/* 24px, não 18: é o mínimo de alvo da WCAG 2.5.8 (B5), e o dedo do gestor no
   pátio é maior que o cursor do desenvolvedor. */
.tabela__marcar input, .tabela td input[type="checkbox"] { width: 1.5rem; height: 1.5rem; margin: 0 }
.tabela__acoes { text-align: right; white-space: nowrap }

/* O FORMULÁRIO não tem caixa (`display: contents`): a barra grudada precisa
   que o bloco de contenção dela seja o `<main>`, não o `<form>`. Com o form
   como caixa, uma lista de UMA linha (o caso real da aba Aguardando) deixava
   a barra sem espaço para subir: ela nascia no topo do form, em cima da
   linha recém-marcada, e o "Aprovar e matricular" ficava abaixo da dobra
   (R-9 residual, medido pelo verificador em 390: botão em y=864–920). O form
   continua existindo — os checkboxes viajam no `name`, o Stimulus fica nele. */
.lote { display: contents }
.lote__barra {
  position: sticky;
  bottom: 0;
  z-index: 20;
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: var(--esp-4);
  margin-top: var(--esp-4);
  padding: var(--esp-4);
  background: var(--fundo-elevado);
  border: 1px solid var(--cor-marca-tenue);
  border-radius: var(--raio-3);
  box-shadow: var(--sombra-3);
}
.lote--vazio .lote__barra { display: none }
.lote__contagem {
  margin: 0;
  font-weight: var(--peso-forte);
  color: var(--cor-marca);
  flex: 1 1 100%;
}
.lote__campos { display: flex; flex-wrap: wrap; gap: var(--esp-4); flex: 1 1 20rem }
.lote__campos .campo { margin-bottom: 0; flex: 1 1 12rem }
.lote__barra .botao { flex: none }

.campo__controle--multiplo { min-height: 6rem; padding: var(--esp-2) }
.selecao__todos { display: inline-flex; align-items: center; min-height: var(--alvo) }

/* No celular a barra grudada é um RESUMO: a contagem e o botão primário, com
   os campos (cursos e prazo) atrás de um `<details>` nativo — antes o
   `<select multiple>` aberto com 5 cursos + data + ajuda ocupava 486px e o
   "Aprovar e matricular" ficava ABAIXO da dobra numa barra cuja razão de ser
   é estar sempre ao alcance (R-9). No largo o `<details>` nasce aberto e sem
   marcador: é só um agrupador. */
.lote__campos { min-width: 0 }
.lote__campos > summary { display: none }
@media (max-width: 48rem) {
  .lote__barra { flex-direction: column; align-items: stretch; gap: var(--esp-3); padding: var(--esp-3) var(--esp-4) }
  .lote__barra .botao { width: 100% }
  .lote__contagem { flex: none }
  /* `flex: 0 0 auto`: em coluna, o `flex-basis: 20rem` da regra base vira
     ALTURA (o mesmo defeito dos filtros) — a barra tinha 450px com o
     <details> fechado. */
  .lote__campos { display: block; flex: 0 0 auto }
  .lote__campos > summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--esp-2);
    min-height: var(--alvo);
    cursor: pointer;
    font-size: var(--texto-sm);
    font-weight: var(--peso-medio);
    color: var(--cor-marca);
    list-style: none;
  }
  .lote__campos > summary::-webkit-details-marker { display: none }
  .lote__campos > summary::after { content: "+"; font-size: var(--texto-lg); line-height: 1 }
  .lote__campos[open] > summary::after { content: "−" }
  .lote__campos .campo { margin-top: var(--esp-3) }
  .lote__campos .campo__controle--multiplo { min-height: 0 }
  .lote__campos select[multiple] { height: auto }
}

/* ═══ DADOS: rótulo e valor (§12.4, §12.5) ════════════════════════════════
   O bloco se chama `.dados` e NÃO `.ficha` de propósito: `.ficha` já existe,
   é da onda A (`30_identidade.css` define `.ficha__valor--codigo`) e tem a
   estrutura BEM dela (`.ficha__linha > .ficha__rotulo/.ficha__valor`), usada
   em /perfil, /admin/marca, /admin/contrato e na assinatura do contrato.
   Escrever regras para `.ficha` aqui seria pintar a tela de outra onda a
   partir do arquivo desta — e no dia em que a onda A completasse o bloco dela,
   as duas folhas disputariam a mesma tela. */

.dados { display: grid; gap: var(--esp-3); margin: 0 }
@media (min-width: 40rem) { .dados { grid-template-columns: repeat(2, 1fr) } }
.dados > div { display: flex; flex-direction: column; gap: 2px; min-width: 0 }
.dados dt { font-size: var(--texto-xs); color: var(--texto-tenue); text-transform: uppercase; letter-spacing: 0.04em }
.dados dd { margin: 0; color: var(--texto); font-size: var(--texto-md); overflow-wrap: anywhere }
/* Número que pede ação. Âmbar e NUNCA vermelho: vermelho neste produto é
   "reprovado" (§15.1, a semântica é a língua do produto), e vídeo travado não
   reprovou ninguém. */
.dados dd.dados__alerta { color: var(--cor-descanso); font-weight: var(--peso-forte) }

.ficha__titulo-linha { display: flex; align-items: center; justify-content: space-between; gap: var(--esp-3); margin-bottom: var(--esp-3) }
.ficha__titulo-linha .ficha__titulo { margin: 0 }

.acoes-da-pessoa {
  display: grid;
  gap: var(--esp-4);
  margin-top: var(--esp-6);
  padding-top: var(--esp-5);
  border-top: 1px solid var(--borda);
}
.acao-com-motivo { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--esp-3) }
.acao-com-motivo .campo { flex: 1 1 18rem; margin-bottom: 0 }

/* ═══ ABAS NO CELULAR: a pista de que há mais à direita ═══════════════════
   `.abas` (folha 10) rola na horizontal com a barra escondida — e em
   /admin/pessoas os cinco rótulos passam 397px da tela sem NENHUM sinal
   (R-8). A mesma máscara sticky da `navegacao--rolavel` (folha 16), aplicada
   às abas do admin: um degradê grudado na borda direita enquanto houver
   conteúdo para lá, que some ao chegar ao fim. Só no estreito. */
@media (max-width: 40rem) {
  .conteudo--admin .abas { position: relative; scroll-padding-inline: var(--esp-4) }
  .conteudo--admin .abas::after {
    content: "";
    position: sticky;
    right: 0;
    flex: none;
    width: 2.5rem;
    margin-left: calc(-1 * var(--esp-1));
    pointer-events: none;
    background: linear-gradient(to right, transparent, var(--fundo));
  }
}

/* ═══ PAINEL NO CELULAR: seis números em 2×3 ══════════════════════════════
   Um cartão de 100px por linha empurrava a fila ("Na fila para você
   aprovar", a pendência de verdade) para a segunda tela e os movimentos para
   a quarta (R-7). Dois por linha cabem em 390 com o número legível. E o
   título de "Últimos movimentos" respira acima dos cartões. */
@media (max-width: 40rem) {
  .painel-numeros.grade--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--esp-3) }
  .painel-numeros .cartao { padding: var(--esp-4) }
  .painel-numeros .numero__valor { font-size: var(--texto-2xl) }
}
.painel-movimentos { margin-top: var(--esp-6) }
.painel-movimentos .secao__titulo { align-items: center }

/* ═══ MARCA (§15.2) ═══════════════════════════════════════════════════════
   `.admin-marca`, e NÃO `.marca`: `.marca` é o wordmark do cabeçalho
   (`20_navegacao.css`, inline-flex + nowrap + overflow hidden). A view usava
   o mesmo nome e a tela inteira virava uma linha em negrito, com 295px de
   rolagem horizontal no celular (R-1/G1). Uma coluna de leitura; a prévia
   embaixo do formulário. As cinco variáveis da prévia e a cor das amostras
   entram por CSSOM (`marca_controller`), nunca por `<style nonce>`. */
.admin-marca { max-width: 46rem; display: grid; gap: var(--esp-6) }
.admin-marca__cabecalho { display: grid; gap: var(--esp-2) }
.admin-marca__titulo { margin: 0 }
.admin-marca__chamada { margin: 0; color: var(--texto-suave); max-width: var(--largura-leitura) }
.admin-marca__subtitulo { margin: 0 0 var(--esp-3); font-size: var(--texto-lg) }
.admin-marca__nota { margin: var(--esp-4) 0 0; font-size: var(--texto-sm); color: var(--texto-tenue) }
.admin-marca .formulario--marca { min-width: 0 }
/* O seletor de cor é um QUADRADO de cor, não um campo de texto: esticado na
   largura inteira ele parecia uma barra de progresso. */
.admin-marca .formulario__entrada--cor { width: 6rem; height: var(--alvo); padding: var(--esp-1) }
.admin-marca .formulario__arquivo { max-width: 100%; font-size: var(--texto-sm); color: var(--texto-suave) }
.admin-marca .paletas__amostra { background: var(--amostra, var(--fundo-fundo)) }
.admin-marca .previa-de-marca { margin: 0; min-width: 0 }
.admin-marca .previa-de-marca__amostra { display: flex; flex-wrap: wrap; align-items: center; gap: var(--esp-3); margin: 0 0 var(--esp-5) }
/* As amostras DEMONSTRAM a cor: o botão de exemplo é o mesmo `.botao--primario`
   do produto (fundo `--cor-marca-forte`, que é o papel com AA garantido — a
   folha 30 pintava com `--cor-marca` e dava 2,98:1), a etiqueta é texto de
   contraste sobre a cor forte (a versão anterior usava `--cor-marca-suave`,
   que no tema é SUPERFÍCIE, e dava 1,3:1 — G5), e o elo é a cor de link. */
.admin-marca .previa-de-marca .previa-de-marca__botao {
  background: var(--cor-marca-forte);
  color: var(--cor-marca-contraste);
  border-color: transparent;
  pointer-events: none;
}
.previa-de-marca__etiqueta {
  display: inline-block;
  padding: var(--esp-1) var(--esp-3);
  border-radius: var(--raio-redondo);
  background: var(--cor-marca-forte);
  color: var(--cor-marca-contraste);
  font-size: var(--texto-sm);
  font-weight: var(--peso-forte);
}
.previa-de-marca__elo { color: var(--cor-marca); text-decoration: underline; text-underline-offset: 0.2em }
.dados--contrastes { margin-bottom: var(--esp-2) }

/* ═══ CONTRATO (§12.6) ════════════════════════════════════════════════════
   A tela não tinha CSS nenhum (`.ficha` só existia em comentário): `<dl>` com
   os recuos do navegador e enum cru (R-2). Mesma coluna de leitura da marca,
   e o rótulo/valor é o `.dados` desta folha. */
.admin-contrato { max-width: 46rem; display: grid; gap: var(--esp-6) }
.admin-contrato__cabecalho { display: grid; gap: var(--esp-2) }
.admin-contrato__titulo { margin: 0 }
.admin-contrato__chamada { margin: 0; color: var(--texto-suave); max-width: var(--largura-leitura) }
.admin-contrato__acoes { margin: var(--esp-4) 0 0 }
.admin-contrato .cartao__titulo { margin: 0 0 var(--esp-4) }

/* ═══ IMPORTAÇÃO (§12.8) ══════════════════════════════════════════════════ */
.importacao__colunas { margin-top: var(--esp-6); padding-top: var(--esp-5); border-top: 1px solid var(--borda) }
.importacao__colunas .secao__titulo { margin-bottom: var(--esp-2) }
.importacao__modelo { margin: var(--esp-4) 0 0 }
.campo--opcao .campo__ajuda, .campo--opcao small { display: block; margin-top: var(--esp-1); font-size: var(--texto-sm); color: var(--texto-tenue) }

.colunas-aceitas {
  display: block;
  padding: var(--esp-3);
  background: var(--fundo-fundo);
  border-radius: var(--raio-2);
  font-size: var(--texto-sm);
  overflow-wrap: anywhere;
}

/* A linha com problema é marcada por COR **e** por texto (a coluna Situação
   traz o selo e a frase do erro): parte considerável dos homens tem alguma
   deficiência de visão de cor, e este produto é de motoristas e de gente de
   garagem. Cor sozinha nunca carrega informação aqui. */
.tabela tbody tr.linha--erro { background: var(--cor-reprovado-suave) }
.tabela tbody tr.linha--elevo { background: var(--cor-descanso-suave) }

/* Célula vazia não vira linha "Detalhe:" vazia no cartão do celular (R-18). */
@media (max-width: 47.999rem) {
  .tabela--cartao td.tabela__vazia { display: none }
  /* /admin/cursos — a lista de cursos próprios vira cartão (rodada 3): em 390
     a tabela cortava em "Aulas (exigidas" e "Ficha do curso" e "0/5" só
     apareciam rolando a pista de lado. No cartão o título é a linha de cima
     (sem rótulo: é o nome do curso) e o botão da ficha fecha o cartão,
     encostado à direita, sem rótulo vazio à esquerda. */
  .tabela--cartao td.cursos__titulo { display: block; font-size: var(--texto-md); font-weight: var(--peso-medio) }
  .tabela--cartao td.cursos__titulo::before { display: none }
  .tabela--cartao td.cursos__ficha { justify-content: flex-end }
  .tabela--cartao td.cursos__ficha::before { display: none }
}
/* O medidor de conclusão na lista de matrículas: fino, sem rótulo, alinhado
   à direita no largo e ocupando a linha do cartão no estreito. */
.matriculas__conclusao { min-width: 9rem }
.matriculas__conclusao .medidor { gap: var(--esp-1) }
.matriculas__conclusao .medidor__topo { font-size: var(--texto-xs); justify-content: flex-end }
@media (max-width: 47.999rem) {
  .tabela--cartao td.matriculas__conclusao { display: block }
  .tabela--cartao td.matriculas__conclusao::before { display: block; margin-bottom: var(--esp-1) }
}
/* A matrícula na VISÃO POR PESSOA (`admin/matriculas/_pessoa`) fala a mesma
   língua da lista: o medidor vai abaixo do prazo, estreito, com o rótulo
   "Conclusão" pequeno. O `.lista__meta` com selo de atraso alinha pelo meio. */
.matricula-da-pessoa .lista__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--esp-1) var(--esp-2) }
/* O `.lista__fim` (selo + "Cancelar matrícula") é `flex: none` e, no celular,
   comia a linha inteira: o título do curso sobrava com 85px e quebrava
   sílaba a sílaba ("Jorna / da, / desca / nso"). Abaixo de 48rem a linha
   quebra em dois andares — texto em cima, selo e ação embaixo. */
.matricula-da-pessoa { flex-wrap: wrap }
.matricula-da-pessoa .lista__texto { flex: 1 1 14rem }
@media (max-width: 47.999rem) {
  .matricula-da-pessoa .lista__fim { flex: 1 1 100%; justify-content: space-between }
}
.matricula-da-pessoa__conclusao { display: block; max-width: 18rem; margin-top: var(--esp-2) }
.matricula-da-pessoa__conclusao .medidor { gap: var(--esp-1) }
.matricula-da-pessoa__conclusao .medidor__topo { font-size: var(--texto-xs) }

/* ═══ CONSOLE ═════════════════════════════════════════════════════════════ */

.quebra { overflow-wrap: anywhere; word-break: break-all; display: inline-block; max-width: 100% }

/* /admin/cursos — o link para o formulário completo mora DENTRO do cartão de
   criar, abaixo do campo, com a frase que diz para que ele serve (rodada 3). */
.montagem__novo-curso__completo { margin: var(--esp-3) 0 0 }
