/* ==========================================================================
   SISTEMA MYELINFY MNO — DESIGN SYSTEM & CONSOLE CLÍNICO/ORGANIZACIONAL
   Baseado na linguagem visual de tokens e ergonomia do Sistema Myelin

   Requer tokens.css carregado ANTES deste arquivo:
     <link rel="stylesheet" href="/static/css/tokens.css">
     <link rel="stylesheet" href="/static/css/style.css">

   As fontes vêm de <link> no <head> do template (preconnect + stylesheet),
   não de @import — @import bloqueia a cascata numa segunda requisição serial.
   ========================================================================== */


/* ── Reset e Estrutura ── */
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  background: var(--bg-gradient);
  color: var(--text-main);
  min-height: 100vh;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  padding-bottom: 60px;
}

h1, h2, h3, h4, h5, h6, .brand-title, .tab-btn, .btn, .step-title, .metric-value {
  font-family: 'Outfit', sans-serif;
}

/* ── Cabeçalho Retrátil ──
   A superfície do cabeçalho (.topo) e a marca vivem em comum.css, porque o
   painel, o dossiê e os três laudos usam o mesmo componente. O que é só do
   console é a retração ao rolar, que só existe aqui. */
.app-header {
  transition: transform 0.35s ease, opacity 0.35s ease;
}
body.header-oculto .app-header {
  transform: translateY(-100%);
  opacity: 0;
}

/* Abas de Navegação */
.nav-tabs {
  display: flex;
  background: var(--tabs-bg);
  padding: 4px;
  border-radius: var(--radius-md);
  gap: 4px;
  border: 1px solid var(--glass-border);
}
.tab-btn {
  padding: 8px 16px;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--text-muted);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 10px;
  cursor: pointer;
  transition: var(--transition);
  display: flex;
  align-items: center;
  gap: 8px;
}
.tab-btn:hover:not(:disabled) {
  color: var(--text-main);
  background: var(--realce-sutil);
}
.tab-btn.active {
  color: var(--text-strong);
  background: var(--tab-active-bg);
  border-color: var(--glass-border);
  box-shadow: var(--shadow-sm);
}
.tab-btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
.tab-badge {
  font-size: 10px;
  padding: 2px 6px;
  border-radius: 999px;
  background: var(--color-primary);
  color: #fff;
  font-weight: 700;
}

/* ── Container Principal ── */
.app-container {
  max-width: 1280px;
  margin: 24px auto 0;
  padding: 0 20px;
}

/* Presets Bar */
.presets-strip {
  background: linear-gradient(135deg, rgba(30,27,75,0.8), rgba(49,46,129,0.8));
  backdrop-filter: blur(12px);
  border: 1px solid rgba(99,102,241,0.3);
  border-radius: var(--radius-md);
  padding: 10px 18px;
  margin-bottom: 24px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
  color: #fff;
  box-shadow: var(--shadow-md);
}
.presets-label {
  font-size: 13px;
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: 8px;
}
.preset-btn-group {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
/* A faixa de presets é índigo escura nos dois temas — ela marca que aquilo é
   andaime de demonstração, não parte do fluxo. Por isso o branco translúcido
   e o #fff abaixo são literais de propósito: têm um fundo fixo sob eles, ao
   contrário dos realces que viraram token. */
.preset-btn {
  background: rgba(255,255,255,0.12);
  border: 1px solid rgba(255,255,255,0.22);
  color: #fff;
  font-size: 12px;
  font-weight: 600;
  padding: 6px 12px;
  border-radius: 8px;
  cursor: pointer;
  transition: var(--transition);
}
.preset-btn:hover {
  background: var(--color-secondary);
  border-color: #a5b4fc;
}

/* Launcher Inicial */
.launcher-shell {
  padding: 32px 0 48px;
  text-align: center;
}
.launcher-hero h2 {
  font-size: 28px;
  font-weight: 800;
  margin-bottom: 10px;
}
.launcher-hero p {
  color: var(--text-muted);
  max-width: 620px;
  margin: 0 auto 36px;
  font-size: 15px;
}
.launcher-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 20px;
  max-width: 980px;
  margin: 0 auto;
  text-align: left;
}
.launcher-card {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 28px 24px;
  cursor: pointer;
  transition: var(--transition);
  display: flex;
  flex-direction: column;
  box-shadow: var(--shadow-sm);
  position: relative;
  overflow: hidden;
}
.launcher-card:hover {
  border-color: var(--color-primary);
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}
/* .launcher-icon saiu junto com os cinco emoji do lançador. Cada um deles
   aparecia uma vez só na tela inteira — 📝 💾 📥 📋 🚀 —, e ícone que nunca se
   repete não chega a virar sinal: não dá para aprender o que significa, e o
   quadrado de 48px ficava disputando a primeira leitura com o título do
   cartão, que é o que de fato distingue um caminho do outro. A regra que
   estava aqui também era uma das cores literais de style.css. */
.launcher-card h3 {
  font-size: 18px;
  font-weight: 700;
  margin-bottom: 8px;
}
.launcher-card p {
  font-size: 13.5px;
  color: var(--text-muted);
  flex-grow: 1;
  margin-bottom: 20px;
}
.launcher-btn {
  font-size: 13px;
  font-weight: 700;
  color: var(--color-primary);
  display: flex;
  align-items: center;
  gap: 6px;
}

/* ── Os casos já abertos, abaixo do lançador ──
   Lista, e não mais cartões `.launcher-card`: os cinco cartões acima são
   caminhos fixos, e um deles a mais ou a menos é decisão de produto; os casos
   crescem com o uso da organização, e no formato de cartão a décima rodada
   empurraria o lançador inteiro para fora da tela. A linha também é o formato
   que o painel do gestor já usa para a mesma coisa (`.rodada`, em
   documento.css) — mas as duas telas são superfícies diferentes, e reaproveitar
   a classe traria o nome sem a aparência. */
.casos-abertos {
  max-width: 980px;
  margin: 40px auto 0;
  text-align: left;
  border-top: 1px solid var(--card-border);
  padding-top: 28px;
}
.casos-abertos-topo {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 6px;
}
.casos-abertos-topo h3 {
  font-size: 18px;
  font-weight: 700;
  color: var(--text-strong);
}
.casos-abertos-conta {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-muted);
}
.casos-abertos-nota {
  font-size: 13.5px;
  color: var(--text-muted);
  max-width: 620px;
  margin-bottom: 18px;
}
.casos-lista {
  display: flex;
  flex-direction: column;
  gap: 10px;
  list-style: none;
}
.caso-linha {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-areas:
    "id titulo"
    "id meta";
  align-items: center;
  column-gap: 14px;
  row-gap: 2px;
  padding: 14px 18px;
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-md);
  /* O console não tem regra global de `a`, e sem estas duas linhas a linha
     inteira herdava o azul-violeta do navegador: cor literal, igual nos dois
     temas, e a única do console que nenhum token alcança. Hoje só os filhos
     têm cor própria, mas a próxima palavra escrita direto aqui apareceria
     sublinhada em #0000EE. */
  color: var(--text-main);
  text-decoration: none;
  transition: var(--transition);
}
.caso-linha:hover {
  border-color: var(--color-primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-sm);
}
.caso-id {
  grid-area: id;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .06em;
  color: var(--tone-accent-fg);
  background: var(--tone-accent-bg);
  padding: 6px 10px;
  border-radius: var(--radius-sm);
  white-space: nowrap;
}
.caso-titulo {
  grid-area: titulo;
  font-size: 15px;
  font-weight: 600;
  color: var(--text-strong);
}
.caso-meta {
  grid-area: meta;
  font-size: 12.5px;
  color: var(--text-muted);
}
/* A fase é o estado do caso, não decoração: consolidado é o único que muda de
   cor, porque é o único em que não há mais o que coletar. Os demais — aberto,
   em coleta, pronto para consolidar — são o caminho normal, e pintar cada um de
   uma cor faria a lista parecer um semáforo de quatro luzes. */
