/*
  Prontidão: componentes partilhados.
  Base: CSS da maquete (docs/maquete/maquete-inicio.html).
  Regras:
   - mobile first (funciona a 360 px), alvos de toque >= var(--toque-min);
   - só var(--token), nunca cores soltas;
   - sem gráficos de progresso (.gauge, .chart, .kv… ficam de fora).
  Carregar DEPOIS de tokens.css.
  As classes .forcar-hover e .forcar-foco só servem para a montra
  design.html mostrar esses estados sem o rato.
*/

/* =========================================================
   1. Base
   ========================================================= */
*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  /* Zonas tapadas pelas barras fixas (topo, nav e barra de ação). Quando o
     foco muda com o Tab, o browser desliza o suficiente para o elemento
     ficar visível fora delas (WCAG 2.4.11, foco não tapado). */
  scroll-padding-top: calc(72px + env(safe-area-inset-top, 0px));
  scroll-padding-bottom: calc(var(--altura-nav) + var(--esp-4) + env(safe-area-inset-bottom, 0px));
}
html:has(.barra-acao:not([hidden])) {
  scroll-padding-bottom: calc(var(--altura-nav) + 88px + var(--esp-4) + env(safe-area-inset-bottom, 0px));
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font);
  font-size: var(--fs-base);
  line-height: var(--lh);
  overflow-wrap: break-word;
}

/* O atributo hidden vence sempre (evita que display:grid o anule). */
[hidden] { display: none !important; }

h1, h2, h3, h4 { margin: 0; line-height: 1.2; letter-spacing: -.01em; font-weight: var(--peso-extra); }
h1 { font-size: var(--fs-xl); letter-spacing: -.025em; }
h2 { font-size: var(--fs-lg); letter-spacing: -.02em; }
h3 { font-size: var(--fs-md); }
h4 { font-size: var(--fs-base); }
p { margin: 0; }
img, svg { max-width: 100%; }

a { color: var(--mint-forte); font-weight: var(--peso-forte); text-underline-offset: 2px; }

:where(button, input, select, textarea) { font: inherit; color: inherit; }
button { cursor: pointer; }

/* Foco visível em tudo o que se usa com teclado */
:focus-visible,
.forcar-foco {
  outline: var(--foco);
  outline-offset: 2px;
  border-radius: 8px;
}

/* Texto só para leitores de ecrã */
.sr-only {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* Ligação "Saltar para o conteúdo" (aparece ao receber foco) */
.saltar {
  position: absolute;
  left: var(--esp-2);
  top: -100px;
  z-index: var(--z-toast);
  background: var(--surface);
  color: var(--ink);
  padding: var(--esp-3) var(--esp-4);
  border-radius: var(--raio-md);
  box-shadow: var(--sombra-2);
}
.saltar:focus { top: var(--esp-2); }

/* Pequenas utilidades de disposição */
.pilha { display: grid; gap: var(--esp-3); }
.pilha-lg { display: grid; gap: var(--esp-5); }
.linha { display: flex; flex-wrap: wrap; gap: var(--esp-2); align-items: center; }
.muted { color: var(--muted); }
.mono { font-family: var(--mono); font-variant-numeric: tabular-nums; }

/* =========================================================
   2. Casca de página de módulo
   <div class="app"> topo + main.conteudo + footer.rodape </div>
   ========================================================= */
.app {
  min-height: 100vh;
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
}

/* Barra de topo: [voltar] [título] [ações] */
.topo {
  position: sticky;
  top: 0;
  z-index: var(--z-topo);
  display: grid;
  grid-template-columns: var(--toque-min) minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--esp-2);
  padding: var(--esp-2) var(--gutter);
  padding-top: calc(var(--esp-2) + env(safe-area-inset-top, 0px));
  background: var(--bg);
  border-bottom: 1px solid var(--line);
}
.topo h1 {
  font-size: var(--fs-md);
  letter-spacing: -.01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.topo .acoes { display: flex; gap: var(--esp-1); justify-content: flex-end; min-width: var(--toque-min); }

/* Conteúdo central com largura de leitura confortável */
.conteudo {
  flex: 1;
  width: 100%;
  max-width: var(--largura-leitura);
  margin-inline: auto;
  padding: var(--esp-4) var(--gutter) var(--esp-6);
  display: grid;
  align-content: start;
  gap: var(--esp-5);
}
.conteudo--largo { max-width: 1100px; }

/* Rodapé com o aviso; reserva espaço para a nav fixa */
.rodape {
  width: 100%;
  max-width: var(--largura-leitura);
  margin-inline: auto;
  padding: var(--esp-4) var(--gutter) calc(var(--altura-nav) + var(--esp-6) + env(safe-area-inset-bottom, 0px));
  border-top: 1px solid var(--line);
}
/* Se a página tiver barra de ação fixa, reserva mais espaço */
.app:has(.barra-acao:not([hidden])) .rodape {
  padding-bottom: calc(var(--altura-nav) + 88px + env(safe-area-inset-bottom, 0px));
}

/* Título de secção com ligação à direita (como "Recomendado para ti · Ver tudo") */
.titulo-secao {
  margin: 0 0 10px;
  font-size: var(--fs-md);
  font-weight: var(--peso-extra);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--esp-2);
}
.titulo-secao a {
  font-size: 13px;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  min-height: var(--toque-min);
}

