/* GERADO — NÃO EDITAR. Fonte única: web/src/styles/hv-institucional.css +
   web/src/styles/tokens.css (blocos marcados @boletim-compartilhado, nesta ordem).
   Regenerar com `python3 scripts/gerar_boletim_css.py`;
   tests/test_login_boletim.py guarda a sincronia. Consumido pelas páginas Jinja
   pré-autenticação (app/templates/base_public.html). */

@font-face {
  font-family: 'Martian Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/static/brand/fonts/martian-mono-latin-wght-normal.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

@font-face {
  font-family: 'Public Sans Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/static/brand/fonts/public-sans-latin-wght-normal.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

:root {
  color-scheme: light;

  /* ── Institucional (imutável) ─────────────────────────────────────────── */
  --hv-azul:        #0036AE;
  --hv-azul-escuro: #002370;
  --hv-laranja:     #FF8900;
  --hv-azul-texto:  light-dark(#0036AE, #8FB0FF);   /* azul quando é TEXTO — no escuro clareia p/ manter AA */
  --hv-azul-tinta:  light-dark(#E7ECF8, #12224A);   /* azul a 8% sobre branco — fundo de destaque */
  --hv-laranja-tinta: light-dark(#FFF1E0, #3A2408);
  --hv-serie-ciano: light-dark(#0E7C86, #2EE6D6);   /* 2ª série categórica de gráfico — dataviz, nunca status nem interação */

  /* ── Semáforo 4 níveis · fundo / sobre (texto no fundo sólido) / texto (AA em superfície) / suave ── */
  --hv-meta:             light-dark(#27803A, #3FD15C);
  --hv-meta-sobre:       light-dark(#FFFFFF, #0B1220);
  --hv-meta-texto:       light-dark(#1C6329, #7FE894);
  --hv-meta-suave:       light-dark(#E4F3E7, #0F2A17);
  --hv-vigilancia:       light-dark(#9C6109, #F4B93F);
  --hv-vigilancia-sobre: light-dark(#FFFFFF, #0B1220);
  --hv-vigilancia-texto: light-dark(#7A4C08, #F8D27E);
  --hv-vigilancia-suave: light-dark(#FBEFD9, #33250A);
  --hv-alerta:           light-dark(#B23223, #FF5C46);
  --hv-alerta-sobre:     light-dark(#FFFFFF, #0B1220);
  --hv-alerta-texto:     light-dark(#8C2418, #FF9384);
  --hv-alerta-suave:     light-dark(#F9E3DF, #3A1410);
  --hv-critico:          light-dark(#6A0000, #C1121F);
  --hv-critico-sobre:    #FFFFFF;
  --hv-critico-texto:    light-dark(#5A0000, #FF4D4D);
  --hv-critico-suave:    light-dark(#F2D9D9, #2A0606);
  --hv-neutro:           light-dark(#6B7689, #8E9AB0);
  --hv-neutro-sobre:     light-dark(#FFFFFF, #0B1220);
  --hv-neutro-texto:     light-dark(#4D5666, #B4BDCC);
  --hv-neutro-suave:     light-dark(#EEF1F5, #1C2434);

  /* ── Neutros com viés de azul (nunca cinza puro) ──────────────────────── */
  --hv-fundo:        light-dark(#F3F5F9, #0B1220);
  --hv-superficie:   light-dark(#FFFFFF, #121A2B);
  --hv-superficie-2: light-dark(#EEF1F6, #1A2336);
  --hv-borda:        light-dark(#D5DBE6, #26314A);
  --hv-borda-forte:  light-dark(#AEB8C9, #3A4763);
  /* Contorno de CONTROLE (campo, botão secundário): ≥3:1 contra superfície e fundo nos 2 temas
     (WCAG 1.4.11; medido 07-out-26: claro 3,72/3,41, escuro 3,83/4,12). --hv-borda-forte (2,0:1 /
     1,9:1) segue para divisores e superfícies, onde a borda não é o único sinal do controle. */
  --hv-borda-controle: light-dark(#7A8599, #66769A);
  --hv-texto:        light-dark(#161D2C, #E7ECF5);
  --hv-texto-2:      light-dark(#4F5A6D, #A6B0C4);
  --hv-texto-3:      light-dark(#626D82, #7C879C);
  --hv-inverso:      light-dark(#FFFFFF, #0B1220);

  /* ── Identidades internas ─────────────────────────────────────────────── */
  --id-p5000:     #0036AE;
  --id-ultraplan: #002370;
  --id-portal:    #0036AE;
  --id-jarvis:    #0C1117;   /* console JARVIS mantido como está: fundo próprio, pulso teal #45D1B5, âmbar #F3B64A */
  --id-adam:      #1B2233;
  --id-bob:       #3B7DD8;
  --id-eva:       #6B4FBB;
  --id-harness:   #3A4358;
  --id-rico:      #556B8A;

  /* ── Tipografia ───────────────────────────────────────────────────────── */
  --hv-fonte-prosa: "Public Sans Variable", "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --hv-fonte-dados: "Martian Mono Variable", "Martian Mono", ui-monospace, "SF Mono", Menlo, monospace;
  --hv-fonte-impressao: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;

  --hv-t-display: 2.5rem;   /* 40px · número-herói de infográfico */
  --hv-t-h1:      1.75rem;  /* 28px · título de relatório */
  --hv-t-h2:      1.25rem;  /* 20px · seção */
  --hv-t-h3:      1rem;     /* 16px · painel */
  --hv-t-corpo:   0.9375rem;/* 15px */
  --hv-t-tabela:  0.8125rem;/* 13px */
  --hv-t-rotulo:  0.6875rem;/* 11px · caixa alta, tracking 0.06em */
  --hv-t-kpi:     1.75rem;  /* 28px · valor de KPI card */

  /* ── Espaço · forma · profundidade ────────────────────────────────────── */
  --hv-e-1: 4px;  --hv-e-2: 8px;  --hv-e-3: 12px; --hv-e-4: 16px;
  --hv-e-5: 24px; --hv-e-6: 32px; --hv-e-7: 48px;
  --hv-raio-1: 3px;   /* badge, chip, campo */
  --hv-raio-2: 6px;   /* card, painel */
  --hv-raio-3: 12px;  /* tile de identidade */
  --hv-sombra: 0 1px 2px light-dark(rgba(22, 29, 44, 0.08), rgba(0, 0, 0, 0.5)),
               0 2px 8px light-dark(rgba(22, 29, 44, 0.04), rgba(0, 0, 0, 0.35));
  --hv-foco: 0 0 0 2px var(--hv-superficie), 0 0 0 4px var(--hv-azul-texto); /* anel sólido ≥3:1 nos 2 temas (antes alpha .28/.45 = 1,7:1/2,4:1) */
  --hv-transicao: 160ms cubic-bezier(0.2, 0, 0, 1);
}
:root[data-theme="dark"] { color-scheme: dark; }

/* ── Base do documento — Modelo 1 é a superfície do Portal inteiro ───────── */
* { box-sizing: border-box; }
body {
  margin: 0;
  background: var(--hv-fundo);
  color: var(--hv-texto);
  font-family: var(--hv-fonte-prosa);
  font-size: var(--hv-t-corpo);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}
::selection { background: var(--hv-azul); color: #fff; }
/* Anel de foco em box-shadow + outline transparente: em forced-colors (Alto
   Contraste do Windows) o box-shadow é suprimido e o outline transparente vira
   a cor de sistema — o foco de teclado nunca some (revisão Codex, 07-set-26). */
:focus-visible { outline: 2px solid transparent; outline-offset: 1px; box-shadow: var(--hv-foco); border-radius: var(--hv-raio-1); }
html { scrollbar-color: var(--hv-borda-forte) transparent; scrollbar-width: thin; }
.hv-num, .hv-dados { font-family: var(--hv-fonte-dados); font-variant-numeric: tabular-nums; }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; animation: none !important; } }
@media print { :root { --hv-fonte-prosa: var(--hv-fonte-impressao); } }

:root {
  /* Institucional — preservado do v0, fonte única brand.yaml */
  --pgs-brand: #0036AE; --pgs-brand-dark: var(--hv-azul-escuro); --pgs-accent: var(--hv-laranja);
  /* --pgs-ok/--pgs-warn migrados pro par canônico do design system
     institucional unificado v1.0 (--hv-meta/--hv-vigilancia, DESIGN.md
     "Tertiary · semáforo de quatro níveis", 06-set-26): #2f8f3e→#27803A e
     #b9740f→#9c6109. --pgs-critical não muda (já batia com --hv-alerta). */
  --pgs-ok: var(--hv-meta); --pgs-warn: var(--hv-vigilancia); --pgs-critical: var(--hv-alerta); --pgs-neutral: #7f8c8d;
  /* Teal aposentado (decisão do Dr. Paulo, 07-out-26): interação (hover, aba ativa,
     foco, seleção do kanban, botão do login) fala o azul institucional. A 2ª série
     categórica do gráfico mantém o ciano em --hv-serie-ciano (dataviz, nunca status). */
  --pgs-live: var(--hv-azul-texto);
  /* Texto em --pgs-warn (#9c6109 sobre #f2ede1) reprova AA a 11px pela mesma
     razão que o ocre original (#b9740f, achado 3 do gauntlet 05-set-26):
     --pgs-warn-text é a variante SÓ PRA TEXTO (rótulos/avisos), mais escura,
     mantendo a mesma família de cor; --pgs-warn continua servindo fundos de
     badge (.pill--atencao), onde o contraste é outro par. Valor inalterado
     (#7a4c08) — já é o "texto" canônico do DESIGN.md pra Vigilância. */
  --pgs-warn-text: #7a4c08;
  /* Mesmo princípio de --pgs-warn-text acima, pro par verde: --pgs-ok
     (#27803A) sobre --pgs-surface (#fbf8f1) também reprova AA pra texto
     normal (achado 3 do crítico de design, 05-set-26, `.tabela-densa
     td.num-neg`). --pgs-ok-text é a variante só-texto, valor inalterado
     (#1c6329) — já é o "texto" canônico do DESIGN.md pra Meta. */
  --pgs-ok-text: #1c6329;
  /* Texto sobre --pgs-ok/--pgs-warn sólido (badge/barra/arco/filete) — branco
     dá 4,96:1 sobre #27803A e 5,09:1 sobre #9C6109 (fórmula WCAG, conferido
     06-set-26), ambos acima de AA. Mesmo padrão de --pgs-critical-on/
     --pgs-severe-on; migração do design system unificado v1.0, "A Regra do
     Par" — nenhum componente migrado ainda, tokens existem pra uso futuro. */
  --pgs-ok-on: #ffffff; --pgs-warn-on: #ffffff;
  /* Azul institucional quando é TEXTO (nome do produto no login, links). Espelha o
     token --hv-azul-texto do design-system unificado v1.0 (06-set-26): --pgs-brand
     sólido serve de fundo; como texto sobre o canal escuro (#0036AE em #0c1013)
     reprova AA, por isso a variante clareia no tema escuro. 9,26:1 aqui. */
  --pgs-brand-text: var(--hv-azul-texto);
  /* Texto sobre --pgs-critical (selo/badge de fundo sólido) — branco dá 6,23:1
     (fórmula WCAG, conferido 06-set-26), bem acima de AA. O badge em produção
     hoje (.pill--critico) ainda usa #1f0500 hardcoded (3,12:1, abaixo de AA —
     ver DESIGN.md "Erro" no login para o fix local já aplicado ali); este
     token existe para uso futuro, não migra nenhum selo existente sozinho. */
  --pgs-critical-on: #ffffff;
  /* 4º nível de severidade, mais grave que --pgs-critical — do design system
     institucional unificado v1.0 (06-set-26, --hv-critico), ainda sem uso em
     nenhum componente do Portal. -text é a variante só-texto (mesmo padrão de
     --pgs-warn-text/--pgs-ok-text); -on é o texto sobre o sólido (13,0:1). */
  --pgs-severe: var(--hv-critico); --pgs-severe-text: var(--hv-critico-texto); --pgs-severe-on: var(--hv-critico-sobre);

  /* Papel/canal → neutros com viés de azul do sistema (--hv-*), 07-out-26.
     Era o "boletim impresso" bege; hoje é o mesmo fundo/superfície das demais telas. */
  --pgs-bg: var(--hv-fundo); --pgs-surface: var(--hv-superficie); --pgs-border: var(--hv-borda);
  --pgs-text: var(--hv-texto); --pgs-text-dim: var(--hv-texto-3);
  --pgs-head-bg: #1c1a15; --pgs-head-fg: #f2ede1;
  --pgs-shadow: light-dark(rgba(22, 29, 44, 0.08), rgba(0, 0, 0, 0.5));

  --pgs-font-display: "Martian Mono Variable", ui-monospace, "SFMono-Regular", Menlo, monospace;
  --pgs-font-body: "Public Sans Variable", system-ui, sans-serif;
  --pgs-font-mono: "Martian Mono Variable", ui-monospace, monospace;
  --pgs-radius: 3px; --pgs-space: 8px;
}

[data-theme="dark"] {
  /* Semântica, papel/canal, texto de marca e teal vêm de --hv-* (light-dark) no :root
     acima; aqui ficam só os tokens sem equivalente --hv-* idêntico no canal escuro. */
  --pgs-neutral: #7f8c8d;
  /* --pgs-warn já dá 11.39:1 sobre --pgs-bg no escuro — sem necessidade de
     variante própria, mas o token existe pra manter o mesmo par nos 2 temas. */
  --pgs-warn-text: #f4b93f;
  /* --pgs-ok já dá 9.54:1 sobre --pgs-surface no escuro — sem necessidade de
     variante própria, mesmo raciocínio do --pgs-warn-text acima. */
  --pgs-ok-text: #3fd15c;
  --pgs-head-bg: #05070a; --pgs-head-fg: #f4c518;
  --pgs-brand: #6f93ff;
  /* Texto sobre --pgs-critical no canal = a própria tinta de fundo (--pgs-bg). */
  --pgs-critical-on: var(--pgs-bg);
}

/* .card = alias visual de .hv-painel (Modelo 1): superfície, hairline, raio-2,
   sombra. O contrato de espaçamento dos filhos (.card > *) é preservado — 36
   componentes dependem dele. O cabeçalho (.card > h2 e equivalentes) segue
   .hv-painel__cab: título de painel sobre hairline, sem o contador "P.NN"
   do Modelo 3 (dispositivo do registro teletexto, aposentado com ele). */
.card {
  background: var(--hv-superficie); border: 1px solid var(--hv-borda);
  border-radius: var(--hv-raio-2); padding: 0;
  box-shadow: var(--hv-sombra);
  overflow: hidden;
}
.card > h2,
.hero-mp__label,
.hero-rede__label,
.login-card__titulo {
  display: block; margin: 0; padding: 10px 14px;
  background: var(--hv-superficie); color: var(--hv-texto);
  font-family: var(--hv-fonte-prosa); font-size: var(--hv-t-h3); font-weight: 700;
  letter-spacing: 0; text-transform: none; line-height: 1.25;
  border-bottom: 1px solid var(--hv-borda);
}
.card > *:not(h2) { padding-left: 14px; padding-right: 14px; }
.card > *:last-child { padding-bottom: 14px; }
.card > h2 + * { padding-top: 14px; }

/* .pill = alias visual de .hv-badge (Modelo 1). Mapa 3→4 níveis decidido em
   07-set-26: ok→meta, atencao→vigilância, critico→alerta (--hv-critico fica
   reservado ao score CRÍTICO). Pares suave/texto são os AA documentados nos
   tokens; o tema escuro vem do light-dark() — sem override por [data-theme]. */
.pill {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--hv-fonte-prosa); font-size: var(--hv-t-rotulo); font-weight: 700;
  letter-spacing: 0.05em; text-transform: uppercase; line-height: 1.2;
  padding: 3px 8px 3px 7px; border-radius: var(--hv-raio-1);
  border: 1px solid transparent; white-space: nowrap;
  transition: background-color var(--hv-transicao), color var(--hv-transicao);
}
.pill::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.pill--ok { background: var(--hv-meta-suave); color: var(--hv-meta-texto); }
.pill--atencao { background: var(--hv-vigilancia-suave); color: var(--hv-vigilancia-texto); }
.pill--critico { background: var(--hv-alerta-suave); color: var(--hv-alerta-texto); }

.theme-toggle {
  font-family: var(--hv-fonte-dados); font-size: var(--hv-t-rotulo); font-weight: 600;
  letter-spacing: 0.06em; text-transform: uppercase; line-height: 1.2;
  background: var(--hv-superficie); color: var(--hv-texto-2);
  border: 1px solid var(--hv-borda-controle); border-radius: var(--hv-raio-1);
  padding: 5px 10px; cursor: pointer; white-space: nowrap;
  transition: color var(--hv-transicao), border-color var(--hv-transicao), background var(--hv-transicao);
}
.theme-toggle:hover { color: var(--hv-azul-texto); border-color: var(--hv-azul); background: var(--hv-azul-tinta); }