.caso-fase {
  font-weight: 600;
  color: var(--text-muted);
}
.caso-fase-pronta {
  color: var(--tone-success-fg);
}
.casos-vazio {
  max-width: 980px;
  margin: 36px auto 0;
  text-align: left;
  font-size: 13.5px;
  color: var(--text-muted);
}

@media (max-width: 640px) {
  /* Abaixo disto o selo do identificador e o título disputam a mesma linha e o
     título quebra em três. A coluna vira uma só, e o selo sobe. */
  .caso-linha {
    grid-template-columns: 1fr;
    grid-template-areas: "id" "titulo" "meta";
    row-gap: 6px;
  }
  .caso-id { justify-self: start; }
}

/* ── Wizard do Formulário Pré-MNO (Aba 1) ── */
.wizard-shell {
  display: grid;
  grid-template-columns: 290px 1fr;
  gap: 24px;
  align-items: start;
}
@media (max-width: 960px) {
  .wizard-shell { grid-template-columns: 1fr; }
}

/* Sidebar do Wizard */
.wizard-sidebar {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 22px 18px;
  position: sticky;
  top: 80px;
  box-shadow: var(--shadow-sm);
}
.wizard-progress-header {
  margin-bottom: 18px;
}
.wizard-progress-title {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 700;
  color: var(--text-muted);
  display: flex;
  justify-content: space-between;
  margin-bottom: 6px;
}
.wizard-pct-val {
  font-weight: 800;
  color: var(--color-primary);
}
.wizard-bar-track {
  height: 8px;
  background: var(--realce-medio);
  border-radius: var(--radius-full);
  overflow: hidden;
}
[data-theme="light"] .wizard-bar-track {
  background: rgba(15,23,42,0.08);
}
.wizard-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--color-primary), var(--color-secondary));
  width: 0%;
  transition: width 0.4s ease;
  border-radius: var(--radius-full);
}
.wizard-steplist {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 16px;
}
.wizard-step-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border-radius: var(--radius-sm);
  font-size: 13px;
  font-weight: 500;
  color: var(--text-muted);
  cursor: pointer;
  transition: var(--transition);
}
.wizard-step-item:hover {
  background: var(--realce-sutil);
  color: var(--text-main);
}
.wizard-step-item.active {
  background: var(--ia-bg);
  color: var(--text-strong);
  font-weight: 700;
  border-left: 3px solid var(--color-primary);
}
/* Numeral, rótulo e indicador de estado de cada etapa da barra lateral.
   Os nomes seguem os que o prematriz.js escreve no DOM. */
.step-num {
  width: 22px;
  height: 22px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: var(--radius-full);
  background: var(--tabs-bg);
  border: 1px solid var(--glass-border);
  font-size: 11.5px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--text-muted);
  transition: var(--transition);
}
.wizard-step-item.active .step-num {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #fff;
}
.wizard-step-item.done .step-num {
  background: var(--tone-success-bg);
  border-color: var(--color-success);
  color: var(--color-success);
}
.step-label {
  flex: 1;
  min-width: 0;
  line-height: 1.3;
}
.step-status-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--input-border);
  flex-shrink: 0;
  transition: var(--transition);
}
.step-status-dot.done {
  background: var(--color-success);
}
.step-status-dot.has-error {
  background: var(--color-danger);
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.18);
}
.draft-status-indicator {
  margin-top: 20px;
  padding-top: 14px;
  border-top: 1px solid var(--glass-border);
  font-size: 11.5px;
  color: var(--text-muted);
  display: flex;
  align-items: center;
  gap: 6px;
}

/* Área de Conteúdo do Formulário */
.wizard-content {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 32px;
  box-shadow: var(--shadow-sm);
}
.wizard-step-pane {
  display: none;
  animation: fadeIn 0.3s ease;
}
.wizard-step-pane.active {
  display: block;
}
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: translateY(0); }
}

.step-header {
  margin-bottom: 24px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--glass-border);
}
.step-tag {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 700;
  color: var(--color-primary);
  margin-bottom: 4px;
}
.step-title {
  font-size: 22px;
  font-weight: 800;
  color: var(--text-strong);
}
.step-desc {
  font-size: 14px;
  color: var(--text-muted);
  margin-top: 4px;
}

/* Form Controls */
.form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 18px;
}
.form-grid.full {
  grid-template-columns: 1fr;
}
.field-group {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: 16px;
}
.field-label {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-main);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.field-req {
  color: var(--color-danger);
  margin-left: 2px;
}
.field-input, .field-select, .field-textarea {
  background: var(--input-bg);
  color: var(--input-color);
  border: 1px solid var(--input-border);
  border-radius: var(--radius-sm);
  padding: 10px 14px;
  font-size: 13.5px;
  font-family: inherit;
  transition: var(--transition);
  width: 100%;
}
.field-input:focus, .field-select:focus, .field-textarea:focus {
  outline: none;
  border-color: var(--input-focus-border);
  /* Era --glass-glow, que no tema claro é 6% de opacidade: na prática só se
     via a troca de borda. --color-primary-glow (18%) é o que as outras
     folhas já usam para o mesmo anel. */
  box-shadow: 0 0 0 3px var(--color-primary-glow);
}
.field-textarea {
  min-height: 90px;
  resize: vertical;
}
.field-help {
  font-size: 12px;
  color: var(--text-muted);
}
.field-group.has-error .field-input, 
.field-group.has-error .field-textarea {
  border-color: var(--color-danger);
}

/* ── Assistência de IA nos Campos Narrativos ── */
.narrative-field-wrap {
  position: relative;
}
.narrative-top-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}
.btn-ia {
  background: var(--ia-bg);
  border: 1px solid var(--ia-border);
  color: var(--ia-text);
  padding: 4px 10px;
  border-radius: var(--radius-sm);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: var(--transition);
}
.btn-ia:hover {
  background: var(--ia-bg-hover);
  transform: translateY(-1px);
}
.ia-panel {
  display: none;
  background: var(--surface-solid);
  border: 1px solid var(--ia-border);
  border-radius: var(--radius-md);
  padding: 16px;
  margin-top: 10px;
  box-shadow: var(--shadow-md);
  animation: fadeIn 0.25s ease;
}
.ia-panel.show {
  display: block;
}
.ia-panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--ia-text);
}
.ia-panel-body {
  font-size: 13px;
  color: var(--text-body);
  background: rgba(139,92,246,0.06);
  border-radius: var(--radius-sm);
  padding: 12px;
  margin-bottom: 12px;
  line-height: 1.5;
  white-space: pre-wrap;
}
.ia-panel-actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
}
.ia-btn-action {
  font-size: 12px;
  font-weight: 600;
  padding: 6px 12px;
  border-radius: 6px;
  cursor: pointer;
  transition: var(--transition);
}
.ia-btn-use {
  background: var(--color-primary);
  color: #fff;
  border: none;
}
.ia-btn-cancel {
  background: transparent;
  border: 1px solid var(--input-border);
  color: var(--text-muted);
}