/* =========================================================
   3. Botões
   ========================================================= */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--esp-2);
  min-height: var(--toque-min);
  padding: 12px 20px;
  border: 0;
  border-radius: var(--raio-pill);
  font-weight: var(--peso-forte);
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: border-color var(--transicao), transform var(--transicao);
}
.btn:active { transform: scale(.98); }
.btn-primary { background: var(--mint-forte); color: var(--mint-ink); }
.btn-primary:hover,
.btn-primary.forcar-hover { background: color-mix(in srgb, var(--mint-forte) 86%, var(--ink)); }
.btn-ghost { background: var(--surface); color: var(--ink); border: 1.5px solid var(--line); }
.btn-ghost:hover,
.btn-ghost.forcar-hover { border-color: var(--mint); }
.btn-org { background: var(--nav); color: var(--nav-ink-ativo); }
.btn-org:hover,
.btn-org.forcar-hover { background: color-mix(in srgb, var(--nav) 85%, var(--mint)); }
.btn-perigo { background: var(--bandeira); color: var(--bandeira-ink); }
.btn-perigo:hover,
.btn-perigo.forcar-hover { background: color-mix(in srgb, var(--bandeira) 85%, var(--ink)); }
.btn-bloco { width: 100%; }

.btn:disabled,
.btn[aria-disabled="true"] {
  opacity: .5;
  cursor: not-allowed;
  transform: none;
}

/* Botão com aspeto de ligação */
.link {
  display: inline-flex;
  align-items: center;
  min-height: var(--toque-min);
  background: none;
  border: 0;
  padding: 0;
  color: var(--mint-forte);
  font-weight: var(--peso-forte);
  text-align: left;
  text-decoration: none;
  cursor: pointer;
}
.link:hover,
.link.forcar-hover { text-decoration: underline; }

/* Botão redondo só com ícone (precisa de aria-label) */
.icon-btn,
.bell,
.voltar {
  position: relative;
  display: inline-grid;
  place-items: center;
  width: var(--toque-min);
  height: var(--toque-min);
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: none;
  color: var(--ink);
  text-decoration: none;
  cursor: pointer;
}
.icon-btn:hover, .bell:hover, .voltar:hover,
.icon-btn.forcar-hover { background: var(--mint-soft); }
.icon-btn svg, .bell svg, .voltar svg { width: 24px; height: 24px; }
/* Ponto de notificação do sino */
.bell i {
  position: absolute;
  top: 9px;
  right: 9px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--warn);
}

