/* Tokens (full design-system :root) are declared inline in
   app/views/shared/_design_tokens.html.erb, rendered by
   engines/admin/app/views/layouts/admin/application.html.erb — see
   engines/portal/app/assets/stylesheets/portal/application.css for the
   same convention. */
*, *::before, *::after { box-sizing: border-box; }
body { margin: 0; font-family: "DM Sans", system-ui, sans-serif; color: var(--text-body); background: var(--canvas); }

/* ---- Frame (topbar + horizontal nav + main) -------------------------- */
.admin-app { min-height: 100dvh; background: var(--canvas); }
.admin-topbar {
  background: var(--surface); border-bottom: 1px solid var(--border-soft);
  display: flex; align-items: center; height: 80px; padding: 0 32px; position: sticky; top: 0; z-index: 30;
}
.admin-topbar__brand { display: inline-flex; align-items: center; gap: 12px; text-decoration: none; }
.admin-topbar__logo { height: 30px; width: auto; }
.admin-topbar__divider { width: 1px; height: 22px; background: var(--border); }
.admin-topbar__wordmark { font-family: var(--font-display); font-weight: 700; text-transform: uppercase; letter-spacing: .05em; font-size: 13px; color: var(--text-title); }
@media (min-width: 641px) { .admin-topbar__logo { height: 44px; } }
.admin-topbar__staff { margin-left: auto; display: flex; align-items: center; gap: 10px; }
/* Menu da conta (mockup AdminAccountMenu): avatar + nome + caption, sem
   chip de papel; o dropdown abre por <details>, sem JS. */
.admin-account { position: relative; }
.admin-account__button { display: flex; align-items: center; gap: 9px; cursor: pointer; list-style: none; padding: 4px 6px; color: var(--text-secondary); }
.admin-account__button::-webkit-details-marker { display: none; }
.admin-account__avatar { width: 30px; height: 30px; border-radius: var(--r-pill, 999px); background: var(--purple-100, var(--purple-050)); color: var(--purple-deep, var(--purple)); display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: 12px; flex-shrink: 0; }
.admin-account__who { display: flex; flex-direction: column; line-height: 1.25; text-align: left; }
.admin-account__name { font-size: 13px; font-weight: 600; color: var(--text-title); }
.admin-account__caption { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-account__menu { position: absolute; top: calc(100% + 4px); right: 0; min-width: 215px; background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-input); box-shadow: var(--shadow-md, 0 8px 24px rgba(0, 0, 0, .14)); padding: 4px; z-index: 80; display: flex; flex-direction: column; }
.admin-account__item { display: block; width: 100%; text-align: left; font: var(--body-sm); font-size: 13px; color: var(--text-body); text-decoration: none; background: none; border: 0; padding: 8px 10px; border-radius: var(--r-input); cursor: pointer; }
.admin-account__item:hover { background: var(--canvas); color: var(--purple); }
.admin-account__divider { height: 1px; background: var(--border-soft); margin: 4px 6px; }
.admin-account__menu form { margin: 0; }
.admin-topbar__staff form { margin: 0; }
.admin-nav {
  display: flex; gap: 22px; padding: 0 32px; background: var(--surface); border-bottom: 1px solid var(--border);
  overflow-x: auto; position: sticky; top: 80px; z-index: 20;
}
.admin-nav__item {
  padding: 13px 0 11px; font-family: var(--font-display); font-weight: 700; text-transform: uppercase; font-size: 12px; letter-spacing: .03em;
  color: var(--text-secondary); text-decoration: none; border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap;
}
.admin-nav__item--active { color: var(--purple); border-bottom-color: var(--purple); }
/* Left-aligned like the mockup: the h1, the logo and the first tab share
   the same 32px ruler. No auto margins. */
.admin-app__main { padding: 22px 32px 56px; }
.admin-app__container { max-width: 1180px; }

/* ---- Visão geral (dashboard) ---------------------------------------- */
.admin-overview__title, .admin-queue__headline, .admin-headline {
  font: var(--h1); font-size: 24px; color: var(--text-title); text-transform: uppercase; margin: 0 0 16px;
}
.admin-card { background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 16px 18px; margin-bottom: 16px; }
.admin-card__title { font: var(--eyebrow); font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-title); margin: 0 0 6px; }
.admin-card__note { font: var(--body-sm); color: var(--text-secondary); margin: 0 0 16px; }
/* Nota do bloco como callout (mockup: caixa lilás acima das barras), não
   como legenda cinza solta. */
.admin-card__callout { display: flex; gap: 12px; align-items: flex-start; background: var(--purple-050); border-radius: var(--r-card); padding: 13px 15px; font-size: 13px; line-height: 1.5; color: var(--text-body); margin: 0 0 14px; }

.admin-sga { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 14px; }
/* Aprendizado (mockup block 5): loop de correção + farol de SLA da fila. */
.admin-learning__count { font-size: 14px; color: var(--text-body); margin: 0 0 8px; }
.admin-learning__count b { color: var(--purple); font-weight: 700; }
.admin-learning__divider { height: 1px; background: var(--border-soft); margin: 12px 0 8px; }
.admin-sla-farol { display: flex; align-items: center; gap: 9px; font-size: 13px; color: var(--text-body); margin: 0; }
.admin-sla-farol__dot { width: 10px; height: 10px; border-radius: var(--r-pill, 999px); flex-shrink: 0; }
.admin-sla-farol[data-sla=ok] .admin-sla-farol__dot { background: var(--success); }
.admin-sla-farol[data-sla=warn] .admin-sla-farol__dot { background: var(--warning); }
.admin-sla-farol[data-sla=late] .admin-sla-farol__dot { background: var(--error); }
.admin-card__title .admin-eval-tag { margin-left: 8px; }
.admin-sga__head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 6px; }
.admin-sga__label { font: var(--body-sm); color: var(--text-body); }
.admin-sga__pct { font: var(--label); font-weight: 700; color: var(--purple); }
.admin-sga__bar { height: 8px; background: var(--surface-2); border-radius: var(--r-pill); overflow: hidden; }
.admin-sga__fill { display: block; height: 100%; background: var(--purple); border-radius: var(--r-pill); }

/* Trilha contínua: em tela estreita o mockup rola na horizontal em vez de
   quebrar — quebrando, a leitura de cadeia se perde e sobra seta órfã. */
.admin-funnel { display: flex; align-items: center; overflow-x: auto; }
.admin-funnel__stage { flex: 1; min-width: 0; text-align: center; }
@media (max-width: 900px) { .admin-funnel__stage { min-width: 84px; } }
.admin-funnel__count { display: block; font-family: var(--font-display); font-weight: 700; font-size: 30px; color: var(--purple); line-height: 1; }
.admin-funnel__label { font: var(--label); font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); }
.admin-funnel__arrow { color: var(--disabled); flex-shrink: 0; }