/* Botões de Navegação do Wizard */
.wizard-actions {
  margin-top: 32px;
  padding-top: 20px;
  border-top: 1px solid var(--glass-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.btn {
  padding: 10px 20px;
  font-size: 14px;
  font-weight: 600;
  border-radius: var(--radius-sm);
  cursor: pointer;
  transition: var(--transition);
  display: inline-flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  border: 1px solid transparent;
}
.btn-primary {
  background: var(--color-primary);
  color: #fff;
  box-shadow: 0 4px 14px rgba(37,99,235,0.3);
}
.btn-primary:hover {
  background: var(--color-primary-hover);
  transform: translateY(-1px);
}
.btn-secondary {
  background: var(--tabs-bg);
  border-color: var(--glass-border);
  color: var(--text-main);
}
.btn-secondary:hover {
  background: var(--realce-medio);
}
.btn-success {
  background: var(--color-success);
  color: #fff;
  box-shadow: 0 4px 14px rgba(16,185,129,0.3);
}

/* ── Aba 2: a análise da contribuição ── */
.progress-shell {
  max-width: 900px;
  margin: 0 auto;
}
.pipe-header-card {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 24px;
  margin-bottom: 24px;
  box-shadow: var(--shadow-sm);
}
.pipe-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
}
.pipe-title {
  font-size: 20px;
  font-weight: 800;
}
.pipe-pct {
  font-size: 22px;
  font-weight: 800;
  color: var(--color-primary);
}
.pipe-status-msg {
  font-size: 14px;
  color: var(--text-muted);
  margin-top: 10px;
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ── As quatro etapas da análise ──────────────────────────────────────────────
   Eram seis cartões, um por movimento, cada um com o selo do código (`M·01`) e
   a descrição do método por baixo. O selo e o terminal de log saíram junto com
   eles; o cartão ficou, com o seletor renomeado para o que ele passou a ser.

   A marca à esquerda substitui o selo. Um selo com código dizia à pessoa em que
   ponto do MÉTODO o sistema estava; a marca diz em que ponto da ESPERA ela
   está, que é a pergunta que ela tem. */
.pipe-etapas {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-bottom: 32px;
}
.pipe-etapa {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-md);
  padding: 15px 20px;
  display: flex;
  align-items: flex-start;
  gap: 15px;
  transition: var(--transition);
}
.pipe-etapa.agora {
  border-color: var(--color-primary);
  background: var(--ia-bg);
  box-shadow: 0 0 20px var(--color-primary-glow);
}
.pipe-etapa.feita { border-color: rgba(16,185,129,0.30); }

/* A marca: um anel vazio enquanto não chegou, cheio e pulsando na etapa em
   curso, e um visto na feita. É a única coisa animada da tela, e ela para com
   `prefers-reduced-motion` — a página inteira já anuncia progresso pela barra,
   e quem pediu menos movimento não perde informação nenhuma. */
.pipe-etapa-marca {
  flex: none;
  width: 13px; height: 13px;
  margin-top: 4px;
  border-radius: 50%;
  border: 2px solid var(--marcador-inativo);
  position: relative;
}
.pipe-etapa.agora .pipe-etapa-marca {
  border-color: var(--color-primary);
  background: var(--color-primary);
  animation: pulsoEtapa 1.6s ease-in-out infinite;
}
.pipe-etapa.feita .pipe-etapa-marca {
  border-color: var(--color-success);
  background: var(--color-success);
}
.pipe-etapa.feita .pipe-etapa-marca::after {
  content: "";
  position: absolute;
  left: 2.5px; top: -0.5px;
  width: 3px; height: 7px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
@keyframes pulsoEtapa {
  0%, 100% { box-shadow: 0 0 0 0 var(--color-primary-glow); }
  50%      { box-shadow: 0 0 0 6px transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .pipe-etapa.agora .pipe-etapa-marca { animation: none; }
}

.pipe-etapa-info h4 {
  font-size: 15px;
  font-weight: 700;
  margin-bottom: 2px;
  line-height: 1.3;
}
.pipe-etapa-info p {
  font-size: 12.5px;
  color: var(--text-muted);
  line-height: 1.5;
}
.pipe-etapa.feita .pipe-etapa-info h4,
.pipe-etapa.feita .pipe-etapa-info p { color: var(--text-muted); }

/* O Quiz */
.quiz-card {
  background: var(--card-bg);
  border: 1.5px solid var(--color-primary);
  border-radius: var(--radius-lg);
  padding: 32px;
  box-shadow: var(--shadow-md);
  animation: fadeIn 0.3s ease;
}
.quiz-stepper-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 20px;
}
.quiz-pill-nav {
  display: flex;
  gap: 6px;
}
.quiz-pill-nav .pill {
  width: 14px;
  height: 6px;
  border-radius: 999px;
  background: var(--marcador-inativo);
  transition: var(--transition);
}
.quiz-pill-nav .pill.active {
  width: 24px;
  background: var(--color-primary);
}
.quiz-pill-nav .pill.done {
  background: var(--color-success);
}
.quiz-q-title {
  font-size: 17px;
  font-weight: 700;
  margin-bottom: 20px;
  line-height: 1.5;
}
.quiz-options-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-bottom: 28px;
}
.quiz-opt-btn {
  background: var(--surface-solid);
  border: 1.5px solid var(--input-border);
  border-radius: var(--radius-md);
  padding: 16px 20px;
  text-align: left;
  cursor: pointer;
  transition: var(--transition);
  display: flex;
  align-items: flex-start;
  gap: 16px;
  color: var(--text-main);
}
.quiz-opt-btn:hover {
  border-color: var(--color-primary);
  background: rgba(59,130,246,0.04);
  transform: translateY(-1px);
}
.quiz-opt-btn.selected {
  border-color: var(--color-primary);
  background: rgba(59,130,246,0.09);
  box-shadow: 0 0 0 1px var(--color-primary), 0 4px 14px rgba(37,99,235,0.12);
}
.quiz-opt-radio {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 2px solid var(--input-border);
  flex-shrink: 0;
  margin-top: 3px;
  transition: var(--transition);
  display: flex;
  align-items: center;
  justify-content: center;
}
.quiz-opt-btn:hover .quiz-opt-radio {
  border-color: var(--color-primary);
}
.quiz-opt-btn.selected .quiz-opt-radio {
  border-color: var(--color-primary);
  background: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.25);
}
.quiz-opt-btn.selected .quiz-opt-radio::after {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #ffffff;
}
.quiz-opt-text {
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--text-main);
}
.quiz-opt-btn.selected .quiz-opt-text {
  font-weight: 600;
}

/* ── Aba 3: Resultados da Pré-Matriz & Dossiê ── */
.results-shell {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.context-bar {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-md);
  padding: 16px 20px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}
.context-item {
  display: flex;
  flex-direction: column;
}
.context-item .label {
  font-size: 11px;
  text-transform: uppercase;
  color: var(--text-muted);
  font-weight: 700;
}
.context-item .val {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-strong);
}

.seed-card {
  background: linear-gradient(135deg, rgba(30,27,75,0.6), rgba(15,23,42,0.8));
  border: 1.5px solid rgba(99,102,241,0.3);
  border-radius: var(--radius-lg);
  padding: 28px;
}
/* O cartão da semente tem gradiente escuro fixo (linha acima), então o texto
   dentro dele usa os tokens de herói, que são claros nos dois temas — e não os
   tokens de página, que invertem. Antes eram #818cf8 e #fff literais: por
   acaso continuavam legíveis, mas nada garantia isso, e um ajuste no gradiente
   os deixaria sem contraste sem que nenhum teste notasse. */
.seed-eyebrow {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  font-weight: 800;
  color: var(--hero-text-muted);
}
.seed-main-word {
  font-size: 32px;
  font-weight: 800;
  color: var(--hero-text);
  margin: 8px 0 12px;
}