/* Avatar com a inicial */
.avatar {
  width: 42px;
  height: 42px;
  flex: none;
  border-radius: 50%;
  background: var(--i-orange-forte); /* texto branco: versão forte (AA) */
  color: var(--on-icon);
  display: grid;
  place-items: center;
  font-weight: var(--peso-extra);
}

/* =========================================================
   4. Ícone redondo e cores
   As classes .ic--* dão a cor de fundo; servem também para .thumb.
   ========================================================= */
.ic {
  width: 48px;
  height: 48px;
  flex: none;
  border-radius: 50%;
  display: grid;
  place-items: center;
  color: var(--on-icon);
  box-shadow: var(--sombra-ic);
}
.ic svg { width: 26px; height: 26px; }
.ic--verde { background: var(--i-green); }
.ic--azul { background: var(--i-blue); }
.ic--laranja { background: var(--i-orange); }
.ic--roxo { background: var(--i-purple); }
.ic--vermelho { background: var(--i-red); }
.ic--ciano { background: var(--i-cyan); }
/* Miniaturas com texto branco: versões fortes das mesmas cores (AA 4,5:1). */
.thumb.ic--verde { background: var(--i-green-forte); }
.thumb.ic--laranja { background: var(--i-orange-forte); }
.thumb.ic--azul { background: var(--i-blue-forte); }
.thumb.ic--ciano { background: var(--i-cyan-forte); }

/* =========================================================
   5. Azulejos (Acesso rápido)
   ========================================================= */
.tiles {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--esp-2);
}
.tile {
  position: relative;
  min-width: 0;
  min-height: var(--toque-min);
  display: grid;
  justify-items: center;
  align-content: start;
  gap: var(--esp-2);
  padding: 12px 4px 10px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--raio-tile);
  color: var(--ink);
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: transform var(--transicao), border-color var(--transicao);
}
.tile:hover,
.tile.forcar-hover { border-color: var(--mint); }
.tile:active { transform: scale(.97); }
.tile > span:last-child {
  font-size: 11.5px;
  font-weight: var(--peso-forte);
  line-height: 1.2;
  overflow-wrap: anywhere;
}
@media (max-width: 380px) {
  .tile .ic { width: 42px; height: 42px; }
}

/* Cadeado (precisa de conta) */
.lock {
  position: absolute;
  top: 6px;
  right: 6px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--bg);
  display: grid;
  place-items: center;
  font-size: 10px;
  line-height: 1;
}

/* =========================================================
   6. Cartão
   ========================================================= */
.card {
  min-width: 0;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--raio-card);
  padding: 14px;
}
.card h3, .card h4 { margin: 0 0 6px; font-size: 14px; font-weight: var(--peso-extra); }
.card--folgado { padding: var(--esp-5); }

/* "Dados de exemplo" */
.example {
  display: inline-block;
  justify-self: start;
  margin-top: 6px;
  padding: 2px 8px;
  border: 1px dashed var(--line);
  border-radius: var(--raio-pill);
  color: var(--muted);
  font-size: var(--fs-xs);
  font-weight: var(--peso-forte);
  letter-spacing: .06em;
  text-transform: uppercase;
}

/* =========================================================
   7. Lista "Recomendado para ti"
   ========================================================= */