.admin-matchdist { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
@media (min-width: 641px) { .admin-matchdist { grid-template-columns: repeat(5, 1fr); } }
/* Ladrilho do mockup (DashBlock > Match na base): fundo rebaixado, sem
   borda e sem faixa lateral — a cor do nível mora na pílula, não na caixa.
   A Saúde do match mostra a mesma distribuição e usa o mesmo ladrilho:
   declarar duas vezes convida as telas a divergirem na próxima mexida. */
.admin-matchdist__box,
.admin-health__level { background: var(--canvas); border-radius: var(--r-card); padding: 12px 14px; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; min-width: 0; }
/* MatchPill do mockup: onde o nível é o ASSUNTO (Visão geral, Regras,
   Saúde do match) ele é cápsula de 12px em CAPS com fundo tingido, com o
   glifo SVG do nível (RadarIconsHelper). A .admin-pill miúda continua
   valendo para linha de Associadas, que é o MiniMatchPill do mockup. */
.admin-matchpill { display: inline-flex; align-items: center; gap: 5px; font: var(--label); font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; padding: 5px 11px; border-radius: var(--r-pill); white-space: nowrap; }
.admin-matchpill .radar-icon { flex-shrink: 0; }
.admin-matchpill--high { color: var(--match-alto); background: var(--match-alto-bg); }
.admin-matchpill--medium { color: var(--match-medio); background: var(--match-medio-bg); }
.admin-matchpill--low { color: var(--match-baixo); background: var(--match-baixo-bg); }
.admin-matchpill--ineligible { color: var(--match-inelegivel); background: var(--match-inelegivel-bg); }
.admin-matchpill--pending { color: var(--match-pending); background: var(--match-pending-bg); }
/* A cor por nível saiu daqui: mora na pílula, que é onde o mockup a põe.
   Sem regra por data-level, o atributo fica só como gancho de teste. */
.admin-matchdist__count,
.admin-health__count { font-family: var(--font-display); font-weight: 700; font-size: 24px; color: var(--text-title); }

/* ---- Curadoria: fila (tabela, mockup FilaView) ----------------------- */
.admin-queue__headline { font: var(--h1); font-size: 26px; color: var(--text-title); text-transform: uppercase; margin: 0 0 20px; }
/* QA-050: medido em 18px -- a linha inteira já navega (row-link), mas
   o link em si é alvo próprio pra quem tabula ou usa leitor de tela. */
.admin-queue__name {
  display: inline-flex; align-items: center; min-height: 24px;
  font: var(--body-sm); color: var(--text-title); min-width: 0; text-decoration: none; font-weight: 600; overflow-wrap: anywhere;
}
a.admin-queue__name:hover { color: var(--purple); text-decoration: underline; }
.admin-queue__publish {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--font-display); font-weight: 700; text-transform: uppercase; letter-spacing: .02em; font-size: 12px;
  color: var(--cta-fg); background: var(--cta-bg); border: 0; border-radius: var(--r-button);
  padding: 8px 14px; cursor: pointer; white-space: nowrap;
}
.admin-queue__publish:hover { background: var(--cta-bg-hover); }
.admin-queue__publish[disabled] { cursor: progress; opacity: .85; }
/* Estado "em processamento" de um submit (Turbo troca o conteúdo do
   botão via data-turbo-submits-with e desabilita sozinho -- sem JS
   nosso). O ícone de sync já existe no design system; só gira aqui. */
@keyframes admin-spin { to { transform: rotate(360deg); } }
.admin-spin { display: inline-flex; animation: admin-spin .8s linear infinite; }
@media (prefers-reduced-motion: reduce) { .admin-spin { animation-duration: 2.4s; } }

.admin-flash { padding: 10px 14px; border-radius: var(--r-input); font: var(--body-sm); margin: 0 0 16px; }
.admin-flash--ok { background: var(--success-bg); color: var(--success); }
.admin-access-link { display: flex; align-items: center; gap: 12px; }
.admin-access-link__url { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; overflow-wrap: anywhere; user-select: all; flex: 1; color: var(--text-body); }
.admin-access-link__copy { flex: none; white-space: nowrap; }
.admin-flash--err { background: var(--error-bg); color: var(--error); }

/* ---- Forms (upload + revisão) ---------------------------------------- */
.admin-field {
  display: flex; flex-direction: column; gap: 6px; margin: 0 0 14px;
  font: var(--label); font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary);
}
.admin-field__icon-label { display: inline-flex; align-items: center; gap: 6px; }
.admin-field input, .admin-field select, .admin-field textarea, .admin-textarea {
  width: 100%; font: var(--body-sm); font-size: 14px; font-family: inherit; color: var(--text-body);
  text-transform: none; letter-spacing: normal;
  padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-input); background: var(--surface);
}
.admin-field textarea, .admin-textarea { resize: vertical; }
.admin-form__actions { display: flex; align-items: center; gap: 14px; margin-top: 6px; }
.admin-btn {
  font-family: var(--font-display); font-weight: 700; text-transform: uppercase; letter-spacing: .02em; font-size: 12px;
  color: var(--purple); background: var(--surface); border: 1px solid var(--purple); border-radius: var(--r-button);
  padding: 8px 14px; cursor: pointer; white-space: nowrap;
}
.admin-btn:hover { background: var(--purple-050); }
.admin-link { font: var(--body-sm); font-size: 13px; color: var(--text-secondary); text-decoration: underline; }

/* Match na base (Visão geral): links pro detalhe da saúde do match e do
   orçamento de IA -- mesmo fundo dos ladrilhos de nível do card acima. */
.admin-quicklinks { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }
.admin-quicklink {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 10px 14px; background: var(--canvas); border-radius: var(--r-card);
  font: var(--body-sm); font-size: 13px; font-weight: 700; color: var(--purple);
  text-decoration: none;
}
.admin-quicklink .radar-icon { color: var(--purple); flex-shrink: 0; }
.admin-quicklink:hover { background: var(--purple-050); }

/* ---- Login (bare) --------------------------------------------------- */
.admin-bare { min-height: 100dvh; display: flex; align-items: center; justify-content: center; padding: 40px 20px; background: var(--purple-deep); }
/* The wrapper is a flex item: without width it shrinks to its content and
   the card's max-width never gets to act. */
.admin-auth { width: 100%; display: flex; justify-content: center; }
/* Same measure as the portal entry card, so the two doors of the product
   read as one family. */
.admin-auth__card { background: var(--surface); border-radius: var(--r-card); box-shadow: var(--shadow-lg); padding: 36px 32px; width: 100%; max-width: 420px; display: flex; flex-direction: column; gap: 22px; }
.admin-auth__brand { height: 44px; width: auto; align-self: center; }
.admin-auth__title { font: var(--h2); font-size: 20px; text-transform: uppercase; color: var(--text-title); margin: 0; text-align: center; }
.admin-auth__note { font: var(--body-sm); color: var(--text-secondary); margin: 0; text-align: center; }
.admin-auth__error { font: var(--caption); color: var(--error); margin: 0; }
.admin-auth__form { display: flex; flex-direction: column; gap: 12px; margin-top: 6px; }
.admin-auth__label { font: var(--label); font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); }
.admin-auth__input { padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-input); font: var(--body-sm); font-size: 14px; color: var(--text-body); }
.admin-auth__input--code { font-size: 18px; letter-spacing: .3em; text-align: center; }
.admin-auth__input:focus { outline: none; border-color: var(--purple); box-shadow: var(--focus-ring); }
.admin-auth__submit { font-family: var(--font-display); font-weight: 700; text-transform: uppercase; letter-spacing: .02em; font-size: 13px; color: var(--cta-fg); background: var(--cta-bg); border: 0; border-radius: var(--r-button); padding: 12px; cursor: pointer; }
.admin-auth__submit:hover { background: var(--cta-bg-hover); }

/* --- Associadas + ficha 360 (spec 2026-08-18) --- */
.admin-back {
  font: var(--body-sm); color: var(--purple); text-decoration: none;
  display: inline-flex; align-items: center; min-height: 24px; /* QA-029: alvo de toque < 24px */
}
.admin-back:hover { text-decoration: underline; }