/* Pilares 4/12 Grid */
.pillars-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 20px;
}
.pillar-card {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-md);
  padding: 20px;
}
.pillar-card h4 {
  font-size: 16px;
  font-weight: 700;
  margin-bottom: 14px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.pillar-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 0;
  border-bottom: 1px solid var(--glass-border);
  font-size: 13px;
}
.score-pill {
  font-size: 12px;
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--ia-bg);
  color: var(--color-primary);
}

/* Ausência de leitura, dita com todas as letras.
   Existe porque o contrário custou caro: enquanto o cartão de pilar
   completava as notas que não vieram com `|| 3` e a Matriz de Memória
   desenhava duas linhas de exemplo, o laudo ficava com a forma perfeita e o
   conteúdo fixo — e ninguém o revisava, justamente porque parecia pronto.
   O tom é o do texto secundário, não o de erro: não veio não é falha da
   pessoa que está lendo, é dado que falta. */
.sem-leitura {
  color: var(--text-muted);
  font-size: 13px;
  font-style: italic;
  line-height: 1.5;
}
td.sem-leitura {
  padding: 16px 14px;
  text-align: left;
}

/* Matriz de Memória 72 Table */
.memory-box {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 24px;
}
.memory-filter-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 16px 0 20px;
}
.filter-pill {
  font-size: 12px;
  font-weight: 600;
  padding: 6px 14px;
  border-radius: 999px;
  background: var(--tabs-bg);
  border: 1px solid var(--glass-border);
  color: var(--text-muted);
  cursor: pointer;
  transition: var(--transition);
}
.filter-pill.active {
  background: var(--color-primary);
  color: #fff;
  border-color: var(--color-primary);
}
.memory-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.memory-table th {
  text-align: left;
  padding: 10px 14px;
  background: var(--tabs-bg);
  color: var(--text-muted);
  font-weight: 700;
}
.memory-table td {
  padding: 12px 14px;
  border-bottom: 1px solid var(--glass-border);
  vertical-align: top;
}

/* ==========================================================================
   MÓDULO ORGANIZAÇÕES, EMPRESAS E PASTA VIRTUAL (DB)
   ========================================================================== */

.orgs-view-container {
  max-width: 1240px;
  margin: 0 auto 40px;
  padding: 0 16px;
}

.orgs-hero-card {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 24px 28px;
  margin-bottom: 24px;
  backdrop-filter: blur(12px);
  box-shadow: var(--shadow-sm);
}

.orgs-hero-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 16px;
  margin-bottom: 20px;
}

.orgs-hero-title h2 {
  font-family: 'Outfit', sans-serif;
  font-size: 24px;
  font-weight: 700;
  color: var(--text-strong);
  margin-bottom: 4px;
}

.orgs-hero-title p {
  color: var(--text-muted);
  font-size: 14px;
}

.orgs-selector-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 16px;
  padding: 16px 20px;
  background: var(--input-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-md);
}

/* Rótulo e campo, lado a lado enquanto couberem. Estavam num `style` inline
   com `min-width: 280px`, que somado ao rótulo `nowrap` passava dos 360px
   úteis de uma tela de 375 — o último resto do transbordo horizontal da aba. */
.orgs-selector-campo {
  display: flex;
  align-items: center;
  gap: 12px;
  flex: 1 1 280px;
  min-width: 0;
}
.orgs-selector-rotulo {
  font-weight: 700;
  font-size: 14px;
  white-space: nowrap;
  color: var(--text-strong);
}
.orgs-badges {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

@media (max-width: 640px) {
  /* O rótulo sobe para cima do campo, e o campo ocupa a largura toda. */
  .orgs-selector-campo { flex-direction: column; align-items: stretch; gap: 6px; }
  .orgs-select-input { width: 100%; }
}

.orgs-select-input {
  padding: 10px 16px;
  border-radius: var(--radius-sm);
  background: var(--surface-solid);
  color: var(--text-main);
  border: 1px solid var(--input-border);
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  outline: none;
  /* Era `min-width: 320px`, que num telefone empurrava a barra inteira. */
  min-width: min(320px, 100%);
  max-width: 100%;
  transition: var(--transition);
}

.orgs-select-input:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px var(--color-primary-glow);
}

.org-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: var(--radius-full);
  font-size: 12px;
  font-weight: 600;
  background: var(--tabs-bg);
  border: 1px solid var(--glass-border);
  color: var(--text-body);
}

.org-pill.primary {
  background: rgba(59, 130, 246, 0.12);
  color: var(--color-primary);
  border-color: rgba(59, 130, 246, 0.25);
}

.org-pill.success {
  background: rgba(16, 185, 129, 0.12);
  color: var(--color-success);
  border-color: rgba(16, 185, 129, 0.25);
}

/* ── Grade da aba: empresas à esquerda, pasta virtual à direita ──
   Estava escrita num atributo `style` do template, e regra inline não pode ser
   desfeita por media query — a aba ficava em duas colunas até num telefone e
   transbordava 402px na horizontal a 375px de largura. Medido com a aba
   visível: a varredura anterior media a página com esta aba oculta, e aba
   oculta tem tamanho zero.

   O `min-width: 0` nas colunas é o resto do conserto: sem ele, um item de
   grade não encolhe abaixo do próprio conteúdo, e as colunas paravam de ceder
   em 900px por causa dos nomes de arquivo da árvore. */
.orgs-grade {
  display: grid;
  grid-template-columns: 1fr 1.35fr;
  gap: 24px;
}
.orgs-grade > * { min-width: 0; }

@media (max-width: 960px) {
  .orgs-grade { grid-template-columns: minmax(0, 1fr); }
}

/* Estado vazio: aponta o próximo passo em vez de só informar o vazio. */
.orgs-vazio {
  color: var(--text-muted);
  font-size: 13px;
  padding: 12px 0;
  line-height: 1.5;
}

/* Era um <button> com `pointer-events: none` — parecia botão, não era, e não
   chegava ao teclado nem ao leitor de tela. É um rótulo de estado do cartão. */
.empresa-item-estado {
  flex-shrink: 0;
  align-self: center;
  padding: 6px 14px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--card-border);
  background: var(--surface-sunken);
  color: var(--text-muted);
  font-family: 'Outfit', sans-serif;
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}
.empresa-item-card.selected .empresa-item-estado {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

/* O cartão é um <button> desde que escolher a filial deixou de ser ação só de
   mouse. Estas quatro linhas tiram a aparência herdada de botão sem mexer no
   desenho do cartão — mesma solução de `button.launcher-card`. */
button.empresa-item-card {
  width: 100%;
  font: inherit;
  text-align: left;
  appearance: none;
}

.empresa-item-card {
  background: var(--surface-solid);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-md);
  padding: 16px 18px;
  margin-bottom: 12px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  cursor: pointer;
  transition: var(--transition);
}
.empresa-item-card > div { min-width: 0; }
.empresa-item-title { overflow-wrap: anywhere; }

.empresa-item-card:hover {
  border-color: var(--card-hover-border);
  transform: translateY(-1px);
  box-shadow: var(--shadow-sm);
}

.empresa-item-card.selected {
  border-color: var(--color-primary);
  background: rgba(59, 130, 246, 0.04);
}

/* O cartão de empresa é <button>: sem foco visível ele some para quem navega
   por teclado. A regra estava agrupada com as da árvore da pasta, que mudaram
   para comum.css quando a Pasta passou a valer nas duas superfícies — esta
   ficou, porque a lista de empresas só existe no console. */
.empresa-item-card:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

.empresa-item-title {
  font-weight: 700;
  font-size: 15px;
  color: var(--text-strong);
  margin-bottom: 4px;
}