.list { display: grid; gap: 10px; }
.rec {
  width: 100%;
  min-height: var(--toque-min);
  display: grid;
  grid-template-columns: 56px minmax(0, 1fr) 36px;
  align-items: center;
  gap: var(--esp-3);
  padding: 10px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--raio-tile);
  color: var(--ink);
  text-align: left;
  text-decoration: none;
  font-weight: var(--peso-normal);
  cursor: pointer;
  transition: border-color var(--transicao);
}
.rec:hover,
.rec.forcar-hover { border-color: var(--mint); }
.rec > span { min-width: 0; }
.rec small { color: var(--muted); font-size: 12px; }
.rec b { display: block; font-size: 14px; }
.thumb {
  width: 56px;
  height: 56px;
  border-radius: var(--raio-md);
  display: grid;
  place-items: center;
  color: var(--on-icon);
  font-family: var(--mono);
  font-size: var(--fs-xs);
  font-weight: var(--peso-medio);
  line-height: 1.15;
  text-align: center;
}
.go {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--mint-soft);
  color: var(--mint-forte);
  display: grid;
  place-items: center;
  font-weight: var(--peso-extra);
}

/* Sinais vitais em letra mono; .w = valor de aviso */
.vitals {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 12px;
  margin-top: 6px;
  font-family: var(--mono);
  font-size: 12px;
  font-variant-numeric: tabular-nums;
}
.vitals b { display: inline; }
.vitals .w { color: var(--warn-texto); font-weight: var(--peso-extra); }

/* =========================================================
   8. Etiquetas (.tag) e chips de filtro (.chip)
   ========================================================= */
.tag {
  display: inline-flex;
  align-items: center;
  gap: var(--esp-1);
  padding: 3px 10px;
  border: 1px solid var(--line);
  border-radius: var(--raio-pill);
  background: var(--surface);
  color: var(--ink);
  font-size: 12px;
  font-weight: var(--peso-forte);
  line-height: 1.4;
  white-space: nowrap;
}
.tag--menta { background: var(--mint-soft); border-color: transparent; }
.tag--ok { background: var(--ok-soft); color: var(--ok); border-color: transparent; }
.tag--parcial { background: var(--parcial-soft); color: var(--parcial); border-color: transparent; }
.tag--erro { background: var(--erro-soft); color: var(--erro); border-color: transparent; }
.tag--info { background: var(--info-soft); color: var(--info); border-color: transparent; }
.tag--bandeira { background: var(--bandeira); color: var(--bandeira-ink); border-color: transparent; }
.tag--mono { font-family: var(--mono); font-variant-numeric: tabular-nums; }

.chips { display: flex; flex-wrap: wrap; gap: var(--esp-2); }
.chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: var(--toque-min);
  padding: 8px 14px;
  border: 1.5px solid var(--line);
  border-radius: var(--raio-pill);
  background: var(--surface);
  color: var(--ink);
  font-size: 13px;
  font-weight: var(--peso-forte);
  cursor: pointer;
  transition: border-color var(--transicao);
}
.chip:hover,
.chip.forcar-hover { border-color: var(--mint); }
/* Selecionado: cor + visto (não depende só da cor) */
.chip[aria-pressed="true"],
.chip[aria-checked="true"] {
  background: var(--mint-soft);
  border-color: var(--mint);
}
.chip[aria-pressed="true"]::before,
.chip[aria-checked="true"]::before { content: "✓"; font-weight: var(--peso-extra); }
.chip:disabled { opacity: .5; cursor: not-allowed; }

/* =========================================================
   9. Separadores (.tabs) e controlo segmentado (.segmentado)
   ========================================================= */
.tabs,
.segmentado {
  display: flex;
  gap: 6px;
  padding: 4px;
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: var(--raio-pill);
}
.tabs button,
.segmentado button {
  flex: 1;
  min-width: 0;
  min-height: var(--toque-min);
  padding: 8px;
  border: 0;
  border-radius: var(--raio-pill);
  background: transparent;
  color: var(--muted);
  font-weight: var(--peso-forte);
  cursor: pointer;
}
.tabs button[aria-selected="true"],
.segmentado button[aria-pressed="true"],
.segmentado button[aria-checked="true"] {
  background: var(--surface);
  color: var(--ink);
  box-shadow: var(--sombra-1);
}

/* =========================================================
   10. Interruptor
   <button class="interruptor" role="switch" aria-checked="false">
     Texto <span class="trilho" aria-hidden="true"></span></button>
   ========================================================= */