/* Botão "Voltar" do passo 2 (código) -- mesmo tratamento do btn-ghost do
   portal (engines separados não compartilham classe, só o valor). */
.admin-auth__ghost { display: block; width: 100%; background: transparent; color: var(--purple); border: 1.5px solid var(--purple);
  border-radius: var(--r-button); font-family: var(--font-display); font-weight: 700; text-transform: uppercase;
  letter-spacing: .02em; padding: 12px 20px; text-align: center; text-decoration: none; cursor: pointer;
  transition: background var(--dur) var(--ease); box-sizing: border-box; }
.admin-auth__ghost:hover { background: var(--purple-050); }
/* Busca com o ícone embutido (mockup Associadas360View). */
.admin-members__search { position: relative; max-width: 340px; margin-bottom: 14px; }
.admin-members__search .radar-icon { position: absolute; left: 11px; top: 9px; color: var(--text-secondary); pointer-events: none; }
.admin-members__search-input { width: 100%; padding: 8px 12px 8px 36px; border: 1px solid var(--border); border-radius: var(--r-input); font: var(--body-sm); color: var(--text-body); }
.admin-members { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; max-width: 1040px; }
/* Linha do mockup (Assoc360Row): pills são a terceira linha da coluna de
   informação; o chevron fecha a linha à direita. */