.empresa-item-meta {
  font-size: 12.5px;
  color: var(--text-muted);
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

/* ══════════════════════════════════════════════════════════════════════════════
   ESTILOS DA FASE MATRIZ MNO 6×6 (Design System Idêntico ao MMM)
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── 1. Tela de Instruções Pré-Coleta ── */
.matriz-instrucoes {
  max-width: 760px;
  margin: 20px auto 40px;
  padding: 32px 36px;
  border-radius: var(--radius-lg);
  border: 1px solid rgba(168, 85, 247, 0.3);
  background: linear-gradient(135deg, rgba(15, 23, 42, 0.95), rgba(30, 27, 75, 0.85));
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.4);
}
[data-theme="light"] .matriz-instrucoes {
  background: #ffffff;
  border: 1px solid rgba(168, 85, 247, 0.3);
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
}
.matriz-instrucoes-selo {
  display: inline-block;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  padding: 4px 10px;
  border-radius: 6px;
  background: rgba(168, 85, 247, 0.2);
  color: #c084fc;
  border: 1px solid rgba(168, 85, 247, 0.35);
  margin-bottom: 12px;
}
[data-theme="light"] .matriz-instrucoes-selo {
  background: rgba(147, 51, 234, 0.1);
  color: #7e22ce;
  border-color: rgba(147, 51, 234, 0.25);
}
.matriz-instrucoes h2 {
  font-size: 24px;
  font-weight: 700;
  color: var(--text-strong);
  margin-bottom: 12px;
}
.matriz-instrucoes-abertura {
  font-size: 14.5px;
  color: var(--text-body);
  line-height: 1.6;
  margin-bottom: 24px;
}
.matriz-instrucoes-lista {
  list-style: none;
  padding: 0;
  margin: 0 0 28px 0;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.matriz-instrucoes-lista li {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  font-size: 13.5px;
  color: var(--text-body);
  line-height: 1.5;
  background: rgba(255, 255, 255, 0.03);
  padding: 14px 16px;
  border-radius: var(--radius-md);
  border: 1px solid var(--glass-border);
}
[data-theme="light"] .matriz-instrucoes-lista li {
  background: rgba(15, 23, 42, 0.03);
  border-color: rgba(15, 23, 42, 0.08);
  color: #334155;
}
.matriz-instrucoes-lista .ico {
  font-size: 20px;
  flex-shrink: 0;
  line-height: 1.2;
}
.matriz-instrucoes-acoes {
  display: flex;
  justify-content: flex-end;
  gap: 12px;
}

/* ── 2. Layout da Matriz ── */
.matrix-layout {
  display: grid;
  grid-template-columns: 1fr 400px;
  gap: 28px;
  align-items: start;
}
@media (max-width: 1024px) {
  .matrix-layout {
    grid-template-columns: 1fr;
  }
}

.matrix-grid-container {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.matrix-grid-title {
  font-size: 17px;
  color: var(--text-strong);
  font-weight: 700;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
}
.btn-instrucoes-link {
  background: none;
  border: none;
  color: #a78bfa;
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
  transition: var(--transition);
}
[data-theme="light"] .btn-instrucoes-link {
  color: #6d28d9;
}
.btn-instrucoes-link:hover {
  background: rgba(167, 139, 250, 0.12);
  color: #c4b5fd;
}
[data-theme="light"] .btn-instrucoes-link:hover {
  background: rgba(109, 40, 217, 0.08);
  color: #5b21b6;
}

.matrix-view-toggle {
  display: inline-flex;
  background: var(--tabs-bg);
  padding: 3px;
  border-radius: 8px;
  border: 1px solid var(--glass-border);
  gap: 3px;
}
.view-toggle-btn {
  background: none;
  border: none;
  padding: 4px 10px;
  font-size: 12px;
  font-weight: 500;
  color: var(--text-muted);
  border-radius: 6px;
  cursor: pointer;
  font-family: inherit;
  transition: all 0.2s ease;
}
.view-toggle-btn.active {
  background: var(--surface-solid);
  color: var(--color-primary);
  font-weight: 700;
  box-shadow: 0 1px 4px rgba(0,0,0,0.3);
}

/* ── 3. Grid 6×6 (Estrutura e Contraste Alto) ── */
.espiral-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: repeat(6, 1fr);
  gap: 8px;
  background: rgba(15, 23, 42, 0.45);
  border: 1px solid var(--glass-border);
  padding: 14px;
  border-radius: 16px;
  aspect-ratio: 1 / 1;
  max-width: 600px;
  width: 100%;
  margin: 0 auto;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
}
[data-theme="light"] .espiral-grid {
  background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, 0.12);
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
}

.grid-cell {
  background: rgba(30, 41, 59, 0.45);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 10px;
  padding: 8px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  cursor: pointer;
  transition: var(--transition);
  position: relative;
  overflow: hidden;
  user-select: none;
  min-height: 0;
  min-width: 0;
}
[data-theme="light"] .grid-cell {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.12);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}

.grid-cell:hover {
  border-color: rgba(99, 102, 241, 0.5);
  background: rgba(99, 102, 241, 0.12);
}
[data-theme="light"] .grid-cell:hover {
  background: #ffffff;
  border-color: rgba(59, 130, 246, 0.4);
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.08);
}

.grid-cell.active {
  border-color: #fbbf24 !important;
  background: rgba(251, 191, 36, 0.15) !important;
  box-shadow: 0 0 16px rgba(251, 191, 36, 0.45);
  animation: cellPulse 2s infinite ease-in-out;
}
[data-theme="light"] .grid-cell.active {
  background: rgba(245, 158, 11, 0.14) !important;
  border-color: #d97706 !important;
  box-shadow: 0 0 16px rgba(217, 119, 6, 0.35);
}

@keyframes cellPulse {
  0%, 100% { box-shadow: 0 0 8px rgba(251, 191, 36, 0.25); }
  50% { box-shadow: 0 0 20px rgba(251, 191, 36, 0.6); }
}

.grid-cell.completed {
  border-color: rgba(16, 185, 129, 0.5);
  background: rgba(16, 185, 129, 0.12);
}
[data-theme="light"] .grid-cell.completed {
  background: rgba(16, 185, 129, 0.1);
  border-color: rgba(4, 120, 87, 0.35);
}

.grid-cell.diagonal {
  border: 1.5px solid rgba(251, 191, 36, 0.4);
  background: rgba(251, 191, 36, 0.04);
}
[data-theme="light"] .grid-cell.diagonal {
  border: 1.5px solid rgba(180, 83, 9, 0.35);
  background: rgba(245, 158, 11, 0.04);
}

.grid-cell.diagonal.completed {
  background: linear-gradient(135deg, rgba(16, 185, 129, 0.15) 0%, rgba(251, 191, 36, 0.12) 100%);
  border-color: rgba(251, 191, 36, 0.5);
}
[data-theme="light"] .grid-cell.diagonal.completed {
  background: linear-gradient(135deg, rgba(16, 185, 129, 0.12) 0%, rgba(245, 158, 11, 0.1) 100%);
  border-color: rgba(180, 83, 9, 0.45);
}

.cell-num {
  font-size: 11px;
  font-weight: 700;
  color: #94a3b8;
}
[data-theme="light"] .cell-num {
  color: #64748b;
}

/* `.cell-label` saiu com o `L1×C1` do quadradinho do mapa (02/09/2026). O
   cruzamento passou para o `title` do quadrado, escrito por extenso. */

.cell-concept {
  font-size: 12.5px;
  font-weight: 700;
  color: #f8fafc;
  text-align: center;
  word-break: break-word;
  line-height: 1.2;
  margin-top: auto;
  margin-bottom: auto;
  overflow: hidden;
  text-overflow: ellipsis;
}
[data-theme="light"] .cell-concept {
  color: #0f172a;
}