.interruptor {
  display: inline-flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--esp-3);
  min-height: var(--toque-min);
  padding: 0;
  border: 0;
  background: none;
  color: var(--ink);
  font-weight: var(--peso-medio);
  text-align: left;
  cursor: pointer;
}
.trilho {
  position: relative;
  flex: none;
  width: 46px;
  height: 28px;
  border-radius: var(--raio-pill);
  background: var(--line);
  border: 1.5px solid var(--muted);
  transition: background-color var(--transicao);
}
.trilho::after {
  content: "";
  position: absolute;
  top: 3px;
  left: 3px;
  width: 19px;
  height: 19px;
  border-radius: 50%;
  background: var(--surface);
  box-shadow: var(--sombra-1);
  transition: transform var(--transicao);
}
.interruptor[aria-checked="true"] .trilho { background: var(--mint); border-color: var(--mint); }
.interruptor[aria-checked="true"] .trilho::after { transform: translateX(18px); }

/* =========================================================
   11. Formulários
   ========================================================= */
label {
  display: grid;
  gap: 5px;
  font-size: 13px;
  font-weight: var(--peso-forte);
}
/* :where() tem especificidade zero, para os componentes (ex.: .pesquisa)
   poderem ajustar o campo sem lutar contra esta regra. */
:where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"])),
:where(select, textarea) {
  width: 100%;
  min-height: var(--toque-min);
  padding: 11px 12px;
  border: 1.5px solid var(--line);
  border-radius: var(--raio-sm);
  background: var(--bg);
  color: var(--ink);
  font-size: 16px; /* 16 px evita o zoom automático do iOS ao focar */
}
textarea { min-height: 96px; resize: vertical; }
input:focus-visible, select:focus-visible, textarea:focus-visible {
  border-color: var(--mint);
  outline-offset: 1px;
  border-radius: var(--raio-sm);
}
input::placeholder, textarea::placeholder { color: var(--muted); opacity: 1; }
input:disabled, select:disabled, textarea:disabled { opacity: .55; cursor: not-allowed; }
[aria-invalid="true"] { border-color: var(--erro) !important; }

/* Caixas de verificação e opções: <label class="check"><input type="checkbox"> Texto</label> */
.check {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: var(--toque-min);
  font-size: var(--fs-base);
  font-weight: var(--peso-medio);
  cursor: pointer;
}
input[type="checkbox"], input[type="radio"] {
  width: 22px;
  height: 22px;
  margin: 0;
  flex: none;
  accent-color: var(--mint);
}

/* Mensagem de erro do formulário */
.err { min-height: 1em; color: var(--warn-texto); font-size: 13px; font-weight: var(--peso-medio); }

/* Campo de pesquisa com lupa
   <div class="pesquisa"><svg …/><input type="search" aria-label="Pesquisar"></div> */
.pesquisa { position: relative; }
.pesquisa svg {
  position: absolute;
  left: 12px;
  top: 50%;
  width: 20px;
  height: 20px;
  transform: translateY(-50%);
  color: var(--muted);
  pointer-events: none;
}
.pesquisa input[type="search"] { padding-left: 42px; background: var(--surface); }

/* =========================================================
   12. Acordeão / cartão expansível
   ========================================================= */
.acordeao {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--raio-tile);
  overflow: hidden;
}
.acordeao > summary,
.acordeao > .acordeao-cabeca {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--esp-3);
  width: 100%;
  min-height: var(--toque-min);
  padding: var(--esp-3) 14px;
  border: 0;
  background: none;
  color: var(--ink);
  font-weight: var(--peso-forte);
  text-align: left;
  list-style: none;
  cursor: pointer;
}
.acordeao > summary::-webkit-details-marker { display: none; }
.acordeao > summary::after,
.acordeao > .acordeao-cabeca::after {
  content: "›";
  flex: none;
  font-size: 22px;
  line-height: 1;
  color: var(--muted);
  transform: rotate(90deg);
  transition: transform var(--transicao);
}
.acordeao[open] > summary::after,
.acordeao > .acordeao-cabeca[aria-expanded="true"]::after { transform: rotate(-90deg); }
.acordeao-corpo { padding: 0 14px 14px; display: grid; gap: var(--esp-2); }