.admin-members__link { display: flex; align-items: center; gap: 10px; padding: 13px 16px; background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); text-decoration: none; }
.admin-members__link:hover { background: var(--canvas); }
.admin-members__link:hover .admin-members__name { text-decoration: underline; }
.admin-members__link:hover .admin-members__chevron { color: var(--purple); }
.admin-members__info { flex: 1; display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.admin-members__chevron { color: var(--disabled, var(--text-secondary)); flex-shrink: 0; display: inline-flex; }
.admin-members__name { font-size: 13.5px; font-weight: 600; color: var(--text-title); }
.admin-members__meta { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-members__pendencies { font: var(--caption); font-size: 11px; font-weight: 700; color: var(--warning); }
.admin-members__chips { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.admin-members__empty { font: var(--body-sm); color: var(--text-secondary); list-style: none; }
.admin-pill { display: inline-flex; align-items: center; gap: 3px; font-size: 10.5px; font-weight: 700; border-radius: var(--r-pill, 999px); padding: 2px 7px; white-space: nowrap; }
.admin-pill--high { color: var(--match-alto); background: var(--match-alto-bg); }
.admin-pill--medium { color: var(--match-medio); background: var(--match-medio-bg); }
.admin-pill--low { color: var(--match-baixo); background: var(--match-baixo-bg); }
.admin-chip { font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; padding: 3px 8px; border-radius: var(--r-pill, 999px); }
.admin-chip--active { color: var(--success); background: var(--success-bg); }
.admin-chip--inactive { color: var(--text-secondary); background: var(--surface-2); }
.admin-chip--alert { color: var(--warning); background: var(--warning-bg); }
/* QA-R4 03: a variante com ícone (possível duplicata) precisa do mesmo
   alinhamento das outras chips com ícone -- sem isso o warning cola no
   texto, sem espaço nem centralização vertical. */
.admin-chip--alert:has(svg) { display: inline-flex; align-items: center; gap: 5px; }
.admin-requests__subjects { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 16px; }

/* 11.9 · Agente WhatsApp: saúde, contadores e transcrição (leitura).
   O admin-block não tem padding próprio — cada filho carrega o seu
   (idioma da casa, ver .admin-rules__*). */
.admin-whatsapp { display: flex; flex-direction: column; gap: 16px; max-width: 860px; }
.admin-headline__sub { font: var(--body-sm); font-weight: 400; color: var(--text-secondary); margin-left: 10px; }
.admin-whatsapp__intro { font: var(--body-sm); color: var(--text-secondary); margin: 4px 0 16px; }
.admin-whatsapp__flash { margin: 12px 18px 4px; }
.admin-whatsapp__stats { display: flex; flex-wrap: wrap; gap: 10px 22px; padding: 12px 18px; }
.admin-whatsapp__stat { font: var(--body-sm); font-variant-numeric: tabular-nums; }
.admin-whatsapp__conversation { margin: 0; padding: 9px 18px; border-top: 1px solid var(--border-soft); }
.admin-whatsapp__link { text-decoration: none; color: inherit; }
.admin-whatsapp__link:hover b { text-decoration: underline; }
.admin-whatsapp__empty, .admin-whatsapp__config { font: var(--body-sm); color: var(--text-secondary); margin: 0; padding: 12px 18px; }
.admin-whatsapp__config + .admin-whatsapp__config { padding-top: 0; }
.admin-whatsapp__turn { display: grid; grid-template-columns: 90px 1fr; gap: 2px 12px; padding: 10px 18px; border-bottom: 1px solid var(--border-soft); }
.admin-whatsapp__turn:last-child { border-bottom: none; }
.admin-whatsapp__who { font-weight: 700; font-size: 12px; }
.admin-whatsapp__turn--radar .admin-whatsapp__who { color: var(--purple); }
.admin-whatsapp__at { grid-column: 1; font-size: 11px; color: var(--text-secondary); }
.admin-whatsapp__text { grid-column: 2; grid-row: 1 / span 2; white-space: pre-wrap; }
.admin-ficha__block { background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 18px 20px; margin-bottom: 14px; max-width: 760px; }
/* Ficha 360 como drawer (mockup FichaDrawer): cabeçalho com subtítulo e
   fechar; seções FichaSection; DField em grade de duas colunas. */
.admin-drawer__panel .admin-ficha__block { border: 0; padding: 0 0 4px; margin-bottom: 14px; max-width: none; }
.admin-ficha__header { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 14px; }
.admin-ficha__title { font: var(--h2); font-size: 18px; color: var(--text-title); margin: 0; line-height: 1.3; text-transform: none; }
.admin-ficha__subtitle { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-ficha__close { color: var(--text-secondary); padding: 4px; flex-shrink: 0; display: inline-flex; }
.admin-ficha__close:hover { color: var(--purple); }
.admin-ficha__section-title { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); margin: 0 0 8px; }
.admin-ficha__grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
@media (max-width: 640px) { .admin-ficha__grid2 { grid-template-columns: 1fr; } }
.admin-df { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.admin-df__k { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-df__v { font-size: 13px; color: var(--text-body); overflow-wrap: anywhere; }
.admin-ficha__support { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--text-body); margin: 0; }
/* Preferências e notificações (mockup): naturezas aceitas + canais por pessoa. */
.admin-preferences__group { display: flex; flex-direction: column; gap: 6px; margin-bottom: 10px; }
.admin-preferences__natures, .admin-preferences__tags { display: flex; gap: 6px; flex-wrap: wrap; }
.admin-preferences__person { display: flex; gap: 10px; flex-wrap: wrap; align-items: baseline; font-size: 12.5px; color: var(--text-body); margin: 0; padding: 6px 0; border-bottom: 1px solid var(--border-soft); }
.admin-preferences__person:last-child { border-bottom: 0; }
.admin-preferences__who { font-weight: 600; color: var(--text-title); min-width: 120px; }
.admin-preferences__channel { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-invite__open { display: inline-block; margin-top: 8px; }
.admin-invite .admin-invite__open::-webkit-details-marker { display: none; }
.admin-invite summary.admin-invite__open { list-style: none; }
.admin-ficha__block h2 { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); margin: 0 0 10px; }
.admin-ficha__grid { display: grid; grid-template-columns: max-content 1fr; gap: 6px 18px; margin: 0; }
.admin-ficha__grid dt { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-ficha__grid dd { font: var(--body-sm); font-size: 13px; color: var(--text-body); margin: 0; }
.admin-ficha__note { font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 8px 0 0; }
.admin-ficha__ok { font: var(--body-sm); color: var(--success); margin: 0; }
.admin-ficha__pills { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.admin-pendencies { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.admin-pendency { font: var(--body-sm); font-size: 12.5px; color: var(--warning); background: var(--warning-bg); border-radius: var(--r-input); padding: 7px 10px; }
.admin-people { list-style: none; margin: 0 0 10px; padding: 0; }
.admin-people__row { display: flex; align-items: center; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--border-soft); font-size: 13px; color: var(--text-body); }
.admin-people__actions { display: flex; gap: 8px; margin-left: auto; }
.admin-people__name { flex: 1; font-weight: 600; color: var(--text-title); }
.admin-people__role, .admin-people__state { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-invite { margin-top: 10px; }
/* Só o cursor: cor e fonte são dos variants de .admin-btn no próprio
   summary — a regra genérica com color aqui vencia o .admin-btn cheio do
   Equipe por especificidade e pintava texto roxo sobre fundo roxo. */
.admin-invite summary { cursor: pointer; }
/* Design-system variants: the yellow CTA is reserved for publishing;
   the default action is purple; ghost carries a 1.5px purple border. */
.admin-btn { font-family: var(--font-display); font-weight: 700; text-transform: uppercase; letter-spacing: .02em; font-size: 12px; color: #fff; background: var(--purple); border: 0; border-radius: var(--r-button); padding: 9px 14px; cursor: pointer; }
.admin-btn:hover { background: var(--purple-deep); }
.admin-btn--cta { background: var(--cta-bg); color: var(--cta-fg); }
.admin-btn--cta:hover { background: var(--cta-bg-hover); color: var(--cta-fg-hover); }
.admin-btn--ghost { background: none; color: var(--purple); border: 1.5px solid var(--purple); }
.admin-btn--ghost:hover { background: var(--purple-050); }
.admin-btn--link { display: inline-block; text-decoration: none; }

/* --- Fontes (spec 2026-08-18; lista alinhada ao mockup FontesView) --- */
.admin-sources__intro { font: var(--body-sm); font-size: 12.5px; color: var(--text-secondary); max-width: 640px; margin: 0 0 14px; }
.admin-sources__topbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; max-width: 1040px; margin-bottom: 14px; }
.admin-sources__table { max-width: 1040px; }
.admin-sources__topbar .admin-sources__intro { flex: 1; min-width: 220px; margin: 0; }
.admin-sources__topbar .admin-modal-host { margin-left: auto; }
/* A célula de ação: botão de escada ocupa a largura toda da coluna, com
   respiro à direita para não colar na borda da tabela. (td.classe para
   vencer a especificidade do .admin-table td genérico.) */
.admin-table td.admin-sources__action { min-width: 200px; padding-right: 16px; }
/* A tabela cabe nos 1040px sem rolagem lateral: a URL da fonte trunca com
   reticências em vez de alargar a coluna Modo, e o cabeçalho da última
   coluna pode quebrar linha. */
.admin-table td .admin-ficha__note { max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* O título quebra em duas linhas para a tag "Em avaliação" caber ao lado. */
.admin-th__eval { display: inline-flex; align-items: center; gap: 6px; white-space: normal; flex-wrap: nowrap; }
.admin-th__eval-title { max-width: 96px; line-height: 1.25; }
.admin-sources__url { display: block; max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.admin-sources__action form { display: block; margin: 0; }
.admin-sources__action .admin-btn { display: block; width: 100%; }
.admin-sources__count { font-weight: 700; color: var(--purple); }
/* Modal CSS-only: <details> abre o backdrop fixo; Cancelar recarrega a rota. */
.admin-modal-host summary { list-style: none; }
.admin-modal-host summary::-webkit-details-marker { display: none; }
.admin-modal-host__open { display: inline-block; }
.admin-modal-backdrop { position: fixed; inset: 0; background: rgba(23, 24, 26, .4); z-index: 70; display: flex; align-items: center; justify-content: center; }
.admin-modal { width: 460px; max-width: 92%; background: var(--surface); border-radius: var(--r-card); box-shadow: var(--shadow-lg, 0 12px 32px rgba(0, 0, 0, .18)); padding: 22px; }
.admin-modal__title { font-family: var(--font-display); font-weight: 700; text-transform: uppercase; font-size: 15px; color: var(--text-title); margin: 0 0 14px; }
.admin-modal__form { display: flex; flex-direction: column; gap: 12px; font: var(--body-sm); color: var(--text-body); }
.admin-modal__form input, .admin-modal__form textarea { width: 100%; padding: 9px 12px; border: 1px solid var(--border); border-radius: var(--r-input); font: var(--body-sm); font-size: 13px; }
.admin-modal__actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; }
/* Publicação automática (em avaliação): o switch é visual, sem mecanismo. */
.admin-eval-tag { font: var(--label); font-size: 9.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--text-secondary); border: 1px dashed var(--border); padding: 2px 7px; white-space: nowrap; }
.admin-switch { display: inline-block; width: 34px; height: 18px; border-radius: 999px; background: var(--surface-2); border: 1px solid var(--border); vertical-align: middle; position: relative; }
.admin-switch__knob { position: absolute; top: 1px; left: 1px; width: 14px; height: 14px; border-radius: 50%; background: var(--surface); box-shadow: 0 1px 2px rgba(0, 0, 0, .2); }
.admin-switch--on { background: var(--purple); border-color: var(--purple); }
.admin-switch--on .admin-switch__knob { left: auto; right: 1px; }
.admin-switch--disabled { opacity: .6; cursor: not-allowed; }
.admin-rule__lock { display: inline-flex; align-items: center; gap: 8px; color: var(--text-secondary); }
.admin-team__locked { font: var(--caption); font-size: 10.5px; color: var(--text-secondary); }

/* --- Fila como tabela (mockup FilaView) --- */
/* KPIs da fila (mockup KpiCard). */
.admin-kpis { display: flex; gap: 11px; margin-bottom: 18px; flex-wrap: wrap; }
.admin-kpi { flex: 1; min-width: 180px; background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 14px 16px; display: flex; flex-direction: column; }
.admin-kpi__value { font-family: var(--font-display); font-weight: 700; font-size: 26px; color: var(--purple); line-height: 1.1; }
.admin-kpi__label { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-title); margin: 5px 0 2px; }
.admin-kpi__hint { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
/* Chips de estado do mockup: quadrados, roxos sólidos quando ativos. */
.admin-queue__toolbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 10px; }
.admin-queue__toolbar-right { margin-left: auto; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.admin-queue__counts { display: flex; gap: 8px; flex-wrap: wrap; }
.admin-queue__count-chip { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--text-secondary); border: 1px solid var(--border); border-radius: 0; padding: 6px 12px; background: var(--surface); text-decoration: none; }
a.admin-queue__count-chip:hover { border-color: var(--purple); color: var(--purple); }
.admin-queue__count-chip--active { border-color: var(--purple); color: #fff; background: var(--purple); }
.admin-queue__count-chip--active .admin-queue__count { color: #fff; opacity: .85; }
.admin-queue__search { margin-bottom: 0; max-width: 220px; }
/* Origem como pílulas com contagem (mockup ORIGEM_FILTERS). */
.admin-queue__origem { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 5px; }
.admin-queue__origem-label { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); }
.admin-queue__origem-pill { font-size: 11.5px; font-weight: 600; padding: 4px 10px; border-radius: var(--r-pill, 999px); border: 1px solid var(--border); background: var(--surface); color: var(--text-secondary); text-decoration: none; }
.admin-queue__origem-pill:hover { border-color: var(--purple); color: var(--purple); }
.admin-queue__origem-pill--active { border-color: var(--purple); background: var(--purple-050); color: var(--purple-deep, var(--purple)); }
.admin-queue__origin-note { margin: 0 0 13px; }
.admin-queue__bulk-count { font-size: 12.5px; font-weight: 600; color: var(--purple-deep, var(--purple)); }
.admin-queue__check { width: 34px; }
.admin-queue__check input { width: 16px; height: 16px; accent-color: var(--purple); cursor: pointer; }
/* QA-050: a caixa em si é 16x16 (visual), o label empresta 24x24 de alvo de toque. */
.admin-queue__check-target { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; cursor: pointer; }
/* Larguras do mockup FilaView: as colunas curtas são fixas e não quebram;
   Oportunidade fica com o resto da régua. */
.admin-queue__col-source { width: 150px; }
.admin-queue__col-origin { width: 120px; }
.admin-queue__col-state { width: 125px; }
.admin-queue__col-date { width: 110px; }
.admin-queue__col-by { width: 130px; }
.admin-queue__source { white-space: nowrap; }
.admin-queue__table .admin-chip { white-space: nowrap; }
.admin-queue__chevron-cell { width: 30px; text-align: center; }
.admin-queue__chevron {
  color: var(--disabled, var(--text-secondary));
  display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; /* QA-050: ícone de 18px, alvo de toque de 24px */
}
.admin-queue__row:hover .admin-queue__chevron { color: var(--purple); }
/* --linked entra via Stimulus no connect: o pointer e o hover de linha só
   aparecem quando o clique na linha funciona de fato (sem JS, quem navega
   são o título e o chevron). Selecionada = a linha aberta no drawer. */
.admin-queue__row--linked { cursor: pointer; transition: background var(--dur) var(--ease); }
.admin-queue__row--linked:hover { background: var(--canvas); }
.admin-queue__row--linked:hover .admin-queue__name { text-decoration: underline; }
.admin-queue__row--selected { background: var(--purple-050); box-shadow: inset 2px 0 0 var(--purple); }
.admin-queue__bulk { display: flex; align-items: center; gap: 12px; padding: 9px 13px; margin-bottom: 10px; background: var(--purple-050); border-radius: var(--r-card); flex-wrap: wrap; }
.admin-queue__count-chip .admin-queue__count { color: var(--purple); }
.admin-queue__table .admin-queue__org { display: block; margin-top: 2px; }
.admin-queue__date { color: var(--text-secondary); white-space: nowrap; }
.admin-queue__empty { text-align: center; color: var(--text-secondary); padding: 28px 12px; }
.admin-queue__origin-note { max-width: 1040px; }
.admin-chip--origin-auto { color: var(--purple); background: var(--purple-050); }
.admin-chip--origin-manual { color: var(--text-secondary); background: var(--surface-2); }
.admin-chip--origin-auto, .admin-chip--origin-manual { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.admin-chip--q-screening, .admin-chip--q-to_qualify { color: var(--text-secondary); background: var(--surface-2); }
.admin-chip--q-in_review { color: var(--purple); background: var(--purple-050); }
.admin-chip--q-published { color: var(--success); background: var(--success-bg); }
.admin-chip--q-closure_proposed { color: var(--warning); background: var(--warning-bg); }

/* Stepper da revisão (mockup Stepper): a posição na cadeia, sem JS. */
.admin-stepper { display: flex; gap: 0; max-width: 720px; margin: 0 0 16px; }
.admin-stepper__step { flex: 1; text-align: center; font: var(--label); font-size: 10px; font-weight: 500; text-transform: uppercase; letter-spacing: .03em; color: var(--text-secondary); padding: 8px 4px 6px; border-top: 2px solid var(--border); }
.admin-stepper__step--done { color: var(--success); border-top-color: var(--purple); }
.admin-stepper__step--current { color: var(--purple); font-weight: 700; border-top-color: var(--purple); }

/* Preview do card da associada (mockup PreviewOppCard). */
.admin-preview-card { max-width: 560px; }
.admin-preview-card__org { font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 0 0 4px; }
.admin-preview-card__org b { color: var(--purple); }
.admin-preview-card__name { font-family: var(--font-display); font-size: 17px; text-transform: uppercase; color: var(--text-title); margin: 0 0 8px; }
.admin-preview-card__facts { display: flex; gap: 24px; margin: 10px 0; }
.admin-preview-card__facts > div { display: flex; flex-direction: column; gap: 1px; }
.admin-preview-card__label { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-preview-card__fact { font-size: 13px; font-weight: 700; color: var(--purple); }
.admin-preview-card__note { font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 6px 0 0; }

/* Drawer da ficha de fonte — mesmo idioma do drawer de qualificação. */
.admin-sdrawer__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.admin-sdrawer__title { font-family: var(--font-display); font-size: 17px; text-transform: uppercase; color: var(--text-title); margin: 0; line-height: 1.3; }
/* Sem isso os botões da escada (aprovar/ativar/rodar/desligar) colam uns
   nos outros -- cada button_to é um <form> sem margem própria. */
.admin-sdrawer__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.admin-sdrawer__actions form { margin: 0; }

/* Drawer de qualificação (mockup ClassifyDrawer). */
.admin-qdrawer__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.admin-qdrawer__caption { font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 0 0 4px; }
.admin-qdrawer__caption b { color: var(--purple); }
.admin-qdrawer__title { font-family: var(--font-display); font-size: 17px; text-transform: uppercase; color: var(--text-title); margin: 0 0 14px; line-height: 1.3; }
.admin-qdrawer .admin-stepper { margin-bottom: 14px; }
.admin-qdrawer__chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.admin-qdrawer__status { display: inline-flex; align-items: center; gap: 6px; font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; padding: 4px 10px; border-radius: var(--r-pill, 999px); margin: 0 0 14px; }
.admin-qdrawer__status--open { color: var(--success); background: var(--success-bg); }
.admin-qdrawer__status--rolling { color: var(--purple); background: var(--purple-050); }
.admin-qdrawer__status--closed { color: var(--text-secondary); background: var(--surface-2); }
.admin-qdrawer .admin-preview-card__facts { margin: 0 0 14px; }
.admin-qdrawer .admin-preview-card__facts > div { border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 10px 12px; flex: 1; }
.admin-qdrawer__section-title { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--purple); margin: 0 0 4px; }
.admin-qdrawer__text { font-size: 13px; line-height: 1.5; color: var(--text-body); margin: 0 0 14px; }
.admin-qdrawer__footer { margin-top: auto; border-top: 1px solid var(--border-soft); padding-top: 14px; }
.admin-qdrawer__published { display: inline-flex; align-items: center; gap: 6px; font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--success); background: var(--success-bg); border-radius: var(--r-pill, 999px); padding: 4px 10px; margin: 0 0 6px; }
.admin-qdrawer__actions { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.admin-qdrawer__actions form { margin: 0; flex: 1; }
.admin-qdrawer__actions > .admin-btn { flex: 1; }
.admin-qdrawer__actions form .admin-btn, .admin-qdrawer__actions > .admin-btn { display: block; width: 100%; text-align: center; box-sizing: border-box; }
.admin-qdrawer { display: flex; flex-direction: column; }
/* Drawer do admin (padrão do portal): backdrop-link + painel fixo. */
.admin-drawer__backdrop { position: fixed; inset: 0; background: rgba(15, 15, 20, .35); z-index: 60; display: block; }
.admin-drawer__panel { position: fixed; top: 0; right: 0; bottom: 0; width: 440px; max-width: 94vw; background: var(--surface); box-shadow: -8px 0 28px rgba(0, 0, 0, .16); z-index: 61; overflow-y: auto; padding: 24px 26px 40px; }
@media (max-width: 640px) { .admin-drawer__panel { width: 100vw; max-width: 100vw; } }
.admin-team__invite-host { margin-bottom: 14px; }
.admin-team__invite-host summary { list-style: none; }
.admin-team__invite-host summary::-webkit-details-marker { display: none; }
.admin-team__invite-open { display: inline-block; }
.admin-team__invite-host[open] .admin-team__invite-open { opacity: .6; }
.admin-switch__label { font-size: 12px; color: var(--text-secondary); margin-left: 8px; vertical-align: middle; }
.admin-sources__eval-note { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; background: var(--surface-2); border-radius: var(--r-card); max-width: 1040px; margin-top: 14px; }
.admin-sources__eval-note p { font-size: 12px; color: var(--text-secondary); margin: 0; }
/* Card do upload manual (canal do curador apresentado como fonte). */
.admin-source-card { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 16px 18px; max-width: 1040px; margin-top: 14px; }
.admin-source-card__icon { width: 40px; height: 40px; border-radius: 8px; background: var(--purple-050); color: var(--purple); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.admin-source-card__body { flex: 1; min-width: 240px; }
.admin-source-card__title { display: flex; gap: 9px; align-items: center; font-size: 13px; font-weight: 700; color: var(--text-title); margin: 0; }
.admin-source-card__desc { font-size: 12px; color: var(--text-secondary); margin: 3px 0 0; }
.admin-chip--available { color: var(--purple); background: var(--purple-050); }
/* Onda 2 · Roadmap: chips tracejados, só leitura. */
.admin-wave2 { max-width: 1040px; margin-top: 16px; }
.admin-wave2__title { font: var(--eyebrow, var(--label)); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--text-secondary); margin: 0 0 8px; }
.admin-wave2__chips { display: flex; gap: 8px; flex-wrap: wrap; }
.admin-wave2__chip { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: var(--text-secondary); border: 1px dashed var(--border); padding: 6px 11px; }
.admin-wave2__tag { font: var(--label); font-size: 9px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--disabled, var(--text-secondary)); }
.admin-flash--warn { background: var(--warning-bg); color: var(--warning); }
.admin-requests__intro { font: var(--body-sm); font-size: 12.5px; color: var(--text-secondary); max-width: 720px; margin: 0 0 8px; }
/* Disparos: contagem absoluta à direita do rótulo, sem barra de percentual.
   (Modificador próprio — a linha com barra da Visão geral continua em bloco.) */
.admin-sga__row--count { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 4px 0; }
.admin-sga__count { font-weight: 700; color: var(--purple); }
.admin-request__head { display: flex; align-items: center; gap: 8px; }
.admin-request__icon { width: 28px; height: 28px; border-radius: 50%; background: var(--purple-050); color: var(--purple); display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; }
.admin-request__message summary { cursor: pointer; }
.admin-request__message[open] summary { display: none; }
/* Largura é decisão da tela, não do componente: no mockup cada view fixa o
   próprio teto (Fontes/Registro 1040, Equipe 980) e a Fila não tem nenhum —
   a tabela alinha com os KPI cards na régua do container. */
.admin-table__wrap { background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); overflow-x: auto; }
.admin-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.admin-table th { text-align: left; font-family: var(--font-display); font-weight: 700; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); background: var(--canvas); padding: 9px 12px; border-bottom: 1px solid var(--border); white-space: nowrap; }
.admin-table td { padding: 11px 12px; border-bottom: 1px solid var(--border-soft); color: var(--text-body); vertical-align: middle; }
.admin-table tr:last-child td { border-bottom: 0; }
.admin-table__link {
  font-weight: 700; color: var(--text-title); text-decoration: none;
  display: inline-flex; align-items: center; min-height: 24px; /* QA-050: alvo de toque < 24px */
}
.admin-table__link:hover { color: var(--purple); text-decoration: underline; }
.admin-table td .admin-ficha__note { display: block; margin: 2px 0 0; }
.admin-chip--pending_approval { color: var(--warning); background: var(--warning-bg); }
.admin-chip--approved { color: var(--purple); background: var(--purple-050); }
.admin-source__form { display: flex; flex-direction: column; gap: 10px; max-width: 560px; font: var(--body-sm); color: var(--text-body); }
.admin-source__form input, .admin-source__form textarea { width: 100%; padding: 8px 10px; border: 1px solid var(--border); border-radius: var(--r-input); font: var(--body-sm); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }
/* Selects na identidade da casa (chevron próprio, nada de widget do SO).
   Fonte de corpo, não mono: método e cadência são escolha, não código. */
.admin-source__form select { appearance: none; -webkit-appearance: none; width: 100%; padding: 8px 32px 8px 10px; border: 1px solid var(--border); border-radius: var(--r-input); font: var(--body-sm); font-size: 12.5px; color: var(--text-body); background-color: var(--surface); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='16' height='16' fill='%23707076'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 10px center; cursor: pointer; }
.admin-source__form select:focus, .admin-source__form input:focus, .admin-source__form textarea:focus { outline: none; border-color: var(--purple); }
.admin-runs { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.admin-runs__row { display: flex; align-items: baseline; gap: 10px; font-size: 12.5px; color: var(--text-body); padding: 6px 0; border-bottom: 1px solid var(--border-soft); }
.admin-runs__result { font-weight: 700; text-transform: uppercase; font-size: 10.5px; letter-spacing: .04em; padding: 2px 7px; border-radius: var(--r-pill, 999px); background: var(--surface-2); color: var(--text-secondary); }
.admin-runs__result--ok { color: var(--success); background: var(--success-bg); }
.admin-runs__result--partial { color: var(--warning); background: var(--warning-bg); }
.admin-runs__result--suspicious, .admin-runs__result--blocked, .admin-runs__result--failed { color: var(--error); background: var(--error-bg); }
.admin-runs__meta { font: var(--caption); font-size: 11px; color: var(--text-secondary); }

/* --- Atendimento: kanban da fila de solicitações (spec 2026-08-18) --- */
.admin-board { display: grid; grid-template-columns: repeat(3, minmax(240px, 1fr)); gap: 14px; align-items: start; max-width: 1040px; }
@media (max-width: 900px) { .admin-board { grid-template-columns: 1fr; } }
.admin-board__column { background: var(--surface-2); border-radius: var(--r-card); padding: 12px; display: flex; flex-direction: column; gap: 10px; }
.admin-board__title { font-family: var(--font-display); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; font-size: 11.5px; color: var(--text-title); margin: 0; display: flex; align-items: center; gap: 8px; }
.admin-board__count { font: var(--caption); font-size: 11px; font-weight: 700; color: var(--text-secondary); }
.admin-board__empty { font: var(--caption); font-size: 11px; color: var(--disabled); margin: 0; }
.admin-board__dismissed { margin-top: 16px; max-width: 1100px; }
.admin-board__dismissed summary { cursor: pointer; font: var(--body-sm); color: var(--text-secondary); }
.admin-request { background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 13px 14px; display: flex; flex-direction: column; gap: 9px; }
.admin-request__sla { display: inline-flex; align-items: center; gap: 5px; font-weight: 600; }
.admin-request__sla::before { content: ""; width: 7px; height: 7px; border-radius: 999px; background: currentColor; display: inline-block; }
.admin-request__sla--ok { color: var(--success); }
.admin-request__kind { font: var(--label); font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em; color: var(--purple-deep); }
.admin-request__member {
  font-size: 13px; font-weight: 600; color: var(--text-title); text-decoration: none;
  display: inline-flex; align-items: center; min-height: 24px; /* QA-050: alvo de toque < 24px */
}
.admin-request__member:hover { text-decoration: underline; }
/* 9.5: qual match a contestação é sobre -- sem isso o curador só vê
   quem reclamou e o texto livre, nunca de qual edital. */
.admin-request__opportunity {
  display: inline-flex; align-items: center; min-height: 24px; /* QA-050: alvo de toque < 24px */
  font-size: 12px; color: var(--purple); text-decoration: none;
}
.admin-request__opportunity:hover { text-decoration: underline; }
.admin-request__meta, .admin-request__owner { font: var(--caption); font-size: 10.5px; color: var(--text-secondary); }
.admin-request__sla--warn { color: var(--warning); font-weight: 700; }
.admin-request__sla--late { color: var(--error); font-weight: 700; }
.admin-request__message { font-size: 12.5px; color: var(--text-body); margin: 0; line-height: 1.45; }
.admin-request__field { font-size: 12.5px; color: var(--text-body); margin: 0; line-height: 1.45; }
.admin-request__actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.admin-request__actions form { margin: 0; }
.admin-request__actions .admin-btn { font-size: 12px; padding: 9px 14px; }
.admin-requests { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }

/* Regras de match (mockup RegrasView): the narrowest admin screen (860),
   blocks of rows instead of a table -- each row is a rule, not a record. */
.admin-rules { display: flex; flex-direction: column; gap: 16px; max-width: 860px; }
.admin-rules__note { display: flex; gap: 12px; padding: 16px; margin: 0; background: var(--purple-050); border-radius: var(--r-card); font-size: 13px; line-height: 1.5; color: var(--text-body); }
.admin-block { background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); overflow: hidden; }
.admin-block__head { padding: 14px 18px; border-bottom: 1px solid var(--border-soft); }
.admin-block__title { font: var(--label); font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-title); margin: 0; }
.admin-block__sub { font: var(--caption); font-size: 11.5px; color: var(--text-secondary); margin: 4px 0 0; }
.admin-rules__group { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--text-secondary); margin: 0; padding: 14px 18px 4px; }
.admin-rules__hint, .admin-rules__conditional { font: var(--caption); font-size: 11.5px; line-height: 1.5; color: var(--text-secondary); margin: 0; padding: 4px 18px 8px; }
.admin-rule { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 11px 18px; border-top: 1px solid var(--border-soft); }
.admin-rule__label { display: block; font-size: 13px; font-weight: 600; color: var(--text-title); }
.admin-rule__criterion { display: block; font: var(--caption); font-size: 11px; color: var(--text-secondary); margin-top: 2px; }
.admin-rule__state { font: var(--label); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; white-space: nowrap; color: var(--text-secondary); background: var(--surface-2); border-radius: var(--r-pill, 999px); padding: 3px 8px; }
.admin-rule--roadmap .admin-rule__label { font-weight: 500; color: var(--text-body); }
.admin-rules__footer { font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 0; padding: 12px 18px; border-top: 1px solid var(--border-soft); }
.admin-rules__levels { display: flex; gap: 8px; flex-wrap: wrap; padding: 14px 18px 4px; }
.admin-pill--ineligible { color: var(--match-inelegivel); background: var(--match-inelegivel-bg); }
.admin-pill--pending { color: var(--match-pending); background: var(--match-pending-bg); }
.admin-rules__form { display: flex; flex-direction: column; gap: 8px; padding: 14px 18px; }
.admin-rules__label { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-secondary); }
.admin-rules__textarea, .admin-rules__input, .admin-rules__prompt {
  width: 100%; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; line-height: 1.55;
  padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--r-input); color: var(--text-body); background: var(--canvas);
}
.admin-rules__textarea { resize: vertical; }
.admin-rules__prompt { width: auto; margin: 14px 18px; white-space: pre-wrap; }
.admin-rules__form .admin-btn { align-self: flex-start; }
.admin-rules__history { padding: 0 0 14px; }
/* QA-R4 (22/09): virou <details> pra caber o texto da versão -- o flex
   de sempre migra pro <summary> (linha de carimbo), o resto empilha embaixo. */
.admin-rules__history-row { font-size: 12px; color: var(--text-secondary); margin: 0; padding: 5px 18px; }
.admin-rules__history-row summary { display: flex; gap: 10px; align-items: baseline; cursor: pointer; list-style: none; }
.admin-rules__history-row summary::-webkit-details-marker { display: none; }
.admin-rules__prompt--history { margin: 10px 0; font-size: 11px; max-height: 220px; overflow-y: auto; }
.admin-rules__history-row .admin-btn--link { margin: 0 0 8px; }

/* Registro de atividades (mockup LogsView): a wide read-only table, the
   trail of who did what. */
.admin-activity { max-width: 1040px; }
.admin-activity__intro { font: var(--body-sm); font-size: 14px; color: var(--text-body); margin: 0 0 14px; }
.admin-activity__empty { font: var(--body-sm); color: var(--text-secondary); background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 18px 20px; max-width: 1040px; }
.admin-activity__when { color: var(--text-secondary); white-space: nowrap; font-variant-numeric: tabular-nums; }
.admin-activity__who { font-weight: 600; color: var(--text-title); }
.admin-chip--role { color: var(--purple); background: var(--purple-050); display: inline-flex; align-items: center; gap: 5px; }
.admin-ladder__name .radar-icon { vertical-align: -2px; margin-right: 5px; color: var(--purple); }
.admin-activity__more { display: inline-block; margin-top: 14px; }
.admin-activity__end { font: var(--body-sm); color: var(--text-secondary); margin: 0; }

/* Equipe & Acessos (mockup AcessosView): a escada de papéis + a tabela de
   quem tem acesso, com os controles que a regra de concessão permite. */
.admin-team { display: flex; flex-direction: column; gap: 16px; max-width: 980px; }
.admin-ladder { align-items: flex-start; justify-content: flex-start; gap: 10px; }
.admin-ladder__step { flex-shrink: 0; width: 21px; height: 21px; border-radius: var(--r-pill, 999px); background: var(--purple-050); color: var(--purple); display: inline-flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; }
.admin-ladder__name { display: block; font-size: 13px; font-weight: 700; color: var(--text-title); }
.admin-team .admin-table { width: 100%; }
.admin-team__name { font-weight: 600; color: var(--text-title); }
.admin-team__role-form { display: flex; align-items: center; gap: 6px; margin: 0; }
.admin-team__select { font: var(--body-sm); font-size: 12.5px; padding: 6px 8px; border: 1px solid var(--border); border-radius: var(--r-input); background: var(--surface); color: var(--text-body); }
.admin-btn--small { font-size: 11.5px; padding: 6px 10px; }
.admin-team__actions { white-space: nowrap; text-align: right; }
.admin-team__actions form { display: inline-block; margin: 0 0 0 4px; }
.admin-linkbtn { background: none; border: 0; padding: 4px 6px; font: var(--body-sm); font-size: 12.5px; color: var(--purple); cursor: pointer; border-radius: var(--r-input); }
.admin-linkbtn:hover { background: var(--purple-050); }
.admin-linkbtn--danger { color: var(--error); }
.admin-linkbtn--danger:hover { background: var(--error-bg); }
.admin-team__self { font: var(--caption); font-size: 11px; color: var(--text-secondary); }
.admin-team__deadline { display: block; font: var(--caption); font-size: 10.5px; color: var(--text-secondary); margin-top: 3px; }
.admin-chip--status-active { color: var(--success); background: var(--success-bg); }
.admin-chip--status-pending { color: var(--warning); background: var(--warning-bg); }
/* Convite vencido é estado normal, não erro (mockup STATUS_UI.expirado). */
.admin-chip--status-expired { color: var(--text-secondary); background: var(--surface-2); }
.admin-chip--status-inactive { color: var(--text-secondary); background: var(--surface-2); }
.admin-team__invite { display: flex; flex-direction: column; gap: 8px; padding: 14px 18px; }
.admin-team__invite .admin-rules__input, .admin-team__invite .admin-team__select { max-width: 420px; }
.admin-team__invite .admin-btn { align-self: flex-start; }
.admin-team__revoked .admin-rule { justify-content: space-between; }

/* Histórico (mockup HistoricoView): Vencidas e Arquivadas em cartões, com a
   janela de retenção que falta em cada um. */
.admin-history { display: flex; flex-direction: column; gap: 18px; max-width: 900px; }
.admin-history__block { display: flex; flex-direction: column; gap: 10px; }
.admin-history__eyebrow { font: var(--label); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; color: var(--text-secondary); margin: 0; }
.admin-history__item { display: flex; flex-direction: column; gap: 6px; background: var(--surface); border: 1px solid var(--border-soft); border-radius: var(--r-card); padding: 14px 16px; }
.admin-history__org { font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 0; }
.admin-history__org b { color: var(--purple); font-weight: 700; }
.admin-history__name { font-size: 13px; font-weight: 600; color: var(--text-title); text-decoration: none; }
.admin-history__name:hover { text-decoration: underline; }
.admin-history__meta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 0; }
.admin-history__window { font-weight: 600; }
.admin-history__empty, .admin-history__note { font: var(--caption); font-size: 11px; color: var(--text-secondary); margin: 0; }
/* Mockup: Vencida é fim de vida normal (neutro); Arquivada carrega o peso
   escuro; "despublicada · ainda vigente" é aviso tracejado, não erro; o
   chip de tipo é neutro — cor é reservada a match/status (components.jsx). */