.grid-cell.completed .cell-concept {
  color: #34d399;
  font-weight: 800;
  font-size: 13px;
}
[data-theme="light"] .grid-cell.completed .cell-concept {
  color: #065f46;
  font-weight: 800;
  font-size: 13px;
}
.grid-cell.completed .cell-num {
  color: #10b981;
}
[data-theme="light"] .grid-cell.completed .cell-num {
  color: #047857;
}
.grid-cell.completed .cell-label {
  color: #10b981;
}
[data-theme="light"] .grid-cell.completed .cell-label {
  color: #047857;
}

/* ── 4. Caminho Vertical (Duolingo-Style) ── */
.matriz-caminho {
  display: flex;
  flex-direction: column;
  gap: 12px;
  background: rgba(0, 0, 0, 0.2);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-md);
  padding: 16px;
}
[data-theme="light"] .matriz-caminho {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.08);
}
.caminho-topo {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid var(--glass-border);
  border-radius: 8px;
  padding: 10px 14px;
  color: var(--text-main);
  cursor: pointer;
  font-family: inherit;
}
[data-theme="light"] .caminho-topo {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.1);
  color: #0f172a;
}
.caminho-barra {
  width: 100px;
  height: 6px;
  background: rgba(255, 255, 255, 0.1);
  border-radius: 3px;
  overflow: hidden;
  display: inline-block;
}
[data-theme="light"] .caminho-barra {
  background: rgba(15, 23, 42, 0.1);
}
.caminho-barra i {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, #3b82f6, #10b981);
  width: 0%;
  transition: width 0.3s ease;
}
.caminho-resumo { font-size: 13px; font-weight: 600; }
.caminho-acao { font-size: 12px; color: var(--color-primary); }
.caminho-passos {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-height: 380px;
  overflow-y: auto;
}
.caminho-passo {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.02);
  border: 1px solid transparent;
  font-size: 12.5px;
}
[data-theme="light"] .caminho-passo {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.06);
  color: #1e293b;
}
.caminho-passo.agora {
  border-color: #fbbf24;
  background: rgba(251, 191, 36, 0.08);
  font-weight: 700;
}
[data-theme="light"] .caminho-passo.agora {
  border-color: #d97706;
  background: rgba(245, 158, 11, 0.08);
  color: #92400e;
}
.caminho-passo.respondida {
  border-color: rgba(16, 185, 129, 0.2);
  background: rgba(16, 185, 129, 0.05);
}
[data-theme="light"] .caminho-passo.respondida {
  border-color: rgba(16, 185, 129, 0.3);
  background: rgba(16, 185, 129, 0.06);
}
.caminho-legenda {
  display: flex;
  gap: 14px;
  list-style: none;
  padding: 6px 0 0 0;
  margin: 0;
  font-size: 11px;
  color: var(--text-muted);
}
.caminho-legenda li { display: flex; align-items: center; gap: 6px; }
.caminho-marca {
  width: 10px; height: 10px; border-radius: 50%;
  border: 1px solid var(--text-muted);
  display: inline-block;
}
.caminho-marca.respondida { background: #10b981; border-color: #10b981; }
.caminho-marca.agora { background: #fbbf24; border-color: #fbbf24; }

/* ── 5. Card de Pergunta e Inputs ── */
.matrix-question-card {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: 20px;
  padding: 26px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  box-shadow: var(--shadow-md);
  backdrop-filter: blur(12px);
  position: relative;
}
[data-theme="light"] .matrix-question-card {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.1);
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.06);
}
.matrix-agent-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 1px solid var(--glass-border);
  padding-bottom: 14px;
}
[data-theme="light"] .matrix-agent-header {
  border-color: rgba(15, 23, 42, 0.08);
}
.matrix-agent-info {
  display: flex;
  align-items: center;
  gap: 8px;
}
.matrix-agent-badge {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  padding: 4px 9px;
  border-radius: 6px;
  letter-spacing: 0.05em;
}
.matrix-agent-badge.linha {
  background: rgba(239, 68, 68, 0.15);
  color: #fca5a5;
  border: 1px solid rgba(239, 68, 68, 0.3);
}
[data-theme="light"] .matrix-agent-badge.linha {
  background: rgba(239, 68, 68, 0.1);
  color: #dc2626;
  border-color: rgba(239, 68, 68, 0.28);
}
.matrix-agent-badge.coluna {
  background: rgba(59, 130, 246, 0.15);
  color: #93c5fd;
  border: 1px solid rgba(59, 130, 246, 0.3);
}
[data-theme="light"] .matrix-agent-badge.coluna {
  background: rgba(59, 130, 246, 0.1);
  color: #2563eb;
  border-color: rgba(59, 130, 246, 0.28);
}

.matrix-question-text {
  font-size: 16.5px;
  font-weight: 600;
  color: var(--text-strong);
  line-height: 1.55;
}
[data-theme="light"] .matrix-question-text {
  color: #0f172a;
}

.matrix-input-area {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.matrix-input-field {
  width: 100%;
  padding: 14px 18px;
  border-radius: var(--radius-sm);
  background: var(--input-bg);
  border: 1px solid var(--input-border);
  color: var(--input-color);
  font-size: 16px;
  font-weight: 600;
  font-family: inherit;
  outline: none;
  transition: var(--transition);
}
[data-theme="light"] .matrix-input-field {
  background: #ffffff;
  border: 1.5px solid rgba(15, 23, 42, 0.18);
  color: #0f172a;
}
.matrix-input-field:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px var(--color-primary-glow);
}

/* ── 6. Chips de Sugestões de Palavras (Duolingo Invertido) ── */
.suggestion-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
  padding: 12px;
  background: rgba(0, 0, 0, 0.25);
  border-radius: 12px;
  border: 1px solid rgba(168, 85, 247, 0.25);
}
[data-theme="light"] .suggestion-chips {
  background: rgba(243, 232, 255, 0.6);
  border: 1px solid rgba(147, 51, 234, 0.22);
}
.suggestion-chip {
  padding: 7px 14px;
  border-radius: 20px;
  background: rgba(168, 85, 247, 0.15);
  color: #e9d5ff;
  border: 1px solid rgba(168, 85, 247, 0.35);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: var(--transition);
  user-select: none;
}
[data-theme="light"] .suggestion-chip {
  background: #f3e8ff;
  color: #581c87;
  border: 1px solid #d8b4fe;
}
.suggestion-chip:hover {
  background: rgba(168, 85, 247, 0.35);
  border-color: #c084fc;
  color: #ffffff;
  transform: translateY(-1px);
}
[data-theme="light"] .suggestion-chip:hover {
  background: #e9d5ff;
  color: #3b0764;
  border-color: #c084fc;
  transform: translateY(-1px);
}
.suggestion-chip.selecionado {
  background: #8b5cf6;
  color: #ffffff;
  border-color: #a855f7;
  font-weight: 700;
  box-shadow: 0 2px 8px rgba(139, 92, 246, 0.4);
}
[data-theme="light"] .suggestion-chip.selecionado {
  background: #7c3aed;
  color: #ffffff;
  border-color: #6d28d9;
  box-shadow: 0 2px 8px rgba(124, 58, 237, 0.35);
}

.btn-matrix-ajuda {
  background: rgba(168, 85, 247, 0.15);
  color: #d8b4fe;
  border: 1px solid rgba(168, 85, 247, 0.35);
}
[data-theme="light"] .btn-matrix-ajuda {
  background: #faf5ff;
  color: #6d28d9;
  border-color: #c084fc;
}
.btn-matrix-ajuda:hover {
  background: rgba(168, 85, 247, 0.25);
  color: #ffffff;
}
[data-theme="light"] .btn-matrix-ajuda:hover {
  background: #f3e8ff;
  color: #581c87;
  border-color: #a855f7;
}