/* =========================================================
   13. Indicador de passos (ABCDE + H)
   <ol class="passos"><li><button class="passo" data-estado="…">A</button></li>…</ol>
   data-estado: bloqueada | em-curso | sem-achados | com-acoes
   Passo atual: aria-current="step" (ou aria-selected="true")
   ========================================================= */
.passos {
  display: flex;
  gap: 6px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.passos > li { flex: 1; min-width: 0; display: flex; }
.passo {
  position: relative;
  flex: 1;
  min-width: 0;
  min-height: var(--toque-min);
  border: 1.5px solid var(--line);
  border-radius: var(--raio-sm);
  background: var(--surface);
  color: var(--muted);
  font-size: var(--fs-md);
  font-weight: var(--peso-extra);
  cursor: pointer;
}
.passo[data-estado="em-curso"] { color: var(--ink); border-color: var(--ink); }
.passo[data-estado="sem-achados"] { color: var(--ok); background: var(--ok-soft); border-color: var(--ok); }
.passo[data-estado="com-acoes"] { color: var(--nav-ink-ativo); background: var(--nav); border-color: var(--nav); }
.passo[data-estado="bloqueada"],
.passo[aria-disabled="true"] {
  border-style: dashed;
  opacity: .55;
  cursor: not-allowed;
}
/* Pequeno símbolo no canto: o estado não depende só da cor */
.passo[data-estado="sem-achados"]::after,
.passo[data-estado="com-acoes"]::after {
  position: absolute;
  top: 1px;
  right: 4px;
  font-size: 10px;
  line-height: 1.2;
}
.passo[data-estado="sem-achados"]::after { content: "✓"; }
.passo[data-estado="com-acoes"]::after { content: "●"; }
.passo[aria-current="step"],
.passo[aria-selected="true"] {
  box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px var(--mint);
}

/* =========================================================
   14. Caixas de alerta
   ========================================================= */
.alerta {
  display: grid;
  gap: var(--esp-1);
  padding: var(--esp-3) 14px;
  border: 1px solid var(--line);
  border-left-width: 5px;
  border-radius: var(--raio-md);
  background: var(--surface);
  color: var(--ink);
  font-size: 14px;
}
.alerta-titulo { font-weight: var(--peso-extra); }
.alerta--info { background: var(--info-soft); border-color: var(--info); }
.alerta--info .alerta-titulo { color: var(--info); }
.alerta--aviso { background: var(--parcial-soft); border-color: var(--parcial); }
.alerta--aviso .alerta-titulo { color: var(--parcial); }
.alerta--perigo { background: var(--erro-soft); border-color: var(--erro); }
.alerta--perigo .alerta-titulo { color: var(--erro); }

/* Aviso de formação (o mesmo texto em todos os módulos) */
.aviso-formacao {
  max-width: 60ch;
  margin: 0 auto;
  padding: 0 6px;
  color: var(--muted);
  font-size: 12px;
  text-align: center;
}
.aviso-formacao b, .aviso-formacao strong { color: var(--ink); }

/* Aviso de demonstração (nada é enviado nem guardado) */
.demo { margin: 0; color: var(--muted); font-size: 12px; }
.demo--md { font-size: 14px; }

/* =========================================================
   15. Tabela com deslocamento horizontal
   ========================================================= */
.tablewrap {
  overflow-x: auto;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--raio-tile);
}
.tablewrap table {
  width: 100%;
  min-width: 320px;
  border-collapse: collapse;
  font-size: var(--fs-sm);
  font-variant-numeric: tabular-nums;
}
.tablewrap th,
.tablewrap td {
  padding: 9px 8px;
  border-bottom: 1px solid var(--line);
  text-align: center;
}
.tablewrap th:first-child,
.tablewrap td:first-child { text-align: left; }
.tablewrap thead th {
  color: var(--muted);
  font-size: var(--fs-xs);
  letter-spacing: .05em;
  text-transform: uppercase;
}
.tablewrap tbody tr:last-child td { border-bottom: 0; }
.tablewrap .y { color: var(--ok); font-weight: var(--peso-extra); }
.tablewrap .n { color: var(--muted); }