.admin-chip--state-expired { color: var(--text-secondary); background: var(--surface-2); }
.admin-chip--state-archived { color: #fff; background: #334155; }
.admin-chip--unpublished { color: var(--warning); background: none; border: 1px dashed var(--warning); border-radius: 0; text-transform: none; }
.admin-chip--type { color: var(--text-secondary); background: none; border: 1px solid var(--border); border-radius: 0; }
.admin-history__back {
  font: var(--body-sm); font-size: 12.5px; margin: 0 0 10px;
  display: inline-flex; align-items: center; min-height: 24px; /* QA-050: alvo de toque < 24px */
}
.admin-history__ficha { display: flex; flex-direction: column; gap: 14px; max-width: 760px; }
.admin-history__actions { display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-start; border-top: 1px solid var(--border-soft); padding-top: 16px; }
.admin-history__actions form { margin: 0; }
.admin-history__delete summary { cursor: pointer; font: var(--body-sm); font-size: 12.5px; color: var(--error); }
.admin-history__delete { display: flex; flex-direction: column; gap: 8px; }
.admin-btn--danger { color: var(--error); border-color: var(--error); }
.admin-btn--danger:hover { background: var(--error-bg); }

/* Saúde do Match: a leitura que torna o teto visível. Os números aqui são
   contagem de população da equipe — nunca score de par (NN1). */
.admin-health { display: flex; flex-direction: column; gap: 16px; max-width: 1040px; }
.admin-health__intro { font: var(--body-sm); font-size: 14px; color: var(--text-body); margin: 0 0 14px; }
.admin-health__alert { margin-bottom: 0; }
.admin-health__levels { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; padding: 14px 18px; }
.admin-health__ceilings { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: start; }
.admin-health__figure { font: var(--body-sm); font-size: 13.5px; color: var(--text-body); margin: 0; padding: 14px 18px 4px; }
.admin-health__figure strong { font-family: var(--font-display); font-size: 22px; color: var(--purple); margin-right: 4px; }
.admin-health__note { font: var(--caption); font-size: 11.5px; line-height: 1.5; color: var(--text-secondary); margin: 0; padding: 4px 18px 14px; }
.admin-health__cause .admin-health__count { font-size: 15px; }
.admin-health__row { align-items: flex-start; }
.admin-health__row-levels { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.admin-health__no-run { font-style: italic; }
@media (max-width: 900px) {
  .admin-health__levels { grid-template-columns: repeat(2, 1fr); }
  .admin-health__ceilings { grid-template-columns: 1fr; }
}

/* Orçamento de IA (arch §3.5 item 4) */
.admin-budget { display: grid; gap: 16px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.admin-budget__paused {
  font: var(--eyebrow); font-size: 11px; text-transform: uppercase; letter-spacing: .04em;
  color: var(--warning); background: var(--warning-bg); border-radius: var(--r-pill); padding: 3px 9px; margin-left: 8px;
}
.admin-budget__figures { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 16px; margin: 8px 0 0; }
.admin-budget__figures dt { font: var(--caption); color: var(--text-secondary); }
.admin-budget__figures dd { font: var(--body-sm); font-weight: 700; color: var(--text-title); margin: 2px 0 0; }
.admin-budget__form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; margin-top: 14px; }
.admin-budget__label { display: flex; flex-direction: column; gap: 4px; font: var(--caption); color: var(--text-secondary); }
/* QA-068: sem padding próprio, o input caía no tamanho cru do navegador
   (medido em 140x22px) -- mesmo tratamento do QA-029 (padding, não
   min-height, pra não desalinhar o texto digitado). */
.admin-budget__input { max-width: 140px; padding: 9px 11px; border: 1px solid var(--border); border-radius: var(--r-input); font: var(--body-sm); }
/* QA-050: caption 12px/1.4 dá ~17px de altura -- clicável em qualquer
   parte do label não ajuda quando o próprio alvo fica abaixo de 24px. */
.admin-budget__check { display: flex; align-items: center; gap: 6px; min-height: 24px; font: var(--caption); color: var(--text-body); }
@media (max-width: 900px) { .admin-budget { grid-template-columns: 1fr; } }

/* Regras: os dois estados honestos dos filtros sem motor (25/08). */
.admin-rule__state--planned { color: var(--purple); background: var(--purple-050); }
.admin-rule__state--out_of_v1 { color: var(--text-secondary); background: var(--surface-2); }