.btn-matrix-refresh {
  background: rgba(255, 255, 255, 0.04);
  color: #cbd5e1;
  border: 1px solid var(--glass-border);
}
[data-theme="light"] .btn-matrix-refresh {
  background: #f8fafc;
  color: #475569;
  border-color: rgba(15, 23, 42, 0.12);
}

.btn-matrix-pausa {
  border-color: rgba(251, 191, 36, 0.3);
  color: #fbbf24;
}
[data-theme="light"] .btn-matrix-pausa {
  border-color: rgba(217, 119, 6, 0.3);
  color: #b45309;
  background: #fffbeb;
}
[data-theme="light"] .btn-matrix-pausa:hover {
  background: #fef3c7;
  color: #92400e;
}

/* ── 7. Cronômetro de Latência Cognitiva ── */
/* O cronômetro de latência saiu da tela da Matriz em 02/09/2026: a medida
   continua, o mostrador não. Ver a nota em `matriz.js`. `dotBlink` saiu
   junto — ele só era usado pelo ponto que piscava ali. */

/* ── 8. Resultados da Matriz ── */
.matrix-results-grid-view {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 10px;
  margin-top: 20px;
}
.matrix-result-cell {
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid var(--glass-border);
  border-radius: 8px;
  padding: 10px;
  text-align: center;
}
[data-theme="light"] .matrix-result-cell {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.1);
}
.matrix-result-cell .coord {
  font-size: 9.5px;
  font-weight: 700;
  color: var(--text-muted);
  text-transform: uppercase;
}
.matrix-result-cell .word {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-strong);
  margin-top: 4px;
}
[data-theme="light"] .matrix-result-cell .word {
  color: #0f172a;
}
/* Helpers */
.hidden { display: none !important; }
/* ══════════════════════════════════════════════════════════════════════════════
   CLASSES QUE O JS/HTML USAM E QUE NÃO TINHAM REGRA
   Levantadas no cruzamento HTML ↔ CSS ↔ JS da revisão técnica.
   ══════════════════════════════════════════════════════════════════════════════ */

/* Painéis de aba do console. A troca de aba alterna .hidden; estas regras dão
   estrutura e transição, sem depender de .hidden para o estado inicial. */
.tab-pane {
  animation: fadeIn 0.25s ease;
}
.tab-pane.active {
  display: block;
}

/* Cabeçalho após rolagem (prematriz.js alterna esta classe no .app-header). */
.app-header.header-scrolled {
  box-shadow: var(--shadow-md);
  border-bottom-color: var(--card-hover-border);
}

/* Cartão de vidro usado no resumo final da Matriz 6×6. */
.glass-card {
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  backdrop-filter: blur(12px);
}

/* Etiquetas curtas de estado no visualizador de pasta e nos laudos. */
.badge {
  display: inline-block;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: var(--radius-sm);
  background: var(--tabs-bg);
  color: var(--text-muted);
  border: 1px solid var(--glass-border);
}
.badge.blue   { background: var(--tone-accent-bg);  color: var(--tone-accent-fg);  border-color: transparent; }
.badge.green  { background: var(--tone-success-bg); color: var(--tone-success-fg); border-color: transparent; }
.badge.amber  { background: var(--tone-warning-bg); color: var(--tone-warning-fg); border-color: transparent; }
.badge.red    { background: var(--tone-danger-bg);  color: var(--tone-danger-fg);  border-color: transparent; }

/* Cartão neutro genérico. */
.card {
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 24px;
  box-shadow: var(--shadow-sm);
}

/* Cartão de entrada direta na Matriz, no launcher. */
.launcher-card-direct {
  border-color: var(--ia-border);
  background: linear-gradient(135deg, var(--ia-bg), var(--tone-accent-bg));
}
.launcher-card-direct:hover {
  border-color: var(--color-purple);
}

/* Erro em <select> obrigatório — antes só .field-input e .field-textarea
   recebiam a marcação de erro. */
.field-group.has-error .field-select {
  border-color: var(--color-danger);
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.12);
}

/* ══════════════════════════════════════════════════════════════════════════════
   TELA DE ACESSO DO OPERADOR (/login)
   ══════════════════════════════════════════════════════════════════════════════ */
.login-shell {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}
.login-card {
  width: 100%;
  max-width: 420px;
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius-lg);
  padding: 36px 34px;
  box-shadow: var(--shadow-lg);
}
.login-marca {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 26px;
}
.login-marca .sigla {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-sm);
  background: var(--color-primary);
  color: #fff;
  display: grid;
  place-items: center;
  font-weight: 800;
  font-size: 19px;
}
.login-marca h1 {
  font-size: 16px;
  margin: 0;
  color: var(--text-strong);
  letter-spacing: 0.01em;
}
.login-marca p {
  margin: 2px 0 0;
  font-size: 12px;
  color: var(--text-muted);
}
/* h1 e h2 juntos porque as quatro telas desta família se dividem: login,
   convite e redefinir-senha trazem a marca em <h1> dentro de .login-marca e o
   título da tela em <h2>; a recusa não tem o bloco da marca, e ali o título da
   tela é o único cabeçalho — tinha de ser o <h1>, ou a página ficava sem
   nenhum. Mesmo tamanho nos dois casos. */
.login-card h1,
.login-card h2 {
  font-size: 20px;
  margin: 0 0 6px;
  color: var(--text-strong);
}
.login-card .sub {
  font-size: 13.5px;
  color: var(--text-muted);
  margin: 0 0 22px;
  line-height: 1.5;
}
.login-erro {
  background: rgba(239, 68, 68, 0.1);
  border: 1px solid rgba(239, 68, 68, 0.35);
  color: var(--color-danger);
  border-radius: var(--radius-sm);
  padding: 11px 14px;
  font-size: 13.5px;
  margin-bottom: 18px;
}
.login-acoes { margin-top: 22px; }
.login-acoes .btn { width: 100%; justify-content: center; padding: 12px; }
.login-rodape {
  margin-top: 22px;
  padding-top: 16px;
  border-top: 1px solid var(--glass-border);
  font-size: 12px;
  color: var(--text-muted);
  line-height: 1.55;
}

/* ══════════════════════════════════════════════════════════════════════════════
   RESPONSIVIDADE DO CONSOLE
   ──────────────────────────────────────────────────────────────────────────────
   Três pontos de quebra: 1280 (o cabeçalho deixa de caber numa linha),
   960 (wizard e matriz viram coluna única) e 640 (telefone).

   Regra que vale para todos: item de grid nasce com min-width:auto e se recusa
   a encolher abaixo do conteúdo — é o que estoura a trilha e empurra a página
   na horizontal. Por isso todo filho de grid aqui recebe min-width: 0.
   ══════════════════════════════════════════════════════════════════════════════ */

.form-grid > *,
.launcher-grid > *,
.wizard-shell > *,
.matrix-layout > *,
.matrix-grid-container > * { min-width: 0; }

/* A barra de abas rola em si mesma em vez de empurrar o cabeçalho. */
.nav-tabs {
  overflow-x: auto;
  scrollbar-width: thin;
  -webkit-overflow-scrolling: touch;
}
.nav-tabs::-webkit-scrollbar { height: 4px; }
.nav-tabs::-webkit-scrollbar-thumb { background: var(--glass-border); border-radius: var(--radius-full); }
.tab-btn { flex-shrink: 0; white-space: nowrap; }

