/* Hegemonia — estilos globais.
   ---------------------------------------------------------------------------
   REGRA: nenhum valor de cor literal fora do bloco de tokens abaixo. Se
   precisares de uma cor nova, dá-lhe um token; se precisares dela só numa
   skin, redefine o token dentro do bloco dessa skin.

   As duas skins do relatório (§3.2 do diagnóstico de Agosto 2026) vivem em
   `[data-skin="…"]` no <body>, injectado pelo context processor
   `accounts.context_processors.report_skin`. */

:root {
  /* Paleta base — skin "corte" (moderna): pergaminho claro, tinta escura,
     âmbar e carmim como acentos. É a heráldica que o dashboard já tentava
     usar antes de bater nas table-dark que a Fase A removeu. */
  --hg-bg:         #ffffff;
  --hg-surface:    #f7f2e6;
  --hg-ink:        #221c14;
  --hg-ink-muted:  #6b6152;
  --hg-accent:     #b8860b;   /* âmbar heráldico */
  --hg-accent-2:   #9b1c1c;   /* carmim */
  --hg-border:     #d6cbb3;
  --hg-ok:         #28a745;
  --hg-err:        #dc3545;
  --hg-phosphor:   #4caf50;   /* o verde do mapa ASCII, alheio às skins */

  --hg-font-body:  system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --hg-font-mono:  'JetBrains Mono', 'Courier New', 'Lucida Console', monospace;
  --hg-radius:     4px;
}

/* Skin CORTE — a moderna. Herda os tokens de :root; existe como bloco próprio
   para que a regra "cada skin declara a sua paleta" se leia sem excepções. */
[data-skin="corte"] {
  --hg-bg:         #ffffff;
  --hg-surface:    #f7f2e6;
  --hg-ink:        #221c14;
  --hg-ink-muted:  #6b6152;
  --hg-accent:     #b8860b;
  --hg-accent-2:   #9b1c1c;
  --hg-border:     #d6cbb3;
}

/* Skin PERGAMINHO — a vintage. Monocromática por decisão (§4.3): tinta escura
   sobre pergaminho, sem cor de informação e sem uma única imagem. Se um dia se
   quiser o fósforo verde do mapa ASCII, troca-se este bloco e mais nada. */
[data-skin="pergaminho"] {
  --hg-bg:         #e8dcc0;
  --hg-surface:    #e8dcc0;
  --hg-ink:        #221c14;
  --hg-ink-muted:  #221c14;
  --hg-accent:     #221c14;
  --hg-accent-2:   #221c14;
  --hg-border:     #221c14;
  --hg-font-body:  var(--hg-font-mono);
}

/* Fonte monoespaçada self-hosted (não CDN, ver A5). 'Courier New' não aguenta
   as 104 colunas de tabela alinhada do relatório TXT com dignidade. */
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/static/fonts/JetBrainsMono-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'JetBrains Mono';
  src: url('/static/fonts/JetBrainsMono-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

body {
  background: var(--hg-bg);
  color: var(--hg-ink);
  font-family: var(--hg-font-body);
}

.cursor-pointer { cursor: pointer; }

/* Navbar */
.navbar-brand { letter-spacing: 2px; font-size: 1.3rem; }

/* Cards de condado */
.card { border-radius: var(--hg-radius); }

/* Mapa SVG */
#map-svg svg { display: block; }
.hex-tile { transition: opacity 0.12s, stroke-width 0.12s; }
.hex-tile:hover { opacity: 0.75; stroke-width: 1.5 !important; stroke: var(--hg-accent) !important; }
.hex-center { stroke: var(--hg-accent) !important; stroke-width: 2.5 !important; }

/* Bloco monoespaçado do relatório vintage e do mapa ASCII.
   Largura fixa com scroll horizontal, nunca reflow: o alinhamento em colunas
   (REPORT_WIDTH = 104) é a estética, e quebrar linhas destrói-a. */
.report-pre {
  font-family: var(--hg-font-mono);
  font-size: 0.8rem;
  line-height: 1.35;
  color: var(--hg-ink);
  background: var(--hg-surface);
  border: 1px solid var(--hg-border);
  border-radius: var(--hg-radius);
  padding: 1rem 1.25rem;
  margin: 0;
  white-space: pre;
  overflow-x: auto;
}

/* Mapa ASCII vintage — o protótipo desta skin, generalizado acima. */
#map-ascii pre {
  font-family: var(--hg-font-mono);
  font-size: 0.8rem;
  line-height: 1.4;
  color: var(--hg-phosphor);
}

/* Miniaturas de catálogo (templates/partials/_item_thumb.html).
   Tamanho fixo para a tabela não saltar enquanto as imagens carregam, e um
   estado próprio para "ainda não ilustrado" — o placeholder herda a cor da
   tinta e é discreto sem desaparecer. */
.item-thumb {
  object-fit: contain;
  vertical-align: middle;
  border-radius: 2px;
}
.item-thumb-vazia {
  color: var(--hg-ink-muted);
  opacity: 0.45;
}

/* Barra de progresso fina */
.progress { border-radius: 2px; }

/* HTMX indicator */
.htmx-request .htmx-indicator { display: block !important; }

/* Formulário de ordens */
.order-group {
  border-left: 3px solid var(--hg-accent);
  padding-left: 1rem;
  margin-bottom: 1.5rem;
}

/* Badge de estado */
.badge-status-ok { background: var(--hg-ok); }
.badge-status-err { background: var(--hg-err); }

/* Preview de brasão/estandarte (Armoria) — o SVG devolvido pela API traz o
   seu próprio tamanho intrínseco, maior que o contentor; sem isto o desenho
   transborda por cima de outros elementos da página até se clicar "Guardar" */
.armoria-preview {
  display: inline-block;
  overflow: hidden;
  position: relative;
  z-index: 1;
}
.armoria-preview svg {
  display: block;
  width: 100%;
  height: 100%;
}