/* =========================================================
   16. Apoios
   ========================================================= */
/* Cabeçalho da secção: só o título «Com o apoio de:» */
.apoios-cabeca { margin-bottom: 10px; }
.apoios-cabeca h3 { margin: 0; }

/* Os apoiantes usam os mesmos botões do "Acesso rápido" (.tiles / .tile):
   a lista só perde as marcas e margens de <ul>, e cada <li> estica o botão. */
.apoios-grelha { list-style: none; margin: 0; padding: 0; }
.apoio-item { display: grid; min-width: 0; }

/* Logótipo no lugar do ícone, com o mesmo tamanho (48 px; 42 px em ecrãs
   estreitos). Sem placa: o fundo vem do próprio logótipo. */
.apoio-logo {
  display: block;
  width: 48px;
  height: 48px;
  border-radius: 12px;
  object-fit: contain;
}
@media (max-width: 380px) {
  .apoio-logo { width: 42px; height: 42px; }
}

/* Convite «Queres apoiar o Prontidão?»: o mesmo botão, mais discreto
   (tracejado, sem fundo) e com um "+" no lugar do ícone. */
.apoio--convite {
  background: transparent;
  border: 1.5px dashed var(--line);
  color: var(--muted);
}
.apoio-mais {
  background: transparent;
  border: 1.5px dashed var(--line);
  box-shadow: none;
  color: var(--mint-forte);
  font-size: 26px;
  font-weight: var(--peso-forte);
  line-height: 1;
}

/* =========================================================
   17. Barra de navegação inferior
   ========================================================= */
.nav {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: var(--z-nav);
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  /* centra os 5 botões em ecrãs largos, até 560 px */
  padding: 6px max(6px, calc((100% - 560px) / 2)) calc(6px + env(safe-area-inset-bottom, 0px));
  background: var(--nav);
}
.nav a,
.nav button {
  display: grid;
  justify-items: center;
  align-content: center;
  gap: 3px;
  min-width: 0;
  min-height: var(--toque-min);
  padding: 4px 0;
  border: 0;
  border-radius: var(--raio-md);
  background: none;
  color: var(--nav-ink);
  font-size: var(--fs-xs);
  font-weight: var(--peso-medio);
  line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
}
.nav svg { width: 40px; height: 28px; padding: 4px 10px; border-radius: var(--raio-sm); }
.nav a:hover svg, .nav button:hover svg { background: var(--realce-nav); }
.nav [aria-current="page"] { color: var(--nav-ink-ativo); }
.nav [aria-current="page"] svg { background: var(--realce-nav); }
.nav :focus-visible { outline-color: var(--nav-ink-ativo); }

/* =========================================================
   18. Barra de ação fixa (telemóvel), por cima da nav
   ========================================================= */
.barra-acao {
  position: fixed;
  left: 0;
  right: 0;
  bottom: calc(var(--altura-nav) + env(safe-area-inset-bottom, 0px));
  z-index: var(--z-barra-acao);
  display: flex;
  gap: var(--esp-2);
  padding: 10px max(var(--gutter), calc((100% - var(--largura-leitura)) / 2 + var(--gutter)));
  background: var(--surface);
  border-top: 1px solid var(--line);
  box-shadow: var(--sombra-2);
}
.barra-acao > .btn { flex: 1; }