/* O cabeçalho já nasce em duas linhas (comum.css), então a quebra por
   flex-wrap abaixo de 1280px — que punha as abas na segunda linha só quando a
   largura apertava — deixou de existir. */

/* ── ≤960px: colunas únicas ── */
@media (max-width: 960px) {
  .matrix-layout { grid-template-columns: 1fr; }

  /* A barra lateral deixa de ser fixa e vira um trilho horizontal de etapas,
     para não consumir uma tela inteira antes do formulário começar. */
  .wizard-sidebar {
    position: static;
    top: auto;
    padding: 16px;
  }
  .wizard-steplist {
    flex-direction: row;
    overflow-x: auto;
    gap: 8px;
    padding-bottom: 6px;
    scrollbar-width: thin;
  }
  .wizard-step-item {
    flex-shrink: 0;
    border-left: none;
    border-bottom: 3px solid transparent;
    border-radius: var(--radius-sm) var(--radius-sm) 0 0;
  }
  .wizard-step-item.active {
    border-left: none;
    border-bottom-color: var(--color-primary);
  }
  .wizard-step-item .step-label { display: none; }
  .wizard-step-item.active .step-label { display: block; }
  .wizard-content { padding: 22px 18px; }
}

/* ── ≤640px: telefone ── */
@media (max-width: 640px) {
  .app-container { padding: 0 14px; margin-top: 16px; }
  .form-grid { grid-template-columns: 1fr; }
  .launcher-grid { grid-template-columns: 1fr; }
  .launcher-shell { padding: 20px 0 32px; }
  .launcher-hero h2 { font-size: 22px; }

  .presets-strip { padding: 10px 14px; }
  .preset-btn-group { width: 100%; }

  .wizard-actions { flex-direction: column-reverse; align-items: stretch; gap: 10px; }
  .wizard-actions .btn { width: 100%; justify-content: center; }

  .step-header h2, .step-title { font-size: 18px; }

  /* Grade 6×6: abaixo disso a célula fica ilegível, então rola no contêiner. */
  .matrix-grid-container { overflow-x: auto; }
  .espiral-grid { min-width: 340px; }
}

/* Conteúdo largo nunca empurra o corpo da página. */
.tabela-rolavel, .matrix-results-grid-view { overflow-x: auto; }

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
}

/* Os diálogos e o painel de sessão expirada vivem em comum.css: o painel do
   caso e os laudos usam os mesmos componentes, e enquanto estavam escritos aqui
   e em documento.css as duas cópias já divergiam na cor do véu. */

/* Foco sempre visível — requisito de navegação por teclado. */
.btn:focus-visible,
.tab-btn:focus-visible,
.preset-btn:focus-visible,
.launcher-card:focus-visible,
.caso-linha:focus-visible,
.wizard-step-item:focus-visible,
.field-input:focus-visible,
.field-select:focus-visible,
.field-textarea:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Os cartões do launcher são <button> para chegarem ao teclado; estas regras
   removem a aparência herdada de botão sem mexer no desenho do cartão. */
button.launcher-card {
  font: inherit;
  color: inherit;
  text-align: left;
  width: 100%;
  appearance: none;
}

/* Rede de segurança: qualquer elemento focado por teclado tem anel visível,
   mesmo os que não constam da lista acima. As regras que zeram `outline` no
   estado :focus continuam valendo para o foco por mouse. */
:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* ══════════════════════════════════════════════════════════════════════════════
   PALETA DE COMANDOS (Ctrl+K)
   ──────────────────────────────────────────────────────────────────────────────
   Só o console tem paleta, então ela mora aqui e não em comum.css: o painel, o
   dossiê e os laudos são páginas de leitura, sem aba para trocar nem estado
   para procurar.

   Monta sobre o <dialog> compartilhado — o véu, o Esc, a retenção de foco e a
   camada superior já vêm de lá. O que é próprio é o formato: mais larga que um
   diálogo de aviso, presa perto do topo em vez de centrada, porque a lista
   cresce para baixo e uma caixa centrada pularia na tela a cada tecla.
   ══════════════════════════════════════════════════════════════════════════════ */

.paleta {
  max-width: min(640px, calc(100vw - 32px));
  /* Centrada na horizontal como qualquer diálogo; presa perto do topo na
     vertical, porque a lista cresce para baixo e uma caixa centrada pularia
     na tela a cada tecla digitada. */
  margin: 12vh auto auto;
}
.paleta-corpo {
  padding: 0;
  overflow: hidden;
}

.paleta-campo {
  width: 100%;
  border: none;
  border-bottom: 1px solid var(--card-border);
  background: transparent;
  color: var(--input-color);
  font-family: inherit;
  font-size: 16px;
  padding: 18px 22px;
}
.paleta-campo:focus {
  outline: none;
  border-bottom-color: var(--color-primary);
}
.paleta-campo::placeholder { color: var(--text-muted); }

/* A lista rola dentro de si: com muitas organizações, uma paleta que cresce
   até o fim da tela empurra o próprio campo de busca para fora de vista. */
.paleta-lista {
  max-height: min(52vh, 440px);
  overflow-y: auto;
  padding: 8px;
}

.paleta-grupo {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--text-muted);
  padding: 12px 12px 6px;
}
.paleta-lista > .paleta-grupo:first-child { padding-top: 6px; }

.paleta-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 12px;
  border-radius: var(--radius-sm);
  cursor: pointer;
  border: 1px solid transparent;
}
.paleta-item.selecionado {
  background: var(--tone-accent-bg);
  border-color: var(--card-hover-border);
}
.paleta-icone {
  flex-shrink: 0;
  width: 22px;
  text-align: center;
  font-size: 15px;
  color: var(--text-muted);
}
.paleta-texto {
  display: flex;
  flex-direction: column;
  min-width: 0;
  flex: 1;
}
.paleta-rotulo {
  font-family: 'Outfit', sans-serif;
  font-size: 14px;
  font-weight: 600;
  color: var(--text-main);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.paleta-rotulo mark {
  background: var(--tone-warning-bg);
  color: var(--tone-warning-fg);
  border-radius: 3px;
  padding: 0 1px;
}
.paleta-dica {
  font-size: 12px;
  color: var(--text-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.paleta-vazio {
  padding: 22px;
  margin: 0;
  font-size: 13.5px;
  color: var(--text-muted);
  text-align: center;
}

.paleta-rodape {
  display: flex;
  gap: 16px;
  padding: 10px 20px;
  border-top: 1px solid var(--card-border);
  background: var(--tabs-bg);
  font-size: 11.5px;
  color: var(--text-muted);
  flex-wrap: wrap;
}

/* Tecla desenhada como tecla — vale no rodapé, na linha de cada ação e no
   botão do cabeçalho que anuncia o Ctrl+K. Atalho que ninguém descobre é
   atalho que não existe. */
kbd {
  font-family: inherit;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1;
  padding: 3px 6px;
  border-radius: 5px;
  border: 1px solid var(--card-border);
  background: var(--surface-sunken);
  color: var(--text-muted);
  white-space: nowrap;
}
.paleta-atalho { flex-shrink: 0; }
.topo-btn kbd { margin-left: 2px; }

/* Numa tela estreita não há Ctrl para pressionar, e o selo só ocuparia o
   lugar do rótulo. O botão continua abrindo a paleta no toque. */
@media (max-width: 860px) {
  .topo-btn kbd { display: none; }
}

@media (max-width: 640px) {
  .paleta { margin: 6vh auto auto; }
  .paleta-campo { font-size: 15px; padding: 15px 16px; }
  .paleta-lista { max-height: 58vh; }
  .paleta-rodape { display: none; }
}