/* =========================================================
   19. Folha (sheet): janela que sobe do fundo
   ========================================================= */
.sheet-bg {
  position: fixed;
  inset: 0;
  z-index: var(--z-sheet);
  display: grid;
  align-items: end;
  justify-items: center;
  padding: var(--esp-4);
  background: var(--veu);
}
@media (min-width: 640px) {
  .sheet-bg { align-items: center; }
}
.sheet {
  width: 100%;
  max-width: 420px;
  max-height: calc(100dvh - 2 * var(--esp-4));
  overflow-y: auto;
  display: grid;
  gap: var(--esp-3);
  padding: 22px 20px calc(20px + env(safe-area-inset-bottom, 0px));
  background: var(--surface);
  color: var(--ink);
  border-radius: var(--raio-sheet);
  box-shadow: var(--sombra-3);
}
.sheet h2, .sheet h4 { margin: 0; font-size: var(--fs-lg); font-weight: var(--peso-extra); }
.sheet > form { display: grid; gap: var(--esp-3); }
/* Enquanto a folha está aberta, a página por trás não desliza */
.sem-scroll { overflow: hidden; }

/* =========================================================
   20. Toast (mensagem curta)
   Fica sempre no DOM com role="status"; vazio = invisível.
   ========================================================= */
.toast {
  /* O toast só informa: os cliques passam através dele, por isso nunca
     tapa um botão (ex.: o "Eliminar" de uma folha aberta). */
  pointer-events: none;
  position: fixed;
  left: 50%;
  bottom: calc(var(--altura-nav) + var(--esp-5) + env(safe-area-inset-bottom, 0px));
  z-index: var(--z-toast);
  max-width: calc(100% - 2 * var(--gutter));
  padding: 11px 16px;
  border-radius: var(--raio-md);
  background: var(--ink);
  color: var(--bg);
  font-size: 14px;
  transform: translateX(-50%);
  box-shadow: var(--sombra-2);
  animation: toast-entra .2s ease-out;
}
.toast:empty {
  padding: 0;
  clip-path: inset(50%);
  animation: none;
}
@keyframes toast-entra {
  from { opacity: 0; transform: translate(-50%, 8px); }
  to { opacity: 1; transform: translate(-50%, 0); }
}

/* =========================================================
   21. Menos movimento, se o sistema o pedir
   ========================================================= */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition: none !important;
    animation: none !important;
    scroll-behavior: auto !important;
  }
}

/* =========================================================
   22. Rodapé: autoria e ligações legais (todas as páginas)
   Vem logo a seguir ao .aviso-formacao:
   <p class="autoria">Criado por Jeferson Rolim · Privacidade · Termos · Sobre</p>
   Antes estava repetido em guia.css, simulador.css e inicio.css.
   ========================================================= */
.autoria {
  margin-top: var(--esp-2);
  color: var(--muted);
  font-size: 12px;
  text-align: center;
}
/* Alvo de toque maior (as ligações são pequenas) */
.autoria a { display: inline-block; padding-block: 12px; }
/* As ligações ficam juntas numa linha: sem um "· Sobre" sozinho. Em ecrãs
   estreitos passam para uma linha própria, sem o separador no início. */
.autoria-ligacoes { white-space: nowrap; }
@media (max-width: 420px) {
  .autoria-sep { display: none; }
  .autoria-ligacoes { display: block; }
}

/* Marca bem visível de demonstração: nada é enviado nem guardado.
   (Antes só em inicio.css; usada na página principal e no Perfil.) */
.marca-demo {
  margin: 0;
  padding: var(--esp-2) var(--esp-3);
  border: 1px dashed var(--parcial);
  border-radius: var(--raio-sm);
  background: var(--parcial-soft);
  color: var(--parcial);
  font-size: 13px;
  font-weight: var(--peso-forte);
}
